Back to home page

EIC code displayed by LXR

 
 

    


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