补充test_mql P4邻接拓扑解析
This commit is contained in:
1 parent
8af0a27e4c
commit
43e238034a
3 files changed
+191
No files matched your search
@@ -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":
|
||||
|
||||
Reference in new issue
Block a user