Source code for biogeme.pymc_calculator
"""
Module in charge of the actual calculation of the formula on the database for Bayesian estination.
Michel Bierlaire
Tue Oct 28 2025, 11:45:59
"""
from __future__ import annotations
import logging
import pytensor.tensor as pt
from biogeme.exceptions import BiogemeError
from biogeme.model_elements import ModelElements
logger = logging.getLogger(__name__)
[docs]
def pymc_formula_evaluator(model_elements: ModelElements) -> pt.TensorVariable:
"""
Prepares and compiles the PyMc function for evaluating a Biogeme expression.
:param model_elements: All elements needed to calculate the expression.
"""
log_likelihood = model_elements.loglikelihood
if log_likelihood is None:
error_message = (
f'No expression found for log likelihood. '
f'Available expressions: {model_elements.formula_names}'
)
raise BiogemeError(error_message)
pymc_builder = log_likelihood.recursive_construct_pymc_model_builder()
pymc_expression = pymc_builder(dataframe=model_elements.database.dataframe)
if model_elements.weight is not None:
weight_builder = model_elements.weight.recursive_construct_pymc_model_builder()
weight_expression = weight_builder(dataframe=model_elements.database.dataframe)
total_expression = weight_expression * pymc_expression
else:
total_expression = pymc_expression
return total_expression