Skip to main content

SpectraFit-Core — spectral field

SpectraFit-Core

High-performance numerical curve fitting — a Rust kernel with analytical Jacobians, Pydantic-typed schemas, and a self-auditing benchmark that audits its own credibility against independent oracles (lmfit, JAX, scipy) and NIST StRD certified values.

status: beta license: MIT python: 3.13+ DOI

Status: beta (0.1.1). APIs and the benchmark contract may still change before the stable 1.0 release. See LIMITATIONS.md for disclosed gaps.

Documentation: https://anselmoo.github.io/SpectraFit-Core/ — start with Installation and Quickstart.

What is this?

SpectraFit-Core fits spectroscopic and general nonlinear models with a Rust Levenberg–Marquardt / trust-region core, exposed to Python through a PyO3 wheel and a Pydantic schema mirror. Its distinguishing feature is a trustworthy benchmark: rather than asking you to take its speed/accuracy claims on faith, it ships a dashboard that verifies its own numbers (independent parity oracle, timing-isolation guards, render-truth provenance, NIST StRD validation) and visibly discloses what it has not verified.

Installation

pip install spectrafit-core   # or: uv add spectrafit-core

To build from source (Rust toolchain + maturin required):

git clone https://github.com/Anselmoo/SpectraFit-Core.git
cd SpectraFit-Core
uv sync --extra benchmark   # dev tooling is a dependency-group, installed by default
uv run maturin develop

In a source checkout, uv run pytest runs the full test suite.

Quick start

Fit a single Gaussian peak to synthetic data, using only the public spectrafit_core API (verified to run — see Quickstart for the full walkthrough):

import numpy as np
from spectrafit_core import MeasurementData, compose, fit, gaussian

# Synthetic "measured" data: a Gaussian peak plus a little noise.
x = np.linspace(-5, 5, 200)
y = 3.0 * np.exp(-0.5 * ((x - 0.5) / 1.2) ** 2) + np.random.default_rng(0).normal(
    0, 0.05, x.size
)

# Build the model graph: one Gaussian node with initial guesses.
graph = compose([gaussian("peak1", amplitude=1.0, center=0.0, sigma=1.0)]).build()

# Run the fit.
result = fit(graph, MeasurementData(x=x.tolist(), y=y.tolist()))

print(result.parameters)  # fitted amplitude/center/sigma, keyed "peak1.<param>"
print(result.r_squared)  # goodness of fit

This is deterministic (seeded RNG) and recovers the true amplitude/center/sigma (3.0, 0.5, 1.2) to within about one standard error, with r_squared ≈ 0.998:

{'peak1.sigma': ParameterResult(value=1.2024163241228947, ..., stderr=0.004211511681961483),
 'peak1.center': ParameterResult(value=0.49756589193680784, ..., stderr=0.004211469158787863),
 'peak1.amplitude': ParameterResult(value=2.997594452290324, ..., stderr=0.00909249987508253)}
0.9979075074894731

The block above is reformatted for readability: print emits it as one long line, and dict ordering is an implementation detail — your keys may appear in a different order. The values are what matter, and they are reproducible: the example seeds its RNG.

Benchmark

The benchmark (python/oracles/) fits the same problems with spectrafit (the Rust kernel under test) and five reference backends: lmfit, jax/optimistix and three scipy.optimize.least_squares methods (lm, trf, dogbox).

  • Cases: a deterministic catalogue defined in python/oracles/cases.py (CATEGORY_REGISTRY: easy, complex, scaling, lineshapes, reality, edge, optfn, fixed, tied). Every case can be opened on its own in the report.
  • Showcases: a 3-D fit with the native gaussian_nd kernel and a joint multi-spectrum fit with GlobalFitGraph (shared centres and widths, per-spectrum amplitudes).
  • Data flow: benchmark run → results.json (the BenchReport contract) → FastAPI → the React app in web/. poe report_html bundles the same report into one offline file.
  • Report: Standing shows what was measured, without a verdict; Evidence shows every backend on every case, side by side.
uv run poe benchmark         # full run → results.json + manifest.json
uv run poe benchmark_quick   # lean reps, fast local iteration
uv run poe serve             # serve the latest report over FastAPI (http://localhost:8000)
uv run poe benchmark_gate    # spectrafit-vs-lmfit regression gate on the latest run

# or the CLI directly
PYTHONPATH=python uv run python -m oracles.cli run --reps 10 --mc 30
PYTHONPATH=python uv run python -m oracles.cli gate

Each run writes its own folder:

.spectrafit_reports/<category>/<YYYY-MM-DD>_run_NNN/
  results.json     # the BenchReport contract payload (served by the FastAPI app)
  manifest.json    # run metadata + headline stats (geomean speedup, max |Δr²|, win-rate)
.spectrafit_reports/index.json   # all runs, newest first

The latest run resolves via oracles.reports.latest_results(category).

Regression gate

benchmark_gate (and CI) always checks three axes — spectrafit must not become slower than lmfit overall (geomean speedup < 1×), must not break accuracy parity (max |Δr²| > 1e-3 on the LM-family cases; the multimodal optfn/global category is excluded since two stochastic global optimizers legitimately reach different optima), and must not regress any backend's convergence. Up to four more axes are appended only when their backing evidence exists (self-perf, model-selection, σ-calibration, speed inference) — the gate is never a fixed axis count. See Why SpectraFit-Core, "A benchmark that verifies itself" section, for the full axis-by-axis description.

Web report

uv run poe serve   # serve the latest report over FastAPI (in another shell)

cd web && npm install
npm run dev        # dev server; proxies /api → http://localhost:8000 (the FastAPI app)
npm run build      # production build → dist/ (fetches /api/report at runtime)
npm run test       # vitest: render all views from fixtures, no browser/API (alias: npm run smoke)
npm run contract   # regenerate src/openapi.gen.ts from the live /openapi.json

Self-contained HTML — one command builds the extension, runs the benchmark, and bundles a single, deployable report.html (all JS/CSS inlined, the report inlined as window.__BENCH__) that opens offline with no server:

uv run poe report_html   # → .spectrafit_reports/benchmark/<run>/report.html (one file, tens of MB;
                          # size scales with the backend roster and case catalog)

The Python contract (oracles.bench_contract) is the single source of truth. The FastAPI app publishes it as OpenAPI, and npm run contract generates the TypeScript types from that schema, so engine and UI cannot drift apart.

Adding a model or case

The benchmark is registry-driven (see Extending SpectraFit-Core): register one PeakModel in oracles.models, reference its key from a CaseSpec/CaseFamily in oracles.cases. After a contract change, regenerate the TS types from the live OpenAPI schema: uv run poe serve then cd web && npm run contract.

Contributing

Contributions of any size are welcome — issues and pull requests here; see CONTRIBUTING.md for development setup, conventions, and the PR process. SpectraFit-Core is also developed on the MPCDF GitLab; changes from both places are kept in sync automatically.

Citing

If you use SpectraFit-Core in academic work, please cite it via CITATION.cff (GitHub's "Cite this repository" button reads it). Every release is archived on Zenodo; the concept DOI 10.5281/zenodo.23043544 always resolves to the latest version.

License

MIT © Anselm Hahn. See also CONTRIBUTING.md, CODE_OF_CONDUCT.md, and SECURITY.md.

Metadata

Release files for spectrafit-core 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spectrafit-core 0.1.1
File Size Uploaded
spectrafit_core-0.1.1.tar.gz 314.8 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for spectrafit-core 0.1.1
File
spectrafit_core-0.1.1-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
spectrafit_core-0.1.1-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
spectrafit_core-0.1.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64, macOS 11.0+ ARM64, macOS 10.12+ universal2 (ARM64, x86-64) Details
spectrafit_core-0.1.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
spectrafit_core-0.1.1-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
spectrafit_core-0.1.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64 Details

Total release size: 10.9 MB

Release files / spectrafit_core-0.1.1.tar.gz

Download URL spectrafit_core-0.1.1.tar.gz
Size 314.8 kB
Tags Source
SHA-256 checksum
How to use checksums
11954bb90e387d2d948d81c6f76945bfba46a12a552c14c30054acf2cc8e0044
BLAKE2b-256 checksum
How to use checksums
ea0ac371c5c01d9d7f24cd7a614ec5d57f9b4c4ae262a151aa4f07f696d013a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / spectrafit_core-0.1.1-cp314-cp314-win_amd64.whl

Download URL spectrafit_core-0.1.1-cp314-cp314-win_amd64.whl
Size 1.4 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
035af975025be34abb2c09af0b0d112e4c6b5d8a7be44ea02a6fe02ac8e14684
BLAKE2b-256 checksum
How to use checksums
8001e848beaeaa47e09dcd2fdc0f6d311cf78d041d15c7cd9b1245a98ce3c520
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / spectrafit_core-0.1.1-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL spectrafit_core-0.1.1-cp314-cp314-manylinux_2_28_x86_64.whl
Size 1.6 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0452d40676ea55b95f1ef35c5f548645a2d6fe9d9d1b94e60ca651c8dcc4afff
BLAKE2b-256 checksum
How to use checksums
b6713d4959a2d15c64fcff5800818b7b6ba9e90b15421bb2ad978ec3ec3def36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / spectrafit_core-0.1.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL spectrafit_core-0.1.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 2.3 MB
Tags CPython 3.14 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6aa045ae84ad7fb0dc3d091087b8702b3d839803ce8bb1f42d37348e0edcad57
BLAKE2b-256 checksum
How to use checksums
a9acab7f323fabca469c520153d359fc2b64422b77fb75bd2c1662a084bf7626
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / spectrafit_core-0.1.1-cp313-cp313-win_amd64.whl

Download URL spectrafit_core-0.1.1-cp313-cp313-win_amd64.whl
Size 1.4 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
f6832db656f39f2ab2ad04e53b26dedce84c24c5a6101e597472edcdc3ca87ef
BLAKE2b-256 checksum
How to use checksums
069e345203f470e506323e866313717cb2b6583a2adbbf1cb7fb66c3d0f77e12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / spectrafit_core-0.1.1-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL spectrafit_core-0.1.1-cp313-cp313-manylinux_2_28_x86_64.whl
Size 1.6 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
64cf5ad2b0f36a1a0fc207c074170fbf06404b1a1602086087d949d464a4711e
BLAKE2b-256 checksum
How to use checksums
2f6a9f37409bbed70f275fd7783d559dbfb67d50091ef65e7f4b9a3fd953132a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / spectrafit_core-0.1.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL spectrafit_core-0.1.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 2.3 MB
Tags CPython 3.13 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
94879a57c4139612a538ce1e4e342b860b7220e65a554b3c8de0020c326e8f6e
BLAKE2b-256 checksum
How to use checksums
5c72506452e6d70500d72520aca2da41a5c841e795c2a8b5d66e4d23fec40023
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release history Release notifications | RSS feed

0.1.2

7 release files

This release

0.1.1 This release

7 release files

0.1.0

7 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page