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

# uv
.python-version

# Node / Next.js
node_modules/
webui/.next/
webui/out/

# Metal
metal/build/

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

# Testing
.coverage
htmlcov/
.pytest_cache/
.mypy_cache/
.ruff_cache/

# Benchmarks (local results only)
bench/**/results/
bench/**/*.json
bench/**/*.csv

# Environment
.env
.envrc

# Logs
*.log

# Models (too large for git) — root-anchored, NO trailing slash so it also matches the
# `models` symlink to an external drive (a trailing slash would match dirs only).
/models

# Internal / development
.claude/
reference/
# Local archive of the pre-refocus tree (never published)
/_archive_yunshu/
PROGRESS_GUIDE.md
CLAUDE.md
reports/

.build/
testresource/
# Auxiliary tool venvs (oMLX comparison env, etc.) — large, never committed
.venvs/

# The broad `reports/` rule above also catches docs/reports/, but that dir IS the
# deliverable (unified report + trend charts) — track it, except the unbounded
# local version-history snapshots.
!docs/reports/
!docs/reports/**
docs/reports/history/
docs/research/
scripts/research/local.env
