# ── private data and artefacts ───────────────────────────────────────────
# No real document enters the repository. The suite's fixtures are generated on
# the fly by PyMuPDF, with invented text — precisely so that nobody is ever
# tempted to commit a real PDF "just to reproduce the bug". This repository sits
# a few directories away from the archive the library reads: `git add -A` here
# is one keystroke away from publishing a case file.
data/
private/
acervo/
pdfs/
saidas/
outputs/
*.pdf
*.csv
*.jsonl
*.txt.gz
# Extraction output carries the document's text, which is the thing that must
# not leak — even when the file it came from stayed outside.
*.extraction.json

# ── model weights (downloaded, never versioned) ──────────────────────────
# `engines/models.py` fetches PP-OCRv6 once into ~/.cache/autosxtract. Anything
# that lands in the tree instead is a large binary in the history for ever.
*.onnx
*.pt
*.pth
*.safetensors
modelos/
models/
.cache/

.env
.env.*
credentials*
secrets*

# ── exceptions: what the blunt rules above must NOT swallow ──────────────
# The rules above are blunt on purpose, and blunt rules catch the wrong thing
# eventually. They already did: `data/` matches at ANY depth, so
# autosxtract/patterns/data/ — the Portuguese pattern tables, which are SOURCE,
# not archive — was excluded from the repository. The wheel still carried them
# (hatchling reads the filesystem, not the index), so nothing failed here; a
# fresh clone is where it would have failed, with a lexicon that does not exist.
#
# Re-including works because the parent directories are not excluded: git can
# still descend into autosxtract/ and tests/ to see these negations.
!autosxtract/**/data/
!autosxtract/**/data/**

# The suite's fixtures are generated by PyMuPDF with invented text.
!tests/fixtures/
!tests/fixtures/**

# ── python ───────────────────────────────────────────────────────────────
__pycache__/
*.pyc
*.pyo
*.egg-info/
.eggs/

# The venv is never committed and never shared. `make setup` rebuilds it from
# constraints/dev.txt, which is the copy that IS versioned; .venv-3.11 and
# friends come from bootstrapping a second interpreter to reproduce a CI leg.
.venv/
.venv-*/
venv/
.direnv/

# dist/ is a build artefact, rebuilt by `make build` and removed by `make
# clean`. Committing it lets a packaging test pass against a wheel built from
# code that no longer exists — the one failure mode a stale artefact causes that
# nothing else catches.
build/
dist/

# The MkDocs output. `make docs` and the CI docs job both build into ./site,
# and the published site is rebuilt from source by the docs workflow — a copy
# committed here would be a second, silently older answer to the same question.
site/

# ── caches ───────────────────────────────────────────────────────────────
.pytest_cache/
.mypy_cache/
.ruff_cache/
.coverage
.coverage.*
coverage.xml
htmlcov/

# ── notebooks ────────────────────────────────────────────────────────────
# Checkpoints are editor state. The notebooks themselves are versioned; their
# checkpoints would double every diff.
.ipynb_checkpoints/
*-checkpoint.ipynb

# ── editors and operating systems ────────────────────────────────────────
# .devcontainer/ and .editorconfig are versioned on purpose: they are how the
# environment stays identical. Personal editor state is not.
.vscode/
.idea/
*.swp
.DS_Store
