Skip to content

Commit 32e67d4

Browse files
authored
Merge pull request #207 from acgetchell/fix/review-graph-findings
fix: harden numerical and release evidence
2 parents 5c004ad + 260afb8 commit 32e67d4

45 files changed

Lines changed: 1531 additions & 434 deletions

Some content is hidden

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

CITATION.cff

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ 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"
55
version: 0.4.4
6-
date-released: 2026-07-12
6+
date-released: 2026-07-13
77
url: "https://github.com/acgetchell/la-stack"
88
repository-code: "https://github.com/acgetchell/la-stack"
9+
doi: "10.5281/zenodo.18158926"
910
identifiers:
10-
- description: "Zenodo concept DOI (all versions)"
11+
- description: "Zenodo DOI for version 0.4.4"
1112
type: doi
12-
value: "10.5281/zenodo.18158926"
13+
value: "10.5281/zenodo.21331524"
1314
authors:
1415
- family-names: "Getchell"
1516
given-names: "Adam"

CONTRIBUTING.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ clarity, and the fixed-dimension stack-allocation model.
77
## Getting Started
88

99
Install Rust 1.97.1 through [rustup](https://rustup.rs/), Git, Python 3.14,
10-
[`uv` 0.12.1](https://docs.astral.sh/uv/), and `jq`. Install the repository's
10+
[`uv` 0.12.3](https://docs.astral.sh/uv/), and `jq`. Install the repository's
1111
pinned `just` version from its locked dependency graph:
1212

1313
```bash
@@ -109,10 +109,12 @@ For final validation of a non-core change, compose each affected surface once:
109109
- Examples: `just examples`
110110

111111
Run `just ci` for core Rust, public behavior, or GitHub-equivalent validation.
112-
It composes leaf validators directly, runs unit and integration tests together
113-
once through the release-profile `test-rust-ci` bucket, and keeps doctests
114-
separate because nextest does not execute them. `just clippy` remains an
115-
optional all-target sweep outside this CI path.
112+
It composes leaf validators directly and runs `clippy-all-targets` to match the
113+
GitHub Clippy SARIF workflow. Unit and integration tests still run together once
114+
through the release-profile `test-rust-ci` bucket, and doctests remain separate
115+
because nextest does not execute them. The test, example, and benchmark buckets
116+
retain their execution or compile-contract roles because ordinary compilation
117+
does not execute Clippy lints.
116118

117119
`la-stack` intentionally has no notebook validation bucket: the repository has
118120
no notebooks or supported Python binding surface. Add notebook tooling only

Cargo.lock

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

Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ include = [
3131
"/src/**/*.rs",
3232
"/tests/*.proptest-regressions",
3333
"/tests/*.rs",
34+
"/tests/common/**/*.rs",
3435
]
3536

3637
[dependencies]
@@ -82,14 +83,15 @@ codegen-units = 1
8283

8384
[package.metadata.docs.rs]
8485
features = [ "exact" ]
86+
rustdoc-args = [ "--cfg", "docsrs" ]
8587

8688
[lints.rust]
8789
warnings = { level = "deny", priority = -1 }
8890
unsafe_code = "forbid"
8991
missing_docs = { level = "deny", priority = 0 }
9092
dead_code = { level = "deny", priority = 0 }
9193
unreachable_pub = { level = "deny", priority = 0 }
92-
unexpected_cfgs = { level = "deny", priority = 0, check-cfg = [ 'cfg(la_stack_v0_4_3_api)' ] }
94+
unexpected_cfgs = { level = "deny", priority = 0, check-cfg = [ 'cfg(docsrs)', 'cfg(la_stack_v0_4_3_api)' ] }
9395

9496
[lints.rustdoc]
9597
bare_urls = "deny"

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ across operations.
515515
Timings count only when the implementation preserves the documented
516516
correctness guarantees and invariants. Performance claims require comparable
517517
before-and-after evidence using the same inputs, configuration, and environment.
518-
This snapshot records the measured source state, CPU, operating system, Rust
518+
This snapshot records the measured source state, available CPU model, operating system, Rust
519519
toolchain, dependency lock and harness digests, Criterion command, and
520520
correctness-gate result in the adjacent JSON sidecar. The publication workflow
521521
requires complete canonical-dimension coverage and regenerates the CSV, SVG,
@@ -571,7 +571,7 @@ cargo run --features exact --example exact_solve_3x3
571571
A short contributor workflow:
572572

573573
Install Rust 1.97.1 through [rustup](https://rustup.rs/), Git, Python 3.14,
574-
[`uv` 0.12.1](https://docs.astral.sh/uv/), and `jq`. Then install the pinned
574+
[`uv` 0.12.3](https://docs.astral.sh/uv/), and `jq`. Then install the pinned
575575
`just` release from its locked dependency graph:
576576

577577
```bash

REFERENCES.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,11 @@ See `src/exact.rs` for the full architecture description.
5050

5151
`solve_exact()`, `solve_exact_f64()`, and `solve_exact_rounded_f64()` share the determinant
5252
path's exact f64 decomposition and integer scaling. Matrix and RHS entries are decomposed via
53-
IEEE 754 bit extraction [9]. Each collection is scaled independently to its own minimum
54-
exponent, producing a `BigInt` matrix and RHS without inflating one side to accommodate the
55-
other's range. Forward elimination runs in `BigInt` using Bareiss fraction-free updates
53+
IEEE 754 bit extraction [9]. Matrix and RHS scales start from their respective minimum
54+
exponents. When `|e_rhs − e_matrix| ≤ 64`, both sides use `min(e_rhs, e_matrix)` as the shared
55+
scale; when `|e_rhs − e_matrix| > 64`, they retain independent scales so one side is not
56+
inflated excessively.
57+
Forward elimination runs in `BigInt` using Bareiss fraction-free updates
5658
[7]—no `BigRational` and no GCD normalisation in the `O(D³)` phase. The upper-triangular
5759
result is then lifted into `BigRational` for back-substitution, where fractions are inherent
5860
and the cost is only `O(D²)`. Row swaps from first-non-zero pivoting are applied to both the

0 commit comments

Comments
 (0)