Документ описывает полный жизненный цикл данных в фреймворке - от загрузки конфигурации до экспорта результатов и визуализации.
Файл: cli.py
python3 run --config backend/runner/config/options.json
Файл: config/model.py
cfg = TrialConfig.load(Path("config/options.json"))
Загружаемые поля:
| Поле | Описание | По умолчанию |
|---|---|---|
verbose |
Уровень логирования | 0 |
series_json |
Путь к JSON с рядами | config/example.json |
accel_json |
Путь к JSON с методами ускорения | config/example.json |
noise_json |
Путь к JSON с шумами | config/example.json |
filters_json |
Путь к JSON с фильтрами | config/example.json |
output_dir |
Директория вывода | output |
results_filename |
Имя файла результатов | results |
trial_process_count |
Число параллельных процессов | 1 |
trial_task_timeout |
Таймаут задачи (сек) | 10 |
trial_memory_efficient |
Режим экономии памяти | true |
precisions |
Типы точности | [F64] |
output_formats |
Форматы вывода | [JSON, CSV] |
Дополнительно загружается:
noises — список конфигураций шума из noise_jsonfilters — список конфигураций фильтров из filters_jsonФайл: dependency.py
executor = get_trial_executor_from_config(cfg)
Создаётся:
ParallelTrialRunner или SequentialTrialRunner в зависимости от trial_process_countPARAM_SERIES_SOURCE_BUILDERS registry:
JSONSeriesParamSourceCSVSeriesParamSourcePARAM_ACCELS_SOURCE_BUILDERS registry:
JSONAccelParamSource — если accel_json существуетTrialResultSerializerEXPORT_BUILDERS registry для каждого формата в output_formatsРезультат: Fully configured TrialExecutor
Файл: services/trial_executor.py:load_parameters()
series_params, accel_params = executor.load_parameters(PrecisionType.F64)
Процесс:
SeriesParamSource вызывается load(precision)AccelParamSource вызывается load(precision)noise_configsИз JSON файла загружаются:
{
"series": [
{
"name": "CosSeries",
"args": {"x": [1, 2]}
}
]
}
{
"methods": [
{
"name": "LevinAlgorithm",
"n": {"start": 10, "stop": 100, "step": 10},
"m": [8],
"args": {
"remainder": ["v_type"],
"useRecurrentFormula": true
},
"events": [...]
}
]
}
Функция autowrap:
{start, stop, step} -> генерирует диапазонРезультат:
series_params: list[BaseSeriesParam]accel_params: list[BaseAccelParam]Файл: domain/complex_trial.py
trial = ComplexTrial(series_params, accel_params)
combinations = trial.combinations()
Декартово произведение:
series_params * accel_params = [
(series_1, accel_1),
(series_1, accel_2),
...
(series_N, accel_M)
]
Каждая комбинация будет выполнена со всеми:
noise_configs (если есть)filter_configs (если есть)precisions (итерация внешнего цикла)Результат: list[tuple[BaseSeriesParam, BaseAccelParam]]
Файл: domain/use_cases/run_trial.py:execute_trial()
results = execute_trial(
(series, accel),
noise_config,
filter_configs
)
Подпроцессы:
series_result, series_lim = series.obtain_by_argument(series_argument, size_floor)
CosSeriesF64)size_floorseries_limif noise_config:
func_name = f"applyNoise{precision.value}"
series_result = getattr(ps, func_name)(
series_result,
noise_method_enum,
noise_type_enum,
seed, param1, param2
)
accel_instance = accel.create_instance(additional_args)
LevinAlgorithmF64)for m_value in m_values:
ctx = accel.create_event_context()
for n_value in n_values:
partial_sum = series_result.Sn[n_value - 1]
accel_value = accel_instance(n_value, m_value, series_result)
computed.append(ComputedTrialResult(...))
events = accel.process_events(computed, ctx)
Вычисляемые метрики:
series_value - член ряда a_npartial_sum - частичная сумма S_npartial_sum_deviation - |
S_n - lim |
accel_value - значение ускорения A_naccel_value_deviation - |
A_n - lim |
events - список обнаруженных событийФайл: domain/event.py
Типы событий:
slow_accel - |
A_n - lim | > | S_n - lim |
monotone - монотонностьdivergent - расходимостьsign_changed - смена знакаsecond_diff - рост второй разностиОбработка событий:
log_action_capacity - максимальное число раз, которое можно логировавть событий.stop_action_limit - остановить выполнение после N событий.Если событие остановило выполнение:
filtered_resultsРезультат: list[TrialResult]
Файлы: infra/trials/parallel_runner.py, infra/trials/sequential_runner.py
for result_chunk in runner.run(combinations):
results.extend(result_chunk)
SequentialTrialRunner:
ParallelTrialRunner:
pool = multiprocessing.Pool(process_count)Результат: Iterator[list[TrialResult]]
Файл: infra/export/serializer.py
dicts = serializer.to_dict(results)
Преобразование TrialResult -> dict:
Файлы: infra/export/*.py
for exporter in exporters:
exporter.export(dicts, config, series)
Файл: json_exporter.py
# Сохраняет в: output/results.json
json.dump(dicts, file, indent=2)
Файл: csv_exporter.py
# Сохраняет в: output/results.csv
df = pd.DataFrame(dicts)
df.to_csv(path, index=False)
–
GET /api/resultsResultDocument Pydantic моделиPYTHONPATH="." python3 -m vizr.main ../runner/output/results.json
| Источник | Формат | Содержимое |
|---|---|---|
options.json |
JSON | Конфигурация выполнения |
example.json |
JSON | Ряды, методы, шумы, фильтры |
example_series.csv |
CSV | Натуральные ряды |
| Стадия | Тип | Описание |
|---|---|---|
| Параметры | BaseSeriesParam, BaseAccelParam |
Загруженные параметры |
| Комбинации | tuple[Series, Accel] |
Декартово произведение |
| Trial result | TrialResult |
Результат одного trial |
| Сериализованные | dict |
JSON-совместимые словари |
| Формат | Расположение | Использование |
|---|---|---|
| JSON | output/results.json |
Анализ, интеграция |
| CSV | output/results.csv |
Excel, pandas |
| Parquet | output/results.parquet |
Vizr, big data |
| MongoDB | База данных | Web UI |
TrialResult
├── SeriesTrialResult
│ ├── id: str
│ ├── name: str
│ ├── lim: float | None
│ └── arguments: dict
├── AccelTrialResult
│ ├── name: str
│ ├── m_value: int
│ └── additional_args: dict
├── computed: list[ComputedTrialResult]
│ ├── n: int
│ ├── series_value: float
│ ├── partial_sum: float
│ ├── partial_sum_deviation: float
│ ├── accel_value: float
│ ├── accel_value_deviation: float
│ └── events: list[Event]
├── noise: NoiseConfig | None
├── error: ErrorTrialResult | NoErrorTrialResult
└── filtered: FilteredResults | None
├── start_n: int
├── segment_length: int
└── methods: dict[str, FilterMethodResult]