Skip to content

validate_weight_array

yohou.utils.weighting.validate_weight_array(weights, name='weights')

Validate a resolved weight array for NaN, negatives, infinities, and all-zero.

Parameters

Name Type Description Default
weights ndarray

Weight array to validate.

required
name str

Descriptive name used in error messages (e.g., "step_weight", "vintage_weight").

"weights"

Raises

Type Description
ValueError

If any element is NaN, negative, infinite, or if all elements are zero.

Source Code

Show/Hide source
def validate_weight_array(weights: np.ndarray, name: str = "weights") -> None:
    """Validate a resolved weight array for NaN, negatives, infinities, and all-zero.

    Parameters
    ----------
    weights : numpy.ndarray
        Weight array to validate.
    name : str, default="weights"
        Descriptive name used in error messages (e.g., ``"step_weight"``,
        ``"vintage_weight"``).

    Raises
    ------
    ValueError
        If any element is NaN, negative, infinite, or if all elements are zero.

    """
    nan_mask = np.isnan(weights)
    if np.any(nan_mask):
        nan_indices = np.where(nan_mask)[0].tolist()
        raise ValueError(
            f"{name} contains NaN at {len(nan_indices)} position(s) "
            f"(indices {nan_indices[:10]}{'...' if len(nan_indices) > 10 else ''})"
        )
    if np.any(weights < 0):
        neg_indices = np.where(weights < 0)[0].tolist()
        raise ValueError(
            f"{name} contains negative values at indices {neg_indices[:10]}{'...' if len(neg_indices) > 10 else ''}"
        )
    if np.any(np.isinf(weights)):
        inf_indices = np.where(np.isinf(weights))[0].tolist()
        raise ValueError(
            f"{name} contains infinite values at indices {inf_indices[:10]}{'...' if len(inf_indices) > 10 else ''}"
        )
    if weights.sum() == 0:
        raise ValueError(f"All weights are zero for {name}")