diff --git a/PythonModels/scripts/run_test_mql_full_state_comparison.py b/PythonModels/scripts/run_test_mql_full_state_comparison.py index 1ac96b4..5a7930d 100644 --- a/PythonModels/scripts/run_test_mql_full_state_comparison.py +++ b/PythonModels/scripts/run_test_mql_full_state_comparison.py @@ -53,6 +53,20 @@ class TestMqlFullStateComparisonRun: def signal_count(self) -> int: return len(self.output.data_paths) + def metrics_by_max_abs_error(self): + return tuple( + sorted( + self.comparison.metrics, + key=lambda metric: metric.max_abs_error, + reverse=True, + ) + ) + + @property + def largest_abs_error_metric(self): + metrics = self.metrics_by_max_abs_error() + return metrics[0] if metrics else None + @dataclass(frozen=True) class TestMqlFullStateComparisonPathConfig: @@ -175,7 +189,14 @@ def format_test_mql_full_state_comparison_summary( f"Max absolute error: {run.comparison.max_abs_error}", f"Max relative error: {run.comparison.max_rel_error}", ] - for metric in run.comparison.metrics: + largest_metric = run.largest_abs_error_metric + if largest_metric is not None: + lines.append( + "Largest absolute error: " + f"{largest_metric.data_path}={largest_metric.max_abs_error}" + ) + lines.append("Metrics by max absolute error:") + for metric in run.metrics_by_max_abs_error(): lines.append( f" - {metric.data_path}: max_abs_error={metric.max_abs_error}, " f"final_abs_error={metric.final_abs_error}" diff --git a/tests/test_run_test_mql_full_state_comparison.py b/tests/test_run_test_mql_full_state_comparison.py index a770b7a..fcb39f9 100644 --- a/tests/test_run_test_mql_full_state_comparison.py +++ b/tests/test_run_test_mql_full_state_comparison.py @@ -46,9 +46,15 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase): self.assertEqual(run.sample_count, 1) self.assertEqual(run.signal_count, 2) self.assertAlmostEqual(run.comparison.max_abs_error, 0.0, delta=1.0e-8) + self.assertEqual( + run.metrics_by_max_abs_error()[0].data_path, + "press@pn_c1_8", + ) self.assertTrue(csv_summary_exists) self.assertIn("Mode: Python 132 full-state closure comparison", summary) self.assertIn("Compared signals: 2", summary) + self.assertIn("Largest absolute error: press@pn_c1_8=", summary) + self.assertIn("Metrics by max absolute error:", summary) self.assertIn("python.press@pn_c1_8", csv_header) self.assertIn("amesim.vol1@pn_brp2_8", csv_header) @@ -95,6 +101,8 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase): self.assertIn("Model: test_mql", summary) self.assertIn("Output schema signals: 858", summary) self.assertIn("Compared signals: 1", summary) + self.assertIn("Largest absolute error: press@pn_c1_8=", summary) + self.assertIn("Metrics by max absolute error:", summary) self.assertTrue(summary.endswith("\n"))