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

Computational supplement

Computational supplement · lines 1592–1654

Back to manuscript

def benchdecode(A,dk,odd=False,low=False): lookup = d:i for i,d in enumerate(dk) out = np.zeros((2,2),complex) for count in range(4): for S in it.combinations(range(3),count): ix = [] for b in it.product(range(2),repeat=count): d = [0]*3 for j,z in zip(S,b): d[j] = z+1 ix.append(lookup[tuple(d)]) B = A[np.ix_(ix,ix)] if S==(0,1,2): out += parity(B,-kron(Z,X,Z),X) if low else full_decode(B,odd) elif odd and S==(1,2): out += parity(B,-kron(X,Z),X) elif odd and S==(0,2): out += parity(B,-kron(Y,Y),Z) else: out += dep(B) return out

def benchmark_audit(): U,V = encoder() F3 = embed(CZ,(0,1),3) Vo = kron(F3,np.eye(4))@V check("encoder",V.conj().T@V,I) words = [-kron(Z,X,Z),-kron(X,Y,X),-kron(Y,Z,Y)] oddwords = [-kron(I,X,Z),kron(Y,X,X),-kron(Y,I,Y)] for k,(P,Q) in enumerate(zip((X,Y,Z),words)): check("logical_"+str(k),U.conj().T@kron(I,P,I)@U,Q) check("odd_logical_"+str(k),F3@Q@F3,oddwords[k]) omega = np.block([[ptrace(V[:,a:a+1]@V[:,b:b+1].conj().T, (0,1,2),5) for b in range(2)] for a in range(2)])/2 T = kron(Y,R0,I,R0) smolin = (np.eye(16)+kron(X,X,X,X)+kron(Y,Y,Y,Y)+kron(Z,Z,Z,Z))/16 check("smolin",T@[email protected]().T,smolin) p,qx,qz = .75*.5*(2/3)*.75, .75*.5*(2/3)*.75, .75*.5*(1/3)*.75 r = 1-p-qx-qz for odd,enc in [(False,V),(True,Vo)]: A,dk = benchmark(enc) N = channel(A) check("benchmark_iso_"+str(odd),A.reshape(-1,2).conj()[email protected](-1,2),I) for low in ([False,True] if not odd else [False]): for a,b,E in units(): expected = (p*(E+X@E@X)/2+(1-p)*dep(E)) if low else \ (p*E+qx*(E+X@E@X)/2+qz*(E+Z@E@Z)/2+r*dep(E)) if odd else \ p*E+(1-p)*dep(E) check("bench_channel_ benchdecode(N[a,b],dk,odd,low),expected) v = enc[:,0] later = kron(np.eye(8),CZ)@v for t,target in enumerate((0,1,2,2,1,0)): z = v if t<=3 else later check("turnover_ np.array(entropy(ptrace(np.outer(z,z.conj()),range(t),5))), np.array(float(target))) save("benchmark",U=U,V=V,Vo=Vo,A=A) A,dk = benchmark(V) return channel(A),.75*(1-p)

Nearby in this section