⚠️ Breaking Changes
- Matrix::solve_exact now returns RationalVector<D> instead of [BigRational; D]. Use as_array() or into_array() when raw storage is required.
- rename Vector::norm2() to Vector::norm(), Vector::norm2_sq() to Vector::norm_squared(), and Matrix::inf_norm()
to Matrix::norm_inf(). No compatibility aliases are provided. - la-stack now requires Rust 1.98.1.
Merged Pull Requests
- Bump the github-actions group with 4 updates #240
- Bump the github-actions group with 3 updates #223
- Bump the github-actions group with 4 updates #221
Added
-
Accept rational matrix inputs
703746e- add fixed-size rational matrix and vector types with exact determinant signs, determinant values, and solves
- provide stable runtime dispatch through D=8 with explicit exact-to-f64 conversion
- preserve typed diagnostics while reusing row-cleared Bareiss elimination
- add release-tracked Criterion comparisons against BigRational Gaussian elimination
- document the two-domain scalar model and the f64 precision boundary
-
Add certified determinant sign enclosures
cd94ebb- Add outward-rounded interval arithmetic with typed range and input errors.
- Certify determinant signs through D=7 with explicit inconclusive results.
- Provide runtime dimension dispatch, documentation, and benchmark coverage.
- Refresh pinned Python development tools and transitive dependencies.
-
Add certified dot and affine error bounds
973e662- Add proof-bearing scalar certificates for dot products and unrounded axis · (left - right) reductions.
- Expose outward bounds for sign and threshold filtering, with inconclusive results when proof conditions fail.
- Document and benchmark the deterministic FMA error model.
-
Add overflow-safe Euclidean norms
f1f7b11- Add allocation-free Vector::norm2 with scaled accumulation for large and subnormal finite coordinates.
- Resolve upper-range rounding with exact stack-based square sums, preventing false or hidden overflow without the exact feature.
- Report VectorNorm-tagged NonFinite errors only when the exact norm rounds to infinity; preserve norm2_sq's distinct range contract.
- Avoid redundant first-coordinate arithmetic and share binary64 rounding primitives across vector and interval operations.
- Document approximation limits and add peer-crate norm benchmarks plus scenario comparisons with hypot and Delaunay reference kernels.
-
Add const-generic Gram matrix construction
a62e72a- Add allocation-free, const-evaluable
gram_matrixwith independent vector count and dimension - Preserve bitwise symmetry and typed dot-product overflow diagnostics
- Document geometric uses, conditioning, and floating-point limitations
- Add benchmarks for square and rectangular vector collections
- Simplify exact rational scaling using canonical positive denominators
- Deduplicate factorization property-test fixtures and assertions
- Add allocation-free, const-evaluable
Changed
-
Assert legacy artifact fixture uses schema 2
4524f86 -
Cover enclosure and range-exhaustion boundaries
c2437b8- Exercise binade-boundary multiplication and selected-extrema overflow cases.
- Cover determinant accumulation failures, square/addition exhaustion, and matrix access bounds.
- Clarify that lifting an already-rounded matrix encloses only its stored values.
-
[breaking] Standardize vector and matrix norm names
ab483d4- Distinguish Euclidean norm from squared norm with clearer vector APIs.
- Use norm_inf for the matrix maximum absolute row sum.
- Preserve numerical behavior and typed error contracts.
- Retain historical benchmark IDs and adapters for older releases.
- Document the v0.4.6 migration and clarify norm definitions.
Dependencies
- Bump the github-actions group with 4 updates #221
fa501a8 - Bump the github-actions group with 3 updates #223
c0d7c93 - Bump the github-actions group with 4 updates #240
98e322c
Fixed
-
Advance exact Python dev pins with just update
3616ae9- Resolve direct development tools as one compatible cross-platform set.
- Preserve runtime and build-system dependency requirements.
- Refresh Ruff, Semgrep, Ty, and their compatible transitive dependencies.
-
Enforce the f64 algebraic-operation ban
753179c- Reject algebraic f64 calls and function items across repository-owned Rust while preserving ordinary operators and
mul_add. - Document the numerical contract, MSRV, release-pinned references, and native BLAS alternatives.
- Refresh contributor tool pins and adapt subprocess encoding to Ty 0.0.74.
- Reject algebraic f64 calls and function items across repository-owned Rust while preserving ordinary operators and
-
Detect qualified f64 algebraic operations
31021f1- Reject
<f64>::algebraic_*calls and function items. - Preserve qualified FMA calls and function items as allowed.
- Reject
-
Make just update reconcile all managed tools
b1ca30a- Preflight update prerequisites before modifying dependency or lock state.
- Update Cargo and Python dependencies while preserving coupled exact-arithmetic requirements.
- Upgrade setup-owned Cargo tools and atomically reconcile their pins with the active uv version.
- Keep actionlint and zizmor compatible for local composite-action references.
-
Validate uv before repository updates
37a17ed- Require the active uv to report a stable X.Y.Z version before dependency or Cargo tool changes.
- Preserve pin reconciliation for newer stable uv installations.
-
Reject ambiguous uv output before repository updates
6bb2412- Validate uv output with the reconciler's single-stable-version parser before dependency or tool mutations.
- Accept newer stable uv releases while rejecting ambiguous, missing, prerelease, and embedded versions.
- Refresh managed tool pins and the Semgrep development dependency.
-
Make Python automation portable on Windows
2370cbf- Bind uv version validation to the exact launcher selected by update recipes
- Preserve byte-exact Git input and explicit text newline policies
- Guard repository scripts against platform-dependent subprocess and file I/O
-
Enforce complete Python type annotations
b2be4e7- Enable missing-annotation checks for function parameters and methods
- Format and type-check repository-owned Python fixtures alongside scripts
- Preserve intentional negative fixtures with narrow lint suppressions
-
Enforce Python type-only import linting
dd3d399- Apply Ruff's TC rules to Python static-analysis fixtures.
- Keep annotation-only dependencies out of runtime imports.
-
Enforce complete Python fixture linting
ebc45fe- Run the full configured Ruff policy over Python Semgrep fixtures in canonical CI.
- Isolate deliberate fixture violations with narrow per-file suppressions.
- Exclude static-analysis fixtures from CodeRabbit review and leave docstring policy to Ruff.
-
[breaking] Harden rational APIs and release comparisons
d8f9897- canonicalize signed and unreduced rational inputs at construction boundaries
- preserve invariant-bearing RationalVector solutions across both exact input domains
- retain typed singularity, conversion, and runtime-dispatch diagnostics
- make release comparisons capability-aware for pre-rational benchmark baselines
- clarify exact-input guarantees, f64 precision loss, and benchmark provenance
-
Make rational comparisons fair and backward-compatible
67afc8e- Exclude input cloning from consuming BigRational reference timings.
- Support schema-1 artifacts that predate rational-input provenance.
- Omit unsupported rational-input rows from legacy coverage checks.
-
Avoid false certificate logging alerts
d8d21db- Rename numerical-bound locals so CodeQL does not mistake them for sensitive certificate data.
- Document finite bound invariants, the affine error formula, and typed failure contexts.
- Make proof-range and second-FMA overflow expectations explicit.
-
Complete benchmark CI and improve documentation navigation
ee1c60f- Allow the full exact benchmark suite to finish while preserving normal sampling and skipping unused plots.
- Select successful main baselines and report incomplete comparisons accurately.
- Add a canonical 5×5 quickstart, linked feature summaries, Contents, and a Documentation Map.
- Move detailed examples and numerical contracts into rustdoc guides.
- Record README, docs.rs, and GitHub documentation conventions.
- Document numerical logging false positives and the outstanding paste maintenance advisory.
- Update cargo-llvm-cov and rumdl tool pins.
-
Correct Windows Markdown checks and benchmark summaries
e7ca1fe- Count Unicode characters consistently to prevent false Markdown line-length failures on Windows.
- Report benchmark comparisons as unavailable when baseline coverage is missing or incomplete.
- Stabilize Documentation Map navigation across GitHub and rustdoc.
- Link exact determinant filtering to det_direct_with_errbound().
-
Align zizmor audits and harden release cache isolation
ee091c3- Synchronize local and CI zizmor versions and personas, enable authenticated online audits, and clearly report offline fallback.
- Remove dependency and tool caches from release benchmark production while preserving separate producer and publisher permissions.
- Enforce scanner-version and release-cache policies with Semgrep.
- Reorganize README, references, and mathematical guidance with early API selection, alphabetized methods, and stable thematic citations.
- Expand algorithm references, determinant-bound derivations, and numerical contracts for exact conversion, intervals, and scaled products.
- Trim AGENTS.md into focused linked guides and document file ownership.
- Establish documentation filename conventions and align coverage navigation, performance-report links, and generator output paths.
-
Verify zizmor version sources and clarify numerical docs
421bcda- Require the zizmor resolver to read the canonical justfile pin and publish it without substituting a hard-coded or unrelated version.
- Point README mathematical-basis links to the main branch.
- Define roundoff-bound notation explicitly, including binary64 unit roundoff and the D and 2D reduction counts.
- Document non-finite factor rejection in ScaledProduct.
- Exempt intentional Semgrep fixtures from the algebraic-operation prohibition while retaining it for other repository-owned Rust.
-
Budget and validate release Criterion baselines
42a3e1f- Allow 150 minutes for comparative benchmarks and 90 minutes for exact benchmarks within a 285-minute job, preserving full Criterion sampling.
- Require complete, valid raw measurements and matching saved baselines before packaging the archive with its benchmark inventory.
- Report suite runtimes and support manual runs without release publication.
- Specify the repository explicitly when uploading release assets.
- Document runtime estimates, headroom, and pre-release verification.
-
Enforce benchmark setup limits and improve README navigation
d8382ea- Limit checkout to 2 minutes and share a 28-minute timeout across tool installation, input validation, and benchmark inventory.
- Align budget documentation with the enforced setup limits.
- Place scalar types, API navigation, and features after Quickstart, move Examples before Benchmarks, and update the Contents list.
- Sort feature flags, scalar domains, documentation links, examples, and their run commands lexicographically.
-
Attach benchmark baselines before publishing releases
0ddf9cf- Require an explicit stable tag and a matching mutable draft release.
- Benchmark the resolved tag commit and verify the uploaded archive's size and SHA-256 digest before publishing the draft.
- Reuse matching draft assets on publisher retries without overwriting conflicting assets or modifying published releases.
- Require fresh draft checks when rerunning benchmarks.
- Document draft creation, workflow dispatch, and failed-run recovery.
-
Isolate release benchmarks from default-branch caches
d9434f2- Run benchmarks from the release tag and check out the workflow's own commit to keep execution in that tag's cache scope.
- Reject mismatched dispatch refs and tags moved since dispatch.
- Update release instructions to use --ref "$TAG" instead of main.
-
Correct interval bounds and support mutable dispatch captures
3fb215b- Use magnitude-ordered FastTwoSum to avoid spurious non-finite errors in interval addition and subtraction near f64::MAX.
- Allow dimension-dispatch macro bodies to mutate captures while preserving support for consuming closures.
- Skip redundant GCD work when clearing rational denominators.
- Clarify numerical certificates, error provenance, and mutation guarantees in API documentation.
- Sort README API entries and document the existing Gram benchmark suite.
Maintenance
-
Tighten dependency-update tooling and diagnostics
7e845d1- add
cargo-updateto pinned tool setup and include it injust updatemaintenance flow - make archive, benchmark, and tag release scripts emit safer error handling with preserved sub-exception diagnostics
- strengthen SemVer and ordering validation paths in tool scripts to fail fast with clearer messages
- refresh contributor/release docs and exact-api docs for updated setup/update expectations
- normalize and simplify exact-module test structure without changing runtime behavior
- add
Performance
-
Characterize rational row-clearing allocation costs
2688964- Add small and wide-component rational benchmark fixtures across D=2–8.
- Isolate component cloning and integer scaling costs from complete determinant, sign, and solve operations.
- Publish allocation and timing data with provenance and reproduction steps supporting the existing borrowed implementation.
-
[breaking] Optimize exact conversion and dense 4D determinants
7fd6d8e- Avoid redundant fraction reduction in strict RationalVector conversion.
- Share minors in dense exact 4×4 determinants while preserving the sparse fast path.
- Add adversarial solve benchmarks across D=2,3,4,5,8,16,32,64 and exact-arithmetic diagnostics.
- Include Gaussian reference working-copy costs in benchmark timings.
- Document the decision to retain existing LU/LDLT solve finalization after finding no repeatable speedup.
- Align tooling with Rust 1.98.1 and refresh dependency and tool pins.