Skip to content

Commit 0215e65

Browse files
authored
Merge pull request #245 from acgetchell/release/v0.4.6
fix(release)!: finalize v0.4.6 and preserve benchmark history
2 parents d36a9e9 + 4b6e7a1 commit 0215e65

57 files changed

Lines changed: 4316 additions & 1379 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/benchmarks.yml‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ on:
1717
- "src/**"
1818
- "benches/**"
1919
- "tests/exact_bench_config.rs"
20-
- "tests/vs_linalg_inputs.rs"
2120
- ".config/nextest.toml"
2221
- "Cargo.toml"
2322
- "Cargo.lock"
@@ -32,7 +31,6 @@ on:
3231
- "src/**"
3332
- "benches/**"
3433
- "tests/exact_bench_config.rs"
35-
- "tests/vs_linalg_inputs.rs"
3634
- ".config/nextest.toml"
3735
- "Cargo.toml"
3836
- "Cargo.lock"

‎.github/workflows/ci.yml‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ jobs:
9191
cargo_machete_version="$(resolve_version cargo_machete_version)"
9292
cargo_nextest_version="$(resolve_version cargo_nextest_version)"
9393
dprint_version="$(resolve_version dprint_version)"
94+
git_cliff_version="$(resolve_version git_cliff_version)"
9495
rumdl_version="$(resolve_version rumdl_version)"
9596
taplo_version="$(resolve_version taplo_version)"
9697
typos_version="$(resolve_version typos_version)"
@@ -101,6 +102,7 @@ jobs:
101102
echo "CARGO_MACHETE_VERSION=$cargo_machete_version"
102103
echo "CARGO_NEXTEST_VERSION=$cargo_nextest_version"
103104
echo "DPRINT_VERSION=$dprint_version"
105+
echo "GIT_CLIFF_VERSION=$git_cliff_version"
104106
echo "RUMDL_VERSION=$rumdl_version"
105107
echo "TAPLO_VERSION=$taplo_version"
106108
echo "TYPOS_VERSION=$typos_version"
@@ -166,5 +168,10 @@ jobs:
166168
with:
167169
tool: cargo-nextest@${{ steps.tool_versions.outputs.CARGO_NEXTEST_VERSION }}
168170

171+
- name: Install git-cliff
172+
uses: taiki-e/cache-cargo-install-action@9ee83daaa7b96a6fab930949ecf1122bba04a389 # v3.0.8
173+
with:
174+
tool: git-cliff@${{ steps.tool_versions.outputs.GIT_CLIFF_VERSION }}
175+
169176
- name: Run CI checks
170177
run: just ci

‎AGENTS.md‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,12 @@ Favor the invariant over a convenient edit or faster implementation.
220220

221221
## Project Context
222222

223-
This is one Rust library crate, rooted at `src/lib.rs`. Core dimensions are
224-
compile-time constants. The `exact` feature enables arbitrary-precision
225-
arithmetic; `bench` gates benchmark targets while their dependencies remain
226-
dev-only. The [Code organization guide](docs/code_organization.md) maps
227-
modules, features, tests, and tooling. Update that guide when file ownership
223+
The published Rust library is rooted at `src/lib.rs`. The unpublished
224+
`benches/comparison` workspace member owns nalgebra/faer benchmark dependencies
225+
and input tests. Core dimensions are compile-time constants. The `exact` feature
226+
enables arbitrary-precision arithmetic; `bench` gates benchmark targets while
227+
their dependencies remain dev-only. The [Code organization guide](docs/code_organization.md)
228+
maps modules, features, tests, and tooling. Update that guide when file ownership
228229
or layout changes.
229230

230231
## Agent Expectations

‎CHANGELOG.md‎

Lines changed: 225 additions & 6 deletions
Large diffs are not rendered by default.

‎CITATION.cff‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ 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.5
6-
date-released: 2026-08-21
5+
version: 0.4.6
6+
date-released: 2026-09-08
77
url: "https://github.com/acgetchell/la-stack"
88
repository-code: "https://github.com/acgetchell/la-stack"
99
doi: "10.5281/zenodo.18158926"

‎Cargo.lock‎

Lines changed: 12 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml‎

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
[package]
22
name = "la-stack"
3-
version = "0.4.5"
3+
version = "0.4.6"
44
edition = "2024"
55
rust-version = "1.98.1"
6+
autobenches = false
67
license = "BSD-3-Clause"
78
description = "Fast, stack-allocated linear algebra for fixed dimensions"
89
readme = "README.md"
@@ -45,8 +46,6 @@ num-traits = { version = "0.2.19", optional = true }
4546
allocation-counter = "0.8.1"
4647
approx = "0.5.1"
4748
criterion = { version = "0.8.2", features = [ "html_reports" ] }
48-
faer = { version = "0.24.4", default-features = false, features = [ "std", "linalg" ] }
49-
nalgebra = { version = "0.35.0", default-features = false, features = [ "std" ] }
5049
pastey = "0.2.3"
5150
proptest = "1.11.0"
5251

@@ -72,11 +71,6 @@ required-features = [ "exact" ]
7271
name = "rational_input_5x5"
7372
required-features = [ "exact" ]
7473

75-
[[bench]]
76-
name = "vs_linalg"
77-
harness = false
78-
required-features = [ "bench" ]
79-
8074
[[bench]]
8175
name = "exact"
8276
harness = false
@@ -105,19 +99,27 @@ codegen-units = 1
10599
features = [ "exact" ]
106100
rustdoc-args = [ "--cfg", "docsrs" ]
107101

108-
[lints.rust]
102+
[workspace]
103+
members = [ "benches/comparison" ]
104+
default-members = [ "." ]
105+
resolver = "3"
106+
107+
[lints]
108+
workspace = true
109+
110+
[workspace.lints.rust]
109111
warnings = { level = "deny", priority = -1 }
110112
unsafe_code = "forbid"
111113
missing_docs = { level = "deny", priority = 0 }
112114
dead_code = { level = "deny", priority = 0 }
113115
unreachable_pub = { level = "deny", priority = 0 }
114-
unexpected_cfgs = { level = "deny", priority = 0, check-cfg = [ 'cfg(docsrs)', 'cfg(la_stack_pre_rational_input_api)', 'cfg(la_stack_v0_4_3_api)' ] }
116+
unexpected_cfgs = { level = "deny", priority = 0, check-cfg = [ 'cfg(docsrs)', 'cfg(la_stack_pre_rational_input_api)' ] }
115117

116-
[lints.rustdoc]
118+
[workspace.lints.rustdoc]
117119
bare_urls = "deny"
118120
broken_intra_doc_links = "deny"
119121

120-
[lints.clippy]
122+
[workspace.lints.clippy]
121123
cargo = { level = "warn", priority = -1 }
122124
extra_unused_type_parameters = "warn"
123125
nursery = { level = "warn", priority = -1 }

‎README.md‎

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.18158926.svg)](https://doi.org/10.5281/zenodo.18158926)
44
[![Crates.io](https://badgen.net/crates/v/la-stack)](https://crates.io/crates/la-stack)
55
[![Downloads](https://badgen.net/crates/d/la-stack)](https://crates.io/crates/la-stack)
6-
[![License](https://badgen.net/github/license/acgetchell/la-stack)](https://github.com/acgetchell/la-stack/blob/v0.4.5/LICENSE)
6+
[![License](https://badgen.net/github/license/acgetchell/la-stack)](https://github.com/acgetchell/la-stack/blob/v0.4.6/LICENSE)
77
[![Docs.rs](https://docs.rs/la-stack/badge.svg)](https://docs.rs/la-stack)
88
[![CI](https://github.com/acgetchell/la-stack/actions/workflows/ci.yml/badge.svg)](https://github.com/acgetchell/la-stack/actions/workflows/ci.yml)
99
[![rust-clippy analyze][clippy-badge]][clippy-workflow]
@@ -92,7 +92,7 @@ Add this to your `Cargo.toml`:
9292

9393
```toml
9494
[dependencies]
95-
la-stack = "0.4.5"
95+
la-stack = "0.4.6"
9696
```
9797

9898
### Solve a 5×5 system
@@ -229,7 +229,7 @@ Enable exact determinant signs, determinant values, and solves:
229229

230230
```toml
231231
[dependencies]
232-
la-stack = { version = "0.4.5", features = ["exact"] }
232+
la-stack = { version = "0.4.6", features = ["exact"] }
233233
```
234234

235235
`Matrix` / `Vector` exact methods preserve stored `f64` values;
@@ -338,9 +338,9 @@ for the algorithms, validity boundaries, and supporting references.
338338
- ✅ No runtime dependencies by default (optional features may add deps)
339339
- ✅ `unsafe` forbidden
340340

341-
See [CHANGELOG.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/CHANGELOG.md)
341+
See [CHANGELOG.md](https://github.com/acgetchell/la-stack/blob/v0.4.6/CHANGELOG.md)
342342
for release history and
343-
[docs/roadmap.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/roadmap.md)
343+
[docs/roadmap.md](https://github.com/acgetchell/la-stack/blob/v0.4.6/docs/roadmap.md)
344344
for current release planning.
345345

346346
## 🚫 Anti-goals
@@ -361,12 +361,12 @@ for current release planning.
361361
## 🗺️ Documentation Map
362362

363363
- [API guide][api-guide] — worked examples, API selection, storage, and error contracts.
364-
- [Benchmarking](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/BENCHMARKING.md) — benchmark suites, comparison workflows, and measurement methodology.
364+
- [Benchmarking](https://github.com/acgetchell/la-stack/blob/v0.4.6/docs/BENCHMARKING.md) — benchmark suites, comparison workflows, and measurement methodology.
365365
- [Coverage](https://github.com/acgetchell/la-stack/blob/main/docs/MEASURING_COVERAGE.md) — local and CI coverage commands and report locations.
366366
- [Mathematical basis](https://github.com/acgetchell/la-stack/blob/main/docs/mathematical_basis.md) — algorithms, numerical guarantees, and limitations.
367367
- [Performance reports](https://github.com/acgetchell/la-stack/blob/main/docs/performance.md) — release-to-release measurement results and provenance.
368-
- [Releasing](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/RELEASING.md) — release preparation, validation, and publication.
369-
- [Roadmap](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/roadmap.md) — release planning, future directions, and non-goals.
368+
- [Releasing](https://github.com/acgetchell/la-stack/blob/v0.4.6/docs/RELEASING.md) — release preparation, validation, and publication.
369+
- [Roadmap](https://github.com/acgetchell/la-stack/blob/v0.4.6/docs/roadmap.md) — release planning, future directions, and non-goals.
370370

371371
## 📋 Examples
372372

@@ -399,7 +399,7 @@ cargo run --example solve_5x5
399399
![LU solve (factor + solve): median time vs dimension][lu-solve-benchmark]
400400

401401
Raw data:
402-
[docs/assets/bench/vs_linalg_lu_solve_median.csv](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/assets/bench/vs_linalg_lu_solve_median.csv)
402+
[docs/assets/bench/vs_linalg_lu_solve_median.csv](https://github.com/acgetchell/la-stack/blob/v0.4.6/docs/assets/bench/vs_linalg_lu_solve_median.csv)
403403
Measurement provenance:
404404
[docs/assets/bench/vs_linalg_lu_solve_median.provenance.json][benchmark-provenance]
405405

@@ -421,7 +421,7 @@ README table, and provenance together.
421421

422422
For the full per-kernel comparison methodology, algorithm citations, input
423423
construction, and release-comparison workflow details, see
424-
[docs/BENCHMARKING.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/BENCHMARKING.md).
424+
[docs/BENCHMARKING.md](https://github.com/acgetchell/la-stack/blob/v0.4.6/docs/BENCHMARKING.md).
425425
For the current release-to-release performance snapshot, see
426426
[docs/performance.md](https://github.com/acgetchell/la-stack/blob/main/docs/performance.md).
427427
The exact release suite includes the already-exact rational-input groups for
@@ -445,14 +445,14 @@ expectations are validated outside the timed closures.
445445

446446
| D | la-stack median (ns) | nalgebra median (ns) | faer median (ns) | reduction vs nalgebra (point est.) | reduction vs faer (point est.) |
447447
|---:|--------------------:|--------------------:|----------------:|---------------------:|----------------:|
448-
| 2 | 2.044 | 4.601 | 151.939 | +55.6% | +98.7% |
449-
| 3 | 9.989 | 23.513 | 196.357 | +57.5% | +94.9% |
450-
| 4 | 21.865 | 54.716 | 223.910 | +60.0% | +90.2% |
451-
| 5 | 44.510 | 71.219 | 293.420 | +37.5% | +84.8% |
452-
| 8 | 145.405 | 188.352 | 381.872 | +22.8% | +61.9% |
453-
| 16 | 672.491 | 585.261 | 897.236 | -14.9% | +25.0% |
454-
| 32 | 2,777.707 | 2,501.361 | 2,952.778 | -11.0% | +5.9% |
455-
| 64 | 17,357.785 | 13,878.401 | 12,199.761 | -25.1% | -42.3% |
448+
| 2 | 2.021 | 4.479 | 182.532 | +54.9% | +98.9% |
449+
| 3 | 9.977 | 22.795 | 217.567 | +56.2% | +95.4% |
450+
| 4 | 22.101 | 51.739 | 241.525 | +57.3% | +90.8% |
451+
| 5 | 46.070 | 69.003 | 326.848 | +33.2% | +85.9% |
452+
| 8 | 128.364 | 165.933 | 401.400 | +22.6% | +68.0% |
453+
| 16 | 643.532 | 569.446 | 903.140 | -13.0% | +28.7% |
454+
| 32 | 2,755.773 | 2,710.235 | 2,919.290 | -1.7% | +5.6% |
455+
| 64 | 17,518.634 | 14,313.979 | 12,108.783 | -22.4% | -44.7% |
456456

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

@@ -486,39 +486,39 @@ aligned with the local comprehensive validation path.
486486
For coverage commands and report locations, see
487487
[`docs/MEASURING_COVERAGE.md`](https://github.com/acgetchell/la-stack/blob/main/docs/MEASURING_COVERAGE.md).
488488
For the full contributor workflow, see
489-
[CONTRIBUTING.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/CONTRIBUTING.md).
489+
[CONTRIBUTING.md](https://github.com/acgetchell/la-stack/blob/v0.4.6/CONTRIBUTING.md).
490490

491491
## 📚 Citation
492492

493493
If you use this library in academic work, please cite it using
494-
[CITATION.cff](https://github.com/acgetchell/la-stack/blob/v0.4.5/CITATION.cff)
494+
[CITATION.cff](https://github.com/acgetchell/la-stack/blob/v0.4.6/CITATION.cff)
495495
(or GitHub's "Cite this repository" feature). Tagged releases are archived on
496496
Zenodo under the
497497
[all-versions concept DOI](https://doi.org/10.5281/zenodo.18158926).
498498

499499
## 🔎 References
500500

501501
For canonical references to the algorithms used by this crate, see
502-
[REFERENCES.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/REFERENCES.md).
502+
[REFERENCES.md](https://github.com/acgetchell/la-stack/blob/v0.4.6/REFERENCES.md).
503503

504504
## 🤖 AI Agents
505505

506506
AI coding assistants should read
507-
[AGENTS.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/AGENTS.md)
507+
[AGENTS.md](https://github.com/acgetchell/la-stack/blob/v0.4.6/AGENTS.md)
508508
before proposing or applying changes. See
509-
[CONTRIBUTING.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/CONTRIBUTING.md)
509+
[CONTRIBUTING.md](https://github.com/acgetchell/la-stack/blob/v0.4.6/CONTRIBUTING.md)
510510
for the repository's AI-assisted development note.
511511

512512
## 📜 License
513513

514-
BSD 3-Clause License. See [LICENSE](https://github.com/acgetchell/la-stack/blob/v0.4.5/LICENSE).
514+
BSD 3-Clause License. See [LICENSE](https://github.com/acgetchell/la-stack/blob/v0.4.6/LICENSE).
515515

516516
[audit-badge]: https://github.com/acgetchell/la-stack/actions/workflows/audit.yml/badge.svg
517517
[audit-workflow]: https://github.com/acgetchell/la-stack/actions/workflows/audit.yml
518-
[benchmark-provenance]: https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/assets/bench/vs_linalg_lu_solve_median.provenance.json
518+
[benchmark-provenance]: https://github.com/acgetchell/la-stack/blob/v0.4.6/docs/assets/bench/vs_linalg_lu_solve_median.provenance.json
519519
[clippy-badge]: https://github.com/acgetchell/la-stack/actions/workflows/rust-clippy.yml/badge.svg
520520
[clippy-workflow]: https://github.com/acgetchell/la-stack/actions/workflows/rust-clippy.yml
521-
[lu-solve-benchmark]: https://raw.githubusercontent.com/acgetchell/la-stack/v0.4.5/docs/assets/bench/vs_linalg_lu_solve_median.svg
521+
[lu-solve-benchmark]: https://raw.githubusercontent.com/acgetchell/la-stack/v0.4.6/docs/assets/bench/vs_linalg_lu_solve_median.svg
522522
[refs-det-bound]: https://github.com/acgetchell/la-stack/blob/main/REFERENCES.md#absolute-error-bound-for-closed-form-determinants
523523
[refs-exact-sign]: https://github.com/acgetchell/la-stack/blob/main/REFERENCES.md#exact-determinant-sign-adaptive-precision-integer-arithmetic
524524
[refs-exact-solve]: https://github.com/acgetchell/la-stack/blob/main/REFERENCES.md#exact-linear-system-solve-hybrid-bareiss--bigrational

0 commit comments

Comments
 (0)