from __future__ import annotations from dataclasses import dataclass from pathlib import Path from app.simulation.reporting.amesim_results import AmesimResults, load_test_mql_amesim_results from app.simulation.reporting.test_mql_comparison import TestMqlComparisonResult from app.simulation.reporting.test_mql_observations import ( TestMqlObservationCatalog, build_test_mql_observation_catalog, ) from app.simulation.reporting.test_mql_output_schema import ( TestMqlOutputSchema, build_test_mql_output_schema, ) from app.simulation.reporting.test_mql_output_validation import ( TestMqlValidatedOutput, compare_validated_test_mql_output, validate_test_mql_output, ) @dataclass(frozen=True) class TestMqlBaselineRun: amesim_results: AmesimResults observation_catalog: TestMqlObservationCatalog output_schema: TestMqlOutputSchema output: TestMqlValidatedOutput comparison: TestMqlComparisonResult @property def sample_count(self) -> int: return len(self.output.times) @property def signal_count(self) -> int: return len(self.output.data_paths) def run_test_mql_baseline_passthrough( archive_path: Path, *, data_paths: tuple[str, ...] | list[str] | None = None, ) -> TestMqlBaselineRun: amesim_results = load_test_mql_amesim_results(archive_path) observation_catalog = build_test_mql_observation_catalog(amesim_results) output_schema = build_test_mql_output_schema( amesim_results, observation_catalog=observation_catalog, ) selected_paths = tuple(data_paths) if data_paths is not None else output_schema.data_paths() baseline_series = observation_catalog.baseline_series_by_data_path( amesim_results, selected_paths, ) output = validate_test_mql_output( times=amesim_results.times, series_by_data_path=baseline_series, schema=output_schema, data_paths=selected_paths, require_all_schema_paths=data_paths is None, ) comparison = compare_validated_test_mql_output( times=output.times, series_by_data_path=output.series_by_data_path, schema=output_schema, amesim_results=amesim_results, data_paths=output.data_paths, require_all_schema_paths=data_paths is None, ) return TestMqlBaselineRun( amesim_results=amesim_results, observation_catalog=observation_catalog, output_schema=output_schema, output=output, comparison=comparison, )