Source code for pymixef.backends
"""Built-in SciPy/NumPy reference estimation backends."""
from __future__ import annotations
from typing import Any
from .base import (
Backend,
BackendError,
BackendInputError,
BackendNumericalError,
BackendUnsupportedError,
validate_payload,
)
from .glmm import GLMMBackend, LaplaceGLMMBackend, fit_glmm
from .lmm import DenseLMMBackend, GaussianLMMBackend, LMMBackend, fit_lmm
from .mmrm import MMRMBackend, fit_mmrm
BUILTIN_BACKENDS: dict[str, type[Any]] = {
"lmm": GaussianLMMBackend,
"gaussian-lmm": GaussianLMMBackend,
"dense-lmm": GaussianLMMBackend,
"laplace": LaplaceGLMMBackend,
"glmm": LaplaceGLMMBackend,
"mmrm": MMRMBackend,
}
[docs]
def get_backend(name: str) -> Backend:
"""Instantiate a built-in backend by stable engine name."""
normalized = name.lower().replace("_", "-").replace(" ", "-")
try:
backend_type = BUILTIN_BACKENDS[normalized]
except KeyError as exc:
raise BackendUnsupportedError(
f"unknown built-in backend {name!r}",
details={"available_backends": sorted(BUILTIN_BACKENDS)},
) from exc
return backend_type()
__all__ = [
"BUILTIN_BACKENDS",
"Backend",
"BackendError",
"BackendInputError",
"BackendNumericalError",
"BackendUnsupportedError",
"DenseLMMBackend",
"GLMMBackend",
"GaussianLMMBackend",
"LMMBackend",
"LaplaceGLMMBackend",
"MMRMBackend",
"fit_glmm",
"fit_lmm",
"fit_mmrm",
"get_backend",
"validate_payload",
]