spd_learn.functional.check_spd_eigenvalues#

spd_learn.functional.check_spd_eigenvalues(eigenvalues: Tensor, name: Literal['eigval_clamp', 'eigval_log', 'eigval_sqrt', 'eigval_inv_sqrt', 'eigval_power', 'loewner_equal', 'batchnorm_var', 'dropout', 'trace_norm', 'stiefel_init', 'division_safe'] = 'eigval_clamp', *, config: NumericalConfig | None = None, raise_on_failure: bool = False) → tuple[source]#

Check if eigenvalues satisfy SPD requirements.

Parameters:
  • eigenvalues (torch.Tensor) – The eigenvalues to check.

  • name (ThresholdName, default="eigval_clamp") – The threshold to use for the positivity check.

  • config (NumericalConfig, optional) – Configuration to use. If None, uses the global numerical_config.

  • raise_on_failure (bool, default=False) – If True, raise an error when eigenvalues fail the check.

Returns:

A tuple of (is_valid, min_eigenvalue, num_below_threshold).

Return type:

tuple

Raises:

ValueError – If raise_on_failure=True and eigenvalues are not valid.

Examples

>>> import torch
>>> from spd_learn.functional.numerical import check_spd_eigenvalues
>>> eigvals = torch.tensor([1e-10, 0.1, 1.0])
>>> is_valid, min_val, num_bad = check_spd_eigenvalues(eigvals)
>>> print(f"Valid: {is_valid}, Min: {min_val:.2e}, Bad count: {num_bad}")
Valid: False, Min: 1.00e-10, Bad count: 1