Source code for biogeme.calculator.simple_formula
from __future__ import annotations
from typing import TYPE_CHECKING
import numpy as np
from biogeme.database import Database
from biogeme.model_elements import ModelElements
from biogeme.second_derivatives import SecondDerivativesMode
from .function_call import (
CallableExpression,
CompiledFormulaEvaluator,
function_from_compiled_formula,
)
from .single_formula import evaluate_formula, evaluate_model_per_row
if TYPE_CHECKING:
from biogeme.expressions import Expression
[docs]
def evaluate_simple_expression_per_row(
expression: Expression,
database: Database,
numerically_safe: bool,
use_jit: bool,
second_derivatives_mode: SecondDerivativesMode,
) -> np.ndarray:
model_elements = ModelElements.from_expression_and_weight(
log_like=expression, weight=None, database=database, use_jit=use_jit
)
return evaluate_model_per_row(
model_elements=model_elements,
the_betas={},
numerically_safe=numerically_safe,
second_derivatives_mode=second_derivatives_mode,
)
[docs]
def evaluate_simple_expression(
expression: Expression,
database: Database | None,
numerically_safe: bool,
use_jit: bool,
) -> float:
model_elements = ModelElements.from_expression_and_weight(
log_like=expression, weight=None, database=database, use_jit=use_jit
)
return evaluate_formula(
model_elements=model_elements,
the_betas={},
second_derivatives_mode=SecondDerivativesMode.NEVER,
numerically_safe=numerically_safe,
)
[docs]
def create_function_simple_expression(
expression: Expression,
numerically_safe: bool,
use_jit: bool,
named_output: bool = False,
database: Database | None = None,
) -> CallableExpression:
if database is None:
database = Database.dummy_database()
model_elements = ModelElements.from_expression_and_weight(
log_like=expression, weight=None, database=database, use_jit=use_jit
)
the_evaluator = CompiledFormulaEvaluator(
model_elements=model_elements,
second_derivatives_mode=SecondDerivativesMode.ANALYTICAL,
numerically_safe=numerically_safe,
)
betas = model_elements.expressions_registry.free_betas_init_values
return function_from_compiled_formula(
the_compiled_function=the_evaluator, the_betas=betas, named_output=named_output
)