Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-27 07:28:14

0001 """Tests for configuration loaders using DTLZ2 fixture files."""
0002 
0003 from pathlib import Path
0004 
0005 import yaml
0006 
0007 from aid2e.utilities.configurations import (
0008     DesignConfigLoader,
0009     ProblemConfigLoader,
0010     load_config,
0011 )
0012 
0013 
0014 def _fixture_dir() -> Path:
0015     """Return the path to the DTLZ2 fixtures directory."""
0016     return Path(__file__).resolve().parent.parent / "fixtures" / "dtlz2"
0017 
0018 
0019 def test_design_config_loader_with_fixture():
0020     """Load design.params fixture and validate parameters and constraints."""
0021     design_path = _fixture_dir() / "design.params"
0022 
0023     config = DesignConfigLoader.load(str(design_path))
0024 
0025     names = config.get_parameter_names()
0026     assert "DTLZ2_variables.x1" in names
0027     assert len(names) == 10
0028 
0029     is_valid, failures = config.validate_constraints({"DTLZ2_variables.x1": 0.5})
0030     assert is_valid
0031     assert failures == []
0032 
0033 
0034 def test_problem_config_loader_with_fixture(tmp_path):
0035     """Load problem.config fixture and ensure relative design file resolution."""
0036     fixture_dir = _fixture_dir()
0037     design_dst = tmp_path / "design.params"
0038     design_dst.write_text((fixture_dir / "design.params").read_text())
0039 
0040     problem_data = yaml.safe_load((fixture_dir / "problem.config").read_text())
0041     output_dir = tmp_path / "output" / "dtlz2"
0042     work_dir = tmp_path / "work" / "dtlz2"
0043     output_dir.mkdir(parents=True)
0044     work_dir.mkdir(parents=True)
0045 
0046     problem_data["problem"]["output_location"] = str(output_dir)
0047     problem_data["problem"]["work_location"] = str(work_dir)
0048     problem_data["problem"]["design_parameters_file"] = "design.params"
0049 
0050     problem_path = tmp_path / "problem.config"
0051     problem_path.write_text(yaml.safe_dump(problem_data))
0052 
0053     config = ProblemConfigLoader.load(str(problem_path))
0054 
0055     assert config.name == "DTLZ2 Multi-Objective Optimization"
0056     assert config.problem_type == "toy"
0057     assert "DTLZ2_variables.x1" in config.design_config.get_parameter_names()
0058     assert len(config.objectives) == 2
0059 
0060 
0061 def test_full_config_loader_combines_problem_and_optimization(tmp_path):
0062     """Load FullConfig from combined problem and optimization payload."""
0063     fixture_dir = _fixture_dir()
0064     design_dst = tmp_path / "design.params"
0065     design_dst.write_text((fixture_dir / "design.params").read_text())
0066 
0067     output_dir = tmp_path / "output" / "dtlz2"
0068     work_dir = tmp_path / "work" / "dtlz2"
0069     output_dir.mkdir(parents=True)
0070     work_dir.mkdir(parents=True)
0071 
0072     problem_file_data = yaml.safe_load((fixture_dir / "problem.config").read_text())
0073     design_file_data = yaml.safe_load((fixture_dir / "design.params").read_text())
0074 
0075     design_space = design_file_data.get("design_space", {})
0076     design_parameters = design_space.get("design_parameters", {})
0077     parameter_constraints = design_space.get("design_constraints", [])
0078 
0079     problem_payload = {
0080         "name": problem_file_data["problem"]["name"],
0081         "problem_type": problem_file_data["problem"]["type"],
0082         "output_location": str(output_dir),
0083         "work_location": str(work_dir),
0084         "inline_design": {
0085             "design_parameters": design_parameters,
0086             "parameter_constraints": parameter_constraints,
0087         },
0088         "objectives": problem_file_data["problem"]["objectives"],
0089     }
0090 
0091     full_payload = {
0092         "problem": problem_payload,
0093         "optimization": {
0094             "name": "dtlz2-optimization",
0095             "description": "Test optimization payload",
0096             "optimizer": {"name": "MOBO", "type": "Bayesian", "parameters": {}},
0097             "objectives": ["minimize:f1", "minimize:f2"],
0098             "constraints": [],
0099             "n_iterations": 5,
0100             "n_initial_samples": 2,
0101             "parallel_evaluations": 1,
0102         },
0103     }
0104 
0105     full_config_path = tmp_path / "full.config"
0106     full_config_path.write_text(yaml.safe_dump(full_payload))
0107 
0108     config = load_config(str(full_config_path))
0109 
0110     assert config.problem.name == "DTLZ2 Multi-Objective Optimization"
0111     assert config.problem.design_config.get_parameter_bounds("DTLZ2_variables.x1") == (0.0, 1.0)
0112     assert config.optimization.optimizer.name == "MOBO"
0113     assert config.optimization.objectives == ["minimize:f1", "minimize:f2"]