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

# IF-Split cache: downloaded mmCIF (large). Manifests/locks in data/out/ are kept.
data/cache/*
!data/cache/.gitkeep

# Full-build / measurement run trees + their configs (large; regenerable). The split
# lists that ARE meant to ship live under examples/, not here.
data/run-*/
data/rs*/
data/*.yaml
data/domain-annotations-*.jsonl

# Zenodo deposit staging: keep the docs, never the payload. Staging the snapshot
# here would otherwise commit a ~471 MB candidates file.
data/zenodo-*/*
!data/zenodo-*/README.md
!data/zenodo-*/DESCRIPTION.txt
!data/zenodo-*/SHA256SUMS

# Build artifacts. The split itself is tiny (train/val/test.json + per-class test
# lists + the KB-scale manifest.json) and IS committed under examples/. Only the
# BULKY, regenerable companions are ignored — they belong in a GitHub Release:
#   candidates.jsonl (~335MB), ligands.tiers.json (~24MB), and the per-entry maps.
candidates.jsonl
dataset.lock
ligands.tiers.json
ligands.classes.json
clusters.json
splits.registry.json
splits.registry.json.tmp*
# ...but keep the committed example split (these live only under examples/).
!examples/**/manifest.json
!examples/**/train.json
!examples/**/val.json
!examples/**/test.json
!examples/**/test/*.json

# Tooling
.pytest_cache/
.mypy_cache/
.ruff_cache/

# Claude Code: share settings.json + skills (project conventions), ignore local + runtime.
.claude/*
!.claude/settings.json
!.claude/skills/
.claude/settings.local.json

# uv: commit uv.lock, ignore the managed virtualenv.
# (.venv is already covered above.)
