scPertEval — Evaluation Protocols for Perturbation Sequencing
scPertEval is a toolkit for experimenting with and sharing reference implementations of
evaluation protocols in single-cell perturbation studies, usable both as a command-line
interface and as a native Python API. The same catalog of protocols backs three actions:
score (score a model's predictions against ground truth), calibrate (calibrate a
protocol against empirical positive/negative controls per perturbation, reporting the Dynamic
Range Fraction (DRF) and Bound Discrimination Score (BDS)), and de (export per-gene
differential expression).
scPertEval is introduced in Towards Principled Evaluation of Single-Cell Perturbation Prediction Models, where we develop a taxonomy of evaluation protocols — decomposing them into representation, metric, score transformation, and reporting strategy — and use this package to assess protocol behavior across seven public perturbation datasets.
Schäfer, P. S. L., Reid, K. A., Boldyga, Z., Aksu, E. D., Hakem, H., & Saez-Rodriguez, J. (2026). Towards Principled Evaluation of Single-Cell Perturbation Prediction Models. bioRxiv. https://doi.org/10.64898/2026.07.23.740433
If you use scPertEval in your work, please cite that paper (see CITATION.cff).
→ Full documentation at https://scperteval.readthedocs.io/
Install
pip install scperteval
Or from this repo:
pip install "scperteval @ git+https://github.com/Virtual-Cell-Research-Community/scPertEval.git"
The Sinkhorn / optimal-transport metrics (the sinkhorn_w2_* protocols) need PyTorch and
GeomLoss, which are optional to keep the base
install light. Enable them with the sinkhorn extra:
pip install "scperteval[sinkhorn]"
Quick start
From the command line:
# calibrate protocols against built-in controls (DRF/BDS)
scperteval calibrate data/wessels23.h5ad -p all --de-method t-test
# score a model's predictions against ground truth
scperteval score data/wessels23.h5ad predictions.h5ad -p all
scperteval list protocols # also: de-methods | spaces | sources | calibrators
Or from Python — the same protocols, returning results in memory (see the Python API guide):
import scperteval as sp
prep = sp.prepare("data/wessels23.h5ad", "pearson_ctrl") # read + index once, reusable
result = sp.calibrate(prep, "pearson_ctrl", de_method="t-test")
result.aggregate # {"mean": …, "median": …} — calibrated DRF summary
result.per_perturbation # the per-perturbation detail table
Sample datasets are available at
https://storage.googleapis.com/scperteval/processed/<dataset>_processed_complete.h5ad.
Citation
If you use scPertEval, please cite the paper it accompanies:
@article{Schafer_2026_scPertEval,
author = {Sch{\"a}fer, Philipp S. L. and Reid, Kendall A. and Boldyga, Zach and
Aksu, Ekin D. and Hakem, Hugo and Saez-Rodriguez, Julio},
title = {Towards Principled Evaluation of Single-Cell Perturbation Prediction Models},
journal = {bioRxiv},
year = {2026},
doi = {10.64898/2026.07.23.740433},
}
Authors
scPertEval originates with the authors of that paper — Philipp S. L. Schäfer, Kendall A. Reid, Zach Boldyga, Ekin D. Aksu, Hugo Hakem, and Julio Saez-Rodriguez — and is maintained as a community project under the Virtual Cell Research Community.
Contributing: see CONTRIBUTORS.md.
Release files for scperteval 0.2.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 | |
|---|---|---|---|
| scperteval-0.2.0.tar.gz | 4.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| scperteval-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.5 MB
Release files / scperteval-0.2.0.tar.gz
| Download URL | scperteval-0.2.0.tar.gz |
|---|---|
| Size | 4.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ab5791623116c3afd70517c57958b5e2362fde45cab5c6c309fe9b6b79a3bfa6
|
|
BLAKE2b-256 checksum How to use checksums |
0f969daf2063c609cbf1c8805600ca69e048fc0646e1e2d5abe0bfe543027ba4
|
| 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 9, 2026.
Transparency logRelease files / scperteval-0.2.0-py3-none-any.whl
| Download URL | scperteval-0.2.0-py3-none-any.whl |
|---|---|
| Size | 66.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
60a8c07cbea6b3f90bbefa886d8362b119d8a918d3e111c3bc33431123da3dd7
|
|
BLAKE2b-256 checksum How to use checksums |
f851f135d04387b335731356264996e2055fdfedc3b318f9fe8c2bcbdf3cb441
|
| 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 9, 2026.
Transparency log