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]”- Enabled the optional wgpu DirectX 12 backend for GPU-enabled Windows builds. DXC is loaded dynamically with an FXC fallback, avoiding eager imports of
dxcompiler.dllanddxil.dll. - Added GLES for Android GPU builds with a target-scoped
wgpufeature; Windows continues to omit the GLES-only loader imports. - 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.
- Keep generated N-API package-version checks in
index.jssynchronized withpackage.jsonafter builds and version bumps. - 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 GPU Batch fits misaligning fitted values with unsorted inputs; results now preserve input and requested sorted order.
- Fixed GPU Batch silently ignoring
custom_weights; GPU fit and CV candidate kernels now apply them directly. - Reduced GPU adapter buffer requirements from 30 storage/32 total buffer bindings to 7 storage/8 total per shader stage by using per-compute-pipeline resource layouts.
- 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
OnlineLowessandLowessResult.predict()ignoring theoutputsoption. - Reject unknown output names, detect musl reliably for GPU installs, reject unsupported musl ARM, validate GPU addons, and preserve the
fit_async()declaration during builds. - 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.
- Added
retain_modelandLowessResult.predict(newX, options)for prediction. - Added
return_derivativetoSmoothOptions,StreamingOptions, andOnlineOptions. - Added standard errors and confidence/prediction intervals to
StreamingOptionsandOnlineOptions; online intervals requireupdate_mode: "full".
- Changed the
OnlineLowessdefaultiterationsfrom3to0, matching non-robust incremental updates; robustness iterations requireupdate_mode: "full". - Fixed
cv_seedsilently accepting negative values by rejecting them before casting.
- Added
return_sortedtoSmoothOptionsandmissingtoSmoothOptions,StreamingSmoothOptions, andOnlineSmoothOptions. - Added
fastlowess.installGpu()to download a prebuilt GPU addon; the installer also accepts a path to a local GPU artifact. - Expanded prebuilt GPU binaries to cover all nine platforms supported by the npm package.
Changed
Section titled “Changed”- Breaking change: split
SmoothOptionsintoSmoothOptionsfor batch fits,StreamingSmoothOptions, andOnlineSmoothOptions; batch-only options now produce a TypeScript error instead of being silently ignored by streaming and online fits. - Breaking change: removed ineffective
return_diagnostics,return_residuals, andparalleloptions fromOnlineOptions. - Breaking change:
StreamingOptions.overlapnow defaults dynamically tochunk_size / 10, clamped to[1, chunk_size - 10], rather than a fixed500. - Improved the Node.js API documentation, including the dynamic overlap default.
- Fixed
npm run buildandnpm run build:debugto produce the platform-specific native addon files expected by the package loader. - Fixed
installGpu()to survive native-addon rebuilds, download the filename expected by the loader, and replace existing files on Windows.
- Added prebuilt targets for Linux ARM64 with musl and ARMv7 Linux with hard-float support.
Changed
Section titled “Changed”- Clarified that results are returned in input order, even though the algorithm sorts internally.
- Added a
VERSIONexport so consumers can query the Node.js package version directly.
Changed
Section titled “Changed”- Reorganized and expanded the Node.js documentation, including a dedicated GPU backend guide with hardware requirements and performance considerations.
- Improved the docs homepage and fixed links in the generated API reference.
- Corrected the Handling Outliers example to use a fraction that downweights the injected outlier.
Changed
Section titled “Changed”- Moved Node.js documentation to GitHub Pages with executable examples and updated the README with package-specific guidance.
- Changed
.build()configuration failures to returnStatus::InvalidArginstead ofStatus::GenericFailure.
- Added an opt-in GPU backend through the
gpuCargo feature andfastlowess.installGpu(); using the installed GPU addon requires restarting Node.js. - Added cross-reference links in the API documentation to the corresponding user guides.
Changed
Section titled “Changed”- Breaking change: renamed
OnlineOutputfieldssmoothedandstd_errortoyandstandard_error. - Organized Streaming and Online API documentation and tutorials into dedicated user-guide pages.
- Added
OnlineOutputforOnlineLowess.add_point(), exposing the smoothed value, standard error, residual, robustness weight, and iterations used. - Added
return_seandcv_seedoptions toSmoothOptions. - Added
customWeightstofitandfit_asyncfor per-observation batch weights. - Unknown option keys now throw a
TypeErrorlisting the valid keys.
Changed
Section titled “Changed”- Breaking change: renamed public API fields, methods, and options from camelCase to snake_case.
- Breaking change: replaced
OnlineLowess.add_points(x, y)withadd_point(x, y), which processes one point and returnsOnlineOutput | null. - Changed
OnlineOptions.window_capacity’s default from100to1000andmin_pointsfrom2to3. OnlineLowessnow forwards allSmoothOptionsfields to the underlying builder instead of silently ignoring most of them.
- Changed configuration errors from
.build()to returnStatus::InvalidArgrather than a generic runtime failure status.
- Fixed reported vulnerabilities in Node.js dependencies.
- Under-the-hood maintenance; no changes to the public API or runtime behavior.
- Fixed GPU configuration and initialization problems, and improved recovery after missing hardware/drivers or earlier GPU execution errors.
- Expanded GPU fitting support to selectable kernels, robustness and scaling methods, boundary policies, automatic convergence, prediction, and cross-validation.
- Fixed the
Extendboundary policy not being applied and improved numerical precision through coordinate centering. - Fixed GPU integer overflow, initialization failures, and resource exhaustion.
- Added the
meanscaling method (Mean Absolute Deviation). - Added asynchronous batch processing.
0.99.9
Section titled “0.99.9”- Made the package available on npm as
fastlowess.
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 Node.js binding.