История изменений
Формат: Keep a Changelog · Semantic Versioning
[Не выпущено]
Добавлено
- Унифицированное Python API — объединены варианты по типу модели и устройству в единые функции с runtime-диспатчем:
ranking(),hypotest()/hypotest_toys(),profile_scan(),fit_toys(),upper_limit(). Все принимаютdevice="cpu"|"cuda"|"metal"и диспатчат поHistFactoryModelvsUnbinnedModelавтоматически. Старыеunbinned_*,*_gpu,*_batch_gpuварианты удалены. - TypedDict возвращаемые типы — ~25 структурированных
TypedDictопределений (RankingEntry,ProfileScanResult,HypotestToysMetaResult,PanelFeResultи др.) вместо непрозрачныхDict[str, Any]. Автодополнение IDE теперь работает для всех функций вывода. profile_scan(return_curve=True)— объединяет бывшийprofile_curve()вprofile_scan()с массивами для графиков (mu_values,q_mu_values,twice_delta_nll).upper_limit(method="root")— объединяет бывшийupper_limits_root()вupper_limit()сmethod="bisect"|"root".- LAPS Metal backend — GPU-ускоренный MAMS-сэмплер на Apple Silicon (M1–M4) через Metal Shading Language. Встроенные модели (
StdNormal,EightSchools,NealFunnel,GlmLogistic) с f32 вычислениями, fused multi-step ядро и SIMD-group cooperative ядро для тяжёлых GLM. Автоматический fallback: CUDA (f64) > Metal (f32) > ошибка. - LAPS оконная адаптация масс — warmup фазы 2+3 теперь используют Stan-style удвоенные окна для оценки
inv_mass. Каждое окно сбрасывает статистики Welford и dual averaging, улучшая сходимость на мультимасштабных моделях. Настраивается черезn_mass_windows. - LAPS римановский MAMS для Neal Funnel — новая модель
neal_funnel_riemannianс позиционно-зависимой метрикой Фишера. Использует эффективный потенциал, где члены лог-детерминанта сокращаются, давая масштабно-инвариантные натуральные градиенты. Доступно на Metal (f32) и CUDA (f64). - BCa доверительные интервалы — переиспользуемые bootstrap CI утилиты в
ns-inference(percentile+bca) с диагностикой (z0, acceleration, скорректированные alphas, размеры выборок). - HEP toy-summary CI контроль —
nextstat unbinned-fit-toysтеперь поддерживает opt-in CI для summary:--summary-ci-method percentile|bca,--summary-ci-level,--summary-ci-bootstrap. Вывод включаетsummary.mean_ciс запрошенным/эффективным методом и диагностикой fallback. - Churn bootstrap CI выбор метода —
nextstat churn bootstrap-hrтеперь поддерживает--ci-method percentile|bca(по умолчаниюpercentile) и--n-jackknifeдля оценки BCa-ускорения. Вывод включает метаданные метода и покоэффициентную диагностику с причиной fallback. - Python churn паритет для CI методов —
nextstat.churn_bootstrap_hr()теперь принимаетci_methodиn_jackknifeи возвращает покоэффициентный эффективный метод/диагностику. - Рендерер отдельных визуализаций (
nextstat viz render) — прямой рендеринг JSON viz артефактов в изображения (pulls,corr,ranking) без генерации полного отчёта. Поддерживает настройки title/DPI и фильтры корреляций (--corr-include,--corr-exclude,--corr-top-n). - Rootless HEP генератор датасетов —
bench_hep_dataset_bootstrap_ci.pyтеперь поддерживает--root-writer auto|uproot|root-cliи по умолчанию используетuprootбез ROOT.
Исправлено
- Порядок параметров
panel_fe()— изменён с(entity_ids, x, y, p)на(y, x, entity_ids, p)для соответствия конвенции эконометрического модуля (yпервым). - HS3/pyhf CLI уточнение scope — исправлена документация команд и добавлена fail-fast диагностика для pyhf-only команд при HS3 входных данных.
- Arrow/Parquet
from_arrowсовместимость с большими offset — исправлено чтениеUtf8/LargeUtf8иList<Float64>/LargeList<Float64>, так что Arrow-таблицы из Polars/DuckDB принимаются без предварительной нормализации.
[0.9.5] — 2026-02-15
Исправлено
- Покрытие PyPI wheel —
pip install nextstatтеперь работает из коробки на всех основных платформах. Предсобранные wheels для Linux x86_64/aarch64, macOS arm64/x86_64, Windows x86_64 (Python 3.11–3.13). - Совместимость Linux x86_64 glibc — wheels теперь таргетируют manylinux_2_17 (glibc 2.17+) вместо manylinux_2_35, что исправляет установку на CentOS 7/8, RHEL 7+, Ubuntu 18.04+.
- Поддержка macOS Intel — добавлен таргет
x86_64-apple-darwinв матрицу релиза. Пользователям Intel Mac больше не нужна сборка из исходников. - Multi-interpreter wheel сборки — Linux wheels собираются внутри manylinux Docker-контейнера; macOS/Windows используют явный
setup-pythonс 3.11/3.12/3.13.
Добавлено
- HEP Full Workflow Tutorial — исчерпывающий туториал на 1200 строк: конструирование workspace, все типы модификаторов, MLE фит, CLs гипотезное тестирование, верхние лимиты (Brazil band), ранжирование NP, pulls, корреляционная матрица, профильные сканы, комбинация workspace, mass scans, GPU-ускорение, препроцессинг и автоматические отчёты.
- Детальные гайды по установке и быстрому старту — переписаны с пошаговыми инструкциями, ожидаемыми выводами, секциями устранения неполадок и флагами GPU-ускорения.
[0.9.4] — 2026-02-15
Нативный ROOT I/O
- LRU-кеш baskets — декомпрессированные payload baskets TTree кешируются per-
RootFileс LRU-вытеснением по объёму (256 MiB по умолчанию). Убирает повторную декомпрессию при последовательных чтениях ветки.RootFile::basket_cache()для статистики,RootFile::set_cache_config()для настройки. - Lazy branch reader —
RootFile::lazy_branch_reader()декомпрессирует только baskets, необходимые для запрошенных записей.read_f64_at(entry)затрагивает один basket;read_f64_range(start, end)— только пересекающиеся. - ChainedSlice — zero-copy конкатенация нескольких декомпрессированных payload через
Arc. O(log n) random access по несмежным сегментам. - Парсинг ROOT leaflist —
ns-rootтеперь парсит составные leaf-list ветки (несколько скаляров в одной записи).
Производительность ns-zstd
- Оптимизации hot-path энкодера — 20+ целевых улучшений pure-Rust Zstd-энкодера: ускорение FSE-переходов, упаковка бит последовательностей, снижение коллизий hash-chain через head-теги и u64-reject, сравнение common-prefix через u128, fast-path для depth-1, эвристика no-match skip.
zstd-shim— крейт прозрачного выбора бэкенда: нативныйlibzstdна десктопе для максимальной скорости, pure-Rustns-zstdна WASM и embedded.
Ускорение на GPU
- Многоканальные GPU batch toys (Metal + CUDA) — батч-фиттер тоев теперь поддерживает workspaces с несколькими каналами на обоих GPU-бэкендах.
- Unbinned CUDA multi-GPU batch toys (
--gpu-devices) —nextstat unbinned-fit-toysиnextstat unbinned-hypotest-toysмогут шардить хост-сэмплированные тои по нескольким CUDA-устройствам. - Unbinned CUDA device-resident shard orchestration (
--gpu-shards) — шардированное выполнение--gpu-sample-toysс round-robin распределением по устройствам. Эмуляция на одном GPU через--gpu-shards N. - Unbinned CUDA host-toy shard orchestration — CUDA toy workflows поддерживают шардированное выполнение host-тоев (
pipeline: cuda_host_sharded) с shard plan в метриках. - Unbinned CUDA sharded toy-path метрики/тесты — интеграционное покрытие для
--gpu-sample-toys --gpu-shardsс проверкой контрактовpipeline: cuda_device_shardedиdevice_shard_plan. - Metal
--gpu-sample-toys— device-resident сэмплирование тоев на Apple Silicon (ранее только CUDA). - Parquet observed data для unbinned
--gpu— unbinned GPU-путь теперь может загружать наблюдаемые данные напрямую из Parquet-файлов. - TensorRT execution provider для нейронных PDF —
--features neural-tensorrtвключает TensorRT EP с FP16-инференсом, кэшированием движков (~/.cache/nextstat/tensorrt/) и динамическими профилями оптимизации батча. Цепочка fallback: TensorRT → CUDA EP → CPU.FlowGpuConfigдля настройки TRT; конструкторFlowPdf::from_manifest_with_config();FlowPdf::gpu_ep_kind()для интроспекции. - Аналитические якобиан-градиенты для flow PDF — если манифест включает ONNX-модель
log_prob_grad,FlowPdf::log_prob_grad_batch()вычисляет точный ∂ log p / ∂ context за один forward pass вместо 2 × n_context конечно-разностных вычислений. Fused CUDA-ядроflow_nll_grad_reduceсчитает NLL + промежуточные градиенты за один запуск;GpuFlowSession::nll_grad_analytical()собирает полный градиент на CPU. - Multi-GPU батч-фиттинг тоев для flow PDF —
fit_flow_toys_batch_cuda()запускает lockstep L-BFGS-B по тысячам тоев через ядроflow_batch_nll_reduce(1 блок = 1 той).shard_flow_toys()равномерно распределяет тои по устройствам;fit_flow_toys_batch_multi_gpu()управляет всеми GPU и объединяет результаты. - CUDA EP f32 zero-copy NLL —
GpuFlowSession::nll_device_ptr_f32()принимает raw CUDA device pointer на float log-probs от ONNX Runtime CUDA EP, исключая host-to-device memcpy. До 57× быстрее f64 host-upload пути на типичных объёмах событий (~1K). Python:GpuFlowSession.nll_device_ptr_f32(ptr, params). - PF3.1-OPT2: Параллельный device-resident multi-GPU — пайплайн
cuda_device_shardedзапускает каждый шард в своём потоке с отдельным CUDA-контекстом черезstd::thread::scope. Валидировано на 4× A40: 2 GPU = 1.97× (почти линейно), 3 GPU = 2.9×. До фикса: 1.00×. - PF3.1 2× H100 бенчмарк-снапшот — полная unbinned toy матрица (10k/50k/100k) для CPU, 1-GPU/2-GPU host-toy и device-resident sharded путей.
- PF3.1 single-GPU снапшот (RTX 4000 Ada) — 10k/20k валидационные артефакты для worker-per-device оркестрации.
- CLI
--gpu cudaдля flow PDF (G2-R1) —nextstat unbinned-fit-toys --gpu cudaподдерживает flow/conditional_flow/dcr_surrogate PDF. CPU сэмплинг → CPU logp → CUDA NLL редукция через ядроflow_batch_nll_reduce→ lockstep L-BFGS-B. - Кэш сетки нормализации —
QuadratureGrid::auto()выбирает Gauss-Legendre (1–3D), тензорное произведение (4–5D) или Halton квази-Монте-Карло (6D+).NormalizationCacheисключает повторные вычисления при неизменённых параметрах.
Гибридное правдоподобие (Phase 4)
HybridLikelihood<A, B>— обобщённое комбинированное правдоподобие, суммирующее NLL двухLogDensityModelс общими параметрами. РеализуетLogDensityModel,PoiModelиFixedParamModel.SharedParameterMap— объединяет вектора параметров двух моделей по имени. Общие параметры получают пересечение границ.- CLI
nextstat hybrid-fit—--binned(pyhf/HS3 JSON) +--unbinned(YAML/JSON spec). MLE черезHybridLikelihood. WeightSummaryдиагностика —EventStore::weight_summary()возвращает ESS, sum/min/max/mean весов, n_zero.- HS3 unbinned расширение —
Hs3UnbinnedDistрасширяет HS3 v0.2 схему event-level каналами. - Fused single-pass CPU NLL ядро —
fused_gauss_exp_nllвычисляет per-event log-likelihood инлайн для Gaussian+Exponential топологии, устраняя промежуточные аллокации. Адаптивный параллелизм: последовательно для N < 8k, rayonpar_chunks(1024)для N ≥ 8k. - SIMD-векторизованное fused-ядро (
wide::f64x4) — 4 события за итерацию (AVX2 на x86, NEON на ARM). 4–12× ускорение над generic-путём на x86; 2–5× на ARM. ~770 M events/s NLL на x86. - Unbinned бенчмарки — Criterion бенчмарки: ~770 M events/s NLL на x86 (fused+SIMD); полный 5-параметровый fit за 637 µs при 10k событиях.
- Fused CrystalBall+Exponential ядро —
fused_cb_exp_nllрасширяет fused single-pass путь на CB+Exp топологию. Scalar event loop с rayon адаптивным параллелизмом; аналитические градиенты для 5 shape-параметров. 2.7–5.8× ускорение над generic на M5. - Unbinned fused-vs-generic бенчмарк —
UnbinnedModel::nll_generic()/grad_nll_generic()форсируют generic multi-pass путь для честного сравнения с дефолтным fused-путём.
Кросс-вертикальные статистические фичи
- Gamma GLM (
GammaRegressionModel) — гамма-распределение с log-связкой, общий параметр формы α. Аналитический NLL и градиент. Для страховых выплат, стоимости госпитализации, строго положительных непрерывных откликов. - Tweedie GLM (
TweedieRegressionModel) — составная Пуассон-Гамма со степеньюp ∈ (1, 2), log-связка. Приближение NLL через седловую точку (Dunn & Smyth 2005). Обрабатывает точные нули. Для агрегатных страховых требований, осадков, zero-inflated данных. - GEV-распределение (
GevModel) — обобщённое распределение экстремальных значений для блочных максимумов (Fréchet ξ>0, Gumbel ξ≈0, Weibull ξ<0). MLE через L-BFGS-B с аналитическим градиентом.return_level(T)для T-блочных уровней возврата. Для перестрахования, гидрологии, климатических экстремумов. - GPD-распределение (
GpdModel) — обобщённое Парето для пиков над порогом. MLE с аналитическим градиентом.quantile(p)для квантилей превышения (VaR/ES). Для хвостового риска в финансах, тарификации перестрахования. - Мета-анализ (
meta_fixed,meta_random) — фиксированные эффекты (inverse-variance) и случайные эффекты (DerSimonian–Laird). Гетерогенность: Q Кохрана, I², H², τ². Данные для forest plot с весами и ДИ по исследованиям. Для фармы, эпидемиологии, социальных наук.
WASM-песочница
- Компактный бинарник 454 KB — убран Arrow/Parquet из WASM-сборки, кастомный
[profile.release-wasm]сopt-level = "z",lto = "fat",strip = true, плюсwasm-opt -Oz. Уменьшение с 5.7 MB до 454 KB. - UI-полировка — стандартный хэдер сайта с логотипом, компактный layout на один экран, спиннер на Run,
⌘+Enter, автозагрузка примера, бейджи converged/failed в MLE Fit, fade-in анимации. - Управляемые примеры — 4 HistFactory + 3 GLM примера с описаниями. Dropdown фильтруется по активному табу — показываются только совместимые примеры.
- Автозапуск при смене таба — переключение между workspace-операциями автоматически запускает вычисление. Переход GLM ↔ workspace очищает редактор.
- GLM Regression таб —
run_glm()WASM endpoint: линейная, логистическая, пуассоновская регрессия через L-BFGS-B. - Mass Scan (Type B Brazil Band) — ATLAS/CMS exclusion plot: 95% CL верхний предел на μ vs позиция пика сигнала с ±1σ/±2σ полосами.
Сервер инференса (ns-server)
- Аутентификация по API-ключу —
--api-keys <file>или переменнаяNS_API_KEYS. Валидация Bearer-токена на всех эндпоинтах кромеGET /v1/health. - Rate limiting по IP —
--rate-limit <N>(запросы/сек/IP). Token-bucket с ленивой очисткой. POST /v1/unbinned/fit— эндпоинт unbinned MLE фита.POST /v1/nlme/fit— эндпоинт NLME / PK популяционного фита. Поддерживаетpk_1cptиnlme_1cpt. Политики LLOQ: ignore, replace_half, censored.- Асинхронная система задач —
POST /v1/jobs/submit,GET /v1/jobs/{id},DELETE /v1/jobs/{id}. In-memory хранилище с TTL-очисткой и токенами отмены. GET /v1/openapi.json— OpenAPI 3.1 спецификация для всех 16 эндпоинтов.
Анализ выживаемости (непараметрический)
- Оценка Каплана-Мейера —
nextstat.kaplan_meier(times, events, conf_level): непараметрическая кривая выживаемости с дисперсией Гринвуда, log-log ДИ, медиана выживаемости, таблица at-risk. - Лог-ранк тест —
nextstat.log_rank_test(times, events, groups): хи-квадрат тест Мантеля-Кокса для 2+ групп. - CLI:
nextstat survival km,nextstat survival log-rank-test.
Подписки / Отток (Churn)
- Синтетический SaaS churn датасет —
nextstat.churn_generate_data(): детерминированные когортные данные с правоцензурированным временем оттока, ковариатами плана/региона/использования и назначением воздействия. - Когортный retention —
nextstat.churn_retention(): стратифицированные KM-кривые по группам + лог-ранк сравнение. - Модель риска оттока —
nextstat.churn_risk_model(): hazard ratios Кокса с ДИ. - Каузальный uplift —
nextstat.churn_uplift(): AIPW-оценка эффекта вмешательства с анализом чувствительности Розенбаума. - CLI:
nextstat churn generate-data,nextstat churn retention,nextstat churn risk-model,nextstat churn uplift. - Диагностика (trust gate) —
nextstat.churn_diagnostics(): доля цензурирования по сегментам, баланс ковариат (SMD), перекрытие propensity, достаточность выборки. - Когортная матрица удержания —
nextstat.churn_cohort_matrix(): life-table по когортам с периодами, кумулятивное удержание. - Сравнение сегментов —
nextstat.churn_compare(): попарный лог-ранк + HR proxy + коррекция Бенджамини-Хохберга / Бонферрони. - Survival-native uplift —
nextstat.churn_uplift_survival(): RMST, IPW-взвешенный КМ, ΔS(t) по горизонтам. - Бутстрап hazard ratios —
nextstat.churn_bootstrap_hr(): параллельный бутстрап Cox PH с перцентильными ДИ. - Инъекция данных —
nextstat.churn_ingest(): валидация и очистка массивов клиентов, цензурирование по observation_end.
CLI
nextstat mass-scan— батч асимптотических CLs верхних пределов по множеству workspace (Type B Brazil Band).nextstat significance— significance открытия (p₀ и Z-значение).nextstat goodness-of-fit— saturated-model тест качества подгонки (χ²/ndof и p-value).nextstat combine— объединение нескольких pyhf JSON workspace в единый с автокорреляцией систематик.nextstat fit --asimov— слепой фит на Asimov (ожидаемых) данных.nextstat viz gammas— постфитовые γ параметры с prefit/postfit неопределённостями.nextstat viz summary— мульти-фит μ summary из нескольких fit-результатов.nextstat viz pie— круговая диаграмма состава выборок по каналам.nextstat viz separation— сравнение форм сигнала и фона с метрикой разделения.nextstat preprocess smooth— нативное Rust 353QH,twice сглаживание для HistoSys шаблонов.nextstat preprocess prune— нативная Rust обрезка незначительных систематик.
pyhf-паритет
Workspace::prune()— удаление каналов, сэмплов, модификаторов или measurement POI по имени.Workspace::rename()— переименование каналов, сэмплов, модификаторов.Workspace::sorted()— отсортированный workspace.Workspace::digest()— SHA-256 дайджест канонического workspace JSON.Workspace::combine()— объединение двух workspace с настраиваемой семантикой каналов.pyhf::simplemodels—uncorrelated_background()иcorrelated_background().pyhf::xml_export— экспорт pyhf workspace в HistFactory XML формат.- HistoSys interpolation code2 — квадратичная интерполяция с линейной экстраполяцией.
- Тест-статистики
t_μиt̃_μ— Eq. 8 и Eq. 11 arXiv:1007.1727. OptimizerStrategyпресеты — Default, MinuitLike, HighPrecision.docs/pyhf-parity.md— полная матрица совместимости.
Эконометрика и каузальный вывод (Phase 12)
- Panel fixed-effects регрессия — entity-demeaned OLS с Liang–Zeger cluster-robust SE.
panel_fe_fit()в Rust,nextstat.panel_fe()в Python. - Разность-в-разностях (DiD) — канонический 2×2 оценщик и multi-period event-study с leads/lags. Python:
nextstat.did(),nextstat.event_study(). - Инструментальные переменные / 2SLS — двухшаговый МНК с F-статистикой первого этапа, partial R², тест Стока–Його. Python:
nextstat.iv_2sls(). - AIPW (дважды робастный) — Augmented IPW для ATE. Influence-function SE, тримминг propensity score. Python:
nextstat.aipw_ate(). - Анализ чувствительности Розенбаума — границы Wilcoxon signed-rank для matched-pair чувствительности к ненаблюдаемым конфаундерам. Python:
nextstat.rosenbaum_bounds(). docs/references/econometrics.md— справочная документация с примерами кода, таблицей assumptions и limitations.
Стабилизация API
- ns-core ре-экспорты —
LogDensityModel,PoiModel,FixedParamModel,PreparedNll,PreparedModelRefиз корня крейта. - Deprecated
Modeltrait — заменён наLogDensityModel. Будет удалён в 1.0. - ns-inference ре-экспорты — добавлены
scan,scan_metal,NegativeBinomialRegressionModel,QualityGates,compute_diagnostics,quality_summaryв корень крейта. nextstat.unbinned.UnbinnedAnalysis— высокоуровневая обёртка надUnbinnedModel:.from_config(),.fit(),.scan(),.hypotest(),.hypotest_toys(),.ranking(),.summary().- Python
__all__— добавленыvolatility,UnbinnedModel,HybridModelи ещё 9 вnextstat.__all__.
Исправлено
- L-BFGS steepest-descent fallback — оптимизатор теперь корректно переключается на steepest descent, когда L-BFGS update не даёт направления спуска.
[0.9.0] — 2026-02-09
Мажорный релиз
Нейронная оценка плотности
- Flow PDF — ONNX-backed normalizing flow как unbinned PDF. Загружает предобученные потоки из
flow_manifest.json+ ONNX-модели. Поддерживает безусловные и условные потоки с мешающими параметрами как контекст. Спецификация YAML:type: flow/type: conditional_flow. Feature gate:--features neural. - DCR Surrogate — нейронный DCR (Direct Classifier Ratio) суррогат, заменяющий бинированный морфинг шаблонов. Drop-in замена для морфинг-гистограмм — гладкий, непрерывный, безбинный морфинг систематик по протоколу FAIR-HUC. Спецификация YAML:
type: dcr_surrogate. - Unbinned-спецификация YAML поддерживает типы PDF
flow,conditional_flowиdcr_surrogateс автоматическим feature gating. - Верификация нормировки — квадратура Гаусса–Лежандра (порядки 32–128) для проверки и коррекции нормировки нейронных PDF.
- Скрипты обучения — Python-скрипты для обучения потоков (zuko NSF + ONNX-экспорт), дистилляции DCR из шаблонов HistFactory и валидации (нормировка, PIT/KS, closure checks).
- Python-привязки FlowPdf / DcrSurrogate — классы
nextstat.FlowPdfиnextstat.DcrSurrogateвns-pyза--features neural. Вычисление ONNX-flow из Python:from_manifest(),log_prob_batch(),update_normalization(),validate_nominal_normalization().
Документация
- Справочник unbinned-спецификации —
docs/references/unbinned-spec.md: полный человекочитаемый справочник поnextstat_unbinned_spec_v0: все 13 типов PDF, yield-выражения, rate modifiers (NormSys + WeightSys), per-event систематики, нейронные PDF, ограничения GPU.
Ускорение на GPU
- CUDA (NVIDIA, f64) - fused-ядро NLL+градиент, покрывающее все 7 типов модификаторов HistFactory за один запуск. Lockstep batch-оптимизатор фитит тысячи тоев параллельно. Динамическая загрузка через cudarc: бинарник работает без установленной CUDA.
- Metal (Apple Silicon, f32) - то же fused-ядро на MSL. Unified memory без копирования. Паритет NLL относительно CPU f64: относительная разница 1.27e-6.
- Apple Accelerate - векторизованный NLL на macOS через vDSP/vForce. Оверхед <5% относительно наивного суммирования.
- GPU-resident toy pipeline (CUDA) —
--gpu-sample-toysтеперь хранит сгенерированные события на GPU, исключая round-trip D2H+H2D для буфераobs_flatмежду сэмплером и батч-фиттером. - Unbinned GPU WeightSys — модификатор
weightsysтеперь lowered в CUDA/Metal ядра (интерполяция code0/code4p). В YAML-спецификации:type: weightsys,param,lo,hi, опциональныйinterp_code. - CPU batch toys — Rayon-параллельный фит с переиспользованием tape по потокам и воспроизводимостью через seed.
- Reverse-mode tape — более быстрый градиент при меньшем числе аллокаций.
- CLI:
--gpu cuda,--gpu metal· Python:device="cuda",device="metal"
Дифференцируемый анализ (PyTorch)
- Zero-copy CUDA-ядро читает сигнальную гистограмму из PyTorch-тензора и записывает dNLL/dsignal напрямую в буфер градиентов, без device-host roundtrip.
DifferentiableSession: NLL + градиент по сигналу при фиксированных мешающих параметрах.ProfiledDifferentiableSession: профильные тестовые статистики с градиентами по теореме об огибающей. Это позволяет строить цепочку NN → сигнальная гистограмма → профильный CLs → loss.- Модуль
nextstat.torch:NextStatNLLFunction,NextStatProfiledQ0Function(autograd),NextStatLayer(nn.Module). profiled_zmu_loss()— обёртка Zμ loss (sqrt(qμ) с численной устойчивостью) для оптимизации силы сигнала.SignificanceLoss(model)— ML-friendly класс, оборачивающий профилированную −Z₀. Инициализируется один раз и вызывается на каждом батче:loss_fn(signal_hist).backward().SoftHistogram— дифференцируемое биннингование (Gaussian KDE / sigmoid): scores классификатора → soft histogram →SignificanceLoss.batch_profiled_q0_loss()— профилированный q₀ для батча сигнальных гистограмм (ensemble training).signal_jacobian(),signal_jacobian_numpy()— прямой ∂q₀/∂signal без autograd для моста SciPy и быстрого прунинга.as_tensor()— DLPack array-API bridge: JAX, CuPy, Arrow, NumPy →torch.Tensor.nextstat.mlops— извлечение метрик фита для W&B / MLflow / Neptune:metrics_dict(result),significance_metrics(z0),StepTimer.nextstat.interpret— ranking impact систематик как аналог feature importance:rank_impact(model),rank_impact_df(),plot_rank_impact().nextstat.tools— определения tools для LLM (OpenAI function calling, LangChain, MCP) для 7 операций: fit, hypotest, upper_limit, ranking, significance, scan, workspace_audit.nextstat.distill— генератор набора данных для обучения суррогатов.generate_dataset(model, n_samples=100k, method="sobol")производит кортежи (params, NLL, gradient). Экспорт в PyTorchTensorDataset,.npzили Parquet. Встроенныйtrain_mlp_surrogate()с loss Соболева.- Проверка сходимости фита: возвращает ошибку, если GPU profile fit не сошелся.
RL-окружение Gymnasium
nextstat.gym— опциональная обертка Gymnasium/Gym, которая рассматривает HistFactory workspace как RL/DOE-окружение.- Предлагаете обновления номинальных yields для сэмпла и получаете метрику NextStat как reward (NLL, q₀, Z₀, qμ, Zμ).
make_histfactory_env()- фабрика с настраиваемымиreward_metric,action_mode,action_scale.- Совместимо с
gymnasium(предпочтительно) и устаревшимgym.
Детерминированная валидация
- EvalMode - process-wide флаг: Parity (суммирование Кахана, один поток, bit-exact) против Fast (по умолчанию: SIMD/GPU, многопоточно).
- CLI:
--parity· Python:nextstat.set_eval_mode("parity") - 7-уровневый контракт допусков относительно pyhf (per-bin до ~1e-14 в худшем случае).
Нативный ROOT I/O
- TTree reader - mmap-доступ к файлу, нативная бинарная десериализация, распаковка baskets (zlib/LZ4/ZSTD) с rayon-параллельным извлечением. 9 типов leaf + jagged-ветки.
- Expression engine - компиляция в байткод и векторизация. Полная грамматика: арифметика, сравнения, булева логика, тернарный оператор, builtins. Динамическая адресация jagged (
jet_pt[idx]) следует конвенции ROOT/TTreeFormula. Python-обертка:nextstat.analysis.expr_eval. - Histogram filler - один проход с selection cuts, весами и произвольным биннингом.
- Unsplit vector branch decoding - best-effort декодирование веток
std::vector<T>без таблиц смещений. - ~8.5× faster чем uproot+numpy на полном конвейере.
Пайплайн Ntuple → Workspace
NtupleWorkspaceBuilder: ROOT ntuples → HistFactoryWorkspaceчерез fluent Rust API.- Модификаторы на уровне сэмпла: NormFactor, NormSys, WeightSys, TreeSys, HistoSys, StatError.
- Создает тот же struct
Workspace, что и путь pyhf JSON, без зависимости от ROOT C++.
Интероперабельность с TRExFitter
nextstat import trex-config— импортирует.configTRExFitter в pyhf JSON workspace.nextstat build-hists— запускает NTUP-пайплайн и пишетworkspace.json.- HIST mode — читает заранее собранные ROOT-гистограммы (
ReadFrom: HIST) вместе с NTUP. - Analysis Spec v0 (YAML + JSON Schema) —
nextstat run <spec.yaml>оркестрирует import/fit/scan/report. - Поддержка jagged-колонок и совместимость выражений в стиле TRExFitter.
Препроцессинг систематик
- Smoothing: 353QH,twice algorithm (ROOT
TH1::Smoothequivalent) + Gaussian kernel. - Pruning: shape, norm и overall прунинг с аудиторским следом.
nextstat preprocessCLI с декларативной YAML-конфигурацией и кешированием по хешу контента.
Расширения HistFactory
- HS3 v0.2 ingestion - нативная загрузка HS3 JSON workspace (ROOT 6.37+). Формат (pyhf или HS3) автоопределяется при загрузке.
- HS3 roundtrip export - экспорт
HistFactoryModelобратно в HS3 JSON с точками bestfit параметров. - Python:
HistFactoryModel.from_workspace()(auto-detect),HistFactoryModel.from_hs3(json_str). CLI: автоопределение вnextstat fit,nextstat scan. - HS3-входы используют дефолты ROOT HistFactory (NormSys Code1, HistoSys Code0). Для pyhf JSON NextStat по умолчанию использует гладкую интерполяцию (NormSys Code4, HistoSys Code4p). Для строгих pyhf-дефолтов используйте
--interp-defaults pyhf(CLI) илиfrom_workspace_with_settings(Code1, Code0)(Rust). - Поддержка HEPData patchset:
nextstat import patchset, Pythonnextstat.apply_patchset(). - Arrow / Polars ingestion -
nextstat.from_arrow(table)создает HistFactoryModel из PyArrow Table, RecordBatch или любого Arrow-совместимого источника (Polars, DuckDB, Spark).nextstat.from_parquet(path)читает Parquet напрямую. - Arrow export -
nextstat.to_arrow(model, what="yields"|"params")экспортирует ожидаемые yields или метаданные параметров как PyArrow Table. - Семантика ConstraintTerm - альфа-преобразование LogNormal, Gamma-ограничение для ShapeSys, обработка Uniform и NoConstraint. Парсится из метаданных
<ConstraintTerm>в HistFactory XML.
Небинированное правдоподобие
- Product PDF — совместное правдоподобие по независимым наблюдаемым:
log p(x,y) = log p₁(x) + log p₂(y). Позволяет строить многомерные unbinned-фиты без ручной факторизации. - Spline PDF — монотонная кубическая Эрмитова (Fritsch–Carlson) интерполяция по узлам и значениям плотности. Аналитическая нормировка, inverse-CDF сэмплирование для тоев.
- Многомерная KDE — 2-D/3-D гауссов KDE с шириной Silverman, усечённый на ограниченной поддержке наблюдаемых.
- ARGUS PDF — форма фона ARGUS для спектроскопии B-мезонов. Нормировка Гаусса–Лежандра на ограниченной поддержке.
- Voigtian PDF — pseudo-Voigt (Thompson–Cox–Hastings) линия резонанса. Свёртка Гаусса ⊗ Брейт–Вигнер для моделирования резонанса + детекторного разрешения.
- Интегралы нормировки кешируются между итерациями оптимизатора, избегая повторной квадратуры при неизменных параметрах.
- GPU flow NLL reduction — CUDA-ядро для extended unbinned likelihood по внешне вычисленным log-prob (flow PDF). Поддерживает многопроцессный logsumexp, гауссовы ограничения, host-upload и device-resident (ONNX CUDA EP) пути.
- GPU flow session — оркестрация вычисления flow PDF (CPU или CUDA EP) с GPU NLL reduction. Градиент через центральные конечные разности, вычисление yields из вектора параметров.
Система отчетов
nextstat report— генерирует распределения, pulls, корреляции, yields (.json/.csv/.tex) и ранкинг неопределённостей.- Python-рендеринг: многостраничный PDF + SVG для каждого графика через matplotlib.
--blindмаскирует наблюдаемые данные в незаблайнденных регионах.--deterministicвключает стабильный порядок ключей JSON.nextstat validation-report— единый артефакт валидации, объединяющий результаты Apex2 и отпечатки workspace. Выводитvalidation_report.json(схемаvalidation_report_v1) с SHA-256 набора данных, спецификацией модели, окружением, заметками для регуляторного обзора и сводкой pass/fail по наборам. Опциональный--pdfрендерит 7-страничный PDF для аудита через matplotlib.--json-onlyдля validation-pack: генерировать JSON-артефакты без рендера PDF (без зависимости от matplotlib).- Валидация pack manifest —
validation_pack_manifest.jsonс SHA-256 хешами и размерами всех файлов пакета. Удобный индекс для репликации и подписания. - Опциональный signing —
--sign-openssl-key/--sign-openssl-pubфлаги создают Ed25519-подписи над дайджестом манифеста.
Анализ выживаемости
- Параметрические модели: Exponential, Weibull, LogNormal AFT (с правым цензурированием).
- Cox Proportional Hazards: Efron/Breslow ties, робастные sandwich SE, остатки Шенфельда.
- Python:
nextstat.survival.{exponential,weibull,lognormal_aft,cox_ph}.fit(...) - CLI:
nextstat survival fit,nextstat survival predict
Линейные смешанные модели
- Аналитическое маргинальное правдоподобие (random intercept, random intercept + slope).
- Аппроксимация Лапласа для приближенных posterior.
Порядковые модели
- Упорядоченный logit/probit со стабильной параметризацией cutpoints.
Эконометрика и каузальный вывод
- Panel FE с кластерными SE (1-way).
- DiD TWFE + хелперы event study.
- IV / 2SLS с диагностикой слабых инструментов (first-stage F, partial R²).
- AIPW для ATE/ATT + хелпер E-value. Propensity scores, IPW-веса, диагностика overlap. Python:
nextstat.causal.aipw(),nextstat.causal.propensity_scores(). - GARCH / Стохастическая волатильность — модели GARCH(1,1) и стохастической волатильности для финансовых временных рядов. CLI:
nextstat volatility fit,nextstat volatility forecast. Python:nextstat.volatility.garch(),nextstat.volatility.sv().
Фармакометрика
- Интегратор RK4 для линейных систем ОДУ.
- 1-компартментная пероральная PK-модель с цензурированием LLOQ.
- Расширение NLME со случайными эффектами на уровне субъекта.
- Перечисление моделей ошибок —
ErrorModel::Additive,Proportional,Combined(σ_add, σ_prop)с хелперами дисперсии, NLL и градиента. - 2-компартментные PK-модели —
TwoCompartmentIvPkModel(IV болюс, 4 парам.) иTwoCompartmentOralPkModel(перорально, 5 парам.). Аналитические би/три-экспоненциальные решения. - Режим дозирования —
DosingRegimen: IV болюс, пероральное, IV инфузия. Одно-/многократные дозы и смешанные схемы. Замкнутые решения инфузий. - Чтение NONMEM-датасетов —
NonmemDataset::from_csv()парсит стандартный NONMEM CSV. Автоматическое преобразование записей дозирования вDosingRegimenпо субъектам. - Оценка FOCE/FOCEI —
FoceEstimator: оптимизация ETA по субъектам (демпфированный Ньютон-Рафсон) + обновление популяционных параметров. Приближение Лапласа с ридж-регуляризованным гессианом. - Коррелированные случайные эффекты —
OmegaMatrixхранит полную Ω через факторизацию Холецкого (Ω = L·Lᵀ).FoceEstimator::fit_1cpt_oral_correlated()фитирует с полной Ω;FoceResultвключает поляomega_matrixиcorrelation. - Пошаговое ковариатное моделирование (SCM) —
ScmEstimator: прямой отбор + обратное исключение по ΔOFV (LRT χ²(1)). Степенные, пропорциональные и экспоненциальные связи для CL/V/Ka. Полный аудит-трейс. - Диагностика VPC и GOF —
vpc_1cpt_oral(): визуальные предсказательные проверки с квантильными интервалами предсказания.gof_1cpt_oral(): PRED, IPRED, IWRES, CWRES. - Фарма-бенчмарк — Варфарин (32 субъекта), Теофиллин (12), Фенобарбитал (40 новорождённых). Восстановление параметров, GOF, VPC. Включает вариант с коррелированной Ω.
cargo test --test pharma_benchmark. - Схема артефактов NLME (v2.0.0) —
NlmeArtifactоборачивает все результаты оценки в единую JSON-сериализуемую структуру. CSV-экспорт фиксированных эффектов, случайных эффектов, GOF, VPC, SCM-трейса. - Run bundle (провенанс) —
RunBundleфиксирует версию NextStat, git-ревизию, Rust toolchain, ОС/CPU, сиды, провенанс датасета. - Алгоритм SAEM —
SaemEstimator: стохастический аппроксимационный EM для NLME (класс Monolix). E-шаг Метрополиса-Гастингса с адаптивной дисперсией proposal, M-шаг в замкнутой форме. ВозвращаетSaemDiagnostics(acceptance rates, OFV trace). Поддерживает диагональную и коррелированную Ω. - PD-модели —
EmaxModel,SigmoidEmaxModel(уравнение Хилла),IndirectResponseModel(типы I–IV). ODE-IDR через адаптивный RK45.PkPdLinkдля интерполяции концентрации PK→PD. - Адаптивные ОДУ-солверы —
rk45()(Дорманд-Принс 4(5) с PI-управлением шага) для нежёстких систем иesdirk4()(L-устойчивый SDIRK2) для жёстких. Обобщённый трейтOdeSystem.
API прикладной статистики
- Парсинг формул + детерминированные design matrices (
nextstat.formula). from_formulaобёртки для всех GLM и иерархических билдеров.- Сводки Вальда + робастная ковариация (HC0–HC3, 1-way cluster).
- Адаптеры scikit-learn:
NextStatLinearRegression,NextStatLogisticRegression,NextStatPoissonRegressor. - Политики пропусков:
drop_rows,impute_mean.
WASM-песочница
- Браузерный инференс через
wasm-bindgen:fit_json(),hypotest_json(),upper_limit_json(). - Перетащите
workspace.jsonи получите асимптотические CLs Brazil bands. Без Python и без сервера.
Визуализация
plot_cls_curve(),plot_brazil_limits(),plot_profile_curve().- Подкоманды:
nextstat viz distributions,viz pulls,viz corr,viz ranking. - Калман:
plot_kalman_states(),plot_forecast_bands().
Pure-Rust Zstd кодек (ns-zstd)
- Крейт
ns-zstd— pure-Rust Zstd декомпрессор и компрессор для ROOT I/O. Без зависимости от C — работает на WASM и embedded. Уровни сжатия 1–19 с FSE (Finite State Entropy) и Huffman кодированием. Выход декодера совпадает сlibzstdбайт-в-байт (верифицировано fixture-тестами). Hash-chain match finder с настраиваемой глубиной поиска.
R-привязки
- Пакет
nextstatдля R — нативный R-интерфейс черезextendr(bindings/ns-r/). Предоставляетnextstat_fit(),nextstat_hypotest(),nextstat_upper_limit(),nextstat_scan(),nextstat_ranking()для HistFactory workspaces. Unbinned event Parquet I/O и нейронные PDF-привязки (FlowPdf,DcrSurrogate) также доступны. Установка:R CMD INSTALL bindings/ns-r.
CLI и инфраструктура
- Структурированное логирование (
--log-level) и воспроизводимые пакеты запуска (--bundle). fit()поддерживаетinit_pars=для warm-start MLE.- CI: pyhf parity gate на push/PR, ночное обновление эталона TREx, тесты workspaces с HEPData.
- Валидация Apex2: NLL parity, bias/pulls regression, SBC calibration, quality gates по NUTS.
nextstat-server— self-hosted REST API для общего GPU-инференса.POST /v1/fit,POST /v1/ranking,GET /v1/health. Флаги:--gpu cuda|metal,--port,--host,--threads.nextstat.remote— pure-Python thin client (httpx).client = nextstat.remote.connect("http://gpu-server:3742"), затемclient.fit(workspace),client.ranking(workspace),client.health().- Batch API —
POST /v1/batch/fitфитит до 100 workspaces одним запросом;POST /v1/batch/toysзапускает GPU-ускоренный toy fitting.client.batch_fit(workspaces),client.batch_toys(workspace, n_toys=1000). - Model cache —
POST /v1/modelsзагружает workspace и возвращаетmodel_id(SHA-256); дальнейшие вызовы/v1/fitи/v1/rankingпринимаютmodel_id=, чтобы пропустить повторный парсинг. Вытеснение LRU (64 модели). - Docker & Helm — многоступенчатый Dockerfile для CPU и CUDA сборок, Helm chart с health probes, GPU resource requests, настраиваемыми репликами.
Исправлено
- End-to-end discovery скрипт (
e2e_discovery.py): исправлена обработка флага--no-deterministic. Скрипт теперь корректно записываетsummary.jsonиsummary.md. - CUDA batch toys (
--gpu cuda) крэш, когда некоторые тои сходятся раньше других. - GPU profiled session (
ProfiledDifferentiableSession): сбой сходимости рядом с границами параметров. - Optimizer early-stop при отрицательном NLL (
target_cost(0.0)удален). kalman_simulate(): поддержкаinit="sample|mean"иx0=....- StatError: некорректное распространение
sqrt(sumw2)при нулевых номинальных счетах. - Metal GPU: переиспользование scratch buffer (~40% меньше оверхеда аллокаций).
- HistFactory XML: удаление деклараций
<!DOCTYPE>перед парсингом. - CUDA/Metal race condition градиента сигнала: некорректная аккумуляция, когда несколько сэмплов вносят вклад в один бин.
- 10 пропущенных Python re-export в
__init__.py:has_metal,read_root_histogram,workspace_audit,cls_curve,profile_curve,kalman_filter/smooth/em/forecast/simulate. - Распаковка ROOT TTree: ограничение выходного буфера, чтобы предотвратить OOM на битых/слишком больших baskets.
- HistFactory XML: fallback на абсолютный путь
InputFileи экранирование спецсимволов в ROOT C macro. - Metal GPU: ранкинг теперь явно отклоняется с понятной ошибкой (Metal пока не поддерживает ранкинг).
- StatError: неопределенности
HistoNameтеперь считаются относительными и конвертируются в абсолютные (sigma_abs = rel * nominal), в соответствии с семантикой ROOT/HistFactory.
[0.1.0] — 2026-02-05
Первый публичный релиз
Ядро
- Модель данных HistFactory workspace с полной совместимостью с pyhf JSON.
- Пуассоновский NLL со всеми типами модификаторов + Barlow-Beeston.
- SIMD-ускоренный NLL через
wide::f64x4. - Автоматическое дифференцирование: forward-mode (dual numbers) и reverse-mode (tape AD).
Частотный вывод
- MLE через L-BFGS-B с неопределенностями по гессиану.
- Асимптотический CLs: проверка гипотез (тестовая статистика q-tilde).
- Сканы профильного правдоподобия, верхние пределы CLs (bisection + linear scan), Brazil bands.
- Batch MLE, toy studies, ranking мешающих параметров.
Байесовское семплирование
- No-U-Turn Sampler (NUTS) с dual averaging.
- Диагностика HMC: divergences (расхождения), tree depth, step size, E-BFMI.
- Rank-normalized folded R-hat + улучшенный ESS.
- Python:
sample()возвращает ArviZ-совместимый dict.
Регрессия и GLM
- Линейная, логистическая, Пуассона и отрицательная биномиальная регрессия.
- Ridge regression (MAP/L2), детектирование separation, поддержка exposure/offset.
- Кросс-валидация и метрики (RMSE, log-loss, Poisson deviance).
Иерархические модели
- Random intercepts/slopes, коррелированные эффекты (LKJ + Cholesky), non-centered parameterization.
- Posterior predictive checks.
Временные ряды
- Линейно-гауссов фильтр Калмана + RTS smoother.
- Оценка параметров через EM, многопериодный прогноз с prediction intervals.
- Конструкторы local-level, local-trend, AR(1). Поддержка пропущенных наблюдений.
Распределения
- Normal, StudentT, Bernoulli, Binomial, Poisson, NegativeBinomial, Gamma, Exponential, Weibull, Beta.
- Bijector/transform слой: Identity, Exp, Softplus, Sigmoid, Affine.
Визуализация
- Кривые профильного правдоподобия и графики CLs Brazil band.
- CLI:
viz profile,viz cls. Python:viz_profile_curve(),viz_cls_curve().
Python-привязки и CLI
nextstatPython-пакет (PyO3/maturin) с классамиModelиFitResult.nextstatCLI:fit,hypotest,upper-limit,scan,version.- CI-воркфлоу и GitHub release pipeline (multi-arch wheels + CLI binary).
Валидация (Apex2)
- Агрегатор master report: NLL parity, GLM benchmarks, bias/pulls regression, SBC calibration, quality gates по NUTS.
- Ночной медленный CI workflow.
