Supports two calling patterns:
Closed-form (via given_indices and
given_values): Uses the exact Schur complement formula.
Returns a normal (1D result) or mvn.
Predicate-based (via P): Falls back to MC
realization via ensure_realized.
# S3 method for class 'mvn'
conditional(x, P = NULL, ..., given_indices = NULL, given_values = NULL)A normal, mvn, or empirical_dist object.
# Closed-form conditioning: X2 | X1 = 1
sigma <- matrix(c(1, 0.5, 0.5, 1), 2, 2)
X <- mvn(c(0, 0), sigma)
X2_given <- conditional(X, given_indices = 1, given_values = 1)
mean(X2_given)
#> [1] 0.5
vcov(X2_given)
#> [1] 0.75
# Predicate-based MC fallback (slower)
# \donttest{
set.seed(42)
X2_mc <- conditional(X, P = function(x) x[1] > 0)
# }