Everything here uses the slim package (src/slim/, installed via
pip install -e . from the repo root). Model logic itself lives in the
package, not here — most files under scripts/ are thin CLI entrypoints or
genuinely self-contained one-off scripts.
scripts/
models/ SLIM CLI entrypoints (package-backed) + comparison baselines/benchmarks (self-contained)
ablation/ Hyperparameter and training-sample ablation sweeps for SLIM
data_prep/ Raw-dataset -> GEARS-format preprocessing
eval/ Metric computation between a predicted and real result.h5ad
plotting/ Figure generation from saved_models/*/cell-eval-results/results.csv
reverse/ Inverse-problem models: predict which gene was perturbed from an expression shift
| ...do this |
use this |
| Run SLIM on a single-perturbation dataset |
scripts/models/run_slim.py |
| Run SLIM on a dataset with single + double perturbations (e.g. Norman) |
scripts/models/run_slim_combo.py |
| Run SLIM on several embedding sources at once (STRING + GenePT + DepMap) |
scripts/models/run_slim_concat.py |
| Try a different gene basis (NMF/autoencoder/random) or bias term |
run_slim.py --basis_method ... --bias_method ... (no separate script needed) |
| Sweep K / lambda_reg |
scripts/ablation/hp_sweep.py (single-pert) or combo_hp_sweep.py (combo) |
| Sweep the fraction of training perturbations used |
scripts/ablation/train_sample_sweep.py |
| Preprocess a raw dataset into GEARS format |
scripts/data_prep/data_process.py |
| Score a result.h5ad against ground truth |
scripts/eval/run_eval.py <pred.h5ad> <real.h5ad> <outdir> |
| Make comparison figures |
scripts/plotting/make_figures.py and siblings |
| Predict the perturbed gene from an expression shift |
scripts/reverse/*.py |
| Run a benchmark model (GEARS, CPA, scGPT, scLAMBDA, Ridge, Linear, MLP, TrainMean) |
scripts/models/run_<model>.py |
- run_slim.py, run_slim_combo.py, run_slim_concat.py are thin wrappers
around the slim package — they hold CLI argument parsing and dataset
looping only. Model logic lives in slim.model / slim.model_combo
(run_slim_concat.py adds only the embedding-table assembly, via
slim.embeddings.load_concat_h5_embeddings).
- Everything else (run_gears.py, run_cpa.py, run_scgpt.py,
run_sclambda.py, run_ridge*.py, run_linear*.py, run_mlp.py,
run_autoencoder*.py, run_trainmean*.py) is a comparison
baseline/benchmark. These are intentionally self-contained single files —
they only depend on slim.scaffold/slim.eval for output formatting,
not on the SLIM model itself. No shared abstraction is expected here.