flow-pacmap 0.1.2

PaCMAP dimensionality reduction (Wang et al. 2021) for large-n flow cytometry — faer PCA, optional HNSW and k-d tree KNN
Documentation
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## Unreleased

### New Features

 - Staged KNN API: public `KnnGraph`, `compute_knn``KnnGraph`, and
   optional `knn: Option<&KnnGraph>` on `fit_transform` so callers can build
   the neighbour graph once and reuse it across configs.
 - Depend on workspace crate `flow-knn` for algorithm-agnostic KNN (usearch
   HNSW by default; optional `ann-search` feature for the ann-search-rs stack).
 - <csr-id-55b077057b98e53e2414b3b42cca18efd8b14b1c/> stage KNN via flow-knn and add cubeCL optimize path
   Reuse portable KnnGraph across embeddings, forward ANN features to flow-knn,
   and add Burn/cubeCL CSR pair-gradient optimization with Criterion harnesses.

### Breaking Changes

 - `fit_transform` gains a `knn: Option<&KnnGraph>` argument after `config`
   (pass `None` for previous one-shot behaviour).
 - `compute_knn` now returns `Result<KnnGraph, PaCMAPError>` instead of
   `Result<Vec<NeighborList>, PaCMAPError>`.
 - Cargo features `hnsw` / `kdtree` now forward to `flow-knn`; add
   `ann-search` to enable the ann-search-rs HNSW backend.

### Refactor

 - <csr-id-02ab29154270fb5e288287c36652ed8c30b6b5d5/> use shared flow-dimensional-reduction PCA
   pca_init becomes a two-component specialization of the shared covariance
   PCA. Public signature unchanged; the axis-alignment guard test and the
   pacmap_compare bench are unaffected.
   
   Fixes f32 covariance accumulation: the shared implementation accumulates
   in f64, which matters at the n~1e7 scale this path runs at.

### Performance

 - <csr-id-05d8cf13511a8b064b406fd3a385eec95948b8bd/> bulk-write KnnGraph and typed load buffers
   Complete Campaign 2 A/B: keep staged write_all (−99.9%) and LE typed
   read_exact (−6.7%) at 100k×60; document reverted pacmap/compress/peaks
   scratch experiments with Criterion benches retained.
 - <csr-id-2d3c6fc30fb8bdcc2ddb2c0ca638766e68401e37/> bulk-load KnnGraph IO; record unsafe micro-opt A/B
   Keep the ~100× faster graph load via read_exact + LE bytemuck cast.
   Add Criterion benches and PERF_AB docs for the six-item A/B campaign;
   revert opts that missed the ≥5% keep rule (BSS, FCS columns/write,
   TRU-OLS SyncPtr, exact KNN / PaCMAP unchecked).

### Documentation

 - <csr-id-92e31b03dc632230809d10422be0c1062e6e9e1b/> consumer-first README pass across crates, add peacoqc-py usage example, remove legacy utils crate
   Rewrites READMEs across the workspace (fcs, flow-clustering,
   flow-control-detection, flow-density, flow-fcs-compress, flow-knn,
   flow-linalg, flow-pacmap, flow-peak-detection, gates, peacoqc-cli,
   peacoqc-rs, tru-ols, tru-ols-cli) to lead with install/quick-start/perf
   for downstream consumers, and adds a new flow-fcs-bench README.
   
   Adds a concrete usage example to peacoqc-py/README.md mirroring the
   docstring in peacoqc/__init__.py.
   
   Removes the superseded utils/ crate (clustering, KDE, and PCA helpers
   now live in their dedicated crates) and syncs beads issue/interaction
   export state.
 - <csr-id-6d051ac5a34e63a997ca85c8819b790c0d161c8a/> scrub changelog neutralize wording after release rewrite
   smart-release reintroduced commit-message phrasing about neutralizing
   attribution; restore neutral release notes and drop the misplaced
   pacmap prep entry from linalg/gates changelogs.

### Chore

 - <csr-id-9ee153e04507d454f9509a4d2b2a2b3ffe9db17b/> add crates.io metadata for unpublished crates
   Pin flow-pacmap's flow-knn path dependency to a version so cargo publish can succeed.

### Commit Statistics

<csr-read-only-do-not-edit/>

 - 8 commits contributed to the release over the course of 26 calendar days.
 - 26 days passed between releases.
 - 7 commits were understood as [conventional]https://www.conventionalcommits.org.
 - 0 issues like '(#ID)' were seen in commit messages

### Commit Details

<csr-read-only-do-not-edit/>

<details><summary>view details</summary>

 * **Uncategorized**
    - Add crates.io metadata for unpublished crates ([`9ee153e`]https://github.com/jrmoynihan/flow/commit/9ee153e04507d454f9509a4d2b2a2b3ffe9db17b)
    - Merge branch 'worktree-pr1-pca-typestate' ([`2cb86fb`]https://github.com/jrmoynihan/flow/commit/2cb86fbea24f6605f550e5af9830c77f8710f17b)
    - Consumer-first README pass across crates, add peacoqc-py usage example, remove legacy utils crate ([`92e31b0`]https://github.com/jrmoynihan/flow/commit/92e31b03dc632230809d10422be0c1062e6e9e1b)
    - Use shared flow-dimensional-reduction PCA ([`02ab291`]https://github.com/jrmoynihan/flow/commit/02ab29154270fb5e288287c36652ed8c30b6b5d5)
    - Bulk-write KnnGraph and typed load buffers ([`05d8cf1`]https://github.com/jrmoynihan/flow/commit/05d8cf13511a8b064b406fd3a385eec95948b8bd)
    - Bulk-load KnnGraph IO; record unsafe micro-opt A/B ([`2d3c6fc`]https://github.com/jrmoynihan/flow/commit/2d3c6fc30fb8bdcc2ddb2c0ca638766e68401e37)
    - Stage KNN via flow-knn and add cubeCL optimize path ([`55b0770`]https://github.com/jrmoynihan/flow/commit/55b077057b98e53e2414b3b42cca18efd8b14b1c)
    - Scrub changelog neutralize wording after release rewrite ([`6d051ac`]https://github.com/jrmoynihan/flow/commit/6d051ac5a34e63a997ca85c8819b790c0d161c8a)
</details>

## 0.1.1 (2026-07-22)

<csr-id-ba96d7fb2b887ab666a3ecdea9f9f49b0cbbf3f4/>
<csr-id-c9b7448fef935e2ba6f3ea568ce092f9c777b53b/>

### New Features

 - <csr-id-5df4317832bb258a0adb6a0989a2d01d7ca04404/> add PaCMAP dimensionality reduction crate
   Large-n embedding with faer PCA and optional HNSW/k-d tree KNN for flow cytometry datasets.

### Chore

 - <csr-id-ba96d7fb2b887ab666a3ecdea9f9f49b0cbbf3f4/> prepare 0.1.1 release with Wang et al. attribution
   Bump flow-pacmap to 0.1.1 and pin the README install line for the
   attribution-restoring docs patch.
 - <csr-id-c9b7448fef935e2ba6f3ea568ce092f9c777b53b/> polish pacmap/linalg/gates for crates.io release
   Add README and publish metadata for flow-pacmap, and refresh install/API
   notes for the upcoming flow-linalg and flow-gates releases.

### Bug Fixes

 - <csr-id-67080e7f832aceb03a85606cb5afd293b3246227/> shorten crates.io keyword under 20 chars
   Replace dimensionality-reduction with dim-reduction so cargo publish
   accepts the package metadata.

### Documentation

 - <csr-id-2db29b5e2ba3f6483b4604c4c2d4cebe81585fca/> restore Wang et al. 2021 academic attribution
   Crate docs, `Cargo.toml` description, and README References now cite
   Wang, Huang, Rudin & Shaposhnik (2021), JMLR 22 (PaCMAP Algorithm 1).
 - <csr-id-1d5806048f15f590ebe7b2ba449501aa73868b95/> polish changelogs for pacmap, linalg, and gates releases

### Commit Statistics

<csr-read-only-do-not-edit/>

 - 8 commits contributed to the release.
 - 6 commits were understood as [conventional]https://www.conventionalcommits.org.
 - 0 issues like '(#ID)' were seen in commit messages

### Commit Details

<csr-read-only-do-not-edit/>

<details><summary>view details</summary>

 * **Uncategorized**
    - Shorten crates.io keyword under 20 chars ([`67080e7`]https://github.com/jrmoynihan/flow/commit/67080e7f832aceb03a85606cb5afd293b3246227)
    - Release flow-pacmap v0.1.1, flow-linalg v0.1.2, flow-fcs-compress v0.1.3, flow-plots v0.3.2, flow-gates v0.4.0 ([`b44c4f5`]https://github.com/jrmoynihan/flow/commit/b44c4f5915916ab3ce73a5b6ce421601090f77a5)
    - Prepare 0.1.1 release with Wang et al. attribution ([`ba96d7f`]https://github.com/jrmoynihan/flow/commit/ba96d7fb2b887ab666a3ecdea9f9f49b0cbbf3f4)
    - Restore Wang et al. 2021 attribution ([`2db29b5`]https://github.com/jrmoynihan/flow/commit/2db29b5e2ba3f6483b4604c4c2d4cebe81585fca)
    - Release flow-pacmap v0.1.0, flow-linalg v0.1.2, flow-fcs-compress v0.1.3, flow-plots v0.3.2, flow-gates v0.4.0 ([`e29c820`]https://github.com/jrmoynihan/flow/commit/e29c820dd65493c3a41f437b0e8f850c3cef8102)
    - Polish changelogs for pacmap, linalg, and gates releases ([`1d58060`]https://github.com/jrmoynihan/flow/commit/1d5806048f15f590ebe7b2ba449501aa73868b95)
    - Polish pacmap/linalg/gates for crates.io release ([`c9b7448`]https://github.com/jrmoynihan/flow/commit/c9b7448fef935e2ba6f3ea568ce092f9c777b53b)
    - Add PaCMAP dimensionality reduction crate ([`5df4317`]https://github.com/jrmoynihan/flow/commit/5df4317832bb258a0adb6a0989a2d01d7ca04404)
</details>

## 0.1.0 (2026-07-22)

<csr-id-c9b7448fef935e2ba6f3ea568ce092f9c777b53b/>

### Chore

 - <csr-id-c9b7448fef935e2ba6f3ea568ce092f9c777b53b/> polish pacmap/linalg/gates for crates.io release
   Add README and publish metadata for flow-pacmap, and refresh install/API
   notes for the upcoming flow-linalg and flow-gates releases.

### New Features

 - <csr-id-5df4317832bb258a0adb6a0989a2d01d7ca04404/> add PaCMAP dimensionality reduction crate
   Large-n 2D embedding with three-phase pair-weighted optimization, faer PCA
   initialization, and optional HNSW / k-d tree nearest-neighbour search.

### Documentation

 - <csr-id-c9b7448fef935e2ba6f3ea568ce092f9c777b53b/> add README and crates.io publish metadata
   Crate description, repository/readme fields, and a minimal README for the
   first publish.
 - <csr-id-1d5806048f15f590ebe7b2ba449501aa73868b95/> polish changelogs for pacmap, linalg, and gates releases