torch_openreml.covariance.Sum¶
- class torch_openreml.covariance.Sum(*args, **kwargs)[source]¶
Bases:
OperatorSum of multiple covariance matrices.
\[\symbf{V} = \sum_{i=1}^{k} \symbf{A}_i\]where each \(\symbf{A}_i\) is a covariance matrix of the same shape. This operator represents additive covariance structures, commonly used in linear mixed-effects models to combine multiple variance components (e.g., genetic, environmental, and residual).
All operands must evaluate to matrices of identical shape. Each operand may be a trainable
Matrixor a fixedtorch.Tensor.Initialize a sum operator from two or more operands.
- Parameters:
*args – Two or more operands as positional arguments or a single dict mapping names to operands.
**kwargs – Two or more operands as keyword arguments.
- Raises:
ValueError – If fewer than two operands are provided.
Example:
import torch from torch_openreml.covariance import AR1Matrix, ScalarMatrix, Sum op = Sum(time=AR1Matrix(4), noise=ScalarMatrix(4)) free_params = torch.tensor([0.5, 1.0, 1.0]) op(free_params)
tensor([[10.1073, 1.2562, 0.5805, 0.2683], [ 1.2562, 10.1073, 1.2562, 0.5805], [ 0.5805, 1.2562, 10.1073, 1.2562], [ 0.2683, 0.5805, 1.2562, 10.1073]])Methods
__call__([free_params])Construct the matrix from a flat parameter tensor.
auto_grad([free_params])Compute the Jacobian of
build()with respect to free parameters using automatic differentiation.build_operands([free_params])Evaluate each operand at the current free parameters.
build_params([free_params, include_fixed, ...])Construct the full parameter tensor by delegating to each operand.
get_intermediates(params)Retrieve cached intermediate computation results if still valid.
grad([free_params])Compute the Jacobian of
__call__()with respect to trainable parameters.manual_grad([free_params])Compute the Jacobian of
__call__()with respect to trainable parameters using a closed-form analytic expression.map_theta_to_dv(theta)An interface compatible with
torch_openreml.REMLthat maps parameters to the matrix Jacobian.map_theta_to_v(theta)An interface compatible with
torch_openreml.REMLthat maps parameters to a matrix.operands_grad([free_params])Compute the Jacobian of each operand with respect to its parameters.
reset_intermediates()Clear the intermediate computation cache.
set_intermediates(params, intermediates)Cache intermediate computation results keyed by parameter hash.
trans_grad([free_params])Compute the element-wise derivative of the free parameter transforms.
Attributes
fixed_param_defaultsFixed parameter defaults.
fixed_param_indexIndex of fixed parameters.
fixed_param_namesFixed parameter names.
fixed_param_transTransforms for fixed parameters.
free_param_defaultsFree parameter defaults.
free_param_indexIndex of free parameters.
free_param_namesFree parameter names.
free_param_transTransforms for free parameters.
num_fixed_paramsTotal number of fixed parameters.
num_free_paramsTotal number of free parameters.
num_paramsTotal number of parameters.
operandsMapping from operand names to operand matrices or tensors.
param_defaultsParameter defaults.
param_namesParameter names.
param_specsParameter specifications.
param_transParameter transforms.
repr_dictKey-value pairs used to build the string representation.
shapeOutput matrix shape.
- __call__(free_params=None)[source]¶
Construct the matrix from a flat parameter tensor.
Must be implemented by subclasses. Implementations should convert
free_paramsviabuild_params()to validate, include fixed parameters, and apply transforms before any computation.- Parameters:
free_params (torch.Tensor or dict) – Flat 1D parameter tensor or parameter dictionary. If omitted, default values are used. Default:
None.- Returns:
Constructed matrix of shape
shape.- Return type:
torch.Tensor
- manual_grad(free_params=None)[source]¶
Compute the Jacobian of
__call__()with respect to trainable parameters using a closed-form analytic expression.Since \(\symbf{V} = \sum_i \symbf{A}_i\), the gradient with respect to each operand’s parameters is simply the operand’s own gradient — there is no cross-term interaction. Per-operand Jacobians from
operands_grad()are concatenated directly.- Parameters:
free_params (torch.Tensor or dict) – Flat 1D parameter tensor or parameter dictionary. If omitted, default values are used. Default:
None.- Returns:
(grad, grad_names), wheregradis a 3D tensor of shape(num_free_params, *shape)andgrad_namesis a list of the corresponding parameter names. Returns(None, [])if all parameters are fixed.- Return type:
tuple
- Raises:
TypeError – If
free_paramsis not a Torch tensor.ValueError – If
free_paramsis not a 1D tensor or has the wrong length, or iffree_paramsis a dict with missing or unexpected keys.
Example:
import torch from torch_openreml.covariance import AR1Matrix, ScalarMatrix, Sum op = Sum(time=AR1Matrix(4), noise=ScalarMatrix(4)) free_params = torch.tensor([0.5, 1.0, 1.0]) grad, grad_names = op.manual_grad(free_params) grad
tensor([[[ 5.4366, 2.5123, 1.1610, 0.5365], [ 2.5123, 5.4366, 2.5123, 1.1610], [ 1.1610, 2.5123, 5.4366, 2.5123], [ 0.5365, 1.1610, 2.5123, 5.4366]], [[ 0.0000, 1.0689, 0.9879, 0.6848], [ 1.0689, 0.0000, 1.0689, 0.9879], [ 0.9879, 1.0689, 0.0000, 1.0689], [ 0.6848, 0.9879, 1.0689, 0.0000]], [[14.7781, 0.0000, 0.0000, 0.0000], [ 0.0000, 14.7781, 0.0000, 0.0000], [ 0.0000, 0.0000, 14.7781, 0.0000], [ 0.0000, 0.0000, 0.0000, 14.7781]]])grad_names['time/sigma^2', 'time/rho', 'noise/sigma^2']