Skip to content

v0.4.3

Latest

Choose a tag to compare

@acgetchell acgetchell released this 09 Jun 09:02
Immutable release. Only release title and notes can be modified.

⚠️ 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
  • 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 1222c93

    Use 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.