Source code for skchange.utils.validation.cuts

"""Utility functions for interval scorers."""

import numpy as np


[docs] def check_cuts_array( cuts: np.ndarray, n_samples: int, min_size: int | None = None, last_dim_size: int = 2, ) -> np.ndarray: """Check array type cuts. Parameters ---------- cuts : np.ndarray Array of cuts to check. n_samples : int Number of samples in the data. min_size : int, optional (default=1) Minimum size of the intervals obtained by the cuts. last_dim_size : int, optional (default=2) Size of the last dimension. Returns ------- cuts : np.ndarray The unmodified input cuts array. Raises ------ ValueError If the cuts does not meet the requirements. """ if min_size is None: min_size = 1 if cuts.ndim != 2: raise ValueError("The cuts must be a 2D array.") if not np.issubdtype(cuts.dtype, np.integer): raise ValueError("The cuts must be of integer type.") if cuts.shape[-1] != last_dim_size: raise ValueError( "The cuts must be specified as an array with length " f"{last_dim_size} in the last dimension." ) if not np.all(cuts >= 0) or not np.all(cuts <= n_samples): raise ValueError( "All cuts must be non-negative, and less than " f"or equal to the number of samples=({n_samples})." ) interval_sizes = np.diff(cuts, axis=1) if not np.all(interval_sizes >= min_size): min_interval_size = np.min(interval_sizes) raise ValueError( "All rows in `cuts` must be strictly increasing and each entry must" f" be more than min_size={min_size} apart." f" Found a minimum interval size of {min_interval_size}." ) return cuts