Статистика нового
поколения.

Статистический вывод на скоростях Rust. От A/B тестов до физики частиц — один движок для частотных и байесовских методов. SIMD, CUDA, Metal — от данных к результатам.

Открытый код • AGPL-3.0 • Коммерческая лицензия

Без C++.
Простая установка.

Чтение ROOT TTree, HS3, Arrow IPC и Parquet — без внешних зависимостей. mmap и параллельная декомпрессия. Без conda и конфликтов динамических библиотек.

TTree/TBranch с колоночным чтением — ROOT C++ не нужен
Селекции и веса через выражения: "njet >= 4 && pt > 25.0"
pyhf JSON, HS3, Arrow IPC, Parquet — поддержка форматов ФВЭ без дополнительной настройки
pip install nextstat — одна команда (Linux, macOS, Windows)

Одна команда.
Полный пайплайн.

ROOT ntuples → гистограммы → HistFactory workspace → фит → пределы CLs. Привычный пайплайн TRExFitter, но на Rust и без промежуточных файлов.

nextstat fit --input workspace.json
Справка по CLI →

Совместим с pyhf.
Подтверждено тестами.

pyhf задал стандарт HistFactory на Python. NextStat читает те же JSON workspace и валидируется против pyhf в детерминистическом режиме (Δ < 1e-8). Barlow–Beeston lite для статистических ошибок по бинам. Ничего не нужно менять в ваших JSON workspace.

Прямое чтение pyhf JSON workspace
Устойчивые неопределённости: демпфированный гессиан с диагональным запасным вариантом
Стабильность на 50+ каналах, 1000+ бинах, 200+ систематических неопределённостях
WASM-песочница: CLs в браузере, без сервера

50+ статистических методов.
Один движок.

MLE (L-BFGS-B)
NUTS (байесовское сэмплирование)
MAMS (микроканонический MCMC)
Профильное правдоподобие
Пределы исключения CLs
Проверка гипотез (toy-эксперименты)
GLM: линейная / логистическая / Пуассона
GLM: отриц. биномиальная / гамма / Tweedie
Ординальная регрессия (logit / probit)
Линейные смешанные модели (REML)
Иерархический Байес
Выживаемость: Cox PH / Вейбулл / лог-норм. AFT
Интервально-цензурированная выживаемость
Конкурирующие риски (Fine-Gray)
Каплан-Мейер + лог-ранк тест
Временные ряды: Калман / EM / GARCH
Стохастическая волатильность
Разность разностей / event study
Панельные FE (1- и 2-way HDFE)
IV / 2SLS
AIPW (причинный вывод)
Мета-анализ (фикс. + случ. эффекты)
Chain Ladder / Mack (страховые резервы)
EVT: GEV + GPD (экстремальные значения)
Дерево отказов Монте-Карло (надёжность)
Секвенциальное тестирование (α-spending)
ФК/ФД + популяционная НСМЭ (FOCE)
GPU-нативный оптимизатор (CUDA/Metal)

Воспроизводимость
встроена.

--threads 1 и --seed дают побитовую воспроизводимость. Каждый toy-эксперимент, каждый фит, каждый скан — воспроизводим.

--seed 42 для воспроизводимых toy-экспериментов
--threads 1 для побитового детерминизма
Экспорт ArviZ InferenceData для цепочек NUTS
Визуализация Brazil band через nextstat.viz

Создан для физики.
Готов ко всему.

NextStat родился в физике высоких энергий. Тот же движок работает для анализа выживаемости, эконометрики и временных рядов.

Физика высоких энергий

  • HistFactory workspace (pyhf JSON)
  • Профильное правдоподобие и пределы CLs
  • Ntuple → workspace пайплайн
  • Совместимость с конфигами TRExFitter

ML и обучение с подкреплением

  • PyTorch: zero-copy CUDA-градиенты через NLL
  • Gymnasium RL-среда для оптимизации сигнала
  • Профилированный CLs как функция потерь
  • Дополняет neos / MODE

Прикладная статистика

  • GLM / регрессия / иерархический Байес
  • Выживаемость (КМ, лог-ранг, Cox PH, параметрические)
  • Временные ряды (Kalman / EM)
  • Эконометрика (DiD, IV/2SLS, AIPW)

Вычислительные бекенды

  • CUDA-ядра для GPU NVIDIA (f64)
  • Metal-шейдеры для Apple Silicon (f32)
  • SIMD + Apple Accelerate (vDSP/vForce)
  • WASM-песочница в браузере
Кросс-вертикаль

Один движок. Пять вертикалей.

Каплан-Мейер, лог-ранг, Cox PH, GLM и бутстрап работают на одном ядре Rust. Один pip install nextstat открывает анализ выживаемости для фармы, страхования, эпидемиологии, надёжности и подписочной аналитики.

Фарма и биотех

Конечные точки клинических испытаний, кривые КМ, сравнение групп лечения, отношения рисков Cox PH.

Страхование и актуарные расчёты

Резервирование убытков, Gamma/Tweedie GLM для тарификации, экстремальные значения (GEV/GPD) для перестрахования.

Эпидемиология

Популяционная выживаемость, когортные исследования, мета-анализ с диагностикой гетерогенности.

Надёжность

Анализ отказов компонентов, оценка Вейбулла, time-to-event с правым цензурированием.

Подписки и отток

Когортное удержание, модели риска оттока, каузальная оценка эффекта вмешательства (AIPW).

import nextstat

# Оценка Каплана-Мейера
km = nextstat.kaplan_meier(times, events, conf_level=0.95)
print(f"Медиана выживаемости: {km['median']:.1f}")

# Лог-ранг тест: сравнение двух групп лечения
lr = nextstat.log_rank_test(times, events, groups)
print(f"p = {lr['p_value']:.4f}  (chi² = {lr['chi_squared']:.2f})")

# Cox PH: отношения рисков
fit = nextstat.survival.cox_ph.fit(times, events, x, robust=True)
print(fit.hazard_ratio_confint())
Times + Events
Kaplan-Meier
Log-Rank
Cox PH
Hazard Ratios + CI
Новое в 2026

Ваш анализ — это RL-среда.

RL-агент оптимизирует гистограммы сигнала, максимизируя значимость открытия. NextStat оборачивает HistFactory likelihood в стандартную Gymnasium среду — SB3, CleanRL, RLlib работают без дополнительной настройки.

from nextstat.gym import make_histfactory_env

env = make_histfactory_env(
    workspace_json,
    channel="SR",
    sample="signal",
    reward_metric="z0",        # discovery significance
    action_mode="logmul",
    max_steps=64,
)

obs, info = env.reset(seed=42)
for _ in range(64):
    action = agent.predict(obs)
    obs, reward, done, _, info = env.step(action)
    if done:
        break

Gymnasium-совместимая HistFactory-среда

Стандартный Gymnasium API — работает со Stable Baselines3, CleanRL, RLlib или любым Gym-совместимым агентом без дополнительной настройки.

Реальная физика как награда

NLL, значимость открытия (q₀/Z₀), мощность исключения (qμ/Zμ) — не суррогатные метрики, а реальная физика.

Безградиентные + градиентные методы

PPO/SAC через Gymnasium для поиска «чёрным ящиком», nextstat.torch для сквозных градиентов. Дополняет neos и MODE.

Одна строка для смены награды

reward_metric="nll" для быстрых циклов, "z0" для профилированного открытия, "zmu" для исключения — одна среда.

RL-агентдействие (Δ бинов сигнала)NextStat HistFactoryнаграда (Z₀ / qμ / NLL)наблюдение
ML-интеграция

Физика как функция потерь.

Вместо схемы «кросс-энтропия, а затем статистический тест» — градиенты через сам тест. Нейросеть напрямую оптимизирует значимость открытия, а систематики профилируются автоматически.

from nextstat.torch import SignificanceLoss, SoftHistogram

model = nextstat.from_pyhf(workspace_json)
loss_fn = SignificanceLoss(model, "signal")
soft_hist = SoftHistogram(bin_edges=torch.linspace(0, 1, 11))

for batch_x, batch_w in dataloader:
    scores = classifier(batch_x)             # NN → scores
    histogram = soft_hist(scores, batch_w)   # → soft bins
    loss = loss_fn(histogram.double().cuda()) # → -Z₀
    loss.backward()                          # gradients → NN
    optimizer.step()

Дифференцирование через тестовую статистику

Функция потерь — профилированная значимость Z₀, не суррогат. Систематики профилируются в ходе прямого прохода.

SoftHistogram: от нейросети к бинному анализу

Дифференцируемое биннирование (KDE / сигмоидное). Выход сети превращается в гистограмму с полным градиентным потоком.

DLPack / Array API: совместимость

as_tensor() соединяет массивы JAX, CuPy, Arrow и NumPy с PyTorch — без копирования (zero-copy) на GPU через DLPack.

MLOps встроен

metrics_dict() для W&B / MLflow. rank_impact() для ранжирования систематик. signal_jacobian() для быстрого отсева.

NN-классификатор
SoftHistogram
SignificanceLoss (−Z₀)
.backward()
∂loss/∂weights
Безбинный анализ

Каждое событие на счету.

Безбинный анализ сохраняет полную информацию о каждом событии — никакой потери в биннировании. 13 параметрических PDF, extended unbinned likelihood, декларативная YAML-спецификация и тот же оптимизатор что и для HistFactory.

YAML-спецификация

# unbinned_spec.yaml — параметрический безбинный анализ
observables:
  - name: mass
    range: [5.0, 6.0]
    unit: GeV

processes:
  - name: signal
    pdf:
      type: crystal_ball
      params: { mu: mu_sig, sigma: 0.02, alpha: 1.5, n: 2.0 }
    yield: { expr: "mu * 500.0" }

  - name: background
    pdf:
      type: chebyshev
      params: { c1: c1_bkg, c2: c2_bkg }
    yield: { expr: "5000.0" }

Python

from nextstat import UnbinnedModel

model = UnbinnedModel.from_config("unbinned_spec.yaml")
result = model.fit(data="events.parquet")

# Профильный скан по μ
scan = model.profile_scan("mu", bounds=(0.0, 3.0), n_points=40)

# CLs верхний предел
limit = model.upper_limit("mu", cl=0.95)

CLI

# Фит
nextstat unbinned-fit spec.yaml --data events.parquet

# Профильный скан
nextstat unbinned-scan spec.yaml --poi mu --range 0:3 --points 40

# Toy studies на GPU
nextstat unbinned-fit-toys spec.yaml --ntoys 2000 --gpu cuda

13 параметрических PDF из коробки

Gaussian, Crystal Ball, Double Crystal Ball, Exponential, Chebyshev, Bernstein, Voigtian, ARGUS, Spline, KDE (1D–3D), Product PDF. Аналитическая нормировка где возможно, квадратура Гаусса–Лежандра для остальных.

EventStore: SoA колоночный layout

Наблюдаемые хранятся в Structure-of-Arrays формате для cache-friendly SIMD. Автоматическая загрузка из Parquet, ROOT TTree или NumPy.

Декларативная YAML-спецификация

unbinned_spec_v0 — тот же подход что и HistFactory JSON. Процессы, PDF, yields, rate modifiers (NormSys, WeightSys), per-event систематики — всё в одном файле.

Единый LogDensityModel trait

Тот же оптимизатор (L-BFGS), тот же профильный скан, тот же CLs — бинированный и безбинный стеки полностью совместимы.

GPU-ускорение (CUDA + Metal)

NLL reduction на GPU для тысяч событий. Батч-фит тоев полностью на устройстве. Unbinned --gpu читает Parquet напрямую.

events.parquet / ROOT TTree
EventStore (SoA)
unbinned_spec.yaml
LogDensityModel → L-BFGS
μ̂ ± σ / CLs / Brazil bands
Нейронные PDF

Шаблоны уходят. Потоки приходят.

Normalizing flows и DCR-суррогаты заменяют бинированные шаблоны в unbinned-анализе. Обучите модель в любом фреймворке, экспортируйте ONNX — NextStat использует её как полноценную PDF с градиентами, нормировкой и сэмплированием.

# unbinned_spec.yaml — нейронная PDF вместо шаблона
processes:
  - name: signal
    pdf:
      type: conditional_flow          # нейронный flow
      manifest: models/flow_manifest.json
      context_params: [alpha_jes]     # NP как контекст
    yield: { expr: "mu * 1200.0" }

  - name: background
    pdf:
      type: dcr_surrogate             # нейронный суррогат
      manifest: models/dcr_manifest.json
    yield: { expr: "3400.0" }
from nextstat import UnbinnedModel

model = UnbinnedModel.from_config("unbinned_spec.yaml")
result = model.fit()

# Профильный скан по μ
scan = model.profile_scan("mu", bounds=(0.0, 3.0), n_points=40)

Любой фреймворк → ONNX → NextStat

Обучайте flow в PyTorch (zuko), JAX (distrax) или TensorFlow — экспортируйте в ONNX, NextStat подхватит автоматически.

DCR Surrogate: безбинный морфинг

Нейронный Direct Classifier Ratio заменяет шаблонный морфинг. Гладкие, непрерывные систематики — никаких бинов и интерполяций.

FAIR-HUC: валидированное обучение

Протокол дистилляции из HistFactory-шаблонов с проверкой нормировки (PIT/KS) и closure tests. Суррогат верифицируем.

Feature-gated: ноль оверхеда

--features neural активирует нейронные PDF. Без флага — бинарник не содержит ONNX Runtime, размер и скорость не меняются.

Обучающие данные
zuko / nflows / distrax
ONNX-экспорт
flow_manifest.json
nextstat unbinned-fit
Профилированный результат
Байесовский сэмплинг

Дальше NUTS. MAMS.

Metropolis-Adjusted Microcanonical Sampler (Robnik et al., 2025) — микроканонический MCMC метод, показывающий 2–7× улучшение ESS на градиент по сравнению с NUTS на опубликованных бенчмарках. NextStat поставляет готовую к продакшену реализацию с авто-настройкой и поддержкой мульти-цепочек.

import nextstat

# Любая модель с dim/nll/grad_nll
model = nextstat.EightSchoolsModel(y, sigma)

# MAMS: arXiv:2503.01707 — MCMC нового поколения
result = nextstat.sample_mams(
    model,
    n_chains=4,
    n_warmup=1000,
    n_samples=2000,
    seed=42,
)

# Та же диагностика: R-hat, ESS, дивергенции
print(result.summary())

Изокинетическая динамика на единичной сфере

Скорость живёт на S^{d-1} с проективным обновлением градиента. Фиксированная длина траектории — без построения дерева, предсказуемая стоимость перехода.

Автоматическая настройка warmup

3 фазы: бинарный поиск шага ε, диагональный прекондиционер Welford, настройка длины декогеренции L через оптимизацию ESS/градиент.

Overflow-устойчивый критерий MH

Формулировка через log-sum-exp: ζ = exp(−2δ) вместо cosh/sinh. Стабилен там, где NUTS даёт дивергенции.

Замена NUTS в одну строку

Тот же формат Chain, та же диагностика (R-hat, ESS, дивергенции), тот же экспорт в ArviZ. Переключение — одна функция.

Сравнение NUTS vs MAMS →
Аналитика подписок

Анализ оттока. Каузальные ответы.

Полный пайплайн аналитики подписок для SaaS, телеком и страхования — от загрузки данных до каузальной оценки uplift. Модели выживания, hazard ratios, AIPW-эффекты воздействия и матрицы удержания, скомпилированные в нативную скорость.

import nextstat

# Генерация или загрузка реальных данных клиентов
data = nextstat.churn_generate_data(
    n_customers=5000, seed=42
)

# Когортное удержание: стратифицированный KM + log-rank
ret = nextstat.churn_retention(
    data.times, data.events, data.groups
)

# Cox PH модель риска → hazard ratios + ДИ
risk = nextstat.churn_risk_model(
    data.times, data.events,
    data.covariates, data.names
)

# Каузальный uplift: снизило ли вмешательство отток?
uplift = nextstat.churn_uplift(
    data.times, data.events,
    data.treated, data.covariates,
    horizon=12.0,
)
print(f"ATE = {uplift.ate:.4f}, Γ = {uplift.gamma}")

Полный пайплайн

От загрузки Parquet/CSV с YAML-маппингом колонок через KM-удержание, Cox PH модель риска до каузального uplift на AIPW — одна библиотека, без клея.

Каузальный uplift с анализом чувствительности Розенбаума

Оценка эффекта воздействия на базе AIPW со встроенным анализом чувствительности. Точно знайте, сколько скрытого конфаундинга нужно для отмены результата.

Когортная матрица удержания

Матрица удержания в стиле life-table по когортам — именно тот артефакт, который нужен growth-командам. Сериализуется в JSON, готова для дашбордов.

Bootstrap ДИ через Rayon

Параллельный bootstrap hazard ratios на всех ядрах CPU. 1000 ресэмплов за секунды, не минуты.

Руководство по аналитике оттока →
Фармакометрика

Популяционная ФК. Скорость Rust.

Фармакокинетическое и фармакодинамическое моделирование с НСМЭ-оценкой, совместимым с NONMEM ридером датасетов, пошаговым ковариатным моделированием и VPC-диагностикой. Тот же движок L-BFGS + аналитические градиенты, что используется для HEP-фитов — применённый к клинической фармакологии.

import nextstat

# Однокамерная пероральная ФК-модель
model = nextstat.OneCompartmentOralPkModel(
    times=times, observations=conc,
    dose=320.0, tau=24.0,
)

# MLE-фит → оценки CL, V, KA
fit = nextstat.fit(model)
print(fit.parameters)  # [CL, V, KA]

# Популяционная ФК через НСМЭ (Лаплас)
pop = nextstat.OneCompartmentOralPkNlmeModel(
    subjects=subjects,
    dose=320.0, tau=24.0,
)
pop_fit = nextstat.fit(pop)

# Визуальная предиктивная проверка
vpc = nextstat.vpc(pop, pop_fit, n_sim=500)

Однокамерная пероральная ФК + популяционная НСМЭ

Индивидуальные и популяционные ФК-модели с аппроксимацией Лапласа. Фиксированные и случайные эффекты на CL, V, KA.

Оценка FOCE / FOCEI

Условная оценка первого порядка — золотой стандарт FDA для нелинейных моделей со смешанными эффектами. Продакшн-реализация.

Чтение датасетов NONMEM

Чтение .csv с колонками EVID/MDV/AMT/DV напрямую. Многодозовые режимы, инфузии и коррекции доз. Без конвертации формата.

Пошаговое ковариатное моделирование

Автоматическое прямое добавление + обратное исключение с LRT. Определение ковариат пациента, объясняющих вариабельность ФК.

VPC + диагностика

Визуальные предиктивные проверки, графики оценки качества модели. Стандартный фармацевтический набор для квалификации модели.

Руководство по фармакометрике →
Пайплайн данных

Zero-copy. С диска на GPU.

Ридеры Parquet и Arrow IPC с mmap zero-copy, проекцией колонок, pushdown предикатов по row groups и параллельным декодированием. Данные идут с диска на фит — или напрямую на GPU — без промежуточных аллокаций.

import nextstat

# Zero-copy mmap Parquet ридер
model = nextstat.from_parquet(
    "events.parquet",
    spec="analysis.yaml",
)

# С проекцией колонок + pushdown предикатов
model = nextstat.from_parquet_with_modifiers(
    "events.parquet",
    spec="analysis.yaml",
    columns=["mass", "pt", "eta"],
    filter="pt > 25.0 && njet >= 4",
)

# Тот же API для Arrow IPC
model = nextstat.from_arrow_ipc(
    "events.arrow",
    spec="analysis.yaml",
)

# Фит — данные не покидают mmap до необходимости
result = nextstat.fit(model)

mmap zero-copy чтение

Ридер на memmap2 — без аллокаций кучи для файлового I/O. 100K событий с 4 колонками декодируются за 557 мкс.

Проекция колонок

Чтение только нужных анализу колонок. Ускорение 35–50% на широких таблицах за счёт пропуска неиспользуемых колонок.

Pushdown предикатов по row groups

Отсечение row groups по min/max статистикам до декодирования. До 5× ускорения на селективных фильтрах.

Параллельное декодирование row groups

Параллельная декомпрессия через Rayon. Выигрыш на датасетах >1M событий с множеством row groups.

Прямая загрузка на GPU

SoA f64 массивы идут напрямую в CudaSlice<f64> (CUDA) или MTLBuffer (Metal, f32). Без промежуточных копий между диском и GPU.

Руководство по Parquet пайплайну →
R-пакет

R-пользователи. Добро пожаловать.

NextStat поставляет R-пакет на основе extendr. HistFactory фиты, GLM, фильтры Калмана, GARCH и стохастическая волатильность — всё вызывает то же Rust-ядро. CRAN-ready упаковка с вендорированными крейтами.

library(nextstat)

# HistFactory фит из pyhf JSON
fit <- nextstat_fit("workspace.json")
print(fit$parameters)

# GLM: логистическая регрессия
glm <- nextstat_glm_logistic(X, y)
print(glm$coefficients)

# Временные ряды: фильтр Калмана + GARCH
kf <- nextstat_kalman(y, F, H, Q, R, x0, P0)
garch <- nextstat_garch(returns)

# Стохастическая волатильность
sv <- nextstat_sv(returns)
print(sv$volatility)

11 функций, готов для CRAN

Документация roxygen2, тест-сьют testthat с 48 проверками, скрипт configure, виньетка getting-started и NEWS.md. Готов к подаче в CRAN.

HEP + прикладная статистика в одном пакете

nextstat_fit() / nextstat_hypotest() / nextstat_upper_limit() для HistFactory наряду с nextstat_glm_logistic() / nextstat_kalman() / nextstat_garch() для общей статистики.

Вендорированные Rust-крейты

Автономный tarball — интернет не нужен при R CMD INSTALL. make nsr-vendor-sync синхронизирует исходники крейтов.

Тот же движок, другой язык

Идентичное Rust-ядро с Python- и WASM-биндингами. R-пользователи получают ту же скорость и числовую точность — не переимплементация.

AI-интеграция

Агент вызывает. NextStat отвечает.

GPT, Claude, Llama, локальная модель через Ollama — любой агент может вызвать NextStat как инструмент. OpenAI function calling, LangChain и MCP из коробки. Локально или через GPU-сервер.

OpenAI

from nextstat.tools import get_toolkit, execute_tool
import openai, json

tools = get_toolkit()                    # OpenAI-совместимые определения
resp = openai.chat.completions.create(
    model="gpt",
    messages=[{"role": "user", "content": "Фит workspace и покажи POI"}],
    tools=tools,
)

for call in resp.choices[0].message.tool_calls:
    result = execute_tool(
        call.function.name,
        json.loads(call.function.arguments),
    )
    # result: { ok, result, error, meta }

MCP

from nextstat.tools import get_mcp_tools, handle_mcp_call

mcp_tools = get_mcp_tools()      # MCP-совместимые определения
# ... MCP-сервер получает вызов ...
result = handle_mcp_call("nextstat_fit", {"workspace_json": ws})

LangChain

from nextstat.tools import get_langchain_tools

tools = get_langchain_tools()    # list[StructuredTool]
agent = create_tool_calling_agent(llm, tools, prompt)

8 инструментов — полный цикл анализа

fit, hypotest, upper_limit, ranking, discovery, scan, workspace_audit, read_root_histogram. Агент может провести весь анализ от ROOT-файла до публикации.

OpenAI · LangChain · MCP

Единый реестр инструментов с адаптерами для трёх главных стандартов. get_toolkit() — OpenAI, get_langchain_tools() — LangChain StructuredTool, get_mcp_tools() — Model Context Protocol.

local + server transport

Инструменты работают in-process через Python или удалённо через nextstat-server (HTTP). Автоматический fallback: если сервер недоступен, вызов исполняется локально.

Детерминированный envelope

Каждый ответ — стабильный JSON nextstat.tool_result.v1: { ok, result, error, meta }. Режим parity + threads=1 гарантируют воспроизводимость между вызовами.

Physics Assistant — демо

Полный пример: ROOT-гистограммы → workspace → anomaly scan → discovery → верхние пределы. Работает локально, через сервер и в Docker.

AI-агент (GPT / Claude / Ollama)
tool_call: nextstat_fit
NextStat (local / server)
tool_result.v1 envelope
Агент интерпретирует

Производительность
в масштабе.

CLs по toy-экспериментам на реальной модели ФВЭ. Один workspace, одна физика. Реальное время.

pyhf (multiprocessing, 10 procs)
50m 11.7s
NextStat (Rayon)
3.47s
868× ускорение в этом бенчмарке (CLs по toy-экспериментам, vs pyhf NumPy)
50 каналов × 4 бина, 201 параметр
10 000 + 10 000 toy-экспериментов за 3.47 с
Паритет NLL с pyhf (Δ < 1e-8)

Установка за секунды.
Запуск за минуты.

pip install nextstat. Без conda. Без root. Без компилятора.

NextStat вдохновлён работой pyhf, TRExFitter, ROOT, и HistFactory спецификации.
Мы благодарны их авторам и сообществам.