⚠️ Breaking Changes
- Make exact f64 conversions strict
Added
-
Guard README dependency snippets
7137fee- Add a generic docs-version sync check that compares Markdown dependency
snippets against the Cargo package name and version - Run the docs-version check from the repository Semgrep policy lane
- Refresh README determinant examples with explicit fallible handling and
hidden doctest mirrors - Update CI uv pins to 0.11.19
- Add a generic docs-version sync check that compares Markdown dependency
-
Report determinant scale overflow precisely
928f62b- Add a typed LaError::DeterminantScaleOverflow path for exact determinant scale exponent failures
- Convert det_exact_f64 directly from the shared Bareiss integer/exponent pair while preserving Overflow for finite-f64 conversion failures
- Reuse vector finiteness scanning across raw and proof-bearing constructors
- Harden docs version sync checks for reordered inline-table dependency snippets and pruned Markdown traversal
-
Add release performance comparison workflow
53b5fde- Extend vs_linalg with LDLT/Cholesky benchmark rows and shared deterministic inputs.
- Add smoke coverage that checks la-stack, nalgebra, and faer agree on benchmark inputs.
- Expand bench-compare to support latest-vs-last reports, suite/scope selection, peer baseline context, and clearer malformed Criterion diagnostics.
- Document the benchmark methodology, release baseline workflow, roadmap direction, and contributor guidance.
-
Publish release benchmark baselines
9497ca5- Add a release-only benchmark workflow that saves full Criterion baselines for published releases and attaches the archived baseline to the GitHub Release.
- Keep the regular benchmark workflow focused on PR and main-branch comparison runs.
- Document how to restore archived release baselines for future performance comparisons.
-
Feat!(api): make Matrix and Vector finite by construction
1fa2f55 -
[breaking] Make exact f64 conversions strict
8e33f1a- Add explicit rounded exact-to-f64 APIs for determinant and solve results
- Report exact conversion failures with typed Unrepresentable reasons
- Remove finite proof wrapper APIs now that Matrix and Vector carry finiteness directly
- Move error and tolerance contracts into first-class modules with prelude exports
- Update exact benchmarks to distinguish strict Result paths from rounded f64 paths
- Document and exercise the rounded fallback pattern for RequiresRounding errors
-
[breaking] Make exact f64 conversions strict
89f3720- Make Matrix and Vector the finite-by-construction public types for exact arithmetic.
- Add rounded exact-to-f64 APIs for determinant and solve callers that want explicit lossy conversion.
- Return typed Unrepresentable reasons when strict exact-to-f64 conversion would round or become non-finite.
- Specialize D4 exact determinants and keep determinant/error-bound zero coefficients from evaluating overflowing absent terms.
- Update exact benchmark comparison reporting to compare strict and rounded APIs against legacy v0.4.2 rows.
-
Archive release performance reports
2817d01- Add an archive-performance utility that promotes curated benchmark reports into docs/PERFORMANCE.md while archiving prior release comparisons
- Generate release comparisons in isolated temporary worktrees, including legacy command fallback for published tags
- Wire release and historical archive recipes into just, Python packaging, and release documentation
-
Automate published performance report archiving
d31e26a- Track the latest curated release comparison in docs/PERFORMANCE.md and archive older comparisons under docs/archive/performance/
- Let performance-archive-published discover the latest stable GitHub release and previous stable baseline automatically
- Generate release comparisons in isolated temporary worktrees, with release-asset restore and local baseline fallback paths
- Update benchmark and release docs to use the scripted workflow instead of manual checkout steps
-
Split local and release performance comparisons
7258525- Add default performance-local and performance-release workflows that infer the relevant release tags and run in temporary worktrees.
- Add a performance-github-assets workflow for comparing stored GitHub Actions release benchmark assets without local cargo runs.
- Normalize release tags before fetching, downloading assets, or checking out detached worktrees.
- Update performance docs, release guidance, and generated report instructions to use the new benchmark workflows.
-
Add vs_linalg-only performance checks
d7c1487- Add local workflows for comparing current non-exact la-stack kernels against a release baseline without rerunning current nalgebra/faer or exact benchmarks.
- Route archive-performance baseline and current benchmark commands by suite, with legacy fallback support for older release worktrees.
- Document the faster release-signal workflow and expand Semgrep fixtures for benchmark, example, doctest, and public panic-path rules.
Changed
-
Cover determinant scale overflow boundaries
532093a- Extract determinant scale exponent calculation into a private helper
- Assert typed DeterminantScaleOverflow errors for dimension conversion and exponent product overflow
-
Harden support script parsing
87e1d00- Require Python 3.13 for support-script tooling and align Ruff/Ty with that baseline.
- Replace mypy with strict Ty checking in the Python workflow.
- Parse TOML, JSON, argparse, and Semgrep inputs into typed boundary objects before downstream use.
- Reject malformed Criterion estimates, non-finite timings, invalid confidence intervals, and malformed Semgrep result shapes.
-
Harden Rust release hygiene
8e12c93- Promote missing documentation and dead code lints to deny-level checks.
- Forbid unsafe code explicitly across Rust modules and benchmark targets.
- Document the LU/LDLT empty-matrix convention for D=0.
- Move exact benchmark input generation into typed helpers and consolidate exact benchmark operation dispatch.
Documentation
-
Sync citation metadata for v0.4.2
f473ec5- Update CITATION.cff with the v0.4.2 version and release date.
- Align the Python utility package metadata and lockfile with the crate release.
- Add citation metadata validation to the release checklist and config lint flow.
- Include CITATION.cff in YAML/CFF formatting checks.
Fixed
-
Escape path regex in benchmark parser test
1222c93Use a literal regex pattern for the malformed Criterion JSON diagnostic so
Windows paths with backslashes do not break pytest's match expression. -
Align ty with Python 3.13
b9e0ba0 -
Preserve coordinates for overflowed accumulators
1d976b3- Return matrix-cell metadata when inf-norm row sums or symmetry tolerance scaling overflow.
- Avoid reparsing finite-by-construction RHS vectors in LU and LDLT solves.
-
Re-raise unexpected archive failures
7938386- Limit archive-performance CLI error handling to expected validation, filesystem, subprocess, and runtime failures.
- Let unexpected exceptions propagate so benchmark archiving bugs surface during development.
Performance
-
Improve factorization kernel
8837df1- Preserve the tiny-dimension update shape for D2-D5 to avoid regressing the core fixed-size path
- Fuse multiplier computation with trailing updates for larger dimensions to reduce extra column walks
- Rely on the LDLT factorization proof instead of a redundant final finite-storage scan
-
Optimize exact and factorized solve kernels
1690355- Split LU and LDLT solve paths so tiny matrices keep the direct kernels while larger fixed dimensions avoid extra substitution work.
- Convert dyadic exact solve results directly to finite f64 and preserve UnrepresentableReason recovery semantics on strict conversion failures.
- Modernize release branch commands and keep just recipes sorted.