News
Changelog
Section titled “Changelog”This changelog includes end-user changes only. For internal development notes, see the repository changelog.
[5.0.0]
Section titled “[5.0.0]”- Added grouped
outputsarrays and nestedcvoptions for batch, streaming, online, and prediction configuration. - Added a grouped
intervalsoption with residual-bootstrap intervals forLowess,StreamingLowess, full-updateOnlineLowess, andLowessResult.predict().
Changed
Section titled “Changed”- Clarified that Batch
residual_sdis1.4826 * MAD, while Streaming reports the cumulative sample standard deviation of emitted residuals. - Breaking change: replaced individual
return_*output booleans withoutputs: [...]for Batch, Streaming, Online, and prediction options. - Breaking change: replaced flat interval options and
predict()’s interval levels withintervals: { confidence, prediction, bootstrap }, and replaced flat CV options andcv.seedwithcv: { method, k, fractions }plus one outerseedshared by CV and bootstrap.predict()has its ownseed.
- Fixed CPU Gaussian standard errors for fitted and queried values to use the full unbounded kernel support.
- Made even-sample medians and mean-absolute residual scaling overflow-resistant for large finite values, and centered Batch/Streaming R-squared accumulation to preserve one-ULP response variation at large offsets.
- Made Batch RMSE, MAE, and R-squared reductions scale-safe for large finite values, preserved bisquare downweighting when tuned scales exceed the numeric range, and normalized custom weights before summation in local and all-tied fits.
- Kept AIC finite when raw residual-square sums overflow, and made local/all-tied WLS invariant to common scaling of large finite case weights.
- Fixed global OLS fits treating predictor values with a large offset as degenerate; translated inputs now retain their fitted slope.
- Fixed fraction-1 global fits ignoring custom weights, including when Batch sorts observations by x.
- Fixed Batch
missing = "drop"accepting custom weights with a length different from the original input; weights are validated before rows are dropped. - Fixed standard errors for global weighted fits to account for observation weights and weighted prediction leverage.
- Fixed local Batch and retained-model prediction standard errors ignoring
custom_weights; local SE moments now include the per-observation case weights. - Fixed global fits with all-zero custom weights to honor the configured zero-weight fallback policy.
- Fixed fraction-1 global fits ignoring configured robustness iterations; they now reweight observations and report iterations used.
- Fixed Batch cross-validation candidate fits ignoring
custom_weights; K-fold CV now rejects more folds than observations instead of returning zero scores. - Fixed Streaming and Online accepting invalid
auto_convergetolerances; Online also rejects invalid explicitdeltavalues while retaining NaN as its default sentinel. - Fixed Online incremental mode accepting positive
deltaandauto_convergesettings it cannot use; unsupported combinations now error. - Fixed grouped intervals discarding distinct confidence and prediction levels; each requested coverage is now applied independently.
- Fixed
OnlineLowessignoring theoutputsoption. - Reject unknown option keys and
outputsnames, return owned typed-array copies for results, and exposePredictOutput.free()in TypeScript. - Fixed the default
boundary_policy("extend") letting synthetic boundary points bias the shared robustness scale estimate used to reweight every point, compounding across robustness iterations. - Improved agreement with R/Cleveland on sparse, asymmetric, and high-iteration fits by aligning robustness stopping, local-linear degeneracy handling, neighborhood traversal, delta interpolation, and weighted accumulation.
- Fixed zero-radius neighborhoods dropping tied observations or accumulating normalized weights in a different order under robust fits.
- Fixed Gaussian fits clipping the unbounded kernel to the neighbor window and flooring far-tail weights; all observations now contribute under the standard Gaussian formula.
Changed
Section titled “Changed”-
Raised the minimum supported Rust version to 1.89 for source builds.
-
Added
retain_modelandLowessResult.predict(newX, options)for prediction. -
Added
return_derivativetoSmoothOptions,StreamingOptions, andOnlineOptions.
- Fixed reported vulnerabilities in WASM dependencies.
- Changed the
OnlineLowessdefaultiterationsfrom3to0, matching non-robust incremental updates; robustness iterations requireupdate_mode: "full".
- Added
return_sortedtoSmoothOptions. - Added
missingtoSmoothOptions,StreamingSmoothOptions, andOnlineSmoothOptionsto control non-finite input handling.
Changed
Section titled “Changed”- Breaking change: split
SmoothOptionsinto batchSmoothOptionsand separateStreamingOptionsandOnlineOptions; batch-only fields are no longer accepted by streaming or online APIs. - Breaking change:
StreamingOptions.overlapnow defaults dynamically tochunk_size / 10, clamped to[1, chunk_size - 10], instead of a fixed500. - Improved the WASM API documentation, including the dynamic overlap default.
- Corrected the WASM option documentation for overlap,
window_capacity, andupdate_modedefaults.
Changed
Section titled “Changed”- Clarified that results are returned in input order, even though the algorithm sorts internally.
Changed
Section titled “Changed”- Expanded and reorganized the WASM documentation with setup guidance, parameter information, and standardized examples.
- Corrected documentation figures and mathematical rendering.
- Corrected the Handling Outliers example to use a fraction that downweights the injected outlier.
-
Fixed the
Extendboundary policy not being applied and improved numerical precision through coordinate centering. -
Fixed adapter execution errors being silently ignored instead of propagated.
-
Moved WASM documentation to GitHub Pages and updated the README with package-specific guidance.
- Added cross-reference links in the API documentation to the corresponding user guides.
Changed
Section titled “Changed”- Breaking change: renamed
OnlineOutputgetterssmoothedandstd_errortoyandstandard_error. - Organized Streaming and Online API documentation and tutorials into dedicated user-guide pages.
- Fixed
OnlineLowess.add_point()returningundefinedinstead ofnulluntil the sliding window contains enough points.
- Added
custom_weightstoLowessOptionsfor non-negative per-observation batch weights.
Changed
Section titled “Changed”- Breaking change: renamed JavaScript-facing option keys and API methods from camelCase to snake_case; option objects must use snake_case keys.
- Breaking change: renamed
OnlineLowess.update(x, y)toadd_point(x, y).
Changed
Section titled “Changed”- Raised the minimum supported Rust version to 1.89 for source builds.
- Fixed reported vulnerabilities in WASM dependencies.
- Under-the-hood maintenance; no changes to the public API or runtime behavior.
- Under-the-hood maintenance; no changes to the public API or runtime behavior.
- Fixed the
Extendboundary policy not being applied and improved numerical precision through coordinate centering. - Fixed adapter execution errors being silently ignored instead of propagated.
- Added the
meanscaling method (Mean Absolute Deviation). - Added
init_panic_hook()for reporting Rust panics as JavaScript errors.
0.99.9
Section titled “0.99.9”- Made the package available on npm as
fastlowess-wasm.
Changed
Section titled “Changed”- Introduced class-based builders for streaming and online processing.
0.99.8
Section titled “0.99.8”- Initial implementation of the WebAssembly binding.