Internals

The helpers the rules are built on. None is public; a contributor changing the rules reads them.

The two types the rules are declared under, one per method:

The linearisation rules for a message in precision form share these, one per direction:

FlowMessagePassingRules.flow_forward_precision — Function
flow_forward_precision(algo::FlowLinearization, m_in) -> MvNormalMeanPrecision

The linearised message towards out from a normal m_in in precision form, mean-precision or weighted-mean-precision alike: mean forward(model, μ) and precision Jᵢᵀ Λ Jᵢ, with Jᵢ the inverse flow's Jacobian at the output's mean forward(model, μ). It is the covariance form's message, inverted without inverting a matrix.

source
FlowMessagePassingRules.flow_backward_precision — Function
flow_backward_precision(algo::FlowLinearization, m_out) -> MvNormalMeanPrecision

The linearised message towards in from a normal m_out in precision form: mean backward(model, μ) and precision Jᵀ Λ J, with J the flow's Jacobian at the input's mean backward(model, μ). It is the covariance form's message, inverted without inverting a matrix.

source

The unscented rules push the sigma points through the model themselves:

FlowMessagePassingRules.flow_unscented_statistics — Function
flow_unscented_statistics(f, model, method::Unscented, μ, Σ) -> MvNormalMeanCovariance

The normal of f(model, x) for x ~ N(μ, Σ) by the unscented transform, f being FlowMessagePassingRules.forward or FlowMessagePassingRules.backward. The sigma points are placed along the rows of the symmetric square root of (L + λ) Σ, not along a Cholesky factor as unscented_statistics places them: both are exact for an affine flow, and they differ for a nonlinear one.

source