2026.2.0
This release represents a major architectural rewrite of pyinterp with significant
breaking changes. Please refer to the :doc:migration guide for detailed upgrade
instructions.
Architecture & Framework
- Binding Framework Migration: Migrated from pybind11 to nanobind for Python
bindings, providing improved performance and reduced binary size. - C++ Directory Restructuring: Reorganized C++ source code with new directory
structure (cxx/src/pybind/for bindings,cxx/src/library/for core
implementations). - Namespace Reorganization: Refactored C++ namespaces from
pyinterp::detail::*
to organized modules:pyinterp::math::,pyinterp::geometry::,
pyinterp::config::, andpyinterp::pybind::. - Modern C++ Features: Adopted C++20/C++23 features including concepts,
constexpr,std::format,std::ranges, three-way comparison operator
(<=>), and[[nodiscard]]attributes.
New Configuration System
- Type-Safe Configuration Objects: Introduced a new
configmodule with
builder-pattern configuration objects replacing keyword arguments. - Configuration Submodules: Added
config.fill,config.geometric,
config.rtree, andconfig.windowedfor domain-specific configurations. - Fluent API: Configuration objects support method chaining with
.with_max_iterations(),.with_epsilon(),.with_num_threads(), etc.
Geometry Module
- Module Restructuring: Replaced the
geodeticmodule with a unified
geometrymodule supporting multiple coordinate systems. - Geographic Coordinates: The
geometry.geographicsubmodule replaces the
formergeodeticmodule with all geodetic operations. - Cartesian Coordinates: Added new
geometry.cartesiansubmodule for
Cartesian coordinate system operations. - Satellite Operations: Added new
geometry.satellitesubmodule with
satellite-specific algorithms (rotation, swath transforms). - Algorithm Submodules: Geometric algorithms are now organized in
algorithmssubmodules for each coordinate system (40+ algorithms available).
Math & Interpolation
- Math Module Reorganization: New
mathnamespace with organized submodules
for interpolation, statistics, FFT, and DCT operations. - Interpolation Architecture: Redesigned interpolation system with clear
separation into univariate, bivariate, and geometric interpolation. - Interpolation Caching: Added caching layer for improved interpolation
performance. - Window Functions: Added window function support for localized interpolation.
New Features
- T-Digest: Added
TDigestclass for streaming quantile estimation with
typed variants (TDigestFloat32,TDigestFloat64). - Dask Integration: Added
daskmodule with distributed computation support
forbinning1d(),binning2d(),descriptive_statistics(),
histogram2d(), andtdigest(). - Regular Grid Interpolator: New
regular_grid_interpolatormodule with
string-based method selection ("bilinear","bicubic","nearest",
"akima", etc.) and configuration object support. - Typed Class Variants: Added Float32/Float64 typed variants for
Binning1D,
Binning2D,Histogram2D,RTree3D, andTDigest. - Enhanced Pickle Support: Added proper pickle serialization for
Grid
objects viaGridHolder. - Parallel Processing: Added parallel-for utilities for multi-threaded
operations.
Xarray Backend
- Simplified API: The
backends.xarraymodule has been significantly
simplified with automatic detection of geodetic and temporal axes using CF
conventions. - Automatic Axis Detection: Longitude/latitude axes are automatically detected
from CF-compliantunitsattributes; temporal axes are detected from
datetime64dtypes. - Removed Parameters: The
increasing_axesandgeodeticparameters have
been removed fromRegularGridInterpolator; axis detection is now automatic. - Unified Method Parameter: The
bicubic()method is removed; use the
method="bicubic"parameter in the interpolation call instead. - Simplified Keyword Arguments: The
bicubic_kwargsparameter is removed;
bicubic options are now passed directly as keyword arguments.
Breaking Changes - Removed Modules
The following Python modules have been removed and their functionality relocated:
pyinterp.geodetic→ Usepyinterp.geometry.geographicpyinterp.statistics→ Usepyinterp.DescriptiveStatisticspyinterp.interpolator→ Usepyinterp.regular_grid_interpolatorpyinterp.grid→ Usepyinterp.Grid(with aliasesGrid2D,Grid3D,
Grid4D)pyinterp.histogram2d→ Usepyinterp.Histogram2Dpyinterp.period→ Usepyinterp.period(re-exported from core)pyinterp.binning→ Usepyinterp.Binning1D,pyinterp.Binning2Dpyinterp.interface→ Removed
Breaking Changes - Removed Classes & Functions
AxisInt64→ UseTemporalAxisfor datetime axesRadialBasisFunctionenum → Useconfig.rtree.RBFKernelWindowFunctionenum → Useconfig.rtree.WindowKernelGeoHash(top-level) → Usepyinterp.geohash.GeoHash- Orbit classes (
EquatorCoordinates,Orbit,Pass,Swath) → Removed - Orbit functions (
calculate_orbit,calculate_pass,calculate_swath) →
Removed bicubic()function → Useregular_grid_interpolator.bivariate()interpolate1d()function → Useregular_grid_interpolator.univariate()__version__,__date__attributes → Removed
Breaking Changes - API Changes
- orbit.interpolate(): Parameter
wgsrenamed tocoordinates, default
half_window_sizechanged from 10 to 3. - Axis class: Parameter
is_circlereplaced withperiod, property
is_circlerenamed tois_periodic. - Enum Values: All enum values now use UPPERCASE (e.g.,
FirstGuess.ZERO,
RBFKernel.GAUSSIAN). - Fill Functions: Now use configuration objects instead of keyword arguments.
- RTree Methods: Now use configuration objects instead of keyword arguments.
Build System & Tooling
- Platform-Specific Conda Files: Added separate conda environment files for
each platform (conda/linux.yml,conda/win.yml,conda/osx.yml). - Updated CI Workflows: Enhanced GitHub Actions workflows for testing and
coverage. - Test Suite Reorganization: Tests reorganized into categorical subdirectories
(tests/config/,tests/geometry/,tests/math/, etc.).