From fcfc9de5eb7e309c0ac309f57e26672c31bbc836 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Thu, 1 Dec 2016 17:58:07 +0000 Subject: Add Subsampling cpp interface and cython Remove deref cyton import git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/ST_cythonize@1809 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 2dc0469d2401e0c99e879c064a0f608c8ba78ed6 --- src/cython/CMakeLists.txt | 10 ++++- src/cython/cython/alpha_complex.pyx | 1 - src/cython/cython/subsampling.pyx | 37 +++++++++++++++++++ src/cython/cython/tangential_complex.pyx | 1 - src/cython/gudhi.pyx.in | 1 + src/cython/include/Subsampling_interface.h | 59 ++++++++++++++++++++++++++++++ 6 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 src/cython/cython/subsampling.pyx create mode 100644 src/cython/include/Subsampling_interface.h (limited to 'src/cython') diff --git a/src/cython/CMakeLists.txt b/src/cython/CMakeLists.txt index 2746cab9..c2026682 100644 --- a/src/cython/CMakeLists.txt +++ b/src/cython/CMakeLists.txt @@ -49,8 +49,16 @@ if(PYTHON_PATH AND CYTHON_PATH) file(COPY test DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) if (CGAL_FOUND) + if (NOT CGAL_VERSION VERSION_LESS 4.8.1) + # If CGAL_VERSION >= 4.8.1, include subsampling + # CGAL things are done in CGAL_VERSION >= 4.8.0 + set(GUDHI_CYTHON_SUBSAMPLING "include 'cython/subsampling.pyx'") + else (NOT CGAL_VERSION VERSION_LESS 4.8.1) + # Remove alpha complex unitary tests + file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/test/test_subsampling.py) + endif (NOT CGAL_VERSION VERSION_LESS 4.8.1) if (NOT CGAL_VERSION VERSION_LESS 4.8.0) - # If CGAL_VERSION >= 4.8.0, include alpha complex + # If CGAL_VERSION >= 4.8.0, include alpha and tangential complex set(GUDHI_CYTHON_LIBRARIES "${GUDHI_CYTHON_LIBRARIES}'CGAL', ") set(GUDHI_CYTHON_LIBRARY_DIRS "${GUDHI_CYTHON_LIBRARY_DIRS}'${CGAL_LIBRARIES_DIR}', ") # GMP and GMPXX are not required, but if present, CGAL will link with them. diff --git a/src/cython/cython/alpha_complex.pyx b/src/cython/cython/alpha_complex.pyx index 93f9b87e..56cf925c 100644 --- a/src/cython/cython/alpha_complex.pyx +++ b/src/cython/cython/alpha_complex.pyx @@ -3,7 +3,6 @@ from libcpp.vector cimport vector from libcpp.utility cimport pair from libcpp.string cimport string from libcpp cimport bool -from cython.operator cimport dereference as deref import os """This file is part of the Gudhi Library. The Gudhi library diff --git a/src/cython/cython/subsampling.pyx b/src/cython/cython/subsampling.pyx new file mode 100644 index 00000000..e59e0c6a --- /dev/null +++ b/src/cython/cython/subsampling.pyx @@ -0,0 +1,37 @@ +from cython cimport numeric +from libcpp.vector cimport vector +from libcpp.string cimport string +from libcpp cimport bool +import os + +"""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): Vincent Rouvreau + + Copyright (C) 2016 INRIA + + 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 . +""" + +__author__ = "Vincent Rouvreau" +__copyright__ = "Copyright (C) 2016 INRIA" +__license__ = "GPL v3" + +cdef extern from "Subsampling_interface.h" namespace "Gudhi::subsampling": + vector[vector[double]] subsampling_n_farthest_points(vector[vector[double]] points, unsigned nb_points) + +def choose_n_farthest_points(points, nb_points): + subsampling_n_farthest_points(points, nb_points) diff --git a/src/cython/cython/tangential_complex.pyx b/src/cython/cython/tangential_complex.pyx index 5a7ebd1a..c0260577 100644 --- a/src/cython/cython/tangential_complex.pyx +++ b/src/cython/cython/tangential_complex.pyx @@ -3,7 +3,6 @@ from libcpp.vector cimport vector from libcpp.utility cimport pair from libcpp.string cimport string from libcpp cimport bool -from cython.operator cimport dereference as deref import os """This file is part of the Gudhi Library. The Gudhi library diff --git a/src/cython/gudhi.pyx.in b/src/cython/gudhi.pyx.in index 09d765b6..60f4c30b 100644 --- a/src/cython/gudhi.pyx.in +++ b/src/cython/gudhi.pyx.in @@ -32,4 +32,5 @@ include "cython/periodic_cubical_complex.pyx" include "cython/persistence_graphical_tools.py" include "cython/witness_complex.pyx" @GUDHI_CYTHON_ALPHA_COMPLEX@ +@GUDHI_CYTHON_SUBSAMPLING@ @GUDHI_CYTHON_TANGENTIAL_COMPLEX@ diff --git a/src/cython/include/Subsampling_interface.h b/src/cython/include/Subsampling_interface.h new file mode 100644 index 00000000..bd37a015 --- /dev/null +++ b/src/cython/include/Subsampling_interface.h @@ -0,0 +1,59 @@ +/* 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): Vincent Rouvreau + * + * Copyright (C) 2016 INRIA + * + * 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 SUBSAMPLING_INTERFACE_H +#define SUBSAMPLING_INTERFACE_H + +#include +#include +#include + +#include +#include + +namespace Gudhi { + +namespace subsampling { + +using Subsampling_dynamic_kernel = CGAL::Epick_d< CGAL::Dynamic_dimension_tag >; +using Subsampling_point_d = Subsampling_dynamic_kernel::Point_d; +using Subsampling_ft = Subsampling_dynamic_kernel::FT; + +std::vector> subsampling_n_farthest_points(std::vector>& points, unsigned nb_points) { + std::vector input, output; + for (auto point : points) + input.push_back(Subsampling_point_d(point.size(), point.begin(), point.end())); + std::vector> landmarks; + Subsampling_dynamic_kernel k; + choose_n_farthest_points(k, points, nb_points, std::back_inserter(landmarks)); + std::cout << "output " << landmarks.size() << std::endl; + + + return landmarks; +} + +} // namespace subsampling + +} // namespace Gudhi + +#endif // SUBSAMPLING_INTERFACE_H + -- cgit v1.2.3