"""Coverage metrics.""" import numpy as np def marginal_coverage(covered: np.ndarray) -> float: """Overall empirical coverage.""" return covered.mean() def stratified_coverage( covered: np.ndarray, strata: np.ndarray, ) -> dict[int, float]: """Stratified coverage in prediction space. Args: covered: boolean array (n,) strata: integer group labels (n,) Returns: dict mapping stratum label -> empirical coverage """ result = {} for s in np.unique(strata): mask = strata == s if mask.sum() > 0: result[int(s)] = covered[mask].mean() return result def max_disparity( covered: np.ndarray, strata: np.ndarray, alpha: float, ) -> float: """Max |stratified_coverage - (1-alpha)| across strata.""" sc = stratified_coverage(covered, strata) target = 1.0 - alpha return max(abs(v - target) for v in sc.values()) def worst_stratum_coverage( covered: np.ndarray, strata: np.ndarray, ) -> float: """Minimum empirical coverage across strata.""" sc = stratified_coverage(covered, strata) return min(sc.values()) def coverage_variance( covered: np.ndarray, strata: np.ndarray, ) -> float: """Variance of empirical coverage across strata.""" sc = stratified_coverage(covered, strata) return float(np.var(list(sc.values())))