Changelog#
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[unreleased] - 20XX-XX-XX#
Added#
Changed#
Fixed#
[0.4.1] - 2026-02-22#
Fixed#
- Include
AUTHORS.mdin the sdist by adding it to theCargo.tomlincludelist. - Fix
mkdocstringsconfiguration by renamingimporttoinventoriesfor compatibility withmkdocstrings-python2.0. - Fix
mkdocstringsdirective indocs/reference.md.
[0.4.0] - 2026-02-21#
This release adds Python 3.14 support and brings significant improvements to both the
Rust core and the Python API. Key highlights include a corrected second derivative
formula, proper handling of mixed LineString/LinearRing inputs, and better error
handling by returning Result instead of panicking. On the Rust side, two crate
dependencies (lazy_static and num_cpus) have been removed in favor of standard
library alternatives, and all major dependencies have been bumped. The Python API gains
__repr__ and __slots__ on CatmullRom, along with cleaner data passing to Rust by
using plain lists instead of numpy array intermediaries.
Added#
- Python 3.14 support.
__repr__method onCatmullRomclass for better debugging output.__slots__onCatmullRomclass for reduced memory usage and prevention of dynamic attribute creation.- Length validation in
linestrings_tangent_anglesto raise an error whengaussian_sigmaslength does not match the number of input lines. gridproperty in_catsmoothing.pyitype stubs.
Fixed#
- Fixed second derivative formula in spline evaluation (was constant
6.0instead of correct6.0 * t). - In
smooth_linestrings, if the input was a mix ofLineStringandLinearRingthe output was either aLineStringor aLinearRingdepending on the type of the first input. Now, the output correctly is a mix ofLineStringandLinearRingdepending on the type of each element in the input. - Fixed
_catsmoothing.pyitype stubs to match the actual Rust API signatures. - Removed outdated
scipyrequirement mention fromsmooth_polygondocstring.
Changed#
evaluate()anduniform_distances()now returnResultinstead of panicking on invalid input, propagating errors to Python asValueError.- Replaced
lazy_staticwithstd::sync::LazyLockandnum_cpuswithstd::thread::available_parallelism(), removing two crate dependencies. - Enforce valid polygon generation in
smooth_polygonusingshapely.make_validfunction. Vec2Dnow derivesCopyfor reduced heap allocations.- Improved spline evaluation by using
partition_pointfor binary search and ordered tangent construction instead ofinsert(0, ...). - Pass
bc_typesas a plainlist[str]to Rust instead of converting through anumpystring array. - Pass
gaussian_sigmasas a plainlistinlinestrings_tangent_anglesinstead of converting through anumpyarray. - Bumped Rust dependencies:
ndarray0.16 to 0.17,pyo30.24 to 0.28,numpy(crate) to 0.28,randto 0.10,rand_distrto 0.6.
[0.3.1] - 2025-04-16#
Fixed#
- Fix the threading issue when initializing Rayon.
[0.3.0] - 2025-04-16#
Changed#
- Refactor the Rust code base to use
ndarrayinstead ofnalgebrafor matrix operations since the Python API usesnumpy. This change improves the performance of the code as it avoids unnecessary conversions betweennalgebraandnumpyarrays. - Added specialized
Vec2Dstructure to replace genericArray1<f64>for 2D vectors - Improved memory management with preallocation and reduced temporary allocations
- Optimized mathematical operations with direct 2D vector calculations
- Added
lazy_staticHermitian matrix to avoid recreation - Eliminated redundant vector storage and minimized cloning
- Improved Gaussian smoothing for better cache utilization
- Fixed thread safety issues for proper parallel execution
[0.2.2] - 2024-12-06#
Changed#
- Improved the code performance by creating a global thread pool that is shared across all functions that run in parallel. This avoids creating a new thread pool for each function call, which was causing a performance overhead.
- Improved the performance of the
gaussian_smoothingfunction by using a more efficient algorithm to compute the convolution of the input data with a Gaussian kernel.
[0.2.1] - 2024-12-02#
Fixed#
- Fix the
smooth_linestringsfunction to correctly handle returning multipleLineStringgeometries when a list ofLineStringgeometries is passed as input.
[0.2.0] - 2024-12-01#
This is a major release with breaking changes. The codebase has been written from scratch in Rust and the Python bindings have been updated to reflect the changes in the underlying implementation.
Changed#
- The
bc_typesargument ofCatmullRomclass has been renamed tobc_typeand custom boundary conditions have been removed. The available boundary conditions are'natural','closed', and'clamped'. - The
smooth_linstringfunction has been renamed tosmooth_linestrings. This function now handles a list ofLineStringgeometries instead of a single geometry. The code runs in parallel in Rust and is significantly faster than the previous implementation. If a singleLineStringgeometry is passed a singleLineStringgeometry is returned, otherwise a list ofLineStringgeometries is returned. - The
compute_tangentshas been renamed tolinestrings_tangent_angles. This function now handles a list ofLineStringgeometries and returns the tangent angles at each vertex of the input geometries. The code runs in parallel in Rust and is significantly faster than the previous. If a singleLineStringgeometry is passed a single array of tangent angles is returned, otherwise a list of arrays is returned.
[0.1.1] - 2024-09-25#
Added#
- Add a new boundary condition for the
CatmullRomclass called'clamped', which allows anchoring the first and last points of the curve to the first and last control points. This is particularly useful for smoothingMultiLineStringgeometries where the first and last points of each line segment must remain connected to the previous and next line segment.
Changed#
- Freeze attributes of
CatmullRomsince they are not supposed to be changed, once the class is instantiated. If needed, a new instance should be created.
[0.1.0] - 2024-08-31#
- Initial release.