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
[package]
name = "flow-pacmap"
version = "0.1.2"
edition.workspace = true
authors.workspace = true
license = "MIT"
repository = "https://github.com/jrmoynihan/flow/flow-pacmap"
readme = "README.md"
description = "PaCMAP dimensionality reduction (Wang et al. 2021) for large-n flow cytometry — faer PCA, optional HNSW and k-d tree KNN"
keywords = ["pacmap", "dim-reduction", "embedding", "flow-cytometry"]
categories = ["science", "algorithms", "mathematics"]

[features]
default = ["hnsw", "kdtree"]
hnsw = ["flow-knn/hnsw"]
kdtree = ["flow-knn/kdtree"]
# Match manifolds-rs HNSW stack (ann-search-rs) for A/B and production use
ann-search = ["flow-knn/ann-search"]
# Burn (device + Adam) + raw cubeCL CSR pair-gradient kernel via wgpu
cubecl = ["dep:cubecl", "dep:burn", "dep:bytemuck"]
# GPU kNN via flow-knn (ann-search-rs + cubeCL); pairs with `cubecl` for optimize
gpu-knn = ["flow-knn/gpu", "ann-search"]

[dependencies]
faer = { workspace = true }
rayon = { workspace = true }
thiserror = { workspace = true }
rand = { workspace = true }
flow-knn = { path = "../flow-knn", version = "^0.1.1", default-features = false }
flow-dimensional-reduction = { path = "../flow-dimensional-reduction", version = "^0.1.0" }
cubecl = { workspace = true, optional = true }
burn = { workspace = true, optional = true }
bytemuck = { workspace = true, optional = true }

[dev-dependencies]
approx = { workspace = true }
criterion = { workspace = true }
manifolds-rs = "0.3.9"
oxicuda-manifold = "0.5.1"
rand = { workspace = true }
# manifolds-rs pins faer 0.23; workspace uses 0.24 — isolate Mat construction for peer benches.
faer23 = { package = "faer", version = "=0.23.2" }

[[bench]]
name = "pacmap_compare"
harness = false
required-features = ["ann-search"]

[[bench]]
name = "pacmap_optimize_gpu"
harness = false
required-features = ["cubecl", "ann-search"]

[[bench]]
name = "gradient_micro"
harness = false

[package.metadata.scripts]
dry-release = "cargo smart-release flow-pacmap --update-crates-index"
publish     = "cargo smart-release flow-pacmap --update-crates-index --execute"
changelog   = "cargo changelog flow-pacmap --write"