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.
0.9¶
Added¶
Monorepo:
- Added Python, R, WASM, Node.js, C++, and Julia bindings.
loess-rs and fastLoess:
- Added the option to pass custom weights by the user to the algorithm.
Changed¶
Monorepo:
- Implement monorepo structure.
- Converted all documentation tables to compact single-space format.
- Updated
.clang-tidyto configurelower_caseas the required naming convention for functions and member functions, matching the new snake_case public API. - Moved
BENCHMARKS.md,CHANGELOG.md, andCONTRIBUTING.mdfrom the repository root intodocs/and added them to the documentation site navigation.
loess-rs and fastLoess:
- Added
Loess<T>,StreamingLoess<T>, andOnlineLoess<T>type aliases as the primary user-facing constructors (e.g.StreamingLoess::new().chunk_size(50).build()). Mode-specific builder methods (chunk_size,overlap,window_capacity,min_points,update_mode) are now called directly on the type alias rather than after.adapter(). - Made
BatchLoessBuilder,StreamingLoessBuilder, andOnlineLoessBuilderinternal-only: all public setter methods have been removed from these types. All smoothing configuration now flows throughLoessBuilder<T, Mode>(exposed via the type aliases above). This is a breaking change for any code that called setter methods on an adapter builder directly. - Changed all enum-typed builder methods to accept strings instead:
weight_function,robustness_method,scaling_method,boundary_policy,zero_weight_fallback,merge_strategy, andupdate_modenow takeimpl IntoEnum<T>(accepting both enum variants and strings such as.weight_function("tricube")) rather than requiring enum variants to be imported. This is a breaking change for any code passing enum variants directly. - Added a
parsemodule to bothloessandfastLoessdefining theIntoEnum<E>trait and its macro-generated impls for all enum-typed builder parameters. This allows builder methods to accept either a typed enum value (e.g..weight_function(WeightFunction::Tricube)) or a string (e.g..weight_function("tricube")) interchangeably. - Replaced the
cross_validate(CVConfig)builder method (which required importingKFoldorLOOCVtypes) with a string-based cross-validation API:.cv_method("kfold")/.cv_method("loocv"),.cv_k(n),.cv_fractions(vec![...]), and.cv_seed(n).KFoldandLOOCVare no longer exported from the prelude. This is a breaking change for any code using the oldcross_validateAPI. - Removed
smooth(),smooth_streaming(), andsmooth_online()convenience function stubs from_core.pyi.
0.2.2¶
Fixed¶
loess-rs:
- Updated license badge.
- Fixed LOESS mechanism figure path.
0.2.1¶
Added¶
loess-rs:
- Added visual validation to the bench branch.
Changed¶
loess-rs:
- Reduced figures size significantly.
- Implement naming consistency for
auto_converge(removedauto_convergence).
Fixed¶
loess-rs:
- Fixed
boundary_degree_fallbackpass to online and streaming adapters. - Fixed
boundary_degree_fallbackpass tocustom_vertex_passandVertexPassFn. - Fixed KFold CV bug through adding explicit sorting of training subsets and using robust binary-search interpolation for each test point.
- Fixed
auto_convergesupport for Online adapter.
0.2.0¶
Added¶
loess-rs:
- Added
VertexPassFnandcustom_vertex_passsupport to enable parallelized/accelerated interpolation fitting. - Added support for custom vertex pass callbacks to all adapters (
Batch,Streaming,Online). - Added support for custom parallel/accelerated standard error calculation via
custom_interval_pass. - Added
KDTreeBuilderFnandcustom_kdtree_builderhook to enable external parallel KD-tree construction. - Added
KDTree::from_partsand exposedKDNodeandKDTree::calculate_left_subtree_sizeto support custom tree building. - Added neighborhood caching in
InterpolationSurfaceto significantly optimize performance during robustness iterations. - Added configurable
boundary_degree_fallbackoption to control polynomial degree reduction at boundary vertices during interpolation. Defaults totruefor stability; set tofalseto match R'sloessbehavior exactly.
Changed¶
loess-rs:
- Changed license from AGPL-3.0-or-later to dual MIT OR Apache-2.0.
- Expanded
SmoothPassFn,CVPassFn, andIntervalPassFnsignatures to include full multi-dimensional context (dimensions, scaling, polynomial degree, etc.). - Improved data propagation in
InterpolationSurfaceto ensure all necessary coordinate and value slices are available to custom pass implementations. - Updated
LoessExecutorto correctly handle augmented data when switching between direct and interpolation modes. - Updated
InterpolationSurface::buildto accept and propagatepolynomial_degree,weight_function,zero_weight_fallback,distance_metric, andscalesforcustom_vertex_pass. Also, updatedLoessExecutorto pass these configured values correctly. - Improved documentation.
Fixed¶
loess-rs:
- Fixed a potential crash in parallel interpolation refinement by correctly propagating augmented data slices to vertex fitting functions.
- Fixed inconsistent parameter types in custom pass callbacks.
- Fixed missing setters for online and streaming adapters.
- Fixed incorrect standard error propagation in
BatchLoessBuilder. - Added
Boundary Linear Fallbackstrategy toInterpolationSurfaceto prevent numerical instability ("explosions") at data boundaries when using high-degree polynomials (Quadratic, Cubic, Quartic). - Fixed missing
max_distanceupdate in the KD-Tree search, which incorrectly calculated the bandwidth for tricube weights. - Fixed cumulative cross-contamination in regression buffers, which were not being zeroed between query points.
- Delegated 2D Cubic and 3D Quadratic from context to specialized accumulators.
- Fixed horizontal phase shift in
Interpolationmode when using boundary policies (Extend,Reflect,Zero). The robustness iteration loop was incorrectly using augmented data indices instead of original data for query point evaluation.
0.1.0¶
Added¶
loess-rs:
- Initial release.
fastLoess:
- Initial release with parallel execution support.
fastloess (Python):
- Added the python binding for
fastLoess.