Source code for torch_openreml.covariance.param

"""
Parameter specification helpers.

Provides utility functions for creating parameter specification
dictionaries used by :class:`~torch_openreml.covariance.matrix.Matrix`.

Functions:
    simple_param_specs:
        Create a default parameter specification with identity transforms.
"""

import torch
from torch_openreml.covariance.transform import TransformIdentity


[docs] def simple_param_specs(n, default=None, trans=None): """ Create a parameter specification dictionary with ``n`` parameters. Each parameter is named ``"theta_0"``, ``"theta_1"``, ..., is not fixed, and uses a common transform for all parameters. All parameters share the same default value. Args: n (int): Number of parameters to create. default (torch.Tensor, optional): Default value for each parameter, given as a 1D tensor of shape ``(1,)``. Defaults to ``torch.tensor([0.0])``. trans (Transform, optional): Transform to apply to all parameters. Defaults to :class:`TransformIdentity` (unconstrained). Returns: dict: A dictionary mapping parameter names to specification dicts of the form ``{"fixed": False, "default": tensor, "trans": trans}``. Raises: TypeError: If ``default`` is not a Torch tensor. ValueError: If ``default`` does not have shape ``(1,)``. Example: .. jupyter-execute:: from torch_openreml.covariance.param import simple_param_specs simple_param_specs(3) .. jupyter-execute:: import torch simple_param_specs(2, default=torch.tensor([1.5])) """ if trans is None: trans = TransformIdentity() if default is None: default = torch.tensor([0.0]) if not torch.is_tensor(default): raise TypeError("default must be a 1D torch tensor of shape (1).") if default.ndim != 1 or default.shape[0] != 1: raise ValueError("Default must be a 1D tensor with shape (1).") return { f"theta_{i}": { "fixed": False, "default": default.detach().clone(), "trans": trans } for i in range(n) }