Ejemplo n.º 1
0
 def large_ci(self, civec_strs, norb, nelec, tol=.1, return_strs=True):
     nelec = direct_spin1._unpack_nelec(nelec, self.spin)
     ci, _, (strsa, strsb) = _unpack(civec_strs, nelec, self._strs)
     addra, addrb = numpy.where(abs(ci) > tol)
     if return_strs:
         strsa = [bin(x) for x in strsa[addra]]
         strsb = [bin(x) for x in strsb[addrb]]
         return list(zip(ci[addra, addrb], strsa, strsb))
     else:
         occslsta = cistring._strs2occslst(strsa[addra], norb)
         occslstb = cistring._strs2occslst(strsb[addrb], norb)
         return list(zip(ci[addra, addrb], occslsta, occslstb))
Ejemplo n.º 2
0
 def large_ci(self, civec_strs, norb, nelec, tol=.1, return_strs=True):
     nelec = direct_spin1._unpack_nelec(nelec, self.spin)
     ci, _, (strsa, strsb) = _unpack(civec_strs, nelec, self._strs)
     addra, addrb = numpy.where(abs(ci) > tol)
     if return_strs:
         strsa = [bin(x) for x in strsa[addra]]
         strsb = [bin(x) for x in strsb[addrb]]
         return list(zip(ci[addra,addrb], strsa, strsb))
     else:
         occslsta = cistring._strs2occslst(strsa[addra], norb)
         occslstb = cistring._strs2occslst(strsb[addrb], norb)
         return list(zip(ci[addra,addrb], occslsta, occslstb))
Ejemplo n.º 3
0
def large_ci(ci, norb, nelec, tol=.1, return_strs=True):
    '''Search for the largest CI coefficients
    '''
    neleca, nelecb = _unpack(nelec)
    addra, addrb = numpy.where(abs(ci) > tol)
    strsa = cistring.addrs2str(norb, neleca, addra)
    strsb = cistring.addrs2str(norb, nelecb, addrb)
    if return_strs:
        strsa = [bin(x) for x in strsa]
        strsb = [bin(x) for x in strsb]
        return list(zip(ci[addra, addrb], strsa, strsb))
    else:
        occslsta = cistring._strs2occslst(strsa, norb)
        occslstb = cistring._strs2occslst(strsb, norb)
        return list(zip(ci[addra, addrb], occslsta, occslstb))
Ejemplo n.º 4
0
def large_ci(ci, norb, nelec, tol=.1, return_strs=True):
    '''Search for the largest CI coefficients
    '''
    neleca, nelecb = _unpack(nelec)
    addra, addrb = numpy.where(abs(ci) > tol)
    if addra.size == 0:  # No large CI coefficient > tol
        addra, addrb = numpy.unravel_index(numpy.argmax(abs(ci)), ci.shape)
        addra = numpy.asarray([addra])
        addrb = numpy.asarray([addrb])
    strsa = cistring.addrs2str(norb, neleca, addra)
    strsb = cistring.addrs2str(norb, nelecb, addrb)
    if return_strs:
        strsa = [bin(x) for x in strsa]
        strsb = [bin(x) for x in strsb]
        return list(zip(ci[addra, addrb], strsa, strsb))
    else:
        occslsta = cistring._strs2occslst(strsa, norb)
        occslstb = cistring._strs2occslst(strsb, norb)
        return list(zip(ci[addra, addrb], occslsta, occslstb))
Ejemplo n.º 5
0
def large_ci(ci, norb, nelec, tol=LARGE_CI_TOL, return_strs=RETURN_STRS):
    '''Search for the largest CI coefficients
    '''
    neleca, nelecb = _unpack(nelec)
    addra, addrb = numpy.where(abs(ci) > tol)
    if addra.size == 0:
        # No large CI coefficient > tol, search for the largest coefficient
        addra, addrb = numpy.unravel_index(numpy.argmax(abs(ci)), ci.shape)
        addra = numpy.asarray([addra])
        addrb = numpy.asarray([addrb])
    strsa = cistring.addrs2str(norb, neleca, addra)
    strsb = cistring.addrs2str(norb, nelecb, addrb)
    if return_strs:
        strsa = [bin(x) for x in strsa]
        strsb = [bin(x) for x in strsb]
        return list(zip(ci[addra,addrb], strsa, strsb))
    else:
        occslsta = cistring._strs2occslst(strsa, norb)
        occslstb = cistring._strs2occslst(strsb, norb)
        return list(zip(ci[addra,addrb], occslsta, occslstb))
Ejemplo n.º 6
0
def large_ci(ci, norb, nelec, tol=LARGE_CI_TOL, return_strs=RETURN_STRS):
    '''Search for the largest CI coefficients
    '''
    neleca, nelecb = _unpack_nelec(nelec)
    na = cistring.num_strings(norb, neleca)
    nb = cistring.num_strings(norb, nelecb)
    assert (ci.shape == (na, nb))
    addra, addrb = numpy.where(abs(ci) > tol)
    if addra.size == 0:
        # No large CI coefficient > tol, search for the largest coefficient
        addra, addrb = numpy.unravel_index(numpy.argmax(abs(ci)), ci.shape)
        addra = numpy.asarray([addra])
        addrb = numpy.asarray([addrb])
    strsa = cistring.addrs2str(norb, neleca, addra)
    strsb = cistring.addrs2str(norb, nelecb, addrb)
    if return_strs:
        strsa = [bin(x) for x in strsa]
        strsb = [bin(x) for x in strsb]
        return list(zip(ci[addra, addrb], strsa, strsb))
    else:
        occslsta = cistring._strs2occslst(strsa, norb)
        occslstb = cistring._strs2occslst(strsb, norb)
        return list(zip(ci[addra, addrb], occslsta, occslstb))
Ejemplo n.º 7
0
    def test_strings4orblist(self):
        ref = ['0b1010', '0b100010', '0b101000', '0b10000010', '0b10001000',
               '0b10100000']
        for i, x in enumerate(cistring.gen_strings4orblist([1,3,5,7], 2)):
            self.assertEqual(bin(x), ref[i])
        ref = ['0b11', '0b101', '0b110', '0b1001', '0b1010', '0b1100',
               '0b10001', '0b10010', '0b10100', '0b11000']
        for i, x in enumerate(cistring.gen_strings4orblist(range(5), 2)):
            self.assertEqual(bin(x), ref[i])

        strs = cistring.gen_strings4orblist(range(8), 4)
        occlst = cistring._gen_occslst(range(8), 4)
        self.assertAlmostEqual(abs(occlst - cistring._strs2occslst(strs, 8)).sum(), 0, 12)
        self.assertAlmostEqual(abs(strs - cistring._occslst2strs(occlst)).sum(), 0, 12)
Ejemplo n.º 8
0
def make_hdiag(h1e, eri, ci_strs, norb, nelec):
    ci_coeff, nelec, ci_strs = _unpack(None, nelec, ci_strs)
    na = len(ci_strs[0])
    nb = len(ci_strs[1])
    hdiag = numpy.empty(na * nb)

    h1e = numpy.asarray(h1e, order='C')
    eri = ao2mo.restore(1, eri, norb)
    jdiag = numpy.asarray(numpy.einsum('iijj->ij', eri), order='C')
    kdiag = numpy.asarray(numpy.einsum('ijji->ij', eri), order='C')
    c_h1e = h1e.ctypes.data_as(ctypes.c_void_p)
    c_jdiag = jdiag.ctypes.data_as(ctypes.c_void_p)
    c_kdiag = kdiag.ctypes.data_as(ctypes.c_void_p)
    occslsta = cistring._strs2occslst(ci_strs[0], norb)
    occslstb = cistring._strs2occslst(ci_strs[1], norb)
    libfci.FCImake_hdiag_uhf(hdiag.ctypes.data_as(ctypes.c_void_p), c_h1e,
                             c_h1e, c_jdiag, c_jdiag, c_jdiag, c_kdiag,
                             c_kdiag, ctypes.c_int(norb), ctypes.c_int(na),
                             ctypes.c_int(nb), ctypes.c_int(nelec[0]),
                             ctypes.c_int(nelec[1]),
                             occslsta.ctypes.data_as(ctypes.c_void_p),
                             occslstb.ctypes.data_as(ctypes.c_void_p))
    return hdiag
Ejemplo n.º 9
0
def make_hdiag(h1e, eri, ci_strs, norb, nelec):
    ci_coeff, nelec, ci_strs = _unpack(None, nelec, ci_strs)
    na = len(ci_strs[0])
    nb = len(ci_strs[1])
    hdiag = numpy.empty(na*nb)

    h1e = numpy.asarray(h1e, order='C')
    eri = ao2mo.restore(1, eri, norb)
    jdiag = numpy.asarray(numpy.einsum('iijj->ij',eri), order='C')
    kdiag = numpy.asarray(numpy.einsum('ijji->ij',eri), order='C')
    c_h1e = h1e.ctypes.data_as(ctypes.c_void_p)
    c_jdiag = jdiag.ctypes.data_as(ctypes.c_void_p)
    c_kdiag = kdiag.ctypes.data_as(ctypes.c_void_p)
    occslsta = cistring._strs2occslst(ci_strs[0], norb)
    occslstb = cistring._strs2occslst(ci_strs[1], norb)
    libfci.FCImake_hdiag_uhf(hdiag.ctypes.data_as(ctypes.c_void_p),
                             c_h1e, c_h1e, c_jdiag, c_jdiag, c_jdiag, c_kdiag, c_kdiag,
                             ctypes.c_int(norb),
                             ctypes.c_int(na), ctypes.c_int(nb),
                             ctypes.c_int(nelec[0]), ctypes.c_int(nelec[1]),
                             occslsta.ctypes.data_as(ctypes.c_void_p),
                             occslstb.ctypes.data_as(ctypes.c_void_p))
    return hdiag
Ejemplo n.º 10
0
    def test_strings4orblist(self):
        ref = [
            '0b1010', '0b100010', '0b101000', '0b10000010', '0b10001000',
            '0b10100000'
        ]
        for i, x in enumerate(cistring.gen_strings4orblist([1, 3, 5, 7], 2)):
            self.assertEqual(bin(x), ref[i])
        ref = [
            '0b11', '0b101', '0b110', '0b1001', '0b1010', '0b1100', '0b10001',
            '0b10010', '0b10100', '0b11000'
        ]
        for i, x in enumerate(cistring.gen_strings4orblist(range(5), 2)):
            self.assertEqual(bin(x), ref[i])

        strs = cistring.gen_strings4orblist(range(8), 4)
        occlst = cistring._gen_occslst(range(8), 4)
        self.assertAlmostEqual(
            abs(occlst - cistring._strs2occslst(strs, 8)).sum(), 0, 12)
        self.assertAlmostEqual(
            abs(strs - cistring._occslst2strs(occlst)).sum(), 0, 12)