manifolds-rs
Dimensionality reduction for single-cell and computational biology. The Rust crate does the work; this is a scikit-learn shaped layer over it.
Eight algorithms on the CPU, three of them with GPU variants where the neighbour search and the Adam update move to the device. No CUDA runtime to install: the GPU backend is wgpu, so it runs on Metal, Vulkan or DX12 and ships in the ordinary wheel.
Documentation: https://gregorlueg.github.io/manifolds-rs/
This package versions separately from the Rust crate. Changes here are in
python/CHANGELOG.md;
the crate's are in
CHANGELOG.md.
Install
uv pip install manifolds-rs
Wheels are built for Linux x86_64 and macOS on both architectures, against Python 3.10 and up.
Thirty seconds
import manifolds_rs as mf
X, labels = mf.datasets.clustered(20_000, dim=50, n_clusters=12)
embedding = mf.UMAP(n_neighbors=15, min_dist=0.1).fit_transform(X)
Every estimator takes its parameters in the constructor, its data in fit, and
hands back an (n_samples, n_components) array. get_params and set_params
are there, so clone and Pipeline work without scikit-learn being an install
requirement.
What's here
| Class | What it is for |
|---|---|
UMAP |
The default choice. Local structure, decent global structure from the spectral init. |
DensMAP |
UMAP with relative density preserved, so a dense region stays dense. |
TSNE |
Local structure above all else. Barnes-Hut, 2-D only. |
DensNE |
t-SNE with the same density correction. |
PHATE |
Continuous structure. Trajectories and branch points survive this. |
PaCMAP |
Global structure without leaning on a spectral init. Three pair types. |
DiffusionMaps |
The spectral embedding PHATE is built on. |
ForceAtlas2 |
Gephi's force-directed layout on the kNN graph, as in scanpy's draw_graph. 2-D only. |
UMAPGpu, DensMAPGpu, TSNEGpu |
The same, with the neighbour search on the device. |
Parameters
The knobs people actually turn are ordinary constructor arguments. The rest live in frozen dataclasses, one per group, and anything you leave alone keeps the crate's default:
mf.UMAP(
n_neighbors=30,
ann="hnsw",
nn_params=mf.NeighbourParams(m=32, ef_search=200),
optim_params=mf.UmapOptim(gamma=1.5, neg_sample_rate=10),
)
Every parameter has exactly one home. If it is a constructor argument it is not in the group, so there is never a question of which wins.
Reusing the neighbour graph
Running several embeddings over the same data? Build the graph once. On anything large the search is most of the runtime.
ind, dist = mf.knn_graph(X, k=15, ann="hnsw")
a = mf.UMAP().fit_transform(X, knn_indices=ind, knn_distances=dist)
b = mf.PaCMAP().fit_transform(X, knn_indices=ind, knn_distances=dist)
No transform
None of these projects new points, so there is no transform. That is the
crate's position rather than a gap in the bindings: embedding new data means
refitting on the combined set, which moves the existing coordinates too. Anyone
telling you otherwise is doing something to the new points that is not the same
operation the old ones went through.
Precision
float32 in, float32 throughout; float64 in, float64 throughout. Anything else is promoted to float64 rather than narrowed, so precision is never lost by accident. The GPU estimators are the exception and cast to float32, because WGSL has no float64 and the alternative is a failure inside a kernel.
What is not in the wheel
FFT-accelerated t-SNE. It needs FFTW, a system library no manylinux container
carries, so approx="fft" raises unless you build the extension yourself with
the fft_tsne feature. Barnes-Hut is the default and is what the wheel does.
Parametric UMAP is in the crate but not yet bound.
Release files for manifolds-rs 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| manifolds_rs-0.1.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| manifolds_rs-0.1.3-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
| manifolds_rs-0.1.3-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 17.2 MB
Release files / manifolds_rs-0.1.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | manifolds_rs-0.1.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 6.1 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
5d220259fc814afde3ccde65f9750ea367f4d61a9c70ea347b48da4aa7b7e787
|
|
BLAKE2b-256 checksum How to use checksums |
e7983bfb6ee91ae97dd0b04cc35a8505fb4a423b2b90588149912286f3bd354a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / manifolds_rs-0.1.3-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | manifolds_rs-0.1.3-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
947ed10a16242ec23ba1452fb879ba1ec5212a0e5ecbdba2beeb5fc9e4ec6a9c
|
|
BLAKE2b-256 checksum How to use checksums |
80d2dffd56cafa9a4e7b2d6c97f727bfa15dfaf7ea235bcf0faab23312e8e628
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / manifolds_rs-0.1.3-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | manifolds_rs-0.1.3-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 5.8 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
aea734bdb96d099b185e925d5ee0e53e7a91f852a3116064bd9c3987909bf164
|
|
BLAKE2b-256 checksum How to use checksums |
09b77d70fca07058d50d47c2c0f36b15cf3a5556135812c9dccb99d84c4d2895
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log