summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMathieuCarriere <mathieu.carriere3@gmail.com>2020-04-29 18:31:24 -0400
committerMathieuCarriere <mathieu.carriere3@gmail.com>2020-04-29 18:31:24 -0400
commit2b5586fd60848b159fb4fa4481e61bab0e0cd766 (patch)
treebcc0a8365179c587d9400d4880360d0cb75458f9 /src
parent2496c33deed29fd210cbbc95583761783ee6bbbb (diff)
small modifs
Diffstat (limited to 'src')
-rw-r--r--src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_base.h4
-rw-r--r--src/python/gudhi/cubical_complex.pyx42
-rw-r--r--src/python/include/Persistent_cohomology_interface.h7
3 files changed, 29 insertions, 24 deletions
diff --git a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_base.h b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_base.h
index 248ebdb6..eaf8a0b6 100644
--- a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_base.h
+++ b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_base.h
@@ -116,7 +116,7 @@ class Bitmap_cubical_complex_base {
* be an edge or vertex of a cube. On the other hand, the output is always indicating the position of
* a cube in the data structure.
**/
- inline int get_top_dimensional_coface_of_a_cell(int splx);
+ inline int get_top_dimensional_coface_of_a_cell(size_t splx);
/**
* This procedure compute incidence numbers between cubes. For a cube \f$A\f$ of
@@ -612,7 +612,7 @@ void Bitmap_cubical_complex_base<T>::setup_bitmap_based_on_top_dimensional_cells
}
template <typename T>
-int Bitmap_cubical_complex_base<T>::get_top_dimensional_coface_of_a_cell(int splx) {
+int Bitmap_cubical_complex_base<T>::get_top_dimensional_coface_of_a_cell(size_t splx) {
if (this->get_dimension_of_a_cell(splx) == this->dimension()){return splx;}
else{
for (auto v : this->get_coboundary_of_a_cell(splx)){
diff --git a/src/python/gudhi/cubical_complex.pyx b/src/python/gudhi/cubical_complex.pyx
index 884b0664..b16a037f 100644
--- a/src/python/gudhi/cubical_complex.pyx
+++ b/src/python/gudhi/cubical_complex.pyx
@@ -199,28 +199,28 @@ cdef class CubicalComplex:
The indices of the arrays in the list correspond to the homological dimensions, and the
integers of each row in each array correspond to: (index of positive top-dimensional cell).
"""
+
+ assert self.pcohptr != NULL, "cofaces_of_persistence_pairs function requires persistence function to be launched first."
+
cdef vector[vector[int]] persistence_result
- if self.pcohptr != NULL:
- output = [[],[]]
- persistence_result = self.pcohptr.cofaces_of_cubical_persistence_pairs()
- pr = np.array(persistence_result)
-
- ess_ind = np.argwhere(pr[:,2] == -1)[:,0]
- ess = pr[ess_ind]
- max_h = max(ess[:,0])+1
- for h in range(max_h):
- hidxs = np.argwhere(ess[:,0] == h)[:,0]
- output[1].append(ess[hidxs][:,1])
-
- reg_ind = np.setdiff1d(np.array(range(len(pr))), ess_ind)
- reg = pr[reg_ind]
- max_h = max(reg[:,0])+1
- for h in range(max_h):
- hidxs = np.argwhere(reg[:,0] == h)[:,0]
- output[0].append(reg[hidxs][:,1:])
- else:
- print("cofaces_of_persistence_pairs function requires persistence function"
- " to be launched first.")
+ output = [[],[]]
+ persistence_result = self.pcohptr.cofaces_of_cubical_persistence_pairs()
+ pr = np.array(persistence_result)
+
+ ess_ind = np.argwhere(pr[:,2] == -1)[:,0]
+ ess = pr[ess_ind]
+ max_h = max(ess[:,0])+1
+ for h in range(max_h):
+ hidxs = np.argwhere(ess[:,0] == h)[:,0]
+ output[1].append(ess[hidxs][:,1])
+
+ reg_ind = np.setdiff1d(np.array(range(len(pr))), ess_ind)
+ reg = pr[reg_ind]
+ max_h = max(reg[:,0])+1
+ for h in range(max_h):
+ hidxs = np.argwhere(reg[:,0] == h)[:,0]
+ output[0].append(reg[hidxs][:,1:])
+
return output
def betti_numbers(self):
diff --git a/src/python/include/Persistent_cohomology_interface.h b/src/python/include/Persistent_cohomology_interface.h
index c4e60a27..cec18546 100644
--- a/src/python/include/Persistent_cohomology_interface.h
+++ b/src/python/include/Persistent_cohomology_interface.h
@@ -68,11 +68,16 @@ persistent_cohomology::Persistent_cohomology<FilteredComplex, persistent_cohomol
return persistence;
}
+ // This function computes the top-dimensional cofaces associated to the positive and negative
+ // simplices of a cubical complex. The output format is a vector of vectors of three integers,
+ // which are [homological dimension, index of top-dimensional coface of positive simplex,
+ // index of top-dimensional coface of negative simplex]. If the topological feature is essential,
+ // then the index of top-dimensional coface of negative simplex is arbitrarily set to -1.
std::vector<std::vector<int>> cofaces_of_cubical_persistence_pairs() {
// Warning: this function is meant to be used with CubicalComplex only!!
- auto pairs = persistent_cohomology::Persistent_cohomology<FilteredComplex,
+ auto&& pairs = persistent_cohomology::Persistent_cohomology<FilteredComplex,
persistent_cohomology::Field_Zp>::get_persistent_pairs();
// Gather all top-dimensional cells and store their simplex handles