Champollion learns an interpretable cross-modality cost from paired bridge cells and uses it to integrate unpaired single-cell profiles across modalities. It is designed for scverse workflows with AnnData and MuData, and exposes utilities for annotation transfer, barycentric projection, and interpretation of the learned interaction matrix.
The package is currently being prepared for its first public release. During development, install it from a local checkout:
git clone git@github.com:cantinilab/champollion.git
cd champollion
pip install .Optional Weights & Biases logging can be installed with:
pip install "champollion[wandb]"Documentation and tutorials are available at champollion-omics.readthedocs.io.
The PBMC tutorial included in tutorials/pbmc_tutorial.ipynb demonstrates fitting Champollion on bridge cells, transporting unpaired cells, transferring annotations, and building a joint visualization.
For a concrete application, see the PBMC tutorial; the example below is only a compact overview of the API. Champollion is fitted on a paired bridge stored in a MuData object. It can then be applied to modality-specific AnnData objects containing unpaired cells.
from champollion import Champollion
model = Champollion(
epsilon=1.0,
gamma=0.001,
lambda_prior=20.0,
use_keops=False,
device="auto",
random_state=0,
)
model.fit(
mdata_bridge,
modality_1="rna",
modality_2="atac",
x_1_rep="X_pca",
x_2_rep="X_lsi",
y_prior_1_rep="X_prior",
y_prior_2_rep="X_prior",
)
result = model.transport(
{"rna": adata_rna, "atac": adata_atac},
x_reps={"rna": "X_pca", "atac": "X_lsi"},
y_prior_reps={"rna": "X_prior", "atac": "X_prior"},
)
predicted_atac_labels = result.transfer_obs(
key="cell_type",
source="rna",
kind="categorical",
)The learned matrix can be inspected directly:
A = model.A_dataframe()
top_links = model.top_interactions("CD18", modality="protein", k=10)The preprint is in preparation. Citation information will be added before the official release. if you're looking for the repository to reproduce the results in the article, please see the champollion_reproducibility repository!
