Skip to content

Commit 925cbb7

Browse files
committed
chore(release): release v0.4.3
- Bump crate, script package, lockfile, README, and citation metadata to v0.4.3 - Promote the v0.4.3 performance report and archive the v0.4.2 comparison - Refresh README nalgebra/faer benchmark data and plot assets - Reorganize benchmark documentation around release, local, and artifact workflows - Update release guidance and roadmap follow-up items for v0.4.4 performance work
1 parent 45affa8 commit 925cbb7

19 files changed

Lines changed: 609 additions & 377 deletions

CHANGELOG.md

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [Unreleased]
8+
## [0.4.3] - 2026-06-09
99

1010
### ⚠️ Breaking Changes
1111

@@ -49,6 +49,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4949
- Return typed Unrepresentable reasons when strict exact-to-f64 conversion would round or become non-finite.
5050
- Specialize D4 exact determinants and keep determinant/error-bound zero coefficients from evaluating overflowing absent terms.
5151
- Update exact benchmark comparison reporting to compare strict and rounded APIs against legacy v0.4.2 rows.
52+
- Archive release performance reports [`2817d01`](https://github.com/acgetchell/la-stack/commit/2817d01374ad0aeab98d6f48a3dae9b30f878a8a)
53+
- Add an archive-performance utility that promotes curated benchmark reports into docs/PERFORMANCE.md while archiving prior release comparisons
54+
- Generate release comparisons in isolated temporary worktrees, including legacy command fallback for published tags
55+
- Wire release and historical archive recipes into just, Python packaging, and release documentation
56+
- Automate published performance report archiving [`d31e26a`](https://github.com/acgetchell/la-stack/commit/d31e26a9d7a47a6c3089028630640bcff5afe7c0)
57+
- Track the latest curated release comparison in docs/PERFORMANCE.md and archive older comparisons under docs/archive/performance/
58+
- Let performance-archive-published discover the latest stable GitHub release and previous stable baseline automatically
59+
- Generate release comparisons in isolated temporary worktrees, with release-asset restore and local baseline fallback paths
60+
- Update benchmark and release docs to use the scripted workflow instead of manual checkout steps
61+
- Split local and release performance comparisons [`7258525`](https://github.com/acgetchell/la-stack/commit/7258525590f2ed68d41879e71c833010e408e7f7)
62+
- Add default performance-local and performance-release workflows that infer the relevant release tags and run in temporary worktrees.
63+
- Add a performance-github-assets workflow for comparing stored GitHub Actions release benchmark assets without local cargo runs.
64+
- Normalize release tags before fetching, downloading assets, or checking out detached worktrees.
65+
- Update performance docs, release guidance, and generated report instructions to use the new benchmark workflows.
66+
- Add vs_linalg-only performance checks [`d7c1487`](https://github.com/acgetchell/la-stack/commit/d7c1487115e1a8e5bb1ec4fcc7592786e300e2ce)
67+
- Add local workflows for comparing current non-exact la-stack kernels against a release baseline without rerunning current nalgebra/faer or exact benchmarks.
68+
- Route archive-performance baseline and current benchmark commands by suite, with legacy fallback support for older release worktrees.
69+
- Document the faster release-signal workflow and expand Semgrep fixtures for benchmark, example, doctest, and public panic-path rules.
5270

5371
### Changed
5472

@@ -61,6 +79,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6179
- Replace mypy with strict Ty checking in the Python workflow.
6280
- Parse TOML, JSON, argparse, and Semgrep inputs into typed boundary objects before downstream use.
6381
- Reject malformed Criterion estimates, non-finite timings, invalid confidence intervals, and malformed Semgrep result shapes.
82+
- Harden Rust release hygiene [`8e12c93`](https://github.com/acgetchell/la-stack/commit/8e12c935fe54e265e8ceb640702267ec0e71b7b1)
83+
- Promote missing documentation and dead code lints to deny-level checks.
84+
- Forbid unsafe code explicitly across Rust modules and benchmark targets.
85+
- Document the LU/LDLT empty-matrix convention for D=0.
86+
- Move exact benchmark input generation into typed helpers and consolidate exact benchmark operation dispatch.
6487

6588
### Documentation
6689

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

83106
- Return matrix-cell metadata when inf-norm row sums or symmetry tolerance scaling overflow.
84107
- Avoid reparsing finite-by-construction RHS vectors in LU and LDLT solves.
108+
- Re-raise unexpected archive failures [`7938386`](https://github.com/acgetchell/la-stack/commit/7938386166f1f3f5cf594c5def67458d48e19a98)
109+
- Limit archive-performance CLI error handling to expected validation, filesystem, subprocess, and runtime failures.
110+
- Let unexpected exceptions propagate so benchmark archiving bugs surface during development.
111+
112+
### Performance
113+
114+
- Improve factorization kernel [`8837df1`](https://github.com/acgetchell/la-stack/commit/8837df1f54a9fa2c20abc1487cfce4de8c8e09c5)
115+
116+
- Preserve the tiny-dimension update shape for D2-D5 to avoid regressing the core fixed-size path
117+
- Fuse multiplier computation with trailing updates for larger dimensions to reduce extra column walks
118+
- Rely on the LDLT factorization proof instead of a redundant final finite-storage scan
119+
- Optimize exact and factorized solve kernels [`1690355`](https://github.com/acgetchell/la-stack/commit/1690355bf27c2cbba685ba0cd70486275c7620b8)
120+
- Split LU and LDLT solve paths so tiny matrices keep the direct kernels while larger fixed dimensions avoid extra substitution work.
121+
- Convert dyadic exact solve results directly to finite f64 and preserve UnrepresentableReason recovery semantics on strict conversion failures.
122+
- Modernize release branch commands and keep just recipes sorted.
85123

86124
## [0.4.2] - 2026-06-04
87125

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

637-
[Unreleased]: https://github.com/acgetchell/la-stack/compare/v0.4.2...HEAD
675+
[0.4.3]: https://github.com/acgetchell/la-stack/compare/v0.4.2...v0.4.3
638676
[0.4.2]: https://github.com/acgetchell/la-stack/compare/v0.4.1...v0.4.2
639677
[0.4.1]: https://github.com/acgetchell/la-stack/compare/v0.4.0...v0.4.1
640678
[0.4.0]: https://github.com/acgetchell/la-stack/compare/v0.3.0...v0.4.0

CITATION.cff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cff-version: 1.2.0
22
message: "If you use this software, please cite it as below."
33
type: software
44
title: "la-stack: Fast, stack-allocated linear algebra for fixed dimensions in Rust"
5-
version: 0.4.2
5+
version: 0.4.3
66
date-released: 2026-06-04
77
url: "https://github.com/acgetchell/la-stack"
88
repository-code: "https://github.com/acgetchell/la-stack"

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "la-stack"
3-
version = "0.4.2"
3+
version = "0.4.3"
44
edition = "2024"
55
rust-version = "1.96"
66
license = "BSD-3-Clause"

README.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Add this to your `Cargo.toml`:
7878

7979
```toml
8080
[dependencies]
81-
la-stack = "0.4.2"
81+
la-stack = "0.4.3"
8282
```
8383

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

208208
```toml
209209
[dependencies]
210-
la-stack = { version = "0.4.2", features = ["exact"] }
210+
la-stack = { version = "0.4.3", features = ["exact"] }
211211
```
212212

213213
**Determinants:**
@@ -383,19 +383,21 @@ operations.
383383

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

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

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

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

0 commit comments

Comments
 (0)