from .registry import register_backend, register_surrogate, register_acquisition

from .backends.custom_backend import CustomOptimizer
from .backends.physbo_backend import PhysBONativeOptimizer
from .backends.simple import RandomOptimizer, GridOptimizer

from .surrogates.sklearn_gpr import SklearnGPRSurrogate
from .surrogates.physbo_gp import PhysBOSurrogate

from .acquisitions.analytic import (
    ExpectedImprovement,
    ProbabilityImprovement,
    UpperConfidenceBound,
    LowerConfidenceBound,
)
from .acquisitions.stein import SteinLiteAcquisition
from .acquisitions.entropy import EntropySearchLite

register_backend("custom", CustomOptimizer)
register_backend("physbo", PhysBONativeOptimizer)
register_backend("random", RandomOptimizer)
register_backend("grid", GridOptimizer)
register_backend("sklearn_gpr", CustomOptimizer)
register_backend("physbo_gp", CustomOptimizer)

register_surrogate("sklearn_gpr", SklearnGPRSurrogate)
register_surrogate("physbo_gp", PhysBOSurrogate)

register_acquisition("ei", ExpectedImprovement)
register_acquisition("expected_improvement", ExpectedImprovement)
register_acquisition("pi", ProbabilityImprovement)
register_acquisition("probability_improvement", ProbabilityImprovement)
register_acquisition("ucb", UpperConfidenceBound)
register_acquisition("lcb", LowerConfidenceBound)
register_acquisition("stein", SteinLiteAcquisition)
register_acquisition("stein_lite", SteinLiteAcquisition)
register_acquisition("entropy", EntropySearchLite)
