Пример #1
0
def test_compress_obc():
    dps = [1,3,2,2]
    mps1 = dMPX.rand(dps, D=7, bc="obc")

    print [m.shape for m in mps1]
    
    mps_diff1 = dMPX.add(MPX.mul(-1,mps1), mps1)
    assert not(np.isnan(MPX.norm(mps1))), MPX.norm(mps1)
    assert MPX.norm(mps_diff1)<1.0e-12, MPX.norm(mps_diff1)

    # check dimension preserving
    mps11 = dMPX.add(mps1,mps1)
    mps11,dwt = MPX.compress(mps11,0,preserve_dim="true")
    mps11_,dwt = MPX.compress(mps11,0,preserve_dim="false")
    print [m.shape for m in mps11]
    print [m.shape for m in mps11_]
    print [m.shape for m in mps1]
    
    print MPX.norm(mps11)
    assert(dwt == 0), dwt
    
    mps_diff = dMPX.add(MPX.mul(-2,mps1),mps11)
    print abs(MPX.norm(mps_diff)/MPX.norm(mps11))<1.0e-7, MPX.norm(mps_diff)

    mps_diff = dMPX.add(MPX.mul(-2,mps1),mps11_)
    print abs(MPX.norm(mps_diff)/MPX.norm(mps11_))<1.0e-7, MPX.norm(mps_diff)
Пример #2
0
def test_add():
    dps = (2,2,2,2)
    #np.random.seed(417)
    mps_obc = dMPX.rand(dps, D=2, bc="obc")
    mps_obc2 = dMPX.rand(dps, D=2, bc="obc")
    mps_pbc = dMPX.rand(dps, D=2, bc="pbc")
    mps_pbc2 = dMPX.rand(dps, D=2, bc="pbc")
    
    assert np.allclose(np.linalg.norm(MPX.asfull(mps_obc)+MPX.asfull(mps_obc2)),
                       MPX.norm(dMPX.add(mps_obc,mps_obc2)))
    assert np.allclose(np.linalg.norm(MPX.asfull(mps_pbc)+MPX.asfull(mps_pbc2)),
                       MPX.norm(dMPX.add(mps_pbc,mps_pbc2)))
    assert np.allclose(np.linalg.norm(MPX.asfull(mps_obc)+MPX.asfull(mps_pbc2)),
                       MPX.norm(dMPX.add(mps_obc,mps_pbc2)))
Пример #3
0
def test_product_state():
    dp = (4, 5, 3, 2)
    occ_idx = (0, 1, 2, 1)
    mps1 = dMPX.product_state(dp, occ_idx, D=4, bc="obc")
    mps2 = dMPX.add(mps1, mps1)
    mps3 = dMPX.add(mps2, mps1)
    smps1 = sMPX.from_dense(mps1)
    smps3 = sMPX.from_dense(mps3)

    for i, m in enumerate(smps1):
        print i, m.coords.shape, m.shape, len(m.data), m.nnz
        assert m.nnz == 1
    for i, m in enumerate(smps3):
        print i, m.coords.shape, m.shape, len(m.data), m.nnz
        assert m.nnz == 3
Пример #4
0
def test_dotcompress():
    dps = [1,2,3,4,2]
    dpo = [(d,d) for d in dps]
    mps = dMPX.rand(dps)
    mpo = dMPX.rand(dpo)
 
    mps2 = MPX.dot(mpo,mps)
    mpsc, errc = MPX.compress(mps2,4)

    mpsdc, errdc = MPX.dot_compress(mpo,mps,4)

    print errc, errdc, errdc-errc

    diff_mps = dMPX.add(MPX.mul(-1,mpsc),mpsdc)
    assert(MPX.norm(diff_mps) < 1.0e-8), MPX.norm(diff_mps)
Пример #5
0
def test_compress_pbc():
    np.random.seed(417)
    
    dps = [1,3,2,2]
    mps_obc = dMPX.rand(dps, D=7, bc="obc")
    print "full dim", MPX.obc_dim(dps)
    mps1 = dMPX.zeros(dps, D=7, bc="pbc")
    dMPX.overwrite(mps_obc, out=mps1)
    print MPX.norm(mps1), MPX.norm(mps_obc)
    
    mps2 = dMPX.add(mps1,mps1)
    mps11_0,dwt = MPX.compress(mps2,0,preserve_dim="true")
    mps11_1,dwt = MPX.compress(mps2,1,preserve_dim="true")
    mps11_2,dwt = MPX.compress(mps2,2,preserve_dim="true")
    mps11_2_,dwt = MPX.compress(mps2,2,preserve_dim="false")
    mps11_4,dwt = MPX.compress(mps2,4,preserve_dim="true")
    mps11_8,dwt = MPX.compress(mps2,8,preserve_dim="false")

    mps_diff0 = dMPX.add(MPX.mul(-1,mps11_0),mps2)
    mps_diff1 = dMPX.add(MPX.mul(-1,mps11_1),mps2)
    mps_diff2 = dMPX.add(MPX.mul(-1,mps11_2),mps2)
    mps_diff2_ = dMPX.add(MPX.mul(-1,mps11_2_),mps2)
    mps_diff4 = dMPX.add(MPX.mul(-1,mps11_4),mps2)
    mps_diff8 = dMPX.add(MPX.mul(-1,mps11_8),mps2)

    mps4o,dwt = MPX.compress(dMPX.add(mps1,mps1), 4)
    mps_diff4o = dMPX.add(MPX.mul(-1,mps4o),mps2)
    
    print "D full", abs(MPX.norm(mps_diff0))
    print "D=1", abs(MPX.norm(mps_diff1))
    print "D=2", abs(MPX.norm(mps_diff2))
    print "D=2 (trunc)", abs(MPX.norm(mps_diff2_))
    print "D=4", abs(MPX.norm(mps_diff4))
    print "D=4 obc", abs(MPX.norm(mps_diff4o))
    print "D=8", abs(MPX.norm(mps_diff8))

    assert(abs(MPX.norm(mps_diff0))<1.0e-7)
Пример #6
0
def test_compress():
    #np.random.seed(417)
    dps = [2] * 10
    mps0 = dMPX.rand(dps, D=7, bc="obc")

    smps1 = sMPX.from_dense(mps0)
    print "Check sparse", [m.__class__.__name__ for m in smps1]
    # check dimension preserving
    mps00 = dMPX.add(mps0, mps0)
    smps11 = sMPX.add(smps1, smps1)

    print MPX.norm(mps00), MPX.norm(smps11)

    print "Initial dimensions", [m.shape for m in mps00]
    # compress
    for D in (2, 3, 7):
        mps00c = MPX.compress(mps00, D, preserve_dim="false")
        print "After DENSE compress", D, MPX.norm(mps00c)
        #print "Compressed dimensions", [m.shape for m in mps00c]

    print "IN SPARSE part"
    for D in (2, 3, 7):
        smps11c = MPX.compress(smps11, D, preserve_dim="false")
        print "After SPARSE compress", D, MPX.norm(smps11c)