Manuscript En02-E@2 · En02-E-v2.tex · section · c2769986
Unexecuted reproducibility supplement
Unexecuted reproducibility supplement · lines 2227–2288
def independent_distance(N,name): import cvxpy as cp channel_check(N,name+"_input",STOL) J = choi(N)-choi((i,j):E for i,j,E in units()) accept(name+"_Hermitian_difference",equalities="skew":J-J.conj().T) W = cp.Variable((4,4),hermitian=True) rho = cp.Variable((2,2),hermitian=True) upper = cp.kron(I,rho)-W primal = cp.Problem(cp.Maximize(cp.real(cp.trace(J@W))), [cp_psd(W),cp_psd(rho),cp.trace(rho)==1,cp_psd(upper)]) lo = solve_archived(primal,name+"_primal", "W":W,"rho":rho,"upper_slack":upper) accept(name+"_primal_feasibility", "W":W.value,"rho":rho.value,"upper_slack":upper.value, "trace_rho":np.array(np.trace(rho.value)-1)) D = cp.Variable((4,4),hermitian=True) lam = cp.Variable() slack = lam*I-ptout(D,2,2) dual = cp.Problem(cp.Minimize(lam), [cp_psd(D),cp_psd(D-J),cp_psd(slack)]) hi = solve_archived(dual,name+"_dual", "Z":D,"lambda":lam,"upper_slack":slack) accept(name+"_dual_feasibility", "Z":D.value,"Z_minus_J":D.value-J,"upper_slack":slack.value) need(abs(hi-lo)<=GAP,"distance objective gap "+name) save(name+"_difference",J=J) result = "primal_estimate":lo,"dual_estimate":hi, "gap":hi-lo,"certified":False jwrite(name+"_distance_result",result) return result
def recovery_sdp(N,name,target): import cvxpy as cp channel_check(N,name+"_noise",STOL) b = len(N[0,0]) R = cp.Variable((2*b,2*b),hermitian=True) output = {} for i,j,E in units(): output[i,j] = cp.bmat([[cp.reshape(cp.trace( R[a*b:(a+1)*b,z*b:(z+1)*b]@N[i,j].T),(1,1),order="C") for z in range(2)] for a in range(2)]) J = sum(cp.kron(output[i,j],E) for i,j,E in units()) \ -choi((i,j):E for i,j,E in units()) D = cp.Variable((4,4),hermitian=True) lam = cp.Variable() upper = lam*I-ptout(D,2,2) problem = cp.Problem(cp.Minimize(lam),[ cp_psd(R),ptout(R,2,b)==np.eye(b), cp_psd(D),cp_psd(D-J),cp_psd(upper)]) value = solve_archived(problem,name+"_recovery", "R":R,"Z":D,"lambda":lam,"difference_Choi":J,"upper_slack":upper) raw = np.asarray(R.value).copy() rawdecoded = decoder_apply(raw,N) Jnum = choi(rawdecoded)-choi((i,j):E for i,j,E in units()) accept(name+"_raw_recovery_feasibility", "R":raw,"Z":D.value,"Z_minus_J":D.value-Jnum, "upper_slack":float(lam.value)*I-ptout(D.value,2,2), "decoder_TP":ptout(raw,2,b)-np.eye(b), "affine_Choi":J.value-Jnum) channel_check(rawdecoded,name+"_raw_decoded",STOL)
Nearby in this section
- section: Unexecuted reproducibility supplement
- section: Unexecuted reproducibility supplement
- section: Unexecuted reproducibility supplement
- section: Unexecuted reproducibility supplement
- section: Unexecuted reproducibility supplement
- section: Unexecuted reproducibility supplement
- section: Unexecuted reproducibility supplement
- section: Unexecuted reproducibility supplement