Exemple #1
0
 def test_rand_herm_sparse(self):
     a = rand_herm(3, sparse=True, density=0.3)
     assert a.shape == (3, 3)
     assert type(a) == sp.csr_matrix
     assert isherm(a)
     evals = np.linalg.eigvals(a.A)
     assert_allclose(evals.imag, [0, 0, 0], atol=1e-14)
Exemple #2
0
 def test_rand_herm_sparse(self, dtype):
     a = qu.rand_herm(3, sparse=True, density=0.3, dtype=dtype)
     assert a.shape == (3, 3)
     assert type(a) == sp.csr_matrix
     assert qu.isherm(a)
     assert a.dtype == dtype
     evals = qu.eigvalsh(a.A)
     assert_allclose(evals.imag, [0, 0, 0], atol=1e-14)
Exemple #3
0
    def test_partial_tranpose(self):
        p = MPS_rand_state(8, 10)
        r = p.ptr([2, 3, 4, 5, 6, 7])
        rd = r.to_dense()

        assert qu.isherm(rd)
        assert qu.ispos(rd)

        rpt = r.partial_transpose([0, 1, 2])
        rptd = rpt.to_dense()

        upper_inds = tuple('b{}'.format(i) for i in range(6))
        lower_inds = tuple('k{}'.format(i) for i in range(6))
        outer_inds = rpt.outer_inds()
        assert all(i in outer_inds for i in upper_inds + lower_inds)

        assert qu.isherm(rptd)
        assert not qu.ispos(rptd)
Exemple #4
0
    def test_entanglement(self):
        rho = qu.rand_seperable([2, 3, 2], 10)
        assert_allclose(qu.tr(rho), 1.0)
        assert qu.isherm(rho)

        assert qu.logneg(rho, [2, 6]) < 1e-12
        assert qu.logneg(rho, [6, 2]) < 1e-12

        rho_a = qu.ptr(rho, [2, 3, 2], 1)

        el = qu.eigvalsh(rho_a)
        assert np.all(el < 1 - 1e-12)
        assert np.all(el > 1e-12)
Exemple #5
0
    def test_entanglement(self):
        rho = rand_seperable([2, 3, 2], 10)
        assert_almost_equal(tr(rho), 1.0)
        assert isherm(rho)

        assert logneg(rho, [2, 6]) < 1e-12
        assert logneg(rho, [6, 2]) < 1e-12

        rho_a = ptr(rho, [2, 3, 2], 1)

        el = eigvals(rho_a)
        assert np.all(el < 1 - 1e-12)
        assert np.all(el > 1e-12)
Exemple #6
0
 def test_partial_trace(self, rescale):
     n = 10
     p = MPS_rand_state(n, 7)
     r = p.ptr(keep=[2, 3, 4, 6, 8],
               upper_ind_id='u{}',
               rescale_sites=rescale)
     rd = r.to_dense()
     if rescale:
         assert r.lower_inds == ('u0', 'u1', 'u2', 'u3', 'u4')
         assert r.upper_inds == ('k0', 'k1', 'k2', 'k3', 'k4')
     else:
         assert r.lower_inds == ('u2', 'u3', 'u4', 'u6', 'u8')
         assert r.upper_inds == ('k2', 'k3', 'k4', 'k6', 'k8')
     assert_allclose(r.trace(), 1.0)
     assert isherm(rd)
     pd = p.to_dense()
     rdd = pd.ptr([2] * n, keep=[2, 3, 4, 6, 8])
     assert_allclose(rd, rdd)
Exemple #7
0
 def test_partial_trace(self, rescale, keep):
     n = 10
     p = MPS_rand_state(n, 7)
     r = p.ptr(keep=keep, upper_ind_id='u{}', rescale_sites=rescale)
     rd = r.to_dense()
     if isinstance(keep, slice):
         keep = p.slice2sites(keep)
     else:
         if rescale:
             assert r.lower_inds == ('u0', 'u1', 'u2', 'u3', 'u4')
             assert r.upper_inds == ('k0', 'k1', 'k2', 'k3', 'k4')
         else:
             assert r.lower_inds == ('u2', 'u3', 'u4', 'u6', 'u8')
             assert r.upper_inds == ('k2', 'k3', 'k4', 'k6', 'k8')
     assert_allclose(r.trace(), 1.0)
     assert qu.isherm(rd)
     pd = p.to_dense()
     rdd = pd.ptr([2] * n, keep=keep)
     assert_allclose(rd, rdd)
Exemple #8
0
 def test_partial_trace_sparse_basic(self):
     a = qu.rand_rho(4)
     b = qu.partial_trace(a, [2, 2], 0)
     assert type(b) == qu.qarray
     assert qu.isherm(b)
     assert_allclose(qu.tr(b), 1.0)
Exemple #9
0
 def test_partial_trace_basic(self):
     a = qu.rand_rho(2**2)
     b = qu.partial_trace(a, [2, 2], 0)
     assert isinstance(b, qu.qarray)
     assert qu.isherm(b)
     assert_allclose(qu.tr(b), 1.0)
Exemple #10
0
 def test_partial_trace_sparse_basic(self):
     a = rand_rho(4)
     b = partial_trace(a, [2, 2], 0)
     assert type(b) == np.matrix
     assert isherm(b)
     assert_allclose(tr(b), 1.0)
Exemple #11
0
 def test_partial_trace_basic(self):
     a = rand_rho(2**2)
     b = partial_trace(a, [2, 2], 0)
     assert isinstance(b, np.matrix)
     assert isherm(b)
     assert_allclose(tr(b), 1.0)