File indexing completed on 2026-04-27 07:28:14
0001 """Tests for epic design configuration utilities."""
0002
0003 import yaml
0004
0005 from aid2e.utilities.epic_utils.epic_design_config import (
0006 EpicDesignConfig,
0007 EpicDesignConfigLoader,
0008 )
0009
0010
0011 def _sample_epic_design_payload() -> dict:
0012 """Build a minimal epic design configuration payload for tests."""
0013 return {
0014 "epic_design_parameters": {
0015 "tracker": {
0016 "file_path": "$DETECTOR_PATH/tracker.xml",
0017 "parameters": {
0018 "thickness": {
0019 "value": 0.2,
0020 "bounds": (0.1, 0.3),
0021 "xml_path": "//constant[@name='tracker_thickness']/@value",
0022 "unit": "cm",
0023 }
0024 },
0025 }
0026 },
0027 "optimization_groups": {"default": ["tracker.thickness"]},
0028 }
0029
0030
0031 def test_epic_design_config_getters(monkeypatch):
0032 """Validate key EpicDesignConfig getters and XML mapping helpers."""
0033 monkeypatch.setenv("DETECTOR_PATH", "/detector")
0034 config = EpicDesignConfig(**_sample_epic_design_payload())
0035
0036 flat_params = config.get_flat_parameters()
0037 assert "tracker.thickness" in flat_params
0038 assert config.get_parameter_bounds("tracker.thickness") == (0.1, 0.3)
0039
0040 modifications = config.get_xml_modifications({"tracker.thickness": 0.25})
0041 assert "/detector/tracker.xml" in modifications
0042 xml_path, unit, new_value = modifications["/detector/tracker.xml"][0]
0043 assert xml_path == "//constant[@name='tracker_thickness']/@value"
0044 assert unit == "cm"
0045 assert new_value == 0.25
0046
0047 file_paths = config.get_file_paths()
0048 assert "/detector/tracker.xml" in file_paths
0049
0050
0051 def test_epic_design_config_loader(tmp_path, monkeypatch):
0052 """Load epic design config from YAML and ensure structure is preserved."""
0053 monkeypatch.setenv("DETECTOR_PATH", "/detector")
0054 config_path = tmp_path / "epic_design.params"
0055 config_path.write_text(yaml.safe_dump(_sample_epic_design_payload()))
0056
0057 config = EpicDesignConfigLoader.load(str(config_path))
0058
0059 assert isinstance(config, EpicDesignConfig)
0060 assert "tracker.thickness" in config.get_parameter_names()
0061 assert config.get_optimization_group("default") == ["tracker.thickness"]
0062
0063 modifications = config.get_xml_modifications()
0064 assert "/detector/tracker.xml" in modifications