CREST — Chunked Rust Engine for Single-cell Transcriptomics
CREST runs the standard single-cell RNA-seq workflow (QC → normalisation → highly variable genes → scaling + PCA → neighbours → Leiden → UMAP → differential expression) with native Rust kernels behind a scanpy-style Python API. It reproduces scanpy's results, was faster at every step in our 0.2.0 benchmark, and never materialises a normalised, scaled or dense copy of the count matrix: the raw counts are streamed through the kernels one chunk of cells at a time (hence the name), from memory or from disk (Parquet), with memory bounded by one chunk.
Documentation: crest-sc.readthedocs.io: installation,
quickstart, how it works, API reference, benchmarks (sources in docs/).
import crest
bf = crest.read_10x_h5("filtered_feature_bc_matrix.h5") # or backed="dir/" for out-of-core
bf = crest.pp.filter_cells(bf, min_genes=200)
bf = crest.pp.filter_genes(bf, min_cells=3)
crest.pp.normalize_total(bf, target_sum=1e4) # lazy
crest.pp.log1p(bf) # lazy
crest.pp.highly_variable_genes(bf, n_top_genes=2000, flavor="seurat")
crest.pp.scale(bf, max_value=10) # applied exactly inside PCA
crest.tl.pca(bf, n_comps=50)
crest.pp.neighbors(bf, n_neighbors=15)
crest.tl.leiden(bf, resolution=1.0)
crest.tl.umap(bf)
markers = crest.tl.rank_genes_groups(bf, "leiden", method="wilcoxon") # Polars DataFrame
de = crest.tl.pseudobulk_de(bf, ["donor", "condition"], "~ donor + condition", # DESeq2 per cell type
contrast=("condition", "stim", "ctrl"), groupby="cell_type")
adata = bf.to_anndata() # hand over to scanpy / scverse
Downstream tools (docs/downstream.md): Harmony batch
integration (crest.tl.harmony), Scrublet doublet detection
(crest.pp.scrublet), seurat_v3 HVGs, a parallel Leiden resolution sweep
with stability scores (crest.tl.leiden_sweep), reference mapping / label
transfer (crest.tl.ingest) and the DESeq2 likelihood-ratio test
(DESeq2(test="LRT", reduced=...)).
Installation
pip install crest-sc # import name: crest (the PyPI name `crest` is taken)
pip install "crest-sc[anndata]" # AnnData / scipy interop
Needs Python ≥ 3.10; runtime dependencies are only numpy, polars and h5py.
Building from source needs a Rust toolchain and maturin:
maturin develop --release (see docs/installation.md).
What is validated against scanpy
Every step is checked against its reference implementation in the test suite
(tests/test_crest.py, run by CI on every change) and on real data in the module
benchmarks (bench/<module>/). On PBMC3k with the scanpy tutorial parameters:
| step | agreement with scanpy |
|---|---|
filter_cells, filter_genes, QC metrics |
identical |
highly_variable_genes (seurat) |
identical gene set; dispersions_norm within 2e-6 |
scale + pca |
identical subspace (0.000° principal angles), variance ratio within 5e-9 |
neighbors connectivities |
identical given the same kNN (within 1e-5) |
leiden |
same number of clusters, equal or higher modularity |
umap |
equal kNN preservation / silhouette (stochastic layout) |
rank_genes_groups t-test, Wilcoxon |
scores within 1e-4 (1e-7 on identical input), same p-values and log fold-changes |
score_genes |
identical, including scanpy's control-gene sampling (within 3e-7) |
DESeq2 (pseudobulk) |
R DESeq2 1.42: size factors, dispersions, log2FC, p-values within ~1e-9 on simulated designs; identical calls on 5 of 8 Kang 2018 cell types, >99% on the rest (docs/deseq2.md); LRT statistics within 1e-6 |
highly_variable_genes(flavor="seurat_v3") |
identical gene sets and ranks, variances_norm within 1e-14 (loess port matches skmisc to 1e-14) |
harmony |
same integration quality as harmonypy 2.0 (iLISI 1.81 vs 1.81, cLISI 1.01, ARI 0.82) at 3.5× the speed; neighbourhoods as close to harmonypy's as two harmonypy seeds are to each other |
scrublet |
AUROC 0.863 vs 0.863 on Kang 2018 demuxlet doublets, 12× faster |
ingest |
90.7% vs 89.8% label accuracy mapping stimulated onto control PBMCs, 15× faster |
Performance
Standard scanpy tutorial pipeline, each tool in its own process on the same
4-core / 16.9 GB machine (scanpy 1.11 with igraph Leiden, numba JIT warmed up
beforehand; CREST in-memory and streamed from Parquet). Full tables:
bench/whitepaper/results/report.md.
| dataset | scanpy | CREST in-memory | CREST out-of-core |
|---|---|---|---|
| 68k PBMC (real, 10x) | 134 s · 5.2 GB | 19 s · 1.2 GB (7.1× faster) | 24 s · 1.0 GB |
| 100k PBMC v3 | 346 s · 10.3 GB | 57 s · 2.5 GB (6.1× faster) | 109 s · 1.1 GB |
| 200k PBMC v3 | out of memory | 120 s · 4.1 GB | 283 s · 1.0 GB |
Per step at 100k cells (speed-up of CREST in-memory over scanpy): QC 17×, HVG 7.6×, scale + PCA 15×, neighbours 3.4×, Leiden 3.5×, UMAP 4.9×, t-test 9.3×, Wilcoxon 7.8×, reading the 10x .h5 1.9× (gzip-bound). Out-of-core memory stays ~1 GB regardless of dataset size. Leiden clusterings agree with scanpy (ARI 0.87–0.89, same number of clusters).
The 100k/200k datasets are generated from the real 10k PBMC v3 matrix by
make_dataset.py (each cell mixes a real cell with a nearest neighbour after
binomial thinning), so sparsity, library size and cluster structure are realistic.
The figures above come from the 0.2.0 run on a 4-core cloud VM
(bench/whitepaper/results/); numbers on a 64-core workstation, reported at each
tool's best thread count as well as at matched thread counts, will replace them. The
paper benchmark (six real datasets plus a synthetic scaling series, 5 repeats,
thread scaling, per-core CPU/clock/memory timelines, accuracy against scanpy,
bootstrap confidence intervals) runs on your own machine with one command:
cd /path/with/space # everything goes under ./crest-bench, nothing in $HOME
curl -LO https://raw.githubusercontent.com/harshameghadri/CREST/dev/scripts/crest_paper_bench.sh
bash crest_paper_bench.sh --tier standard # quick | standard | full
It clones and builds CREST in a throwaway uv environment, runs the test suites,
records the machine, downloads and checksums the data, runs every
configuration in its own process, and writes report.md, CSV/LaTeX tables,
PDF/PNG figures and a .tar.gz. The pieces live in bench/paper/
(datasets.py, run_one.py, monitor.py, run_all.py, accuracy.py,
summarize.py); module benchmarks in bench/deseq2/, bench/harmony/,
bench/doublets/ and bench/ingest/.
How it works
- Lazy, fused, streamed. Raw counts stay in one compact store — CSR in
memory, a Polars triplet frame, or a directory of Parquet parts read one at a
time. Cell/gene filters and
normalize_total/log1pare recorded and applied per cell inside each kernel, so every step is a single pass with no intermediate copies. - Exact PCA without densifying. One pass accumulates the gene × gene Gram
matrix from sparse rows (threads own disjoint row blocks), an eigen-solver
gives the loadings, a second pass projects cells.
sc.pp.scale(max_value)is applied exactly: zero entries map to a per-gene constant, so the scaled matrix is a sparse matrix plus a rank-one term that centring removes. - kNN. Exact search with tiled GEMM (the FAISS "flat" trick) for small data; above 20k cells an inverted-file index — cells bucketed by k-means, each bucket searched against its 20 nearest buckets, like cell lists in molecular dynamics — polished by NN-descent (99.7% recall on 108k PBMC cells).
- UMAP. umap-learn's objective and defaults, optimised in parallel by domain decomposition: each thread owns a range of cells, writes only those, and reads the rest from a snapshot refreshed 16× per epoch.
- Leiden. Traag et al. (2019): fast local moving, refinement, aggregation.
- DESeq2 in Rust. A step-by-step port of DESeq2's
DESeq()/results(), one parallel pass over genes per stage, with the NB likelihood evaluated without the cancellation R suffers at tiny dispersions. Pseudobulk DE for 8 cell types of Kang 2018 takes 7 s (R: 131 s, pydeseq2: 202 s). - Sparse Wilcoxon. All implicit zeros of a gene form one tie block with a closed-form rank, so only non-zero values are sorted.
- Harmony in Rust. The harmony2 algorithm with cells sorted by batch, so the per-batch sums and the ridge correction are GEMMs; per-cell updates in parallel.
Details: docs/concepts.md and docs/memory_model.md.
Data formats
read_10x_h5 (Cell Ranger v2/v3; backed= streams to Parquet), read_10x_mtx,
read_h5ad (no anndata needed), BioFrame.from_scipy / from_triplets / from_anndata, write_parquet / read_parquet, to_anndata, to_scipy.
Scope and limitations
- HVG flavours:
seurat,cell_ranger,seurat_v3/seurat_v3_paper(notpearson_residuals). - Batch integration: Harmony only (no scVI/BBKNN).
- DESeq2: Wald and LRT (no
lfcShrink,lfcThreshold), additive formulas (passdesign_matrix=for interactions); see docs/deseq2.md. ingestplaces query cells in the reference UMAP by umap-learn's transform initialisation (no further optimisation).- UMAP layouts are deterministic for a fixed thread count, not across thread counts.
Why "Chunked"?
CREST started as Polars expression plugins ("columnar"). That design could not
compute per-cell quantities correctly and was replaced by the engine described above:
raw counts stored once, filters and transforms recorded, and every step a fused
Rust pass over chunks of cells. Polars remains the table layer (obs, var,
results) and the Parquet reader. The acronym stays; the "C" now says what the
engine does.
License
MIT
Metadata
Release files for crest-sc 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| crest_sc-0.3.0.tar.gz | 658.1 kB | Details |
Built distributions (wheels)
Total release size: 19.5 MB
Release files / crest_sc-0.3.0.tar.gz
| Download URL | crest_sc-0.3.0.tar.gz |
|---|---|
| Size | 658.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ea82dfd4d89fe795436498509ae0abef538104201bbe1cb6b4b9318d88751339
|
|
BLAKE2b-256 checksum How to use checksums |
b41dc903e722f6d9597eb93259423b27cd2ed82f9ea0eb647b15e3e5055d4240
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-win_arm64.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-win_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
a3b0f791a8c3ffc0ff4213e3e102bb338333d73f27182fbcba04c584cf34b4f8
|
|
BLAKE2b-256 checksum How to use checksums |
c74f849ca30818e0de838b91e9740848fbe7505f2c30ce63a9bfea2a42c05c7a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-win_amd64.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1f8aed8c1891bc7b3c395337a3f315131fe94aa88739544f6eb048e2ae6a2bf9
|
|
BLAKE2b-256 checksum How to use checksums |
5d8c11aff427976df3f9b1b477d4a5c6534b26a88e22ad9d54a88c0527766b71
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-win32.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-win32.whl |
|---|---|
| Size | 1.0 MB |
| Tags | CPython 3.10 Windows x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
581a0850ca89437364cc3279c4b579b5a9e6e883f71f49b2235b9192e039f26d
|
|
BLAKE2b-256 checksum How to use checksums |
ad004d3bd94e7471202c9512e8273f1027e8b044924b44441813c03a7c382453
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-musllinux_1_2_x86_64.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
69ae3f0012804715e8d1fdda8329c0c9ccfe09707ec43fede55279f338b0bcd8
|
|
BLAKE2b-256 checksum How to use checksums |
966a0674cfdcc9e75ba4f10dc6f694494aa0798e5d577005f39e0d5f1d57564b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-musllinux_1_2_i686.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-musllinux_1_2_i686.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
c043748664602caab26aad34bc818483a1838641f2d7903593beba35d4e5dbe6
|
|
BLAKE2b-256 checksum How to use checksums |
c5e4fc06695474f532f85617be454fc88119c86a2bd6d56504eb440ddc6ac94d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-musllinux_1_2_armv7l.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-musllinux_1_2_armv7l.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.10 Linux musl 1.2+ ARMv7l abi3 |
|
SHA-256 checksum How to use checksums |
29286786b67047911ccb5cfcb92a9e881ddb85fed0e12b26b80af232c8fe2682
|
|
BLAKE2b-256 checksum How to use checksums |
b10b3ec0dcf2b1abf06e1309158d1f04c00d57734b91a9be4aa40fc9330d92c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-musllinux_1_2_aarch64.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.10 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
cd860fe844d0206f968e5cbfd13ae1ec6eda56adde5d4251da1eb2b259805f69
|
|
BLAKE2b-256 checksum How to use checksums |
7a52a8f9802681be1b175694c3904a10763040799f1b5aa83496a6bbf7dd52ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
498f458e034682e5f6164ec501fff41e55caff8f6a100cfaa445480c8c63d359
|
|
BLAKE2b-256 checksum How to use checksums |
e7441419a24eba4d72f0531f86423c53f13ce1b353cc230feb2fb086155fe8b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
c1e36b224eec2d029c3dc3deb9451cda782ce7f0487bd9cf4495cd89eb959279
|
|
BLAKE2b-256 checksum How to use checksums |
d66ce932ebea2fc4fa3cd32f5707bf4ceb837daeef42ac3702d50c89369dcd4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARMv7l abi3 |
|
SHA-256 checksum How to use checksums |
c4cd04c259262d9463555056397aafdbb4054313bdc5428d9f5193150188495b
|
|
BLAKE2b-256 checksum How to use checksums |
7168faf0457075e72cf6019d5411ec57a48b90e1aaa39f72fe94b5a2b15f7ce8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
3f01c6046083679c6f82fc05a6116d2af4b56129ba6bbe9f5e82923ee31c1f2a
|
|
BLAKE2b-256 checksum How to use checksums |
ea83e977dbff25186ed3d11609afd2b6da3d3be52d100d7af271ccc36142c3ec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b9cf0865e83cebd81564d2ecf88e4e6e9a1eace2541433cfcdbcd82999c025ac
|
|
BLAKE2b-256 checksum How to use checksums |
e373e1a3f9c3948d2c67949dcd8b9e19df9f972bbb1da5d322c78ccbf9ace337
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / crest_sc-0.3.0-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | crest_sc-0.3.0-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
d8f542ae0ed5e6cb14f3a782fa942b4ed39a798b5c9950c6169f2287a4c3a8a1
|
|
BLAKE2b-256 checksum How to use checksums |
b8eb95d8160b34652f874e5ebe7ad307432891b4bb39d5ed95d2326c1d3f240f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|