Prolate Energy-Preserving Bottleneck / validate.py
Failed on benchmark
1import json
2import numpy as np
3from prolate_bottleneck import ProlateBottleneck, concentration_matrix, fourier_basis
4
5rng=np.random.default_rng(2368)
6T,W,delta=96,0.22,0.1
7C=concentration_matrix(T,W)
8e,U=np.linalg.eigh(C); o=np.argsort(e)[::-1]; e=e[o]; U=U[:,o]
9# band-limited covariance samples
10X=rng.standard_normal((1200,T)) @ (U*np.sqrt(np.maximum(e,0))).T
11b=ProlateBottleneck(T,W,delta)
12r=b.rank
13Uf=fourier_basis(T,r)
14Ur=np.linalg.qr(rng.standard_normal((T,r)))[0]
15def err(Q):
16 R=X-X@[email protected]
17 return float(np.mean(np.sum(R*R,axis=1)/np.maximum(np.sum(X*X,axis=1),1e-12)))
18# API check on [B,T,D]
19X3=X[:4,:,None]
20api=float(np.max(np.abs(b.reconstruct(X3)[:,:,0] - X3[:,:,0] @ b.basis @ b.basis.T)))
21out={
22 'rank':r,'empirical_rank':b.empirical_rank,'asymptotic_rank_ceiling':r,
23 'eigen_min':float(e[-1]),'eigen_max':float(e[0]),'trace':float(np.trace(C)),
24 'dpss_error':err(b.basis),'fourier_error':err(Uf),'random_error':err(Ur),
25 'dpss_vs_fourier_relative_improvement':float((err(Uf)-err(b.basis))/err(Uf)),
26 'quadratic_work_reduction':float(1-(r/T)**2),'api_max_abs_error':api,
27 'curve':[]}
28for q in [8,16,24,32,40,48]:
29 Q=b.full_basis[:,:q]
30 F=fourier_basis(T,q)
31 R=np.linalg.qr(rng.standard_normal((T,q)))[0]
32 out['curve'].append({'rank':q,'dpss':err(Q),'fourier':err(F),'random':err(R)})
33open('validation_results.json','w').write(json.dumps(out,indent=2))
34print(json.dumps(out,indent=2))