"""Finite reference distributions for verification, never model selection.""" import torch def inverse_empirical_cdf(values,probabilities): """Quantiles of a finite uniform law; no interpolation between support points.""" assert values.ndim==1 and probabilities.ndim==1 and len(values)>0 assert values.device.type=='cuda' and probabilities.device==values.device assert torch.all((probabilities>=0)&(probabilities<=1)) ordered=values.sort().values indices=torch.ceil(probabilities*len(values)).long().clamp(1,len(values))-1 return ordered[indices] def sign_flip_pvalues(daily_differences): """Enumerate the exact sign-symmetric null for independent paired days.""" assert daily_differences.ndim==1 and daily_differences.device.type=='cuda' n=len(daily_differences) code=torch.arange(2**n,device=daily_differences.device) bit=torch.arange(n,device=daily_differences.device) signs=(((code[:,None]>>bit)&1)*2-1).to(daily_differences.dtype) simulated=(signs*daily_differences).mean(1);observed=daily_differences.mean() one=(simulated>=observed-1e-12).double().mean() two=(simulated.abs()>=observed.abs()-1e-12).double().mean() return one,two