def test_pauli_decomp_singlet(self, qtype): p = qu.singlet(qtype=qtype) names_cffs = qu.pauli_decomp(p, mode='cp') assert_allclose(names_cffs['II'], 0.25) assert_allclose(names_cffs['ZZ'], -0.25) assert_allclose(names_cffs['YY'], -0.25) assert_allclose(names_cffs['ZZ'], -0.25) for name in itertools.permutations('IXYZ', 2): assert_allclose(names_cffs["".join(name)], 0.0)
class TestDecomp: @pytest.mark.parametrize("qtype", ['ket', 'dop']) def test_pauli_decomp_singlet(self, qtype): p = qu.singlet(qtype=qtype) names_cffs = qu.pauli_decomp(p, mode='cp') assert_allclose(names_cffs['II'], 0.25) assert_allclose(names_cffs['ZZ'], -0.25) assert_allclose(names_cffs['YY'], -0.25) assert_allclose(names_cffs['ZZ'], -0.25) for name in itertools.permutations('IXYZ', 2): assert_allclose(names_cffs["".join(name)], 0.0) def test_pauli_reconstruct(self): p1 = qu.rand_rho(4) names_cffs = qu.pauli_decomp(p1, mode='c') pr = sum( qu.kron(*(qu.pauli(s) for s in name)) * names_cffs["".join(name)] for name in itertools.product('IXYZ', repeat=2)) assert_allclose(pr, p1) @pytest.mark.parametrize("state, out", [(qu.up() & qu.down(), { 0: 0.5, 1: 0.5, 2: 0, 3: 0 }), (qu.down() & qu.down(), { 0: 0, 1: 0, 2: 0.5, 3: 0.5 }), (qu.singlet() & qu.singlet(), { '00': 1.0, '23': 0.0 })]) def test_bell_decomp(self, state, out): names_cffs = qu.bell_decomp(state, mode='c') for key in out: assert_allclose(names_cffs[str(key)], out[key])
def test_ham_heis_2(self): h = qu.ham_heis(2, cyclic=False) evals = qu.eigvalsh(h) assert_allclose(evals, [-0.75, 0.25, 0.25, 0.25]) gs = qu.groundstate(h) assert_allclose(qu.expec(gs, qu.singlet()), 1.)
def test_negative_expec(self, qtype, sparse, s): a = qu.singlet(qtype=qtype) b = qu.pauli(s, sparse=sparse) & qu.pauli(s, sparse=sparse) assert_allclose(qu.expec(a, b), -1)
def test_interleaving(self): p = qu.permute(qu.singlet() & qu.singlet(), [2, 2, 2, 2], [0, 2, 1, 3]) assert qu.logneg(p, [2] * 4, sysa=[0, 3]) > 2 - 1e-13
def test_mutinf_interleave_pure(self): p = qu.singlet() & qu.singlet() ixy = qu.mutual_information(p, [2] * 4, sysa=(0, 2)) assert_allclose(ixy, 4)
def test_bell_state_singlet(self): p = singlet(qtype="dop", sparse=True) assert_allclose(expec(p, p), 1.0) pa = ptr(p, [2, 2], 0) assert_allclose(expec(pa, pa), 0.5)
def test_interleaving(self): p = permute(singlet() & singlet(), [2, 2, 2, 2], [0, 2, 1, 3]) assert logneg(p, [2] * 4, sysa=[0, 3]) > 2 - 1e-13
def test_mutinf_interleave(self): p = dop(singlet() & singlet()) ixy = mutual_information(p, [2] * 4, sysa=(0, 2)) assert_allclose(ixy, 4)
def test_ham_heis_2(self): h = ham_heis(2, cyclic=False) evals = eigvals(h) assert_allclose(evals, [-0.75, 0.25, 0.25, 0.25]) gs = groundstate(h) assert_allclose(expec(gs, singlet()), 1.)