From e46c69e728e01acf6701bc4d30ddfc773882eb3b Mon Sep 17 00:00:00 2001 From: hschreiber Date: Wed, 21 Jan 2026 17:56:20 +0100 Subject: [PATCH] fix --- multipers/io.pyx | 2 +- .../approximation.h | 28 +++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/multipers/io.pyx b/multipers/io.pyx index 97c0d60..0d9193d 100644 --- a/multipers/io.pyx +++ b/multipers/io.pyx @@ -309,7 +309,7 @@ def _multi_critical_from_slicer( str algo:Literal["path","tree"]="path", degree:Optional[int]=None, bool clear = True, - swedish:Optional[bool] = None, + swedish = None, bool verbose = False, bool kcritical=False, **slicer_kwargs, diff --git a/multipers/multiparameter_module_approximation/approximation.h b/multipers/multiparameter_module_approximation/approximation.h index 91d3cc9..4364284 100644 --- a/multipers/multiparameter_module_approximation/approximation.h +++ b/multipers/multiparameter_module_approximation/approximation.h @@ -20,6 +20,7 @@ #define APPROXIMATION_H_INCLUDED #include +#include #include #include #include @@ -403,33 +404,36 @@ class Summand { Summand grid_squeeze(const std::vector> &grid) const; void evaluate_in_grid(const std::vector> &grid) { + using T = typename filtration_type::value_type; if (birth_corners_.num_generators() == 0) return; - auto num_parameters = birth_corners_.num_parameters(); - auto snap = [](value_type x) { - value_type a = std::floor(x); - value_type b = std::ceil(x); - size_t out; + auto snap = [](T x) { + T a = std::floor(x); + T b = std::ceil(x); + std::size_t out; if (x - a < b - x) - out = static_cast(a); + out = static_cast(a); else - out = static_cast(b); + out = static_cast(b); return out; }; auto todo = [&](auto &corners) { - return [&](size_t g) { + return [&](std::size_t g) { // auto &x = corners[i]; // for (auto g = 0u; g < x.num_generators(); ++g) { for (auto p = 0u; p < corners.num_parameters(); ++p) { - value_type snapped = snap(corners(g, p)); - corners(g, p) = (snapped >= grid[p].size() ? filtration_type::inf(num_parameters)(0,p) : grid[p][snapped]); + assert(corners(g, p) >= 0); + if (corners(g, p) != filtration_type::T_inf) { + std::size_t snapped = snap(corners(g, p)); + corners(g, p) = (snapped >= grid[p].size() ? filtration_type::T_inf : grid[p][snapped]); + } } // } }; }; - tbb::parallel_for(size_t(0), birth_corners_.size(), todo(birth_corners_)); + tbb::parallel_for(std::size_t(0), birth_corners_.size(), todo(birth_corners_)); if (death_corners_.num_generators() == 0) return; - tbb::parallel_for(size_t(0), death_corners_.size(), todo(death_corners_)); + tbb::parallel_for(std::size_t(0), death_corners_.size(), todo(death_corners_)); }; void snap_to_integers() {