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"]