Libella
Memory-Optimized Spatial Transcriptomics GNN Pipeline
Libella is an end-to-end Graph Neural Network (GNN) framework designed to discover spatial ecotypes and map topological interfaces across spatial transcriptomics cohorts. By using contiguous spatial batching with $k$-hop preservation, it achieves $O(N)$ compute scalability and $O(1)$ peak memory footprint relative to dataset size. Natively supports NVIDIA CUDA and Apple Silicon (MPS).
Quick Start
Execution is fully CLI-driven via a single .csv manifest file pointing to your .h5ad datasets.
# Standard discovery run
libella manifest.csv --out-dir ./results --mode DISCOVERY
# Fast development test (restricts epochs & cell counts)
libella manifest.csv --out-dir ./results_dev --mode DEV
Installation
Requires Python $\ge$ 3.9.
pip install libella
Data Preparation
Input .h5ad files must feature Human HGNC gene symbols (e.g., CD8A) in adata.var_names.
- Mouse / Rat Data: Automatically converted to uppercase (e.g.,
Sox2$\rightarrow$SOX2) for cross-species compatibility. - Ensembl IDs: Must be converted to HGNC symbols before execution.
import mygene
import scanpy as sc
# Load data
adata = sc.read_h5ad("my_data.h5ad")
# Query Ensembl to HGNC mapping
mg = mygene.MyGeneInfo()
results = mg.querymany(
adata.var_names,
scopes="ensembl.gene",
fields="symbol",
species="human"
)
# Remap gene symbols
symbol_map = {res["query"]: res.get("symbol", res["query"]) for res in results}
adata.var_names = [symbol_map.get(g, g) for g in adata.var_names]
adata.write_h5ad("my_data_mapped.h5ad")
Manifest Schema
The manifest.csv defines the pipeline execution graph. It requires filepath, discovery, and projection fields.
filepath,dataset_id,patient_id,discovery,projection
/path/to/sample1.h5ad,Dataset_A,Patient_1,True,True
/path/to/sample2.h5ad,Dataset_A,Patient_2,False,True
| Flag | Value | Description |
|---|---|---|
discovery |
True |
Computes consensus genes, biological priors, and trains the core GNN. |
projection |
True |
Projects the trained GNN model onto the sample to extract spatial topology. |
Note: Samples marked with
discovery=Falseandprojection=Trueare evaluated as hold-out validation cohorts.
Configuration & Hyperparameters
All pipeline parameters can be overridden at runtime via CLI arguments.
libella manifest.csv \
--out-dir ./results \
--epochs 100 \
--batch-size 15000 \
--lr-base 0.0005
Core Parameters
| Parameter | Default | Description |
|---|---|---|
--epochs |
30 |
Number of GNN training iterations |
--batch-size |
10000 |
Spatial chunk size for memory bounding |
--top-n-genes |
2000 |
Number of spatial consensus genes to extract |
--k-neighbors |
11 |
Physical graph neighbors constructed per node |
--k-hops |
2 |
GNN message-passing neighborhood depth |
--dict-temp |
0.3 |
Softmax temperature for spatial dictionary learning |
--entropy-pruning |
True |
Toggles batch-effect artifact pruning |
Run
libella -hto inspect the full list of CLI flags.
Output Directory Structure
Executing the pipeline populates --out-dir with the following structure:
results/
├── graphs/
│ └── *.pt # Serialized PyTorch Geometric spatial graphs
├── individual_samples/
│ └── *.csv # Sample-specific topological metrics
└── out/
├── final_gnn_model.pt # Trained GNN weights checkpoint
├── Global_Smoothed_Macro_Domains.parquet # Cell-level spatial domain assignments
└── Global_Meta_Topology_Continuous_Matrix.csv # Cohort-wide topological matrix
Release files for libella 0.1.8.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| libella-0.1.8.4.tar.gz | 102.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| libella-0.1.8.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 208.8 kB
Release files / libella-0.1.8.4.tar.gz
| Download URL | libella-0.1.8.4.tar.gz |
|---|---|
| Size | 102.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
efa028805ba74fed04d96343d1b1fafdd5b5dbdbf7b97137577fa2159b43daba
|
|
BLAKE2b-256 checksum How to use checksums |
30718b4bbbf0f32ba6c2bbd769b2cb292c8b57c26657c9744bb3a32560cc28d7
|
| 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 Aug 27, 2026.
Transparency logRelease files / libella-0.1.8.4-py3-none-any.whl
| Download URL | libella-0.1.8.4-py3-none-any.whl |
|---|---|
| Size | 106.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
938b7ec9788d7ad3c3c56a9195ca9c846d0fd37cf8f3fbc38a5a4a8279ea3a3f
|
|
BLAKE2b-256 checksum How to use checksums |
61138845dc0d9db5ac6829af058287b7a54ee25d2b7fb5cac57ea9a9622e3e87
|
| 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 Aug 27, 2026.
Transparency log