Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
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])
Ejemplo n.º 3
0
 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.)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
 def test_mutinf_interleave(self):
     p = dop(singlet() & singlet())
     ixy = mutual_information(p, [2] * 4, sysa=(0, 2))
     assert_allclose(ixy, 4)
Ejemplo n.º 10
0
 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.)