Source code for biogeme.latent_variables.context
from __future__ import annotations
"""Build-time context shared by resolution and outputs."""
from dataclasses import dataclass
from enum import Enum
from .naming import DefaultNamingPolicy, NamingPolicy
[docs]
class EstimationMode(str, Enum):
MAXIMUM_LIKELIHOOD = 'maximum_likelihood'
BAYESIAN = 'bayesian'
[docs]
class PositivityMode(str, Enum):
LOG_EXP = 'log_exp'
LOWER_BOUND = 'lower_bound'
[docs]
@dataclass(frozen=True, slots=True)
class BuildContext:
"""Configuration influencing resolution and output generation.
:param estimation_mode: Maximum likelihood or Bayesian mode.
:param draw_type: Draw type used for latent variables.
:param positivity_mode: Positive-parameter parameterization.
:param naming: Naming policy.
:param ordinal_eps: Lower clipping bound for ordinal probabilities.
:param ordinal_enforce_order: Whether to enforce ordered cutpoints.
"""
estimation_mode: EstimationMode
draw_type: str
positivity_mode: PositivityMode
naming: NamingPolicy
ordinal_eps: float = 1e-12
ordinal_enforce_order: bool = True
[docs]
@staticmethod
def default(estimation_mode: EstimationMode) -> 'BuildContext':
draw_type = 'NORMAL_MLHS_ANTI' if estimation_mode == EstimationMode.MAXIMUM_LIKELIHOOD else 'Normal'
positivity_mode = (
PositivityMode.LOG_EXP if estimation_mode == EstimationMode.MAXIMUM_LIKELIHOOD else PositivityMode.LOWER_BOUND
)
return BuildContext(
estimation_mode=estimation_mode,
draw_type=draw_type,
positivity_mode=positivity_mode,
naming=DefaultNamingPolicy(),
)