import numpy as np, json src=open('cov.py').read(); exec(src.split("edges=")[0]) cue={N:np.load(f'cue_N{N}.npy') for N in [12,25,46]} # extra CUE with more small gaps from scipy.stats import unitary_group rng=np.random.default_rng(5) def sim(N,reps): out=[] for _ in range(reps): U=unitary_group.rvs(N,random_state=rng); th=np.sort(np.angle(np.linalg.eigvals(U))) z=np.exp(1j*th); D=np.abs(z[:,None]-z[None,:]); np.fill_diagonal(D,1); lp=np.log(D).sum(1) s=np.diff(np.r_[th,th[0]+2*np.pi])*N/(2*np.pi); out.append(np.c_[s,lp,np.roll(lp,-1)]) return np.vstack(out) for N in [12,25,46]: cue[N]=np.vstack([cue[N],sim(N,int(1.2e6/N))]) def cfit(s,d,smax=0.6): m=s