# === Python ===
__pycache__/
*.py[cod]
*.egg-info/

# === Instance virtual environment (the pinned almi is installed here via install_engine.py) ===
.venv/
venv/

# === Compiled extensions (the engine's co-located .pyd is re-included below) ===
*.pyd
*.so
*.dll

# === Test / benchmark caches ===
.pytest_cache/
.benchmarks/

# === Raw engine I/O + generated model data (regenerated by run_*.py / regenerate_inputs.py) ===
# The instance tracks NO csv: inputs/ and outputs/ are produced deterministically.
*.csv

# === Generated Excel validation workbooks + metadata (rebuilt by validation/build_all.py) ===
validation/workbooks/

# === Transient run outputs + scratch ===
_*.txt
_*probe*.py
.cohort_tmp/
sample_input_generators/.gaap_hist_tmp/

# === Engine-update process artifacts (baseline captures + backups + regression reports) ===
_engine_update_*/

# === Financial-statements viewer WIP cache ===
analytics/outputs/_fs_capture.pkl
analytics/outputs/_capture_log.txt

# === Claude Code per-user settings (regenerated locally; never committed) ===
.claude/settings.local.json

# === OS ===
.DS_Store
Thumbs.db

# === DELIVERED ENGINE — vendored & committed so a fresh clone already has the engine ===
# The frozen _almi/ snapshot (almi package + co-located _almi_core .pyd + data tables +
# engine docs + BUILD_INFO.txt) is committed. This negation MUST be last so it overrides
# the broad *.pyd / *.csv rules above for everything under _almi/.
!_almi/
!_almi/**
