def test_rand_mps_mixed_canonize(self): n = 10 rmps = MPS_rand_state(n, 10, site_tag_id="foo{}", tags='bar', normalize=True) # move to the center rmps.canonize(orthogonality_center=4) assert rmps.count_canonized() == (4, 5) assert_allclose(rmps.H @ rmps, 1) p_tn = (rmps.H & rmps) ^ slice(0, 4) ^ slice(..., 4, -1) assert_allclose(p_tn['foo3'].data, np.eye(10), atol=1e-13) assert_allclose(p_tn['foo5'].data, np.eye(10), atol=1e-13) # try shifting to the right rmps.shift_orthogonality_center(current=4, new=8) assert_allclose(rmps.H @ rmps, 1) p_tn = (rmps.H & rmps) ^ slice(0, 8) ^ slice(..., 8, -1) assert_allclose(p_tn['foo7'].data, np.eye(4), atol=1e-13) assert_allclose(p_tn['foo9'].data, np.eye(2), atol=1e-13) # try shifting to the left rmps.shift_orthogonality_center(current=8, new=6) assert_allclose(rmps.H @ rmps, 1) p_tn = (rmps.H & rmps) ^ slice(0, 6) ^ slice(..., 6, -1) assert_allclose(p_tn['foo5'].data, np.eye(10), atol=1e-13) assert_allclose(p_tn['foo7'].data, np.eye(8), atol=1e-13)
def test_canonize_and_calc_current_orthog_center(self, dtype): p = MPS_rand_state(20, 3, dtype=dtype) co = p.calc_current_orthog_center() assert co == (0, 19) p.canonize((5, 15), co) co = p.calc_current_orthog_center() assert co == (5, 15) p.canonize((8, 11), co) co = p.calc_current_orthog_center() assert co == (8, 11) assert p.dtype == dtype
def test_entropy_matches_dense(self, method): p = MPS_rand_state(5, 32) p_dense = p.to_dense() real_svn = qu.entropy(p_dense.ptr([2] * 5, [0, 1, 2])) svn = (p ^ ...).entropy(('k0', 'k1', 'k2')) assert_allclose(real_svn, svn) # use tensor to left of bipartition p.canonize(2) t1 = p['I2'] left_inds = set(t1.inds) - set(p['I3'].inds) svn = (t1).entropy(left_inds, method=method) assert_allclose(real_svn, svn) # use tensor to right of bipartition p.canonize(3) t2 = p['I3'] left_inds = set(t2.inds) & set(p['I2'].inds) svn = (t2).entropy(left_inds, method=method) assert_allclose(real_svn, svn)