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.5
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.5.tar.gz | 104.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| libella-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 215.8 kB
Release files / libella-0.1.5.tar.gz
| Download URL | libella-0.1.5.tar.gz |
|---|---|
| Size | 104.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3a8eb459e1d40892ff28fddf738afdfe9ce941be4295ed084bc729d8c04c3ad6
|
|
BLAKE2b-256 checksum How to use checksums |
4c5cd1905aabba17a85b6cafb19832c8a3c567855bd2bf6b3d52f80f6dec2792
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Release files / libella-0.1.5-py3-none-any.whl
| Download URL | libella-0.1.5-py3-none-any.whl |
|---|---|
| Size | 111.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
47facb7a5fabea76fcf80825aa9c56037f2cea58b084fee8099c8301d7a7904d
|
|
BLAKE2b-256 checksum How to use checksums |
3933f05d0e8b371cad4f079b41753b5c2cb636ee8adb4c4bc86e77665e2062e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|