from __future__ import annotations import unittest from pathlib import Path from unittest.mock import Mock from app.simulation.reporting.amesim_results import ( _resolve_result_members, load_test_mql_amesim_results, ) REPO_ROOT = Path(__file__).resolve().parents[1] TEST_MQL_AME = REPO_ROOT / "AmesimModels" / "test_mql.ame" class AmesimResultsTests(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.results = load_test_mql_amesim_results(TEST_MQL_AME) def test_reads_binary_results_shape(self) -> None: self.assertEqual(self.results.point_count, 1002) self.assertEqual(self.results.saved_variable_count, 1116) self.assertEqual(len(self.results.variables), 1278) self.assertEqual(len(self.results.final_values_by_data_path), 1100) def test_time_axis_matches_amesim_simulation(self) -> None: self.assertAlmostEqual(self.results.times[0], 0.0) self.assertAlmostEqual(self.results.times[1], 0.01) self.assertAlmostEqual(self.results.times[-1], 10.0) def test_variable_mapping_preserves_data_paths(self) -> None: self.assertEqual(self.results.saved_variable_indices[:2], (0, 1)) self.assertEqual(self.results.variables[0].data_path, "temp3@pn_c1_8") self.assertEqual(self.results.variables[1].data_path, "press3@pn_c1_8") self.assertIn("vvol1@pn_brp2_8", self.results.series_by_data_path) self.assertIn("vol1@pn_brp2_8", self.results.series_by_data_path) def test_series_values_match_known_amesim_samples(self) -> None: temp3 = self.results.series("temp3@pn_c1_8") press3 = self.results.series("press3@pn_c1_8") self.assertAlmostEqual(temp3[0], 293.15) self.assertAlmostEqual(press3[0], -1300.0) self.assertAlmostEqual(temp3[-1], self.results.final_value("temp3@pn_c1_8")) self.assertAlmostEqual(press3[-1], self.results.final_value("press3@pn_c1_8")) def test_window_loader_keeps_one_sample_after_stop(self) -> None: results = load_test_mql_amesim_results(TEST_MQL_AME, time_stop_s=0.04) self.assertEqual(results.point_count, 6) self.assertAlmostEqual(results.times[-2], 0.04) self.assertAlmostEqual(results.times[-1], 0.05) self.assertEqual( len(results.series("temp@pn_c1_8")), results.point_count, ) self.assertEqual(results.final_values_by_data_path, {}) def test_auto_detects_renamed_result_members(self) -> None: archive = Mock() archive.getnames.return_value = ( "renamed_model_.var", "renamed_model_.results", "renamed_model_.sim", ) pair = _resolve_result_members( archive, var_member=None, results_member=None, ) self.assertEqual( pair, ("renamed_model_.var", "renamed_model_.results"), ) if __name__ == "__main__": unittest.main()