(
self,
initial_program_path: str,
evaluation_file: str,
config: Config,
output_dir: Optional[str] = None,
)
| 68 | """ |
| 69 | |
| 70 | def __init__( |
| 71 | self, |
| 72 | initial_program_path: str, |
| 73 | evaluation_file: str, |
| 74 | config: Config, |
| 75 | output_dir: Optional[str] = None, |
| 76 | ): |
| 77 | # Load configuration (loaded in main_async) |
| 78 | self.config = config |
| 79 | |
| 80 | # Set up output directory |
| 81 | self.output_dir = output_dir or os.path.join( |
| 82 | os.path.dirname(initial_program_path), "openevolve_output" |
| 83 | ) |
| 84 | os.makedirs(self.output_dir, exist_ok=True) |
| 85 | |
| 86 | # Set up logging |
| 87 | self._setup_logging() |
| 88 | |
| 89 | # Manual mode queue lives in <openevolve_output>/manual_tasks_queue |
| 90 | self._setup_manual_mode_queue() |
| 91 | |
| 92 | # Set random seed for reproducibility if specified |
| 93 | if self.config.random_seed is not None: |
| 94 | import hashlib |
| 95 | import random |
| 96 | |
| 97 | import numpy as np |
| 98 | |
| 99 | # Set global random seeds |
| 100 | random.seed(self.config.random_seed) |
| 101 | np.random.seed(self.config.random_seed) |
| 102 | |
| 103 | # Create hash-based seeds for different components |
| 104 | base_seed = str(self.config.random_seed).encode("utf-8") |
| 105 | llm_seed = int(hashlib.md5(base_seed + b"llm").hexdigest()[:8], 16) % (2**31) |
| 106 | |
| 107 | # Propagate seed to LLM configurations |
| 108 | self.config.llm.random_seed = llm_seed |
| 109 | for model_cfg in self.config.llm.models: |
| 110 | if not hasattr(model_cfg, "random_seed") or model_cfg.random_seed is None: |
| 111 | model_cfg.random_seed = llm_seed |
| 112 | for model_cfg in self.config.llm.evaluator_models: |
| 113 | if not hasattr(model_cfg, "random_seed") or model_cfg.random_seed is None: |
| 114 | model_cfg.random_seed = llm_seed |
| 115 | |
| 116 | logger.info(f"Set random seed to {self.config.random_seed} for reproducibility") |
| 117 | logger.debug(f"Generated LLM seed: {llm_seed}") |
| 118 | |
| 119 | # Load initial program |
| 120 | self.initial_program_path = initial_program_path |
| 121 | self.initial_program_code = self._load_initial_program() |
| 122 | if not self.config.language: |
| 123 | self.config.language = extract_code_language(self.initial_program_code) |
| 124 | |
| 125 | # Extract file extension from initial program |
| 126 | self.file_extension = os.path.splitext(initial_program_path)[1] |
| 127 | if not self.file_extension: |
nothing calls this directly
no test coverage detected