summaryrefslogtreecommitdiff
path: root/src/cython/test/test_persistence_representations_landscapes_on_grid.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/cython/test/test_persistence_representations_landscapes_on_grid.py')
-rwxr-xr-xsrc/cython/test/test_persistence_representations_landscapes_on_grid.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/src/cython/test/test_persistence_representations_landscapes_on_grid.py b/src/cython/test/test_persistence_representations_landscapes_on_grid.py
new file mode 100755
index 00000000..c03b8312
--- /dev/null
+++ b/src/cython/test/test_persistence_representations_landscapes_on_grid.py
@@ -0,0 +1,120 @@
+import gudhi
+
+"""
+ This file is part of the Gudhi Library. The Gudhi library
+ (Geometric Understanding in Higher Dimensions) is a generic C++
+ library for computational topology.
+
+ Author(s): Pawel Dlotko
+
+ Copyright (C) 2017 Swansea University
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+
+__author__ = "Pawel Dlotko"
+__copyright__ = "Copyright (C) 2017 Swansea University"
+__license__ = "GPL v3"
+
+epsilon = 0.0000005;
+
+
+
+def test_check_construction_of_landscape:
+ l = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram_1", 100,sys.maxsize)
+ l.print_to_file("landscape_from_file_with_diagram_1")
+ g = gudhi.PersistenceLandscapeOnGrid
+ g.load_landscape_from_file("landscape_from_file_with_diagram_1")
+ assert l == g
+
+
+def test_check_construction_of_landscape_using_only_ten_levels:
+ number = 10
+ gudhi.PersistenceLandscapeOnGrid l("data/file_with_diagram_1", 100, number)
+ gudhi.PersistenceLandscapeOnGrid g("data/file_with_diagram_1", 100, sys.maxsize)
+ for level in range(0,number):
+ v1 = l.vectorize(level)
+ v2 = g.vectorize(level)
+ assert v1 == v2
+
+def test_check_computations_of_integrals:
+ p = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram_1", 100, sys.maxsize)
+ integral = p.compute_integral_of_landscape()
+ assert fabs(integral - 27.343) <= 0.00005
+
+def test_check_computations_of_integrals_for_each_level_separatelly:
+ p = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram_1", 100, sys.maxsize)
+ integrals_fir_different_levels = [0.241168,0.239276,0.237882,0.235193,0.230115,0.227626,0.226132.0.223643,0.221651,0.220556,0.21727,0.215976,0.213685,0.211993,0.2102,0.208707,0.207014,0.205122,0.204226,0.202633]
+ for level in range(0,len(integrals_fir_different_levels))
+ integral = p.compute_integral_of_landscape(level);
+ assert fabs(integral - integrals_fir_different_levels[level]) <= 0.00005
+
+def test_check_computations_of_integrals_of_powers_of_landscape:
+ p = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram_1", 100, sys.maxsize)
+ integrals_fir_different_powers = [0.241168,0.239276,0.237882,0.235193,0.23011]
+ for power in range(0:5):
+ integral = p.compute_integral_of_landscape(power)
+ assert fabs(integral - integrals_fir_different_powers[power]) <= 0.00001
+
+def test_check_computations_of_values_on_different_points:
+ p = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram_1", 100, sys.maxsize)
+ results_level_0 = [0.00997867,0.0521921,0.104312,0.156432,0.208552,0.260672,0.312792,0.364912,0.417032,0.429237]
+ results_level_10 = [7.21433e-05,0.0422135,0.0943335,0.146453,0.198573,0.240715,0.272877,0.324997,0.359232,0.379344]
+ double x = 0.0012321;
+ double dx = 0.05212;
+ for i in range(0,10):
+ assert almost_equal(p.compute_value_at_a_given_point(0, x), results_level_0[i]));
+ assert almost_equal(p.compute_value_at_a_given_point(10, x), results_level_10[i]));
+ x += dx;
+
+def test_check_computations_of_maxima_and_norms:
+ p = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram_1", 0., 1., 100)
+ second = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram_2", 0., 1., 100)
+ assert fabs(p.compute_maximum() - 0.46) <= 0.00001
+ assert fabs(p.compute_norm_of_landscape(1) - 27.3373) <= 0.00001
+ assert fabs(p.compute_norm_of_landscape(2) - 1.84143) <= 0.00001
+ assert fabs(p.compute_norm_of_landscape(3) - 0.927067) <= 0.00001
+
+def test_check_default_parameters_of_distances:
+ diag = read_persistence_intervals_in_dimension("data/file_with_diagram")
+ p = gudhi.PersistenceLandscapeOnGrid(diag, 0., 1., 100)
+ diag1 = read_persistence_intervals_in_dimension("data/file_with_diagram_1")
+ q = gudhi.PersistenceLandscapeOnGrid(diag1, 0., 1., 100)
+ dist_numeric_limit_max = p.distance(q, sys.maxsize);
+ dist_infinity = p.distance(q, sys.maxsize);
+ assert dist_numeric_limit_max == dist_infinity
+
+def test_check_computations_of_averages:
+ p = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram", 0., 1., 100)
+ q = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram_1", 0., 1., 100)
+ av = gudhi.PersistenceLandscapeOnGrid
+ av.compute_average({&p, &q)
+
+ template_average = gudhi.PersistenceLandscapeOnGrid
+ template_average.load_landscape_from_file("data/average_on_a_grid")
+ assert template_average == av
+
+
+def test_check_computations_of_distances:
+ p = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram", 0., 1., 10000)
+ q = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram_1", 0., 1., 10000)
+ assert fabs(p.distance(q) - 25.5779) <= 0.00005
+ assert fabs(p.distance(q, 2) - 2.04891) <= 0.00001
+ assert fabs(p.distance(q, sys.maxsize) - 0.359) <= 0.00001
+
+
+def test_check_computations_of_scalar_product:
+ p = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram", 0., 1., 10000)
+ q = gudhi.PersistenceLandscapeOnGrid("data/file_with_diagram_1", 0., 1., 10000)
+ assert almost_equal(p.compute_scalar_product(q), 0.754367)