# eval/ — зависимости полигона.
#
# Установка:  python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
# Интерпретатор: см. .python-version (3.14.4).
# Эмбеддинг-бенч (retrieval_bench.py) тянет ~2.5 ГБ отдельно — requirements-embed.txt.
#
# СТЕНД 03.08.2026: Ubuntu 26.04 / CPython 3.14.4. Каждая версия сверена ИСПОЛНЕНИЕМ
# против реальных call-site'ов (compat-прогон 03.08), а не взята из памяти.
#
# ⚠ ЭТО НЕ СТЕНД ЗАКРЫТЫХ exp12–16 / promptlang / rerun2. Те шли 12.07–01.08 на
# Ubuntu 24 / CPython ~3.12 с НЕИЗВЕСТНЫМИ версиями: манифеста тогда не было, .venv и
# data/ в .gitignore. Единственный уцелевший след — `openai 2.44.0` (комментарий
# rerun2_judge/judge.py:33, 24.07). Следствие: перепрогон на этих пинах — НОВЫЙ замер,
# а не репродукция ратифицированных вердиктов (D30/D32/D37/D38/D39.22/D39.61).
# Цифры живут в docs/experiments/, не здесь.
#
# Здесь только то, что импортируется КОДОМ напрямую. Часть строк пришла бы и
# транзитивно (PyYAML через huggingface-hub, regex/requests через tiktoken, numpy через
# scipy) — объявлены ЯВНО намеренно: код импортирует их сам, и смена чужого дерева
# зависимостей не должна их унести.

# --- вызовы моделей -------------------------------------------------------------
# 12 файлов, все через `from openai import OpenAI` (rerun2_judge/judge.py:33,
# exp15/exp15_llm.py:22). Проверено: extra_body кладёт квирк-ключи ПЛОСКО в тело
# (00-provider-quirks.md на этом стоит), max_tokens и max_completion_tokens оба живы
# и SDK их не переписывает, DeepSeek-овый `prefix: true` в сообщении не срезается.
openai==2.52.0

# 14 файлов читают eval/.env сами.
python-dotenv==1.2.2

# --- данные и разбор ------------------------------------------------------------
# 21 файл. Везде safe_load (`yaml.load(` — 0 вхождений), поэтому слом PyYAML 6.x не кусает.
# Байт-стабильность дампа сида держится на dump(allow_unicode, sort_keys, width) —
# exp15/gender_transport.py:37, exp14b/exp14b_reseed_promote.py:25.
PyYAML==6.0.3

# 8 файлов. НЕСУЩЕЕ: классы письменностей \p{Han}/\p{Cyrillic}, которые stdlib re
# не компилирует вовсе — это паритет с Go unicode.Han/Hiragana (exp15/mem_select.py:32).
regex==2026.7.19

# 6 файлов: русская морфология (pilot/declmetric.py:35, pkg7/rubric_probe.py:83).
# Тянет pymorphy3-dicts-ru (словарь) и setuptools (требование самого pymorphy3 на py>=3.12).
pymorphy3==2.0.6

# --- счёт и статистика ----------------------------------------------------------
# 6 файлов (retrieval_bench.py:34, exp15/fertility_calib.py:15). Все 18 используемых
# атрибутов живы в 2.x; ни одного удалённого имени (np.float_/np.NaN/np.trapz/…) в коде нет.
numpy==2.5.1

# 3 файла — только пере-анализы exp15 (stats.t, ttest_1samp).
scipy==1.18.0

# --- токенизация ----------------------------------------------------------------
# token_calc.py:35, exp14/exp14_common.py:141 — ТОЛЬКО Tokenizer.from_file
# (from_pretrained: 0 вхождений, сети не будет). Тянет huggingface-hub/hf-xet/fsspec.
# ⚠ сами файлы токенизаторов в eval/tokenizers/ (gitignore) — на чистой машине их нет.
tokenizers==0.23.1

# token_calc.py:29. ⚠ get_encoding при первом вызове КАЧАЕТ ~4 МБ BPE-таблицы
# с openaipublic.blob.core.windows.net — $0 и не провайдер, но офлайн не отработает.
tiktoken==0.13.0

# exp15/preflight_models.py:54 — единственный call-site, живой фактчек /models.
requests==2.34.2
