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

# Virtual environments
.venv/
venv/
env/

# Test / coverage
.pytest_cache/
.coverage
htmlcov/

# IDE
.vscode/
.idea/
*.swp

# Worktrees
.worktrees/

# HuggingFace cache
.cache/

# Environment variables
.env
.env.*
!.env.example
!benchmarks/.env.example

# Secrets / credentials — the repo must never be the leak path.
# (A live HF write token exists in a Modal secret; rotation is deferred, so
# belt-and-braces here in case one is ever written to the working tree.)
.pypirc
*token*
*secret*
*.key
*.pem
# ...but NEVER shadow the model tokenizer artifacts (tokenizer.json /
# tokenizer_config.json) — those are shipped files, not credentials. The
# `*token*` rule above would otherwise silently ignore them.
!*tokenizer*
!*.key.example

# Benchmark cache (opt-in, resumable runs)
benchmarks/.cache.sqlite
benchmarks/**/results/*.pkl

# Synthetic POPIA training set (derived artifact, regenerated by scripts/expand_popia_seeds.py)
data/popia_train.jsonl

# Fine-tune outputs (derived artifact, regenerated by scripts/train_popia.py)
out/
