# Python
.venv/
__pycache__/
*.pyc
.pytest_cache/
.ruff_cache/
.mypy_cache/
dist/
build/
*.egg-info/

# uv
# uv.lock is intentionally committed (single lockfile for the workspace)

# Node / frontend
node_modules/
.next/
out/
apps/web/.turbo/
apps/web/next-env.d.ts

# Built SPA copied into the wheel at build time — directory tracked so hatchling
# force-include doesn't fail on a fresh clone; only the contents are ignored.
packages/pulsegrad/src/pulsegrad/_webdist/*
!packages/pulsegrad/src/pulsegrad/_webdist/.gitkeep

# Local run data
.pulsegrad/
benchmarks/eval/results/

# MkDocs build output
site/

# Editors / OS
.DS_Store
.idea/
.vscode/*
!.vscode/extensions.json

.claude