Source code for probly.calibration.isotonic_regression.common
"""Common methods for isotonic regression."""
from __future__ import annotations
from typing import TYPE_CHECKING, Any
from lazy_dispatch.singledispatch import lazydispatch
if TYPE_CHECKING:
from collections.abc import Callable
from lazy_dispatch.isinstance import LazyType
@lazydispatch
def _isotonic_factory(base_model: object, use_logits: bool) -> type[Any]:
message = f"No Isotonic Regression implementation for base={type(base_model)}, use_logits={use_logits}."
raise NotImplementedError(message)
[docs]
def register_isotonic_factory(key: LazyType) -> Callable:
"""Returns a decorator to register a class in the isotonic factory."""
return _isotonic_factory.register(key)
[docs]
def isotonic_regression(base: object, use_logits: bool) -> object:
"""Dispatches different implementations for isotonic regression."""
implementation: type[Any] = _isotonic_factory(base, use_logits)
return implementation(base, use_logits)