补齐test_mql机械观测覆盖

This commit is contained in:
huojiarong committed 2026-07-16 02:15:47 +00:00
1 parent f6871aefac
commit c84a809f77
2 files changed
+203 -2

No files matched your search

+66 -1
View File
@@ -23,7 +23,10 @@ class TestMqlMechanicalObservationCatalogTests(unittest.TestCase):
self.assertEqual(len(self.catalog.pistons), 8)
self.assertEqual(len(self.catalog.masses), 10)
self.assertEqual(len(self.catalog.elastic_endstops), 8)
self.assertEqual(self.catalog.binding_count, 26)
self.assertEqual(len(self.catalog.zero_force_sources), 16)
self.assertEqual(len(self.catalog.force_connectors), 2)
self.assertEqual(len(self.catalog.mechanical_nodes), 2)
self.assertEqual(self.catalog.binding_count, 46)
def test_piston_binding_exposes_amesim_data_paths(self) -> None:
binding = self.catalog.pistons["pn_brp2_8"]
@@ -119,6 +122,68 @@ class TestMqlMechanicalObservationCatalogTests(unittest.TestCase):
1.0e-9,
)
def test_zero_force_source_observations_are_zero(self) -> None:
for binding in self.catalog.zero_force_sources.values():
force = self.amesim_results.series(binding.force_path)
with self.subTest(alias=binding.alias):
self.assertEqual(binding.force_path, f"fzero@{binding.alias}")
self.assertEqual(min(force), 0.0)
self.assertEqual(max(force), 0.0)
self.assertEqual(binding.observation_at(self.amesim_results, -1).force_n, 0.0)
def test_force_connector_observations_match_amesim_samples(self) -> None:
force_1 = self.catalog.force_connectors["forcecon_1"].observation_at(
self.amesim_results,
-1,
)
force_2 = self.catalog.force_connectors["forcecon_2"].observation_at(
self.amesim_results,
-1,
)
self.assertEqual(self.catalog.force_connectors["forcecon_1"].force_path, "force@forcecon_1")
self.assertEqual(self.catalog.force_connectors["forcecon_2"].force_path, "force@forcecon_2")
self.assertAlmostEqual(force_1.force_n, 49000.0)
self.assertAlmostEqual(force_2.force_n, 0.0)
self.assertAlmostEqual(
self.amesim_results.series("force@forcecon_1")[0],
1.0e17,
)
self.assertAlmostEqual(
self.amesim_results.series("force@forcecon_2")[0],
1.0e12,
)
def test_mechanical_node_bindings_expose_all_ports(self) -> None:
node = self.catalog.mechanical_nodes["dynamic_mechanical_node_alternative_2"]
self.assertEqual(sorted(node.velocity_paths_by_port), list(range(1, 9)))
self.assertEqual(sorted(node.displacement_paths_by_port), list(range(1, 9)))
self.assertEqual(node.velocity_paths_by_port[1], "p1__vt@dynamic_mechanical_node_alternative_2")
self.assertEqual(node.displacement_paths_by_port[8], "p8__xt@dynamic_mechanical_node_alternative_2")
self.assertEqual(node.total_force_path, "tforce@dynamic_mechanical_node_alternative_2")
def test_mechanical_node_observations_match_amesim_final_samples(self) -> None:
front = self.catalog.mechanical_nodes["dynamic_mechanical_node_alternative_2"].observation_at(
self.amesim_results,
-1,
)
rear = self.catalog.mechanical_nodes["dynamic_mechanical_node_alternative_3"].observation_at(
self.amesim_results,
-1,
)
self.assertEqual(set(front.velocities_m_s), set(range(1, 9)))
self.assertEqual(set(front.displacements_m), set(range(1, 9)))
self.assertAlmostEqual(front.velocities_m_s[1], -0.0)
self.assertAlmostEqual(front.displacements_m[1], -0.3700000000000001)
self.assertAlmostEqual(front.displacements_m[8], -0.3700000000000001)
self.assertAlmostEqual(front.total_force_n, 1083272.2763054767)
self.assertAlmostEqual(rear.velocities_m_s[1], 0.0)
self.assertAlmostEqual(rear.displacements_m[1], -0.72)
self.assertAlmostEqual(rear.displacements_m[8], -0.72)
self.assertAlmostEqual(rear.total_force_n, 1083272.2762592242)
if __name__ == "__main__":
unittest.main()