"""Energy-based lesion-subspace coverage (additive alternative to effective rank). Motivation (Gate 2 / Gate 4 root cause): the RankMe / coding-rate coverage is an AGGREGATE over all tokens whose value barely moves when a few small-lesion tokens are added or removed. An ENERGY coverage is ADDITIVE in tokens, so high-lesion-energy tokens contribute in proportion to their lesion content: C_E(S; x) = sum_{i in S} || P_L z_i ||^2 (total lesion-subspace energy retained) Removing a lesion token (high ||P_L z||) drops C_E a lot, so the coverage DROP tracks lesion loss directly. Label-free, differentiable, no SVD. C*_E(x) = C_E({1..n}; x). """ from __future__ import annotations import torch def energy_coverage(Z_retained: torch.Tensor, P_L: torch.Tensor | None = None) -> torch.Tensor: """C_E(S;x): total lesion-subspace energy of retained tokens (scalar).""" Z = Z_retained if Z.ndim != 2 or Z.shape[0] == 0: return torch.zeros((), dtype=Z.dtype, device=Z.device) PZ = Z @ P_L.T if P_L is not None else Z return PZ.pow(2).sum() def energy_coverage_drop(Z_full: torch.Tensor, Z_retained: torch.Tensor, P_L: torch.Tensor | None = None) -> torch.Tensor: return energy_coverage(Z_full, P_L) - energy_coverage(Z_retained, P_L)