def test_apply(self): psi_abc = MPS_rand_state(20, bond_dim=7) X = PTPTLazyMPS(psi_abc, sysa=range(5, 10), sysb=range(12, 16)) v0 = EEMPS_rand_state(X.sysa, X.sysb, nsites=X.TN.nsites, bond_dim=7) vf = X.apply(v0) assert vf.site_ind_id == 'k{}' assert vf.site_tag_id == 'I{}' v0d, Xd, vfd = map(lambda x: x.to_dense(), (v0, X, vf)) assert_allclose(vfd, Xd @ v0d)
def test_realistic(self): ham = MPO_ham_heis(20) dmrg = DMRG2(ham, bond_dims=[4, 8]) dmrg.solve() sysa, sysb = range(3, 9), range(12, 17) rho_ab_pt = PTPTLazyMPS(dmrg.state, sysa, sysb) xf = approx_spectral_function(rho_ab_pt, lambda x: x, beta_tol=1e-6, tol=0.05, verbosity=2, max_bond=20) assert_allclose(1, xf, rtol=0.5, atol=0.1)
def test_init(self, sysa, sysb): p = MPS_rand_state(12, 7) pX = PTPTLazyMPS(p, sysa=sysa, sysb=sysb) assert len(pX.TN.tensors) == (2 * len(sysa) + 2 * len(sysb) + int(max(sysa) + 1 != min(sysb))) pt = pX.TN.reindex({ pX.upper_ind_id.format(i): pX.lower_ind_id.format(i) for i in (*pX.sysa, *pX.sysb) }) assert_allclose(pt.contract_tags(...), 1.0)
def test_realistic_ent(self): n = 12 sysa, sysb = range(3, 6), range(6, 8) ham = MPO_ham_heis(n) dmrg = DMRG2(ham, bond_dims=[2, 4]) dmrg.solve() rho_ab_pt = PTPTLazyMPS(dmrg.state, sysa, sysb) psi0 = dmrg.state.to_dense() lne = logneg_subsys(psi0, [2] * n, sysa=sysa, sysb=sysb) lnx = log2( approx_spectral_function(rho_ab_pt, abs, tol=0.1, verbosity=2)) assert_allclose(lne, lnx, rtol=0.5, atol=0.1)
def test_construct_tridiag_works(self, sysa, sysb): p = MPS_rand_state(12, 7) pX = PTPTLazyMPS(p, sysa=sysa, sysb=sysb) for _ in construct_lanczos_tridiag_PTPTLazyMPS(pX, 5): pass