예제 #1
0
    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)
예제 #2
0
 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)
예제 #3
0
    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)
예제 #4
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)
예제 #5
0
    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