"""Factory function to create optimizer backends.""" from physics_informed_bo.config import OptimizationConfig, OptimizerBackend from physics_informed_bo.optimizers.base_optimizer import BaseOptimizer from physics_informed_bo.optimizers.botorch_optimizer import BoTorchOptimizer from physics_informed_bo.optimizers.ax_optimizer import AXOptimizer from physics_informed_bo.optimizers.bofire_optimizer import BoFireOptimizer def create_optimizer(config: OptimizationConfig) -> BaseOptimizer: """Create an optimizer backend based on the configuration. Args: config: Optimization configuration specifying the backend. Returns: An initialized optimizer backend. """ if config.backend == OptimizerBackend.BOTORCH: return BoTorchOptimizer(config) elif config.backend == OptimizerBackend.AX: return AXOptimizer(config) elif config.backend == OptimizerBackend.BOFIRE: return BoFireOptimizer(config) else: raise ValueError(f"Unsupported backend: {config.backend}")