from __future__ import annotations import unittest from pathlib import Path from PythonModels.reporting.amesim_results import load_test_mql_amesim_results from PythonModels.reporting.test_mql_variables import build_test_mql_variable_catalog from PythonModels.systems.test_mql_lines import build_test_mql_line_assembly REPO_ROOT = Path(__file__).resolve().parents[1] TEST_MQL_AME = REPO_ROOT / "AmesimModels" / "test_mql.ame" class TestMqlLineAssemblyTests(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.amesim_results = load_test_mql_amesim_results(TEST_MQL_AME) cls.variable_catalog = build_test_mql_variable_catalog(cls.amesim_results) cls.assembly = build_test_mql_line_assembly( cls.amesim_results, cls.variable_catalog, ) def test_assembles_expected_line_counts(self) -> None: self.assertEqual(self.assembly.line_count, 40) self.assertEqual( self.assembly.counts_by_submodel(), {"PNL0001": 20, "PNL0003": 8, "PNL0002": 8, "PNL00R": 4}, ) self.assertIn("pneumatic_69", self.assembly.aliases()) self.assertIn("pneumatic_100", self.assembly.aliases()) def test_preserves_connection_topology(self) -> None: line = self.assembly.by_alias("pneumatic_69") self.assertEqual(line.index, 37) self.assertEqual(line.submodel, "PNL0001") self.assertEqual(line.pattern, "C-R") self.assertEqual(line.source_component, "pnnode4_16") self.assertEqual(line.source_port, "port_2") self.assertEqual(line.target_component, "pn_c1_8") self.assertEqual(line.target_port, "port_1") self.assertTrue(line.has_compliance) self.assertTrue(line.has_resistance) def test_line_data_paths_are_attached_from_amesim_results(self) -> None: line = self.assembly.by_alias("pneumatic_69") self.assertIn("dh1@pneumatic_69", line.data_paths) self.assertIn("dm1@pneumatic_69", line.data_paths) self.assertIn("dh1", line.signal_names) self.assertIn("dm1", line.signal_names) def test_resistance_only_line_keeps_r_pattern(self) -> None: line = self.assembly.by_alias("pneumatic_100") self.assertEqual(line.submodel, "PNL00R") self.assertEqual(line.pattern, "R") self.assertFalse(line.has_compliance) self.assertTrue(line.has_resistance) self.assertIn("dm1@pneumatic_100", line.data_paths) def test_rcr_and_crc_patterns_are_distinct(self) -> None: self.assertEqual(self.assembly.by_alias("pneumatic_80").pattern, "R-C-R") self.assertEqual(self.assembly.by_alias("pneumatic_75").pattern, "C-R-C") self.assertEqual(len(self.assembly.by_submodel("PNL0002")), 8) self.assertEqual(len(self.assembly.by_submodel("PNL0003")), 8) if __name__ == "__main__": unittest.main()