| """Benchmark resolution helpers.""" |
|
|
| import importlib |
| import os |
| import sys |
| import tempfile |
| from dataclasses import dataclass, field |
| from pathlib import Path |
| from typing import Any, Dict |
|
|
|
|
| @dataclass |
| class BenchmarkResolution: |
| """Resolved benchmark assets and evaluator-scoped configuration.""" |
|
|
| initial_program_path: str |
| evaluator_path: str |
| evaluator_env_vars: Dict[str, str] = field(default_factory=dict) |
|
|
|
|
| def resolve_benchmark_problem(benchmark_config: Any) -> BenchmarkResolution: |
| """Load benchmark problem from external dataset using the configured resolver.""" |
| resolver_path = getattr(benchmark_config, "resolver", None) |
| if not resolver_path: |
| raise ValueError("BenchmarkConfig.resolver must be set to use benchmark loading") |
|
|
| cwd = os.getcwd() |
| if cwd not in sys.path: |
| sys.path.insert(0, cwd) |
|
|
| resolver_module = importlib.import_module(resolver_path) |
| resolver = resolver_module.resolver |
|
|
| benchmark_name = getattr(benchmark_config, "name", None) or "benchmark" |
| output_dir = Path(tempfile.mkdtemp(prefix=f"skydiscover_{benchmark_name}_")) |
|
|
| params = getattr(benchmark_config, "params", {}) |
| return resolver.resolve(config=params, output_dir=output_dir) |
|
|