From 2b507e984cc4ecc5681135443a30a3cb7c6db96b Mon Sep 17 00:00:00 2001 From: Hiroshi Shinaoka Date: Fri, 30 Oct 2026 09:05:46 +0900 Subject: [PATCH] t4a-faer 0.27.0: threadteam 0.2 in the public API, dqds without heap allocation The minor version moves because Par::Team and ParShape::Team carry threadteam's types and the requirement moved from threadteam 0.1 to 0.2 (#158): a crate that lends a threadteam 0.1 team to faer does not compile against it (reproduced: E0308 on Par::Team). Carries #157 (#156). t4a-faer-traits stays 0.24.2. CHANGELOG and PATCHSET record the release. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 18 ++++++++++++++++++ Cargo.lock | 2 +- PATCHSET.md | 13 ++++++++++++- faer/Cargo.toml | 2 +- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 437ebf49..15add56d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +# t4a-faer 0.27.0 (tensor4all fork; with t4a-faer-traits 0.24.2) + +Changes since `t4a-faer` 0.26.0 (tag `faer-v0.26.0`). Numbers are tensor4all/faer issues or PRs; each change has its row in `PATCHSET.md`. + +## Breaking: threadteam 0.2 (#158) + +The public API carries threadteam's types (`Par::Team(threadteam::TeamExec)`, +`ParShape::Team(_, threadteam::DispatchCosts)`), and the requirement is now `threadteam` 0.2. A crate +that builds its `Pool`/`Team` with threadteam 0.1 and lends it to faer must move to threadteam 0.2 +together with this release; no faer signature changes otherwise. With threadteam 0.2, `with_team` +called repeatedly at one width reuses the threads of a cached pool instead of spawning and joining a +fresh set (#107). + +## Correctness + +- The values-only SVD no longer allocates on the heap: dqds takes its work arrays from the caller's + `MemStack` (included in `svd_scratch`) and sorts without a heap buffer (#156, #157). + # t4a-faer 0.26.0 (tensor4all fork; with t4a-faer-traits 0.24.2) Changes since `t4a-faer` 0.25.2 (tag `faer-v0.25.2`). Numbers are tensor4all/faer issues or PRs; each change has its row in `PATCHSET.md`. diff --git a/Cargo.lock b/Cargo.lock index 5df285e1..c902b705 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2676,7 +2676,7 @@ dependencies = [ [[package]] name = "t4a-faer" -version = "0.26.0" +version = "0.27.0" dependencies = [ "aligned-vec", "amd", diff --git a/PATCHSET.md b/PATCHSET.md index e93dd7d6..a938d2d0 100644 --- a/PATCHSET.md +++ b/PATCHSET.md @@ -53,7 +53,7 @@ gate has changed and two kinds of adoption are now in the ledger. | Workspace | `faer-ffi` is excluded (the C API and its cbindgen build are unused by tensor4all). | | Upstream base | Synced with Codeberg `0ecd846` (2026-10-17) by a merge commit, so `upstream/main` is an ancestor of this branch. Those nine upstream commits since the previous base `ddbd2ae` (the sparse CSC example doc, `MatMut::from_row_major_slice_with_stride_mut`'s strides, the CG/BiCGSTAB uninitialized read) were written upstream by Paul and Connor Smith and had already been cherry-picked here on 2026-10-22 in `9f3dc58`, `ae9b979` and `064016e` (their messages name Codeberg #305, #326 and `1b2d9a9`; the tests `codeberg_305`/`codeberg_326` came with them). The direction is upstream to fork, not the reverse: nothing was fed back upstream. The cherry-picked content is byte-identical to upstream's, so the sync changes no file -- the merged tree hash equals the pre-merge tree hash. Later syncs record the new base here. | | Publication | crates.io, in the order `t4a-faer-traits` then `t4a-faer`. Releases are tagged `faer-v` and published by hand from a clean checkout of the tag; a `v` tag would also start `publish.yml`. A version that is already on crates.io is skipped, so a release that bumps only one crate still succeeds. | -| Released | Latest: `t4a-faer 0.26.0` with `t4a-faer-traits 0.24.2`, published from the commit tagged `faer-v0.26.0` (see the release section at the end). The published `src/**` is byte-identical to the tagged commit, so that commit is the revision a consumer pins. A later commit needs a new version. Earlier releases carry their own `faer-v` tags. | +| Released | Latest: `t4a-faer 0.27.0` with `t4a-faer-traits 0.24.2`, published from the commit tagged `faer-v0.27.0` (see the release section at the end). The published `src/**` is byte-identical to the tagged commit, so that commit is the revision a consumer pins. A later commit needs a new version. Earlier releases carry their own `faer-v` tags. | | LICENSE | A `LICENSE` copy lives in each crate directory so the published archive ships the MIT text (`license-file` next to `license` makes Cargo warn). | ## Experiments @@ -271,3 +271,14 @@ also marks the `t4a-faer-traits` 0.24.2 source. The minor version moves because `Par::Rayon`, `Par::rayon`, `ParShape::Rayon` and `ParShape::rayon` (`README.md`: published versions follow semver). `CHANGELOG.md` lists the changes since `faer-v0.25.2` and the migration; the evidence lives in each PR and its ledger row above. This release adds no code. + +## Released: `t4a-faer` 0.27.0 (2026-10-30) + +`t4a-faer` 0.27.0; `t4a-faer-traits` stays 0.24.2 (no change in `faer-traits/`). Published from the +merge commit of the version-bump PR, tagged `faer-v0.27.0`. The minor version moves because the public +API carries threadteam's types (`Par::Team(threadteam::TeamExec)`, `ParShape::Team(_, +threadteam::DispatchCosts)`) and the requirement moved from threadteam 0.1 to 0.2 (#158): a crate that +builds its team with threadteam 0.1 and hands it to faer no longer compiles against this release, so +it cannot be a patch of 0.26. The release carries #157 (dqds work arrays from the caller's `MemStack`, +#156) and #158. `CHANGELOG.md` lists both; the evidence lives in their ledger rows above. This release +adds no code. diff --git a/faer/Cargo.toml b/faer/Cargo.toml index 40d56597..e83851cf 100644 --- a/faer/Cargo.toml +++ b/faer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "t4a-faer" -version = "0.26.0" +version = "0.27.0" edition = "2021" authors = ["sarah quiƱones "] description = "Temporary tensor4all fork of faer: an AI-driven experiment build for tenferro-rs."