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

# Distribution / packaging
.Python
build/
dist/
sdist/
wheels/
*.egg-info/
*.egg
MANIFEST

# Virtual environments
.venv/
venv/
env/
ENV/

# Testing and coverage
.pytest_cache/
.coverage
.coverage.*
coverage.xml
htmlcov/
.tox/
.nox/

# Type checking and linting caches
.mypy_cache/
.ruff_cache/
.dmypy.json
dmypy.json

# Documentation build
site/

# ----------------------------------------------------------------------
# Secrets
#
# The framework needs no credentials to run, so nothing here should ever
# exist. These rules are preventive: a local .env added later for a
# downstream integration must not be committed by accident.
# ----------------------------------------------------------------------
.env
.env.*
!.env.example
*.pem
*.key
credentials.json
secrets.yaml
secrets.yml

# Editors and local tooling
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# ----------------------------------------------------------------------
# Project artefacts
#
# Trained models and reports are reproducible from configuration and are
# frequently large, so they are not tracked. The sample corpus under
# data/sample/ is the deliberate exception: it is small and the examples
# depend on it.
# ----------------------------------------------------------------------
artifacts/

# Output of scripts/verify_e2e.py. Regenerable, and large — a single
# mid-sized wiki produces hundreds of megabytes of extracted corpus and
# mined pairs, which is not something to carry in git history.
verify-output/
verify-*.txt

# Evaluation output is regenerated by every run. The directory itself is
# kept so a fresh clone has somewhere to write.
reports/*
!reports/.gitkeep

# Working corpora are large and often licensed, so they stay local. This
# includes the real training and evaluation corpora — data/corpora/ holds
# the downloaded judgment PDFs and MILPaC workbooks, and data/dumps/ the
# Wikipedia dumps — none of which belong in git history for reasons of
# size and licence both. It is also the boundary that keeps anything that
# is not openly licensed out of the repository by default; a corpus lands
# here, is declared, and is never committed. The committed exceptions are
# the small sample corpus the examples and docs depend on, and the
# directory's own documentation.
data/*
!data/sample/
!data/README.md

# Trained model artefacts. These are build outputs, reproducible from a
# config file, and large. Note this also covers `vectors.npy` and
# `tokenizer.model` inside an experiment directory.
*.model
*.npy
*.npz

# Adapted checkpoints. The default is to ignore them, for the reason
# above. Three are deliberate exceptions, each ~2.4 MB (trivial):
#   - models/indic-v1/ — the original two-language (hi/ta) LoRA. It is
#     *not* reproducible from anything here (it predates `qfme adapt`,
#     and its base checkpoint is an external name whose contents can
#     change), the early published numbers were measured on it, and the
#     integration tests load it as a fixture. An artefact that carries
#     claims and cannot be rebuilt has to be kept.
#   - models/prod-a70s30/ — the previous canonical adapter: the
#     ten-language 70:30 blend that beats v2 on all three published Indic
#     instruments. Kept tracked as the Indic-measured reference; superseded
#     as the serving artefact by prod-a70s30-fr (below).
#   - models/prod-a70s30-fr/ — the current production adapter: prod-a70s30's
#     exact 1.0M blend plus ~30k en↔fr OPUS-100 pairs. On the held-out
#     FLORES-200 global baseline (15 world languages, scored on CUDA) it is
#     a strict, reproducible win over prod-a70s30 on all 15, at no Indic cost
#     (A/B/C neutral within noise). Canonical serving artefact; ships like a
#     release binary and pins the published global numbers to exact weights.
models/*
!models/indic-v1/
!models/prod-a70s30/
!models/prod-a70s30-fr/
!models/README.md
scratch_samanantar/
