# Python
__pycache__/
*.py[cod]
.venv/
venv/
dist/
build/
*.egg-info/
.mypy_cache/
.ruff_cache/
.pytest_cache/
.coverage
.coverage.*
htmlcov/
coverage.xml

# Data — aggressively. Nothing under the top-level data/ is ever tracked.
# Anchored: an unanchored `data/` also swallows `sakata/data/`, which is a
# package directory, not a data directory.
/data/
*.parquet
*.csv
*.zip
*.pkl
cache/
checkpoints/
*.pt
*.safetensors

# Secrets
.env
.env.*
*.key
*.pem
secrets/

# Editors / OS
.idea/
.vscode/
.DS_Store
Thumbs.db

# Carve-outs: test fixtures are tracked. Keep them in kilobytes.
#
# `**` rather than a single level: source fixtures live in per-source
# subdirectories, and a carve-out that only reached the top level silently
# dropped the archives while committing their checksum sidecars — the working
# tree looked complete and CI did not. The pre-commit large-file hook is what
# keeps "in kilobytes" honest; this pattern is not the size guard.
!tests/fixtures/
!tests/fixtures/**
