对齐test_mql保存时刻与PNVO事件边界
This commit is contained in:
1 parent
7c68caed27
commit
a0855018d5
5 files changed
+345
-35
No files matched your search
@@ -9,7 +9,9 @@ from PythonModels.scripts.run_test_mql_full_state_comparison import (
|
||||
TestMqlFullStateComparisonExecutionConfig,
|
||||
TestMqlFullStateComparisonPathConfig,
|
||||
TestMqlFullStateComparisonScriptConfig,
|
||||
TestMqlPnvoEventBoundaryDiagnostic,
|
||||
format_test_mql_full_state_comparison_summary,
|
||||
format_test_mql_pnvo_event_boundary_summary,
|
||||
run_test_mql_full_state_comparison,
|
||||
)
|
||||
|
||||
@@ -33,6 +35,8 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
|
||||
"press@pn_c1_8",
|
||||
"vol1@pn_brp2_8",
|
||||
"dm1@pneumatic_69",
|
||||
"xv@pn_morifice_1",
|
||||
"dm2@pn_morifice_1",
|
||||
),
|
||||
solver=SolveIVPConfig(t_start=0.0, t_stop=0.0),
|
||||
t_eval=(0.0,),
|
||||
@@ -48,7 +52,7 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
|
||||
|
||||
self.assertEqual(returned_output_dir, output_dir)
|
||||
self.assertEqual(run.sample_count, 1)
|
||||
self.assertEqual(run.signal_count, 3)
|
||||
self.assertEqual(run.signal_count, 5)
|
||||
self.assertAlmostEqual(run.comparison.max_abs_error, 0.0, delta=1.0e-8)
|
||||
self.assertEqual(
|
||||
run.metrics_by_max_abs_error()[0].data_path,
|
||||
@@ -71,6 +75,12 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
|
||||
flow_diagnostic.initial_python_canonical_kg_s,
|
||||
-flow_diagnostic.initial_python_dm1_g_s * 1.0e-3,
|
||||
)
|
||||
pnvo_diagnostic = run.pnvo_diagnostic()
|
||||
self.assertEqual(pnvo_diagnostic.alias, "pn_morifice_1")
|
||||
self.assertAlmostEqual(pnvo_diagnostic.initial_python_opening, 0.0)
|
||||
self.assertAlmostEqual(pnvo_diagnostic.initial_amesim_opening, 0.0)
|
||||
self.assertAlmostEqual(pnvo_diagnostic.initial_python_mass_flow_kg_s, 0.0)
|
||||
self.assertAlmostEqual(pnvo_diagnostic.initial_amesim_mass_flow_kg_s, 0.0)
|
||||
chamber_diagnostic = run.chamber_rhs_diagnostic("pn_c1_8")
|
||||
self.assertEqual(chamber_diagnostic.chamber_alias, "pn_c1_8")
|
||||
self.assertEqual(chamber_diagnostic.piston_alias, "pn_brp2_8")
|
||||
@@ -83,7 +93,9 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
|
||||
)
|
||||
self.assertTrue(csv_summary_exists)
|
||||
self.assertIn("Mode: Python 132 full-state closure comparison", summary)
|
||||
self.assertIn("Compared signals: 3", summary)
|
||||
self.assertIn("Compared signals: 5", summary)
|
||||
self.assertIn("AMESim first saved interval: 0.010000000000000023", summary)
|
||||
self.assertIn("Final time aligns with AMESim sample: True", summary)
|
||||
self.assertIn("Largest absolute error: press@pn_c1_8=", summary)
|
||||
self.assertIn("Largest final endpoint error: press@pn_c1_8=", summary)
|
||||
self.assertIn("Metrics by max absolute error:", summary)
|
||||
@@ -93,6 +105,9 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
|
||||
summary,
|
||||
)
|
||||
self.assertIn("equals -AMESim dm1 * 1e-3", summary)
|
||||
self.assertIn("PNVO diagnostic: pn_morifice_1", summary)
|
||||
self.assertIn("final_python_opening=", summary)
|
||||
self.assertIn("final_python_mass_flow_kg_s=", summary)
|
||||
self.assertIn("Largest endpoint chamber RHS breakdown: pn_c1_8", summary)
|
||||
self.assertIn("piston_alias=pn_brp2_8", summary)
|
||||
self.assertIn("mass_derivative_kg_s=", summary)
|
||||
@@ -102,6 +117,55 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
|
||||
self.assertIn("python.press@pn_c1_8", csv_header)
|
||||
self.assertIn("amesim.vol1@pn_brp2_8", csv_header)
|
||||
self.assertIn("python.dm1@pneumatic_69", csv_header)
|
||||
self.assertIn("python.xv@pn_morifice_1", csv_header)
|
||||
self.assertIn("python.dm2@pn_morifice_1", csv_header)
|
||||
|
||||
def test_default_execution_aligns_first_amesim_saved_sample(self) -> None:
|
||||
execution = TestMqlFullStateComparisonExecutionConfig()
|
||||
|
||||
self.assertEqual(execution.solver.t_stop, 0.01)
|
||||
self.assertEqual(execution.solver.max_step, 1.0e-3)
|
||||
self.assertEqual(execution.t_eval, (0.0, 0.01))
|
||||
self.assertIn("xv@pn_morifice_1", execution.data_paths)
|
||||
self.assertIn("dm2@pn_morifice_1", execution.data_paths)
|
||||
|
||||
def test_formats_pnvo_event_boundary_diagnostic(self) -> None:
|
||||
data_paths = (
|
||||
"press@pn_c1_8",
|
||||
"dm1@pneumatic_69",
|
||||
"xv@pn_morifice_1",
|
||||
"dm2@pn_morifice_1",
|
||||
)
|
||||
diagnostic = TestMqlPnvoEventBoundaryDiagnostic(
|
||||
orifice_alias="pn_morifice_1",
|
||||
event_time_s=0.04,
|
||||
integration_stop_time_s=0.039999999999999994,
|
||||
data_paths=data_paths,
|
||||
python_values_by_data_path={
|
||||
"press@pn_c1_8": -1090.9,
|
||||
"dm1@pneumatic_69": -0.00949,
|
||||
"xv@pn_morifice_1": 1.0,
|
||||
"dm2@pn_morifice_1": 502.945,
|
||||
},
|
||||
amesim_values_by_data_path={
|
||||
"press@pn_c1_8": -1146.38,
|
||||
"dm1@pneumatic_69": -0.00667,
|
||||
"xv@pn_morifice_1": 1.0,
|
||||
"dm2@pn_morifice_1": 497.824,
|
||||
},
|
||||
)
|
||||
|
||||
self.assertEqual(diagnostic.orifice_alias, "pn_morifice_1")
|
||||
self.assertLess(diagnostic.integration_stop_time_s, diagnostic.event_time_s)
|
||||
self.assertEqual(diagnostic.abs_error("xv@pn_morifice_1"), 0.0)
|
||||
self.assertAlmostEqual(
|
||||
diagnostic.abs_error("dm2@pn_morifice_1"),
|
||||
5.121,
|
||||
)
|
||||
summary = format_test_mql_pnvo_event_boundary_summary(diagnostic)
|
||||
self.assertIn("PNVO event boundary diagnostic (pn_morifice_1)", summary)
|
||||
self.assertIn("Observation side: right-continuous STEP0 opening", summary)
|
||||
self.assertTrue(summary.endswith("\n"))
|
||||
|
||||
def test_full_state_script_can_skip_artifact_files(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
|
||||
@@ -757,6 +757,9 @@ class TestMqlPn3P4NodeChamberSegmentTests(unittest.TestCase):
|
||||
"x1@mass_friction_endstops_18",
|
||||
"v1@mass_friction_endstops_18",
|
||||
"acc1@mass_friction_endstops_18",
|
||||
"dm1@pneumatic_69",
|
||||
"xv@pn_morifice_1",
|
||||
"dm2@pn_morifice_1",
|
||||
)
|
||||
|
||||
result = self.system.simulate_full_state_series_from_spec(
|
||||
@@ -788,6 +791,9 @@ class TestMqlPn3P4NodeChamberSegmentTests(unittest.TestCase):
|
||||
-0.8167936695810917,
|
||||
)
|
||||
self.assertAlmostEqual(result.series["acc1@mass_friction_endstops_18"][0], 0.0)
|
||||
self.assertAlmostEqual(result.series["dm1@pneumatic_69"][0], 0.0)
|
||||
self.assertAlmostEqual(result.series["xv@pn_morifice_1"][0], 0.0)
|
||||
self.assertAlmostEqual(result.series["dm2@pn_morifice_1"][0], 0.0)
|
||||
|
||||
def test_simulates_full_132_state_closure(self) -> None:
|
||||
solution = self.system.simulate_full_state_from_spec(
|
||||
|
||||
Reference in new issue
Block a user