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

# Testing & coverage
.pytest_cache/
.tox/
.coverage
.coverage.*
htmlcov/
coverage.xml
*.cover

# Type-checking & linting
.mypy_cache/
.ruff_cache/

# Snakemake (created by --dry-run too — both repo-root and benchmarks/)
.snakemake/

# Virtual environments
.venv/
venv/
env/
.python-version

# Environment files
.env
.env.local

# Documentation
docs/site/
site/

# OS
.DS_Store
Thumbs.db

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

# R session junk (created when R is opened in the repo directory)
.Rhistory
.RData
.Rproj.user

# Local Claude Code dev context — kept on disk (Claude reads these from the
# filesystem regardless of git tracking) but not shipped in the public repo
CLAUDE.md
.claudeignore

# Local data / scratch
scratch/
tmp/
*.log

# Benchmark candidate-curation: local-only tools + scratch (not package content;
# the curation decisions they produced are captured in the committed evidence
# files: ground_truth.tsv / read_state_evidence.tsv / screening_log.tsv)
benchmarks/screen_read_state.py
benchmarks/*_screen.tsv

# Project-metadata builder API caches (regenerable from OpenAlex / figshare / Zenodo)
benchmarks/.oa_cache.json
benchmarks/.discovery_doi_cache.json

# Example run artifacts — notebooks self-generate demo/, run_public_accession.sh writes demo_public/
examples/**/demo*/
.ipynb_checkpoints/

# Transient HPC run-result tarballs (scp'd back for analysis, not repo content)
full_list_*.tar.gz
