补充test_mql P4邻接拓扑解析

This commit is contained in:
huojiarong committed 2026-07-17 10:05:26 +00:00
1 parent 8af0a27e4c
commit 43e238034a
3 files changed
+191

No files matched your search

+84
View File
@@ -3975,6 +3975,31 @@ class TestMqlSystem:
spec = self._pnl0001_spec_for_node_port(node_alias, port_name)
return self.pnl0001_assembly.lines[spec.alias]
def _pnl0002_connection_for_node_port(self, node_alias: str, port_name: str):
from PythonModels.systems.test_mql_nodes import TestMqlP4NodePortConnection
spec = self._pnl0002_spec_for_node_port(node_alias, port_name)
if spec.source_component == node_alias and spec.source_port == port_name:
remote_node_alias = spec.target_component
remote_port = spec.target_port
elif spec.target_component == node_alias and spec.target_port == port_name:
remote_node_alias = spec.source_component
remote_port = spec.source_port
else:
raise KeyError(f"No PNL0002 line attached to {node_alias}.{port_name}")
if remote_node_alias not in self.node4_assembly:
raise KeyError(
f"PNL0002 line {spec.alias} remote endpoint is not a P4 node: "
f"{remote_node_alias}.{remote_port}"
)
return TestMqlP4NodePortConnection(
line_alias=spec.alias,
local_node_alias=node_alias,
local_port=port_name,
remote_node_alias=remote_node_alias,
remote_port=remote_port,
)
def _pnl0002_spec_for_node_port(self, node_alias: str, port_name: str):
for spec in self.pnl0002_assembly.specs:
if spec.source_component == node_alias and spec.source_port == port_name:
@@ -3987,6 +4012,65 @@ class TestMqlSystem:
spec = self._pnl0002_spec_for_node_port(node_alias, port_name)
return self.pnl0002_assembly.lines[spec.alias]
def _p4_primary_connection_for_node(self, node_alias: str):
from PythonModels.systems.test_mql_nodes import TestMqlP4NodePrimaryConnection
spec = self._pnl0001_spec_for_node_port(node_alias, "port_2")
if spec.source_component == node_alias and spec.source_port == "port_2":
chamber_alias = spec.target_component
chamber_port = spec.target_port
elif spec.target_component == node_alias and spec.target_port == "port_2":
chamber_alias = spec.source_component
chamber_port = spec.source_port
else:
raise KeyError(f"No PNL0001 primary line attached to {node_alias}.port_2")
return TestMqlP4NodePrimaryConnection(
line_alias=spec.alias,
node_alias=node_alias,
node_port="port_2",
chamber_alias=chamber_alias,
chamber_port=chamber_port,
)
def _p4_port4_orifice_connection_for_node(self, node_alias: str):
from PythonModels.systems.test_mql_nodes import TestMqlP4NodeOrificeConnection
for spec in CONNECTION_SPECS:
if spec["submodel"] != "DIRECT":
continue
if spec["target_component"] == node_alias and spec["target_port"] == "port_4":
orifice_alias = str(spec["source_component"])
if orifice_alias in self.pneumatic_assembly.variable_orifices:
return TestMqlP4NodeOrificeConnection(
orifice_alias=orifice_alias,
node_alias=node_alias,
node_port="port_4",
direct_line_alias=str(spec["alias"]),
)
if spec["source_component"] == node_alias and spec["source_port"] == "port_4":
orifice_alias = str(spec["target_component"])
if orifice_alias in self.pneumatic_assembly.variable_orifices:
return TestMqlP4NodeOrificeConnection(
orifice_alias=orifice_alias,
node_alias=node_alias,
node_port="port_4",
direct_line_alias=str(spec["alias"]),
)
raise KeyError(f"No PNVO orifice attached to {node_alias}.port_4")
def p4_node_neighborhood(self, node_alias: str):
from PythonModels.systems.test_mql_nodes import TestMqlP4NodeNeighborhood
if node_alias not in self.node4_assembly:
raise KeyError(f"Unknown P4 node: {node_alias}")
return TestMqlP4NodeNeighborhood(
node_alias=node_alias,
primary=self._p4_primary_connection_for_node(node_alias),
port_1=self._pnl0002_connection_for_node_port(node_alias, "port_1"),
port_3=self._pnl0002_connection_for_node_port(node_alias, "port_3"),
port_4=self._p4_port4_orifice_connection_for_node(node_alias),
)
def _p4_node_alias_for_orifice_port_2(self, orifice_alias: str) -> str:
for spec in CONNECTION_SPECS:
if spec["submodel"] != "DIRECT":