def term_func(Uk): UkH = Uk.conj().T res = 0. for sig in sigs: red = reduce(np.dot, [Uf, sig, UfH, Uk, sig, UkH]) res += np.trace(red) return res
def fidSingleTxFull(rho_0, rho_f, T, N, Us): U_k_ts = [np.array(U_k(T), np.complex128) for U_k in Us] mats = [ np.dot(np.dot(rho_f.conj().T, U_k_t), np.dot(rho_0, U_k_t.conj().T)) for U_k_t in U_k_ts ] terms = [np.trace(mat) for mat in mats] return (1. / N) * sum(terms)
def makeTerm(k): # U_k = Us_mk[k] # Us_nm_k = U_k[m:(n-1)] # # Us_nm_k.reverse() # Us_m1_k = U_k[0:(m-1)] # # Us_m1_k.reverse() # # U_nm_k = reduce(np.dot, reversed(Us_nm_k),identity) # U_nm_kH = U_nm_k.conj().T # U_m1_k = reduce(np.dot, reversed(Us_m1_k),identity) # U_m1_kH = U_m1_k.conj().T # # lambda_mk = reduce(np.dot, [U_nm_kH, rho_f, U_nm_k]) # lambda_H = lambda_mk.conj().T # rho_mk = reduce(np.dot, [U_m1_k, rho_0, U_m1_kH]) U_k = Us_mk[k] lambda_mk = makeLambda_mk(U_k, m, rho_f) lambda_H = lambda_mk.conj().T rho_mk = makeRho_mk(U_k, m, rho_0) term = np.trace(np.dot(lambda_H, comm(sigmaX, rho_mk))) return term
def fidSingleTxDirect(rho_f, rho, T): return np.trace(np.dot(rho_f.conj().T, rho(T)))
def fidSingleTxDirect(rho_f, rho, T): return np.trace(rho_f.H * rho(T))
def fidelity(self, rho_f): return np.trace(rho_f.H * self.at(self.pulse_end_time))