From 6f6a2f71b6ae33cd37719ad13006699ad78fcc84 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 3 Feb 2017 11:57:56 +0000 Subject: Automatic examples documentation page generation alpha_rips_persistence_bottleneck_distance example for python Add intervals_in_dim function for simplex tree git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/ST_cythonize@2055 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 460fbe5db9f0c08776952106e729a21460bec36f --- .../alpha_rips_persistence_bottleneck_distance.py | 102 +++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100755 src/cython/example/alpha_rips_persistence_bottleneck_distance.py (limited to 'src/cython/example/alpha_rips_persistence_bottleneck_distance.py') diff --git a/src/cython/example/alpha_rips_persistence_bottleneck_distance.py b/src/cython/example/alpha_rips_persistence_bottleneck_distance.py new file mode 100755 index 00000000..04a59b44 --- /dev/null +++ b/src/cython/example/alpha_rips_persistence_bottleneck_distance.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python + +import gudhi +import argparse +import math + +"""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): Vincent Rouvreau + + Copyright (C) 2016 INRIA + + 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 . +""" + +__author__ = "Vincent Rouvreau" +__copyright__ = "Copyright (C) 2016 INRIA" +__license__ = "GPL v3" + +parser = argparse.ArgumentParser(description='AlphaComplex and RipsComplex ' + 'persistence creation from points read in ' + 'a OFF file. Bottleneck distance computation' + ' on each dimension', + epilog='Example: ' + 'example/alpha_rips_persistence_bottleneck_distance.py ' + '-f ../data/points/tore3D_1307.off -t 0.15 -d 3') +parser.add_argument("-f", "--file", type=str, required=True) +parser.add_argument("-t", "--threshold", type=float, default=0.5) +parser.add_argument("-d", "--max_dimension", type=int, default=1) + +args = parser.parse_args() +print(repr(float('inf'))) +print(repr(math.sqrt(float('inf')))) +with open(args.file, 'r') as f: + first_line = f.readline() + if (first_line == 'OFF\n') or (first_line == 'nOFF\n'): + print("#####################################################################") + print("RipsComplex creation from points read in a OFF file") + + message = "RipsComplex with max_edge_length=" + repr(args.threshold) + print(message) + + rips_complex = gudhi.RipsComplex(off_file=args.file, + max_edge_length=args.threshold) + + rips_stree = rips_complex.create_simplex_tree(max_dimension=args.max_dimension) + + message = "Number of simplices=" + repr(rips_stree.num_simplices()) + print(message) + + rips_diag = rips_stree.persistence() + + print("#####################################################################") + print("AlphaComplex creation from points read in a OFF file") + + message = "AlphaComplex with max_edge_length=" + repr(args.threshold) + print(message) + + alpha_complex = gudhi.AlphaComplex(off_file=args.file) + alpha_stree = alpha_complex.create_simplex_tree(max_alpha_square=(args.threshold * args.threshold)) + + message = "Number of simplices=" + repr(alpha_stree.num_simplices()) + print(message) + + alpha_diag = alpha_stree.persistence() + + max_b_distance = 0.0 + for dim in range(args.max_dimension): + # Alpha persistence values needs to be transform because filtration + # values are alpha square values + funcs = [math.sqrt, math.sqrt] + alpha_intervals = [] + for interval in alpha_stree.intervals_in_dim(dim): + alpha_intervals.append(map(lambda func,value: func(value), funcs, interval)) + + rips_intervals = rips_stree.intervals_in_dim(dim) + bottleneck_distance = gudhi.bottleneck_distance(rips_intervals, alpha_intervals) + message = "In dimension " + repr(dim) + ", bottleneck distance = " + repr(bottleneck_distance) + print(message) + max_b_distance = max(bottleneck_distance, max_b_distance) + + print("================================================================================") + message = "Bottleneck distance is " + repr(max_b_distance) + print(message) + + else: + print(args.file, "is not a valid OFF file") + + f.close() -- cgit v1.2.3 From 30374ed5154610dc63198742220153aa9387139c Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Mon, 20 Mar 2017 15:48:04 +0000 Subject: Rename barcode_persistence and diagram_persistence functions git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/ST_cythonize@2204 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: f91e283fa6b6b02198ae28a44f41bd761c1c1f48 --- src/cython/cython/persistence_graphical_tools.py | 4 ++-- src/cython/doc/persistence_graphical_tools_ref.rst | 4 ++-- src/cython/doc/persistence_graphical_tools_user.rst | 8 ++++---- src/cython/doc/pyplots/barcode_persistence.py | 2 +- src/cython/doc/pyplots/diagram_persistence.py | 2 +- .../alpha_complex_diagram_persistence_from_off_file_example.py | 2 +- src/cython/example/alpha_rips_persistence_bottleneck_distance.py | 2 -- ...g_witness_complex_diagram_persistence_from_off_file_example.py | 4 ++-- ...n_witness_complex_diagram_persistence_from_off_file_example.py | 4 ++-- src/cython/example/gudhi_graphical_tools_example.py | 4 ++-- ...bical_complex_barcode_persistence_from_perseus_file_example.py | 2 +- ...mplex_diagram_persistence_from_distance_matrix_file_example.py | 2 +- .../rips_complex_diagram_persistence_from_off_file_example.py | 2 +- src/cython/example/rips_persistence_diagram.py | 2 +- .../tangential_complex_plain_homology_from_off_file_example.py | 2 +- 15 files changed, 22 insertions(+), 24 deletions(-) (limited to 'src/cython/example/alpha_rips_persistence_bottleneck_distance.py') diff --git a/src/cython/cython/persistence_graphical_tools.py b/src/cython/cython/persistence_graphical_tools.py index 2a3d9f63..d7287a66 100755 --- a/src/cython/cython/persistence_graphical_tools.py +++ b/src/cython/cython/persistence_graphical_tools.py @@ -73,7 +73,7 @@ def show_palette_values(alpha=0.6): plt.show() -def barcode_persistence(persistence, alpha=0.6): +def plot_barcode_persistence(persistence, alpha=0.6): """This function plots the persistence bar code. :param persistence: The persistence to plot. @@ -108,7 +108,7 @@ def barcode_persistence(persistence, alpha=0.6): plt.axis([axis_start, infinity, 0, ind]) plt.show() -def diagram_persistence(persistence, alpha=0.6): +def plot_diagram_persistence(persistence, alpha=0.6): """This function plots the persistence diagram. :param persistence: The persistence to plot. diff --git a/src/cython/doc/persistence_graphical_tools_ref.rst b/src/cython/doc/persistence_graphical_tools_ref.rst index a12021c4..3d7e4fc7 100644 --- a/src/cython/doc/persistence_graphical_tools_ref.rst +++ b/src/cython/doc/persistence_graphical_tools_ref.rst @@ -4,5 +4,5 @@ Persistence graphical tools reference manual .. autofunction:: gudhi.__min_birth_max_death .. autofunction:: gudhi.show_palette_values -.. autofunction:: gudhi.barcode_persistence -.. autofunction:: gudhi.diagram_persistence +.. autofunction:: gudhi.plot_barcode_persistence +.. autofunction:: gudhi.plot_diagram_persistence diff --git a/src/cython/doc/persistence_graphical_tools_user.rst b/src/cython/doc/persistence_graphical_tools_user.rst index 1a5195c5..2644aa11 100644 --- a/src/cython/doc/persistence_graphical_tools_user.rst +++ b/src/cython/doc/persistence_graphical_tools_user.rst @@ -33,7 +33,7 @@ This function can display the persistence result as a barcode: periodic_cc = gudhi.PeriodicCubicalComplex(perseus_file='3d_torus.txt') diag = periodic_cc.persistence() - gudhi.barcode_persistence(diag) + gudhi.plot_barcode_persistence(diag) .. plot:: @@ -41,7 +41,7 @@ This function can display the persistence result as a barcode: periodic_cc = gudhi.PeriodicCubicalComplex(perseus_file='3d_torus.txt') diag = periodic_cc.persistence() - gudhi.barcode_persistence(diag) + gudhi.plot_barcode_persistence(diag) Show persistence as a diagram ----------------------------- @@ -55,7 +55,7 @@ This function can display the persistence result as a diagram: rips_complex = gudhi.RipsComplex(off_file='tore3D_300.off', max_edge_length=2.0) simplex_tree = rips_complex.create_simplex_tree(max_dimension=3) diag = simplex_tree.persistence() - gudhi.diagram_persistence(diag) + gudhi.plot_diagram_persistence(diag) .. plot:: @@ -64,4 +64,4 @@ This function can display the persistence result as a diagram: rips_complex = gudhi.RipsComplex(off_file='tore3D_300.off', max_edge_length=2.0) simplex_tree = rips_complex.create_simplex_tree(max_dimension=3) diag = simplex_tree.persistence() - gudhi.diagram_persistence(diag) + gudhi.plot_diagram_persistence(diag) diff --git a/src/cython/doc/pyplots/barcode_persistence.py b/src/cython/doc/pyplots/barcode_persistence.py index 95bbd343..9fcb33d0 100755 --- a/src/cython/doc/pyplots/barcode_persistence.py +++ b/src/cython/doc/pyplots/barcode_persistence.py @@ -2,4 +2,4 @@ import gudhi periodic_cc = gudhi.PeriodicCubicalComplex(perseus_file='../3d_torus.txt') diag = periodic_cc.persistence() -gudhi.barcode_persistence(diag) +gudhi.plot_barcode_persistence(diag) diff --git a/src/cython/doc/pyplots/diagram_persistence.py b/src/cython/doc/pyplots/diagram_persistence.py index b006b0bf..fbb6e60b 100755 --- a/src/cython/doc/pyplots/diagram_persistence.py +++ b/src/cython/doc/pyplots/diagram_persistence.py @@ -2,4 +2,4 @@ import gudhi alpha_complex = gudhi.AlphaComplex(off_file='../tore3D_300.off') diag = alpha_complex.persistence() -gudhi.diagram_persistence(diag) +gudhi.plot_diagram_persistence(diag) diff --git a/src/cython/example/alpha_complex_diagram_persistence_from_off_file_example.py b/src/cython/example/alpha_complex_diagram_persistence_from_off_file_example.py index ae03aa67..9714b382 100755 --- a/src/cython/example/alpha_complex_diagram_persistence_from_off_file_example.py +++ b/src/cython/example/alpha_complex_diagram_persistence_from_off_file_example.py @@ -63,7 +63,7 @@ with open(args.file, 'r') as f: print(simplex_tree.betti_numbers()) if args.no_diagram == False: - gudhi.diagram_persistence(diag) + gudhi.plot_diagram_persistence(diag) else: print(args.file, "is not a valid OFF file") diff --git a/src/cython/example/alpha_rips_persistence_bottleneck_distance.py b/src/cython/example/alpha_rips_persistence_bottleneck_distance.py index 04a59b44..cd64704b 100755 --- a/src/cython/example/alpha_rips_persistence_bottleneck_distance.py +++ b/src/cython/example/alpha_rips_persistence_bottleneck_distance.py @@ -42,8 +42,6 @@ parser.add_argument("-t", "--threshold", type=float, default=0.5) parser.add_argument("-d", "--max_dimension", type=int, default=1) args = parser.parse_args() -print(repr(float('inf'))) -print(repr(math.sqrt(float('inf')))) with open(args.file, 'r') as f: first_line = f.readline() if (first_line == 'OFF\n') or (first_line == 'nOFF\n'): diff --git a/src/cython/example/euclidean_strong_witness_complex_diagram_persistence_from_off_file_example.py b/src/cython/example/euclidean_strong_witness_complex_diagram_persistence_from_off_file_example.py index 6c3e3a8a..3addf708 100755 --- a/src/cython/example/euclidean_strong_witness_complex_diagram_persistence_from_off_file_example.py +++ b/src/cython/example/euclidean_strong_witness_complex_diagram_persistence_from_off_file_example.py @@ -34,7 +34,7 @@ parser = argparse.ArgumentParser(description='EuclideanStrongWitnessComplex crea epilog='Example: ' 'example/witness_complex_diagram_persistence_from_off_file_example.py ' '-f ../data/points/tore3D_300.off -a 1.0 -n 20 -d 2' - '- Constructs a alpha complex with the ' + '- Constructs a strong witness complex with the ' 'points from the given OFF file.') parser.add_argument("-f", "--file", type=str, required=True) parser.add_argument("-a", "--max_alpha_square", type=float, required=True) @@ -70,7 +70,7 @@ with open(args.file, 'r') as f: print(simplex_tree.betti_numbers()) if args.no_diagram == False: - gudhi.diagram_persistence(diag) + gudhi.plot_diagram_persistence(diag) else: print(args.file, "is not a valid OFF file") diff --git a/src/cython/example/euclidean_witness_complex_diagram_persistence_from_off_file_example.py b/src/cython/example/euclidean_witness_complex_diagram_persistence_from_off_file_example.py index 7f04a98e..1e7d788a 100755 --- a/src/cython/example/euclidean_witness_complex_diagram_persistence_from_off_file_example.py +++ b/src/cython/example/euclidean_witness_complex_diagram_persistence_from_off_file_example.py @@ -34,7 +34,7 @@ parser = argparse.ArgumentParser(description='EuclideanWitnessComplex creation f epilog='Example: ' 'example/witness_complex_diagram_persistence_from_off_file_example.py ' '-f ../data/points/tore3D_300.off -a 1.0 -n 20 -d 2' - '- Constructs a alpha complex with the ' + '- Constructs a weak witness complex with the ' 'points from the given OFF file.') parser.add_argument("-f", "--file", type=str, required=True) parser.add_argument("-a", "--max_alpha_square", type=float, required=True) @@ -70,7 +70,7 @@ with open(args.file, 'r') as f: print(simplex_tree.betti_numbers()) if args.no_diagram == False: - gudhi.diagram_persistence(diag) + gudhi.plot_diagram_persistence(diag) else: print(args.file, "is not a valid OFF file") diff --git a/src/cython/example/gudhi_graphical_tools_example.py b/src/cython/example/gudhi_graphical_tools_example.py index 40558bee..f1aa5d73 100755 --- a/src/cython/example/gudhi_graphical_tools_example.py +++ b/src/cython/example/gudhi_graphical_tools_example.py @@ -39,9 +39,9 @@ print("Show barcode persistence example") persistence = [(2, (1.0, float('inf'))), (1, (1.4142135623730951, float('inf'))), (1, (1.4142135623730951, float('inf'))), (0, (0.0, float('inf'))), (0, (0.0, 1.0)), (0, (0.0, 1.0)), (0, (0.0, 1.0))] -gudhi.barcode_persistence(persistence) +gudhi.plot_barcode_persistence(persistence) print("#####################################################################") print("Show diagram persistence example") -gudhi.diagram_persistence(persistence) +gudhi.plot_diagram_persistence(persistence) diff --git a/src/cython/example/periodic_cubical_complex_barcode_persistence_from_perseus_file_example.py b/src/cython/example/periodic_cubical_complex_barcode_persistence_from_perseus_file_example.py index a9545ee9..128706b2 100755 --- a/src/cython/example/periodic_cubical_complex_barcode_persistence_from_perseus_file_example.py +++ b/src/cython/example/periodic_cubical_complex_barcode_persistence_from_perseus_file_example.py @@ -71,6 +71,6 @@ if is_file_perseus(args.file): print("betti_numbers()=") print(periodic_cubical_complex.betti_numbers()) if args.no_barcode == False: - gudhi.barcode_persistence(diag) + gudhi.plot_barcode_persistence(diag) else: print(args.file, "is not a valid perseus style file") diff --git a/src/cython/example/rips_complex_diagram_persistence_from_distance_matrix_file_example.py b/src/cython/example/rips_complex_diagram_persistence_from_distance_matrix_file_example.py index 2b726f90..5f1416be 100755 --- a/src/cython/example/rips_complex_diagram_persistence_from_distance_matrix_file_example.py +++ b/src/cython/example/rips_complex_diagram_persistence_from_distance_matrix_file_example.py @@ -64,7 +64,7 @@ with open(args.file, 'r') as f: print(simplex_tree.betti_numbers()) if args.no_diagram == False: - gudhi.diagram_persistence(diag) + gudhi.plot_diagram_persistence(diag) else: print(args.file, "is not a valid OFF file") diff --git a/src/cython/example/rips_complex_diagram_persistence_from_off_file_example.py b/src/cython/example/rips_complex_diagram_persistence_from_off_file_example.py index eb1c4ed5..4f888e77 100755 --- a/src/cython/example/rips_complex_diagram_persistence_from_off_file_example.py +++ b/src/cython/example/rips_complex_diagram_persistence_from_off_file_example.py @@ -64,7 +64,7 @@ with open(args.file, 'r') as f: print(simplex_tree.betti_numbers()) if args.no_diagram == False: - gudhi.diagram_persistence(diag) + gudhi.plot_diagram_persistence(diag) else: print(args.file, "is not a valid OFF file") diff --git a/src/cython/example/rips_persistence_diagram.py b/src/cython/example/rips_persistence_diagram.py index e485b2f5..3d51f379 100755 --- a/src/cython/example/rips_persistence_diagram.py +++ b/src/cython/example/rips_persistence_diagram.py @@ -39,4 +39,4 @@ simplex_tree = rips.create_simplex_tree(max_dimension=1) diag = simplex_tree.persistence(homology_coeff_field=2, min_persistence=0) print("diag=", diag) -gudhi.diagram_persistence(diag) +gudhi.plot_diagram_persistence(diag) diff --git a/src/cython/example/tangential_complex_plain_homology_from_off_file_example.py b/src/cython/example/tangential_complex_plain_homology_from_off_file_example.py index be4c40be..a3fc9911 100755 --- a/src/cython/example/tangential_complex_plain_homology_from_off_file_example.py +++ b/src/cython/example/tangential_complex_plain_homology_from_off_file_example.py @@ -59,7 +59,7 @@ with open(args.file, 'r') as f: print(st.betti_numbers()) if args.no_diagram == False: - gudhi.diagram_persistence(diag) + gudhi.plot_diagram_persistence(diag) else: print(args.file, "is not a valid OFF file") -- cgit v1.2.3 From 33e5406c0f1b6a74ac8a3246cdb72ae879bb4339 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Mon, 20 Mar 2017 16:29:05 +0000 Subject: rename persistence function intervals_in_dim with persistence_intervals_in_dimension git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/ST_cythonize@2209 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 7991f11d249a2051d0cb6e7f453b1d6b7bcb7c36 --- src/cython/cython/cubical_complex.pyx | 2 +- src/cython/cython/periodic_cubical_complex.pyx | 2 +- src/cython/cython/simplex_tree.pyx | 2 +- src/cython/example/alpha_rips_persistence_bottleneck_distance.py | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/cython/example/alpha_rips_persistence_bottleneck_distance.py') diff --git a/src/cython/cython/cubical_complex.pyx b/src/cython/cython/cubical_complex.pyx index 6f576176..e1344f49 100644 --- a/src/cython/cython/cubical_complex.pyx +++ b/src/cython/cython/cubical_complex.pyx @@ -176,7 +176,7 @@ cdef class CubicalComplex: pbn_result = self.pcohptr.persistent_betti_numbers(from_value, to_value) return pbn_result - def intervals_in_dim(self, dimension): + def persistence_intervals_in_dimension(self, dimension): """This function returns the persistence intervals of the simplicial complex in a specific dimension. diff --git a/src/cython/cython/periodic_cubical_complex.pyx b/src/cython/cython/periodic_cubical_complex.pyx index af72024a..1445d429 100644 --- a/src/cython/cython/periodic_cubical_complex.pyx +++ b/src/cython/cython/periodic_cubical_complex.pyx @@ -176,7 +176,7 @@ cdef class PeriodicCubicalComplex: pbn_result = self.pcohptr.persistent_betti_numbers(from_value, to_value) return pbn_result - def intervals_in_dim(self, dimension): + def persistence_intervals_in_dimension(self, dimension): """This function returns the persistence intervals of the simplicial complex in a specific dimension. diff --git a/src/cython/cython/simplex_tree.pyx b/src/cython/cython/simplex_tree.pyx index 6bf0a159..c0016461 100644 --- a/src/cython/cython/simplex_tree.pyx +++ b/src/cython/cython/simplex_tree.pyx @@ -361,7 +361,7 @@ cdef class SimplexTree: " to be launched first.") return pbn_result - def intervals_in_dim(self, dimension): + def persistence_intervals_in_dimension(self, dimension): """This function returns the persistence intervals of the simplicial complex in a specific dimension. diff --git a/src/cython/example/alpha_rips_persistence_bottleneck_distance.py b/src/cython/example/alpha_rips_persistence_bottleneck_distance.py index cd64704b..ab5fc1e9 100755 --- a/src/cython/example/alpha_rips_persistence_bottleneck_distance.py +++ b/src/cython/example/alpha_rips_persistence_bottleneck_distance.py @@ -81,10 +81,10 @@ with open(args.file, 'r') as f: # values are alpha square values funcs = [math.sqrt, math.sqrt] alpha_intervals = [] - for interval in alpha_stree.intervals_in_dim(dim): + for interval in alpha_stree.persistence_intervals_in_dimension(dim): alpha_intervals.append(map(lambda func,value: func(value), funcs, interval)) - rips_intervals = rips_stree.intervals_in_dim(dim) + rips_intervals = rips_stree.persistence_intervals_in_dimension(dim) bottleneck_distance = gudhi.bottleneck_distance(rips_intervals, alpha_intervals) message = "In dimension " + repr(dim) + ", bottleneck distance = " + repr(bottleneck_distance) print(message) -- cgit v1.2.3