summaryrefslogtreecommitdiff
path: root/src/python/include/Simplex_tree_interface.h
diff options
context:
space:
mode:
authorMathieuCarriere <mathieu.carriere3@gmail.com>2020-03-19 17:02:55 -0400
committerMathieuCarriere <mathieu.carriere3@gmail.com>2020-03-19 17:02:55 -0400
commit361abfcfa9ec18c76837f847f8e2e3a060cf7db7 (patch)
tree159948d60884caa4993a9b4bd5924d87a29170b2 /src/python/include/Simplex_tree_interface.h
parent61691b0081cb868645335c0b1433ddcc0bcbf9e3 (diff)
added decoding function
Diffstat (limited to 'src/python/include/Simplex_tree_interface.h')
-rw-r--r--src/python/include/Simplex_tree_interface.h27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/python/include/Simplex_tree_interface.h b/src/python/include/Simplex_tree_interface.h
index 50ed58d0..a6b1a06e 100644
--- a/src/python/include/Simplex_tree_interface.h
+++ b/src/python/include/Simplex_tree_interface.h
@@ -38,6 +38,7 @@ class Simplex_tree_interface : public Simplex_tree<SimplexTreeOptions> {
using Skeleton_simplex_iterator = typename Base::Skeleton_simplex_iterator;
using Complex_simplex_iterator = typename Base::Complex_simplex_iterator;
using Extended_filtration_data = typename Base::Extended_filtration_data;
+ using Extended_simplex_type = typename Base::Extended_simplex_type;
public:
@@ -127,7 +128,31 @@ class Simplex_tree_interface : public Simplex_tree<SimplexTreeOptions> {
}
std::vector<std::vector<std::pair<int, std::pair<Filtration_value, Filtration_value>>>> compute_extended_persistence_subdiagrams(const std::vector<std::pair<int, std::pair<Filtration_value, Filtration_value>>>& dgm){
- return this->extended_persistence_subdiagrams(dgm, this->efd);
+ std::vector<std::vector<std::pair<int, std::pair<Filtration_value, Filtration_value>>>> new_dgm(4);
+ for (unsigned int i = 0; i < dgm.size(); i++){
+ std::pair<Filtration_value, Extended_simplex_type> px = this->decode_extended_filtration(dgm[i].second.first, this->efd);
+ std::pair<Filtration_value, Extended_simplex_type> py = this->decode_extended_filtration(dgm[i].second.second, this->efd);
+ std::pair<int, std::pair<Filtration_value, Filtration_value>> pd_point = std::make_pair(dgm[i].first, std::make_pair(px.first, py.first));
+ //Ordinary
+ if (px.second == Base::UP && py.second == Base::UP){
+ new_dgm[0].push_back(pd_point);
+ }
+ // Relative
+ else if (px.second == Base::DOWN && py.second == Base::DOWN){
+ new_dgm[1].push_back(pd_point);
+ }
+ else{
+ // Extended+
+ if (px.first < py.first){
+ new_dgm[2].push_back(pd_point);
+ }
+ //Extended-
+ else{
+ new_dgm[3].push_back(pd_point);
+ }
+ }
+ }
+ return new_dgm;
}
void create_persistence(Gudhi::Persistent_cohomology_interface<Base>* pcoh) {