# Python
__pycache__/
*.py[cod]
*.egg-info/
.eggs/
build/
dist/
.pytest_cache/
.hypothesis/
.mypy_cache/
.ruff_cache/

# Environments
.venv/
venv/
env/
.env

# Data & caches (never commit downloaded datasets or the census cache)
data/
*.h5ad
*.h5
*.loom
cellxgene_census_cache/
*.zarr/
*.tiledb/
*.mtx
*.tsv.gz

# Run outputs: ignore everything, keep the directory.
pilot/results/*
!pilot/results/.gitkeep
pilot/cache/

# Coverage & logs
.coverage
htmlcov/
*.log

# Editors
.vscode/
.idea/

# Notebooks
.ipynb_checkpoints/

# OS
.DS_Store
Thumbs.db

# Amendment 4 Part A's upper-bound reproducer keeps a resume ledger beside its artifact. The
# committed record is the dated JSON/CSV, which already carries every per-seed replicate; the
# ledger is a cache, following pilot/testsel/ committing only its summary.
pilot/upper_bound_check/replicates.jsonl

# Claude Code session scratch (worktrees are ephemeral; agents and skills ARE tracked)
.claude/worktrees/
