Skip to content

Current performance

Generated from run 2026-09-28_run_001 (2026-09-28), 160 cases, baseline solver lmfit. Regenerated on every docs build from the latest benchmark run — see Benchmark engine for how this number is produced and what it gates.

This page is a teaser — the full report is one click away

Everything below is a summary. For the complete, self-contained interactive benchmark report — every one of the 160 cases, every backend, every diagnostic plot from this same run — open report.html. Linked page-relative (../report.html), not root-absolute: GitLab Pages happens to serve this project from its own unique domain root, but GitHub Pages serves it as a project page under /SpectraFit-Core/, so a root-absolute /report.html 404s there even though it isn't part of the docs source tree itself (see tests/audit/test_audit_built_site_links.py's _CI_ASSEMBLED handling, which resolves relative CI-assembled links against the page before exempting them).

Open interactive report

Metric Value
Gate ✅ PASS
Geomean speedup vs. lmfit 13.18×
spectrafit win rate 84.4%
Max \|Δr²\| vs. lmfit 1.29e-04
Regressions 0

Reading the win rate: optfn pulls it down on quality, not speed

spectrafit win rate is a composite score (r²·speedup) blended across every case category, including optfn — deliberately multimodal global-optimization landscapes. On those cases spectrafit's "global" solver is typically the fastest backend (its median per-case speedup there tends to be the highest of any category), but it can converge to a different — sometimes worse — local optimum than lmfit's population-based differential-evolution search, so it loses on the composite score more often than every other category despite winning on raw wall-clock time. optfn is excluded from the accuracy (|Δr²|) gate above for the same reason (see Benchmark engine). A single blended win-rate number can't show this split — see report.html to filter by category and check yourself.

Horizontal bar chart of geometric-mean and harmonic-mean speedup versus the lmfit baseline, with a dashed reference line at 1.0×.

All backends, side by side

One row per backend, sorted alphabetically — order implies nothing. Speedup is relative to the baseline (lmfit = 1.00×): a measured ratio, not a ranking. These are the same medians the dashboard shows, computed by the same reduction.

Backend Median solve Median r² Speedup vs lmfit Cases run
jax 1.19 ms 0.9991 3.48× 136
lmfit 4.83 ms 0.9988 1.00× 160
scipy-ls-dogbox 3.05 ms 0.9988 1.63× 156
scipy-ls-lm 2.94 ms 0.9988 1.87× 156
scipy-ls-trf 3.58 ms 0.9988 1.42× 156
spectrafit 434 µs 0.9988 12.23× 160

Horizontal bar chart of each backend's median speedup versus the baseline, one bar per backend, coloured to match the table above.

Horizontal bar chart of each backend's median solve time in milliseconds, log-scaled on the x-axis because solve times span orders of magnitude, one bar per backend, coloured to match the table above.

Horizontal bar chart of the percentage of cases each backend converged on, one bar per backend, coloured to match the table above.

Speed vs. accuracy, case by case

Every dot is one benchmark case for one backend — spectrafit-core drawn on top and at full colour, the other backends muted underneath, so the real per-case spread is visible without erasing the comparison.

Scatter plot of median solve time (log scale) versus r² for every benchmark case, spectrafit-core highlighted in full colour on top of the muted other backends.

Speedup spread across cases

The median-speedup bar above is one number; this is the distribution behind it — how consistent each backend actually is from case to case.

Horizontal box plot of per-case speedup versus the baseline, one box per backend, spectrafit-core highlighted.