Esempio n. 1
0
 def test_U11_Z22_flat(self):
     for n in range(-10, 10):
         for sz in range(-n, n):
             sym1 = U11(n, sz)
             sym2 = U11.from_flat(sym1.to_flat())
             assert sym1 == sym2
             sym1 = Z22(n, sz)
             sym2 = Z22.from_flat(sym1.to_flat())
             assert sym1 == sym2
Esempio n. 2
0
    def test_U11_compute_flat(self):
        nblks = 30
        ndim = 5
        sign_array = np.random.randint(0, 2, ndim)
        sign_map = {0: "+", 1: "-"}
        pattern = "".join([sign_map[ix] for ix in sign_array])

        na = np.random.randint(0, 10, nblks * ndim).reshape(nblks, ndim)
        sa = np.random.randint(-5, 5, nblks * ndim).reshape(nblks, ndim)

        U11lsts = [[U11(na[nb, nd], sa[nb, nd]) for nd in range(ndim)]
                   for nb in range(nblks)]
        U11arrs = [[U11lsts[nb][nd].to_flat() for nd in range(ndim)]
                   for nb in range(nblks)]
        U11arrs = np.asarray(U11arrs, dtype=int)
        out = U11._compute(pattern, U11arrs)
        outneg = U11._compute(pattern,
                              U11arrs,
                              offset=("-", U11(1, -1)),
                              neg=True)
        for i in range(nblks):
            outa = U11._compute(pattern, U11lsts[i])
            outb = U11.from_flat(out[i])
            assert outa == outb
            assert -(outa - U11(1, -1)) == U11.from_flat(outneg[i])
Esempio n. 3
0
    def test_U11_compute(self):
        ndim = 10
        sign_array = np.random.randint(0, 2, ndim)
        sign_map = {0: "+", 1: "-"}
        pattern = "".join([sign_map[ix] for ix in sign_array])
        na = np.random.randint(0, 10, ndim)
        sa = np.random.randint(-5, 5, ndim)
        U11arrs = [U11(n, s) for n, s in zip(na, sa)]
        out = U11._compute(pattern, U11arrs)

        outn = 0
        outs = 0
        for p, n, s in zip(sign_array, na, sa):
            if p == 0:
                outn += n
                outs += s
            else:
                outn -= n
                outs -= s
        assert out.n == outn
        assert out.sz == outs
Esempio n. 4
0
 def test_U11_Z22_numerics(self):
     for na in range(-5, 5):
         for sa in range(-na, na):
             syma = U11(na, sa)
             z22a = Z22(na, sa)
             for nb in range(-5, 5):
                 for sb in range(-nb, nb):
                     symb = U11(nb, sb)
                     z22b = Z22(nb, sb)
                     out_add = syma + symb
                     z22_add = z22a + z22b
                     assert out_add.n == (na + nb)
                     assert out_add.sz == (sa + sb)
                     assert z22_add.n == (na + nb) % 2
                     assert z22_add.sz == (sa + sb) % 2
                     out_sub = syma - symb
                     z22_sub = z22a - z22b
                     assert out_sub.n == (na - nb)
                     assert out_sub.sz == (sa - sb)
                     assert z22_sub.n == (na - nb) % 2
                     assert z22_sub.sz == (sa - sb) % 2
Esempio n. 5
0
    def setUp(self):
        bond = BondInfo({U11(0):2, U11(1,1):3, U11(1,-1):4, U11(2):5})
        self.bond = bond
        self.T = rand((bond,)*4, pattern="++--", dq=U11(0))
        self.symmetry = U11
        self.skeleton_test_dq = U11(2)
        self.contract_test_dq = (U11(1,1),U11(1,-1))
        self.svd_dq_iterator = [U11(0), U11(1,1), U11(1,-1),U11(2)]

        self.shift = U11(1,1)
        self.T1 = rand((bond,)*4, pattern="++--", dq=U11(2))
Esempio n. 6
0
    def setUp(self):
        self.t = 2
        self.U = 4
        self.tau = 0.01
        self.mu = 0.2
        self.symmetry = U11
        states = np.ones([1, 1]) * .5 ** .5
        blocks = [SubTensor(reduced=states, q_labels=(U11(0), U11(1, 1))),  # 0+
                  SubTensor(reduced=states, q_labels=(U11(1, 1), U11(0)))]  # +0, eigenstate of hopping
        self.hop_psi = SparseFermionTensor(blocks=blocks, pattern="++")

        states = np.ones([1, 1]) * .5
        blocks = [SubTensor(reduced=states, q_labels=(U11(2), U11(0))),
                  SubTensor(reduced=states, q_labels=(U11(0), U11(2))),
                  SubTensor(reduced=-states, q_labels=(U11(1, 1), U11(1, -1))),
                  SubTensor(reduced=states, q_labels=(U11(1, -1), U11(1, 1)))]
        self.hop_exp_psi = SparseFermionTensor(blocks=blocks, pattern="++")

        psi0 = SparseFermionTensor(blocks=[SubTensor(reduced=np.ones([1]), q_labels=(U11(0,0),))], pattern="+")
        psi1 = SparseFermionTensor(blocks=[SubTensor(reduced=np.ones([1]), q_labels=(U11(1,1),))], pattern="+")
        psi2 = SparseFermionTensor(blocks=[SubTensor(reduced=np.ones([1]), q_labels=(U11(1,-1),))], pattern="+")
        psi3 = SparseFermionTensor(blocks=[SubTensor(reduced=np.ones([1]), q_labels=(U11(2,0),))], pattern="+")
        self.psi_array = [psi0, psi1, psi2, psi3]
        self.sz_array = [0,1,-1,0]
        self.pn_array = [0,1,1,2]

        bond = BondInfo({U11(0):1, U11(1,1):1, U11(1,-1):1, U11(2,0):1})
        self.psi = SparseFermionTensor.random((bond,)*2, pattern="++", dq=U11(2,0))
        self.fac = (0.5, 0.3)