def qmid(rho, dim_A = 2, dim_B = 2) : rho_A = density_matrix.partial_trace(rho, 2, dim_A, dim_B) rho_B = density_matrix.partial_trace(rho, 1, dim_A, dim_B) val_A, vec_A = np.linalg.eig(rho_A) val_B, vec_B = np.linalg.eig(rho_B) pi = list() for v_A in vec_A : for v_B in vec_B: pi.append(np.kron(proj(v_A.T), proj(v_B.T))) _rho = np.zeros_like(rho) for p in pi : _rho += p * rho * p return density_matrix.I(rho, dim_A, dim_B) - density_matrix.I(_rho, dim_A, dim_B)
def T(rho_AB, theta, phi, dim_A = 2, dim_B = 2, qubit_subsys = 2) : _basis = [None for i in range(2)] _x = np.cos (theta) _y = np.sin (theta) _basis[0] = np.mat([[_x], [np.exp(1j * phi) * _y]]) _basis[1] = np.mat([[_y], [-np.exp(1j * phi) * _x]]) t = 0 for i in range(len(_basis)): if (qubit_subsys == 1) : _op = np.kron(projector(_basis[i]), np.eye(dim_B)) else: _op = np.kron(np.eye(dim_A), projector(_basis[i])) _rho = _op * rho_AB # _rho = _op * rho_AB * _op p = np.trace(_rho).real if (p != 0) : _rho_reduced = density_matrix.partial_trace(_rho, qubit_subsys , dim_A = dim_A, dim_B = dim_B) / p t += p * density_matrix.S(_rho_reduced) return t
print_v ("Nodes : ", nodes, " Lambda = ", lamda) rho_CP = walk.do(nodes, E) if (options.qd_needed) : _qd = discord.T_min(rho_CP, dim_A, dim_B, qubit_subsys = 1) - dm.S_cond(rho_CP, (2, 1), dim_A, dim_B).real output_list_dict['QD'].append(_qd) print_v ("\tQD = ", _qd) if (options.qmid_needed) : _qm = qmid.qmid(rho_CP, dim_A, dim_B) output_list_dict['QMID'].append(_qm) print_v ("\tQMID = ", _qm) if (options.verbose > 1) : rho_P = dm.partial_trace(rho_CP, subsys = 1, dim_B = len(pos_space), dim_A = len(coin_space)) print_v ("\tProbabilities : ", np.diag(rho_P), ". Sum = ", np.trace(rho_P)) if (options.graphical) : if options.node_range is not None : _x = nodes_space _label = 'Nodes' _title = 'Walk on line with lamda = ' + str(options.lamda) elif options.lamda_range is not None : _x = lamda_space _label = 'Noise Parameter' _title = 'Walk on line with nodes = '+ str(options.nodes) for k in output_list_dict.keys() : _y = output_list_dict[k] plt.plot(_x, _y, label = k)