def test_CheckMulType(): "Qobj multiplication type" # ket-bra and bra-ket multiplication psi = basis(5) dm = psi * psi.dag() assert_(dm.isoper) assert_(dm.isherm) nrm = psi.dag() * psi assert_equal(np.prod(nrm.shape), 1) assert_((abs(nrm) == 1)[0, 0]) # operator-operator multiplication H1 = rand_herm(3) H2 = rand_herm(3) out = H1 * H2 assert_(out.isoper) out = H1 * H1 assert_(out.isoper) assert_(out.isherm) out = H2 * H2 assert_(out.isoper) assert_(out.isherm) U = rand_unitary(5) out = U.dag() * U assert_(out.isoper) assert_(out.isherm) N = num(5) out = N * N assert_(out.isoper) assert_(out.isherm) # operator-ket and bra-operator multiplication op = sigmax() ket1 = basis(2) ket2 = op * ket1 assert_(ket2.isket) bra1 = basis(2).dag() bra2 = bra1 * op assert_(bra2.isbra) assert_(bra2.dag() == ket2) # superoperator-operket and operbra-superoperator multiplication sop = to_super(sigmax()) opket1 = operator_to_vector(fock_dm(2)) opket2 = sop * opket1 assert(opket2.isoperket) opbra1 = operator_to_vector(fock_dm(2)).dag() opbra2 = opbra1 * sop assert(opbra2.isoperbra) assert_(opbra2.dag() == opket2)
def test_CheckMulType(): "Qobj multiplication type" # ket-bra and bra-ket multiplication psi = basis(5) dm = psi * psi.dag() assert dm.isoper assert dm.isherm nrm = psi.dag() * psi assert np.prod(nrm.shape) == 1 assert abs(nrm)[0, 0] == 1 # operator-operator multiplication H1 = rand_herm(3) H2 = rand_herm(3) out = H1 * H2 assert out.isoper out = H1 * H1 assert out.isoper assert out.isherm out = H2 * H2 assert out.isoper assert out.isherm U = rand_unitary(5) out = U.dag() * U assert out.isoper assert out.isherm N = num(5) out = N * N assert out.isoper assert out.isherm # operator-ket and bra-operator multiplication op = sigmax() ket1 = basis(2) ket2 = op * ket1 assert ket2.isket bra1 = basis(2).dag() bra2 = bra1 * op assert bra2.isbra assert bra2.dag() == ket2 # superoperator-operket and operbra-superoperator multiplication sop = to_super(sigmax()) opket1 = operator_to_vector(fock_dm(2)) opket2 = sop * opket1 assert opket2.isoperket opbra1 = operator_to_vector(fock_dm(2)).dag() opbra2 = opbra1 * sop assert opbra2.isoperbra assert opbra2.dag() == opket2
def testOperatorDensityMatrix(self): """ expect: operator and density matrix """ N = 10 op_N = num(N) op_a = destroy(N) for n in range(N): e = expect(op_N, fock_dm(N, n)) assert_(e == n) assert_(type(e) == float) e = expect(op_a, fock_dm(N, n)) assert_(e == 0) assert_(type(e) == complex)
def testOperatorKet(self): """ expect: operator and ket """ N = 10 op_N = num(N) op_a = destroy(N) for n in range(N): e = expect(op_N, fock(N, n)) assert_(e == n) assert_(type(e) == float) e = expect(op_a, fock(N, n)) assert_(e == 0) assert_(type(e) == complex)
def get_noisy_dynamics(self, dims=None, pulses=None, systematic_noise=None): if systematic_noise is None: systematic_noise = Pulse(None, None, label="system") N = len(dims) self.t1 = self._T_to_list(self.t1, N) self.t2 = self._T_to_list(self.t2, N) if len(self.t1) != N or len(self.t2) != N: raise ValueError("Length of t1 or t2 does not match N, " "len(t1)={}, len(t2)={}".format( len(self.t1), len(self.t2))) if self.targets is None: targets = range(N) else: targets = self.targets for qu_ind in targets: t1 = self.t1[qu_ind] t2 = self.t2[qu_ind] if t1 is not None: op = 1 / np.sqrt(t1) * destroy(dims[qu_ind]) systematic_noise.add_lindblad_noise(op, qu_ind, coeff=True) if t2 is not None: # Keep the total dephasing ~ exp(-t/t2) if t1 is not None: if 2 * t1 < t2: raise ValueError("t1={}, t2={} does not fulfill " "2*t1>t2".format(t1, t2)) T2_eff = 1. / (1. / t2 - 1. / 2. / t1) else: T2_eff = t2 op = 1 / np.sqrt(2 * T2_eff) * 2 * num(dims[qu_ind]) systematic_noise.add_lindblad_noise(op, qu_ind, coeff=True) return pulses, systematic_noise
def testOperatorStateList(self): """ expect: operator and state list """ N = 10 op = num(N) res = expect(op, [fock(N, n) for n in range(N)]) assert_(all(res == range(N))) assert_(isinstance(res, np.ndarray) and res.dtype == np.float64) res = expect(op, [fock_dm(N, n) for n in range(N)]) assert_(all(res == range(N))) assert_(isinstance(res, np.ndarray) and res.dtype == np.float64) op = destroy(N) res = expect(op, [fock(N, n) for n in range(N)]) assert_(all(res == np.zeros(N))) assert_(isinstance(res, np.ndarray) and res.dtype == np.complex128) res = expect(op, [fock_dm(N, n) for n in range(N)]) assert_(all(res == np.zeros(N))) assert_(isinstance(res, np.ndarray) and res.dtype == np.complex128)