From 004dac98fde448065a1697ea696a67153ccdb77e Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Wed, 30 Nov 2016 21:39:44 +0000 Subject: Add tan_test for test purpose git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1807 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 85200e0b013cc119aead9556e97db877b3421064 --- src/Tangential_complex/example/CMakeLists.txt | 6 +++ src/Tangential_complex/example/tan_test.cpp | 54 ++++++++++++++++++++++ .../include/gudhi/Tangential_complex/config.h | 3 +- 3 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/Tangential_complex/example/tan_test.cpp (limited to 'src') diff --git a/src/Tangential_complex/example/CMakeLists.txt b/src/Tangential_complex/example/CMakeLists.txt index a75ccd5b..76ba0a32 100644 --- a/src/Tangential_complex/example/CMakeLists.txt +++ b/src/Tangential_complex/example/CMakeLists.txt @@ -8,9 +8,12 @@ if(CGAL_FOUND) target_link_libraries(Tangential_complex_example_basic ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) add_executable( Tangential_complex_example_with_perturb example_with_perturb.cpp ) target_link_libraries(Tangential_complex_example_with_perturb ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) + add_executable( tan_test tan_test.cpp ) + target_link_libraries(tan_test ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) if (TBB_FOUND) target_link_libraries(Tangential_complex_example_basic ${TBB_LIBRARIES}) target_link_libraries(Tangential_complex_example_with_perturb ${TBB_LIBRARIES}) + target_link_libraries(tan_test ${TBB_LIBRARIES}) endif(TBB_FOUND) add_test(Tangential_complex_example_basic @@ -18,6 +21,9 @@ if(CGAL_FOUND) add_test(Tangential_complex_example_with_perturb ${CMAKE_CURRENT_BINARY_DIR}/Tangential_complex_example_with_perturb) + + add_test(tan_test + ${CMAKE_CURRENT_BINARY_DIR}/tan_test) endif(EIGEN3_FOUND) endif(NOT CGAL_VERSION VERSION_LESS 4.8.0) endif(CGAL_FOUND) diff --git a/src/Tangential_complex/example/tan_test.cpp b/src/Tangential_complex/example/tan_test.cpp new file mode 100644 index 00000000..afb9f13c --- /dev/null +++ b/src/Tangential_complex/example/tan_test.cpp @@ -0,0 +1,54 @@ +#include +#include + +#include +#include + +#include +#include + +namespace tc = Gudhi::tangential_complex; + +typedef CGAL::Epick_d Kernel; +typedef Kernel::FT FT; +typedef Kernel::Point_d Point; +typedef Kernel::Vector_d Vector; +typedef tc::Tangential_complex< +Kernel, CGAL::Dynamic_dimension_tag, +CGAL::Parallel_tag> TC; + +int main(void) { + const int INTRINSIC_DIM = 1; + + // Generate points on a 2-sphere + std::vector points; + // [[0, 0], [1, 0], [0, 1], [1, 1]] + std::vector point = {0.0, 0.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + point = {1.0, 0.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + point = {0.0, 1.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + point = {1.0, 1.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + + Kernel k; + for (int i = 0; i < 100; i++) { + + // Compute the TC + TC tc(points, INTRINSIC_DIM, k); + tc.compute_tangential_complex(); + TC::Num_inconsistencies num_inc = tc.number_of_inconsistent_simplices(); + std::cout << "TC vertices = " << tc.number_of_vertices() << " - simplices = " << num_inc.num_simplices << + " - inconsistencies = " << num_inc.num_inconsistent_simplices << std::endl; + + tc.fix_inconsistencies_using_perturbation(10.0, 60.0); + // Export the TC into a Simplex_tree + Gudhi::Simplex_tree<> stree; + tc.create_complex(stree); + std::cout << "ST vertices = " << stree.num_vertices() << " - simplices = " << stree.num_simplices() << std::endl; + + } + + return 0; +} diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex/config.h b/src/Tangential_complex/include/gudhi/Tangential_complex/config.h index 98a1b14f..ffefcd6b 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex/config.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex/config.h @@ -26,8 +26,7 @@ #include // ========================= Debugging & profiling ============================= -#define GUDHI_TC_PROFILING -#define DEBUG_TRACES +// #define GUDHI_TC_PROFILING // #define GUDHI_TC_VERY_VERBOSE // #define GUDHI_TC_PERFORM_EXTRA_CHECKS // #define GUDHI_TC_SHOW_DETAILED_STATS_FOR_INCONSISTENCIES -- cgit v1.2.3 From ce1dd7df37c459e666372a234448383417f38753 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 2 Dec 2016 07:58:53 +0000 Subject: Re-indent CGAL templates for readibility git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@1811 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 40a44ba88beead6e8a2aba73d8975216b4710677 --- .../include/gudhi/Tangential_complex.h | 38 ++++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index 7cf5c498..e748d3b7 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -121,11 +121,12 @@ class Vertex_data { * \tparam Triangulation_ is the type used for storing the local regular triangulations. We highly recommend to use the default value (`CGAL::Regular_triangulation`). * */ -template < -typename Kernel_, // ambiant kernel -typename DimensionTag, // intrinsic dimension -typename Concurrency_tag = CGAL::Parallel_tag, -typename Triangulation_ = CGAL::Default +template +< + typename Kernel_, // ambiant kernel + typename DimensionTag, // intrinsic dimension + typename Concurrency_tag = CGAL::Parallel_tag, + typename Triangulation_ = CGAL::Default > class Tangential_complex { typedef Kernel_ K; @@ -136,19 +137,20 @@ class Tangential_complex { typedef typename CGAL::Default::Get < - Triangulation_, - CGAL::Regular_triangulation - < - CGAL::Epick_d, - CGAL::Triangulation_data_structure - < - typename CGAL::Epick_d::Dimension, - CGAL::Triangulation_vertex >, Vertex_data >, - CGAL::Triangulation_full_cell > > - > - > + Triangulation_, + CGAL::Regular_triangulation + < + CGAL::Epick_d, + CGAL::Triangulation_data_structure + < + typename CGAL::Epick_d::Dimension, + CGAL::Triangulation_vertex + < + CGAL::Regular_triangulation_traits_adapter< CGAL::Epick_d >, Vertex_data + >, + CGAL::Triangulation_full_cell > > + > + > >::type Triangulation; typedef typename Triangulation::Geom_traits Tr_traits; typedef typename Triangulation::Weighted_point Tr_point; -- cgit v1.2.3 From f0e5330a88f9e89a887769ab79f6db6dd4e1c35a Mon Sep 17 00:00:00 2001 From: glisse Date: Mon, 12 Dec 2016 05:23:28 +0000 Subject: Boost bug https://svn.boost.org/trac/boost/ticket/12534 git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@1847 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 063ad9bf7bcf1163dc4935f8bdd93d6ea334609f --- src/GudhUI/gui/MainWindow.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/GudhUI/gui/MainWindow.h b/src/GudhUI/gui/MainWindow.h index c8c3fcf6..3fe0d720 100644 --- a/src/GudhUI/gui/MainWindow.h +++ b/src/GudhUI/gui/MainWindow.h @@ -26,6 +26,9 @@ // Workaround for moc-qt4 not parsing boost headers #include +// Workaround https://svn.boost.org/trac/boost/ticket/12534 +#include + #include #include "ui_main_window.h" #include "model/Model.h" -- cgit v1.2.3 From 12fa1bbb902bebb2ffc21482a25913ac7c49dc85 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Mon, 12 Dec 2016 10:04:42 +0000 Subject: Fix the bug, remove tan_test from examples and add a unitary test git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1850 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 852570382d6f5713e534b49e7abf1e96a4a84076 --- CMakeLists.txt | 14 +++--- src/Tangential_complex/example/CMakeLists.txt | 5 -- src/Tangential_complex/example/tan_test.cpp | 54 -------------------- .../include/gudhi/Tangential_complex.h | 8 ++- .../test/test_tangential_complex.cpp | 57 ++++++++++++++++++++++ 5 files changed, 70 insertions(+), 68 deletions(-) delete mode 100644 src/Tangential_complex/example/tan_test.cpp (limited to 'src') diff --git a/CMakeLists.txt b/CMakeLists.txt index 005df6d7..78de6c09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,13 +73,13 @@ else() set(Boost_USE_STATIC_RUNTIME OFF) # Find TBB package for parallel sort - not mandatory, just optional. - set(TBB_FIND_QUIETLY ON) - find_package(TBB) - if (TBB_FOUND) - include(${TBB_USE_FILE}) - message("TBB found in ${TBB_LIBRARY_DIRS}") - add_definitions(-DGUDHI_USE_TBB) - endif() + #set(TBB_FIND_QUIETLY ON) + #find_package(TBB) + #if (TBB_FOUND) + # include(${TBB_USE_FILE}) + # message("TBB found in ${TBB_LIBRARY_DIRS}") + # add_definitions(-DGUDHI_USE_TBB) + #endif() find_package(Eigen3 3.1.0) if (EIGEN3_FOUND) diff --git a/src/Tangential_complex/example/CMakeLists.txt b/src/Tangential_complex/example/CMakeLists.txt index 76ba0a32..32f6eebb 100644 --- a/src/Tangential_complex/example/CMakeLists.txt +++ b/src/Tangential_complex/example/CMakeLists.txt @@ -8,12 +8,9 @@ if(CGAL_FOUND) target_link_libraries(Tangential_complex_example_basic ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) add_executable( Tangential_complex_example_with_perturb example_with_perturb.cpp ) target_link_libraries(Tangential_complex_example_with_perturb ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) - add_executable( tan_test tan_test.cpp ) - target_link_libraries(tan_test ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) if (TBB_FOUND) target_link_libraries(Tangential_complex_example_basic ${TBB_LIBRARIES}) target_link_libraries(Tangential_complex_example_with_perturb ${TBB_LIBRARIES}) - target_link_libraries(tan_test ${TBB_LIBRARIES}) endif(TBB_FOUND) add_test(Tangential_complex_example_basic @@ -22,8 +19,6 @@ if(CGAL_FOUND) add_test(Tangential_complex_example_with_perturb ${CMAKE_CURRENT_BINARY_DIR}/Tangential_complex_example_with_perturb) - add_test(tan_test - ${CMAKE_CURRENT_BINARY_DIR}/tan_test) endif(EIGEN3_FOUND) endif(NOT CGAL_VERSION VERSION_LESS 4.8.0) endif(CGAL_FOUND) diff --git a/src/Tangential_complex/example/tan_test.cpp b/src/Tangential_complex/example/tan_test.cpp deleted file mode 100644 index afb9f13c..00000000 --- a/src/Tangential_complex/example/tan_test.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include - -#include -#include - -#include -#include - -namespace tc = Gudhi::tangential_complex; - -typedef CGAL::Epick_d Kernel; -typedef Kernel::FT FT; -typedef Kernel::Point_d Point; -typedef Kernel::Vector_d Vector; -typedef tc::Tangential_complex< -Kernel, CGAL::Dynamic_dimension_tag, -CGAL::Parallel_tag> TC; - -int main(void) { - const int INTRINSIC_DIM = 1; - - // Generate points on a 2-sphere - std::vector points; - // [[0, 0], [1, 0], [0, 1], [1, 1]] - std::vector point = {0.0, 0.0}; - points.push_back(Point(point.size(), point.begin(), point.end())); - point = {1.0, 0.0}; - points.push_back(Point(point.size(), point.begin(), point.end())); - point = {0.0, 1.0}; - points.push_back(Point(point.size(), point.begin(), point.end())); - point = {1.0, 1.0}; - points.push_back(Point(point.size(), point.begin(), point.end())); - - Kernel k; - for (int i = 0; i < 100; i++) { - - // Compute the TC - TC tc(points, INTRINSIC_DIM, k); - tc.compute_tangential_complex(); - TC::Num_inconsistencies num_inc = tc.number_of_inconsistent_simplices(); - std::cout << "TC vertices = " << tc.number_of_vertices() << " - simplices = " << num_inc.num_simplices << - " - inconsistencies = " << num_inc.num_inconsistent_simplices << std::endl; - - tc.fix_inconsistencies_using_perturbation(10.0, 60.0); - // Export the TC into a Simplex_tree - Gudhi::Simplex_tree<> stree; - tc.create_complex(stree); - std::cout << "ST vertices = " << stree.num_vertices() << " - simplices = " << stree.num_simplices() << std::endl; - - } - - return 0; -} diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index e748d3b7..90c164e2 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -1303,7 +1303,9 @@ class Tangential_complex { , bool normalize_basis = true , Orthogonal_space_basis *p_orth_space_basis = NULL ) { - unsigned int num_pts_for_pca = static_cast (std::pow(GUDHI_TC_BASE_VALUE_FOR_PCA, m_intrinsic_dim)); +// unsigned int num_pts_for_pca = static_cast (std::pow(GUDHI_TC_BASE_VALUE_FOR_PCA, m_intrinsic_dim)); + unsigned int num_pts_for_pca = (std::min)(static_cast (std::pow(GUDHI_TC_BASE_VALUE_FOR_PCA, m_intrinsic_dim)), + static_cast (m_points.size())); // Kernel functors typename K::Construct_vector_d constr_vec = @@ -1392,7 +1394,9 @@ class Tangential_complex { // on it. Note that most points are duplicated. Tangent_space_basis compute_tangent_space(const Simplex &s, bool normalize_basis = true) { - unsigned int num_pts_for_pca = static_cast (std::pow(GUDHI_TC_BASE_VALUE_FOR_PCA, m_intrinsic_dim)); +// unsigned int num_pts_for_pca = static_cast (std::pow(GUDHI_TC_BASE_VALUE_FOR_PCA, m_intrinsic_dim)); + unsigned int num_pts_for_pca = (std::min)(static_cast (std::pow(GUDHI_TC_BASE_VALUE_FOR_PCA, m_intrinsic_dim)), + static_cast (m_points.size())); // Kernel functors typename K::Construct_vector_d constr_vec = diff --git a/src/Tangential_complex/test/test_tangential_complex.cpp b/src/Tangential_complex/test/test_tangential_complex.cpp index f8b0d2fb..4c3dec3b 100644 --- a/src/Tangential_complex/test/test_tangential_complex.cpp +++ b/src/Tangential_complex/test/test_tangential_complex.cpp @@ -68,3 +68,60 @@ BOOST_AUTO_TEST_CASE(test_Spatial_tree_data_structure) { Gudhi::Simplex_tree<> stree; tc.create_complex(stree); } + +BOOST_AUTO_TEST_CASE(test_mini_tangential) { + typedef CGAL::Epick_d Kernel; + typedef Kernel::FT FT; + typedef Kernel::Point_d Point; + typedef Kernel::Vector_d Vector; + typedef tc::Tangential_complex TC; + + + const int INTRINSIC_DIM = 1; + + // Generate points on a 2-sphere + std::vector points; + // [[0, 0], [1, 0], [0, 1], [1, 1]] + std::vector point = {0.0, 0.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + point = {1.0, 0.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + point = {0.0, 1.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + point = {1.0, 1.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + std::cout << "points = " << points.size() << std::endl; + Kernel k; + + // Compute the TC + TC tc(points, INTRINSIC_DIM, k); + tc.compute_tangential_complex(); + TC::Num_inconsistencies num_inc = tc.number_of_inconsistent_simplices(); + std::cout << "TC vertices = " << tc.number_of_vertices() << " - simplices = " << num_inc.num_simplices << + " - inconsistencies = " << num_inc.num_inconsistent_simplices << std::endl; + + BOOST_CHECK(tc.number_of_vertices() == 4); + BOOST_CHECK(num_inc.num_simplices == 4); + BOOST_CHECK(num_inc.num_inconsistent_simplices == 2); + + // Export the TC into a Simplex_tree + Gudhi::Simplex_tree<> stree; + tc.create_complex(stree); + std::cout << "ST vertices = " << stree.num_vertices() << " - simplices = " << stree.num_simplices() << std::endl; + + BOOST_CHECK(stree.num_vertices() == 4); + BOOST_CHECK(stree.num_simplices() == 12); + + tc.fix_inconsistencies_using_perturbation(0.01, 30.0); + + BOOST_CHECK(tc.number_of_vertices() == 4); + BOOST_CHECK(num_inc.num_simplices == 4); + BOOST_CHECK(num_inc.num_inconsistent_simplices == 2); + + // Export the TC into a Simplex_tree + tc.create_complex(stree); + std::cout << "ST vertices = " << stree.num_vertices() << " - simplices = " << stree.num_simplices() << std::endl; + + BOOST_CHECK(stree.num_vertices() == 4); + BOOST_CHECK(stree.num_simplices() == 12); +} -- cgit v1.2.3 From 09150bdb2d0b7f55fd6014ca5fbd63fd002fafc9 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Mon, 12 Dec 2016 12:53:14 +0000 Subject: Fix max issue and remove (&tr == NULL) test git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1852 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 932aa53773092c64f1d69ce0d4c0fdaf817b5b06 --- src/Tangential_complex/include/gudhi/Tangential_complex.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index 90c164e2..c9317a44 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -63,6 +63,7 @@ #include #include // for std::sqrt #include +#include // for std::size_t #ifdef GUDHI_USE_TBB #include @@ -82,7 +83,7 @@ using namespace internal; class Vertex_data { public: - Vertex_data(std::size_t data = std::numeric_limits::max()) + Vertex_data(std::size_t data = (std::numeric_limits::max)()) : m_data(data) { } operator std::size_t() { @@ -1048,7 +1049,7 @@ class Tangential_complex { #endif // GUDHI_USE_TBB bool is_infinite(Simplex const& s) const { - return *s.rbegin() == std::numeric_limits::max(); + return *s.rbegin() == (std::numeric_limits::max)(); } // Output: "triangulation" is a Regular Triangulation containing at least the @@ -1654,7 +1655,7 @@ class Tangential_complex { for (; it_point_idx != simplex.end(); ++it_point_idx) { std::size_t point_idx = *it_point_idx; // Don't check infinite simplices - if (point_idx == std::numeric_limits::max()) + if (point_idx == (std::numeric_limits::max)()) continue; Star const& star = m_stars[point_idx]; @@ -1693,7 +1694,7 @@ class Tangential_complex { for (; it_point_idx != s.end(); ++it_point_idx) { std::size_t point_idx = *it_point_idx; // Don't check infinite simplices - if (point_idx == std::numeric_limits::max()) + if (point_idx == (std::numeric_limits::max)()) continue; Star const& star = m_stars[point_idx]; @@ -1959,7 +1960,7 @@ class Tangential_complex { Triangulation const& tr = it_tr->tr(); Tr_vertex_handle center_vh = it_tr->center_vertex(); - if (&tr == NULL || tr.current_dimension() < m_intrinsic_dim) + if (tr.current_dimension() < m_intrinsic_dim) continue; // Color for this star -- cgit v1.2.3 From 454558fecf99cee350eb7d3f81a149c647805c16 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Mon, 12 Dec 2016 13:08:22 +0000 Subject: Use (std::numeric_limits::max) to fix Windows global min max git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1853 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 970c2190f89a6f11712edc07c1980ce0cbdb486b --- src/Tangential_complex/benchmark/benchmark_tc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Tangential_complex/benchmark/benchmark_tc.cpp b/src/Tangential_complex/benchmark/benchmark_tc.cpp index 943fcb54..6d6dd548 100644 --- a/src/Tangential_complex/benchmark/benchmark_tc.cpp +++ b/src/Tangential_complex/benchmark/benchmark_tc.cpp @@ -161,7 +161,7 @@ typename Kernel, typename OutputIteratorPoints> bool load_points_from_file( const std::string &filename, OutputIteratorPoints points, - std::size_t only_first_n_points = std::numeric_limits::max()) { + std::size_t only_first_n_points = (std::numeric_limits::max)()) { typedef typename Kernel::Point_d Point; std::ifstream in(filename); @@ -196,7 +196,7 @@ bool load_points_and_tangent_space_basis_from_file( OutputIteratorPoints points, OutputIteratorTS tangent_spaces, int intrinsic_dim, - std::size_t only_first_n_points = std::numeric_limits::max()) { + std::size_t only_first_n_points = (std::numeric_limits::max)()) { typedef typename Kernel::Point_d Point; typedef typename Kernel::Vector_d Vector; -- cgit v1.2.3 From 8c1fdb043e58e6d5006d51c46cdf54b5de4613e7 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Mon, 12 Dec 2016 13:28:57 +0000 Subject: parenthesis for std::min because of Windows min global function git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1854 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 4540b7f111515cbe8e9e53c78fc00111533306f1 --- src/Tangential_complex/include/gudhi/Tangential_complex.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index c9317a44..2d185a90 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -1905,7 +1905,7 @@ class Tangential_complex { #ifdef GUDHI_TC_EXPORT_ALL_COORDS_IN_OFF int num_coords = m_ambient_dim; #else - int num_coords = std::min(m_ambient_dim, 3); + int num_coords = (std::min)(m_ambient_dim, 3); #endif #ifdef GUDHI_TC_EXPORT_NORMALS -- cgit v1.2.3 From da92ae2f10d715b801f55f8f651fea8a4979f263 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 13 Dec 2016 10:28:07 +0000 Subject: Add example just for Mac test. To be removed. git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1861 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: be598143de42dba782462985515cbc77b0a51e8b --- src/Tangential_complex/example/CMakeLists.txt | 3 ++ src/Tangential_complex/example/example.cpp | 78 +++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 src/Tangential_complex/example/example.cpp (limited to 'src') diff --git a/src/Tangential_complex/example/CMakeLists.txt b/src/Tangential_complex/example/CMakeLists.txt index 32f6eebb..291432b0 100644 --- a/src/Tangential_complex/example/CMakeLists.txt +++ b/src/Tangential_complex/example/CMakeLists.txt @@ -8,9 +8,12 @@ if(CGAL_FOUND) target_link_libraries(Tangential_complex_example_basic ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) add_executable( Tangential_complex_example_with_perturb example_with_perturb.cpp ) target_link_libraries(Tangential_complex_example_with_perturb ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) + add_executable( example example.cpp ) + target_link_libraries(example ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) if (TBB_FOUND) target_link_libraries(Tangential_complex_example_basic ${TBB_LIBRARIES}) target_link_libraries(Tangential_complex_example_with_perturb ${TBB_LIBRARIES}) + target_link_libraries(example ${TBB_LIBRARIES}) endif(TBB_FOUND) add_test(Tangential_complex_example_basic diff --git a/src/Tangential_complex/example/example.cpp b/src/Tangential_complex/example/example.cpp new file mode 100644 index 00000000..cd0f121f --- /dev/null +++ b/src/Tangential_complex/example/example.cpp @@ -0,0 +1,78 @@ +#include +#include + +#include +#include + +#include +#include + +namespace tc = Gudhi::tangential_complex; + + +int main(void) { + typedef CGAL::Epick_d Kernel; + typedef Kernel::FT FT; + typedef Kernel::Point_d Point; + typedef Kernel::Vector_d Vector; + typedef tc::Tangential_complex TC; + + + const int INTRINSIC_DIM = 1; + + // Generate points on a 2-sphere + std::vector points; + // [[0, 0], [1, 0], [0, 1], [1, 1]] + std::vector point = {0.0, 0.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + point = {1.0, 0.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + point = {0.0, 1.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + point = {1.0, 1.0}; + points.push_back(Point(point.size(), point.begin(), point.end())); + std::cout << "points = " << points.size() << std::endl; + Kernel k; + + // Compute the TC + TC tc(points, INTRINSIC_DIM, k); + tc.compute_tangential_complex(); + TC::Num_inconsistencies num_inc = tc.number_of_inconsistent_simplices(); + std::cout << "TC vertices = " << tc.number_of_vertices() << " - simplices = " << num_inc.num_simplices << + " - inconsistencies = " << num_inc.num_inconsistent_simplices << std::endl; + + // Export the TC into a Simplex_tree + Gudhi::Simplex_tree<> stree; + tc.create_complex(stree); + + std::cout << "********************************************************************\n"; + std::cout << "* The complex contains " << stree.num_simplices() << " simplices"; + std::cout << " - dimension " << stree.dimension() << " - filtration " << stree.filtration() << "\n"; + std::cout << "* Iterator on Simplices in the filtration, with [filtration value]:\n"; + for (auto f_simplex : stree.filtration_simplex_range()) { + std::cout << " " << "[" << stree.filtration(f_simplex) << "] "; + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + std::cout << static_cast(vertex) << " "; + } + std::cout << std::endl; + } + + tc.fix_inconsistencies_using_perturbation(0.01, 30.0); + + // Export the TC into a Simplex_tree + tc.create_complex(stree); + + std::cout << "********************************************************************\n"; + std::cout << "* The complex contains " << stree.num_simplices() << " simplices\n"; + std::cout << " - dimension " << stree.dimension() << " - filtration " << stree.filtration() << "\n"; + std::cout << "* Iterator on Simplices in the filtration, with [filtration value]:\n"; + for (auto f_simplex : stree.filtration_simplex_range()) { + std::cout << " " << "[" << stree.filtration(f_simplex) << "] "; + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + std::cout << static_cast(vertex) << " "; + } + std::cout << std::endl; + } + + return 0; +} -- cgit v1.2.3 From 0c277327bb7fbbc096825ed817458440930cca33 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 13 Dec 2016 11:53:31 +0000 Subject: Example modification git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1863 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 0706eed9656c214bbabfa9a8da2f800c2afdf140 --- src/Tangential_complex/example/example.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Tangential_complex/example/example.cpp b/src/Tangential_complex/example/example.cpp index cd0f121f..fa25ac53 100644 --- a/src/Tangential_complex/example/example.cpp +++ b/src/Tangential_complex/example/example.cpp @@ -43,7 +43,9 @@ int main(void) { // Export the TC into a Simplex_tree Gudhi::Simplex_tree<> stree; - tc.create_complex(stree); + int max_dim = tc.create_complex(stree); + stree.set_dimension(max_dim); + stree.initialize_filtration(); std::cout << "********************************************************************\n"; std::cout << "* The complex contains " << stree.num_simplices() << " simplices"; @@ -60,7 +62,9 @@ int main(void) { tc.fix_inconsistencies_using_perturbation(0.01, 30.0); // Export the TC into a Simplex_tree - tc.create_complex(stree); + max_dim = tc.create_complex(stree); + stree.set_dimension(max_dim); + stree.initialize_filtration(); std::cout << "********************************************************************\n"; std::cout << "* The complex contains " << stree.num_simplices() << " simplices\n"; -- cgit v1.2.3 From 1860c2f5e93b789fa14095668dc0b62d94dddfa5 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 13 Dec 2016 12:36:20 +0000 Subject: example point display git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1864 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 1a97b8a9c1f7aff6cdeae8a2fa0eef911f4a5596 --- src/Tangential_complex/example/example.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Tangential_complex/example/example.cpp b/src/Tangential_complex/example/example.cpp index fa25ac53..f740cb1c 100644 --- a/src/Tangential_complex/example/example.cpp +++ b/src/Tangential_complex/example/example.cpp @@ -41,6 +41,9 @@ int main(void) { std::cout << "TC vertices = " << tc.number_of_vertices() << " - simplices = " << num_inc.num_simplices << " - inconsistencies = " << num_inc.num_inconsistent_simplices << std::endl; + std::cout << "TC point[0] " << tc.get_point(0) << " - point[1] " << tc.get_point(1) << + " - point[2] " << tc.get_point(2) << " - point[3] " << tc.get_point(3) << std::endl; + // Export the TC into a Simplex_tree Gudhi::Simplex_tree<> stree; int max_dim = tc.create_complex(stree); @@ -67,7 +70,7 @@ int main(void) { stree.initialize_filtration(); std::cout << "********************************************************************\n"; - std::cout << "* The complex contains " << stree.num_simplices() << " simplices\n"; + std::cout << "* The complex contains " << stree.num_simplices() << " simplices"; std::cout << " - dimension " << stree.dimension() << " - filtration " << stree.filtration() << "\n"; std::cout << "* Iterator on Simplices in the filtration, with [filtration value]:\n"; for (auto f_simplex : stree.filtration_simplex_range()) { -- cgit v1.2.3 From 9e8db290ff0b3f69f88fa5ed54482bfb6730ad9b Mon Sep 17 00:00:00 2001 From: skachano Date: Wed, 14 Dec 2016 14:03:59 +0000 Subject: Improved the documentation for choose_farthest_points git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/subsampling_and_spatialsearching@1869 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 08223b7d1788c73b0fb3fc7255a6386896b63626 --- .../include/gudhi/choose_n_farthest_points.h | 31 +++++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/Subsampling/include/gudhi/choose_n_farthest_points.h b/src/Subsampling/include/gudhi/choose_n_farthest_points.h index 40c7808d..43bf6402 100644 --- a/src/Subsampling/include/gudhi/choose_n_farthest_points.h +++ b/src/Subsampling/include/gudhi/choose_n_farthest_points.h @@ -48,15 +48,27 @@ namespace subsampling { * \brief Subsample by a greedy strategy of iteratively adding the farthest point from the * current chosen point set to the subsampling. * The iteration starts with the landmark `starting point`. + * \tparam Kernel must provide a type Kernel::Squared_distance_d which is a model of the + * concept Kernel_d::Squared_distance_d + * concept. + * \tparam Point_range Range whose value type is Kernel::Point_d. It must provide random-access + * via `operator[]` and the points should be stored contiguously in memory. + * \tparam OutputIterator Output iterator whose value type is Kernel::Point_d. * \details It chooses `final_size` points from a random access range `input_pts` and * outputs it in the output iterator `output_it`. + * @param[in] k A kernel object. + * @param[in] input_pts Const reference to the input points. + * @param[in] final_size The size of the subsample to compute. + * @param[in] starting_point The seed in the farthest point algorithm. + * @param[out] output_it The output iterator. * */ template < typename Kernel, -typename Point_container, +typename Point_range, typename OutputIterator> void choose_n_farthest_points(Kernel const &k, - Point_container const &input_pts, + Point_range const &input_pts, std::size_t final_size, std::size_t starting_point, OutputIterator output_it) { @@ -96,15 +108,26 @@ void choose_n_farthest_points(Kernel const &k, * \brief Subsample by a greedy strategy of iteratively adding the farthest point from the * current chosen point set to the subsampling. * The iteration starts with a random landmark. + * \tparam Kernel must provide a type Kernel::Squared_distance_d which is a model of the + * concept Kernel_d::Squared_distance_d + * concept. + * \tparam Point_range Range whose value type is Kernel::Point_d. It must provide random-access + * via `operator[]` and the points should be stored contiguously in memory. + * \tparam OutputIterator Output iterator whose value type is Kernel::Point_d. * \details It chooses `final_size` points from a random access range `input_pts` and * outputs it in the output iterator `output_it`. + * @param[in] k A kernel object. + * @param[in] input_pts Const reference to the input points. + * @param[in] final_size The size of the subsample to compute. + * @param[out] output_it The output iterator. * */ template < typename Kernel, -typename Point_container, +typename Point_range, typename OutputIterator> void choose_n_farthest_points(Kernel const& k, - Point_container const &input_pts, + Point_range const &input_pts, unsigned final_size, OutputIterator output_it) { // Choose randomly the first landmark -- cgit v1.2.3 From 5703e63889f239e11a6688cda43011cb27282d99 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Wed, 14 Dec 2016 15:24:13 +0000 Subject: example modif git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1870 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 43cf0d0b91808445614a3dc3d51ee87679c1a5d1 --- src/Tangential_complex/example/example.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Tangential_complex/example/example.cpp b/src/Tangential_complex/example/example.cpp index f740cb1c..a503091c 100644 --- a/src/Tangential_complex/example/example.cpp +++ b/src/Tangential_complex/example/example.cpp @@ -39,7 +39,7 @@ int main(void) { tc.compute_tangential_complex(); TC::Num_inconsistencies num_inc = tc.number_of_inconsistent_simplices(); std::cout << "TC vertices = " << tc.number_of_vertices() << " - simplices = " << num_inc.num_simplices << - " - inconsistencies = " << num_inc.num_inconsistent_simplices << std::endl; + " - inc simplices = " << num_inc.num_inconsistent_simplices << " - inc stars = " << num_inc.num_inconsistent_stars << std::endl; std::cout << "TC point[0] " << tc.get_point(0) << " - point[1] " << tc.get_point(1) << " - point[2] " << tc.get_point(2) << " - point[3] " << tc.get_point(3) << std::endl; -- cgit v1.2.3 From 42e91253237a19af47c9a721a7f119dccc89113a Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Wed, 14 Dec 2016 15:46:39 +0000 Subject: Add traces git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1871 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: b37d7be6b0f2ecc5217180e7ce3b14ab338c2354 --- src/Tangential_complex/include/gudhi/Tangential_complex.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index 2d185a90..fc368a5d 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -1364,6 +1364,11 @@ class Tangential_complex { eig.eigenvectors().col(j).data() + m_ambient_dim)); } } + for (auto v : tsb) { + for (int i = 0; i < 2; ++i) + std::cerr << coord(v, i) << ", "; + std::cerr << "\n"; + } if (p_orth_space_basis) { p_orth_space_basis->set_origin(i); -- cgit v1.2.3 From b1e6e79715f68498c04a88e7d2237ec478078d11 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Wed, 14 Dec 2016 16:00:37 +0000 Subject: Points perturb git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1872 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: f194dac5b999169fdf29fbb9223f0ee9db9c12ba --- src/Tangential_complex/example/example.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Tangential_complex/example/example.cpp b/src/Tangential_complex/example/example.cpp index a503091c..b7eb542b 100644 --- a/src/Tangential_complex/example/example.cpp +++ b/src/Tangential_complex/example/example.cpp @@ -25,9 +25,9 @@ int main(void) { // [[0, 0], [1, 0], [0, 1], [1, 1]] std::vector point = {0.0, 0.0}; points.push_back(Point(point.size(), point.begin(), point.end())); - point = {1.0, 0.0}; + point = {1.1, 0.0}; points.push_back(Point(point.size(), point.begin(), point.end())); - point = {0.0, 1.0}; + point = {0.2, 1.3}; points.push_back(Point(point.size(), point.begin(), point.end())); point = {1.0, 1.0}; points.push_back(Point(point.size(), point.begin(), point.end())); -- cgit v1.2.3 From 28b7623d0aed90abe58260861c85b20e43227216 Mon Sep 17 00:00:00 2001 From: cjamin Date: Wed, 14 Dec 2016 18:02:15 +0000 Subject: Bug fix for degenerate cases git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1873 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: a292246c5e85275ec8bbf293fa0157d6693121cf --- src/Tangential_complex/include/gudhi/Tangential_complex.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index fc368a5d..18919362 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -1131,7 +1131,7 @@ class Tangential_complex { Tr_vertex_handle vh = triangulation.insert_if_in_star(proj_pt, center_vertex); // Tr_vertex_handle vh = triangulation.insert(proj_pt); - if (vh != Tr_vertex_handle()) { + if (vh != Tr_vertex_handle() && vh->data() == (std::numeric_limits::max())) { #ifdef GUDHI_TC_VERY_VERBOSE ++num_inserted_points; #endif @@ -1293,6 +1293,8 @@ class Tangential_complex { if (index != i) incident_simplex.insert(index); } + GUDHI_CHECK(incident_simplex.size() == cur_dim_plus_1 - 1, + std::logic_error("update_star: wrong size of incident simplex")); star.push_back(incident_simplex); } } -- cgit v1.2.3 From 04f4501b35eaa2bd33393ef2445d038251ba1355 Mon Sep 17 00:00:00 2001 From: skachano Date: Wed, 14 Dec 2016 18:08:09 +0000 Subject: Added an example with a distance matrix for the farthest point algorithm git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/subsampling_and_spatialsearching@1874 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 340e465189dc7ec8f8706e60e2d8097b53bfd5a0 --- src/Subsampling/example/CMakeLists.txt | 1 + src/Subsampling/example/example_custom_kernel.cpp | 69 ++++++++++++++++++++++ .../include/gudhi/choose_n_farthest_points.h | 4 +- 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 src/Subsampling/example/example_custom_kernel.cpp (limited to 'src') diff --git a/src/Subsampling/example/CMakeLists.txt b/src/Subsampling/example/CMakeLists.txt index 54349f0c..0fd3335c 100644 --- a/src/Subsampling/example/CMakeLists.txt +++ b/src/Subsampling/example/CMakeLists.txt @@ -6,6 +6,7 @@ if(CGAL_FOUND) if (EIGEN3_FOUND) add_executable(Subsampling_example_pick_n_random_points example_pick_n_random_points.cpp) add_executable(Subsampling_example_choose_n_farthest_points example_choose_n_farthest_points.cpp) + add_executable(Subsampling_example_custom_kernel example_custom_kernel.cpp) add_executable(Subsampling_example_sparsify_point_set example_sparsify_point_set.cpp) target_link_libraries(Subsampling_example_sparsify_point_set ${CGAL_LIBRARY}) diff --git a/src/Subsampling/example/example_custom_kernel.cpp b/src/Subsampling/example/example_custom_kernel.cpp new file mode 100644 index 00000000..05797ebe --- /dev/null +++ b/src/Subsampling/example/example_custom_kernel.cpp @@ -0,0 +1,69 @@ +#include + +#include +#include + +#include +#include + + +/* The class Kernel contains a distance function defined on the set of points {0,1,2,3} + * and computes a distance according to the matrix: + * 0 1 2 4 + * 1 0 4 2 + * 2 4 0 1 + * 4 2 1 0 + */ +class Kernel { +public: + typedef double FT; + typedef unsigned Point_d; + + // Class Squared_distance_d + class Squared_distance_d { + private: + std::vector> matrix_; + + public: + + Squared_distance_d() + { + matrix_.push_back(std::vector({0,1,2,4})); + matrix_.push_back(std::vector({1,0,4,2})); + matrix_.push_back(std::vector({2,4,0,1})); + matrix_.push_back(std::vector({4,2,1,0})); + } + + FT operator()(Point_d p1, Point_d p2) + { + return matrix_[p1][p2]; + } + }; + + // Constructor + Kernel() + {} + + // Object of type Squared_distance_d + Squared_distance_d squared_distance_d_object() const + { + return Squared_distance_d(); + } + +}; + +int main(void) { + typedef Kernel K; + typedef typename K::Point_d Point_d; + + K k; + std::vector points = {0,1,2,3}; + std::vector results; + + Gudhi::subsampling::choose_n_farthest_points(k, points, 2, std::back_inserter(results)); + std::cout << "Before sparsification: " << points.size() << " points.\n"; + std::cout << "After sparsification: " << results.size() << " points.\n"; + std::cout << "Result table: {" << results[0] << "," << results[1] << "}\n"; + + return 0; +} diff --git a/src/Subsampling/include/gudhi/choose_n_farthest_points.h b/src/Subsampling/include/gudhi/choose_n_farthest_points.h index 43bf6402..b6b7ace3 100644 --- a/src/Subsampling/include/gudhi/choose_n_farthest_points.h +++ b/src/Subsampling/include/gudhi/choose_n_farthest_points.h @@ -52,6 +52,7 @@ namespace subsampling { * concept Kernel_d::Squared_distance_d * concept. + * It must also contain a public member 'squared_distance_d_object' of this type. * \tparam Point_range Range whose value type is Kernel::Point_d. It must provide random-access * via `operator[]` and the points should be stored contiguously in memory. * \tparam OutputIterator Output iterator whose value type is Kernel::Point_d. @@ -112,6 +113,7 @@ void choose_n_farthest_points(Kernel const &k, * concept Kernel_d::Squared_distance_d * concept. + * It must also contain a public member 'squared_distance_d_object' of this type. * \tparam Point_range Range whose value type is Kernel::Point_d. It must provide random-access * via `operator[]` and the points should be stored contiguously in memory. * \tparam OutputIterator Output iterator whose value type is Kernel::Point_d. @@ -133,7 +135,7 @@ void choose_n_farthest_points(Kernel const& k, // Choose randomly the first landmark std::random_device rd; std::mt19937 gen(rd()); - std::uniform_int_distribution<> dis(1, 6); + std::uniform_int_distribution<> dis(0, final_size); int starting_point = dis(gen); choose_n_farthest_points(k, input_pts, final_size, starting_point, output_it); } -- cgit v1.2.3 From c7cd528c7fa9a548dd47586ae258d33168e04a07 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Thu, 15 Dec 2016 09:27:42 +0000 Subject: Remove example.cpp Remove tangent traces in Tangential_complex.h Modify test_tangential_complex.cpp to make UT work git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1875 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 1bd09671ca6f30c66cce7b48b382e1a8e4fbd3b5 --- src/Tangential_complex/example/CMakeLists.txt | 3 - src/Tangential_complex/example/example.cpp | 85 ---------------------- .../include/gudhi/Tangential_complex.h | 5 -- .../test/test_tangential_complex.cpp | 13 ++-- 4 files changed, 8 insertions(+), 98 deletions(-) delete mode 100644 src/Tangential_complex/example/example.cpp (limited to 'src') diff --git a/src/Tangential_complex/example/CMakeLists.txt b/src/Tangential_complex/example/CMakeLists.txt index 291432b0..32f6eebb 100644 --- a/src/Tangential_complex/example/CMakeLists.txt +++ b/src/Tangential_complex/example/CMakeLists.txt @@ -8,12 +8,9 @@ if(CGAL_FOUND) target_link_libraries(Tangential_complex_example_basic ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) add_executable( Tangential_complex_example_with_perturb example_with_perturb.cpp ) target_link_libraries(Tangential_complex_example_with_perturb ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) - add_executable( example example.cpp ) - target_link_libraries(example ${CGAL_LIBRARY} ${Boost_DATE_TIME_LIBRARY}) if (TBB_FOUND) target_link_libraries(Tangential_complex_example_basic ${TBB_LIBRARIES}) target_link_libraries(Tangential_complex_example_with_perturb ${TBB_LIBRARIES}) - target_link_libraries(example ${TBB_LIBRARIES}) endif(TBB_FOUND) add_test(Tangential_complex_example_basic diff --git a/src/Tangential_complex/example/example.cpp b/src/Tangential_complex/example/example.cpp deleted file mode 100644 index b7eb542b..00000000 --- a/src/Tangential_complex/example/example.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include -#include - -#include -#include - -#include -#include - -namespace tc = Gudhi::tangential_complex; - - -int main(void) { - typedef CGAL::Epick_d Kernel; - typedef Kernel::FT FT; - typedef Kernel::Point_d Point; - typedef Kernel::Vector_d Vector; - typedef tc::Tangential_complex TC; - - - const int INTRINSIC_DIM = 1; - - // Generate points on a 2-sphere - std::vector points; - // [[0, 0], [1, 0], [0, 1], [1, 1]] - std::vector point = {0.0, 0.0}; - points.push_back(Point(point.size(), point.begin(), point.end())); - point = {1.1, 0.0}; - points.push_back(Point(point.size(), point.begin(), point.end())); - point = {0.2, 1.3}; - points.push_back(Point(point.size(), point.begin(), point.end())); - point = {1.0, 1.0}; - points.push_back(Point(point.size(), point.begin(), point.end())); - std::cout << "points = " << points.size() << std::endl; - Kernel k; - - // Compute the TC - TC tc(points, INTRINSIC_DIM, k); - tc.compute_tangential_complex(); - TC::Num_inconsistencies num_inc = tc.number_of_inconsistent_simplices(); - std::cout << "TC vertices = " << tc.number_of_vertices() << " - simplices = " << num_inc.num_simplices << - " - inc simplices = " << num_inc.num_inconsistent_simplices << " - inc stars = " << num_inc.num_inconsistent_stars << std::endl; - - std::cout << "TC point[0] " << tc.get_point(0) << " - point[1] " << tc.get_point(1) << - " - point[2] " << tc.get_point(2) << " - point[3] " << tc.get_point(3) << std::endl; - - // Export the TC into a Simplex_tree - Gudhi::Simplex_tree<> stree; - int max_dim = tc.create_complex(stree); - stree.set_dimension(max_dim); - stree.initialize_filtration(); - - std::cout << "********************************************************************\n"; - std::cout << "* The complex contains " << stree.num_simplices() << " simplices"; - std::cout << " - dimension " << stree.dimension() << " - filtration " << stree.filtration() << "\n"; - std::cout << "* Iterator on Simplices in the filtration, with [filtration value]:\n"; - for (auto f_simplex : stree.filtration_simplex_range()) { - std::cout << " " << "[" << stree.filtration(f_simplex) << "] "; - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << static_cast(vertex) << " "; - } - std::cout << std::endl; - } - - tc.fix_inconsistencies_using_perturbation(0.01, 30.0); - - // Export the TC into a Simplex_tree - max_dim = tc.create_complex(stree); - stree.set_dimension(max_dim); - stree.initialize_filtration(); - - std::cout << "********************************************************************\n"; - std::cout << "* The complex contains " << stree.num_simplices() << " simplices"; - std::cout << " - dimension " << stree.dimension() << " - filtration " << stree.filtration() << "\n"; - std::cout << "* Iterator on Simplices in the filtration, with [filtration value]:\n"; - for (auto f_simplex : stree.filtration_simplex_range()) { - std::cout << " " << "[" << stree.filtration(f_simplex) << "] "; - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << static_cast(vertex) << " "; - } - std::cout << std::endl; - } - - return 0; -} diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index 18919362..6c0bbce6 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -1366,11 +1366,6 @@ class Tangential_complex { eig.eigenvectors().col(j).data() + m_ambient_dim)); } } - for (auto v : tsb) { - for (int i = 0; i < 2; ++i) - std::cerr << coord(v, i) << ", "; - std::cerr << "\n"; - } if (p_orth_space_basis) { p_orth_space_basis->set_origin(i); diff --git a/src/Tangential_complex/test/test_tangential_complex.cpp b/src/Tangential_complex/test/test_tangential_complex.cpp index 4c3dec3b..ebe5cdb4 100644 --- a/src/Tangential_complex/test/test_tangential_complex.cpp +++ b/src/Tangential_complex/test/test_tangential_complex.cpp @@ -98,11 +98,13 @@ BOOST_AUTO_TEST_CASE(test_mini_tangential) { tc.compute_tangential_complex(); TC::Num_inconsistencies num_inc = tc.number_of_inconsistent_simplices(); std::cout << "TC vertices = " << tc.number_of_vertices() << " - simplices = " << num_inc.num_simplices << - " - inconsistencies = " << num_inc.num_inconsistent_simplices << std::endl; + " - inc simplices = " << num_inc.num_inconsistent_simplices << + " - inc stars = " << num_inc.num_inconsistent_stars << std::endl; BOOST_CHECK(tc.number_of_vertices() == 4); BOOST_CHECK(num_inc.num_simplices == 4); - BOOST_CHECK(num_inc.num_inconsistent_simplices == 2); + BOOST_CHECK(num_inc.num_inconsistent_simplices == 0); + BOOST_CHECK(num_inc.num_inconsistent_stars == 0); // Export the TC into a Simplex_tree Gudhi::Simplex_tree<> stree; @@ -110,18 +112,19 @@ BOOST_AUTO_TEST_CASE(test_mini_tangential) { std::cout << "ST vertices = " << stree.num_vertices() << " - simplices = " << stree.num_simplices() << std::endl; BOOST_CHECK(stree.num_vertices() == 4); - BOOST_CHECK(stree.num_simplices() == 12); + BOOST_CHECK(stree.num_simplices() == 6); tc.fix_inconsistencies_using_perturbation(0.01, 30.0); BOOST_CHECK(tc.number_of_vertices() == 4); BOOST_CHECK(num_inc.num_simplices == 4); - BOOST_CHECK(num_inc.num_inconsistent_simplices == 2); + BOOST_CHECK(num_inc.num_inconsistent_simplices == 0); + BOOST_CHECK(num_inc.num_inconsistent_stars == 0); // Export the TC into a Simplex_tree tc.create_complex(stree); std::cout << "ST vertices = " << stree.num_vertices() << " - simplices = " << stree.num_simplices() << std::endl; BOOST_CHECK(stree.num_vertices() == 4); - BOOST_CHECK(stree.num_simplices() == 12); + BOOST_CHECK(stree.num_simplices() == 6); } -- cgit v1.2.3 From 72885b69e5fbe786f01b8275586281bb05198241 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Thu, 15 Dec 2016 09:41:12 +0000 Subject: Fix max issue on Windows git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1876 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 957e2196a4a56308f76c0f55d182ffd3952eaf4e --- src/Tangential_complex/include/gudhi/Tangential_complex.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index 6c0bbce6..e7e50ce9 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -1131,7 +1131,7 @@ class Tangential_complex { Tr_vertex_handle vh = triangulation.insert_if_in_star(proj_pt, center_vertex); // Tr_vertex_handle vh = triangulation.insert(proj_pt); - if (vh != Tr_vertex_handle() && vh->data() == (std::numeric_limits::max())) { + if (vh != Tr_vertex_handle() && vh->data() == (std::numeric_limits::max)()) { #ifdef GUDHI_TC_VERY_VERBOSE ++num_inserted_points; #endif -- cgit v1.2.3 From 47374e6d54a8b251e421681d25d2e585d0203d19 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Thu, 15 Dec 2016 11:00:56 +0000 Subject: Remove unused modifications git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/tangential_test@1878 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 1b3dafad298e0caa87825ce47f6e8ac3983206a0 --- CMakeLists.txt | 14 +++++++------- src/Tangential_complex/example/CMakeLists.txt | 1 - src/Tangential_complex/include/gudhi/Tangential_complex.h | 2 -- 3 files changed, 7 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/CMakeLists.txt b/CMakeLists.txt index 78de6c09..005df6d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,13 +73,13 @@ else() set(Boost_USE_STATIC_RUNTIME OFF) # Find TBB package for parallel sort - not mandatory, just optional. - #set(TBB_FIND_QUIETLY ON) - #find_package(TBB) - #if (TBB_FOUND) - # include(${TBB_USE_FILE}) - # message("TBB found in ${TBB_LIBRARY_DIRS}") - # add_definitions(-DGUDHI_USE_TBB) - #endif() + set(TBB_FIND_QUIETLY ON) + find_package(TBB) + if (TBB_FOUND) + include(${TBB_USE_FILE}) + message("TBB found in ${TBB_LIBRARY_DIRS}") + add_definitions(-DGUDHI_USE_TBB) + endif() find_package(Eigen3 3.1.0) if (EIGEN3_FOUND) diff --git a/src/Tangential_complex/example/CMakeLists.txt b/src/Tangential_complex/example/CMakeLists.txt index 32f6eebb..a75ccd5b 100644 --- a/src/Tangential_complex/example/CMakeLists.txt +++ b/src/Tangential_complex/example/CMakeLists.txt @@ -18,7 +18,6 @@ if(CGAL_FOUND) add_test(Tangential_complex_example_with_perturb ${CMAKE_CURRENT_BINARY_DIR}/Tangential_complex_example_with_perturb) - endif(EIGEN3_FOUND) endif(NOT CGAL_VERSION VERSION_LESS 4.8.0) endif(CGAL_FOUND) diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index e7e50ce9..65de2743 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -1306,7 +1306,6 @@ class Tangential_complex { , bool normalize_basis = true , Orthogonal_space_basis *p_orth_space_basis = NULL ) { -// unsigned int num_pts_for_pca = static_cast (std::pow(GUDHI_TC_BASE_VALUE_FOR_PCA, m_intrinsic_dim)); unsigned int num_pts_for_pca = (std::min)(static_cast (std::pow(GUDHI_TC_BASE_VALUE_FOR_PCA, m_intrinsic_dim)), static_cast (m_points.size())); @@ -1397,7 +1396,6 @@ class Tangential_complex { // on it. Note that most points are duplicated. Tangent_space_basis compute_tangent_space(const Simplex &s, bool normalize_basis = true) { -// unsigned int num_pts_for_pca = static_cast (std::pow(GUDHI_TC_BASE_VALUE_FOR_PCA, m_intrinsic_dim)); unsigned int num_pts_for_pca = (std::min)(static_cast (std::pow(GUDHI_TC_BASE_VALUE_FOR_PCA, m_intrinsic_dim)), static_cast (m_points.size())); -- cgit v1.2.3 From 66d5bb10fcbaf75962004dfa34d8f2b8d5d23c0a Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Thu, 15 Dec 2016 16:30:50 +0000 Subject: Modify random and limit tests cases git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/subsampling_and_spatialsearching@1883 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 385f334f9358ae62c2ba6ec0d652ecfd52a052a7 --- .../include/gudhi/choose_n_farthest_points.h | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/Subsampling/include/gudhi/choose_n_farthest_points.h b/src/Subsampling/include/gudhi/choose_n_farthest_points.h index b6b7ace3..ea387bf9 100644 --- a/src/Subsampling/include/gudhi/choose_n_farthest_points.h +++ b/src/Subsampling/include/gudhi/choose_n_farthest_points.h @@ -73,10 +73,15 @@ void choose_n_farthest_points(Kernel const &k, std::size_t final_size, std::size_t starting_point, OutputIterator output_it) { - typename Kernel::Squared_distance_d sqdist = k.squared_distance_d_object(); - std::size_t nb_points = boost::size(input_pts); - assert(nb_points >= final_size); + if (final_size > nb_points) + final_size = nb_points; + + // Tests to the limit + if (final_size < 1) + return; + + typename Kernel::Squared_distance_d sqdist = k.squared_distance_d_object(); std::size_t current_number_of_landmarks = 0; // counter for landmarks const double infty = std::numeric_limits::infinity(); // infinity (see next entry) @@ -132,10 +137,14 @@ void choose_n_farthest_points(Kernel const& k, Point_range const &input_pts, unsigned final_size, OutputIterator output_it) { + // Tests to the limit + if ((final_size < 1) || (input_pts.size() == 0)) + return; + // Choose randomly the first landmark std::random_device rd; std::mt19937 gen(rd()); - std::uniform_int_distribution<> dis(0, final_size); + std::uniform_int_distribution<> dis(0, (input_pts.size() - 1)); int starting_point = dis(gen); choose_n_farthest_points(k, input_pts, final_size, starting_point, output_it); } -- cgit v1.2.3 From 0df3c9bcca4345b8be27ca2fd90eb5137072740c Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Thu, 15 Dec 2016 20:50:56 +0000 Subject: New pairs in dimension function in Persistence cohomology git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@1887 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 76bc9a951d752a6ca0f62244012965b5b6597a17 --- .../include/gudhi/Persistent_cohomology.h | 15 ++++++ .../test/betti_numbers_unit_test.cpp | 57 ++++++++++++++++++++++ 2 files changed, 72 insertions(+) (limited to 'src') diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h index b31df6a4..d3a8acc0 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h @@ -690,6 +690,21 @@ class Persistent_cohomology { return persistent_pairs_; } + /** @brief Returns persistence pairs for a given dimension. + * @param[in] dimension Dimension to get the birth and death pairs from. + * @return A vector of persistence intervals (birth and death) on a fixed dimension. + */ + std::vector< std::pair< Filtration_value , Filtration_value > > + pairs_in_dimension( unsigned dimension ) { + std::vector< std::pair< Filtration_value , Filtration_value > > result; + for (auto pair : persistent_pairs_) { + if (cpx_->dimension( get<0>(pair)) == dimension ) { + result.push_back(std::pair(cpx_->filtration(get<0>(pair)), + cpx_->filtration(get<1>(pair)))); + } + } + return result; + } private: /* * Structure representing a cocycle. diff --git a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp index 40221005..67dfcce4 100644 --- a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp +++ b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp @@ -84,6 +84,8 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers ) // 2 1 0 inf // means that in Z/2Z-homology, the Betti numbers are b0=2 and b1=1. + std::cout << "BETTI NUMBERS" << std::endl; + BOOST_CHECK(pcoh.betti_number(0) == 2); BOOST_CHECK(pcoh.betti_number(1) == 1); BOOST_CHECK(pcoh.betti_number(2) == 0); @@ -93,6 +95,8 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers ) BOOST_CHECK(bns[0] == 2); BOOST_CHECK(bns[1] == 1); BOOST_CHECK(bns[2] == 0); + + std::cout << "GET PERSISTENT PAIRS" << std::endl; // Custom sort and output persistence cmp_intervals_by_dim_then_length cmp(&st); @@ -115,6 +119,33 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers ) BOOST_CHECK(st.dimension(get<0>(persistent_pairs[2])) == 0); BOOST_CHECK(st.filtration(get<0>(persistent_pairs[2])) == 0); BOOST_CHECK(get<1>(persistent_pairs[2]) == st.null_simplex()); + + std::cout << "PAIRS IN DIMENSION" << std::endl; + + auto pairs_in_dimension_0 = pcoh.pairs_in_dimension(0); + std::cout << "pairs_in_dimension_0.size() = " << pairs_in_dimension_0.size() << std::endl; + for (int i = 0; i < pairs_in_dimension_0.size(); i++) + std::cout << "pairs_in_dimension_0[" << i << "] = [" << pairs_in_dimension_0[i].first << "," << + pairs_in_dimension_0[i].second << "]" << std::endl; + BOOST_CHECK(pairs_in_dimension_0.size() == 2); + BOOST_CHECK(pairs_in_dimension_0[0].first == 0); + BOOST_CHECK(pairs_in_dimension_0[0].second == std::numeric_limits::infinity()); + BOOST_CHECK(pairs_in_dimension_0[1].first == 0); + BOOST_CHECK(pairs_in_dimension_0[1].second == std::numeric_limits::infinity()); + + + auto pairs_in_dimension_1 = pcoh.pairs_in_dimension(1); + std::cout << "pairs_in_dimension_1.size() = " << pairs_in_dimension_1.size() << std::endl; + for (int i = 0; i < pairs_in_dimension_1.size(); i++) + std::cout << "pairs_in_dimension_1[" << i << "] = [" << pairs_in_dimension_1[i].first << "," << + pairs_in_dimension_1[i].second << "]" << std::endl; + BOOST_CHECK(pairs_in_dimension_1.size() == 1); + BOOST_CHECK(pairs_in_dimension_1[0].first == 0); + BOOST_CHECK(pairs_in_dimension_1[0].second == std::numeric_limits::infinity()); + + auto pairs_in_dimension_2 = pcoh.pairs_in_dimension(2); + std::cout << "pairs_in_dimension_2.size() = " << pairs_in_dimension_2.size() << std::endl; + BOOST_CHECK(pairs_in_dimension_2.size() == 0); } using Simplex_tree = Gudhi::Simplex_tree<>; @@ -231,4 +262,30 @@ BOOST_AUTO_TEST_CASE( betti_numbers ) BOOST_CHECK(st.dimension(get<0>(persistent_pairs[2])) == 0); BOOST_CHECK(st.filtration(get<0>(persistent_pairs[2])) == 1); BOOST_CHECK(get<1>(persistent_pairs[2]) == st.null_simplex()); + + std::cout << "PAIRS IN DIMENSION" << std::endl; + + auto pairs_in_dimension_0 = pcoh.pairs_in_dimension(0); + std::cout << "pairs_in_dimension_0.size() = " << pairs_in_dimension_0.size() << std::endl; + for (int i = 0; i < pairs_in_dimension_0.size(); i++) + std::cout << "pairs_in_dimension_0[" << i << "] = [" << pairs_in_dimension_0[i].first << "," << + pairs_in_dimension_0[i].second << "]" << std::endl; + BOOST_CHECK(pairs_in_dimension_0.size() == 2); + BOOST_CHECK(pairs_in_dimension_0[0].first == 2); + BOOST_CHECK(pairs_in_dimension_0[0].second == std::numeric_limits::infinity()); + BOOST_CHECK(pairs_in_dimension_0[1].first == 1); + BOOST_CHECK(pairs_in_dimension_0[1].second == std::numeric_limits::infinity()); + + auto pairs_in_dimension_1 = pcoh.pairs_in_dimension(1); + std::cout << "pairs_in_dimension_1.size() = " << pairs_in_dimension_1.size() << std::endl; + for (int i = 0; i < pairs_in_dimension_1.size(); i++) + std::cout << "pairs_in_dimension_1[" << i << "] = [" << pairs_in_dimension_1[i].first << "," << + pairs_in_dimension_1[i].second << "]" << std::endl; + BOOST_CHECK(pairs_in_dimension_1.size() == 1); + BOOST_CHECK(pairs_in_dimension_1[0].first == 4); + BOOST_CHECK(pairs_in_dimension_1[0].second == std::numeric_limits::infinity()); + + auto pairs_in_dimension_2 = pcoh.pairs_in_dimension(2); + std::cout << "pairs_in_dimension_2.size() = " << pairs_in_dimension_2.size() << std::endl; + BOOST_CHECK(pairs_in_dimension_2.size() == 0); } -- cgit v1.2.3 From 251d5726f17275b0af8333440b21476751925e1b Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Thu, 15 Dec 2016 22:53:16 +0000 Subject: Fix after code review git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@1889 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 9ec3dcd290042159c313a83be3a3e8fb7bafa6e8 --- .../include/gudhi/Persistent_cohomology.h | 10 +- .../test/betti_numbers_unit_test.cpp | 102 ++++++++++----------- 2 files changed, 56 insertions(+), 56 deletions(-) (limited to 'src') diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h index d3a8acc0..c3a1535a 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h @@ -690,17 +690,17 @@ class Persistent_cohomology { return persistent_pairs_; } - /** @brief Returns persistence pairs for a given dimension. + /** @brief Returns persistence intervals for a given dimension. * @param[in] dimension Dimension to get the birth and death pairs from. * @return A vector of persistence intervals (birth and death) on a fixed dimension. */ std::vector< std::pair< Filtration_value , Filtration_value > > - pairs_in_dimension( unsigned dimension ) { + intervals_in_dimension(int dimension) { std::vector< std::pair< Filtration_value , Filtration_value > > result; - for (auto pair : persistent_pairs_) { + // auto && pair, to avoid unnecessary copying + for (auto && pair : persistent_pairs_) { if (cpx_->dimension( get<0>(pair)) == dimension ) { - result.push_back(std::pair(cpx_->filtration(get<0>(pair)), - cpx_->filtration(get<1>(pair)))); + result.emplace_back(cpx_->filtration(get<0>(pair)), cpx_->filtration(get<1>(pair))); } } return result; diff --git a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp index 67dfcce4..b98a3765 100644 --- a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp +++ b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp @@ -120,32 +120,32 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers ) BOOST_CHECK(st.filtration(get<0>(persistent_pairs[2])) == 0); BOOST_CHECK(get<1>(persistent_pairs[2]) == st.null_simplex()); - std::cout << "PAIRS IN DIMENSION" << std::endl; - - auto pairs_in_dimension_0 = pcoh.pairs_in_dimension(0); - std::cout << "pairs_in_dimension_0.size() = " << pairs_in_dimension_0.size() << std::endl; - for (int i = 0; i < pairs_in_dimension_0.size(); i++) - std::cout << "pairs_in_dimension_0[" << i << "] = [" << pairs_in_dimension_0[i].first << "," << - pairs_in_dimension_0[i].second << "]" << std::endl; - BOOST_CHECK(pairs_in_dimension_0.size() == 2); - BOOST_CHECK(pairs_in_dimension_0[0].first == 0); - BOOST_CHECK(pairs_in_dimension_0[0].second == std::numeric_limits::infinity()); - BOOST_CHECK(pairs_in_dimension_0[1].first == 0); - BOOST_CHECK(pairs_in_dimension_0[1].second == std::numeric_limits::infinity()); - - - auto pairs_in_dimension_1 = pcoh.pairs_in_dimension(1); - std::cout << "pairs_in_dimension_1.size() = " << pairs_in_dimension_1.size() << std::endl; - for (int i = 0; i < pairs_in_dimension_1.size(); i++) - std::cout << "pairs_in_dimension_1[" << i << "] = [" << pairs_in_dimension_1[i].first << "," << - pairs_in_dimension_1[i].second << "]" << std::endl; - BOOST_CHECK(pairs_in_dimension_1.size() == 1); - BOOST_CHECK(pairs_in_dimension_1[0].first == 0); - BOOST_CHECK(pairs_in_dimension_1[0].second == std::numeric_limits::infinity()); - - auto pairs_in_dimension_2 = pcoh.pairs_in_dimension(2); - std::cout << "pairs_in_dimension_2.size() = " << pairs_in_dimension_2.size() << std::endl; - BOOST_CHECK(pairs_in_dimension_2.size() == 0); + std::cout << "INTERVALS IN DIMENSION" << std::endl; + + auto intervals_in_dimension_0 = pcoh.intervals_in_dimension(0); + std::cout << "intervals_in_dimension_0.size() = " << intervals_in_dimension_0.size() << std::endl; + for (int i = 0; i < intervals_in_dimension_0.size(); i++) + std::cout << "intervals_in_dimension_0[" << i << "] = [" << intervals_in_dimension_0[i].first << "," << + intervals_in_dimension_0[i].second << "]" << std::endl; + BOOST_CHECK(intervals_in_dimension_0.size() == 2); + BOOST_CHECK(intervals_in_dimension_0[0].first == 0); + BOOST_CHECK(intervals_in_dimension_0[0].second == std::numeric_limits::infinity()); + BOOST_CHECK(intervals_in_dimension_0[1].first == 0); + BOOST_CHECK(intervals_in_dimension_0[1].second == std::numeric_limits::infinity()); + + + auto intervals_in_dimension_1 = pcoh.intervals_in_dimension(1); + std::cout << "intervals_in_dimension_1.size() = " << intervals_in_dimension_1.size() << std::endl; + for (int i = 0; i < intervals_in_dimension_1.size(); i++) + std::cout << "intervals_in_dimension_1[" << i << "] = [" << intervals_in_dimension_1[i].first << "," << + intervals_in_dimension_1[i].second << "]" << std::endl; + BOOST_CHECK(intervals_in_dimension_1.size() == 1); + BOOST_CHECK(intervals_in_dimension_1[0].first == 0); + BOOST_CHECK(intervals_in_dimension_1[0].second == std::numeric_limits::infinity()); + + auto intervals_in_dimension_2 = pcoh.intervals_in_dimension(2); + std::cout << "intervals_in_dimension_2.size() = " << intervals_in_dimension_2.size() << std::endl; + BOOST_CHECK(intervals_in_dimension_2.size() == 0); } using Simplex_tree = Gudhi::Simplex_tree<>; @@ -263,29 +263,29 @@ BOOST_AUTO_TEST_CASE( betti_numbers ) BOOST_CHECK(st.filtration(get<0>(persistent_pairs[2])) == 1); BOOST_CHECK(get<1>(persistent_pairs[2]) == st.null_simplex()); - std::cout << "PAIRS IN DIMENSION" << std::endl; - - auto pairs_in_dimension_0 = pcoh.pairs_in_dimension(0); - std::cout << "pairs_in_dimension_0.size() = " << pairs_in_dimension_0.size() << std::endl; - for (int i = 0; i < pairs_in_dimension_0.size(); i++) - std::cout << "pairs_in_dimension_0[" << i << "] = [" << pairs_in_dimension_0[i].first << "," << - pairs_in_dimension_0[i].second << "]" << std::endl; - BOOST_CHECK(pairs_in_dimension_0.size() == 2); - BOOST_CHECK(pairs_in_dimension_0[0].first == 2); - BOOST_CHECK(pairs_in_dimension_0[0].second == std::numeric_limits::infinity()); - BOOST_CHECK(pairs_in_dimension_0[1].first == 1); - BOOST_CHECK(pairs_in_dimension_0[1].second == std::numeric_limits::infinity()); - - auto pairs_in_dimension_1 = pcoh.pairs_in_dimension(1); - std::cout << "pairs_in_dimension_1.size() = " << pairs_in_dimension_1.size() << std::endl; - for (int i = 0; i < pairs_in_dimension_1.size(); i++) - std::cout << "pairs_in_dimension_1[" << i << "] = [" << pairs_in_dimension_1[i].first << "," << - pairs_in_dimension_1[i].second << "]" << std::endl; - BOOST_CHECK(pairs_in_dimension_1.size() == 1); - BOOST_CHECK(pairs_in_dimension_1[0].first == 4); - BOOST_CHECK(pairs_in_dimension_1[0].second == std::numeric_limits::infinity()); - - auto pairs_in_dimension_2 = pcoh.pairs_in_dimension(2); - std::cout << "pairs_in_dimension_2.size() = " << pairs_in_dimension_2.size() << std::endl; - BOOST_CHECK(pairs_in_dimension_2.size() == 0); + std::cout << "INTERVALS IN DIMENSION" << std::endl; + + auto intervals_in_dimension_0 = pcoh.intervals_in_dimension(0); + std::cout << "intervals_in_dimension_0.size() = " << intervals_in_dimension_0.size() << std::endl; + for (int i = 0; i < intervals_in_dimension_0.size(); i++) + std::cout << "intervals_in_dimension_0[" << i << "] = [" << intervals_in_dimension_0[i].first << "," << + intervals_in_dimension_0[i].second << "]" << std::endl; + BOOST_CHECK(intervals_in_dimension_0.size() == 2); + BOOST_CHECK(intervals_in_dimension_0[0].first == 2); + BOOST_CHECK(intervals_in_dimension_0[0].second == std::numeric_limits::infinity()); + BOOST_CHECK(intervals_in_dimension_0[1].first == 1); + BOOST_CHECK(intervals_in_dimension_0[1].second == std::numeric_limits::infinity()); + + auto intervals_in_dimension_1 = pcoh.intervals_in_dimension(1); + std::cout << "intervals_in_dimension_1.size() = " << intervals_in_dimension_1.size() << std::endl; + for (int i = 0; i < intervals_in_dimension_1.size(); i++) + std::cout << "intervals_in_dimension_1[" << i << "] = [" << intervals_in_dimension_1[i].first << "," << + intervals_in_dimension_1[i].second << "]" << std::endl; + BOOST_CHECK(intervals_in_dimension_1.size() == 1); + BOOST_CHECK(intervals_in_dimension_1[0].first == 4); + BOOST_CHECK(intervals_in_dimension_1[0].second == std::numeric_limits::infinity()); + + auto intervals_in_dimension_2 = pcoh.intervals_in_dimension(2); + std::cout << "intervals_in_dimension_2.size() = " << intervals_in_dimension_2.size() << std::endl; + BOOST_CHECK(intervals_in_dimension_2.size() == 0); } -- cgit v1.2.3 From c8dbfc68cca3c5462226e5d953f721143fc645f0 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 16 Dec 2016 14:07:02 +0000 Subject: Fix cpplint and warnings git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@1902 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 24c5aacf579eb1ceb35c680770d5168524c4c84b --- .../include/gudhi/Persistent_cohomology.h | 3 +- .../test/betti_numbers_unit_test.cpp | 8 ++--- src/Subsampling/example/example_custom_kernel.cpp | 38 +++++++++------------- src/Subsampling/include/gudhi/sparsify_point_set.h | 2 -- src/common/include/gudhi/random_point_generators.h | 2 -- 5 files changed, 22 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h index c3a1535a..681de8c6 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h @@ -699,12 +699,13 @@ class Persistent_cohomology { std::vector< std::pair< Filtration_value , Filtration_value > > result; // auto && pair, to avoid unnecessary copying for (auto && pair : persistent_pairs_) { - if (cpx_->dimension( get<0>(pair)) == dimension ) { + if (cpx_->dimension(get<0>(pair)) == dimension) { result.emplace_back(cpx_->filtration(get<0>(pair)), cpx_->filtration(get<1>(pair))); } } return result; } + private: /* * Structure representing a cocycle. diff --git a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp index b98a3765..0ed3fddf 100644 --- a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp +++ b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp @@ -124,7 +124,7 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers ) auto intervals_in_dimension_0 = pcoh.intervals_in_dimension(0); std::cout << "intervals_in_dimension_0.size() = " << intervals_in_dimension_0.size() << std::endl; - for (int i = 0; i < intervals_in_dimension_0.size(); i++) + for (std::size_t i = 0; i < intervals_in_dimension_0.size(); i++) std::cout << "intervals_in_dimension_0[" << i << "] = [" << intervals_in_dimension_0[i].first << "," << intervals_in_dimension_0[i].second << "]" << std::endl; BOOST_CHECK(intervals_in_dimension_0.size() == 2); @@ -136,7 +136,7 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers ) auto intervals_in_dimension_1 = pcoh.intervals_in_dimension(1); std::cout << "intervals_in_dimension_1.size() = " << intervals_in_dimension_1.size() << std::endl; - for (int i = 0; i < intervals_in_dimension_1.size(); i++) + for (std::size_t i = 0; i < intervals_in_dimension_1.size(); i++) std::cout << "intervals_in_dimension_1[" << i << "] = [" << intervals_in_dimension_1[i].first << "," << intervals_in_dimension_1[i].second << "]" << std::endl; BOOST_CHECK(intervals_in_dimension_1.size() == 1); @@ -267,7 +267,7 @@ BOOST_AUTO_TEST_CASE( betti_numbers ) auto intervals_in_dimension_0 = pcoh.intervals_in_dimension(0); std::cout << "intervals_in_dimension_0.size() = " << intervals_in_dimension_0.size() << std::endl; - for (int i = 0; i < intervals_in_dimension_0.size(); i++) + for (std::size_t i = 0; i < intervals_in_dimension_0.size(); i++) std::cout << "intervals_in_dimension_0[" << i << "] = [" << intervals_in_dimension_0[i].first << "," << intervals_in_dimension_0[i].second << "]" << std::endl; BOOST_CHECK(intervals_in_dimension_0.size() == 2); @@ -278,7 +278,7 @@ BOOST_AUTO_TEST_CASE( betti_numbers ) auto intervals_in_dimension_1 = pcoh.intervals_in_dimension(1); std::cout << "intervals_in_dimension_1.size() = " << intervals_in_dimension_1.size() << std::endl; - for (int i = 0; i < intervals_in_dimension_1.size(); i++) + for (std::size_t i = 0; i < intervals_in_dimension_1.size(); i++) std::cout << "intervals_in_dimension_1[" << i << "] = [" << intervals_in_dimension_1[i].first << "," << intervals_in_dimension_1[i].second << "]" << std::endl; BOOST_CHECK(intervals_in_dimension_1.size() == 1); diff --git a/src/Subsampling/example/example_custom_kernel.cpp b/src/Subsampling/example/example_custom_kernel.cpp index 05797ebe..f87ef0b3 100644 --- a/src/Subsampling/example/example_custom_kernel.cpp +++ b/src/Subsampling/example/example_custom_kernel.cpp @@ -7,7 +7,7 @@ #include -/* The class Kernel contains a distance function defined on the set of points {0,1,2,3} +/* The class Kernel contains a distance function defined on the set of points {0, 1, 2, 3} * and computes a distance according to the matrix: * 0 1 2 4 * 1 0 4 2 @@ -15,41 +15,35 @@ * 4 2 1 0 */ class Kernel { -public: + public: typedef double FT; typedef unsigned Point_d; // Class Squared_distance_d class Squared_distance_d { - private: + private: std::vector> matrix_; - - public: - Squared_distance_d() - { - matrix_.push_back(std::vector({0,1,2,4})); - matrix_.push_back(std::vector({1,0,4,2})); - matrix_.push_back(std::vector({2,4,0,1})); - matrix_.push_back(std::vector({4,2,1,0})); - } - - FT operator()(Point_d p1, Point_d p2) - { + public: + Squared_distance_d() { + matrix_.push_back(std::vector({0,1,2,4})); + matrix_.push_back(std::vector({1,0,4,2})); + matrix_.push_back(std::vector({2,4,0,1})); + matrix_.push_back(std::vector({4,2,1,0})); + } + + FT operator()(Point_d p1, Point_d p2) { return matrix_[p1][p2]; } }; // Constructor - Kernel() - {} + Kernel() {} // Object of type Squared_distance_d - Squared_distance_d squared_distance_d_object() const - { + Squared_distance_d squared_distance_d_object() const { return Squared_distance_d(); } - }; int main(void) { @@ -57,9 +51,9 @@ int main(void) { typedef typename K::Point_d Point_d; K k; - std::vector points = {0,1,2,3}; + std::vector points = {0, 1, 2, 3}; std::vector results; - + Gudhi::subsampling::choose_n_farthest_points(k, points, 2, std::back_inserter(results)); std::cout << "Before sparsification: " << points.size() << " points.\n"; std::cout << "After sparsification: " << results.size() << " points.\n"; diff --git a/src/Subsampling/include/gudhi/sparsify_point_set.h b/src/Subsampling/include/gudhi/sparsify_point_set.h index 7ff11b4c..507f8c79 100644 --- a/src/Subsampling/include/gudhi/sparsify_point_set.h +++ b/src/Subsampling/include/gudhi/sparsify_point_set.h @@ -64,8 +64,6 @@ sparsify_point_set( typedef typename Gudhi::spatial_searching::Kd_tree_search< Kernel, Point_range> Points_ds; - typename Kernel::Squared_distance_d sqdist = k.squared_distance_d_object(); - #ifdef GUDHI_SUBSAMPLING_PROFILING Gudhi::Clock t; #endif diff --git a/src/common/include/gudhi/random_point_generators.h b/src/common/include/gudhi/random_point_generators.h index 3050b7ea..c643a1e3 100644 --- a/src/common/include/gudhi/random_point_generators.h +++ b/src/common/include/gudhi/random_point_generators.h @@ -338,8 +338,6 @@ std::vector generate_points_on_3sphere_and_circle(std: std::vector points; points.reserve(num_points); - typename Kernel::Translated_point_d k_transl = - k.translated_point_d_object(); typename Kernel::Compute_coordinate_d k_coord = k.compute_coordinate_d_object(); for (std::size_t i = 0; i < num_points;) { -- cgit v1.2.3 From de0bdf55c16de11d47809dc6f347773b10cc3673 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 16 Dec 2016 16:11:45 +0000 Subject: Warning fixes git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@1905 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 7b7222ebe65fd01fde30f8ba527ebaee633fc87e --- src/Contraction/example/Garland_heckbert.cpp | 12 ++--- src/GudhUI/utils/Critical_points.h | 2 - src/GudhUI/utils/Is_manifold.h | 1 - src/GudhUI/utils/Vertex_collapsor.h | 1 - .../include/gudhi/choose_n_farthest_points.h | 3 +- .../include/gudhi/pick_n_random_points.h | 4 +- .../test/test_choose_n_farthest_points.cpp | 55 ++++++++++++++++++++-- .../include/gudhi/Tangential_complex.h | 10 +--- .../test/test_tangential_complex.cpp | 2 - src/common/include/gudhi/random_point_generators.h | 7 ++- 10 files changed, 63 insertions(+), 34 deletions(-) (limited to 'src') diff --git a/src/Contraction/example/Garland_heckbert.cpp b/src/Contraction/example/Garland_heckbert.cpp index 5347830c..4689519f 100644 --- a/src/Contraction/example/Garland_heckbert.cpp +++ b/src/Contraction/example/Garland_heckbert.cpp @@ -63,12 +63,10 @@ typedef Skeleton_blocker_contractor Complex_contractor; * the point minimizing the cost of the quadric. */ class GH_placement : public Gudhi::contraction::Placement_policy { - Complex& complex_; - public: typedef Gudhi::contraction::Placement_policy::Placement_type Placement_type; - GH_placement(Complex& complex) : complex_(complex) { } + GH_placement(Complex& complex) { } Placement_type operator()(const EdgeProfile& profile) const override { auto sum_quad(profile.v0().quadric); @@ -87,12 +85,10 @@ class GH_placement : public Gudhi::contraction::Placement_policy { * which expresses a squared distances with triangles planes. */ class GH_cost : public Gudhi::contraction::Cost_policy { - Complex& complex_; - public: typedef Gudhi::contraction::Cost_policy::Cost_type Cost_type; - GH_cost(Complex& complex) : complex_(complex) { } + GH_cost(Complex& complex) { } Cost_type operator()(EdgeProfile const& profile, boost::optional const& new_point) const override { Cost_type res; @@ -111,10 +107,8 @@ class GH_cost : public Gudhi::contraction::Cost_policy { * and we update them when contracting an edge (the quadric become the sum of both quadrics). */ class GH_visitor : public Gudhi::contraction::Contraction_visitor { - Complex& complex_; - public: - GH_visitor(Complex& complex) : complex_(complex) { } + GH_visitor(Complex& complex) { } // Compute quadrics for every vertex v // The quadric of v consists in the sum of quadric diff --git a/src/GudhUI/utils/Critical_points.h b/src/GudhUI/utils/Critical_points.h index 3021a5fe..b88293e9 100644 --- a/src/GudhUI/utils/Critical_points.h +++ b/src/GudhUI/utils/Critical_points.h @@ -105,8 +105,6 @@ template class Critical_points { if (link.empty()) return 0; - Edge_contractor contractor(link, link.num_vertices() - 1); - if (link.num_connected_components() > 1) // one than more CC -> not contractible return 0; diff --git a/src/GudhUI/utils/Is_manifold.h b/src/GudhUI/utils/Is_manifold.h index 0640ea47..6dd7898e 100644 --- a/src/GudhUI/utils/Is_manifold.h +++ b/src/GudhUI/utils/Is_manifold.h @@ -76,7 +76,6 @@ template class Is_manifold { bool is_k_sphere(Vertex_handle v, int k) { auto link = input_complex_.link(v); - Edge_contractor contractor(link, link.num_vertices() - 1); return (is_sphere_simplex(link) == k); } diff --git a/src/GudhUI/utils/Vertex_collapsor.h b/src/GudhUI/utils/Vertex_collapsor.h index 2b36cb3a..3f0e7ffd 100644 --- a/src/GudhUI/utils/Vertex_collapsor.h +++ b/src/GudhUI/utils/Vertex_collapsor.h @@ -80,7 +80,6 @@ template class Vertex_collapsor { if (link.empty()) return false; if (link.is_cone()) return true; if (link.num_connected_components() > 1) return false; - Edge_contractor contractor(link, link.num_vertices() - 1); return (link.num_vertices() == 1); } }; diff --git a/src/Subsampling/include/gudhi/choose_n_farthest_points.h b/src/Subsampling/include/gudhi/choose_n_farthest_points.h index ea387bf9..5e908090 100644 --- a/src/Subsampling/include/gudhi/choose_n_farthest_points.h +++ b/src/Subsampling/include/gudhi/choose_n_farthest_points.h @@ -145,7 +145,8 @@ void choose_n_farthest_points(Kernel const& k, std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(0, (input_pts.size() - 1)); - int starting_point = dis(gen); + std::size_t starting_point = dis(gen); + choose_n_farthest_points(k, input_pts, final_size, starting_point, output_it); } diff --git a/src/Subsampling/include/gudhi/pick_n_random_points.h b/src/Subsampling/include/gudhi/pick_n_random_points.h index e89b2b2d..f0e3f1f1 100644 --- a/src/Subsampling/include/gudhi/pick_n_random_points.h +++ b/src/Subsampling/include/gudhi/pick_n_random_points.h @@ -57,7 +57,9 @@ void pick_n_random_points(Point_container const &points, #endif std::size_t nbP = boost::size(points); - assert(nbP >= final_size); + if (final_size > nbP) + final_size = nbP; + std::vector landmarks(nbP); std::iota(landmarks.begin(), landmarks.end(), 0); diff --git a/src/Subsampling/test/test_choose_n_farthest_points.cpp b/src/Subsampling/test/test_choose_n_farthest_points.cpp index d064899a..0bc0dff4 100644 --- a/src/Subsampling/test/test_choose_n_farthest_points.cpp +++ b/src/Subsampling/test/test_choose_n_farthest_points.cpp @@ -39,18 +39,65 @@ typedef CGAL::Epick_d K; typedef typename K::FT FT; typedef typename K::Point_d Point_d; -BOOST_AUTO_TEST_CASE(test_choose_farthest_point) { +typedef boost::mpl::list, CGAL::Epick_d>> list_of_tested_kernels; + +BOOST_AUTO_TEST_CASE_TEMPLATE(test_choose_farthest_point, Kernel, list_of_tested_kernels) { + typedef typename Kernel::FT FT; + typedef typename Kernel::Point_d Point_d; std::vector< Point_d > points, landmarks; // Add grid points (625 points) for (FT i = 0; i < 5; i += 1.0) for (FT j = 0; j < 5; j += 1.0) for (FT k = 0; k < 5; k += 1.0) - for (FT l = 0; l < 5; l += 1.0) - points.push_back(Point_d(std::vector({i, j, k, l}))); + for (FT l = 0; l < 5; l += 1.0) { + std::vector point({i, j, k, l}); + points.push_back(Point_d(point.begin(), point.end())); + } landmarks.clear(); - K k; + Kernel k; Gudhi::subsampling::choose_n_farthest_points(k, points, 100, std::back_inserter(landmarks)); BOOST_CHECK(landmarks.size() == 100); + for (auto landmark : landmarks) + { + // Check all landmarks are in points + BOOST_CHECK(std::find (points.begin(), points.end(), landmark) != points.end()); + } +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(test_choose_farthest_point_limits, Kernel, list_of_tested_kernels) { + typedef typename Kernel::FT FT; + typedef typename Kernel::Point_d Point_d; + std::vector< Point_d > points, landmarks; + landmarks.clear(); + Kernel k; + // Choose -1 farthest points in an empty point cloud + Gudhi::subsampling::choose_n_farthest_points(k, points, -1, std::back_inserter(landmarks)); + BOOST_CHECK(landmarks.size() == 0); + landmarks.clear(); + // Choose 0 farthest points in an empty point cloud + Gudhi::subsampling::choose_n_farthest_points(k, points, 0, std::back_inserter(landmarks)); + BOOST_CHECK(landmarks.size() == 0); + landmarks.clear(); + // Choose 1 farthest points in an empty point cloud + Gudhi::subsampling::choose_n_farthest_points(k, points, 1, std::back_inserter(landmarks)); + BOOST_CHECK(landmarks.size() == 0); + landmarks.clear(); + + std::vector point({0.0, 0.0, 0.0, 0.0}); + points.push_back(Point_d(point.begin(), point.end())); + // Choose -1 farthest points in an empty point cloud + Gudhi::subsampling::choose_n_farthest_points(k, points, -1, std::back_inserter(landmarks)); + BOOST_CHECK(landmarks.size() == 1); + landmarks.clear(); + // Choose 0 farthest points in a one point cloud + Gudhi::subsampling::choose_n_farthest_points(k, points, 0, std::back_inserter(landmarks)); + BOOST_CHECK(landmarks.size() == 0); + landmarks.clear(); + // Choose 1 farthest points in a one point cloud + Gudhi::subsampling::choose_n_farthest_points(k, points, 1, std::back_inserter(landmarks)); + BOOST_CHECK(landmarks.size() == 1); + landmarks.clear(); + } diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index 65de2743..cfc82eb1 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -1314,14 +1314,6 @@ class Tangential_complex { m_k.construct_vector_d_object(); typename K::Compute_coordinate_d coord = m_k.compute_coordinate_d_object(); - typename K::Squared_length_d sqlen = - m_k.squared_length_d_object(); - typename K::Scaled_vector_d scaled_vec = - m_k.scaled_vector_d_object(); - typename K::Scalar_product_d scalar_pdct = - m_k.scalar_product_d_object(); - typename K::Difference_of_vectors_d diff_vec = - m_k.difference_of_vectors_d_object(); #ifdef GUDHI_TC_USE_ANOTHER_POINT_SET_FOR_TANGENT_SPACE_ESTIM KNS_range kns_range = m_points_ds_for_tse.query_k_nearest_neighbors( @@ -2159,7 +2151,7 @@ class Tangential_complex { typedef std::vector Triangles; Triangles triangles; - std::size_t num_vertices = c.size(); + int num_vertices = static_cast(c.size()); // Do not export smaller dimension simplices if (num_vertices < m_intrinsic_dim + 1) continue; diff --git a/src/Tangential_complex/test/test_tangential_complex.cpp b/src/Tangential_complex/test/test_tangential_complex.cpp index ebe5cdb4..48156440 100644 --- a/src/Tangential_complex/test/test_tangential_complex.cpp +++ b/src/Tangential_complex/test/test_tangential_complex.cpp @@ -71,9 +71,7 @@ BOOST_AUTO_TEST_CASE(test_Spatial_tree_data_structure) { BOOST_AUTO_TEST_CASE(test_mini_tangential) { typedef CGAL::Epick_d Kernel; - typedef Kernel::FT FT; typedef Kernel::Point_d Point; - typedef Kernel::Vector_d Vector; typedef tc::Tangential_complex TC; diff --git a/src/common/include/gudhi/random_point_generators.h b/src/common/include/gudhi/random_point_generators.h index c643a1e3..2ec465ef 100644 --- a/src/common/include/gudhi/random_point_generators.h +++ b/src/common/include/gudhi/random_point_generators.h @@ -192,10 +192,9 @@ static void generate_uniform_points_on_torus_d(const Kernel &k, int dim, std::si double radius_noise_percentage = 0., std::vector current_point = std::vector()) { CGAL::Random rng; - if (current_point.size() == 2 * dim) { - *out++ = k.construct_point_d_object()( - static_cast (current_point.size()), - current_point.begin(), current_point.end()); + int point_size = static_cast(current_point.size()); + if (point_size == 2 * dim) { + *out++ = k.construct_point_d_object()(point_size, current_point.begin(), current_point.end()); } else { for (std::size_t slice_idx = 0; slice_idx < num_slices; ++slice_idx) { double radius_noise_ratio = 1.; -- cgit v1.2.3