From e1eab27ee280826a5c9c44d530679626da2efb1f Mon Sep 17 00:00:00 2001 From: skachano Date: Thu, 29 Sep 2016 18:30:50 +0000 Subject: Weak Witness + Active Witness. It compiles git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1593 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 7307e01148fc7cadfc22bd136ebdf0d55c8da937 --- .../include/gudhi/Active_witness/Active_witness.h | 70 ++++++++++++++++ .../gudhi/Active_witness/Active_witness_iterator.h | 96 ++++++++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100644 src/Witness_complex/include/gudhi/Active_witness/Active_witness.h create mode 100644 src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h new file mode 100644 index 00000000..87981c25 --- /dev/null +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -0,0 +1,70 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Siargey Kachanovich + * + * Copyright (C) 2016 INRIA Sophia Antipolis-Méditerranée (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef ACTIVE_WITNESS_H_ +#define ACTIVE_WITNESS_H_ + +#include "Active_witness_iterator.h" +#include +#include + +namespace Gudhi { + +namespace witness_complex { + +template< typename Id_distance_pair, + typename INS_range > +class Active_witness { +public: + typedef Active_witness ActiveWitness; + typedef typename INS_range::iterator INS_iterator; + typedef Active_witness_iterator< ActiveWitness, Id_distance_pair, INS_iterator > iterator; + + std::vector nearest_landmark_table_; + INS_range search_range_; + INS_iterator iterator_last_; + INS_iterator iterator_end_; + + Active_witness(INS_range search_range) + : search_range_(search_range), iterator_end_(search_range.end()), iterator_last_(search_range.begin()) + { + nearest_landmark_table_.push_back(*iterator_last_); + } + + iterator begin() + { + return iterator(this, nearest_landmark_table_.begin()); + } + + iterator end() + { + return iterator(this); + } + + std::vector end_element_table_; + typename std::vector::iterator end_pointer = end_element_table_.end(); +}; + +} +} + +#endif diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h new file mode 100644 index 00000000..cd4f4b92 --- /dev/null +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -0,0 +1,96 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Siargey Kachanovich + * + * Copyright (C) 2016 INRIA Sophia Antipolis-Méditerranée (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef ACTIVE_WITNESS_ITERATOR_H_ +#define ACTIVE_WITNESS_ITERATOR_H_ + +//#include "Active_witness.h" +#include +#include + +namespace Gudhi { + +namespace witness_complex { + +template< typename Active_witness, + typename Id_distance_pair, + typename INS_iterator > +class Active_witness_iterator + : public boost::iterator_facade< Active_witness_iterator +, Id_distance_pair const +, boost::forward_traversal_tag +, Id_distance_pair const> { + friend class boost::iterator_core_access; + + //typedef Active_witness Active_witness; + typedef typename std::vector::iterator Pair_iterator; + typedef typename Gudhi::witness_complex::Active_witness_iterator Iterator; + + + Active_witness *aw_; + Pair_iterator lh_; // landmark handle + //INS_iterator iterator_last; + //INS_iterator iterator_end; + +public: + Active_witness_iterator(Active_witness* aw) + : aw_(aw), lh_(aw_->end_pointer) + { + } + + Active_witness_iterator(Active_witness* aw, Pair_iterator lh_) + { + } + +private : + + Id_distance_pair dereference() const + { + return *lh_; + } + + bool equal(const Iterator& other) const + { + return (lh_ == other.lh_); + } + + void increment() + { + // if the id of the current landmark is the same as the last one + if (lh_->first == aw_->iterator_last_->first) { + // if the next iterator is end, lh_it = nullptr + if (++(aw_->iterator_last_) == aw_->iterator_end_) { + lh_ = aw_->end_pointer; + return; + } + else + aw_->nearest_landmark_table_.push_back(*(aw_->iterator_last_)); + } + lh_++; + } + +}; + +} +} + +#endif -- cgit v1.2.3 From 350b400fa0fb49c190b5b62934fa58869f23f4c4 Mon Sep 17 00:00:00 2001 From: skachano Date: Fri, 30 Sep 2016 10:06:39 +0000 Subject: Weak Witness + Active Witness. It seems to work. git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1595 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 04b616907f9173e7b3cffebcd8b167a0413eb687 --- src/Witness_complex/example/witness_complex_sphere.cpp | 9 ++++----- .../include/gudhi/Active_witness/Active_witness.h | 7 ++++--- .../include/gudhi/Active_witness/Active_witness_iterator.h | 5 +++-- src/Witness_complex/include/gudhi/Witness_complex.h | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/example/witness_complex_sphere.cpp b/src/Witness_complex/example/witness_complex_sphere.cpp index 5a041c3e..310fb1be 100644 --- a/src/Witness_complex/example/witness_complex_sphere.cpp +++ b/src/Witness_complex/example/witness_complex_sphere.cpp @@ -65,13 +65,12 @@ int main(int argc, char * const argv[]) { int number_of_landmarks = atoi(argv[1]); clock_t start, end; - // Construct the Simplex Tree - Gudhi::Simplex_tree<> simplex_tree; - std::vector< std::pair > l_time; // Read the point file for (int nbP = 500; nbP < 10000; nbP += 500) { + // Construct the Simplex Tree + Gudhi::Simplex_tree<> simplex_tree; Point_Vector point_vector, landmarks; generate_points_sphere(point_vector, nbP, 4); std::cout << "Successfully generated " << point_vector.size() << " points.\n"; @@ -91,8 +90,8 @@ int main(int argc, char * const argv[]) { double time = static_cast(end - start) / CLOCKS_PER_SEC; std::cout << "Witness complex for " << number_of_landmarks << " landmarks took " << time << " s. \n"; - assert(1 == 0); - std::cout << simplex_tree << "\n"; + //assert(1 == 0); + //std::cout << simplex_tree << "\n"; std::cout << "Number of simplices is: " << simplex_tree.num_simplices() << "\n"; l_time.push_back(std::make_pair(nbP, time)); } diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index 87981c25..7b169784 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -38,8 +38,9 @@ public: typedef Active_witness ActiveWitness; typedef typename INS_range::iterator INS_iterator; typedef Active_witness_iterator< ActiveWitness, Id_distance_pair, INS_iterator > iterator; + typedef typename std::list Table; - std::vector nearest_landmark_table_; + Table nearest_landmark_table_; INS_range search_range_; INS_iterator iterator_last_; INS_iterator iterator_end_; @@ -60,8 +61,8 @@ public: return iterator(this); } - std::vector end_element_table_; - typename std::vector::iterator end_pointer = end_element_table_.end(); + Table end_element_table_ = {Id_distance_pair(-1,0)}; + typename Table::iterator end_pointer = end_element_table_.begin(); }; } diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index cd4f4b92..658405f6 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -42,7 +42,7 @@ class Active_witness_iterator friend class boost::iterator_core_access; //typedef Active_witness Active_witness; - typedef typename std::vector::iterator Pair_iterator; + typedef typename std::list::iterator Pair_iterator; typedef typename Gudhi::witness_complex::Active_witness_iterator Iterator; @@ -57,7 +57,8 @@ public: { } - Active_witness_iterator(Active_witness* aw, Pair_iterator lh_) + Active_witness_iterator(Active_witness* aw, Pair_iterator lh) + : aw_(aw), lh_(lh) { } diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index c6dff3bf..158f92ec 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -237,7 +237,7 @@ private: } else if (dim == 0) for (; l_it->second - alpha2 <= norelax_dist2 && l_it != end; ++l_it) { - simplex.push_back(l_it->second); + simplex.push_back(l_it->first); double filtration_value = 0; // if norelax_dist is infinite, relaxation is 0. if (l_it->second > norelax_dist2) -- cgit v1.2.3 From e6992894cf4e9b76acee98e2c1ad840a3ebd7274 Mon Sep 17 00:00:00 2001 From: skachano Date: Tue, 4 Oct 2016 18:07:42 +0000 Subject: Fixed a major bug in the Active_witness_iterator git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1633 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: d4f474b44835b11e65a152f9d3fe87cc32b527f5 --- .../example/witness_complex_sphere.cpp | 2 +- .../include/gudhi/Active_witness/Active_witness.h | 14 ++-- .../gudhi/Active_witness/Active_witness_iterator.h | 12 ++- .../include/gudhi/Witness_complex.h | 41 ++++++++--- .../test/simple_witness_complex.cpp | 86 +++++++++++++++++----- 5 files changed, 116 insertions(+), 39 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/example/witness_complex_sphere.cpp b/src/Witness_complex/example/witness_complex_sphere.cpp index 310fb1be..fe7f628f 100644 --- a/src/Witness_complex/example/witness_complex_sphere.cpp +++ b/src/Witness_complex/example/witness_complex_sphere.cpp @@ -85,7 +85,7 @@ int main(int argc, char * const argv[]) { landmarks.end(), point_vector.begin(), point_vector.end()); - witness_complex.create_complex(simplex_tree, 0); + witness_complex.create_complex(simplex_tree, 0.1); end = clock(); double time = static_cast(end - start) / CLOCKS_PER_SEC; std::cout << "Witness complex for " << number_of_landmarks << " landmarks took " diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index 7b169784..9ae41a69 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -34,23 +34,26 @@ namespace witness_complex { template< typename Id_distance_pair, typename INS_range > class Active_witness { -public: +public: typedef Active_witness ActiveWitness; typedef typename INS_range::iterator INS_iterator; typedef Active_witness_iterator< ActiveWitness, Id_distance_pair, INS_iterator > iterator; typedef typename std::list Table; - + + Table end_element_table_ = {Id_distance_pair(-1,0)}; + typename Table::iterator end_pointer = end_element_table_.begin(); + Table nearest_landmark_table_; INS_range search_range_; INS_iterator iterator_last_; INS_iterator iterator_end_; Active_witness(INS_range search_range) - : search_range_(search_range), iterator_end_(search_range.end()), iterator_last_(search_range.begin()) + : search_range_(search_range), iterator_last_(search_range.begin()), iterator_end_(search_range.end()) { nearest_landmark_table_.push_back(*iterator_last_); } - + iterator begin() { return iterator(this, nearest_landmark_table_.begin()); @@ -60,9 +63,6 @@ public: { return iterator(this); } - - Table end_element_table_ = {Id_distance_pair(-1,0)}; - typename Table::iterator end_pointer = end_element_table_.begin(); }; } diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 658405f6..5d4f3d75 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -64,7 +64,7 @@ public: private : - Id_distance_pair dereference() const + Id_distance_pair& dereference() const { return *lh_; } @@ -76,9 +76,17 @@ private : void increment() { + // if neighbor search is at its end, check if lh_++ is end + if (aw_->iterator_last_ == aw_->iterator_end_) { + if (lh_++ == aw_->nearest_landmark_table_.end()) { + lh_ = aw_->end_pointer; + return; + } + return; + } // if the id of the current landmark is the same as the last one if (lh_->first == aw_->iterator_last_->first) { - // if the next iterator is end, lh_it = nullptr + // if the next iterator is end, lh_it = end pointer if (++(aw_->iterator_last_) == aw_->iterator_end_) { lh_ = aw_->end_pointer; return; diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index 158f92ec..e939de34 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -84,9 +84,9 @@ private: typedef FT Filtration_value; - typedef std::size_t Witness_id; - typedef std::size_t Landmark_id; - typedef std::pair Id_distance_pair; + typedef std::ptrdiff_t Witness_id; + typedef std::ptrdiff_t Landmark_id; + typedef std::pair Id_distance_pair; typedef Active_witness ActiveWitness; typedef std::list< ActiveWitness > ActiveWitnessList; typedef std::vector< Landmark_id > typeVectorVertex; @@ -155,7 +155,7 @@ private: } typeVectorVertex vv; ActiveWitnessList active_witnesses;// = new ActiveWitnessList(); - for (auto i = 0; i != nbL; ++i) { + for (unsigned i = 0; i != nbL; ++i) { // initial fill of 0-dimensional simplices // by doing it we don't assume that landmarks are necessarily witnesses themselves anymore //counter++; @@ -166,10 +166,12 @@ private: unsigned k = 1; /* current dimension in iterative construction */ for (auto w: witnesses_) active_witnesses.push_back(ActiveWitness(landmark_tree_.query_incremental_nearest_neighbors(w))); + ActiveWitness aw_copy(active_witnesses.front()); while (!active_witnesses.empty() && k < nbL ) { typename ActiveWitnessList::iterator aw_it = active_witnesses.begin(); while (aw_it != active_witnesses.end()) { std::vector simplex; + //simplex.reserve(k+1); bool ok = add_all_faces_of_dimension(k, max_alpha_square, std::numeric_limits::infinity(), @@ -178,10 +180,13 @@ private: complex, aw_it->end()); if (!ok) - active_witnesses.erase(aw_it++); //First increase the iterator and then erase the previous element + //{aw_it++;} + active_witnesses.erase(aw_it++); //First increase the iterator and then erase the previous element else aw_it++; - } + } + std::cout << "Active witnesses after dim=" << k << " is finished: " << active_witnesses.size() << "\n"; + std::cout << complex << "\n"; k++; } return true; @@ -190,7 +195,6 @@ private: //@} private: - /* \brief Adds recursively all the faces of a certain dimension dim witnessed by the same witness * Iterator is needed to know until how far we can take landmarks to form simplexes * simplex is the prefix of the simplexes to insert @@ -222,12 +226,13 @@ private: sc, end) || will_be_active; } + assert(!simplex.empty()); simplex.pop_back(); // If norelax_dist is infinity, change to first omitted distance if (l_it->second <= norelax_dist2) norelax_dist2 = l_it->second; typename ActiveWitness::iterator next_it = l_it; - will_be_active = add_all_faces_of_dimension(dim-1, + will_be_active = add_all_faces_of_dimension(dim, alpha2, norelax_dist2, ++next_it, @@ -240,12 +245,16 @@ private: simplex.push_back(l_it->first); double filtration_value = 0; // if norelax_dist is infinite, relaxation is 0. + //std::cout << "landmark_id=" << l_it->first << " distance=" << l_it->second << "\n"; + // std::size_t landmark_id = l_it->first; + // double distance = l_it->second; if (l_it->second > norelax_dist2) filtration_value = l_it->second - norelax_dist2; if (all_faces_in(simplex, &filtration_value, sc)) { will_be_active = true; sc.insert_simplex(simplex, filtration_value); } + assert(!simplex.empty()); simplex.pop_back(); // If norelax_dist is infinity, change to first omitted distance if (l_it->second < norelax_dist2) @@ -301,9 +310,23 @@ private: // } // return (fv_it == fvr.end()); // } - + public: + template < typename SimplicialComplexForWitness > + void print_complex(SimplicialComplexForWitness& complex) + { + std::cout << complex << "\n"; + } + + template < typename Container > + void print_container(Container& container) + { + for (auto l: container) + std::cout << l << ", "; + std::cout << "\n"; + } + // /* // * \brief Verification if every simplex in the complex is witnessed by witnesses in knn. // * \param print_output =true will print the witnesses for each simplex diff --git a/src/Witness_complex/test/simple_witness_complex.cpp b/src/Witness_complex/test/simple_witness_complex.cpp index 03df78ee..30b168c1 100644 --- a/src/Witness_complex/test/simple_witness_complex.cpp +++ b/src/Witness_complex/test/simple_witness_complex.cpp @@ -25,6 +25,8 @@ #include #include +#include + #include #include @@ -34,26 +36,70 @@ typedef Gudhi::Simplex_tree<> Simplex_tree; typedef std::vector< Vertex_handle > typeVectorVertex; -typedef Gudhi::witness_complex::Witness_complex WitnessComplex; +typedef CGAL::Epick_d Kernel; +typedef typename Kernel::FT FT; +typedef typename Kernel::Point_d Point_d; +typedef Gudhi::witness_complex::Witness_complex WitnessComplex; + +/* All landmarks and witnesses are taken on the grid in the following manner. + LWLWL 2W4W7 + WW.WW WW.WW + L...L 1...6 + WW.WW WW.WW + LWLWL 0W3W5 + + Witness complex consists of 8 vertices, 12 edges and 4 triangles + */ BOOST_AUTO_TEST_CASE(simple_witness_complex) { - Simplex_tree complex; - std::vector< typeVectorVertex > knn; - - knn.push_back({1, 0, 5, 2, 6, 3, 4}); - knn.push_back({2, 6, 4, 5, 0, 1, 3}); - knn.push_back({3, 4, 2, 1, 5, 6, 0}); - knn.push_back({4, 2, 1, 3, 5, 6, 0}); - knn.push_back({5, 1, 6, 0, 2, 3, 4}); - knn.push_back({6, 0, 5, 2, 1, 3, 4}); - knn.push_back({0, 5, 6, 1, 2, 3, 4}); - knn.push_back({2, 6, 4, 5, 3, 1, 0}); - knn.push_back({1, 2, 5, 4, 3, 6, 0}); - knn.push_back({3, 4, 0, 6, 5, 1, 2}); - knn.push_back({5, 0, 1, 3, 6, 2, 4}); - knn.push_back({5, 6, 1, 0, 2, 3, 4}); - knn.push_back({1, 6, 0, 5, 2, 3, 4}); - WitnessComplex witnessComplex(knn, 7, 7, complex); - - BOOST_CHECK(witnessComplex.is_witness_complex(knn, false)); + Simplex_tree complex, relaxed_complex; + + std::vector witnesses, landmarks; + + landmarks.push_back(Point_d(std::vector{-2,-2})); + landmarks.push_back(Point_d(std::vector{-2, 0})); + landmarks.push_back(Point_d(std::vector{-2, 2})); + landmarks.push_back(Point_d(std::vector{ 0,-2})); + landmarks.push_back(Point_d(std::vector{ 0, 2})); + landmarks.push_back(Point_d(std::vector{ 2,-2})); + landmarks.push_back(Point_d(std::vector{ 2, 0})); + landmarks.push_back(Point_d(std::vector{ 2, 2})); + witnesses.push_back(Point_d(std::vector{-2,-1})); + witnesses.push_back(Point_d(std::vector{-2, 1})); + witnesses.push_back(Point_d(std::vector{-1,-2})); + witnesses.push_back(Point_d(std::vector{-1,-1})); + witnesses.push_back(Point_d(std::vector{-1, 1})); + witnesses.push_back(Point_d(std::vector{-1, 2})); + witnesses.push_back(Point_d(std::vector{ 1,-2})); + witnesses.push_back(Point_d(std::vector{ 1,-1})); + witnesses.push_back(Point_d(std::vector{ 1, 1})); + witnesses.push_back(Point_d(std::vector{ 1, 2})); + witnesses.push_back(Point_d(std::vector{ 2,-1})); + witnesses.push_back(Point_d(std::vector{ 2, 1})); + + // landmarks.push_back(Point_d(std::vector{1,0})); + // landmarks.push_back(Point_d(std::vector{0,0})); + // landmarks.push_back(Point_d(std::vector{0,1})); + // witnesses.push_back(Point_d(std::vector{1,0})); + + WitnessComplex witness_complex(landmarks.begin(), + landmarks.end(), + witnesses.begin(), + witnesses.end()); + // witness_complex.create_complex(complex, 0); + + //std::cout << complex << "\n"; + + // BOOST_CHECK(complex.num_simplices() == 24); + + witness_complex.create_complex(relaxed_complex, 8.01); + + std::cout << "Num_simplices: " << relaxed_complex.num_simplices() << "\n"; + std::cout << relaxed_complex << "\n"; + + //BOOST_CHECK(relaxed_complex.num_simplices() == 24); + + //BOOST_CHECK(witnessComplex.is_witness_complex(knn, false)); + + } -- cgit v1.2.3 From 1bcd448f6e217655fae4bfbf62d8d3b6caa52503 Mon Sep 17 00:00:00 2001 From: skachano Date: Fri, 7 Oct 2016 09:49:47 +0000 Subject: Added the possibility to limit dimension git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1676 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 16ec8706ffb981ff892960468cc4b809e61612e2 --- .../example/example_strong_witness_persistence.cpp | 10 +++++++--- .../example/example_witness_complex_off.cpp | 6 +++--- .../example_witness_complex_persistence.cpp | 12 +++++++---- .../include/gudhi/Active_witness/Active_witness.h | 3 +++ .../gudhi/Active_witness/Active_witness_iterator.h | 7 +++++++ .../include/gudhi/Strong_witness_complex.h | 23 ++++++++++++++-------- .../include/gudhi/Witness_complex.h | 23 +++++++++++++--------- 7 files changed, 57 insertions(+), 27 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/example/example_strong_witness_persistence.cpp b/src/Witness_complex/example/example_strong_witness_persistence.cpp index bf6b4011..4e06867d 100644 --- a/src/Witness_complex/example/example_strong_witness_persistence.cpp +++ b/src/Witness_complex/example/example_strong_witness_persistence.cpp @@ -53,17 +53,18 @@ void program_options(int argc, char * argv[] , std::string & filediag , Filtration_value & max_squared_alpha , int & p + , int & dim_max , Filtration_value & min_persistence); int main(int argc, char * argv[]) { std::string file_name; std::string filediag; Filtration_value max_squared_alpha; - int p, nbL; + int p, nbL, lim_d; Filtration_value min_persistence; SimplexTree simplex_tree; - program_options(argc, argv, nbL, file_name, filediag, max_squared_alpha, p, min_persistence); + program_options(argc, argv, nbL, file_name, filediag, max_squared_alpha, p, lim_d, min_persistence); // Extract the points from the file file_name Point_vector witnesses, landmarks; @@ -119,6 +120,7 @@ void program_options(int argc, char * argv[] , std::string & filediag , Filtration_value & max_squared_alpha , int & p + , int & dim_max , Filtration_value & min_persistence) { namespace po = boost::program_options; @@ -141,7 +143,9 @@ void program_options(int argc, char * argv[] ("field-charac,p", po::value(&p)->default_value(11), "Characteristic p of the coefficient field Z/pZ for computing homology.") ("min-persistence,m", po::value(&min_persistence)->default_value(0), - "Minimal lifetime of homology feature to be recorded. Default is 0. Enter a negative value to see zero length intervals"); + "Minimal lifetime of homology feature to be recorded. Default is 0. Enter a negative value to see zero length intervals") + ("cpx-dimension,d", po::value(&dim_max)->default_value(std::numeric_limits::max()), + "Maximal dimension of the strong witness complex we want to compute."); po::positional_options_description pos; pos.add("input-file", 1); diff --git a/src/Witness_complex/example/example_witness_complex_off.cpp b/src/Witness_complex/example/example_witness_complex_off.cpp index 849a0a40..37646faf 100644 --- a/src/Witness_complex/example/example_witness_complex_off.cpp +++ b/src/Witness_complex/example/example_witness_complex_off.cpp @@ -45,12 +45,12 @@ typedef std::vector< Point_d > Point_vector; int main(int argc, char * const argv[]) { if (argc != 4) { std::cerr << "Usage: " << argv[0] - << " path_to_point_file nbL alpha^2\n"; + << " path_to_point_file number_of_landmarks max_squared_alpha limit_dimension\n"; return 0; } std::string file_name = argv[1]; - int nbL = atoi(argv[2]); + int nbL = atoi(argv[2]), lim_dim = atoi(argv[4]); double alpha2 = atof(argv[3]); clock_t start, end; Gudhi::Simplex_tree<> simplex_tree; @@ -77,7 +77,7 @@ int main(int argc, char * const argv[]) { point_vector.begin(), point_vector.end()); - witness_complex.create_complex(simplex_tree, alpha2); + witness_complex.create_complex(simplex_tree, alpha2, lim_dim); end = clock(); std::cout << "Witness complex took " << static_cast(end - start) / CLOCKS_PER_SEC << " s. \n"; diff --git a/src/Witness_complex/example/example_witness_complex_persistence.cpp b/src/Witness_complex/example/example_witness_complex_persistence.cpp index 9b06b504..a4388047 100644 --- a/src/Witness_complex/example/example_witness_complex_persistence.cpp +++ b/src/Witness_complex/example/example_witness_complex_persistence.cpp @@ -53,17 +53,18 @@ void program_options(int argc, char * argv[] , std::string & filediag , Filtration_value & max_squared_alpha , int & p + , int & dim_max , Filtration_value & min_persistence); int main(int argc, char * argv[]) { std::string file_name; std::string filediag; Filtration_value max_squared_alpha; - int p, nbL; + int p, nbL, lim_d; Filtration_value min_persistence; SimplexTree simplex_tree; - program_options(argc, argv, nbL, file_name, filediag, max_squared_alpha, p, min_persistence); + program_options(argc, argv, nbL, file_name, filediag, max_squared_alpha, p, lim_d, min_persistence); // Extract the points from the file file_name Point_vector witnesses, landmarks; @@ -119,6 +120,7 @@ void program_options(int argc, char * argv[] , std::string & filediag , Filtration_value & max_squared_alpha , int & p + , int & dim_max , Filtration_value & min_persistence) { namespace po = boost::program_options; @@ -141,8 +143,10 @@ void program_options(int argc, char * argv[] ("field-charac,p", po::value(&p)->default_value(11), "Characteristic p of the coefficient field Z/pZ for computing homology.") ("min-persistence,m", po::value(&min_persistence)->default_value(0), - "Minimal lifetime of homology feature to be recorded. Default is 0. Enter a negative value to see zero length intervals"); - + "Minimal lifetime of homology feature to be recorded. Default is 0. Enter a negative value to see zero length intervals") + ("cpx-dimension,d", po::value(&dim_max)->default_value(std::numeric_limits::max()), + "Maximal dimension of the weak witness complex we want to compute."); + po::positional_options_description pos; pos.add("input-file", 1); diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index 9ae41a69..e52410e4 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -31,6 +31,9 @@ namespace Gudhi { namespace witness_complex { + /** \brief Class representing a list of nearest neighbors to a given witness. + * \detail Every element is a pair of a landmark identifier and the squared distance to it. + */ template< typename Id_distance_pair, typename INS_range > class Active_witness { diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 5d4f3d75..9c96f7e8 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -31,6 +31,13 @@ namespace Gudhi { namespace witness_complex { + /** \brief Iterator in the nearest landmark list. + * \detail After the iterator reaches the end of the list, + * the list is augmented by a (nearest landmark, distance) pair if possible. + * If all the landmarks are present in the list, iterator returns the specific end value + * of the corresponding 'Active_witness' object. + */ + template< typename Active_witness, typename Id_distance_pair, typename INS_iterator > diff --git a/src/Witness_complex/include/gudhi/Strong_witness_complex.h b/src/Witness_complex/include/gudhi/Strong_witness_complex.h index 3a862d71..e125d307 100644 --- a/src/Witness_complex/include/gudhi/Strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Strong_witness_complex.h @@ -138,19 +138,26 @@ private: /** \brief Outputs the (weak) witness complex with * squared relaxation parameter 'max_alpha_square' * to simplicial complex 'complex'. + * The parameter 'limit_dimension' represents the maximal dimension of the simplicial complex + * (default value = no limit). */ template < typename SimplicialComplexForWitness > bool create_complex(SimplicialComplexForWitness& complex, - FT max_alpha_square) + FT max_alpha_square, + Landmark_id limit_dimension = std::numeric_limits::max()) { - unsigned nbL = landmarks_.size(); - unsigned complex_dim = 0; + std::size_t nbL = landmarks_.size(); + Landmark_id complex_dim = 0; if (complex.num_vertices() > 0) { - std::cerr << "Witness complex cannot create complex - complex is not empty.\n"; + std::cerr << "Strong witness complex cannot create complex - complex is not empty.\n"; return false; } if (max_alpha_square < 0) { - std::cerr << "Witness complex cannot create complex - squared relaxation parameter must be non-negative.\n"; + std::cerr << "Strong witness complex cannot create complex - squared relaxation parameter must be non-negative.\n"; + return false; + } + if (limit_dimension < 0) { + std::cerr << "Strong witness complex cannot create complex - limit dimension must be non-negative.\n"; return false; } typeVectorVertex vv; @@ -165,13 +172,13 @@ private: ActiveWitness aw(landmark_tree_.query_incremental_nearest_neighbors(w)); typeVectorVertex simplex; typename ActiveWitness::iterator aw_it = aw.begin(); - float lim_d2 = aw.begin()->second + max_alpha_square; - while (aw_it != aw.end() && aw_it->second < lim_d2) { + float lim_dist2 = aw.begin()->second + max_alpha_square; + while ((Landmark_id)simplex.size() <= limit_dimension + 1 && aw_it != aw.end() && aw_it->second < lim_dist2) { simplex.push_back(aw_it->first); complex.insert_simplex_and_subfaces(simplex, aw_it->second - aw.begin()->second); aw_it++; } - if (simplex.size() - 1 > complex_dim) + if ((Landmark_id)simplex.size() - 1 > complex_dim) complex_dim = simplex.size() - 1; } complex.set_dimension(complex_dim); diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index 7d8fce86..2a89306d 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -129,7 +129,8 @@ private: */ template < typename SimplicialComplexForWitness > bool create_complex(SimplicialComplexForWitness& complex, - FT max_alpha_square) + FT max_alpha_square, + Landmark_id limit_dimension = std::numeric_limits::max()) { std::size_t nbL = landmarks_.size(); if (complex.num_vertices() > 0) { @@ -140,6 +141,10 @@ private: std::cerr << "Witness complex cannot create complex - squared relaxation parameter must be non-negative.\n"; return false; } + if (limit_dimension < 0) { + std::cerr << "Witness complex cannot create complex - limit dimension must be non-negative.\n"; + return false; + } typeVectorVertex vv; ActiveWitnessList active_witnesses;// = new ActiveWitnessList(); for (unsigned i = 0; i != nbL; ++i) { @@ -150,13 +155,13 @@ private: complex.insert_simplex(vv, Filtration_value(0.0)); /* TODO Error if not inserted : normally no need here though*/ } - unsigned k = 1; /* current dimension in iterative construction */ + Landmark_id k = 1; /* current dimension in iterative construction */ for (auto w: witnesses_) active_witnesses.push_back(ActiveWitness(landmark_tree_.query_incremental_nearest_neighbors(w))); ActiveWitness aw_copy(active_witnesses.front()); - while (!active_witnesses.empty() && k < nbL ) { + while (!active_witnesses.empty() && k <= limit_dimension ) { typename ActiveWitnessList::iterator aw_it = active_witnesses.begin(); - std::vector simplex; + std::vector simplex; simplex.reserve(k+1); while (aw_it != active_witnesses.end()) { bool ok = add_all_faces_of_dimension(k, @@ -191,7 +196,7 @@ private: double alpha2, double norelax_dist2, typename ActiveWitness::iterator curr_l, - std::vector& simplex, + std::vector& simplex, SimplicialComplexForWitness& sc, typename ActiveWitness::iterator end) { @@ -251,17 +256,17 @@ private: * inserted_vertex is the handle of the (k+1)-th vertex witnessed by witness_id */ template < typename SimplicialComplexForWitness > - bool all_faces_in(std::vector& simplex, + bool all_faces_in(typeVectorVertex& simplex, double* filtration_value, SimplicialComplexForWitness& sc) { typedef typename SimplicialComplexForWitness::Simplex_handle Simplex_handle; - std::vector< int > facet; - for (std::vector::iterator not_it = simplex.begin(); not_it != simplex.end(); ++not_it) + typeVectorVertex facet; + for (typename typeVectorVertex::iterator not_it = simplex.begin(); not_it != simplex.end(); ++not_it) { facet.clear(); - for (std::vector::iterator it = simplex.begin(); it != simplex.end(); ++it) + for (typename typeVectorVertex::iterator it = simplex.begin(); it != simplex.end(); ++it) if (it != not_it) facet.push_back(*it); Simplex_handle facet_sh = sc.find(facet); -- cgit v1.2.3 From 309d5aa575735acefabc33abade72637c52fb931 Mon Sep 17 00:00:00 2001 From: skachano Date: Fri, 7 Oct 2016 16:08:41 +0000 Subject: Added a big chunk of documentation. +small fixes git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1679 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: d3166034bf662121bc21583bb027c67f736e904c --- biblio/bibliography.bib | 7 ++++ .../concept/Simplicial_complex_for_witness.h | 2 +- src/Witness_complex/doc/Witness_complex_doc.h | 46 ++++++++++++++++------ .../include/gudhi/Active_witness/Active_witness.h | 7 ++-- .../gudhi/Active_witness/Active_witness_iterator.h | 12 +++--- .../include/gudhi/Strong_witness_complex.h | 40 +++++++++++++++---- .../include/gudhi/Witness_complex.h | 46 +++++++++++++++------- 7 files changed, 116 insertions(+), 44 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/biblio/bibliography.bib b/biblio/bibliography.bib index 9fc01a5d..a994ebef 100644 --- a/biblio/bibliography.bib +++ b/biblio/bibliography.bib @@ -954,3 +954,10 @@ pages={91-106}, language={English} } +@article{de2004topological, + title={Topological estimation using witness complexes}, + author={De Silva, Vin and Carlsson, Gunnar}, + journal={Proc. Sympos. Point-Based Graphics}, + pages={157--166}, + year={2004} +} \ No newline at end of file diff --git a/src/Witness_complex/concept/Simplicial_complex_for_witness.h b/src/Witness_complex/concept/Simplicial_complex_for_witness.h index caaf0db6..b47de809 100644 --- a/src/Witness_complex/concept/Simplicial_complex_for_witness.h +++ b/src/Witness_complex/concept/Simplicial_complex_for_witness.h @@ -29,7 +29,7 @@ namespace witness_complex { /** \brief The concept Simplicial_Complex describes the requirements * for a type to implement a simplicial complex, - * used for example to build a 'Witness_complex'. + * used for example to build a Witness_complex. */ struct SimplicialComplexForWitness { /** Handle to specify a simplex. */ diff --git a/src/Witness_complex/doc/Witness_complex_doc.h b/src/Witness_complex/doc/Witness_complex_doc.h index 60dfd27b..1d6e9da2 100644 --- a/src/Witness_complex/doc/Witness_complex_doc.h +++ b/src/Witness_complex/doc/Witness_complex_doc.h @@ -6,33 +6,55 @@ \author Siargey Kachanovich - \image html "Witness_complex_representation.png" "Witness complex representation" + \image html "Witness_complex_representation.png" "Witness complex representation in a Simplex tree (from \cite boissonnatmariasimplextreealgorithmica)" \section Definitions - Witness complex \f$ Wit(W,L) \f$ is a simplicial complex defined on two sets of points in \f$\mathbb{R}^D\f$: + Witness complex is a simplicial complex defined on two sets of points in \f$\mathbb{R}^D\f$: \li \f$W\f$ set of **witnesses** and - \li \f$L \subseteq W\f$ set of **landmarks**. + \li \f$L\f$ set of **landmarks**. + + Even though often the set of landmarks \f$L\f$ is a subset of the set of witnesses \f$ W\f$, it is not a requirement for the current implementation. The simplices are based on landmarks - and a simplex belongs to the witness complex if and only if it is witnessed, that is: + and witnesses help to decide on which simplices are inserted via a predicate "is witnessed". + + De Silva and Carlsson in their paper \cite de2004topological differentiate **weak witnessing** and **strong witnessing**: + + - *weak*: \f$ \sigma \subset L \f$ is witnessed by \f$ w \in W\f$ if \f$ \forall l \in \sigma,\ \forall l' \in L \setminus \sigma,\ d(w,l) \leq d(w,l') \f$ + - *strong*: \f$ \sigma \subset L \f$ is witnessed by \f$ w \in W\f$ if \f$ \forall l \in \sigma,\ \forall l' \in L,\ d(w,l) \leq d(w,l') \f$ + + where \f$ d(.,.) \f$ is a distance function. + + Both definitions can be relaxed by a real value \f$\alpha\f$: + + - *weak*: \f$ \sigma \subset L \f$ is \f$\alpha\f$-witnessed by \f$ w \in W\f$ if \f$ \forall l \in \sigma,\ \forall l' \in L \setminus \sigma,\ d(w,l)^2 \leq d(w,l')^2 + \alpha^2 \f$ + - *strong*: \f$ \sigma \subset L \f$ is \f$\alpha\f$-witnessed by \f$ w \in W\f$ if \f$ \forall l \in \sigma,\ \forall l' \in L,\ d(w,l)^2 \leq d(w,l')^2 + \alpha^2 \f$ - \f$ \sigma \subset L \f$ is witnessed if there exists a point \f$w \in W\f$ such that - w is closer to the vertices of \f$ \sigma \f$ than other points in \f$ L \f$ and all of its faces are witnessed as well. - - The data structure is described in \cite boissonnatmariasimplextreealgorithmica . + which leads to definitions of **weak relaxed witness complex** (or just relaxed witness complex for short) and **strong relaxed witness complex** respectively. \section Implementation + + The two complexes described above are implemented in the corresponding classes + - Gudhi::witness_complex::Witness_complex + - Gudhi::witness_complex::Strong_witness_complex + + The construction of both of them follow the same scheme: + 1. Construct a search tree on landmarks (for that Gudhi::spatial_searching::Kd_tree_search is used internally). + 2. Construct lists of nearest landmarks for each witness (special internal structure Gudhi::spatial_searching::Active_witness is used internally). + 3. Construct the witness complex for nearest landmark lists. + + The constructors take on the step 1, while the function 'create_complex' executes the steps 2 and 3. - The principal class of this module is Gudhi::Witness_complex. + \section Examples - In both cases, the constructor for this class takes a {witness}x{closest_landmarks} table, where each row represents a witness and consists of landmarks sorted by distance to this witness. - This table can be constructed by two additional classes Landmark_choice_by_furthest_point and Landmark_choice_by_random_point also included in the module. + Here is an example of constructing a strong witness complex filtration and computing persistence on it: + + \include Witness_complex/example_strong_witness_persistence.cpp *\image html "bench_Cy8.png" "Running time as function on number of landmarks" width=10cm *\image html "bench_sphere.png" "Running time as function on number of witnesses for |L|=300" width=10cm - \copyright GNU General Public License v3. diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index e52410e4..2ca76767 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -31,9 +31,10 @@ namespace Gudhi { namespace witness_complex { - /** \brief Class representing a list of nearest neighbors to a given witness. - * \detail Every element is a pair of a landmark identifier and the squared distance to it. - */ + // /** \class Active_witness + // * \brief Class representing a list of nearest neighbors to a given witness. + // * \details Every element is a pair of a landmark identifier and the squared distance to it. + // */ template< typename Id_distance_pair, typename INS_range > class Active_witness { diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 9c96f7e8..38c7adb2 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -31,12 +31,12 @@ namespace Gudhi { namespace witness_complex { - /** \brief Iterator in the nearest landmark list. - * \detail After the iterator reaches the end of the list, - * the list is augmented by a (nearest landmark, distance) pair if possible. - * If all the landmarks are present in the list, iterator returns the specific end value - * of the corresponding 'Active_witness' object. - */ + // /** \brief Iterator in the nearest landmark list. + // * \details After the iterator reaches the end of the list, + // * the list is augmented by a (nearest landmark, distance) pair if possible. + // * If all the landmarks are present in the list, iterator returns the specific end value + // * of the corresponding 'Active_witness' object. + // */ template< typename Active_witness, typename Id_distance_pair, diff --git a/src/Witness_complex/include/gudhi/Strong_witness_complex.h b/src/Witness_complex/include/gudhi/Strong_witness_complex.h index 1ce050ad..e64f8f20 100644 --- a/src/Witness_complex/include/gudhi/Strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Strong_witness_complex.h @@ -37,6 +37,22 @@ namespace Gudhi { namespace witness_complex { +/** + * \private + * \class Strong_witness_complex + * \brief Constructs strong witness complex for the given sets of witnesses and landmarks. + * \ingroup witness_complex + * + * \tparam Kernel_ requires a CGAL::Epick_d class, which + * can be static if you know the ambiant dimension at compile-time, or dynamic if you don't. + * \tparam DimensionTag can be either Dimension_tag + * if you know the intrinsic dimension at compile-time, + * or CGAL::Dynamic_dimension_tag + * if you don't. + */ template< class Kernel_ > class Strong_witness_complex { private: @@ -55,7 +71,7 @@ private: typedef FT Filtration_value; - typedef std::ptrdiff_t Witness_id; + typedef std::size_t Witness_id; typedef typename Nearest_landmark_range::Point_with_transformed_distance Id_distance_pair; typedef typename Id_distance_pair::first_type Landmark_id; typedef Active_witness ActiveWitness; @@ -63,6 +79,8 @@ private: typedef std::vector< Landmark_id > typeVectorVertex; typedef std::pair< typeVectorVertex, Filtration_value> typeSimplex; + typedef Landmark_id Vertex_handle; + private: Point_range witnesses_, landmarks_; Kd_tree landmark_tree_; @@ -74,9 +92,13 @@ private: //@{ - /* + /** * \brief Initializes member variables before constructing simplicial complex. - * \details The parameters should satisfy InputIterator C++ concepts. + * \details Records landmarks from the range [landmarks_first, landmarks_last) into a + * table internally, as well as witnesses from the range [witnesses_first, witnesses_last). + * All iterator parameters should satisfy InputIterator + * C++ concept. */ template< typename InputIteratorLandmarks, typename InputIteratorWitnesses > @@ -90,15 +112,17 @@ private: /** \brief Returns the point corresponding to the given vertex. */ - Point_d get_point( std::size_t vertex ) const + template + Point_d get_point( Vertex_handle vertex ) const { return landmarks_[vertex]; } - /** \brief Outputs the (strong) witness complex with - * squared relaxation parameter 'max_alpha_square' - * to simplicial complex 'complex'. - * The parameter 'limit_dimension' represents the maximal dimension of the simplicial complex + /** \brief Outputs the strong witness complex in a simplicial complex data structure. + * @param[out] complex Simplicial complex data structure compatible with 'find' and 'insert' operations. + * (Cf SimplicialComplexForWitness) + * @param[in] max_alpha_square Maximal squared relaxation parameter. + * @param[in] limit_dimension Represents the maximal dimension of the simplicial complex * (default value = no limit). */ template < typename SimplicialComplexForWitness > diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index 7b46e1c0..6a944c43 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -37,12 +37,22 @@ namespace Gudhi { namespace witness_complex { -// /* -// * \private -// \class Witness_complex -// \brief Constructs the witness complex for the given set of witnesses and landmarks. -// \ingroup witness_complex -// */ +/** + * \private + * \class Witness_complex + * \brief Constructs (weak) witness complex for the given sets of witnesses and landmarks. + * \ingroup witness_complex + * + * \tparam Kernel_ requires a CGAL::Epick_d class, which + * can be static if you know the ambiant dimension at compile-time, or dynamic if you don't. + * \tparam DimensionTag can be either Dimension_tag + * if you know the intrinsic dimension at compile-time, + * or CGAL::Dynamic_dimension_tag + * if you don't. +*/ template< class Kernel_ > class Witness_complex { private: @@ -69,6 +79,8 @@ private: typedef std::vector< Landmark_id > typeVectorVertex; typedef std::pair< typeVectorVertex, Filtration_value> typeSimplex; + typedef Landmark_id Vertex_handle; + private: Point_range witnesses_, landmarks_; Kd_tree landmark_tree_; @@ -80,9 +92,13 @@ private: //@{ - /* + /** * \brief Initializes member variables before constructing simplicial complex. - * \details The parameters should satisfy InputIterator C++ concepts. + * \details Records landmarks from the range [landmarks_first, landmarks_last) into a + * table internally, as well as witnesses from the range [witnesses_first, witnesses_last). + * All iterator parameters should satisfy InputIterator + * C++ concept. */ template< typename InputIteratorLandmarks, typename InputIteratorWitnesses > @@ -95,16 +111,18 @@ private: } /** \brief Returns the point corresponding to the given vertex. + * @param[in] vertex Vertex handle of the point to retrieve. */ - Point_d get_point( std::size_t vertex ) const + Point_d get_point( Vertex_handle vertex ) const { return landmarks_[vertex]; } - /** \brief Outputs the (weak) witness complex with - * squared relaxation parameter 'max_alpha_square' - * to simplicial complex 'complex'. - * The parameter 'limit_dimension' represents the maximal dimension of the simplicial complex + /** \brief Outputs the (weak) witness complex in a simplicial complex data structure. + * @param[out] complex Simplicial complex data structure compatible with 'find' and 'insert' operations. + * (Cf SimplicialComplexForWitness) + * @param[in] max_alpha_square Maximal squared relaxation parameter. + * @param[in] limit_dimension Represents the maximal dimension of the simplicial complex * (default value = no limit). */ template < typename SimplicialComplexForWitness > @@ -229,7 +247,7 @@ private: return will_be_active; } - /** \brief Check if the facets of the k-dimensional simplex witnessed + /* \brief Check if the facets of the k-dimensional simplex witnessed * by witness witness_id are already in the complex. * inserted_vertex is the handle of the (k+1)-th vertex witnessed by witness_id */ -- cgit v1.2.3 From 84902ba3525a53f11bfcab8e10d3790900223681 Mon Sep 17 00:00:00 2001 From: skachano Date: Tue, 18 Oct 2016 12:26:30 +0000 Subject: Added a proper include for Active_witness git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1730 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: a3b8b8cf7d95a4abfee3dc5b4aa9272d54d85d4c --- src/Witness_complex/include/gudhi/Active_witness/Active_witness.h | 2 +- .../include/gudhi/Active_witness/Active_witness_iterator.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index 2ca76767..c6113442 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -23,7 +23,7 @@ #ifndef ACTIVE_WITNESS_H_ #define ACTIVE_WITNESS_H_ -#include "Active_witness_iterator.h" +#include #include #include diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 38c7adb2..25897de6 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -23,7 +23,6 @@ #ifndef ACTIVE_WITNESS_ITERATOR_H_ #define ACTIVE_WITNESS_ITERATOR_H_ -//#include "Active_witness.h" #include #include -- cgit v1.2.3 From 4473c9fd8d23097ed7b5570b800db245539e91d2 Mon Sep 17 00:00:00 2001 From: skachano Date: Tue, 18 Oct 2016 12:32:40 +0000 Subject: Removed Sophia Antipolis from copyrights git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1731 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: f97758e943397259712ad76c4db117df3d3415b6 --- src/Witness_complex/example/example_strong_witness_persistence.cpp | 2 +- src/Witness_complex/example/example_witness_complex_off.cpp | 2 +- src/Witness_complex/example/example_witness_complex_persistence.cpp | 2 +- src/Witness_complex/example/example_witness_complex_sphere.cpp | 2 +- src/Witness_complex/include/gudhi/Active_witness/Active_witness.h | 2 +- .../include/gudhi/Active_witness/Active_witness_iterator.h | 2 +- src/Witness_complex/include/gudhi/Strong_witness_complex.h | 2 +- src/Witness_complex/include/gudhi/Witness_complex.h | 2 +- src/Witness_complex/test/test_simple_witness_complex.cpp | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/example/example_strong_witness_persistence.cpp b/src/Witness_complex/example/example_strong_witness_persistence.cpp index 4e06867d..f43cba52 100644 --- a/src/Witness_complex/example/example_strong_witness_persistence.cpp +++ b/src/Witness_complex/example/example_strong_witness_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2016 INRIA (France) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/Witness_complex/example/example_witness_complex_off.cpp b/src/Witness_complex/example/example_witness_complex_off.cpp index 37646faf..94088370 100644 --- a/src/Witness_complex/example/example_witness_complex_off.cpp +++ b/src/Witness_complex/example/example_witness_complex_off.cpp @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2015 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2015 INRIA (France) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/Witness_complex/example/example_witness_complex_persistence.cpp b/src/Witness_complex/example/example_witness_complex_persistence.cpp index a4388047..b1b415fa 100644 --- a/src/Witness_complex/example/example_witness_complex_persistence.cpp +++ b/src/Witness_complex/example/example_witness_complex_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2016 INRIA (France) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/Witness_complex/example/example_witness_complex_sphere.cpp b/src/Witness_complex/example/example_witness_complex_sphere.cpp index 8e2c5ff6..d21195fa 100644 --- a/src/Witness_complex/example/example_witness_complex_sphere.cpp +++ b/src/Witness_complex/example/example_witness_complex_sphere.cpp @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2015 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2015 INRIA (France) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index c6113442..fce7d3d1 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2016 INRIA (France) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 25897de6..ae051bea 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2016 INRIA (France) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/Witness_complex/include/gudhi/Strong_witness_complex.h b/src/Witness_complex/include/gudhi/Strong_witness_complex.h index 73de580d..7ef8d3e5 100644 --- a/src/Witness_complex/include/gudhi/Strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Strong_witness_complex.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2015 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2015 INRIA (France) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index e336dc4f..ac0e8f66 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2015 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2015 INRIA (France) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/Witness_complex/test/test_simple_witness_complex.cpp b/src/Witness_complex/test/test_simple_witness_complex.cpp index 759ee14d..90b6cfa2 100644 --- a/src/Witness_complex/test/test_simple_witness_complex.cpp +++ b/src/Witness_complex/test/test_simple_witness_complex.cpp @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2016 INRIA (France) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -- cgit v1.2.3 From 2ef24de87b91f0e71177b3190affb0263f09379b Mon Sep 17 00:00:00 2001 From: skachano Date: Tue, 29 Nov 2016 20:59:17 +0000 Subject: Got rid of the comparison of iterators of different ranges git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1804 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: fb333a1b5ef20371393dfbf7a00a4fd73e3c92e7 --- .../include/gudhi/Active_witness/Active_witness.h | 3 --- .../gudhi/Active_witness/Active_witness_iterator.h | 15 +++++++-------- 2 files changed, 7 insertions(+), 11 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index fce7d3d1..debbd286 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -44,9 +44,6 @@ public: typedef Active_witness_iterator< ActiveWitness, Id_distance_pair, INS_iterator > iterator; typedef typename std::list Table; - Table end_element_table_ = {Id_distance_pair(-1,0)}; - typename Table::iterator end_pointer = end_element_table_.begin(); - Table nearest_landmark_table_; INS_range search_range_; INS_iterator iterator_last_; diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index ae051bea..dd1501c3 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -54,18 +54,17 @@ class Active_witness_iterator Active_witness *aw_; Pair_iterator lh_; // landmark handle - //INS_iterator iterator_last; - //INS_iterator iterator_end; + bool is_end_; // true only if the pointer is end and there are no more neighbors to add public: Active_witness_iterator(Active_witness* aw) - : aw_(aw), lh_(aw_->end_pointer) + : aw_(aw), lh_(aw_->nearest_landmark_table_.end()), is_end_(true) { } Active_witness_iterator(Active_witness* aw, Pair_iterator lh) - : aw_(aw), lh_(lh) - { + : aw_(aw), lh_(lh), is_end_(false) + { } private : @@ -77,7 +76,7 @@ private : bool equal(const Iterator& other) const { - return (lh_ == other.lh_); + return (is_end_ == other.is_end_) || (lh_ == other.lh_); } void increment() @@ -85,7 +84,7 @@ private : // if neighbor search is at its end, check if lh_++ is end if (aw_->iterator_last_ == aw_->iterator_end_) { if (lh_++ == aw_->nearest_landmark_table_.end()) { - lh_ = aw_->end_pointer; + is_end_ = true; return; } return; @@ -94,7 +93,7 @@ private : if (lh_->first == aw_->iterator_last_->first) { // if the next iterator is end, lh_it = end pointer if (++(aw_->iterator_last_) == aw_->iterator_end_) { - lh_ = aw_->end_pointer; + is_end_ = true; return; } else -- cgit v1.2.3 From ae96c8bbacc9c54e69c1a4bdf70e03dbde2ec48c Mon Sep 17 00:00:00 2001 From: skachano Date: Tue, 6 Dec 2016 10:25:27 +0000 Subject: Added assert git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1824 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: fdf5f7fecd75007929b9f5d817f186851aac4542 --- .../include/gudhi/Active_witness/Active_witness_iterator.h | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index dd1501c3..6853faa6 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -81,14 +81,8 @@ private : void increment() { - // if neighbor search is at its end, check if lh_++ is end - if (aw_->iterator_last_ == aw_->iterator_end_) { - if (lh_++ == aw_->nearest_landmark_table_.end()) { - is_end_ = true; - return; - } - return; - } + // the neighbor search can't be at the end iterator of a list + assert(!is_end_ && lh_ != aw_->nearest_landmark_table_.end()); // if the id of the current landmark is the same as the last one if (lh_->first == aw_->iterator_last_->first) { // if the next iterator is end, lh_it = end pointer -- cgit v1.2.3 From ea13c32806f38e1436a13425a18b93c8cfabfa69 Mon Sep 17 00:00:00 2001 From: skachano Date: Tue, 6 Dec 2016 10:33:35 +0000 Subject: Changed assert to GUDHI_CHECK git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1825 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: b9b5f5d857bb94ce06b917643cb1c5756cc307bb --- .../include/gudhi/Active_witness/Active_witness_iterator.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 6853faa6..38e39f79 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -82,7 +82,7 @@ private : void increment() { // the neighbor search can't be at the end iterator of a list - assert(!is_end_ && lh_ != aw_->nearest_landmark_table_.end()); + GUDHI_CHECK(!is_end_ && lh_ != aw_->nearest_landmark_table_.end(), std::logic_error("Wrong active witness increment.")); // if the id of the current landmark is the same as the last one if (lh_->first == aw_->iterator_last_->first) { // if the next iterator is end, lh_it = end pointer -- cgit v1.2.3 From 49d726423c3f270f542ca93d43387e0dbcdd0ca9 Mon Sep 17 00:00:00 2001 From: skachano Date: Thu, 19 Jan 2017 17:29:29 +0000 Subject: Added an example with nearest landmark table. It is buggy. git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1966 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 63ec7e948686d1f8c43576bab5a892ad816ffed4 --- src/Witness_complex/example/CMakeLists.txt | 3 ++ .../example/example_nearest_landmark_table.cpp | 50 ++++++++++++++++++++++ .../gudhi/Active_witness/Active_witness_iterator.h | 4 +- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/Witness_complex/example/example_nearest_landmark_table.cpp (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/example/CMakeLists.txt b/src/Witness_complex/example/CMakeLists.txt index 848239b5..2bae07d9 100644 --- a/src/Witness_complex/example/CMakeLists.txt +++ b/src/Witness_complex/example/CMakeLists.txt @@ -13,9 +13,12 @@ if(CGAL_FOUND) add_executable ( Witness_complex_example_strong_witness_persistence example_strong_witness_persistence.cpp ) target_link_libraries(Witness_complex_example_strong_witness_persistence ${Boost_PROGRAM_OPTIONS_LIBRARY}) + + add_executable ( Witness_complex_example_nearest_landmark_table example_nearest_landmark_table.cpp ) if (TBB_FOUND) target_link_libraries(Witness_complex_example_witness_persistence ${TBB_LIBRARIES}) target_link_libraries(Witness_complex_example_strong_witness_persistence ${TBB_LIBRARIES}) + target_link_libraries(Witness_complex_example_nearest_landmark_table ${TBB_LIBRARIES}) endif() add_test(Witness_complex_test_torus_persistence diff --git a/src/Witness_complex/example/example_nearest_landmark_table.cpp b/src/Witness_complex/example/example_nearest_landmark_table.cpp new file mode 100644 index 00000000..00ec17e0 --- /dev/null +++ b/src/Witness_complex/example/example_nearest_landmark_table.cpp @@ -0,0 +1,50 @@ +#define BOOST_PARAMETER_MAX_ARITY 12 + + +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +int main(int argc, char * const argv[]) { + typedef std::vector> Nearest_landmark_range; + typedef std::vector Nearest_landmark_table; + typedef Gudhi::witness_complex::Witness_complex Witness_complex; + + Gudhi::Simplex_tree<> simplex_tree; + Nearest_landmark_table nlt; + + // Example contains 10 witnesses and 5 landmarks + Nearest_landmark_range w0 = {std::make_pair(0,0), std::make_pair(1,1), std::make_pair(2,2), std::make_pair(3,3), std::make_pair(4,4)}; nlt.push_back(w0); + Nearest_landmark_range w1 = {std::make_pair(1,0), std::make_pair(2,1), std::make_pair(3,2), std::make_pair(4,3), std::make_pair(0,4)}; nlt.push_back(w1); + Nearest_landmark_range w2 = {std::make_pair(2,0), std::make_pair(3,1), std::make_pair(4,2), std::make_pair(0,3), std::make_pair(1,4)}; nlt.push_back(w2); + Nearest_landmark_range w3 = {std::make_pair(3,0), std::make_pair(4,1), std::make_pair(0,2), std::make_pair(1,3), std::make_pair(2,4)}; nlt.push_back(w3); + Nearest_landmark_range w4 = {std::make_pair(4,0), std::make_pair(0,1), std::make_pair(1,2), std::make_pair(2,3), std::make_pair(3,4)}; nlt.push_back(w4); + Nearest_landmark_range x0 = {std::make_pair(0,0), std::make_pair(4,1), std::make_pair(3,2), std::make_pair(2,3), std::make_pair(1,4)}; nlt.push_back(x0); + Nearest_landmark_range x1 = {std::make_pair(1,0), std::make_pair(0,1), std::make_pair(4,2), std::make_pair(3,3), std::make_pair(2,4)}; nlt.push_back(x1); + Nearest_landmark_range x2 = {std::make_pair(2,0), std::make_pair(1,1), std::make_pair(0,2), std::make_pair(4,3), std::make_pair(3,4)}; nlt.push_back(x2); + Nearest_landmark_range x3 = {std::make_pair(3,0), std::make_pair(2,1), std::make_pair(1,2), std::make_pair(0,3), std::make_pair(4,4)}; nlt.push_back(x3); + Nearest_landmark_range x4 = {std::make_pair(4,0), std::make_pair(3,1), std::make_pair(2,2), std::make_pair(1,3), std::make_pair(0,4)}; nlt.push_back(x4); + + Witness_complex witness_complex(nlt); + witness_complex.create_complex(simplex_tree, 4.1); + + Gudhi::persistent_cohomology::Persistent_cohomology, Gudhi::persistent_cohomology::Field_Zp > pcoh(simplex_tree); + // initializes the coefficient field for homology + pcoh.init_coefficients(11); + + pcoh.compute_persistent_cohomology(-0.1); + pcoh.output_diagram(); +} diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 38e39f79..5b040914 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -90,8 +90,10 @@ private : is_end_ = true; return; } - else + else { + //aw_->iterator_last_ = ++(aw_->iterator_last_); aw_->nearest_landmark_table_.push_back(*(aw_->iterator_last_)); + } } lh_++; } -- cgit v1.2.3 From db1398bcf173f372fc3ef7a410e4e72b0192f8cc Mon Sep 17 00:00:00 2001 From: skachano Date: Fri, 20 Jan 2017 15:24:36 +0000 Subject: non-Euclidean example works, but the test not anymore git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1975 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 251638e6417f1059529d57a8a87364a17cf9f5a2 --- src/Witness_complex/example/example_nearest_landmark_table.cpp | 10 ++++------ .../include/gudhi/Active_witness/Active_witness.h | 2 +- .../include/gudhi/Active_witness/Active_witness_iterator.h | 5 +++-- src/Witness_complex/include/gudhi/Witness_complex.h | 2 +- src/Witness_complex/test/test_simple_witness_complex.cpp | 4 ++-- 5 files changed, 11 insertions(+), 12 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/example/example_nearest_landmark_table.cpp b/src/Witness_complex/example/example_nearest_landmark_table.cpp index 00ec17e0..becf74e7 100644 --- a/src/Witness_complex/example/example_nearest_landmark_table.cpp +++ b/src/Witness_complex/example/example_nearest_landmark_table.cpp @@ -17,6 +17,7 @@ #include #include #include +#include int main(int argc, char * const argv[]) { typedef std::vector> Nearest_landmark_range; @@ -26,21 +27,18 @@ int main(int argc, char * const argv[]) { Gudhi::Simplex_tree<> simplex_tree; Nearest_landmark_table nlt; - // Example contains 10 witnesses and 5 landmarks + // Example contains 5 witnesses and 5 landmarks Nearest_landmark_range w0 = {std::make_pair(0,0), std::make_pair(1,1), std::make_pair(2,2), std::make_pair(3,3), std::make_pair(4,4)}; nlt.push_back(w0); Nearest_landmark_range w1 = {std::make_pair(1,0), std::make_pair(2,1), std::make_pair(3,2), std::make_pair(4,3), std::make_pair(0,4)}; nlt.push_back(w1); Nearest_landmark_range w2 = {std::make_pair(2,0), std::make_pair(3,1), std::make_pair(4,2), std::make_pair(0,3), std::make_pair(1,4)}; nlt.push_back(w2); Nearest_landmark_range w3 = {std::make_pair(3,0), std::make_pair(4,1), std::make_pair(0,2), std::make_pair(1,3), std::make_pair(2,4)}; nlt.push_back(w3); Nearest_landmark_range w4 = {std::make_pair(4,0), std::make_pair(0,1), std::make_pair(1,2), std::make_pair(2,3), std::make_pair(3,4)}; nlt.push_back(w4); - Nearest_landmark_range x0 = {std::make_pair(0,0), std::make_pair(4,1), std::make_pair(3,2), std::make_pair(2,3), std::make_pair(1,4)}; nlt.push_back(x0); - Nearest_landmark_range x1 = {std::make_pair(1,0), std::make_pair(0,1), std::make_pair(4,2), std::make_pair(3,3), std::make_pair(2,4)}; nlt.push_back(x1); - Nearest_landmark_range x2 = {std::make_pair(2,0), std::make_pair(1,1), std::make_pair(0,2), std::make_pair(4,3), std::make_pair(3,4)}; nlt.push_back(x2); - Nearest_landmark_range x3 = {std::make_pair(3,0), std::make_pair(2,1), std::make_pair(1,2), std::make_pair(0,3), std::make_pair(4,4)}; nlt.push_back(x3); - Nearest_landmark_range x4 = {std::make_pair(4,0), std::make_pair(3,1), std::make_pair(2,2), std::make_pair(1,3), std::make_pair(0,4)}; nlt.push_back(x4); Witness_complex witness_complex(nlt); witness_complex.create_complex(simplex_tree, 4.1); + std::cout << "Number of simplices: " << simplex_tree.num_simplices() << std::endl; + Gudhi::persistent_cohomology::Persistent_cohomology, Gudhi::persistent_cohomology::Field_Zp > pcoh(simplex_tree); // initializes the coefficient field for homology pcoh.init_coefficients(11); diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index debbd286..c3edc0b7 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -50,7 +50,7 @@ public: INS_iterator iterator_end_; Active_witness(INS_range search_range) - : search_range_(search_range), iterator_last_(search_range.begin()), iterator_end_(search_range.end()) + : search_range_(search_range), iterator_last_(search_range_.begin()), iterator_end_(search_range_.end()) { nearest_landmark_table_.push_back(*iterator_last_); } diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 5b040914..b0a88662 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -86,12 +86,13 @@ private : // if the id of the current landmark is the same as the last one if (lh_->first == aw_->iterator_last_->first) { // if the next iterator is end, lh_it = end pointer - if (++(aw_->iterator_last_) == aw_->iterator_end_) { + INS_iterator next_it = aw_->iterator_last_; next_it++; + if (next_it == aw_->iterator_end_) { is_end_ = true; return; } else { - //aw_->iterator_last_ = ++(aw_->iterator_last_); + ++(aw_->iterator_last_); aw_->nearest_landmark_table_.push_back(*(aw_->iterator_last_)); } } diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index 3305a8e2..576b8b0d 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -62,7 +62,7 @@ private: typedef Landmark_id Vertex_handle; private: - Nearest_landmark_table_& nearest_landmark_table_; + Nearest_landmark_table_ nearest_landmark_table_; public: ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/Witness_complex/test/test_simple_witness_complex.cpp b/src/Witness_complex/test/test_simple_witness_complex.cpp index 2d4134f4..b47ebe4d 100644 --- a/src/Witness_complex/test/test_simple_witness_complex.cpp +++ b/src/Witness_complex/test/test_simple_witness_complex.cpp @@ -31,6 +31,7 @@ typedef Gudhi::spatial_searching::Kd_tree_search Kd_tree; typedef Kd_tree::INS_range Nearest_landmark_range; typedef std::vector Nearest_landmark_table; typedef Gudhi::witness_complex::Witness_complex WitnessComplex; +typedef Gudhi::witness_complex::Strong_witness_complex StrongWitnessComplex; /* All landmarks and witnesses are taken on the grid in the following manner. @@ -117,8 +118,7 @@ BOOST_AUTO_TEST_CASE(simple_witness_complex) { // Strong complex : non-Euclidean version - EuclideanStrongWitnessComplex strong_witness_complex(landmarks, - witnesses); + StrongWitnessComplex strong_witness_complex(nearest_landmark_table); strong_witness_complex.create_complex(strong_relaxed_complex_ne, 9.1); strong_witness_complex.create_complex(strong_relaxed_complex2_ne, 9.1, 2); -- cgit v1.2.3 From ecc6aaf89753345a472aac89b73a2deff10cc26c Mon Sep 17 00:00:00 2001 From: skachano Date: Fri, 20 Jan 2017 17:10:45 +0000 Subject: Redesigned the whole Active_witness_iterator, still doesn't work git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1978 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 732862e9c29fc326b8ca4f5e6bb5f14945b0d924 --- .../include/gudhi/Active_witness/Active_witness.h | 6 ++-- .../gudhi/Active_witness/Active_witness_iterator.h | 33 ++++++++++++++-------- 2 files changed, 24 insertions(+), 15 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index c3edc0b7..4c8ded61 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -46,13 +46,13 @@ public: Table nearest_landmark_table_; INS_range search_range_; - INS_iterator iterator_last_; + INS_iterator iterator_next_; INS_iterator iterator_end_; Active_witness(INS_range search_range) - : search_range_(search_range), iterator_last_(search_range_.begin()), iterator_end_(search_range_.end()) + : search_range_(search_range), iterator_next_(++(search_range_.begin())), iterator_end_(search_range_.end()) { - nearest_landmark_table_.push_back(*iterator_last_); + //nearest_landmark_table_.push_back(*iterator_last_); } iterator begin() diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index b0a88662..79d7fa87 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -63,8 +63,20 @@ public: } Active_witness_iterator(Active_witness* aw, Pair_iterator lh) - : aw_(aw), lh_(lh), is_end_(false) - { + : aw_(aw), lh_(lh) + { + is_end_ = false; + if (lh_ == aw_->nearest_landmark_table_.end()) { + if (aw_->iterator_next_ == aw_->iterator_end_) + is_end_ = true; + else { + aw_->nearest_landmark_table_.push_back(*aw_->iterator_next_); + lh_ = --aw_->nearest_landmark_table_.end(); + ++(aw_->iterator_next_); + } + } + else + lh_++; } private : @@ -84,21 +96,18 @@ private : // the neighbor search can't be at the end iterator of a list GUDHI_CHECK(!is_end_ && lh_ != aw_->nearest_landmark_table_.end(), std::logic_error("Wrong active witness increment.")); // if the id of the current landmark is the same as the last one - if (lh_->first == aw_->iterator_last_->first) { - // if the next iterator is end, lh_it = end pointer - INS_iterator next_it = aw_->iterator_last_; next_it++; - if (next_it == aw_->iterator_end_) { + + lh_++; + if (lh_ == aw_->nearest_landmark_table_.end()) { + if (aw_->iterator_next_ == aw_->iterator_end_) is_end_ = true; - return; - } else { - ++(aw_->iterator_last_); - aw_->nearest_landmark_table_.push_back(*(aw_->iterator_last_)); + aw_->nearest_landmark_table_.push_back(*aw_->iterator_next_); + lh_ = std::prev(aw_->nearest_landmark_table_.end()); + ++(aw_->iterator_next_); } } - lh_++; } - }; } -- cgit v1.2.3 From 249dfd3cc43598cb37b005442a636be4bf0dc204 Mon Sep 17 00:00:00 2001 From: skachano Date: Fri, 20 Jan 2017 17:31:11 +0000 Subject: The new example and the old test work git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1979 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 605676bce000e8e41172382a240a4f27d43da92d --- src/Witness_complex/include/gudhi/Active_witness/Active_witness.h | 2 +- .../include/gudhi/Active_witness/Active_witness_iterator.h | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index 4c8ded61..f64701fa 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -50,7 +50,7 @@ public: INS_iterator iterator_end_; Active_witness(INS_range search_range) - : search_range_(search_range), iterator_next_(++(search_range_.begin())), iterator_end_(search_range_.end()) + : search_range_(search_range), iterator_next_(search_range_.begin()), iterator_end_(search_range_.end()) { //nearest_landmark_table_.push_back(*iterator_last_); } diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 79d7fa87..c1d2091a 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -75,8 +75,6 @@ public: ++(aw_->iterator_next_); } } - else - lh_++; } private : -- cgit v1.2.3 From 53f243365ddc1653b776fe97ea8ba8493199dc14 Mon Sep 17 00:00:00 2001 From: skachano Date: Sat, 21 Jan 2017 11:00:43 +0000 Subject: Added all the consts git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1980 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 4651513288c5bf45fbdecd6b396779201b874f84 --- src/Witness_complex/include/gudhi/Active_witness/Active_witness.h | 2 +- .../include/gudhi/Active_witness/Active_witness_iterator.h | 2 +- src/Witness_complex/include/gudhi/Strong_witness_complex.h | 4 ++-- src/Witness_complex/include/gudhi/Witness_complex.h | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index f64701fa..08762fb3 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -49,7 +49,7 @@ public: INS_iterator iterator_next_; INS_iterator iterator_end_; - Active_witness(INS_range search_range) + Active_witness(const INS_range& search_range) : search_range_(search_range), iterator_next_(search_range_.begin()), iterator_end_(search_range_.end()) { //nearest_landmark_table_.push_back(*iterator_last_); diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index c1d2091a..d6ea6403 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -62,7 +62,7 @@ public: { } - Active_witness_iterator(Active_witness* aw, Pair_iterator lh) + Active_witness_iterator(Active_witness* aw, const Pair_iterator& lh) : aw_(aw), lh_(lh) { is_end_ = false; diff --git a/src/Witness_complex/include/gudhi/Strong_witness_complex.h b/src/Witness_complex/include/gudhi/Strong_witness_complex.h index abfc879c..87965b6e 100644 --- a/src/Witness_complex/include/gudhi/Strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Strong_witness_complex.h @@ -93,7 +93,7 @@ private: template < typename SimplicialComplexForWitness > bool create_complex(SimplicialComplexForWitness& complex, double max_alpha_square, - Landmark_id limit_dimension = std::numeric_limits::max()-1) + Landmark_id limit_dimension = std::numeric_limits::max()-1) const { Landmark_id complex_dim = 0; if (complex.num_vertices() > 0) { @@ -147,7 +147,7 @@ private: typename ActiveWitness::iterator aw_it, double filtration_value, typeVectorVertex& simplex, - SimplicialComplexForWitness& sc) + SimplicialComplexForWitness& sc) const { if (dim > 0) while (curr_it != vertices.end()) { diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index 576b8b0d..7a6ef9ed 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -97,7 +97,7 @@ private: template < typename SimplicialComplexForWitness > bool create_complex(SimplicialComplexForWitness& complex, double max_alpha_square, - Landmark_id limit_dimension = std::numeric_limits::max()) + Landmark_id limit_dimension = std::numeric_limits::max()) const { if (complex.num_vertices() > 0) { std::cerr << "Witness complex cannot create complex - complex is not empty.\n"; @@ -156,7 +156,7 @@ private: typename ActiveWitness::iterator curr_l, std::vector& simplex, SimplicialComplexForWitness& sc, - typename ActiveWitness::iterator end) + typename ActiveWitness::iterator end) const { if (curr_l == end) return false; -- cgit v1.2.3 From 0473df92a6f4d4253c44046b13bf6aba254987f6 Mon Sep 17 00:00:00 2001 From: skachano Date: Mon, 13 Feb 2017 11:13:16 +0000 Subject: Hid the Active_witness classes from doc git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@2068 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: e37c1486076cf5a1699c643ac71db22934944eca --- .../include/gudhi/Active_witness/Active_witness.h | 8 ++++---- .../include/gudhi/Active_witness/Active_witness_iterator.h | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index 08762fb3..bb6e1e6f 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -31,10 +31,10 @@ namespace Gudhi { namespace witness_complex { - // /** \class Active_witness - // * \brief Class representing a list of nearest neighbors to a given witness. - // * \details Every element is a pair of a landmark identifier and the squared distance to it. - // */ + /* \class Active_witness + * \brief Class representing a list of nearest neighbors to a given witness. + * \details Every element is a pair of a landmark identifier and the squared distance to it. + */ template< typename Id_distance_pair, typename INS_range > class Active_witness { diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index d6ea6403..7f48faa4 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -30,12 +30,12 @@ namespace Gudhi { namespace witness_complex { - // /** \brief Iterator in the nearest landmark list. - // * \details After the iterator reaches the end of the list, - // * the list is augmented by a (nearest landmark, distance) pair if possible. - // * If all the landmarks are present in the list, iterator returns the specific end value - // * of the corresponding 'Active_witness' object. - // */ +/* \brief Iterator in the nearest landmark list. + * \details After the iterator reaches the end of the list, + * the list is augmented by a (nearest landmark, distance) pair if possible. + * If all the landmarks are present in the list, iterator returns the specific end value + * of the corresponding 'Active_witness' object. + */ template< typename Active_witness, typename Id_distance_pair, -- cgit v1.2.3 From 0669538ac4c6640202b2e819f3ae4924b199a26b Mon Sep 17 00:00:00 2001 From: skachano Date: Mon, 13 Feb 2017 16:04:14 +0000 Subject: Removed a useless comment and a dead line git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@2073 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: cf13ae95d2757e5d274679107c0b40c185cf47c9 --- src/Witness_complex/include/gudhi/Active_witness/Active_witness.h | 1 - src/Witness_complex/include/gudhi/Witness_complex.h | 1 - 2 files changed, 2 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index bb6e1e6f..c9f506d9 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -52,7 +52,6 @@ public: Active_witness(const INS_range& search_range) : search_range_(search_range), iterator_next_(search_range_.begin()), iterator_end_(search_range_.end()) { - //nearest_landmark_table_.push_back(*iterator_last_); } iterator begin() diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index 103b131c..2c77ef77 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -114,7 +114,6 @@ private: std::cerr << "Witness complex cannot create complex - limit dimension must be non-negative.\n"; return false; } - typeVectorVertex vv; ActiveWitnessList active_witnesses; Landmark_id k = 0; /* current dimension in iterative construction */ for (auto w: nearest_landmark_table_) -- cgit v1.2.3 From 42451e635474bfbbf866927707d2acfb7e426928 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 28 Feb 2017 12:12:39 +0000 Subject: Fix CppCheck git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@2116 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 39094c55b9ccb3f09e344a6eff474c3373b13292 --- .../example/example_nearest_landmark_table.cpp | 31 +++++++++++++--------- .../include/gudhi/Active_witness/Active_witness.h | 6 ++--- .../gudhi/Active_witness/Active_witness_iterator.h | 18 ++++++------- .../include/gudhi/Witness_complex/all_faces_in.h | 6 ++--- 4 files changed, 34 insertions(+), 27 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/example/example_nearest_landmark_table.cpp b/src/Witness_complex/example/example_nearest_landmark_table.cpp index becf74e7..b3883248 100644 --- a/src/Witness_complex/example/example_nearest_landmark_table.cpp +++ b/src/Witness_complex/example/example_nearest_landmark_table.cpp @@ -20,26 +20,33 @@ #include int main(int argc, char * const argv[]) { - typedef std::vector> Nearest_landmark_range; - typedef std::vector Nearest_landmark_table; - typedef Gudhi::witness_complex::Witness_complex Witness_complex; - - Gudhi::Simplex_tree<> simplex_tree; + using Nearest_landmark_range = std::vector>; + using Nearest_landmark_table = std::vector; + using Witness_complex = Gudhi::witness_complex::Witness_complex; + using Simplex_tree = Gudhi::Simplex_tree<>; + + Simplex_tree simplex_tree; Nearest_landmark_table nlt; // Example contains 5 witnesses and 5 landmarks - Nearest_landmark_range w0 = {std::make_pair(0,0), std::make_pair(1,1), std::make_pair(2,2), std::make_pair(3,3), std::make_pair(4,4)}; nlt.push_back(w0); - Nearest_landmark_range w1 = {std::make_pair(1,0), std::make_pair(2,1), std::make_pair(3,2), std::make_pair(4,3), std::make_pair(0,4)}; nlt.push_back(w1); - Nearest_landmark_range w2 = {std::make_pair(2,0), std::make_pair(3,1), std::make_pair(4,2), std::make_pair(0,3), std::make_pair(1,4)}; nlt.push_back(w2); - Nearest_landmark_range w3 = {std::make_pair(3,0), std::make_pair(4,1), std::make_pair(0,2), std::make_pair(1,3), std::make_pair(2,4)}; nlt.push_back(w3); - Nearest_landmark_range w4 = {std::make_pair(4,0), std::make_pair(0,1), std::make_pair(1,2), std::make_pair(2,3), std::make_pair(3,4)}; nlt.push_back(w4); + Nearest_landmark_range w0 = {std::make_pair(0, 0), std::make_pair(1, 1), std::make_pair(2, 2), + std::make_pair(3, 3), std::make_pair(4, 4)}; nlt.push_back(w0); + Nearest_landmark_range w1 = {std::make_pair(1, 0), std::make_pair(2, 1), std::make_pair(3, 2), + std::make_pair(4, 3), std::make_pair(0, 4)}; nlt.push_back(w1); + Nearest_landmark_range w2 = {std::make_pair(2, 0), std::make_pair(3, 1), std::make_pair(4, 2), + std::make_pair(0, 3), std::make_pair(1, 4)}; nlt.push_back(w2); + Nearest_landmark_range w3 = {std::make_pair(3, 0), std::make_pair(4, 1), std::make_pair(0, 2), + std::make_pair(1, 3), std::make_pair(2, 4)}; nlt.push_back(w3); + Nearest_landmark_range w4 = {std::make_pair(4, 0), std::make_pair(0, 1), std::make_pair(1, 2), + std::make_pair(2, 3), std::make_pair(3, 4)}; nlt.push_back(w4); Witness_complex witness_complex(nlt); witness_complex.create_complex(simplex_tree, 4.1); std::cout << "Number of simplices: " << simplex_tree.num_simplices() << std::endl; - - Gudhi::persistent_cohomology::Persistent_cohomology, Gudhi::persistent_cohomology::Field_Zp > pcoh(simplex_tree); + + using Field_Zp = Gudhi::persistent_cohomology::Field_Zp; + Gudhi::persistent_cohomology::Persistent_cohomology pcoh(simplex_tree); // initializes the coefficient field for homology pcoh.init_coefficients(11); diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index c9f506d9..ffc1750f 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -20,8 +20,8 @@ * along with this program. If not, see . */ -#ifndef ACTIVE_WITNESS_H_ -#define ACTIVE_WITNESS_H_ +#ifndef ACTIVE_WITNESS_ACTIVE_WITNESS_H_ +#define ACTIVE_WITNESS_ACTIVE_WITNESS_H_ #include #include @@ -68,4 +68,4 @@ public: } } -#endif +#endif // ACTIVE_WITNESS_ACTIVE_WITNESS_H_ diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 7f48faa4..69a335fa 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -20,8 +20,8 @@ * along with this program. If not, see . */ -#ifndef ACTIVE_WITNESS_ITERATOR_H_ -#define ACTIVE_WITNESS_ITERATOR_H_ +#ifndef ACTIVE_WITNESS_ACTIVE_WITNESS_ITERATOR_H_ +#define ACTIVE_WITNESS_ACTIVE_WITNESS_ITERATOR_H_ #include #include @@ -67,9 +67,9 @@ public: { is_end_ = false; if (lh_ == aw_->nearest_landmark_table_.end()) { - if (aw_->iterator_next_ == aw_->iterator_end_) + if (aw_->iterator_next_ == aw_->iterator_end_) { is_end_ = true; - else { + } else { aw_->nearest_landmark_table_.push_back(*aw_->iterator_next_); lh_ = --aw_->nearest_landmark_table_.end(); ++(aw_->iterator_next_); @@ -97,9 +97,9 @@ private : lh_++; if (lh_ == aw_->nearest_landmark_table_.end()) { - if (aw_->iterator_next_ == aw_->iterator_end_) + if (aw_->iterator_next_ == aw_->iterator_end_) { is_end_ = true; - else { + } else { aw_->nearest_landmark_table_.push_back(*aw_->iterator_next_); lh_ = std::prev(aw_->nearest_landmark_table_.end()); ++(aw_->iterator_next_); @@ -108,7 +108,7 @@ private : } }; -} -} +} // namespace witness_complex +} // namespace Gudhi -#endif +#endif // ACTIVE_WITNESS_ACTIVE_WITNESS_ITERATOR_H_ diff --git a/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h b/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h index b69719a3..d009caca 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h +++ b/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h @@ -1,5 +1,5 @@ -#ifndef ALL_FACES_IN_H_ -#define ALL_FACES_IN_H_ +#ifndef WITNESS_COMPLEX_ALL_FACES_IN_H_ +#define WITNESS_COMPLEX_ALL_FACES_IN_H_ /* \brief Check if the facets of the k-dimensional simplex witnessed * by witness witness_id are already in the complex. @@ -32,4 +32,4 @@ template < typename SimplicialComplexForWitness, return true; } -#endif +#endif // WITNESS_COMPLEX_ALL_FACES_IN_H_ -- cgit v1.2.3 From f2b63bcaa647d1ec839dbe2e5edbe5c4fde1b304 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 28 Feb 2017 16:16:08 +0000 Subject: Fix cppcheck git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@2120 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 49a5c2c6e94d9fbf235eecc92fa30e62980c7c70 --- .../example/example_nearest_landmark_table.cpp | 34 ++++++++++---- .../example/example_strong_witness_complex_off.cpp | 28 +++++++++-- .../example/example_strong_witness_persistence.cpp | 54 ++++++++++++++-------- .../example/example_witness_complex_off.cpp | 11 ++--- .../example_witness_complex_persistence.cpp | 22 +++++++++ .../example/example_witness_complex_sphere.cpp | 33 +++++++++---- src/Witness_complex/example/generators.h | 14 +++--- .../include/gudhi/Active_witness/Active_witness.h | 22 ++++----- .../gudhi/Active_witness/Active_witness_iterator.h | 41 ++++++++-------- .../gudhi/Euclidean_strong_witness_complex.h | 29 ++++++------ .../include/gudhi/Strong_witness_complex.h | 54 ++++++++++------------ .../include/gudhi/Witness_complex.h | 42 ++++++++--------- .../include/gudhi/Witness_complex/all_faces_in.h | 30 ++++++++++-- 13 files changed, 250 insertions(+), 164 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/example/example_nearest_landmark_table.cpp b/src/Witness_complex/example/example_nearest_landmark_table.cpp index b3883248..65b675f9 100644 --- a/src/Witness_complex/example/example_nearest_landmark_table.cpp +++ b/src/Witness_complex/example/example_nearest_landmark_table.cpp @@ -1,16 +1,31 @@ -#define BOOST_PARAMETER_MAX_ARITY 12 - +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Siargey Kachanovich + * + * Copyright (C) 2016 INRIA (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ -#include -#include +#define BOOST_PARAMETER_MAX_ARITY 12 #include #include -#include #include -#include - #include #include #include @@ -24,6 +39,8 @@ int main(int argc, char * const argv[]) { using Nearest_landmark_table = std::vector; using Witness_complex = Gudhi::witness_complex::Witness_complex; using Simplex_tree = Gudhi::Simplex_tree<>; + using Field_Zp = Gudhi::persistent_cohomology::Field_Zp; + using Persistent_cohomology = Gudhi::persistent_cohomology::Persistent_cohomology; Simplex_tree simplex_tree; Nearest_landmark_table nlt; @@ -45,8 +62,7 @@ int main(int argc, char * const argv[]) { std::cout << "Number of simplices: " << simplex_tree.num_simplices() << std::endl; - using Field_Zp = Gudhi::persistent_cohomology::Field_Zp; - Gudhi::persistent_cohomology::Persistent_cohomology pcoh(simplex_tree); + Persistent_cohomology pcoh(simplex_tree); // initializes the coefficient field for homology pcoh.init_coefficients(11); diff --git a/src/Witness_complex/example/example_strong_witness_complex_off.cpp b/src/Witness_complex/example/example_strong_witness_complex_off.cpp index 6a4925b8..0ee9ee90 100644 --- a/src/Witness_complex/example/example_strong_witness_complex_off.cpp +++ b/src/Witness_complex/example/example_strong_witness_complex_off.cpp @@ -1,5 +1,24 @@ -#include -#include +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Siargey Kachanovich + * + * Copyright (C) 2016 INRIA (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include #include @@ -16,9 +35,8 @@ using K = CGAL::Epick_d; using Point_d = typename K::Point_d; -typedef typename Gudhi::witness_complex::Euclidean_strong_witness_complex Witness_complex; -using typeVectorVertex = std::vector< typename Gudhi::Simplex_tree<>::Vertex_handle >; -using Point_vector = std::vector< Point_d >; +using Witness_complex = Gudhi::witness_complex::Euclidean_strong_witness_complex; +using Point_vector = std::vector; int main(int argc, char * const argv[]) { if (argc != 5) { diff --git a/src/Witness_complex/example/example_strong_witness_persistence.cpp b/src/Witness_complex/example/example_strong_witness_persistence.cpp index d42603aa..5efe69fd 100644 --- a/src/Witness_complex/example/example_strong_witness_persistence.cpp +++ b/src/Witness_complex/example/example_strong_witness_persistence.cpp @@ -1,3 +1,25 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Siargey Kachanovich + * + * Copyright (C) 2016 INRIA (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include #include #include @@ -12,18 +34,17 @@ #include #include // infinity -using namespace Gudhi; -using namespace Gudhi::persistent_cohomology; +using K = CGAL::Epick_d; +using Point_d = K::Point_d; -typedef CGAL::Epick_d K; -typedef typename K::Point_d Point_d; +using Point_vector = std::vector; +using Strong_witness_complex = Gudhi::witness_complex::Euclidean_strong_witness_complex; +using SimplexTree = Gudhi::Simplex_tree<>; -typedef typename std::vector Point_vector; -typedef typename Gudhi::witness_complex::Euclidean_strong_witness_complex Strong_witness_complex; -typedef Gudhi::Simplex_tree<> SimplexTree; +using Filtration_value = SimplexTree::Filtration_value; -typedef int Vertex_handle; -typedef double Filtration_value; +using Field_Zp = Gudhi::persistent_cohomology::Field_Zp; +using Persistent_cohomology = Gudhi::persistent_cohomology::Persistent_cohomology; void program_options(int argc, char * argv[] , int & nbL @@ -61,9 +82,9 @@ int main(int argc, char * argv[]) { // Compute witness complex Strong_witness_complex strong_witness_complex(landmarks, witnesses); - + strong_witness_complex.create_complex(simplex_tree, max_squared_alpha, lim_d); - + std::cout << "The complex contains " << simplex_tree.num_simplices() << " simplices \n"; std::cout << " and has dimension " << simplex_tree.dimension() << " \n"; @@ -71,7 +92,7 @@ int main(int argc, char * argv[]) { simplex_tree.initialize_filtration(); // Compute the persistence diagram of the complex - persistent_cohomology::Persistent_cohomology pcoh(simplex_tree); + Persistent_cohomology pcoh(simplex_tree); // initializes the coefficient field for homology pcoh.init_coefficients(p); @@ -89,7 +110,6 @@ int main(int argc, char * argv[]) { return 0; } - void program_options(int argc, char * argv[] , int & nbL , std::string & file_name @@ -98,14 +118,12 @@ void program_options(int argc, char * argv[] , int & p , int & dim_max , Filtration_value & min_persistence) { - namespace po = boost::program_options; - + po::options_description hidden("Hidden options"); hidden.add_options() ("input-file", po::value(&file_name), "Name of file containing a point set in off format."); - po::options_description visible("Allowed options", 100); visible.add_options() @@ -122,7 +140,7 @@ void program_options(int argc, char * argv[] "Minimal lifetime of homology feature to be recorded. Default is 0. Enter a negative value to see zero length intervals") ("cpx-dimension,d", po::value(&dim_max)->default_value(std::numeric_limits::max()), "Maximal dimension of the strong witness complex we want to compute."); - + po::positional_options_description pos; pos.add("input-file", 1); @@ -133,7 +151,7 @@ void program_options(int argc, char * argv[] po::store(po::command_line_parser(argc, argv). options(all).positional(pos).run(), vm); po::notify(vm); - + if (vm.count("help") || !vm.count("input-file")) { std::cout << std::endl; std::cout << "Compute the persistent homology with coefficient field Z/pZ \n"; diff --git a/src/Witness_complex/example/example_witness_complex_off.cpp b/src/Witness_complex/example/example_witness_complex_off.cpp index 38c6bedc..b36dac0d 100644 --- a/src/Witness_complex/example/example_witness_complex_off.cpp +++ b/src/Witness_complex/example/example_witness_complex_off.cpp @@ -14,11 +14,10 @@ #include #include -typedef CGAL::Epick_d K; -typedef typename K::Point_d Point_d; -typedef typename Gudhi::witness_complex::Euclidean_witness_complex Witness_complex; -typedef std::vector< typename Gudhi::Simplex_tree<>::Vertex_handle > typeVectorVertex; -typedef std::vector< Point_d > Point_vector; +using K = CGAL::Epick_d; +using Point_d = K::Point_d; +using Witness_complex = Gudhi::witness_complex::Euclidean_witness_complex; +using Point_vector = std::vector< Point_d >; int main(int argc, char * const argv[]) { if (argc != 5) { @@ -41,7 +40,7 @@ int main(int argc, char * const argv[]) { exit(-1); // ----- >> } point_vector = Point_vector(off_reader.get_point_cloud()); - + std::cout << "Successfully read " << point_vector.size() << " points.\n"; std::cout << "Ambient dimension is " << point_vector[0].dimension() << ".\n"; diff --git a/src/Witness_complex/example/example_witness_complex_persistence.cpp b/src/Witness_complex/example/example_witness_complex_persistence.cpp index fbb18cb4..364a114a 100644 --- a/src/Witness_complex/example/example_witness_complex_persistence.cpp +++ b/src/Witness_complex/example/example_witness_complex_persistence.cpp @@ -1,3 +1,25 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Siargey Kachanovich + * + * Copyright (C) 2016 INRIA (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include #include #include diff --git a/src/Witness_complex/example/example_witness_complex_sphere.cpp b/src/Witness_complex/example/example_witness_complex_sphere.cpp index 1ea9408c..06fe3889 100644 --- a/src/Witness_complex/example/example_witness_complex_sphere.cpp +++ b/src/Witness_complex/example/example_witness_complex_sphere.cpp @@ -1,8 +1,26 @@ -#define BOOST_PARAMETER_MAX_ARITY 12 - +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Siargey Kachanovich + * + * Copyright (C) 2016 INRIA (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ -#include -#include +#define BOOST_PARAMETER_MAX_ARITY 12 #include #include @@ -32,8 +50,9 @@ void write_data(Data_range & data, std::string filename) { } int main(int argc, char * const argv[]) { - typedef Gudhi::witness_complex::Euclidean_witness_complex> Witness_complex; - + using Kernel = CGAL::Epick_d; + using Witness_complex = Gudhi::witness_complex::Euclidean_witness_complex; + if (argc != 2) { std::cerr << "Usage: " << argv[0] << " number_of_landmarks \n"; @@ -66,8 +85,6 @@ int main(int argc, char * const argv[]) { double time = static_cast(end - start) / CLOCKS_PER_SEC; std::cout << "Witness complex for " << number_of_landmarks << " landmarks took " << time << " s. \n"; - //assert(1 == 0); - //std::cout << simplex_tree << "\n"; std::cout << "Number of simplices is: " << simplex_tree.num_simplices() << "\n"; l_time.push_back(std::make_pair(nbP, time)); } diff --git a/src/Witness_complex/example/generators.h b/src/Witness_complex/example/generators.h index 731a52b0..7df43db5 100644 --- a/src/Witness_complex/example/generators.h +++ b/src/Witness_complex/example/generators.h @@ -32,12 +32,12 @@ #include #include -typedef CGAL::Epick_d K; -typedef K::FT FT; -typedef K::Point_d Point_d; -typedef std::vector Point_Vector; -typedef CGAL::Random_points_in_cube_d Random_cube_iterator; -typedef CGAL::Random_points_in_ball_d Random_point_iterator; +using K = CGAL::Epick_d; +using FT = K::FT; +using Point_d = K::Point_d; +using Point_Vector = std::vector; +using Random_cube_iterator = CGAL::Random_points_in_cube_d; +using Random_point_iterator = CGAL::Random_points_in_ball_d; /** * \brief Rock age method of reading off file @@ -155,7 +155,7 @@ void generate_points_torus(Point_Vector& W, int nbP, int dim) { for (int i = 0; i < nbP; i++) { std::vector point; for (int j = 0; j < dim; j++) { - double alpha = rand.uniform_real((double)0, 2*pi); + double alpha = rand.uniform_real(static_cast(0), 2*pi); point.push_back(sin(alpha)); point.push_back(cos(alpha)); } diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index ffc1750f..d41a6811 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -24,8 +24,7 @@ #define ACTIVE_WITNESS_ACTIVE_WITNESS_H_ #include -#include -#include +#include namespace Gudhi { @@ -38,7 +37,7 @@ namespace witness_complex { template< typename Id_distance_pair, typename INS_range > class Active_witness { -public: + public: typedef Active_witness ActiveWitness; typedef typename INS_range::iterator INS_iterator; typedef Active_witness_iterator< ActiveWitness, Id_distance_pair, INS_iterator > iterator; @@ -50,22 +49,19 @@ public: INS_iterator iterator_end_; Active_witness(const INS_range& search_range) - : search_range_(search_range), iterator_next_(search_range_.begin()), iterator_end_(search_range_.end()) - { + : search_range_(search_range), iterator_next_(search_range_.begin()), iterator_end_(search_range_.end()) { } - - iterator begin() - { + + iterator begin() { return iterator(this, nearest_landmark_table_.begin()); } - iterator end() - { + iterator end() { return iterator(this); } }; -} -} - +} // namespace witness_complex +} // namespace Gudhi + #endif // ACTIVE_WITNESS_ACTIVE_WITNESS_H_ diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 69a335fa..4e29a40d 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -24,7 +24,7 @@ #define ACTIVE_WITNESS_ACTIVE_WITNESS_ITERATOR_H_ #include -#include +#include namespace Gudhi { @@ -41,30 +41,29 @@ template< typename Active_witness, typename Id_distance_pair, typename INS_iterator > class Active_witness_iterator - : public boost::iterator_facade< Active_witness_iterator -, Id_distance_pair const -, boost::forward_traversal_tag -, Id_distance_pair const> { + : public boost::iterator_facade< Active_witness_iterator , + Id_distance_pair const, + boost::forward_traversal_tag, + Id_distance_pair const> { friend class boost::iterator_core_access; - + //typedef Active_witness Active_witness; typedef typename std::list::iterator Pair_iterator; - typedef typename Gudhi::witness_complex::Active_witness_iterator Iterator; - - + typedef typename Gudhi::witness_complex::Active_witness_iterator Iterator; + Active_witness *aw_; Pair_iterator lh_; // landmark handle bool is_end_; // true only if the pointer is end and there are no more neighbors to add -public: + public: Active_witness_iterator(Active_witness* aw) - : aw_(aw), lh_(aw_->nearest_landmark_table_.end()), is_end_(true) - { + : aw_(aw), lh_(aw_->nearest_landmark_table_.end()), is_end_(true) { } Active_witness_iterator(Active_witness* aw, const Pair_iterator& lh) - : aw_(aw), lh_(lh) - { + : aw_(aw), lh_(lh) { is_end_ = false; if (lh_ == aw_->nearest_landmark_table_.end()) { if (aw_->iterator_next_ == aw_->iterator_end_) { @@ -76,21 +75,17 @@ public: } } } - -private : - Id_distance_pair& dereference() const - { + private : + Id_distance_pair& dereference() const { return *lh_; } - bool equal(const Iterator& other) const - { + bool equal(const Iterator& other) const { return (is_end_ == other.is_end_) || (lh_ == other.lh_); } - - void increment() - { + + void increment() { // the neighbor search can't be at the end iterator of a list GUDHI_CHECK(!is_end_ && lh_ != aw_->nearest_landmark_table_.end(), std::logic_error("Wrong active witness increment.")); // if the id of the current landmark is the same as the last one diff --git a/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h b/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h index aad05547..6870c183 100644 --- a/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h @@ -23,17 +23,15 @@ #ifndef EUCLIDEAN_STRONG_WITNESS_COMPLEX_H_ #define EUCLIDEAN_STRONG_WITNESS_COMPLEX_H_ -#include -#include -#include -#include - #include #include #include +#include +#include + namespace Gudhi { - + namespace witness_complex { /** @@ -46,8 +44,10 @@ namespace witness_complex { * href="http://doc.cgal.org/latest/Kernel_d/classCGAL_1_1Epick__d.html">CGAL::Epick_d class. */ template< class Kernel_ > -class Euclidean_strong_witness_complex : public Strong_witness_complex>::INS_range>> { -private: +class Euclidean_strong_witness_complex + : public Strong_witness_complex>::INS_range>> { + private: typedef Kernel_ K; typedef typename K::Point_d Point_d; typedef std::vector Point_range; @@ -58,12 +58,12 @@ private: typedef typename Nearest_landmark_range::Point_with_transformed_distance Id_distance_pair; typedef typename Id_distance_pair::first_type Landmark_id; typedef Landmark_id Vertex_handle; - + private: Point_range landmarks_; Kd_tree landmark_tree_; using Strong_witness_complex::nearest_landmark_table_; - + public: ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* @name Constructor @@ -81,22 +81,19 @@ private: typename WitnessRange > Euclidean_strong_witness_complex(const LandmarkRange & landmarks, const WitnessRange & witnesses) - : landmarks_(std::begin(landmarks), std::end(landmarks)), landmark_tree_(landmarks_) - { + : landmarks_(std::begin(landmarks), std::end(landmarks)), landmark_tree_(landmarks_) { nearest_landmark_table_.reserve(boost::size(witnesses)); for (auto w: witnesses) nearest_landmark_table_.push_back(landmark_tree_.query_incremental_nearest_neighbors(w)); } - /** \brief Returns the point corresponding to the given vertex. */ template - Point_d get_point( Vertex_handle vertex ) const - { + Point_d get_point(Vertex_handle vertex) const { return landmarks_[vertex]; } - + //@} }; diff --git a/src/Witness_complex/include/gudhi/Strong_witness_complex.h b/src/Witness_complex/include/gudhi/Strong_witness_complex.h index ad741794..3fbbb366 100644 --- a/src/Witness_complex/include/gudhi/Strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Strong_witness_complex.h @@ -23,20 +23,19 @@ #ifndef STRONG_WITNESS_COMPLEX_H_ #define STRONG_WITNESS_COMPLEX_H_ +#include +#include + #include #include #include #include -#include -#include - namespace Gudhi { - + namespace witness_complex { -/** - * \private +/* \private * \class Strong_witness_complex * \brief Constructs strong witness complex for a given table of nearest landmarks with respect to witnesses. * \ingroup witness_complex @@ -48,7 +47,7 @@ namespace witness_complex { */ template< class Nearest_landmark_table_ > class Strong_witness_complex { -private: + private: typedef typename Nearest_landmark_table_::value_type Nearest_landmark_range; typedef std::size_t Witness_id; typedef std::size_t Landmark_id; @@ -57,12 +56,11 @@ private: typedef std::list< ActiveWitness > ActiveWitnessList; typedef std::vector< Landmark_id > typeVectorVertex; typedef std::vector Nearest_landmark_table_internal; - typedef Landmark_id Vertex_handle; - + protected: Nearest_landmark_table_internal nearest_landmark_table_; - + public: ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* @name Constructor @@ -70,11 +68,9 @@ private: //@{ - Strong_witness_complex() - { + Strong_witness_complex() { } - /** * \brief Initializes member variables before constructing simplicial complex. * \details Records nearest landmark table. @@ -84,10 +80,9 @@ private: * of the pair range iterator needs to be 'std::pair'. */ Strong_witness_complex(Nearest_landmark_table_ const & nearest_landmark_table) - : nearest_landmark_table_(std::begin(nearest_landmark_table), std::end(nearest_landmark_table)) - { + : nearest_landmark_table_(std::begin(nearest_landmark_table), std::end(nearest_landmark_table)) { } - + /** \brief Outputs the strong witness complex of relaxation 'max_alpha_square' * in a simplicial complex data structure. * \details The function returns true if the construction is successful and false otherwise. @@ -100,15 +95,15 @@ private: template < typename SimplicialComplexForWitness > bool create_complex(SimplicialComplexForWitness& complex, double max_alpha_square, - Landmark_id limit_dimension = std::numeric_limits::max()) const - { + Landmark_id limit_dimension = std::numeric_limits::max()) const { Landmark_id complex_dim = 0; if (complex.num_vertices() > 0) { std::cerr << "Strong witness complex cannot create complex - complex is not empty.\n"; return false; } if (max_alpha_square < 0) { - std::cerr << "Strong witness complex cannot create complex - squared relaxation parameter must be non-negative.\n"; + std::cerr << "Strong witness complex cannot create complex - squared relaxation parameter must be " + << "non-negative.\n"; return false; } if (limit_dimension < 0) { @@ -129,7 +124,8 @@ private: typeVectorVertex& vertices = simplex; //'simplex' now will be called vertices while (aw_it != aw.end() && aw_it->second < lim_dist2) { typeVectorVertex facet = {}; - add_all_faces_of_dimension(limit_dimension, vertices, vertices.begin(), aw_it, aw_it->second - aw.begin()->second, facet, complex); + add_all_faces_of_dimension(limit_dimension, vertices, vertices.begin(), aw_it, + aw_it->second - aw.begin()->second, facet, complex); vertices.push_back(aw_it->first); aw_it++; } @@ -140,13 +136,12 @@ private: return true; } -private: - + private: /* \brief Adds recursively all the faces of a certain dimension dim-1 witnessed by the same witness. - * Iterator is needed to know until how far we can take landmarks to form simplexes. - * simplex is the prefix of the simplexes to insert. - * The landmark pointed by aw_it is added to all formed simplices. - */ + * Iterator is needed to know until how far we can take landmarks to form simplexes. + * simplex is the prefix of the simplexes to insert. + * The landmark pointed by aw_it is added to all formed simplices. + */ template < typename SimplicialComplexForWitness > void add_all_faces_of_dimension(Landmark_id dim, typeVectorVertex& vertices, @@ -154,9 +149,8 @@ private: typename ActiveWitness::iterator aw_it, double filtration_value, typeVectorVertex& simplex, - SimplicialComplexForWitness& sc) const - { - if (dim > 0) + SimplicialComplexForWitness& sc) const { + if (dim > 0) { while (curr_it != vertices.end()) { simplex.push_back(*curr_it); ++curr_it; @@ -176,7 +170,7 @@ private: simplex, sc); } - else if (dim == 0) { + } else if (dim == 0) { simplex.push_back(aw_it->first); sc.insert_simplex_and_subfaces(simplex, filtration_value); simplex.pop_back(); diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index c09e6af9..c0506367 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -33,7 +33,7 @@ #include namespace Gudhi { - + namespace witness_complex { /** @@ -49,7 +49,7 @@ namespace witness_complex { */ template< class Nearest_landmark_table_ > class Witness_complex { -private: + private: typedef typename Nearest_landmark_table_::value_type Nearest_landmark_range; typedef std::size_t Witness_id; typedef std::size_t Landmark_id; @@ -58,12 +58,11 @@ private: typedef std::list< ActiveWitness > ActiveWitnessList; typedef std::vector< Landmark_id > typeVectorVertex; typedef std::vector Nearest_landmark_table_internal; - typedef Landmark_id Vertex_handle; protected: Nearest_landmark_table_internal nearest_landmark_table_; - + public: ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* @name Constructor @@ -71,10 +70,9 @@ private: //@{ - Witness_complex() - { + Witness_complex() { } - + /** * \brief Initializes member variables before constructing simplicial complex. * \details Records nearest landmark table. @@ -85,11 +83,9 @@ private: */ Witness_complex(Nearest_landmark_table_ const & nearest_landmark_table) - : nearest_landmark_table_(std::begin(nearest_landmark_table), std::end(nearest_landmark_table)) - { + : nearest_landmark_table_(std::begin(nearest_landmark_table), std::end(nearest_landmark_table)) { } - /** \brief Outputs the (weak) witness complex of relaxation 'max_alpha_square' * in a simplicial complex data structure. * \details The function returns true if the construction is successful and false otherwise. @@ -102,8 +98,7 @@ private: template < typename SimplicialComplexForWitness > bool create_complex(SimplicialComplexForWitness& complex, double max_alpha_square, - std::size_t limit_dimension = std::numeric_limits::max()) const - { + std::size_t limit_dimension = std::numeric_limits::max()) const { if (complex.num_vertices() > 0) { std::cerr << "Witness complex cannot create complex - complex is not empty.\n"; return false; @@ -118,9 +113,9 @@ private: } ActiveWitnessList active_witnesses; Landmark_id k = 0; /* current dimension in iterative construction */ - for (auto w: nearest_landmark_table_) + for (auto w : nearest_landmark_table_) active_witnesses.push_back(ActiveWitness(w)); - while (!active_witnesses.empty() && k <= limit_dimension ) { + while (!active_witnesses.empty() && k <= limit_dimension) { typename ActiveWitnessList::iterator aw_it = active_witnesses.begin(); std::vector simplex; simplex.reserve(k+1); @@ -134,10 +129,10 @@ private: aw_it->end()); assert(simplex.empty()); if (!ok) - active_witnesses.erase(aw_it++); //First increase the iterator and then erase the previous element + active_witnesses.erase(aw_it++); // First increase the iterator and then erase the previous element else aw_it++; - } + } k++; } complex.set_dimension(k-1); @@ -159,13 +154,12 @@ private: typename ActiveWitness::iterator curr_l, std::vector& simplex, SimplicialComplexForWitness& sc, - typename ActiveWitness::iterator end) const - { + typename ActiveWitness::iterator end) const { if (curr_l == end) return false; bool will_be_active = false; typename ActiveWitness::iterator l_it = curr_l; - if (dim > 0) + if (dim > 0) { for (; l_it->second - alpha2 <= norelax_dist2 && l_it != end; ++l_it) { simplex.push_back(l_it->first); if (sc.find(simplex) != sc.null_simplex()) { @@ -183,8 +177,8 @@ private: // If norelax_dist is infinity, change to first omitted distance if (l_it->second <= norelax_dist2) norelax_dist2 = l_it->second; - } - else if (dim == 0) + } + } else if (dim == 0) { for (; l_it->second - alpha2 <= norelax_dist2 && l_it != end; ++l_it) { simplex.push_back(l_it->first); double filtration_value = 0; @@ -200,12 +194,12 @@ private: // If norelax_dist is infinity, change to first omitted distance if (l_it->second < norelax_dist2) norelax_dist2 = l_it->second; - } + } + } return will_be_active; } - }; - + } // namespace witness_complex } // namespace Gudhi diff --git a/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h b/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h index d009caca..b68d75a1 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h +++ b/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h @@ -1,3 +1,25 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Siargey Kachanovich + * + * Copyright (C) 2015 INRIA (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #ifndef WITNESS_COMPLEX_ALL_FACES_IN_H_ #define WITNESS_COMPLEX_ALL_FACES_IN_H_ @@ -9,16 +31,14 @@ template < typename SimplicialComplexForWitness, typename Simplex > bool all_faces_in(Simplex& simplex, double* filtration_value, - SimplicialComplexForWitness& sc) - { + SimplicialComplexForWitness& sc) { typedef typename SimplicialComplexForWitness::Simplex_handle Simplex_handle; if (simplex.size() == 1) return true; /* Add vertices unconditionally */ - + Simplex facet; - for (typename Simplex::iterator not_it = simplex.begin(); not_it != simplex.end(); ++not_it) - { + for (typename Simplex::iterator not_it = simplex.begin(); not_it != simplex.end(); ++not_it) { facet.clear(); for (typename Simplex::iterator it = simplex.begin(); it != simplex.end(); ++it) if (it != not_it) -- cgit v1.2.3 From fda43b1fde4774909c632a0604ae7ad05a660d3a Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Wed, 1 Mar 2017 06:03:29 +0000 Subject: Fix cppcheck git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@2122 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 92d11c064056138ce4aa8cbe3a42df29a8a5ca7d --- .../example/example_strong_witness_persistence.cpp | 3 +- .../example_witness_complex_persistence.cpp | 35 ++++++++++------------ .../gudhi/Active_witness/Active_witness_iterator.h | 11 ++++--- .../gudhi/Euclidean_strong_witness_complex.h | 6 ++-- .../include/gudhi/Euclidean_witness_complex.h | 20 ++++++------- .../include/gudhi/Strong_witness_complex.h | 17 +++++------ .../include/gudhi/Witness_complex.h | 2 +- 7 files changed, 45 insertions(+), 49 deletions(-) (limited to 'src/Witness_complex/include/gudhi/Active_witness') diff --git a/src/Witness_complex/example/example_strong_witness_persistence.cpp b/src/Witness_complex/example/example_strong_witness_persistence.cpp index 5efe69fd..f786fe7b 100644 --- a/src/Witness_complex/example/example_strong_witness_persistence.cpp +++ b/src/Witness_complex/example/example_strong_witness_persistence.cpp @@ -126,13 +126,14 @@ void program_options(int argc, char * argv[] "Name of file containing a point set in off format."); po::options_description visible("Allowed options", 100); + Filtration_value default_alpha = std::numeric_limits::infinity(); visible.add_options() ("help,h", "produce help message") ("landmarks,l", po::value(&nbL), "Number of landmarks to choose from the point cloud.") ("output-file,o", po::value(&filediag)->default_value(std::string()), "Name of file in which the persistence diagram is written. Default print in std::cout") - ("max-sq-alpha,a", po::value(&max_squared_alpha)->default_value(std::numeric_limits::infinity()), + ("max-sq-alpha,a", po::value(&max_squared_alpha)->default_value(default_alpha), "Maximal squared relaxation parameter.") ("field-charac,p", po::value(&p)->default_value(11), "Characteristic p of the coefficient field Z/pZ for computing homology.") diff --git a/src/Witness_complex/example/example_witness_complex_persistence.cpp b/src/Witness_complex/example/example_witness_complex_persistence.cpp index 364a114a..a1146922 100644 --- a/src/Witness_complex/example/example_witness_complex_persistence.cpp +++ b/src/Witness_complex/example/example_witness_complex_persistence.cpp @@ -34,18 +34,17 @@ #include #include // infinity -using namespace Gudhi; -using namespace Gudhi::persistent_cohomology; +using K = CGAL::Epick_d; +using Point_d = K::Point_d; -typedef CGAL::Epick_d K; -typedef typename K::Point_d Point_d; +using Point_vector = std::vector; +using Witness_complex = Gudhi::witness_complex::Euclidean_witness_complex; +using SimplexTree = Gudhi::Simplex_tree<>; -typedef typename std::vector Point_vector; -typedef typename Gudhi::witness_complex::Euclidean_witness_complex Witness_complex; -typedef Gudhi::Simplex_tree<> SimplexTree; +using Filtration_value = SimplexTree::Filtration_value; -typedef int Vertex_handle; -typedef double Filtration_value; +using Field_Zp = Gudhi::persistent_cohomology::Field_Zp; +using Persistent_cohomology = Gudhi::persistent_cohomology::Persistent_cohomology; void program_options(int argc, char * argv[] , int & nbL @@ -83,9 +82,9 @@ int main(int argc, char * argv[]) { // Compute witness complex Witness_complex witness_complex(landmarks, witnesses); - + witness_complex.create_complex(simplex_tree, max_squared_alpha, lim_d); - + std::cout << "The complex contains " << simplex_tree.num_simplices() << " simplices \n"; std::cout << " and has dimension " << simplex_tree.dimension() << " \n"; @@ -93,7 +92,7 @@ int main(int argc, char * argv[]) { simplex_tree.initialize_filtration(); // Compute the persistence diagram of the complex - persistent_cohomology::Persistent_cohomology pcoh(simplex_tree); + Persistent_cohomology pcoh(simplex_tree); // initializes the coefficient field for homology pcoh.init_coefficients(p); @@ -120,15 +119,14 @@ void program_options(int argc, char * argv[] , int & p , int & dim_max , Filtration_value & min_persistence) { - namespace po = boost::program_options; - + po::options_description hidden("Hidden options"); hidden.add_options() ("input-file", po::value(&file_name), "Name of file containing a point set in off format."); - + Filtration_value default_alpha = std::numeric_limits::infinity(); po::options_description visible("Allowed options", 100); visible.add_options() ("help,h", "produce help message") @@ -136,7 +134,7 @@ void program_options(int argc, char * argv[] "Number of landmarks to choose from the point cloud.") ("output-file,o", po::value(&filediag)->default_value(std::string()), "Name of file in which the persistence diagram is written. Default print in std::cout") - ("max-sq-alpha,a", po::value(&max_squared_alpha)->default_value(std::numeric_limits::infinity()), + ("max-sq-alpha,a", po::value(&max_squared_alpha)->default_value(default_alpha), "Maximal squared relaxation parameter.") ("field-charac,p", po::value(&p)->default_value(11), "Characteristic p of the coefficient field Z/pZ for computing homology.") @@ -144,7 +142,7 @@ void program_options(int argc, char * argv[] "Minimal lifetime of homology feature to be recorded. Default is 0. Enter a negative value to see zero length intervals") ("cpx-dimension,d", po::value(&dim_max)->default_value(std::numeric_limits::max()), "Maximal dimension of the weak witness complex we want to compute."); - + po::positional_options_description pos; pos.add("input-file", 1); @@ -155,7 +153,7 @@ void program_options(int argc, char * argv[] po::store(po::command_line_parser(argc, argv). options(all).positional(pos).run(), vm); po::notify(vm); - + if (vm.count("help") || !vm.count("input-file")) { std::cout << std::endl; std::cout << "Compute the persistent homology with coefficient field Z/pZ \n"; @@ -171,4 +169,3 @@ void program_options(int argc, char * argv[] std::abort(); } } - diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 4e29a40d..0a05173a 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -36,7 +36,6 @@ namespace witness_complex { * If all the landmarks are present in the list, iterator returns the specific end value * of the corresponding 'Active_witness' object. */ - template< typename Active_witness, typename Id_distance_pair, typename INS_iterator > @@ -47,15 +46,14 @@ class Active_witness_iterator Id_distance_pair const> { friend class boost::iterator_core_access; - //typedef Active_witness Active_witness; typedef typename std::list::iterator Pair_iterator; typedef typename Gudhi::witness_complex::Active_witness_iterator Iterator; Active_witness *aw_; - Pair_iterator lh_; // landmark handle - bool is_end_; // true only if the pointer is end and there are no more neighbors to add + Pair_iterator lh_; // landmark handle + bool is_end_; // true only if the pointer is end and there are no more neighbors to add public: Active_witness_iterator(Active_witness* aw) @@ -87,7 +85,8 @@ class Active_witness_iterator void increment() { // the neighbor search can't be at the end iterator of a list - GUDHI_CHECK(!is_end_ && lh_ != aw_->nearest_landmark_table_.end(), std::logic_error("Wrong active witness increment.")); + GUDHI_CHECK(!is_end_ && lh_ != aw_->nearest_landmark_table_.end(), + std::logic_error("Wrong active witness increment.")); // if the id of the current landmark is the same as the last one lh_++; @@ -105,5 +104,5 @@ class Active_witness_iterator } // namespace witness_complex } // namespace Gudhi - + #endif // ACTIVE_WITNESS_ACTIVE_WITNESS_ITERATOR_H_ diff --git a/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h b/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h index 6870c183..fb669ef8 100644 --- a/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h @@ -83,13 +83,13 @@ class Euclidean_strong_witness_complex const WitnessRange & witnesses) : landmarks_(std::begin(landmarks), std::end(landmarks)), landmark_tree_(landmarks_) { nearest_landmark_table_.reserve(boost::size(witnesses)); - for (auto w: witnesses) + for (auto w : witnesses) nearest_landmark_table_.push_back(landmark_tree_.query_incremental_nearest_neighbors(w)); } /** \brief Returns the point corresponding to the given vertex. */ - template + template Point_d get_point(Vertex_handle vertex) const { return landmarks_[vertex]; } @@ -101,4 +101,4 @@ class Euclidean_strong_witness_complex } // namespace Gudhi -#endif // EUCLIDEAN_STRONG_WITNESS_COMPLEX_H_ +#endif // EUCLIDEAN_STRONG_WITNESS_COMPLEX_H_ diff --git a/src/Witness_complex/include/gudhi/Euclidean_witness_complex.h b/src/Witness_complex/include/gudhi/Euclidean_witness_complex.h index 146271f7..6afe9a5d 100644 --- a/src/Witness_complex/include/gudhi/Euclidean_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Euclidean_witness_complex.h @@ -33,7 +33,7 @@ #include namespace Gudhi { - + namespace witness_complex { /** @@ -46,8 +46,10 @@ namespace witness_complex { * href="http://doc.cgal.org/latest/Kernel_d/classCGAL_1_1Epick__d.html">CGAL::Epick_d class. */ template< class Kernel_ > -class Euclidean_witness_complex : public Witness_complex>::INS_range>> { -private: +class Euclidean_witness_complex + : public Witness_complex>::INS_range>> { + private: typedef Kernel_ K; typedef typename K::Point_d Point_d; typedef std::vector Point_range; @@ -64,7 +66,7 @@ private: Kd_tree landmark_tree_; using Witness_complex::nearest_landmark_table_; -public: + public: ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* @name Constructor */ @@ -81,24 +83,22 @@ public: typename WitnessRange > Euclidean_witness_complex(const LandmarkRange & landmarks, const WitnessRange & witnesses) - : landmarks_(std::begin(landmarks), std::end(landmarks)), landmark_tree_(landmarks) - { + : landmarks_(std::begin(landmarks), std::end(landmarks)), landmark_tree_(landmarks) { nearest_landmark_table_.reserve(boost::size(witnesses)); - for (auto w: witnesses) + for (auto w : witnesses) nearest_landmark_table_.push_back(landmark_tree_.query_incremental_nearest_neighbors(w)); } /** \brief Returns the point corresponding to the given vertex. * @param[in] vertex Vertex handle of the point to retrieve. */ - Point_d get_point( Vertex_handle vertex ) const - { + Point_d get_point(Vertex_handle vertex) const { return landmarks_[vertex]; } //@} }; - + } // namespace witness_complex } // namespace Gudhi diff --git a/src/Witness_complex/include/gudhi/Strong_witness_complex.h b/src/Witness_complex/include/gudhi/Strong_witness_complex.h index 3fbbb366..6708ac29 100644 --- a/src/Witness_complex/include/gudhi/Strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Strong_witness_complex.h @@ -79,8 +79,8 @@ class Strong_witness_complex { * The range of pairs must admit a member type 'iterator'. The dereference type * of the pair range iterator needs to be 'std::pair'. */ - Strong_witness_complex(Nearest_landmark_table_ const & nearest_landmark_table) - : nearest_landmark_table_(std::begin(nearest_landmark_table), std::end(nearest_landmark_table)) { + Strong_witness_complex(Nearest_landmark_table_ const & nearest_landmark_table) + : nearest_landmark_table_(std::begin(nearest_landmark_table), std::end(nearest_landmark_table)) { } /** \brief Outputs the strong witness complex of relaxation 'max_alpha_square' @@ -110,7 +110,7 @@ class Strong_witness_complex { std::cerr << "Strong witness complex cannot create complex - limit dimension must be non-negative.\n"; return false; } - for (auto w: nearest_landmark_table_) { + for (auto w : nearest_landmark_table_) { ActiveWitness aw(w); typeVectorVertex simplex; typename ActiveWitness::iterator aw_it = aw.begin(); @@ -121,7 +121,7 @@ class Strong_witness_complex { aw_it++; } // continue inserting limD-faces of the following simplices - typeVectorVertex& vertices = simplex; //'simplex' now will be called vertices + typeVectorVertex& vertices = simplex; // 'simplex' now will be called vertices while (aw_it != aw.end() && aw_it->second < lim_dist2) { typeVectorVertex facet = {}; add_all_faces_of_dimension(limit_dimension, vertices, vertices.begin(), aw_it, @@ -153,7 +153,7 @@ class Strong_witness_complex { if (dim > 0) { while (curr_it != vertices.end()) { simplex.push_back(*curr_it); - ++curr_it; + ++curr_it; add_all_faces_of_dimension(dim-1, vertices, curr_it, @@ -169,14 +169,13 @@ class Strong_witness_complex { filtration_value, simplex, sc); - } + } } else if (dim == 0) { simplex.push_back(aw_it->first); sc.insert_simplex_and_subfaces(simplex, filtration_value); simplex.pop_back(); - } - } - + } + } //@} }; diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index c0506367..a79bf294 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -183,7 +183,7 @@ class Witness_complex { simplex.push_back(l_it->first); double filtration_value = 0; // if norelax_dist is infinite, relaxation is 0. - if (l_it->second > norelax_dist2) + if (l_it->second > norelax_dist2) filtration_value = l_it->second - norelax_dist2; if (all_faces_in(simplex, &filtration_value, sc)) { will_be_active = true; -- cgit v1.2.3