feat: integrate AMESim media models and editor UI
This commit is contained in:
1 parent
3e4f466114
commit
e7177ab03e
181 files changed
+7042
-25270
No files matched your search
@@ -9,6 +9,7 @@ from app.simulation.registry import (
|
||||
COMPONENT_MODEL_REGISTRY,
|
||||
validate_component_registries,
|
||||
)
|
||||
from app.simulation.core.metadata import ParameterDefinition
|
||||
|
||||
|
||||
class ComponentCatalogTests(unittest.TestCase):
|
||||
@@ -47,8 +48,58 @@ class ComponentCatalogTests(unittest.TestCase):
|
||||
}
|
||||
|
||||
self.assertEqual(library["label"], "AMESim 组件库")
|
||||
self.assertEqual([category["id"] for category in library["categories"]], ["storage", "flow", "junctions", "boundary", "signals", "mechanical"])
|
||||
self.assertEqual(set(components), {"amesim_pnpl01", "amesim_step0", "amesim_ud00", "amesim_f000", "amesim_forc", "amesim_mecmas21", "amesim_lstp00a", "amesim_lmechn1", "amesim_pnch023", "amesim_pnch012", "amesim_pnor001", "amesim_pnvo001_fixed", "amesim_pnvo001", "amesim_pnl00r", "amesim_pnl0001", "amesim_pnl0002", "amesim_pnl0003", "amesim_pn3node2", "amesim_p4node2"})
|
||||
self.assertEqual([category["id"] for category in library["categories"]], ["media", "storage", "flow", "junctions", "boundary", "signals", "mechanical"])
|
||||
self.assertEqual(set(components), {"amesim_ideal_air_medium", "amesim_helium_medium", "amesim_pnpl01", "amesim_step0", "amesim_ud00", "amesim_f000", "amesim_forc", "amesim_mecmas21", "amesim_lstp00a", "amesim_lmechn1", "amesim_pnch023", "amesim_pnch012", "amesim_pnor001", "amesim_pnvo001_fixed", "amesim_pnvo001", "amesim_pnl00r", "amesim_pnl0001", "amesim_pnl0002", "amesim_pnl0003", "amesim_pn3node2", "amesim_p4node2"})
|
||||
self.assertEqual(
|
||||
components["amesim_ideal_air_medium"]["role"],
|
||||
"amesimGasMediumDefinition",
|
||||
)
|
||||
self.assertEqual(
|
||||
components["amesim_ideal_air_medium"]["category"]["id"],
|
||||
"media",
|
||||
)
|
||||
self.assertEqual(
|
||||
components["amesim_ideal_air_medium"]["label"],
|
||||
"空气介质定义",
|
||||
)
|
||||
self.assertEqual(
|
||||
components["amesim_ideal_air_medium"]["modelVersion"],
|
||||
"0.2.0",
|
||||
)
|
||||
medium_parameters = {
|
||||
parameter["name"]: parameter
|
||||
for parameter in components["amesim_ideal_air_medium"]["parameters"]
|
||||
}
|
||||
self.assertEqual(
|
||||
list(medium_parameters),
|
||||
["gi", "property_model"],
|
||||
)
|
||||
self.assertEqual(
|
||||
medium_parameters["property_model"]["editor"],
|
||||
"amesimGasPropertyModel",
|
||||
)
|
||||
self.assertEqual(
|
||||
medium_parameters["property_model"]["options"],
|
||||
[{"value": 0, "label": "理想气体"}],
|
||||
)
|
||||
helium_medium = components["amesim_helium_medium"]
|
||||
self.assertEqual(helium_medium["role"], "amesimGasMediumDefinition")
|
||||
self.assertEqual(helium_medium["category"]["id"], "media")
|
||||
self.assertEqual(helium_medium["label"], "氦气介质定义")
|
||||
self.assertEqual(helium_medium["modelVersion"], "0.1.0")
|
||||
helium_parameters = {
|
||||
parameter["name"]: parameter
|
||||
for parameter in helium_medium["parameters"]
|
||||
}
|
||||
self.assertEqual(list(helium_parameters), ["gi", "property_model"])
|
||||
self.assertEqual(
|
||||
helium_parameters["property_model"]["editor"],
|
||||
"amesimGasPropertyModel",
|
||||
)
|
||||
self.assertEqual(
|
||||
helium_parameters["property_model"]["options"],
|
||||
[{"value": 0, "label": "Peng–Robinson"}],
|
||||
)
|
||||
self.assertEqual(
|
||||
[port["name"] for port in components["amesim_p4node2"]["ports"]],
|
||||
["port_1", "port_2", "port_3", "port_4"],
|
||||
@@ -174,6 +225,61 @@ class ComponentCatalogTests(unittest.TestCase):
|
||||
self.assertEqual(parameters["p0"]["unit"], "Pa")
|
||||
self.assertTrue(parameters["p0"]["minimumExclusive"])
|
||||
|
||||
def test_parameter_description_is_optional_interface_metadata(self) -> None:
|
||||
described = ParameterDefinition(
|
||||
"diam",
|
||||
0.01,
|
||||
label="管径",
|
||||
quantity="length",
|
||||
unit="m",
|
||||
minimum=0.0,
|
||||
minimum_exclusive=True,
|
||||
description="用于计算流通面积。",
|
||||
).as_interface_dict()
|
||||
undescribed = ParameterDefinition(
|
||||
"gain",
|
||||
1.0,
|
||||
label="增益",
|
||||
).as_interface_dict()
|
||||
|
||||
self.assertEqual(described["description"], "用于计算流通面积。")
|
||||
self.assertEqual(described["default"], 0.01)
|
||||
self.assertEqual(described["unit"], "m")
|
||||
self.assertEqual(described["minimum"], 0.0)
|
||||
self.assertTrue(described["minimumExclusive"])
|
||||
self.assertNotIn("description", undescribed)
|
||||
|
||||
def test_catalog_exposes_descriptions_for_core_amesim_pneumatic_parameters(
|
||||
self,
|
||||
) -> None:
|
||||
medium_parameters = {
|
||||
parameter["name"]: parameter
|
||||
for parameter in self.components["amesim_helium_medium"]["parameters"]
|
||||
}
|
||||
chamber_parameters = {
|
||||
parameter["name"]: parameter
|
||||
for parameter in self.components["amesim_pnch023"]["parameters"]
|
||||
}
|
||||
pipe_parameters = {
|
||||
parameter["name"]: parameter
|
||||
for parameter in self.components["amesim_pnl00r"]["parameters"]
|
||||
}
|
||||
orifice_parameters = {
|
||||
parameter["name"]: parameter
|
||||
for parameter in self.components["amesim_pnor001"]["parameters"]
|
||||
}
|
||||
|
||||
self.assertIn("自动分配", medium_parameters["gi"]["description"])
|
||||
self.assertIn(
|
||||
"Peng–Robinson",
|
||||
medium_parameters["property_model"]["description"],
|
||||
)
|
||||
self.assertIn("固定有效容积", chamber_parameters["cvol"]["description"])
|
||||
self.assertIn("Darcy", pipe_parameters["rr"]["description"])
|
||||
self.assertIn("有效孔口面积", orifice_parameters["area"]["description"])
|
||||
self.assertEqual(chamber_parameters["cvol"]["default"], 0.057)
|
||||
self.assertEqual(pipe_parameters["diam"]["unit"], "m")
|
||||
|
||||
def test_catalog_adds_port_layout_without_changing_physical_contract(self) -> None:
|
||||
tee_ports = {
|
||||
port["name"]: port for port in self.components["tee"]["ports"]
|
||||
@@ -200,6 +306,14 @@ class ComponentCatalogTests(unittest.TestCase):
|
||||
self.assertEqual(schema["properties"]["schemaVersion"]["const"], 1)
|
||||
self.assertIn("modelVersion", schema["$defs"]["component"]["required"])
|
||||
self.assertIn("version", schema["$defs"]["library"]["required"])
|
||||
parameter_schema = schema["$defs"]["parameter"]
|
||||
self.assertEqual(
|
||||
parameter_schema["properties"]["description"],
|
||||
{"type": "string", "minLength": 1},
|
||||
)
|
||||
self.assertNotIn("description", parameter_schema["required"])
|
||||
self.assertFalse(parameter_schema["additionalProperties"])
|
||||
self.assertNotIn("unknownField", parameter_schema["properties"])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in new issue
Block a user