# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

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

# OS
.DS_Store
Thumbs.db

# Project specific - video outputs in root (assets/videos are tracked)
/*.mp4
/*.avi
/*.mov
/*.mkv

# Ignore generated GIFs in root (assets/gifs are tracked)
/*.gif

# Ignore generated images in root (assets/images are tracked)
# Keep assets folder tracked
!assets/
!assets/**

# Claude Code
.claude/

# Generated media in examples/ (keep the .py scripts + data .csv, not the renders)
examples/**/*.mp4
examples/**/*.avi
examples/**/*.mov
examples/**/*.mkv
examples/**/*.png
examples/gallery_out/
# keep the demo render that ships with the repo (comment MUST be on its own line:
# an inline comment on a negation line becomes part of the pattern and breaks it)
!examples/us_energy_flow.mp4
# Downloaded soundtracks (often copyrighted) - never commit
examples/music/

# Temporary files
*.tmp
*.temp
*.log
