# Python
__pycache__/
*.py[cod]
*$py.class
*.so
*.egg
*.egg-info/
dist/
build/
.eggs/

# Virtual environments (uv)
.venv/
venv/
env/

# uv
.uv/
# `uv.lock` is deliberately NOT ignored. The usual advice for a library is to
# leave it out, because what a user installs is set by the `>=` floors in
# `pyproject.toml` and the lock has no say in it. That advice is about the
# published package, and it still holds — this lock constrains the development
# and CI environment only.
#
# It is committed because that environment has an output: the tutorial figures
# are checked into the repository, and they are drawn on a developer's machine.
# While this file was ignored, CI resolved fresh, every contributor resolved
# fresh, and an umap-learn/scikit-learn/NumPy step moved ten CITE-seq figures by
# 11% of their pixels without moving a single number the vignettes assert.

# Testing
.pytest_cache/
.coverage
coverage.xml
htmlcov/
.tox/

# Built documentation (mkdocs.yml's site_dir); GitHub Pages builds its own
site/

# IDE
.vscode/
.idea/
*.swp
*.swo

# Data cache
truecell_data/
~/.truecell_data/

# Regenerable tutorial intermediates (kept out of the repo; figures are committed)
tutorials/figures_hashing/r_calls.csv
tutorials/figures_mixscape/r_calls.csv
tutorials/figures_mixscape/hvg_features.txt
tutorials/figures_integration/r_calls.csv
tutorials/figures_integration/hvg_features.txt
tutorials/figures_refmap/r_calls.csv
tutorials/figures_refmap/hvg_features.txt
tutorials/figures_cellcycle/r_calls.csv
tutorials/figures_cellcycle/s_genes.txt
tutorials/figures_cellcycle/g2m_genes.txt
tutorials/figures_cellcycle/ifn_genes.txt

# OS
.DS_Store
Thumbs.db
tutorials/figures_dimreduc/r_pca.csv
tutorials/figures_dimreduc/r_jackstraw_p.csv
tutorials/figures_dimreduc/r_jackstraw_pcs.csv
tutorials/figures_dimreduc/r_ica.csv
tutorials/figures_dimreduc/r_tsne.csv
tutorials/figures_dimreduc/hvg_features.txt
tutorials/figures_dimreduc/cells.txt
tutorials/figures_sketch/r_leverage.csv
tutorials/figures_sketch/r_sketch_composition.csv
tutorials/figures_sketch/r_sketch_cells.csv
tutorials/figures_sketch/r_projection.csv
tutorials/figures_sketch/hvg_features.txt
tutorials/figures_sketch/cells.txt
tutorials/figures_sketch/ifnb_data.lazy
tutorials/figures_objects/hvg_features.txt
tutorials/figures_objects/cells.txt
tutorials/figures_objects/py_anchors.json
tutorials/figures_objects/r_anchors.json
tutorials/figures_svf/cells.txt
tutorials/figures_svf/py_anchors.json
tutorials/figures_svf/r_anchors.json
tutorials/figures_svf/r_moransi.csv
tutorials/figures_de/groups.csv
tutorials/figures_de/py_summary.json
tutorials/figures_de/py_*.csv
tutorials/figures_de/r_*.csv
tutorials/figures_lazy/cells.txt
tutorials/figures_lazy/py_anchors.json
tutorials/figures_lazy/r_anchors.json
tutorials/figures_lazy/py_variable_features.txt
tutorials/figures_lazy/r_variable_features.txt
tutorials/figures_lazy/r_features.txt
tutorials/figures_lazy/r_hvf*.csv
tutorials/figures_lazy/*_markers_wilcox.csv
tutorials/figures_lazy/truecell_store/
tutorials/figures_lazy/bpcells_store/
tutorials/figures_lazy/bpcells_store_int/

# Visium tutorial — generated anchors and feature lists (figures are committed)
tutorials/figures_visium/py_anchors.json
tutorials/figures_visium/r_anchors.json
tutorials/figures_visium/py_variable_features.txt
tutorials/figures_visium/r_variable_features.txt
# CITE-seq tutorial — CLR summary + per-cell WNN weights (figures are committed)
tutorials/figures_multimodal/py_adt_clr.csv
tutorials/figures_multimodal/r_adt_clr.csv
tutorials/figures_multimodal/py_cell_weights.csv
tutorials/figures_multimodal/r_cell_weights.csv
tutorials/figures_multimodal/py_anchors.json
tutorials/figures_multimodal/r_anchors.json
# PBMC 3k guided tutorial — the end-to-end handoff (figures are committed)
tutorials/figures/py_cell_meta.csv
tutorials/figures/r_cell_meta.csv
tutorials/figures/py_hvg.csv
tutorials/figures/r_hvg.csv
tutorials/figures/py_markers.csv
tutorials/figures/r_markers.csv
tutorials/figures/py_resolutions.csv
tutorials/figures/r_resolutions.csv
tutorials/figures/py_anchors.json
tutorials/figures/r_anchors.json
# PBMC 8k subclustering tutorial — global + T/NK compartment handoff
tutorials/figures_advanced/py_cell_meta.csv
tutorials/figures_advanced/r_cell_meta.csv
tutorials/figures_advanced/py_tnk_cells.csv
tutorials/figures_advanced/r_tnk_cells.csv
tutorials/figures_advanced/py_anchors.json
tutorials/figures_advanced/r_anchors.json
# SCTransform tutorial — the per-gene model handoff (figures are committed)
tutorials/figures_sctransform/py_sct_model.csv
tutorials/figures_sctransform/r_sct_model.csv
tutorials/figures_sctransform/py_anchors.json
tutorials/figures_sctransform/r_anchors.json
tutorials/figures_sctransform/py_variable_features.txt
tutorials/figures_sctransform/r_variable_features.txt

# T-int anchor internals — regenerated by anchors_tutorial.py / anchors_verify.R
tutorials/figures_anchors/cells_*.txt
tutorials/figures_anchors/anchor_features.txt
tutorials/figures_anchors/py_anchors_*.csv
tutorials/figures_anchors/r_anchors_*.csv
tutorials/figures_anchors/py_summary_*.json
tutorials/figures_anchors/r_summary_*.json

# Benchmark scratch. `tutorials/benchmark/results/*.json` is the data behind
# PERFORMANCE.md and is committed; the child processes' stdout and the
# step-boundary logs the parent consumes and deletes are not.
tutorials/benchmark/logs/
tutorials/benchmark/.steps.*.jsonl
tutorials/benchmark/tables.md
# The handoff files the truecell arm writes for the R arm — regenerated by
# every run, and only meaningful alongside the run that wrote them. The glob
# covers the archived sweeps too; they are 1 MB of the 1.2 MB each one weighs.
# (`results_refblas/` predates the glob and still has its copies tracked.)
tutorials/benchmark/results*/*_idents.csv
tutorials/benchmark/results*/xenium_cells.txt
