Архитектура
NextStat следует принципам «чистой архитектуры»: вывод зависит от стабильных абстракций, а не от конкретных бэкендов. Высокоуровневая логика (MLE, профильное правдоподобие, проверки гипотез) отделена от вычислительного слоя (SIMD, CUDA, Metal).
Диаграмма слоёв
┌─────────────────────────────────────────────────────────────────┐
│ ВЫСОКОУРОВНЕВАЯ ЛОГИКА │
│ ns-inference (MLE, профильное правдоподобие, проверки, ...) │
│ - зависит от типов ядра и интерфейсов моделей │
└─────────────────────────┬──────────────────────────────────────┘
│ зависит от абстракций
┌─────────────────────────┴──────────────────────────────────────┐
│ ns-core (interfaces) │
│ - error types, FitResult, traits │
└─────────────────────────┬──────────────────────────────────────┘
│ реализуется в
┌─────────────────────────┴──────────────────────────────────────┐
│ НИЗКОУРОВНЕВЫЕ РЕАЛИЗАЦИИ │
│ ns-translate ns-compute ns-ad ns-root │
│ (pyhf/ntuple) (SIMD/GPU) (AD) (ROOT I/O) │
└────────────────────────────────────────────────────────────────┘Карта крейтов
| Крейт | Назначение |
|---|---|
| ns-core | Ключевые типы, трейты, обработка ошибок |
| ns-compute | SIMD-ядра, Apple Accelerate, CUDA/Metal батч NLL+градиент |
| ns-ad | Автоматическое дифференцирование (двойные числа / лента) |
| ns-root | Нативный чтец ROOT-файлов (TH1, TTree, выражения, filler) |
| ns-translate | Трансляторы форматов (pyhf JSON, HistFactory XML, ntuple builder) |
| ns-inference | MLE, NUTS, CLs, GLM, time series, PK/NLME |
| ns-viz | Артефакты визуализации (Brazil bands, профильные сканы) |
| ns-cli | Командная строка |
| ns-prob | Распределения вероятностей |
Вычислительные бэкенды
Крейт ns-computeабстрагирует несколько бэкендов. Слой вывода выбирает лучший доступный вариант во время выполнения:
- CPU (по умолчанию) — SIMD автовекторизация + пул потоков Rayon
- Apple Accelerate — vDSP/vForce для векторизованной математики на macOS
- CUDA — ядра NVIDIA GPU для батч NLL + градиент (f64)
- Metal — шейдеры Apple Silicon GPU (f32)
Python-привязки
Крейт ns-py(в bindings/ns-py/) экспортирует Rust API в Python через PyO3. Сборка выполняется через maturin. Имя Python-пакета:nextstat.
