# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# Virtual environments
.venv/
venv/
ENV/
env/
.env
.env.*

# uv
.uv/

# Jupyter
.ipynb_checkpoints/
*.ipynb_checkpoints
profile_default/
ipython_config.py

# Testing / coverage
.pytest_cache/
.coverage
.coverage.*
htmlcov/
.tox/
.nox/
coverage.xml
*.cover
.hypothesis/

# mypy / ruff / type checkers
.mypy_cache/
.ruff_cache/
.pytype/
.pyre/

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

# macOS
.DS_Store
.AppleDouble
.LSOverride
Icon
._*
.Spotlight-V100
.Trashes

# Project-local
/data/raw/
/data/processed/
/data/cache/
*.parquet.tmp
*.jsonl.tmp

# Pipeline intermediate counts — regenerated by `make offline` / `make empirical`.
# They are large (3+ MB combined) and faithfully reproducible from
# data/raw_prompts.jsonl + the pinned tokenizer versions in data/lockfile.json.
/data/offline_counts.jsonl
/data/empirical_counts.jsonl
/data/empirical_progress.jsonl

# Session-local partial inputs (produced when resuming a partially-completed
# offline run). The canonical input is data/raw_prompts.jsonl.
/data/raw_prompts.remaining.jsonl

# Local tokenometer CLI pointer written by `llm_tokens_atlas/install_tokenometer.sh`.
# Machine-specific (absolute paths into a sibling repo); not portable.
.tokenometer-cli-path
.claude/
paper/
