mantispy.ds.jump_lite

Contents

mantispy.ds.jump_lite#

mantispy.ds.jump_lite(model='openphenom', annotate=True, cache_dir=None, **kwargs)#

JUMP-Lite Target-2: 1,536 wells, four imaging sites, one feature set at a time.

cpg0016-jump, the compact benchmark of Muñoz et al. [2026]. Four plates of the JUMP Target-2 plate map, one from each of source_3, source_4, source_5 and source_6, so the four batches are four different laboratories running the same 302 compounds with 64 DMSO wells each.

Every model covers the same 1,536 wells, which is what makes this a comparison rather than six datasets: the rows and the metadata are identical and only the feature block changes. Five are learned embeddings and one, "cp_measure", is the CellProfiler-equivalent measurement of the same images.

Parameters:
  • model (str (default: 'openphenom')) – Which feature set to read, one of ds.JUMP_LITE_MODELS. "dinov2_random" is the same architecture with untrained weights, which is the null model the benchmark scores the others against.

  • annotate (bool (default: True)) – Join the JUMP well and compound tables, which name the compound of each well. Downloads about 14 MB once and caches it.

  • cache_dir (str | Path | None (default: None)) – Where to keep the download. Defaults to mantispy.settings.cache_dir.

  • kwargs (Any) – Passed to mantispy.io.read_profiles().

Return type:

AnnData

Returns:

Wells by features at well resolution, indexed by plate and well, with Metadata_Source, Metadata_Batch, Metadata_Plate, Metadata_Well, Metadata_CellCount and, when annotated, Metadata_JCP2022, Metadata_Perturbation, Metadata_InChIKey and Metadata_Control.

Raises:

ValueErrormodel is not one of ds.JUMP_LITE_MODELS.

Notes

A dimension of a learned embedding is a coordinate in the model’s own basis, not a measurement with a name to parse, so for every model but "cp_measure" the annotation columns of var are supplied empty. Anything that reads var["feature_group"] or var["channel"], such as the feature families effect_sizes() colours by, has nothing to work with on those.

"cp_measure" is CellProfiler-style measurements and keeps its parsed compartment, feature group and channel. Its channel is the index cp_measure numbered its inputs by rather than the name of a stain, because the name lives in the acquisition metadata and not in the feature name.

The embeddings are not normalized. They are the model’s output on each well’s images, so a per-plate control normalization is still the first step.

The trained embeddings here carry the cell count in their leading components, where it can account for more of the variance than either the laboratory or the imaging site. The untrained "dinov2_random" does not, and neither does "cp_measure", whose per-cell measurements are averaged over the well. Measure it with evaluate_correction() before correcting for anything else, and read 12. Learned embeddings on why removing it is not obviously right.

References

Muñoz et al. [2026], Chandrasekaran et al. [2023], Weisbart et al. [2024].