From 3ffe80a4d17b59422dab18b0898e3f9ca4131672 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Wed, 22 Mar 2017 07:39:11 +0000 Subject: Interface insert_simplex and insert_simplex_and_subfaces in SimplexTree git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/ST_cythonize@2217 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 1e426a8cbcba192a50b05b5cc7fa4a0fd50d8c9b --- src/cython/cython/simplex_tree.pyx | 20 ++++++++++++++++- src/cython/doc/simplex_tree_user.rst | 6 ++--- src/cython/include/Simplex_tree_interface.h | 13 +++++++++++ src/cython/test/test_simplex_tree.py | 34 ++++++++++++++--------------- 4 files changed, 52 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/cython/cython/simplex_tree.pyx b/src/cython/cython/simplex_tree.pyx index 489c711f..4e23fbde 100644 --- a/src/cython/cython/simplex_tree.pyx +++ b/src/cython/cython/simplex_tree.pyx @@ -46,6 +46,7 @@ cdef extern from "Simplex_tree_interface.h" namespace "Gudhi": bint find_simplex(vector[int] simplex) bint insert_simplex_and_subfaces(vector[int] simplex, double filtration) + bint insert_simplex(vector[int] simplex, double filtration) vector[pair[vector[int], double]] get_filtered_tree() vector[pair[vector[int], double]] get_skeleton_tree(int dimension) vector[pair[vector[int], double]] get_stars(vector[int] simplex) @@ -196,10 +197,27 @@ cdef class SimplexTree: complex.push_back(i) return self.thisptr.find_simplex(complex) - def insert(self, simplex, filtration=0.0): + def insert_simplex(self, simplex, filtration=0.0): """This function inserts the given N-simplex with the given filtration value (default value is '0.0'). + :param simplex: The N-simplex to insert, represented by a list of + vertex. + :type simplex: list of int. + :param filtration: The filtration value of the simplex. + :type filtration: float. + :returns: true if the simplex was found, false otherwise. + :rtype: bool + """ + cdef vector[int] complex + for i in simplex: + complex.push_back(i) + return self.thisptr.insert_simplex(complex, filtration) + + def insert_simplex_and_subfaces(self, simplex, filtration=0.0): + """This function inserts the given N-simplex and its subfaces with the + given filtration value (default value is '0.0'). + :param simplex: The N-simplex to insert, represented by a list of vertex. :type simplex: list of int. diff --git a/src/cython/doc/simplex_tree_user.rst b/src/cython/doc/simplex_tree_user.rst index 3a00f1ac..6b55c4e7 100644 --- a/src/cython/doc/simplex_tree_user.rst +++ b/src/cython/doc/simplex_tree_user.rst @@ -35,9 +35,9 @@ Example import gudhi st = gudhi.SimplexTree() - if st.insert([0, 1]): + if st.insert_simplex([0, 1]): print("[0, 1] inserted") - if st.insert([0, 1, 2], filtration=4.0): + if st.insert_simplex_and_subfaces([0, 1, 2], filtration=4.0): print("[0, 1, 2] inserted") if st.find([0, 1]): print("[0, 1] found") @@ -63,5 +63,5 @@ The output is: ([0, 2], 4.0) ([0], 0.0) ([1, 2], 4.0) - ([1], 0.0) + ([1], 4.0) ([2], 4.0) diff --git a/src/cython/include/Simplex_tree_interface.h b/src/cython/include/Simplex_tree_interface.h index 8e156be3..6a35684d 100644 --- a/src/cython/include/Simplex_tree_interface.h +++ b/src/cython/include/Simplex_tree_interface.h @@ -53,12 +53,25 @@ class Simplex_tree_interface : public Simplex_tree { return (Base::find(vh) != Base::null_simplex()); } + bool insert_simplex(const Simplex& simplex, Filtration_value filtration = 0) { + Insertion_result result = Base::insert_simplex(simplex, filtration); + Base::initialize_filtration(); + return (result.second); + } + bool insert_simplex_and_subfaces(const Simplex& simplex, Filtration_value filtration = 0) { Insertion_result result = Base::insert_simplex_and_subfaces(simplex, filtration); Base::initialize_filtration(); return (result.second); } + // Do not interface this function, only used in strong witness interface for complex creation + bool insert_simplex(const std::vector& complex, Filtration_value filtration = 0) { + Insertion_result result = Base::insert_simplex(complex, filtration); + Base::initialize_filtration(); + return (result.second); + } + // Do not interface this function, only used in strong witness interface for complex creation bool insert_simplex_and_subfaces(const std::vector& complex, Filtration_value filtration = 0) { Insertion_result result = Base::insert_simplex_and_subfaces(complex, filtration); diff --git a/src/cython/test/test_simplex_tree.py b/src/cython/test/test_simplex_tree.py index db61f84c..af5b639a 100755 --- a/src/cython/test/test_simplex_tree.py +++ b/src/cython/test/test_simplex_tree.py @@ -33,8 +33,8 @@ def test_insertion(): assert st.__is_persistence_defined() == False # insert test - assert st.insert([0, 1]) == True - assert st.insert([0, 1, 2], filtration=4.0) == True + assert st.insert_simplex([0, 1]) == True + assert st.insert_simplex_and_subfaces([0, 1, 2], filtration=4.0) == True # FIXME: Remove this line st.set_dimension(2) assert st.num_simplices() == 7 @@ -62,24 +62,24 @@ def test_insertion(): assert st.filtration([2]) == 4.0 assert st.filtration([0, 1]) == 0.0 assert st.filtration([0]) == 0.0 - assert st.filtration([1]) == 0.0 + assert st.filtration([1]) == 4.0 # skeleton_tree test assert st.get_skeleton_tree(2) == \ [([0, 1, 2], 4.0), ([0, 1], 0.0), ([0, 2], 4.0), - ([0], 0.0), ([1, 2], 4.0), ([1], 0.0), ([2], 4.0)] + ([0], 0.0), ([1, 2], 4.0), ([1], 4.0), ([2], 4.0)] assert st.get_skeleton_tree(1) == \ [([0, 1], 0.0), ([0, 2], 4.0), ([0], 0.0), - ([1, 2], 4.0), ([1], 0.0), ([2], 4.0)] + ([1, 2], 4.0), ([1], 4.0), ([2], 4.0)] assert st.get_skeleton_tree(0) == \ - [([0], 0.0), ([1], 0.0), ([2], 4.0)] + [([0], 0.0), ([1], 4.0), ([2], 4.0)] # remove_maximal_simplex test assert st.get_cofaces([0, 1, 2], 1) == [] st.remove_maximal_simplex([0, 1, 2]) assert st.get_skeleton_tree(2) == \ [([0, 1], 0.0), ([0, 2], 4.0), ([0], 0.0), - ([1, 2], 4.0), ([1], 0.0), ([2], 4.0)] + ([1, 2], 4.0), ([1], 4.0), ([2], 4.0)] assert st.find([0, 1, 2]) == False assert st.find([0, 1]) == True assert st.find([0, 2]) == True @@ -103,16 +103,16 @@ def test_expansion(): assert st.__is_persistence_defined() == False # insert test - assert st.insert([3, 2], 0.1) == True - assert st.insert([2, 0], 0.2) == True - assert st.insert([1, 0], 0.3) == True - assert st.insert([3, 1], 0.4) == True - assert st.insert([2, 1], 0.5) == True - assert st.insert([6, 5], 0.6) == True - assert st.insert([4, 2], 0.7) == True - assert st.insert([3, 0], 0.8) == True - assert st.insert([6, 4], 0.9) == True - assert st.insert([6, 3], 1.0) == True + assert st.insert_simplex_and_subfaces([3, 2], 0.1) == True + assert st.insert_simplex_and_subfaces([2, 0], 0.2) == True + assert st.insert_simplex_and_subfaces([1, 0], 0.3) == True + assert st.insert_simplex_and_subfaces([3, 1], 0.4) == True + assert st.insert_simplex_and_subfaces([2, 1], 0.5) == True + assert st.insert_simplex_and_subfaces([6, 5], 0.6) == True + assert st.insert_simplex_and_subfaces([4, 2], 0.7) == True + assert st.insert_simplex_and_subfaces([3, 0], 0.8) == True + assert st.insert_simplex_and_subfaces([6, 4], 0.9) == True + assert st.insert_simplex_and_subfaces([6, 3], 1.0) == True assert st.num_vertices() == 7 assert st.num_simplices() == 17 -- cgit v1.2.3