Multivariate Numerical Kernels¶
Multivariate Native Paths¶
Multivariate Gaussian, Student, stochastic Student, and equicorrelation models use compiled row, grid, and conditional kernels. Several optimizations are automatic and do not require strategy options:
Static Gaussian and Student fitting uses the shared multivariate MLE
orchestrator with independent final-point objective and gradient validation.
The public method="mle" label means a static model; corr_mode determines
whether correlation is supplied/plug-in or enters the joint native objective.
shrinkage maps one analytical correlation score to a raw logit parameter,
while cholesky pulls the native lower-triangle score back through the full
SPD parameterization. The Cholesky mode is guarded at d <= 10 by default.
fixed retains the fast path: Gaussian prepares normal scores once and uses
their sample correlation, while Student uses Kendall preprocessing and then
optimizes only df. Factor mode uses Woodbury operators with O(d*k + k^2)
stored state. Gaussian and two-stage Student estimate loadings outside the
joint optimizer; joint static Student uses the native loading score and a
rotation-anchored loading parameterization with d >= 2*k + 1. None of the compact likelihood,
sampling, bootstrap, or persistence paths needs a dense d*d correlation.
Dense GaussianCopula.sample and predict check memory_budget_bytes against
the returned n*d*8 bytes before consuming random draws. This output-only
contract also applies to dense conditional sampling; it does not bound all
temporary workspace. Batch iterators apply the check to each output block.
Factor Gaussian sampling instead checks its existing workspace-plus-output
estimate.
- conditional Gaussian/Student sampling reuses the Schur-complement Cholesky factor when one correlation matrix is shared by all output rows;
- Student density workspaces are reused inside GAS, static likelihood, Monte Carlo batches, and across all grid nodes within each SCAR emission row;
- dense static and GAS Student Rosenblatt transforms in the parity-validated
domain (
df >= 0.1, symmetric unit-diagonal SPD correlation with condition number at most1e4) send all rows and either a scalar or row-specificdftrajectory to one native call, reuse one correlation Cholesky factor, and parallelize independent rows when useful; - equicorrelation grids compute per-row normal-score sums once and reuse them for every latent-grid node; prepared static and SCAR-OU evaluators retain those statistics across repeated objective calls;
- conditional binding inputs avoid an additional C++ copy when they are
C-contiguous
float64arrays.
The zero-copy condition concerns the native boundary. Python adapters may still
normalize arbitrary user inputs with np.ascontiguousarray; non-contiguous
arrays and other dtypes therefore require a temporary conversion. Numeric
inputs are always checked for finite values, so zero-copy removes memory traffic
but not the linear validation pass.
Row-specific (n,d,d) correlation arrays cannot share one Cholesky factor and
retain per-row factorization cost. Near-singular Student conditional covariance
matrices also retain the per-row jitter path to preserve numerical semantics.
For dense Student Rosenblatt, the adapter rejects unsupported capability
combinations before entering the kernel. Production execution is always
native: invalid inputs, unsupported capability combinations, an unavailable
extension, and native runtime failures raise deterministic exceptions. The
preserved SciPy implementation is a test oracle only and is never selected by
production dispatch.