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

Computational supplement

Computational supplement · lines 1852–1949

Back to manuscript

def stream_ops(e,m): """Kraus maps for A/B/C on actual occupied rails, in arrival order.""" branches = [(np.eye(2**e,dtype=complex),0,None,[])] for pos in range(e): nxt = [] for T,k,last,rec in branches: rem = e-pos n = k+rem if k<m: nxt.append((T,k+1,last,rec)) continue if m==1: T = embed(CX,(0,k),n)@T T = embed(H,(k,),n)@T elif m==2: T = embed(CX,(0,k),n)@T T = embed(CZ,(1,k),n)@T T = embed(H,(k,),n)@T A = T.reshape(2**k,2,2**(rem-1),2**e) for z in range(2): P = A[:,z,:,:].reshape(2**(k+rem-1),2**e) if m: G = Z if m==1 else X if z: P = embed(G,(0,),k+rem-1)@P nxt.append((P,k,z,rec+[["incoming",pos,z]])) branches = nxt out = [] for T,k,last,rec in branches: if k==2: T = kron(I,H)@CX@T for z in range(2): P = T.reshape(2,2,2**e)[:,z,:] if z: P = Z@P out.append((P,rec+[["final_memory",z]])) elif k==1: out.append((T,rec)) elif last is None: for z in range(2): out.append((I[:,z:z+1]@T/np.sqrt(2),rec+[["coin",z]])) else: out.append((I[:,last:last+1]@T,rec)) return out

def stream_decode(M,dk,m): out = np.zeros((2,2),complex) for lab,B in blocks(M,dk): for K,rec in stream_ops(int(round(np.log2(len(B)))),m): out += K@[email protected]().T return out

def stream_ledger(lab,m,h,rec): live,held,peak,events = 0,0,0,[] for j,S in enumerate(lab): live += h+1 peak = max(peak,live) events.append(["arrival",j,live]) live -= h if not S: live -= 1 events.append(["consume_vacuum_dummy",j,live]) elif held<m: held += 1 events.append(["retain_incoming",j,live]) else: events.append(["readout_incoming_and_feedback",j,live]) live -= 1 if held==2: live -= 1 held = 1 events.append(["final_memory_readout_feedback",len(lab),live]) if held: live -= 1 events.append(["return",len(lab),live]) else: live += 1 peak = max(peak,live) events.append(["prepare_and_return",len(lab),live]) live -= 1 need(live==0 and peak<=h+1+m,"stream occupancy") return "labels":lab,"m":m,"outcomes":rec,"events":events,"peak":peak

def history_unitary(lab,K,U): B,e = np.eye(2**K,dtype=complex),0 for j,S in enumerate(lab,1): n = K-e if S: need(tuple(S)==tuple(range(n,n-len(S),-1)), "complete collection has wrong interval") G = U.get((j,n),np.eye(2**n,dtype=complex)) if n: B = embed(G,range(e,K),K)@B e += len(S) need(e==K,"incomplete inverse history") return B

Nearby in this section