summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvrouvrea <vrouvrea@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2017-03-22 07:39:11 +0000
committervrouvrea <vrouvrea@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2017-03-22 07:39:11 +0000
commit3ffe80a4d17b59422dab18b0898e3f9ca4131672 (patch)
treee498dbd3bc433141ead2496e8007cfc502d7cf07
parentcd0f1b7513be17bfca4de6ea4744a3d931694a8f (diff)
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
-rw-r--r--src/cython/cython/simplex_tree.pyx20
-rw-r--r--src/cython/doc/simplex_tree_user.rst6
-rw-r--r--src/cython/include/Simplex_tree_interface.h13
-rwxr-xr-xsrc/cython/test/test_simplex_tree.py34
4 files changed, 52 insertions, 21 deletions
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,7 +197,7 @@ 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').
@@ -211,6 +212,23 @@ cdef class SimplexTree:
cdef vector[int] complex
for i in simplex:
complex.push_back(i)
+ return self.thisptr.insert_simplex(complex, <double>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.
+ :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_and_subfaces(complex,
<double>filtration)
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,6 +53,12 @@ class Simplex_tree_interface : public Simplex_tree<SimplexTreeOptions> {
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();
@@ -60,6 +66,13 @@ class Simplex_tree_interface : public Simplex_tree<SimplexTreeOptions> {
}
// Do not interface this function, only used in strong witness interface for complex creation
+ bool insert_simplex(const std::vector<std::size_t>& 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<std::size_t>& complex, Filtration_value filtration = 0) {
Insertion_result result = Base::insert_simplex_and_subfaces(complex, filtration);
Base::initialize_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