|
| 1 | +# W2-3 + W2-4 Audit — BLAS levels + statistics ArrayView compliance |
| 2 | + |
| 3 | +## Verdict |
| 4 | +**CLEAN.** No follow-up wave needed for `blas_level{1,2,3}.rs` or `statistics.rs`. All four files are already ArrayView-shaped via trait impls on `ArrayBase`. |
| 5 | + |
| 6 | +## Per-file findings |
| 7 | + |
| 8 | +### `src/hpc/blas_level1.rs` |
| 9 | +- Trait impl on ArrayBase: **yes, L47** — `impl<A, S> BlasLevel1<A> for ArrayBase<S, Ix1>` |
| 10 | +- Bonus trait impls (not in the original migration doc, but clean): `ScalarArith` (L196), `VecArith` (L242) — both on `ArrayBase<S, Ix1>` |
| 11 | +- Slice-taking pub fns: **1** — `blas_rotg` (L152). **OK-as-is**: signature is `(a: A, b: A)` (scalars), not slices. The regex `^pub fn .*&\[` matched a `&[` in the doc-comment example, not the signature. |
| 12 | +- `axis_iter` misuse: **0** |
| 13 | +- Bridge pattern: verified present in trait methods — `blas_dot`, `blas_axpy`, `blas_scal`, `blas_nrm2`, `blas_asum` all dispatch through `as_slice()` hot path + stride-aware cold path. |
| 14 | + |
| 15 | +### `src/hpc/blas_level2.rs` |
| 16 | +- Trait impl on ArrayBase: **yes, L97** — `impl<A, S> BlasLevel2<A> for ArrayBase<S, Ix2>` |
| 17 | +- Slice-taking pub fns: **0** |
| 18 | +- `axis_iter` misuse: **0** |
| 19 | + |
| 20 | +### `src/hpc/blas_level3.rs` |
| 21 | +- Trait impl on ArrayBase: **yes, L59** — `impl<A, S> BlasLevel3<A> for ArrayBase<S, Ix2>` |
| 22 | +- Slice-taking pub fns: **0** |
| 23 | +- `axis_iter` misuse: **0** |
| 24 | + |
| 25 | +### `src/hpc/statistics.rs` |
| 26 | +- Trait impl on ArrayBase: **yes, L65** — `impl<A, S, D> Statistics<A> for ArrayBase<S, D>` (note: generic-D, unlike BLAS L1/L2/L3 which fix `Ix1`/`Ix2`) |
| 27 | +- Slice-taking pub fns: **0** |
| 28 | +- `axis_iter` misuse: **0** |
| 29 | + |
| 30 | +## Build verification |
| 31 | +`cargo check -p ndarray --no-default-features --features std` → clean (31.82s, no warnings). |
| 32 | + |
| 33 | +## Surprises |
| 34 | +- `blas_level1.rs` carries two extra trait impls (`ScalarArith`, `VecArith`) on `ArrayBase<S, Ix1>` beyond `BlasLevel1` itself. Not mentioned in the original migration doc but clean and consistent with the two-layer rule. |
| 35 | +- `blas_rotg` regex match was a false positive (doc-comment `&[` in an example, not in the signature). |
| 36 | + |
| 37 | +## Follow-up needed |
| 38 | +**None.** W2-3 and W2-4 require no code changes. The W2 sprint scope reduces to the three converter waves: W2-1 (reductions), W2-2a (vml), W2-2b (activations). |
0 commit comments