diff options
Diffstat (limited to 'src/python/gudhi/bottleneck.cc')
-rw-r--r-- | src/python/gudhi/bottleneck.cc | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/python/gudhi/bottleneck.cc b/src/python/gudhi/bottleneck.cc index 8a3d669a..040e6d37 100644 --- a/src/python/gudhi/bottleneck.cc +++ b/src/python/gudhi/bottleneck.cc @@ -9,18 +9,20 @@ */ #include <gudhi/Bottleneck.h> - +#include <optional> #include <pybind11_diagram_utils.h> +#include <pybind11/stl.h> + +// Indices are added internally in bottleneck_distance, they are not needed in the input. +static auto make_point(double x, double y, py::ssize_t) { return std::pair(x, y); }; // For compatibility with older versions, we want to support e=None. -// In C++17, the recommended way is std::optional<double>. -double bottleneck(Dgm d1, Dgm d2, py::object epsilon) +double bottleneck(Dgm d1, Dgm d2, std::optional<double> epsilon) { - double e = (std::numeric_limits<double>::min)(); - if (!epsilon.is_none()) e = epsilon.cast<double>(); - // I *think* the call to request() has to be before releasing the GIL. - auto diag1 = numpy_to_range_of_pairs(d1); - auto diag2 = numpy_to_range_of_pairs(d2); + double e = epsilon.value_or((std::numeric_limits<double>::min)()); + // I *think* the call to request() in numpy_to_range_of_pairs has to be before releasing the GIL. + auto diag1 = numpy_to_range_of_pairs(d1, make_point); + auto diag2 = numpy_to_range_of_pairs(d2, make_point); py::gil_scoped_release release; |