Manuscript En02-D@4 · En02-D-v4.tex · section · e19ec871

Computational supplement

Computational supplement · lines 2021–2089

Back to manuscript

def schedule(K,tmax,L,seed,name): rng = np.random.default_rng(seed) U,gates = {},{} for j in range(1,tmax+1): for n in range(1,K+1): A = np.eye(2**n,dtype=complex) for layer in range(2): parity = (j-1+layer) for edge in range(parity,n-1,2): th = rng.uniform(-np.pi,np.pi,4) G = kron(rot(Y,th[0]),rot(Y,th[1]))@CZ@ \ kron(rot(X,th[2]),rot(X,th[3])) if layer<L: A = embed(G,(edge,edge+1),n)@A gates["gate_ gates["theta_ U[j,n] = A check(name+"_U_ save(name+"_gates",**gates,**{"U_ return U

def spreading(G,n): if n<2: return 0. value = 0. for a,b in it.permutations(range(n),2): A = G.conj().T@embed(X,(a,),n)@G B = embed(Z,(b,),n) C = A@B-B@A value += np.trace(C.conj().T@C).real/(4*2**n) return float(value/(n*(n-1)))

def cp_solve(problem,name): import cvxpy as cp opts = "eps":1e-7,"max_iters":50000 if SOLVER=="SCS" else {} problem.solve(solver=SOLVER,verbose=False,**opts) DATA["solvers"].append("name":name,"solver":SOLVER, "status":problem.status,"value":None if problem.value is None else float(problem.value), "iterations":problem.solver_stats.num_iters, "solve_time":problem.solver_stats.solve_time) need(problem.status in ("optimal","optimal_inaccurate"),"solver "+name) return float(problem.value)

def partial_output(A,outdim,indim): return sum((A[a*indim:(a+1)*indim,a*indim:(a+1)*indim] for a in range(outdim)))

def repaired_decoder(R): vals,V = np.linalg.eigh(herm(R)) P = (V*np.maximum(vals,0))@V.conj().T b = len(R)//2 M = partial_output(P,2,b) vals,V = np.linalg.eigh(herm(M)) if vals.min()<=1e-12: P += 1e-10*np.eye(len(P)) M = partial_output(P,2,b) vals,V = np.linalg.eigh(herm(M)) G = (V*(1/np.sqrt(vals)))@V.conj().T R = kron(I,G)@P@kron(I,G) return herm(R)

def apply_decoder(R,N): b = len(R)//2 return (i,j):np.array([[np.trace( R[a*b:(a+1)*b,z*b:(z+1)*b]@N[i,j].T) for z in range(2)] for a in range(2)]) for i,j,E in units()

Nearby in this section