Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 40 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
## [0.4.3] - 2026-06-09

### ⚠️ Breaking Changes

Expand Down Expand Up @@ -49,6 +49,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- 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`](https://github.com/acgetchell/la-stack/commit/2817d01374ad0aeab98d6f48a3dae9b30f878a8a)
- 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`](https://github.com/acgetchell/la-stack/commit/d31e26a9d7a47a6c3089028630640bcff5afe7c0)
- 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`](https://github.com/acgetchell/la-stack/commit/7258525590f2ed68d41879e71c833010e408e7f7)
- 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`](https://github.com/acgetchell/la-stack/commit/d7c1487115e1a8e5bb1ec4fcc7592786e300e2ce)
- 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

Expand All @@ -61,6 +79,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- 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`](https://github.com/acgetchell/la-stack/commit/8e12c935fe54e265e8ceb640702267ec0e71b7b1)
- 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

Expand All @@ -82,6 +105,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- 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`](https://github.com/acgetchell/la-stack/commit/7938386166f1f3f5cf594c5def67458d48e19a98)
- 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`](https://github.com/acgetchell/la-stack/commit/8837df1f54a9fa2c20abc1487cfce4de8c8e09c5)

- 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`](https://github.com/acgetchell/la-stack/commit/1690355bf27c2cbba685ba0cd70486275c7620b8)
- 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.

## [0.4.2] - 2026-06-04

Expand Down Expand Up @@ -634,7 +672,7 @@ Older releases are archived by minor series:
- [0.2.x](docs/archive/changelog/0.2.md)
- [0.1.x](docs/archive/changelog/0.1.md)

[Unreleased]: https://github.com/acgetchell/la-stack/compare/v0.4.2...HEAD
[0.4.3]: https://github.com/acgetchell/la-stack/compare/v0.4.2...v0.4.3
[0.4.2]: https://github.com/acgetchell/la-stack/compare/v0.4.1...v0.4.2
[0.4.1]: https://github.com/acgetchell/la-stack/compare/v0.4.0...v0.4.1
[0.4.0]: https://github.com/acgetchell/la-stack/compare/v0.3.0...v0.4.0
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ cff-version: 1.2.0
message: "If you use this software, please cite it as below."
type: software
title: "la-stack: Fast, stack-allocated linear algebra for fixed dimensions in Rust"
version: 0.4.2
version: 0.4.3
date-released: 2026-06-04
url: "https://github.com/acgetchell/la-stack"
repository-code: "https://github.com/acgetchell/la-stack"
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "la-stack"
version = "0.4.2"
version = "0.4.3"
edition = "2024"
rust-version = "1.96"
license = "BSD-3-Clause"
Expand Down
22 changes: 12 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ Add this to your `Cargo.toml`:

```toml
[dependencies]
la-stack = "0.4.2"
la-stack = "0.4.3"
```

### Feature flags
Expand Down Expand Up @@ -207,7 +207,7 @@ rationals (this pulls in `num-bigint`, `num-rational`, and `num-traits` for

```toml
[dependencies]
la-stack = { version = "0.4.2", features = ["exact"] }
la-stack = { version = "0.4.3", features = ["exact"] }
```

**Determinants:**
Expand Down Expand Up @@ -383,19 +383,21 @@ operations.

For the full per-kernel comparison methodology, input construction, and
release-comparison workflow details, see [docs/BENCHMARKING.md](docs/BENCHMARKING.md).
For the current release-to-release performance snapshot, see
[docs/PERFORMANCE.md](docs/PERFORMANCE.md).

<!-- BENCH_TABLE:lu_solve:median:new:BEGIN -->

| D | la-stack median (ns) | nalgebra median (ns) | faer median (ns) | la-stack vs nalgebra | la-stack vs faer |
|---:|--------------------:|--------------------:|----------------:|---------------------:|----------------:|
| 2 | 2.585 | 4.486 | 137.653 | +42.4% | +98.1% |
| 3 | 12.204 | 22.990 | 182.618 | +46.9% | +93.3% |
| 4 | 27.228 | 51.660 | 208.181 | +47.3% | +86.9% |
| 5 | 53.141 | 68.714 | 272.117 | +22.7% | +80.5% |
| 8 | 141.279 | 162.225 | 348.216 | +12.9% | +59.4% |
| 16 | 626.561 | 574.115 | 854.941 | -9.1% | +26.7% |
| 32 | 2,862.795 | 2,709.532 | 2,806.698 | -5.7% | -2.0% |
| 64 | 19,703.239 | 14,388.285 | 12,085.453 | -36.9% | -63.0% |
| 2 | 2.044 | 4.542 | 143.958 | +55.0% | +98.6% |
| 3 | 9.596 | 23.599 | 185.466 | +59.3% | +94.8% |
| 4 | 23.338 | 50.717 | 210.976 | +54.0% | +88.9% |
| 5 | 45.368 | 69.065 | 277.564 | +34.3% | +83.7% |
| 8 | 127.861 | 164.412 | 364.864 | +22.2% | +65.0% |
| 16 | 631.997 | 663.822 | 882.674 | +4.8% | +28.4% |
| 32 | 2,745.604 | 2,424.540 | 2,867.431 | -13.2% | +4.2% |
| 64 | 17,543.034 | 14,747.731 | 12,266.271 | -19.0% | -43.0% |

<!-- BENCH_TABLE:lu_solve:median:new:END -->

Expand Down
Loading
Loading