From c829c36217c003b2068750aa8f23b6082636e6e1 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 16 Feb 2016 16:53:28 +0000 Subject: Mini Simplex tree fix git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/ST_cythonize@1027 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 0b5933295c0e486f4f4541f8e82aff653ce9083c --- src/cython/gudhi.pyx | 105 ++++++++++++++++++++++++++++++++++++++++++++++++--- src/cython/main.py | 8 ++-- 2 files changed, 103 insertions(+), 10 deletions(-) (limited to 'src/cython') diff --git a/src/cython/gudhi.pyx b/src/cython/gudhi.pyx index ae9669f4..dd87f4bb 100644 --- a/src/cython/gudhi.pyx +++ b/src/cython/gudhi.pyx @@ -4,6 +4,7 @@ from libcpp.utility cimport pair cimport cgudhi + # SimplexTree python interface cdef class SimplexTree: cdef cgudhi.Simplex_tree_interface[cgudhi.Simplex_tree_options_full_featured] *thisptr @@ -37,17 +38,57 @@ cdef class SimplexTree: complex.push_back(i) return self.thisptr.find_simplex(complex) def insert(self, simplex, filtration = 0.0): - return self.thisptr.insert_simplex(simplex, filtration) + cdef vector[int] complex + for i in simplex: + complex.push_back(i) + return self.thisptr.insert_simplex(complex, filtration) def insert_with_subfaces(self, simplex, filtration = 0.0): - return self.thisptr.insert_simplex_and_subfaces(simplex, filtration) + cdef vector[int] complex + for i in simplex: + complex.push_back(i) + return self.thisptr.insert_simplex_and_subfaces(complex, filtration) def get_filtered_tree(self): - return self.thisptr.get_filtered_tree() + cdef vector[pair[vector[int], double]] coface_tree = self.thisptr.get_filtered_tree() + ct = [] + for filtered_complex in coface_tree: + v = [] + for vertex in filtered_complex.first: + v.append(vertex) + ct.append((v,filtered_complex.second)) + return ct def get_skeleton_tree(self, dim): - return self.thisptr.get_skeleton_tree(dim) + cdef vector[pair[vector[int], double]] coface_tree = self.thisptr.get_skeleton_tree(dim) + ct = [] + for filtered_complex in coface_tree: + v = [] + for vertex in filtered_complex.first: + v.append(vertex) + ct.append((v,filtered_complex.second)) + return ct def get_star_tree(self, simplex): - return self.thisptr.get_star_tree(simplex) + cdef vector[int] complex + for i in simplex: + complex.push_back(i) + cdef vector[pair[vector[int], double]] coface_tree = self.thisptr.get_star_tree(complex) + ct = [] + for filtered_complex in coface_tree: + v = [] + for vertex in filtered_complex.first: + v.append(vertex) + ct.append((v,filtered_complex.second)) + return ct def get_coface_tree(self, simplex, dim): - return self.thisptr.get_coface_tree(simplex, dim) + cdef vector[int] complex + for i in simplex: + complex.push_back(i) + cdef vector[pair[vector[int], double]] coface_tree = self.thisptr.get_coface_tree(complex, dim) + ct = [] + for filtered_complex in coface_tree: + v = [] + for vertex in filtered_complex.first: + v.append(vertex) + ct.append((v,filtered_complex.second)) + return ct cdef class MiniSimplexTree: @@ -70,3 +111,55 @@ cdef class MiniSimplexTree: for i in simplex: complex.push_back(i) return self.thisptr.find_simplex(complex) + def insert(self, simplex): + cdef vector[int] complex + for i in simplex: + complex.push_back(i) + return self.thisptr.insert_simplex(complex, 0.0) + def insert_with_subfaces(self, simplex, filtration = 0.0): + cdef vector[int] complex + for i in simplex: + complex.push_back(i) + return self.thisptr.insert_simplex_and_subfaces(complex, filtration) + def get_filtered_tree(self): + cdef vector[pair[vector[int], double]] coface_tree = self.thisptr.get_filtered_tree() + ct = [] + for filtered_complex in coface_tree: + v = [] + for vertex in filtered_complex.first: + v.append(vertex) + ct.append((v,filtered_complex.second)) + return ct + def get_skeleton_tree(self, dim): + cdef vector[pair[vector[int], double]] coface_tree = self.thisptr.get_skeleton_tree(dim) + ct = [] + for filtered_complex in coface_tree: + v = [] + for vertex in filtered_complex.first: + v.append(vertex) + ct.append((v,filtered_complex.second)) + return ct + def get_star_tree(self, simplex): + cdef vector[int] complex + for i in simplex: + complex.push_back(i) + cdef vector[pair[vector[int], double]] coface_tree = self.thisptr.get_star_tree(complex) + ct = [] + for filtered_complex in coface_tree: + v = [] + for vertex in filtered_complex.first: + v.append(vertex) + ct.append((v,filtered_complex.second)) + return ct + def get_coface_tree(self, simplex, dim): + cdef vector[int] complex + for i in simplex: + complex.push_back(i) + cdef vector[pair[vector[int], double]] coface_tree = self.thisptr.get_coface_tree(complex, dim) + ct = [] + for filtered_complex in coface_tree: + v = [] + for vertex in filtered_complex.first: + v.append(vertex) + ct.append((v,filtered_complex.second)) + return ct diff --git a/src/cython/main.py b/src/cython/main.py index a36b4fa8..a4fc87ba 100755 --- a/src/cython/main.py +++ b/src/cython/main.py @@ -52,13 +52,13 @@ print("MiniSimplexTree creation from insertion") triangle012 = [0, 1, 2] edge03 = [0, 3] mini_st = gudhi.MiniSimplexTree() -mini_st.insert_simplex_and_subfaces(triangle012) -mini_st.insert_simplex_and_subfaces(edge03) +mini_st.insert_with_subfaces(triangle012) +mini_st.insert_with_subfaces(edge03) # FIXME: Remove this line mini_st.set_dimension(2); edge02 = [0, 2] -if st.st.find(edge02): +if mini_st.find(edge02): # Only coface is 012 - print("coface(edge02,1)=", st_from_graph_expansion.get_coface_tree(edge02, 1)) + print("coface(edge02,1)=", mini_st.get_coface_tree(edge02, 1)) -- cgit v1.2.3