NextStatNextStat

История изменений

Формат: Keep a Changelog · Semantic Versioning

[Не выпущено]

ICH M15 регуляторный репортинг

  • Замороженные артефакты ICH M15assessment-table, MAP, MAR, profile-diff, bundle с профилями юрисдикций (ich_core, ema_step5_2026, fda_draft_2024), ролями подписантов, интеграцией в validation-pack.
  • Публикуемые M15 отчёты — детерминистические m15_report.md, m15_report.pdf, m15_report.docx из замороженных артефактов.

Реклама и маркетинговая аналитика

  • Нативное моделирование конверсийBetaBinomialModel, DelayCorrectionModel, hill(), adstock_geometric() + Python nextstat.ads модуль. Недельные Калман-билдеры (local_level_weekly, local_linear_trend_weekly).
  • Ads stable-surface gate — локальный/CI gate, бенчмарк-харнесс, удалённый раннер, документация релизного управления.

GVM (Глобальный вектор измерений)

  • GVM stable-first верификационная линия — gate-скрипт, GitHub Actions воркфлоу, make-таргет для защиты скалярного GVM подмножества.
  • GVM табличный + манифест ингрессcombine-measurements-build-spec, build_measurement_combination_spec() для CSV/TSV/YAML/JSON входа.
  • GVM golden path runnermake gvm-stable-first-example для сквозного запуска.
  • Adoption playbook Route D — фикстуры внешней валидации для скалярных комбинаций измерений.

Калькулятор размера выборки A/B теста

  • Калькулятор размера выборки — анализ мощности, секвенциальное тестирование (O'Brien-Fleming, Pocock), CUPED редукция дисперсии. Rust + WASM/JS + Python.

[0.9.9] — 2026-03-04

Добавлено

  • TRExFitter template morphing (ghost samples)Type: GHOST с Template: POI:value, полиномиальные сигнальные шаблоны через интерполяцию Лагранжа.

Исправлено

  • Рендеринг viz PNG/PDFrender_to_file() для PNG/PDF был сломан с 0.9.8: фичи png/pdf не пробрасывались через native-render feature gate.

[0.9.8] — 2026-03-04

Добавлено

  • ns-cli-py пакет — самостоятельный CLI Python-пакет nextstat с pyproject.toml и __main__.py.
  • nextstat-nlp remote workflow runnerscripts/nlp/nlp_workflow_remote.sh для воспроизводимой верификации NLP-пайплайна на удалённых хостах.
  • Тесты fallback режимов nextstat-nlp — грациозная деградация при недоступности бэкенда.

Исправлено

  • Детерминизм фарма-валидации — PQ-референсы стабилизированы для воспроизводимости.
  • pip extras — добавлен отсутствующий [all] extra, задокументированы все extras.

[0.9.7] — 2026-02-24

Фарма и популяционная ФК

  • PD модели Python APIemax_predict(), emax_nll(), sigmoid_emax_predict(), sigmoid_emax_nll(), idr_simulate(), idr_nll() доступны из Python. Emax и Sigmoid-Emax для доза-ответ, IDR типов I–IV для непрямого ответа.
  • FO / ITS / IMP методы оценкиnlme_foce(method="fo"|"its"|"imp") добавляет First Order, Iterative Two-Stage и Importance Sampling MC-EM для всех ФК моделей (1/2/3-комп × IV/oral). IMP использует IS-EM с MAP + importance sampling, взвешенный Ω M-шаг, ESS/max-weight диагностику.
  • SAEM ковариационный шагnlme_saem() теперь автоматически вычисляет R/S матрицы, сэндвич SE, RSE% и число обусловленности.
  • NPDE диагностикаpk_npde() Python API для симуляционных нормализованных ошибок предсказания. Возвращает per-observation NPDE/PD, сводную статистику, тест Шапиро–Уилка.
  • 3-компартментные ФК модели — IV болюс и оральная абсорбция с аналитическими градиентами. Мультидозовая суперпозиция через DosingRegimen::conc_3cpt_iv() и conc_3cpt_oral() с разложением собственных значений.
  • 3-компартментный SAEMnlme_saem(model="3cpt_iv") и nlme_saem(model="3cpt_oral") для 6- и 7-параметрической популяционной ФК оценки.
  • Per-subject дозирование для FOCE/SAEM/VPC/GoF — все функции популяционной ФК теперь принимают doses (вектор доз по субъектам) вместо единого скаляра. Python: doses=[4.0] (broadcast) или doses=[4.0, 3.5, 5.0] (per-subject).
  • FOCE omega_fixed / diagonal_omeganlme_foce(omega_fixed=[False, False, True]) фиксирует отдельные случайные эффекты; diagonal_omega=True форсирует диагональную Ω матрицу.
  • SAEM ковариатное моделированиеnlme_saem(covariates=[...]) принимает словари ковариат с power, exponential, proportional и categorical отношениями.
  • SAEM диагностика сходимостиreturn_theta_trace=True сохраняет per-iteration θ трассу, z-оценки Гевеке и относительное изменение параметров.
  • Bootstrap NLMEbootstrap_nlme() вычисляет непараметрический bootstrap SE и percentile/BCa доверительные интервалы для SAEM популяционных ФК параметров.
  • Демпфирование сигма в FOCE Phase 1 M-step — улучшена численная стабильность популяционной ФК оценки.
  • Биоэквивалентность — TOST (средняя БЭ), reference-scaled (RSABE), анализ мощности и расчёт размера выборки.
  • MAP оценка — Maximum A Posteriori с SE на основе гессиана.
  • Монте-Карло симуляция клинических испытаний — движок симуляции с PTA (вероятность достижения целевой концентрации).
  • Оптимизация дозы через PTA grid search — систематический подбор дозы по PTA целевым сеткам.
  • ODE-based ФК модели — транзитные компартменты, элиминация Михаэлиса–Ментен и TMDD.
  • Аллометрическое масштабирование для FOCE — аллометрические экспоненты по массе тела и ковариатные эффекты.
  • SCM Python APInextstat.scm() для пошагового ковариатного моделирования (прямой отбор + обратная элиминация). Возвращает полный аудит-трейс с ΔOFV, p-значениями и коэффициентами.
  • CDISC .xpt ридер/райтерread_xpt() / write_xpt() для SDTM/ADaM датасетов FDA, pure Rust с IBM 370 конвертацией. xpt_to_nonmem() автодетектирует SDTM/ADaM колонки.
  • NONMEM parity whitepaper + бенчмарки — формальная валидация FOCE/FOCEI и SAEM против референсных значений NONMEM на Theophylline, Warfarin и Phase I IV bolus. SAEM восстанавливает все параметры в пределах 7% от референса.
  • IQ/OQ/PQ протокол валидации v2 — 85 тест-кейсов по 11 OQ подсекциям. Соответствие 21 CFR Part 11 / EU Annex 11 / ICH E6(R3).
  • Авто-раннер IQ/OQ/PQpython tests/pharma_validation/runner.py автовыполняет 84 тест-кейса (5 IQ, 54 OQ, 25 PQ). Интегрирован в render_validation_pack.sh.
  • Фарма-туториалы — гайд по ФК моделированию, миграция с NONMEM, анализ выживаемости.

nextstat-nlp (GLiNER2 текст-в-статистику)

  • nextstat-nlp 0.2.0 — GLiNER2-based плагин для извлечения структурированных данных из клинического текста. Три пайплайна: survival (extract_survival_records), информативные априоры (extract_prior_candidates), режимы дозирования (extract_regimens). Три бэкенда: GLiNER2 Torch, GLiNER2 ONNX и heuristic (regex). Детерминированные парсеры с нормализацией единиц. Frozen dataclasses с SHA-256 хешами и ProvenanceBundle. 57 golden-file тестов.
  • nextstat-nlp 0.2.1 — Добавлен опциональный mlx бэкенд (Apple Silicon) через GLiNER2Swift (MLX/Metal). Пассрт device= (Torch) и providers=/num_threads= (ONNX Runtime). Бенчмарк-харнесс переиспользует один инстанс бэкенда.

EGARCH / GJR-GARCH

  • EGARCH Python APInextstat.volatility.egarch() для EGARCH(1,1) MLE с условной дисперсией и сигмой.
  • GJR-GARCH Python APInextstat.volatility.gjr_garch() для GJR-GARCH(1,1) MLE с рычажным эффектом.

LAPS GPU-сэмплер

  • Расширение GLM моделей LAPS — GPU-сэмплер теперь поддерживает "glm_linear", "glm_poisson", "glm_negbin" и "glm_composed_logistic" помимо "glm_logistic". Полная поддержка CUDA (f64) и Metal (f32). Poisson/NegBin принимают опциональный offset. NegBin оценивает дисперсию log_alpha. ComposedGlm использует NCP для групповых случайных intercept.
  • 4-фазная настройка warmup LAPS — улучшенное расписание warmup для лучшей сходимости.

Улучшения NUTS

  • Плотная метрика Pathfinderinit_strategy="pathfinder" с metric="dense" использует полную MLE ковариационную матрицу для инициализации DenseCholesky метрики. Fallback на диагональную при неудаче Cholesky.
  • Репортинг плотной метрикиsample() теперь возвращает metric_type, mass_diag и inv_mass_matrix в sample_stats.
  • NUTS vs CmdStan бенчмарк — сравнение ESS/s, R-hat и частоты дивергенций на StdNormal 10D, Eight Schools и GLM Logistic.

Бенчмарк-сьюты

  • Новые бенчмарк-сьюты — competing_risks, ode_pk, gamma_tweedie, ic_survival, lmm, ordinal, pd_models, pk_3cpt, garch_family.
  • Полная перезапись CHANGELOG — полная история от 0.1.0 до 0.9.9.
  • Канонические артефакты V100/EPYC/A100 — 3-платформенный аудит бенчмарков с воспроизводимыми снапшотами.

[0.9.6] — 2026-02-17

Добавлено

  • Pure Rust движок визуализации (ns-viz-render) — субмиллисекундная генерация SVG для всех 17 типов графиков (pulls, ranking, корреляционная матрица, profile scan, CLs curve, distributions, gammas, separation, summary, uncertainty, significance, contour, pie, yields, unfolding, morphing, injection). Заменяет зависимость от Python matplotlib. Вывод: SVG, PDF (svg2pdf), PNG (resvg). Встроенный шрифт Inter. Четыре темы: nextstat2026, atlas, cms, minimal.
  • Читатель конфигов Cabinetry — парсинг cabinetry YAML и конвертация в pyhf JSON workspace. CLI: nextstat import cabinetry.
  • Туториал-ноутбук (tutorials/nextstat_example.ipynb) — end-to-end HistFactory workflow: конструирование workspace, инспекция модели, MLE fit, pulls, ranking, корреляция, distributions, profile scan, CLs, темы и экспорт в SVG/PDF/PNG.
  • Унифицированное Python API — объединены варианты по типу модели и устройству в единые функции с runtime-диспатчем: ranking(), hypotest()/hypotest_toys(), profile_scan(), fit_toys(), upper_limit(). Все принимают device="cpu"|"cuda"|"metal". Старые unbinned_*, *_gpu, *_batch_gpu удалены.
  • TypedDict возвращаемые типы — ~25 структурированных TypedDict определений вместо непрозрачных Dict[str, Any]. Автодополнение IDE работает для всех функций.
  • profile_scan(return_curve=True) — объединяет бывший profile_curve() с массивами для графиков.
  • upper_limit(method="root") — объединяет бывший upper_limits_root() с method="bisect"|"root".
  • LAPS Metal backend — GPU-ускоренный MAMS-сэмплер на Apple Silicon (M1–M5) через Metal Shading Language. Встроенные модели (StdNormal, EightSchools, NealFunnel, NealFunnelNcp, NealFunnelRiemannian, GlmLogistic) с f32 вычислениями, fused multi-step ядро и SIMD-group cooperative ядро для тяжёлых GLM.
  • LAPS оконная адаптация масс — warmup фазы 2+3 используют Stan-style удвоенные окна для оценки inv_mass, улучшая сходимость.
  • LAPS Neal Funnel NCP — нецентрированная параметризация (model="neal_funnel_ncp"). R-hat < 1.02, ESS/s > 40,000 на M5 GPU (4096 цепей).
  • LAPS римановский MAMS — экспериментальная модель neal_funnel_riemannian с гибридной позиционно-зависимой метрикой Фишера. 19× улучшение ESS/s для x-измерений.
  • BCa доверительные интервалы — переиспользуемые bootstrap CI утилиты (percentile + bca) с диагностикой.
  • Рендерер визуализацийnextstat viz render для прямого рендеринга JSON артефактов в SVG/PDF/PNG.
  • Конкурирующие риски — оценщик CIF Аалена–Йоханнсена, K-sample тест Грея, регрессия субдистрибуционных рисков Файна–Грея.
  • EGARCH(1,1) и GJR-GARCH(1,1) — модели волатильности Нельсона (1991) и Глостена–Джаганнатана–Ранкла (1993) с MLE через L-BFGS-B.
  • Групповое секвенциальное тестирование — границы О’Брайена–Флеминга и Покока, Лан–ДеМетс функции расходования альфа.
  • Интервально-цензурированная Weibull AFT — модель ускоренного времени отказа с exact, right, left и interval цензурированием.

Исправлено

  • Metal unbinned batch toy fitting — исправлен lockstep L-BFGS-B optimizer stall (замедление 80–100×). Также применён f32-подходящий tolerance floor и retry-with-jitter для Metal.
  • Порядок параметров panel_fe() — изменён на (y, x, entity_ids, p) для соответствия конвенции эконометрического модуля.
  • Arrow/Parquet from_arrow совместимость — исправлено чтение Utf8/LargeUtf8 и List<Float64>/LargeList<Float64>.
  • Робастность градиента NB GLM — защита от неконечных промежуточных значений в производной дисперсии.
  • LAPS первый вызов ядра — исправлен баг CUDA ядра, где все цепи отвергались на первой итерации.
  • LAPS data-aware инициализация — цепи теперь стартуют в ~2σ от типичного множества через init_scale = L / (π√dim).
  • LAPS warmup cold-start collapse — исправлена адаптация шага из случайной инициализации. GLM logistic (n=200, p=6): 288s → 31s.

[0.9.5] — 2026-02-15

Исправлено

  • Покрытие PyPI wheelpip 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 readerRootFile::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 leaflistns-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-Rust ns-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 PDFfit_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 NLLGpuFlowSession::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, rayon par_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(): детерминированные когортные данные с правоцензурированным временем оттока, ковариатами плана/региона/использования и назначением воздействия.
  • Когортный retentionnextstat.churn_retention(): стратифицированные KM-кривые по группам + лог-ранк сравнение.
  • Модель риска оттокаnextstat.churn_risk_model(): hazard ratios Кокса с ДИ.
  • Каузальный upliftnextstat.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 upliftnextstat.churn_uplift_survival(): RMST, IPW-взвешенный КМ, ΔS(t) по горизонтам.
  • Бутстрап hazard ratiosnextstat.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::simplemodelsuncorrelated_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 Model trait — заменён на 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). Экспорт в PyTorch TensorDataset, .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 → HistFactory Workspace через fluent Rust API.
  • Модификаторы на уровне сэмпла: NormFactor, NormSys, WeightSys, TreeSys, HistoSys, StatError.
  • Создает тот же struct Workspace, что и путь pyhf JSON, без зависимости от ROOT C++.

Интероперабельность с TRExFitter

  • nextstat import trex-config — импортирует .config TRExFitter в 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::Smooth equivalent) + Gaussian kernel.
  • Pruning: shape, norm и overall прунинг с аудиторским следом.
  • nextstat preprocess CLI с декларативной 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, Python nextstat.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 manifestvalidation_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/FOCEIFoceEstimator: оптимизация ETA по субъектам (демпфированный Ньютон-Рафсон) + обновление популяционных параметров. Приближение Лапласа с ридж-регуляризованным гессианом.
  • Коррелированные случайные эффектыOmegaMatrix хранит полную Ω через факторизацию Холецкого (Ω = L·Lᵀ). FoceEstimator::fit_1cpt_oral_correlated() фитирует с полной Ω; FoceResult включает поля omega_matrix и correlation.
  • Пошаговое ковариатное моделирование (SCM)ScmEstimator: прямой отбор + обратное исключение по ΔOFV (LRT χ²(1)). Степенные, пропорциональные и экспоненциальные связи для CL/V/Ka. Полный аудит-трейс.
  • Диагностика VPC и GOFvpc_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, сиды, провенанс датасета.
  • Алгоритм SAEMSaemEstimator: стохастический аппроксимационный 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 APIPOST /v1/batch/fit фитит до 100 workspaces одним запросом; POST /v1/batch/toys запускает GPU-ускоренный toy fitting. client.batch_fit(workspaces), client.batch_toys(workspace, n_toys=1000).
  • Model cachePOST /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

  • nextstat Python-пакет (PyO3/maturin) с классами Model и FitResult.
  • nextstat CLI: 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.