Skip to content

catalog

catalog

Pure named optimizer presets and explicit, lazy component construction.

OptimizerSpec

Bases: Settings

One immutable named policy; the solver choices are actual settings.

method property

method: str

Algorithm label used by existing records and command listings.

optimizer_method

optimizer_method(settings: OptimizerSettings) -> str

Return the explicit algorithm label, without importing implementations.

Source code in q2mm/optimizers/catalog.py
def optimizer_method(settings: OptimizerSettings) -> str:
    """Return the explicit algorithm label, without importing implementations."""
    if isinstance(settings, ScipySettings):
        return settings.method
    if isinstance(settings, OptaxSettings):
        return f"optax:{settings.optimizer}"
    if isinstance(settings, JaxOptSettings):
        return f"jaxopt:{settings.method}"
    if isinstance(settings, MultiStartSettings):
        return f"multi:{optimizer_method(settings.optimizer)}"
    return settings.kind

optimizer_spec

optimizer_spec(key: str) -> OptimizerSpec

Read a named preset without importing any optional algorithm.

Source code in q2mm/optimizers/catalog.py
def optimizer_spec(key: str) -> OptimizerSpec:
    """Read a named preset without importing any optional algorithm."""
    try:
        return OPTIMIZER_CATALOG[key]
    except KeyError:
        raise ValueError(f"Unknown optimizer {key!r}; choose one of {sorted(OPTIMIZER_CATALOG)}.") from None

build_optimizer

build_optimizer(settings: OptimizerSettings) -> _Optimizer

Construct exactly the declared algorithm, importing only its implementation.

Source code in q2mm/optimizers/catalog.py
def build_optimizer(settings: OptimizerSettings) -> _Optimizer:
    """Construct exactly the declared algorithm, importing only its implementation."""
    if isinstance(settings, ScipySettings):
        from q2mm.optimizers.scipy_opt import ScipyOptimizer

        return ScipyOptimizer(settings)
    if isinstance(settings, OptaxSettings):
        from q2mm.optimizers.optax import OptaxOptimizer

        return OptaxOptimizer(settings)
    if isinstance(settings, JaxOptSettings):
        from q2mm.optimizers.jaxopt_opt import JaxOptOptimizer

        return JaxOptOptimizer(settings)
    if isinstance(settings, BasinHoppingSettings):
        from q2mm.optimizers.basinhopping import BasinHoppingOptimizer

        return BasinHoppingOptimizer(settings)
    if isinstance(settings, MultiStartSettings):
        from q2mm.optimizers.multistart import MultiStartOptimizer

        return MultiStartOptimizer(settings)
    if isinstance(settings, JaxMultiStartSettings):
        from q2mm.optimizers.jax_multistart import JaxMultiStartOptimizer

        return JaxMultiStartOptimizer(settings)
    if isinstance(settings, CyclingSettings):
        from q2mm.optimizers.cycling import CyclingOptimizer

        return CyclingOptimizer(settings)
    raise TypeError(f"Unsupported optimizer settings: {type(settings).__name__}.")