import math import numpy as np def weighted_quantile(v, w, mass): o = np.argsort(v, kind='mergesort') c = np.cumsum(w[o] / np.sum(w)) return float(v[o][np.searchsorted(c, mass, side='left')]) def conformal_q(scores, alpha): a = np.sort(np.asarray(scores, float)); n = len(a) k = min(n, int(math.ceil((n + 1) * (1-alpha)))) return float(a[k-1]) def main(): v=np.array([1.,2.,10.,20.]); w=np.array([.1,.2,.3,.4]) assert weighted_quantile(v,w,.9)==20 and weighted_quantile(v,w,.5)==10 assert conformal_q(np.arange(1.,11.),.1)==10 rng=np.random.default_rng(7); r=rng.lognormal(size=(50,64)); ws=np.ones(64)/64 qs=[] for g in (.01,.05,.10,.25): s=np.array([weighted_quantile(row,ws,1-g) for row in r]); qs.append(float(np.mean(s))) assert np.all((r <= s[:,None]).mean(1) >= 1-g-1e-12) assert all(qs[i] >= qs[i+1] for i in range(len(qs)-1)) out={'weighted_order_statistic':True,'finite_sample_indexing':True,'gamma_mean_scores':qs,'monotone_tightening':True} print(out) if __name__=='__main__': main()