# Development, test and experiment dependencies.
#   pip install -r requirements-dev.txt
-r requirements.txt

# --- build ------------------------------------------------------------------
scikit-build-core>=0.10
nanobind>=2.0

# --- test -------------------------------------------------------------------
pytest>=8.0
pytest-cov>=5.0
hypothesis>=6.100

# External oracles for the differential tests.
#
# scikit-learn's TfidfVectorizer with smooth_idf=True uses the paper's
# idf, which lets us cross-check the whole pipeline against an independent
# implementation.
scikit-learn>=1.4
#
# snowballstemmer is a TEST-TIME oracle only, never a runtime dependency. The
# generated stemmer itself is vendored under preprocessing/_snowball/; this pin
# lets CI assert the vendored copy still matches upstream.
snowballstemmer>=3.0

# --- static analysis ---------------------------------------------------------
#
# Exact pins, unlike everything else in this file. A linter floor is not a
# constraint, it is a promise that every future release will agree with this
# one, and they do not: ruff 0.16 stabilised PLR0917, which the tree had
# never been checked against, so the lint job failed on a commit that changed
# no Python at all. Bumping these is its own commit that fixes whatever
# the new release found, not something a rebuild does silently.
ruff==0.16.2
mypy==2.3.0
# The repository ships `.pre-commit-config.yaml`, and until this line the
# documented dev environment could not run it. `ci.yml` now runs the same hooks,
# so an unparseable config or a hook whose dependency moved fails there too.
pre-commit>=4.0
# `reuse lint` is the ninth repository gate. The charset extra is not optional
# on Windows: without it the tool cannot detect file encodings and exits before
# linting anything.
reuse[charset-normalizer]>=6.0
types-PyYAML

# --- experiments and figures -------------------------------------------------
matplotlib>=3.8
pandas>=2.0

# --- notebooks ---------------------------------------------------------------
jupyter>=1.0
nbmake>=1.5
nbformat>=5.10
