Tags: jlogan03/interpn
Tags
Eliminate recursion (#62) ## 0.11.0 2026-01-15 ### Changed * !Remove recursive implementations * All dimensionalities now use const-generic bounded implementations * For dimensions higher than const-unrolling limit, a run-time loop of the same form is used * No notable change in performance for high dimensions * No change to API for `::interpn` convenience functions * All methods are now compatible with static analysis of memory usage via cargo-call-stack * Refactor internals to reduce duplication * Improve form of early bounds checks to be interpreted correctly by the compiler * 30% speedup in some cases, no effect on most * Bounds checks done via iterator do not always result in optimizing out panic branches * Test cubic methods in higher dimensions
Implement thread parallelism (#61) ## 0.10.0 2026-01-10 ### Added * Rust * Add top-level `interpn`, `interpn_alloc` and `interpn_serial` methods along with supporting enums for selecting methods * Add `par` feature, enabled by default, that enables parallelism with rayon in `interpn` function * Add lazy static for getting number of physical cores to advise thread chunk sizes ### Changed * Rust * Update deps * Python * !Refactor `interpn` function * Combine `check_bounds: bool` and `bounds_check_atol: float` to `check_bounds_with_atol: float | None` * Replace `assume_regular` input with optional `grid_kind` to allow assuming either regular or rectilinear, or making no assumption * Add `max_threads: int | None` input to allow manually limiting parallelism * Use rust top-level `interpn` function as backend for method selection, bounds checks, and parallelism
Improve compile time (#59) ## 0.9.1 2025-12-31 ### Changed * Rust * Remove explicit const-unrolling for shallow loops (eliminates nested const-unrolling) * Improves compile time * Minimal effect on performance in Rust benchmarks * About 20% improvement for single-sample throughput from Python * Python * Lock python package version to rust version * Improve handling of `__version__` when package is not present
Improve compile time (#58) ## 0.9.0 2025-12-27 ### Added * Rust * Add `deep-unroll` feature that sets crunchy unroll depth to 256 and enables 4D unrolled cubic interpolation * This improves compile times in typical use-cases ### Changed * Rust * Gate 4D unrolled cubic interpolation behind `deep-unroll` feature * Enable `deep-unroll` feature for Python builds * Update pyo3 deps
Implement PGO for MacOS and Windows (#51) ## 0.8.1 2025-11-10 ### Added * Python * Implement PGO for mac intel/aarch64, linux aarch64, and windows x64 * Add script for installing llvm on linux and mac to support PGO ### Changed * Python * Remove stored pgo profiles * Update PGO scripts
Implement `interpn` convenience function (#47) ## 0.7.0 2025-10-25 Implement `interpn` convenience function that defers directly to `raw` functions without serializable wrapper classes. This enables use without pydantic for dep-constrained environments. Contributions * [Clément Robert](https://github.com/neutrinoceros) * #40 * #41 * #42 * #44 * #45 * #46 ### Added * Python * Add type stubs for `raw` module * Add `interpn` function that defers directly to `raw` functions without serializable wrapper classes ### Changed * Python * !Move pydantic dep to `serde` optional group * !Move optional dev dep groups to dependency groups (no longer installable via `.[dep]` syntax) * !Import serializable wrapper classes into top level module only if pydantic is found * !Drop support for python 3.9, which is leaving long-term support soon * Update PGO profile data * Rust * Use abi3-py310 for python bindings
Use FMA (#29) ## 0.6.2 2025-10-20 Add optional use of fused multiply-add, enabled for python distributions. This substantially improves floating-point roundoff; cubic method now shows O(1e-14) peak roundoff error even under extrapolation of a quadratic function, and 0-4 epsilon roundoff inside interpolating region. Overall effect on throughput performance is neutral. ### Added * Rust * Add `fma` feature ### Changed * Rust * Use Horner's method for evaluating normalized cubic hermite spline * If `fma` feature is enabled, use FMA in cubic and linear methods where possible * Python * Enable `fma` feature for python distribution * Update pgo profile data and benchmark plots
PreviousNext