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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)