Skip to content

News

This changelog includes end-user changes only. For internal development notes, see the repository changelog.

  • Added grouped outputs arrays and nested cv options for batch, streaming, online, and prediction configuration.
  • Added a grouped intervals option with residual-bootstrap intervals for Lowess, StreamingLowess, full-update OnlineLowess, and LowessResult.predict().
  • Clarified that Batch residual_sd is 1.4826 * MAD, while Streaming reports the cumulative sample standard deviation of emitted residuals.
  • Breaking change: replaced individual return_* output booleans with outputs: [...] for Batch, Streaming, Online, and prediction options.
  • Breaking change: replaced flat interval options and predict()’s interval levels with intervals: { confidence, prediction, bootstrap }, and replaced flat CV options and cv.seed with cv: { method, k, fractions } plus one outer seed shared by CV and bootstrap. predict() has its own seed.
  • 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_converge tolerances; Online also rejects invalid explicit delta values while retaining NaN as its default sentinel.
  • Fixed Online incremental mode accepting positive delta and auto_converge settings it cannot use; unsupported combinations now error.
  • Fixed grouped intervals discarding distinct confidence and prediction levels; each requested coverage is now applied independently.
  • Fixed OnlineLowess ignoring the outputs option.
  • Reject unknown option keys and outputs names, return owned typed-array copies for results, and expose PredictOutput.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.
  • Raised the minimum supported Rust version to 1.89 for source builds.

  • Added retain_model and LowessResult.predict(newX, options) for prediction.

  • Added return_derivative to SmoothOptions, StreamingOptions, and OnlineOptions.

  • Fixed reported vulnerabilities in WASM dependencies.
  • Changed the OnlineLowess default iterations from 3 to 0, matching non-robust incremental updates; robustness iterations require update_mode: "full".
  • Added return_sorted to SmoothOptions.
  • Added missing to SmoothOptions, StreamingSmoothOptions, and OnlineSmoothOptions to control non-finite input handling.
  • Breaking change: split SmoothOptions into batch SmoothOptions and separate StreamingOptions and OnlineOptions; batch-only fields are no longer accepted by streaming or online APIs.
  • Breaking change: StreamingOptions.overlap now defaults dynamically to chunk_size / 10, clamped to [1, chunk_size - 10], instead of a fixed 500.
  • Improved the WASM API documentation, including the dynamic overlap default.
  • Corrected the WASM option documentation for overlap, window_capacity, and update_mode defaults.
  • Clarified that results are returned in input order, even though the algorithm sorts internally.
  • 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 Extend boundary 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.
  • Breaking change: renamed OnlineOutput getters smoothed and std_error to y and standard_error.
  • Organized Streaming and Online API documentation and tutorials into dedicated user-guide pages.
  • Fixed OnlineLowess.add_point() returning undefined instead of null until the sliding window contains enough points.
  • Added custom_weights to LowessOptions for non-negative per-observation batch weights.
  • 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) to add_point(x, y).
  • 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 Extend boundary policy not being applied and improved numerical precision through coordinate centering.
  • Fixed adapter execution errors being silently ignored instead of propagated.
  • Added the mean scaling method (Mean Absolute Deviation).
  • Added init_panic_hook() for reporting Rust panics as JavaScript errors.
  • Made the package available on npm as fastlowess-wasm.
  • Introduced class-based builders for streaming and online processing.
  • Initial implementation of the WebAssembly binding.