buildx
.DS_Store
BPTK_Py/.DS_Store
*.DS_Store
.eggs/
*.*pyc
*__pycache
*.csv
*.log
results/
venv
.idea/
.ipynb_checkpoints/
.vscode
dist/
*.egg-info
build/
_build
test*.ipynb
.env
.claude
tests/state
/state
.mypy_cache/
.pytest_cache/

# Rust engine build artifacts
target/
Cargo.lock
BPTK_Py/_rust_engine*.so
BPTK_Py/_rust_engine*.pyd

# Generated Python files from XMILE compiler
# XMILE models (*.stmx) are compiled to Python during tests
tests/test_models/*.py

# marimo session/autosave caches (the notebook .py itself IS tracked)
__marimo__/

# Quarto documentation build
docs/tutorial/_output/
docs/tutorial/.quarto/
docs/tutorial/_freeze/
*.quarto_ipynb
# Quarto recreates this on every render; its two patterns are covered above
docs/tutorial/.gitignore

# What the pages write when they execute. All three are outputs of a lesson
# rather than inputs to one, so a render must not leave the tree dirty:
#   - export_data and exporting_simulation_results call export_scenarios()
#   - beergame_ql dumps a freshly trained q-table; training is stochastic, so the
#     file differs on every build. The q-tables the pages *read*
#     (q_tables_12500..50000.json) are genuine inputs and stay tracked.
docs/tutorial/model_library/customer_acquisition/export/
docs/tutorial/xmile/exporting_simulation_results/data/customer_acquisition.xlsx
docs/tutorial/model_library/beergame/data/q_tables_10.json

# uv artefacts. uv creates both in the repo root when it resolves a sandbox —
# the marimo engine does this, and the Pyodide checks will too. Neither belongs
# to the project, which builds with maturin and uses venv/.
# (.venv also ships its own .gitignore containing "*", so it hides itself — but
# that is uv's convention, not our rule, so state it explicitly.)
.venv/
uv.lock

# Build output: `just build-all` and the CI wheel job write here
dist/
platform-dist/
smoke/

# node, used only by the Pyodide test runner
node_modules/
package-lock.json

# Coverage output
.coverage
htmlcov/
