Files
SystemSimulationApp/tests/test_test_mql_output_schema.py

92 lines
4.0 KiB
Python

from __future__ import annotations
import unittest
from pathlib import Path
from app.simulation.reporting.amesim_results import load_test_mql_amesim_results
from app.simulation.reporting.test_mql_observations import build_test_mql_observation_catalog
from app.simulation.reporting.test_mql_output_schema import build_test_mql_output_schema
REPO_ROOT = Path(__file__).resolve().parents[1]
TEST_MQL_AME = REPO_ROOT / "AmesimModels" / "test_mql.ame"
class TestMqlOutputSchemaTests(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.amesim_results = load_test_mql_amesim_results(TEST_MQL_AME)
cls.observation_catalog = build_test_mql_observation_catalog(cls.amesim_results)
cls.schema = build_test_mql_output_schema(
cls.amesim_results,
observation_catalog=cls.observation_catalog,
)
def test_schema_contains_observed_output_data_paths(self) -> None:
self.assertEqual(self.schema.signal_count, 858)
self.assertEqual(self.schema.data_paths(), self.observation_catalog.data_paths())
self.assertEqual(len(set(self.schema.data_paths())), self.schema.signal_count)
def test_counts_by_domain_owner_kind_and_submodel(self) -> None:
self.assertEqual(
self.schema.counts_by_domain(),
{"chambers": 100, "lines": 388, "mechanical": 266, "orifices": 104},
)
self.assertEqual(
self.schema.counts_by_owner_kind(),
{"component": 470, "connection": 388},
)
self.assertEqual(self.schema.counts_by_submodel()["PNCH012"], 80)
self.assertEqual(self.schema.counts_by_submodel()["PNCH023"], 20)
self.assertEqual(self.schema.counts_by_submodel()["PNL0001"], 180)
self.assertEqual(self.schema.counts_by_submodel()["MECMAS21"], 110)
self.assertEqual(self.schema.counts_by_submodel()["LMECHN1"], 34)
def test_counts_by_units_preserve_amesim_units(self) -> None:
counts = self.schema.counts_by_units()
self.assertEqual(counts["m/s"], 108)
self.assertEqual(counts[None], 98)
self.assertEqual(counts["N"], 92)
self.assertEqual(counts["J/s"], 84)
self.assertEqual(counts["g/s"], 84)
self.assertEqual(counts["Pa"], 84)
self.assertEqual(counts["K"], 84)
self.assertEqual(counts["cm**3"], 16)
self.assertEqual(counts["L/min"], 8)
def test_typical_signal_metadata_is_available_by_data_path(self) -> None:
chamber = self.schema.by_data_path("press@pn_general_chamber")
line = self.schema.by_data_path("dm1@pneumatic_69")
mechanical = self.schema.by_data_path("tforce@dynamic_mechanical_node_alternative_2")
self.assertEqual(chamber.domain, "chambers")
self.assertEqual(chamber.owner_alias, "pn_general_chamber")
self.assertEqual(chamber.owner_kind, "component")
self.assertEqual(chamber.submodel, "PNCH023")
self.assertEqual(chamber.signal_name, "press")
self.assertEqual(chamber.units, "Pa")
self.assertTrue(chamber.saved)
self.assertEqual(line.domain, "lines")
self.assertEqual(line.owner_kind, "connection")
self.assertEqual(line.submodel, "PNL0001")
self.assertEqual(line.units, "g/s")
self.assertEqual(mechanical.domain, "mechanical")
self.assertEqual(mechanical.submodel, "LMECHN1")
self.assertEqual(mechanical.units, "N")
def test_data_paths_can_be_selected_by_domain(self) -> None:
self.assertEqual(len(self.schema.data_paths_by_domain("chambers")), 100)
self.assertEqual(len(self.schema.data_paths_by_domain("orifices")), 104)
self.assertEqual(len(self.schema.data_paths_by_domain("lines")), 388)
self.assertEqual(len(self.schema.data_paths_by_domain("mechanical")), 266)
self.assertEqual(self.schema.data_paths_by_domain("missing"), ())
def test_unknown_data_path_raises_key_error(self) -> None:
with self.assertRaises(KeyError):
self.schema.by_data_path("not_a_signal@not_an_owner")
if __name__ == "__main__":
unittest.main()