diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 000000000..3b65d78ae --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 32884a95c39196c5e3fc96b047b66e92 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/_images/1dhubbfig.png b/_images/1dhubbfig.png new file mode 100644 index 000000000..6aad7df34 Binary files /dev/null and b/_images/1dhubbfig.png differ diff --git a/_images/graphene_titlepic.png b/_images/graphene_titlepic.png new file mode 100644 index 000000000..4c4910bbf Binary files /dev/null and b/_images/graphene_titlepic.png differ diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 000000000..098557e49 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,229 @@ + + + + + + Overview: module code — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +

All modules for which code is available

+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pyscf/cc/uccsd.html b/_modules/pyscf/cc/uccsd.html new file mode 100644 index 000000000..fc884e66d --- /dev/null +++ b/_modules/pyscf/cc/uccsd.html @@ -0,0 +1,1505 @@ + + + + + + pyscf.cc.uccsd — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pyscf.cc.uccsd

+#!/usr/bin/env python
+# Copyright 2014-2021 The PySCF Developers. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Author: Timothy Berkelbach <tim.berkelbach@gmail.com>
+#         Qiming Sun <osirpt.sun@gmail.com>
+#
+
+'''
+UCCSD with spatial integrals
+'''
+
+
+from functools import reduce
+import numpy as np
+
+from pyscf import lib
+from pyscf import ao2mo
+from pyscf.lib import logger
+from pyscf.cc import ccsd
+from pyscf.ao2mo import _ao2mo
+from pyscf.mp import ump2
+from pyscf import scf
+from pyscf import __config__
+
+MEMORYMIN = getattr(__config__, 'cc_ccsd_memorymin', 2000)
+
+# This is unrestricted (U)CCSD, in spatial-orbital form.
+
+def update_amps(cc, t1, t2, eris):
+    time0 = logger.process_clock(), logger.perf_counter()
+    log = logger.Logger(cc.stdout, cc.verbose)
+    t1a, t1b = t1
+    t2aa, t2ab, t2bb = t2
+    nocca, noccb, nvira, nvirb = t2ab.shape
+    mo_ea_o = eris.mo_energy[0][:nocca]
+    mo_ea_v = eris.mo_energy[0][nocca:] + cc.level_shift
+    mo_eb_o = eris.mo_energy[1][:noccb]
+    mo_eb_v = eris.mo_energy[1][noccb:] + cc.level_shift
+    fova = eris.focka[:nocca,nocca:]
+    fovb = eris.fockb[:noccb,noccb:]
+
+    u1a = np.zeros_like(t1a)
+    u1b = np.zeros_like(t1b)
+    #:eris_vvvv = ao2mo.restore(1, np.asarray(eris.vvvv), nvirb)
+    #:eris_VVVV = ao2mo.restore(1, np.asarray(eris.VVVV), nvirb)
+    #:eris_vvVV = _restore(np.asarray(eris.vvVV), nvira, nvirb)
+    #:u2aa += lib.einsum('ijef,aebf->ijab', tauaa, eris_vvvv) * .5
+    #:u2bb += lib.einsum('ijef,aebf->ijab', taubb, eris_VVVV) * .5
+    #:u2ab += lib.einsum('iJeF,aeBF->iJaB', tauab, eris_vvVV)
+    tauaa, tauab, taubb = make_tau(t2, t1, t1)
+    u2aa, u2ab, u2bb = cc._add_vvvv(None, (tauaa,tauab,taubb), eris)
+    u2aa *= .5
+    u2bb *= .5
+
+    Fooa =  .5 * lib.einsum('me,ie->mi', fova, t1a)
+    Foob =  .5 * lib.einsum('me,ie->mi', fovb, t1b)
+    Fvva = -.5 * lib.einsum('me,ma->ae', fova, t1a)
+    Fvvb = -.5 * lib.einsum('me,ma->ae', fovb, t1b)
+    Fooa += eris.focka[:nocca,:nocca] - np.diag(mo_ea_o)
+    Foob += eris.fockb[:noccb,:noccb] - np.diag(mo_eb_o)
+    Fvva += eris.focka[nocca:,nocca:] - np.diag(mo_ea_v)
+    Fvvb += eris.fockb[noccb:,noccb:] - np.diag(mo_eb_v)
+    dtype = u2aa.dtype
+    wovvo = np.zeros((nocca,nvira,nvira,nocca), dtype=dtype)
+    wOVVO = np.zeros((noccb,nvirb,nvirb,noccb), dtype=dtype)
+    woVvO = np.zeros((nocca,nvirb,nvira,noccb), dtype=dtype)
+    woVVo = np.zeros((nocca,nvirb,nvirb,nocca), dtype=dtype)
+    wOvVo = np.zeros((noccb,nvira,nvirb,nocca), dtype=dtype)
+    wOvvO = np.zeros((noccb,nvira,nvira,noccb), dtype=dtype)
+
+    mem_now = lib.current_memory()[0]
+    max_memory = max(0, cc.max_memory - mem_now - u2aa.size*8e-6)
+    if nvira > 0 and nocca > 0:
+        blksize = max(ccsd.BLKMIN, int(max_memory*1e6/8/(nvira**3*3+1)))
+        for p0,p1 in lib.prange(0, nocca, blksize):
+            ovvv = eris.get_ovvv(slice(p0,p1))  # ovvv = eris.ovvv[p0:p1]
+            ovvv = ovvv - ovvv.transpose(0,3,2,1)
+            Fvva += np.einsum('mf,mfae->ae', t1a[p0:p1], ovvv)
+            wovvo[p0:p1] += lib.einsum('jf,mebf->mbej', t1a, ovvv)
+            u1a += 0.5*lib.einsum('mief,meaf->ia', t2aa[p0:p1], ovvv)
+            u2aa[:,p0:p1] += lib.einsum('ie,mbea->imab', t1a, ovvv.conj())
+            tmp1aa = lib.einsum('ijef,mebf->ijmb', tauaa, ovvv)
+            u2aa -= lib.einsum('ijmb,ma->ijab', tmp1aa, t1a[p0:p1]*.5)
+            ovvv = tmp1aa = None
+
+    if nvirb > 0 and noccb > 0:
+        blksize = max(ccsd.BLKMIN, int(max_memory*1e6/8/(nvirb**3*3+1)))
+        for p0,p1 in lib.prange(0, noccb, blksize):
+            OVVV = eris.get_OVVV(slice(p0,p1))  # OVVV = eris.OVVV[p0:p1]
+            OVVV = OVVV - OVVV.transpose(0,3,2,1)
+            Fvvb += np.einsum('mf,mfae->ae', t1b[p0:p1], OVVV)
+            wOVVO[p0:p1] = lib.einsum('jf,mebf->mbej', t1b, OVVV)
+            u1b += 0.5*lib.einsum('MIEF,MEAF->IA', t2bb[p0:p1], OVVV)
+            u2bb[:,p0:p1] += lib.einsum('ie,mbea->imab', t1b, OVVV.conj())
+            tmp1bb = lib.einsum('ijef,mebf->ijmb', taubb, OVVV)
+            u2bb -= lib.einsum('ijmb,ma->ijab', tmp1bb, t1b[p0:p1]*.5)
+            OVVV = tmp1bb = None
+
+    if nvirb > 0 and nocca > 0:
+        blksize = max(ccsd.BLKMIN, int(max_memory*1e6/8/(nvira*nvirb**2*3+1)))
+        for p0,p1 in lib.prange(0, nocca, blksize):
+            ovVV = eris.get_ovVV(slice(p0,p1))  # ovVV = eris.ovVV[p0:p1]
+            Fvvb += np.einsum('mf,mfAE->AE', t1a[p0:p1], ovVV)
+            woVvO[p0:p1] = lib.einsum('JF,meBF->mBeJ', t1b, ovVV)
+            woVVo[p0:p1] = lib.einsum('jf,mfBE->mBEj',-t1a, ovVV)
+            u1b += lib.einsum('mIeF,meAF->IA', t2ab[p0:p1], ovVV)
+            u2ab[p0:p1] += lib.einsum('IE,maEB->mIaB', t1b, ovVV.conj())
+            tmp1ab = lib.einsum('iJeF,meBF->iJmB', tauab, ovVV)
+            u2ab -= lib.einsum('iJmB,ma->iJaB', tmp1ab, t1a[p0:p1])
+            ovVV = tmp1ab = None
+
+    if nvira > 0 and noccb > 0:
+        blksize = max(ccsd.BLKMIN, int(max_memory*1e6/8/(nvirb*nvira**2*3+1)))
+        for p0,p1 in lib.prange(0, noccb, blksize):
+            OVvv = eris.get_OVvv(slice(p0,p1))  # OVvv = eris.OVvv[p0:p1]
+            Fvva += np.einsum('MF,MFae->ae', t1b[p0:p1], OVvv)
+            wOvVo[p0:p1] = lib.einsum('jf,MEbf->MbEj', t1a, OVvv)
+            wOvvO[p0:p1] = lib.einsum('JF,MFbe->MbeJ',-t1b, OVvv)
+            u1a += lib.einsum('iMfE,MEaf->ia', t2ab[:,p0:p1], OVvv)
+            u2ab[:,p0:p1] += lib.einsum('ie,MBea->iMaB', t1a, OVvv.conj())
+            tmp1abba = lib.einsum('iJeF,MFbe->iJbM', tauab, OVvv)
+            u2ab -= lib.einsum('iJbM,MA->iJbA', tmp1abba, t1b[p0:p1])
+            OVvv = tmp1abba = None
+
+    eris_ovov = np.asarray(eris.ovov)
+    eris_ovoo = np.asarray(eris.ovoo)
+    Woooo = lib.einsum('je,nemi->mnij', t1a, eris_ovoo)
+    Woooo = Woooo - Woooo.transpose(0,1,3,2)
+    Woooo += np.asarray(eris.oooo).transpose(0,2,1,3)
+    Woooo += lib.einsum('ijef,menf->mnij', tauaa, eris_ovov) * .5
+    u2aa += lib.einsum('mnab,mnij->ijab', tauaa, Woooo*.5)
+    Woooo = tauaa = None
+    ovoo = eris_ovoo - eris_ovoo.transpose(2,1,0,3)
+    Fooa += np.einsum('ne,nemi->mi', t1a, ovoo)
+    u1a += 0.5*lib.einsum('mnae,meni->ia', t2aa, ovoo)
+    wovvo += lib.einsum('nb,nemj->mbej', t1a, ovoo)
+    ovoo = eris_ovoo = None
+
+    tilaa = make_tau_aa(t2[0], t1a, t1a, fac=0.5)
+    ovov = eris_ovov - eris_ovov.transpose(0,3,2,1)
+    Fvva -= .5 * lib.einsum('mnaf,menf->ae', tilaa, ovov)
+    Fooa += .5 * lib.einsum('inef,menf->mi', tilaa, ovov)
+    Fova = np.einsum('nf,menf->me',t1a, ovov)
+    u2aa += ovov.conj().transpose(0,2,1,3) * .5
+    wovvo -= 0.5*lib.einsum('jnfb,menf->mbej', t2aa, ovov)
+    woVvO += 0.5*lib.einsum('nJfB,menf->mBeJ', t2ab, ovov)
+    tmpaa = lib.einsum('jf,menf->mnej', t1a, ovov)
+    wovvo -= lib.einsum('nb,mnej->mbej', t1a, tmpaa)
+    eris_ovov = ovov = tmpaa = tilaa = None
+
+    eris_OVOV = np.asarray(eris.OVOV)
+    eris_OVOO = np.asarray(eris.OVOO)
+    WOOOO = lib.einsum('je,nemi->mnij', t1b, eris_OVOO)
+    WOOOO = WOOOO - WOOOO.transpose(0,1,3,2)
+    WOOOO += np.asarray(eris.OOOO).transpose(0,2,1,3)
+    WOOOO += lib.einsum('ijef,menf->mnij', taubb, eris_OVOV) * .5
+    u2bb += lib.einsum('mnab,mnij->ijab', taubb, WOOOO*.5)
+    WOOOO = taubb = None
+    OVOO = eris_OVOO - eris_OVOO.transpose(2,1,0,3)
+    Foob += np.einsum('ne,nemi->mi', t1b, OVOO)
+    u1b += 0.5*lib.einsum('mnae,meni->ia', t2bb, OVOO)
+    wOVVO += lib.einsum('nb,nemj->mbej', t1b, OVOO)
+    OVOO = eris_OVOO = None
+
+    tilbb = make_tau_aa(t2[2], t1b, t1b, fac=0.5)
+    OVOV = eris_OVOV - eris_OVOV.transpose(0,3,2,1)
+    Fvvb -= .5 * lib.einsum('MNAF,MENF->AE', tilbb, OVOV)
+    Foob += .5 * lib.einsum('inef,menf->mi', tilbb, OVOV)
+    Fovb = np.einsum('nf,menf->me',t1b, OVOV)
+    u2bb += OVOV.conj().transpose(0,2,1,3) * .5
+    wOVVO -= 0.5*lib.einsum('jnfb,menf->mbej', t2bb, OVOV)
+    wOvVo += 0.5*lib.einsum('jNbF,MENF->MbEj', t2ab, OVOV)
+    tmpbb = lib.einsum('jf,menf->mnej', t1b, OVOV)
+    wOVVO -= lib.einsum('nb,mnej->mbej', t1b, tmpbb)
+    eris_OVOV = OVOV = tmpbb = tilbb = None
+
+    eris_OVoo = np.asarray(eris.OVoo)
+    eris_ovOO = np.asarray(eris.ovOO)
+    Fooa += np.einsum('NE,NEmi->mi', t1b, eris_OVoo)
+    u1a -= lib.einsum('nMaE,MEni->ia', t2ab, eris_OVoo)
+    wOvVo -= lib.einsum('nb,MEnj->MbEj', t1a, eris_OVoo)
+    woVVo += lib.einsum('NB,NEmj->mBEj', t1b, eris_OVoo)
+    Foob += np.einsum('ne,neMI->MI', t1a, eris_ovOO)
+    u1b -= lib.einsum('mNeA,meNI->IA', t2ab, eris_ovOO)
+    woVvO -= lib.einsum('NB,meNJ->mBeJ', t1b, eris_ovOO)
+    wOvvO += lib.einsum('nb,neMJ->MbeJ', t1a, eris_ovOO)
+    WoOoO = lib.einsum('JE,NEmi->mNiJ', t1b, eris_OVoo)
+    WoOoO+= lib.einsum('je,neMI->nMjI', t1a, eris_ovOO)
+    WoOoO += np.asarray(eris.ooOO).transpose(0,2,1,3)
+    eris_OVoo = eris_ovOO = None
+
+    eris_ovOV = np.asarray(eris.ovOV)
+    WoOoO += lib.einsum('iJeF,meNF->mNiJ', tauab, eris_ovOV)
+    u2ab += lib.einsum('mNaB,mNiJ->iJaB', tauab, WoOoO)
+    WoOoO = None
+
+    tilab = make_tau_ab(t2[1], t1 , t1 , fac=0.5)
+    Fvva -= lib.einsum('mNaF,meNF->ae', tilab, eris_ovOV)
+    Fvvb -= lib.einsum('nMfA,nfME->AE', tilab, eris_ovOV)
+    Fooa += lib.einsum('iNeF,meNF->mi', tilab, eris_ovOV)
+    Foob += lib.einsum('nIfE,nfME->MI', tilab, eris_ovOV)
+    Fova += np.einsum('NF,meNF->me',t1b, eris_ovOV)
+    Fovb += np.einsum('nf,nfME->ME',t1a, eris_ovOV)
+    u2ab += eris_ovOV.conj().transpose(0,2,1,3)
+    wovvo += 0.5*lib.einsum('jNbF,meNF->mbej', t2ab, eris_ovOV)
+    wOVVO += 0.5*lib.einsum('nJfB,nfME->MBEJ', t2ab, eris_ovOV)
+    wOvVo -= 0.5*lib.einsum('jnfb,nfME->MbEj', t2aa, eris_ovOV)
+    woVvO -= 0.5*lib.einsum('JNFB,meNF->mBeJ', t2bb, eris_ovOV)
+    woVVo += 0.5*lib.einsum('jNfB,mfNE->mBEj', t2ab, eris_ovOV)
+    wOvvO += 0.5*lib.einsum('nJbF,neMF->MbeJ', t2ab, eris_ovOV)
+    tmpabab = lib.einsum('JF,meNF->mNeJ', t1b, eris_ovOV)
+    tmpbaba = lib.einsum('jf,nfME->MnEj', t1a, eris_ovOV)
+    woVvO -= lib.einsum('NB,mNeJ->mBeJ', t1b, tmpabab)
+    wOvVo -= lib.einsum('nb,MnEj->MbEj', t1a, tmpbaba)
+    woVVo += lib.einsum('NB,NmEj->mBEj', t1b, tmpbaba)
+    wOvvO += lib.einsum('nb,nMeJ->MbeJ', t1a, tmpabab)
+    tmpabab = tmpbaba = tilab = None
+
+    Fova += fova
+    Fovb += fovb
+    u1a += fova.conj()
+    u1a += np.einsum('ie,ae->ia', t1a, Fvva)
+    u1a -= np.einsum('ma,mi->ia', t1a, Fooa)
+    u1a -= np.einsum('imea,me->ia', t2aa, Fova)
+    u1a += np.einsum('iMaE,ME->ia', t2ab, Fovb)
+    u1b += fovb.conj()
+    u1b += np.einsum('ie,ae->ia',t1b,Fvvb)
+    u1b -= np.einsum('ma,mi->ia',t1b,Foob)
+    u1b -= np.einsum('imea,me->ia', t2bb, Fovb)
+    u1b += np.einsum('mIeA,me->IA', t2ab, Fova)
+
+    eris_oovv = np.asarray(eris.oovv)
+    eris_ovvo = np.asarray(eris.ovvo)
+    wovvo -= eris_oovv.transpose(0,2,3,1)
+    wovvo += eris_ovvo.transpose(0,2,1,3)
+    oovv = eris_oovv - eris_ovvo.transpose(0,3,2,1)
+    u1a-= np.einsum('nf,niaf->ia', t1a,      oovv)
+    tmp1aa = lib.einsum('ie,mjbe->mbij', t1a,      oovv)
+    u2aa += 2*lib.einsum('ma,mbij->ijab', t1a, tmp1aa)
+    eris_ovvo = eris_oovv = oovv = tmp1aa = None
+
+    eris_OOVV = np.asarray(eris.OOVV)
+    eris_OVVO = np.asarray(eris.OVVO)
+    wOVVO -= eris_OOVV.transpose(0,2,3,1)
+    wOVVO += eris_OVVO.transpose(0,2,1,3)
+    OOVV = eris_OOVV - eris_OVVO.transpose(0,3,2,1)
+    u1b-= np.einsum('nf,niaf->ia', t1b,      OOVV)
+    tmp1bb = lib.einsum('ie,mjbe->mbij', t1b,      OOVV)
+    u2bb += 2*lib.einsum('ma,mbij->ijab', t1b, tmp1bb)
+    eris_OVVO = eris_OOVV = OOVV = None
+
+    eris_ooVV = np.asarray(eris.ooVV)
+    eris_ovVO = np.asarray(eris.ovVO)
+    woVVo -= eris_ooVV.transpose(0,2,3,1)
+    woVvO += eris_ovVO.transpose(0,2,1,3)
+    u1b+= np.einsum('nf,nfAI->IA', t1a, eris_ovVO)
+    tmp1ab = lib.einsum('ie,meBJ->mBiJ', t1a, eris_ovVO)
+    tmp1ab+= lib.einsum('IE,mjBE->mBjI', t1b, eris_ooVV)
+    u2ab -= lib.einsum('ma,mBiJ->iJaB', t1a, tmp1ab)
+    eris_ooVV = eris_ovVO = tmp1ab = None
+
+    eris_OOvv = np.asarray(eris.OOvv)
+    eris_OVvo = np.asarray(eris.OVvo)
+    wOvvO -= eris_OOvv.transpose(0,2,3,1)
+    wOvVo += eris_OVvo.transpose(0,2,1,3)
+    u1a+= np.einsum('NF,NFai->ia', t1b, eris_OVvo)
+    tmp1ba = lib.einsum('IE,MEbj->MbIj', t1b, eris_OVvo)
+    tmp1ba+= lib.einsum('ie,MJbe->MbJi', t1a, eris_OOvv)
+    u2ab -= lib.einsum('MA,MbIj->jIbA', t1b, tmp1ba)
+    eris_OOvv = eris_OVvo = tmp1ba = None
+
+    u2aa += 2*lib.einsum('imae,mbej->ijab', t2aa, wovvo)
+    u2aa += 2*lib.einsum('iMaE,MbEj->ijab', t2ab, wOvVo)
+    u2bb += 2*lib.einsum('imae,mbej->ijab', t2bb, wOVVO)
+    u2bb += 2*lib.einsum('mIeA,mBeJ->IJAB', t2ab, woVvO)
+    u2ab += lib.einsum('imae,mBeJ->iJaB', t2aa, woVvO)
+    u2ab += lib.einsum('iMaE,MBEJ->iJaB', t2ab, wOVVO)
+    u2ab += lib.einsum('iMeA,MbeJ->iJbA', t2ab, wOvvO)
+    u2ab += lib.einsum('IMAE,MbEj->jIbA', t2bb, wOvVo)
+    u2ab += lib.einsum('mIeA,mbej->jIbA', t2ab, wovvo)
+    u2ab += lib.einsum('mIaE,mBEj->jIaB', t2ab, woVVo)
+    wovvo = wOVVO = woVvO = wOvVo = woVVo = wOvvO = None
+
+    Ftmpa = Fvva - .5*lib.einsum('mb,me->be', t1a, Fova)
+    Ftmpb = Fvvb - .5*lib.einsum('mb,me->be', t1b, Fovb)
+    u2aa += lib.einsum('ijae,be->ijab', t2aa, Ftmpa)
+    u2bb += lib.einsum('ijae,be->ijab', t2bb, Ftmpb)
+    u2ab += lib.einsum('iJaE,BE->iJaB', t2ab, Ftmpb)
+    u2ab += lib.einsum('iJeA,be->iJbA', t2ab, Ftmpa)
+    Ftmpa = Fooa + 0.5*lib.einsum('je,me->mj', t1a, Fova)
+    Ftmpb = Foob + 0.5*lib.einsum('je,me->mj', t1b, Fovb)
+    u2aa -= lib.einsum('imab,mj->ijab', t2aa, Ftmpa)
+    u2bb -= lib.einsum('imab,mj->ijab', t2bb, Ftmpb)
+    u2ab -= lib.einsum('iMaB,MJ->iJaB', t2ab, Ftmpb)
+    u2ab -= lib.einsum('mIaB,mj->jIaB', t2ab, Ftmpa)
+
+    eris_ovoo = np.asarray(eris.ovoo).conj()
+    eris_OVOO = np.asarray(eris.OVOO).conj()
+    eris_OVoo = np.asarray(eris.OVoo).conj()
+    eris_ovOO = np.asarray(eris.ovOO).conj()
+    ovoo = eris_ovoo - eris_ovoo.transpose(2,1,0,3)
+    OVOO = eris_OVOO - eris_OVOO.transpose(2,1,0,3)
+    u2aa -= lib.einsum('ma,jbim->ijab', t1a, ovoo)
+    u2bb -= lib.einsum('ma,jbim->ijab', t1b, OVOO)
+    u2ab -= lib.einsum('ma,JBim->iJaB', t1a, eris_OVoo)
+    u2ab -= lib.einsum('MA,ibJM->iJbA', t1b, eris_ovOO)
+    eris_ovoo = eris_OVoo = eris_OVOO = eris_ovOO = None
+
+    u2aa *= .5
+    u2bb *= .5
+    u2aa = u2aa - u2aa.transpose(0,1,3,2)
+    u2aa = u2aa - u2aa.transpose(1,0,2,3)
+    u2bb = u2bb - u2bb.transpose(0,1,3,2)
+    u2bb = u2bb - u2bb.transpose(1,0,2,3)
+
+    eia_a = lib.direct_sum('i-a->ia', mo_ea_o, mo_ea_v)
+    eia_b = lib.direct_sum('i-a->ia', mo_eb_o, mo_eb_v)
+    u1a /= eia_a
+    u1b /= eia_b
+
+    u2aa /= lib.direct_sum('ia+jb->ijab', eia_a, eia_a)
+    u2ab /= lib.direct_sum('ia+jb->ijab', eia_a, eia_b)
+    u2bb /= lib.direct_sum('ia+jb->ijab', eia_b, eia_b)
+
+    time0 = log.timer_debug1('update t1 t2', *time0)
+    t1new = u1a, u1b
+    t2new = u2aa, u2ab, u2bb
+    return t1new, t2new
+
+
+def energy(cc, t1=None, t2=None, eris=None):
+    '''UCCSD correlation energy'''
+    if t1 is None: t1 = cc.t1
+    if t2 is None: t2 = cc.t2
+    if eris is None: eris = cc.ao2mo()
+
+    t1a, t1b = t1
+    t2aa, t2ab, t2bb = t2
+    nocca, noccb, nvira, nvirb = t2ab.shape
+    eris_ovov = np.asarray(eris.ovov)
+    eris_OVOV = np.asarray(eris.OVOV)
+    eris_ovOV = np.asarray(eris.ovOV)
+    fova = eris.focka[:nocca,nocca:]
+    fovb = eris.fockb[:noccb,noccb:]
+    e  = np.einsum('ia,ia', fova, t1a)
+    e += np.einsum('ia,ia', fovb, t1b)
+    e += 0.25*np.einsum('ijab,iajb',t2aa,eris_ovov)
+    e -= 0.25*np.einsum('ijab,ibja',t2aa,eris_ovov)
+    e += 0.25*np.einsum('ijab,iajb',t2bb,eris_OVOV)
+    e -= 0.25*np.einsum('ijab,ibja',t2bb,eris_OVOV)
+    e +=      np.einsum('iJaB,iaJB',t2ab,eris_ovOV)
+    e += 0.5*np.einsum('ia,jb,iajb',t1a,t1a,eris_ovov)
+    e -= 0.5*np.einsum('ia,jb,ibja',t1a,t1a,eris_ovov)
+    e += 0.5*np.einsum('ia,jb,iajb',t1b,t1b,eris_OVOV)
+    e -= 0.5*np.einsum('ia,jb,ibja',t1b,t1b,eris_OVOV)
+    e +=     np.einsum('ia,jb,iajb',t1a,t1b,eris_ovOV)
+    if abs(e.imag) > 1e-4:
+        logger.warn(cc, 'Non-zero imaginary part found in UCCSD energy %s', e)
+    return e.real
+
+
+get_nocc = ump2.get_nocc
+get_nmo = ump2.get_nmo
+get_frozen_mask = ump2.get_frozen_mask
+
+
+def amplitudes_to_vector(t1, t2, out=None):
+    nocca, nvira = t1[0].shape
+    noccb, nvirb = t1[1].shape
+    sizea = nocca * nvira + nocca*(nocca-1)//2*nvira*(nvira-1)//2
+    sizeb = noccb * nvirb + noccb*(noccb-1)//2*nvirb*(nvirb-1)//2
+    sizeab = nocca * noccb * nvira * nvirb
+    vector = np.ndarray(sizea+sizeb+sizeab, t2[0].dtype, buffer=out)
+    ccsd.amplitudes_to_vector_s4(t1[0], t2[0], out=vector[:sizea])
+    ccsd.amplitudes_to_vector_s4(t1[1], t2[2], out=vector[sizea:])
+    vector[sizea+sizeb:] = t2[1].ravel()
+    return vector
+
+def vector_to_amplitudes(vector, nmo, nocc):
+    nocca, noccb = nocc
+    nmoa, nmob = nmo
+    nvira, nvirb = nmoa-nocca, nmob-noccb
+    nocc = nocca + noccb
+    nvir = nvira + nvirb
+    nov = nocc * nvir
+    size = nov + nocc*(nocc-1)//2*nvir*(nvir-1)//2
+    if vector.size == size:
+        #return ccsd.vector_to_amplitudes_s4(vector, nmo, nocc)
+        raise RuntimeError('Input vector is GCCSD vecotr')
+    else:
+        sizea = nocca * nvira + nocca*(nocca-1)//2*nvira*(nvira-1)//2
+        sizeb = noccb * nvirb + noccb*(noccb-1)//2*nvirb*(nvirb-1)//2
+        sections = np.cumsum([sizea, sizeb])
+        veca, vecb, t2ab = np.split(vector, sections)
+        t1a, t2aa = ccsd.vector_to_amplitudes_s4(veca, nmoa, nocca)
+        t1b, t2bb = ccsd.vector_to_amplitudes_s4(vecb, nmob, noccb)
+        t2ab = t2ab.copy().reshape(nocca,noccb,nvira,nvirb)
+        return (t1a,t1b), (t2aa,t2ab,t2bb)
+
+def amplitudes_from_rccsd(t1, t2):
+    t2aa = t2 - t2.transpose(0,1,3,2)
+    return (t1,t1), (t2aa,t2,t2aa)
+
+
+def _add_vvVV(mycc, t1, t2ab, eris, out=None):
+    '''Ht2 = np.einsum('iJcD,acBD->iJaB', t2ab, vvVV)
+    without using symmetry in t2ab or Ht2
+    '''
+    time0 = logger.process_clock(), logger.perf_counter()
+    if t2ab.size == 0:
+        return np.zeros_like(t2ab)
+    if t1 is not None:
+        t2ab = make_tau_ab(t2ab, t1, t1)
+
+    log = logger.Logger(mycc.stdout, mycc.verbose)
+    nocca, noccb, nvira, nvirb = t2ab.shape
+
+    if mycc.direct:  # AO direct CCSD
+        if getattr(eris, 'mo_coeff', None) is not None:
+            mo_a, mo_b = eris.mo_coeff
+        else:
+            moidxa, moidxb = mycc.get_frozen_mask()
+            mo_a = mycc.mo_coeff[0][:,moidxa]
+            mo_b = mycc.mo_coeff[1][:,moidxb]
+        # Note tensor t2ab may be t2bbab from eom_uccsd code.  In that
+        # particular case, nocca, noccb do not equal to the actual number of
+        # alpha/beta occupied orbitals. orbva and orbvb cannot be indexed as
+        # mo_a[:,nocca:] and mo_b[:,noccb:]
+        orbva = mo_a[:,-nvira:]
+        orbvb = mo_b[:,-nvirb:]
+        tau = lib.einsum('ijab,pa->ijpb', t2ab, orbva)
+        tau = lib.einsum('ijab,pb->ijap', tau, orbvb)
+        time0 = logger.timer_debug1(mycc, 'vvvv-tau mo2ao', *time0)
+        buf = eris._contract_vvVV_t2(mycc, tau, mycc.direct, out, log)
+        mo = np.asarray(np.hstack((orbva, orbvb)), order='F')
+        Ht2 = _ao2mo.nr_e2(buf.reshape(nocca*noccb,-1), mo.conj(),
+                           (0,nvira,nvira,nvira+nvirb), 's1', 's1')
+        return Ht2.reshape(t2ab.shape)
+    else:
+        return eris._contract_vvVV_t2(mycc, t2ab, mycc.direct, out, log)
+
+def _add_vvvv(mycc, t1, t2, eris, out=None, with_ovvv=False, t2sym=None):
+    time0 = logger.process_clock(), logger.perf_counter()
+    log = logger.Logger(mycc.stdout, mycc.verbose)
+    if t1 is None:
+        t2aa, t2ab, t2bb = t2
+    else:
+        t2aa, t2ab, t2bb = make_tau(t2, t1, t1)
+    nocca, nvira = t2aa.shape[1:3]
+    noccb, nvirb = t2bb.shape[1:3]
+
+    if mycc.direct:
+        assert (t2sym is None)
+        if with_ovvv:
+            raise NotImplementedError
+        if getattr(eris, 'mo_coeff', None) is not None:
+            mo_a, mo_b = eris.mo_coeff
+        else:
+            moidxa, moidxb = mycc.get_frozen_mask()
+            mo_a = mycc.mo_coeff[0][:,moidxa]
+            mo_b = mycc.mo_coeff[1][:,moidxb]
+        nao = mo_a.shape[0]
+        otrila = np.tril_indices(nocca,-1)
+        otrilb = np.tril_indices(noccb,-1)
+        if nocca > 1:
+            tauaa = lib.einsum('xab,pa->xpb', t2aa[otrila], mo_a[:,nocca:])
+            tauaa = lib.einsum('xab,pb->xap', tauaa, mo_a[:,nocca:])
+        else:
+            tauaa = np.zeros((0,nao,nao))
+        if noccb > 1:
+            taubb = lib.einsum('xab,pa->xpb', t2bb[otrilb], mo_b[:,noccb:])
+            taubb = lib.einsum('xab,pb->xap', taubb, mo_b[:,noccb:])
+        else:
+            taubb = np.zeros((0,nao,nao))
+        tauab = lib.einsum('ijab,pa->ijpb', t2ab, mo_a[:,nocca:])
+        tauab = lib.einsum('ijab,pb->ijap', tauab, mo_b[:,noccb:])
+        tau = np.vstack((tauaa, taubb, tauab.reshape(nocca*noccb,nao,nao)))
+        tauaa = taubb = tauab = None
+        time0 = log.timer_debug1('vvvv-tau', *time0)
+
+        buf = ccsd._contract_vvvv_t2(mycc, mycc.mol, None, tau, out, log)
+
+        mo = np.asarray(np.hstack((mo_a[:,nocca:], mo_b[:,noccb:])), order='F')
+        u2aa = np.zeros_like(t2aa)
+        if nocca > 1:
+            u2tril = buf[:otrila[0].size]
+            u2tril = _ao2mo.nr_e2(u2tril.reshape(-1,nao**2), mo.conj(),
+                                  (0,nvira,0,nvira), 's1', 's1')
+            u2tril = u2tril.reshape(otrila[0].size,nvira,nvira)
+            u2aa[otrila[1],otrila[0]] = u2tril.transpose(0,2,1)
+            u2aa[otrila] = u2tril
+
+        u2bb = np.zeros_like(t2bb)
+        if noccb > 1:
+            u2tril = buf[otrila[0].size:otrila[0].size+otrilb[0].size]
+            u2tril = _ao2mo.nr_e2(u2tril.reshape(-1,nao**2), mo.conj(),
+                                  (nvira,nvira+nvirb,nvira,nvira+nvirb), 's1', 's1')
+            u2tril = u2tril.reshape(otrilb[0].size,nvirb,nvirb)
+            u2bb[otrilb[1],otrilb[0]] = u2tril.transpose(0,2,1)
+            u2bb[otrilb] = u2tril
+
+        if nocca*noccb > 0:
+            u2ab = _ao2mo.nr_e2(buf[-nocca*noccb:].reshape(nocca*noccb,nao**2), mo,
+                                (0,nvira,nvira,nvira+nvirb), 's1', 's1')
+            u2ab = u2ab.reshape(t2ab.shape)
+        else:
+            u2ab = np.zeros_like(t2ab)
+
+    else:
+        assert (not with_ovvv)
+        if t2sym is None:
+            tmp = eris._contract_vvvv_t2(mycc, t2aa[np.tril_indices(nocca)],
+                                         mycc.direct, None)
+            u2aa = ccsd._unpack_t2_tril(tmp, nocca, nvira, None, 'jiba')
+            tmp = eris._contract_VVVV_t2(mycc, t2bb[np.tril_indices(noccb)],
+                                         mycc.direct, None)
+            u2bb = ccsd._unpack_t2_tril(tmp, noccb, nvirb, None, 'jiba')
+            u2ab = eris._contract_vvVV_t2(mycc, t2ab, mycc.direct, None)
+        else:
+            u2aa = eris._contract_vvvv_t2(mycc, t2aa, mycc.direct, None)
+            u2bb = eris._contract_VVVV_t2(mycc, t2bb, mycc.direct, None)
+            u2ab = eris._contract_vvVV_t2(mycc, t2ab, mycc.direct, None)
+
+    return u2aa,u2ab,u2bb
+
+
+class UCCSD(ccsd.CCSD):
+
+    conv_tol = getattr(__config__, 'cc_uccsd_UCCSD_conv_tol', 1e-7)
+    conv_tol_normt = getattr(__config__, 'cc_uccsd_UCCSD_conv_tol_normt', 1e-6)
+
+# Attribute frozen can be
+# * An integer : The same number of inner-most alpha and beta orbitals are frozen
+# * One list : Same alpha and beta orbital indices to be frozen
+# * A pair of list : First list is the orbital indices to be frozen for alpha
+#       orbitals, second list is for beta orbitals
+    def __init__(self, mf, frozen=None, mo_coeff=None, mo_occ=None):
+        assert isinstance(mf, scf.uhf.UHF)
+        ccsd.CCSD.__init__(self, mf, frozen, mo_coeff, mo_occ)
+
+    get_nocc = get_nocc
+    get_nmo = get_nmo
+    get_frozen_mask = get_frozen_mask
+
+
[docs] def init_amps(self, eris=None): + time0 = logger.process_clock(), logger.perf_counter() + if eris is None: + eris = self.ao2mo(self.mo_coeff) + nocca, noccb = self.nocc + + fova = eris.focka[:nocca,nocca:] + fovb = eris.fockb[:noccb,noccb:] + mo_ea_o = eris.mo_energy[0][:nocca] + mo_ea_v = eris.mo_energy[0][nocca:] + mo_eb_o = eris.mo_energy[1][:noccb] + mo_eb_v = eris.mo_energy[1][noccb:] + eia_a = lib.direct_sum('i-a->ia', mo_ea_o, mo_ea_v) + eia_b = lib.direct_sum('i-a->ia', mo_eb_o, mo_eb_v) + + t1a = fova.conj() / eia_a + t1b = fovb.conj() / eia_b + + eris_ovov = np.asarray(eris.ovov) + eris_OVOV = np.asarray(eris.OVOV) + eris_ovOV = np.asarray(eris.ovOV) + t2aa = eris_ovov.transpose(0,2,1,3) / lib.direct_sum('ia+jb->ijab', eia_a, eia_a) + t2ab = eris_ovOV.transpose(0,2,1,3) / lib.direct_sum('ia+jb->ijab', eia_a, eia_b) + t2bb = eris_OVOV.transpose(0,2,1,3) / lib.direct_sum('ia+jb->ijab', eia_b, eia_b) + t2aa = t2aa - t2aa.transpose(0,1,3,2) + t2bb = t2bb - t2bb.transpose(0,1,3,2) + e = np.einsum('iJaB,iaJB', t2ab, eris_ovOV) + e += 0.25*np.einsum('ijab,iajb', t2aa, eris_ovov) + e -= 0.25*np.einsum('ijab,ibja', t2aa, eris_ovov) + e += 0.25*np.einsum('ijab,iajb', t2bb, eris_OVOV) + e -= 0.25*np.einsum('ijab,ibja', t2bb, eris_OVOV) + self.emp2 = e.real + logger.info(self, 'Init t2, MP2 energy = %.15g', self.emp2) + logger.timer(self, 'init mp2', *time0) + return self.emp2, (t1a,t1b), (t2aa,t2ab,t2bb)
+ + energy = energy + update_amps = update_amps + _add_vvvv = _add_vvvv + _add_vvVV = _add_vvVV + +
[docs] def kernel(self, t1=None, t2=None, eris=None, mbpt2=False): + return self.ccsd(t1, t2, eris, mbpt2)
+
[docs] def ccsd(self, t1=None, t2=None, eris=None, mbpt2=False): + '''Ground-state unrestricted (U)CCSD. + + Kwargs: + mbpt2 : bool + Use one-shot MBPT2 approximation to CCSD. + ''' + if mbpt2: + pt = ump2.UMP2(self._scf, self.frozen, self.mo_coeff, self.mo_occ) + self.e_corr, self.t2 = pt.kernel(eris=eris) + t2ab = self.t2[1] + nocca, noccb, nvira, nvirb = t2ab.shape + self.t1 = (np.zeros((nocca,nvira)), np.zeros((noccb,nvirb))) + return self.e_corr, self.t1, self.t2 + + return ccsd.CCSD.ccsd(self, t1, t2, eris)
+ +
[docs] def solve_lambda(self, t1=None, t2=None, l1=None, l2=None, + eris=None): + from pyscf.cc import uccsd_lambda + if t1 is None: t1 = self.t1 + if t2 is None: t2 = self.t2 + if eris is None: eris = self.ao2mo(self.mo_coeff) + self.converged_lambda, self.l1, self.l2 = \ + uccsd_lambda.kernel(self, eris, t1, t2, l1, l2, + max_cycle=self.max_cycle, + tol=self.conv_tol_normt, + verbose=self.verbose) + return self.l1, self.l2
+ +
[docs] def ccsd_t(self, t1=None, t2=None, eris=None): + from pyscf.cc import uccsd_t + if t1 is None: t1 = self.t1 + if t2 is None: t2 = self.t2 + if eris is None: eris = self.ao2mo(self.mo_coeff) + return uccsd_t.kernel(self, eris, t1, t2, self.verbose)
+ uccsd_t = ccsd_t + +
[docs] def make_rdm1(self, t1=None, t2=None, l1=None, l2=None, ao_repr=False, + with_frozen=True, with_mf=True): + '''Un-relaxed 1-particle density matrix in MO space + + Returns: + dm1a, dm1b + ''' + from pyscf.cc import uccsd_rdm + if t1 is None: t1 = self.t1 + if t2 is None: t2 = self.t2 + if l1 is None: l1 = self.l1 + if l2 is None: l2 = self.l2 + if l1 is None: l1, l2 = self.solve_lambda(t1, t2) + return uccsd_rdm.make_rdm1(self, t1, t2, l1, l2, ao_repr=ao_repr, + with_frozen=with_frozen, with_mf=with_mf)
+ +
[docs] def make_rdm2(self, t1=None, t2=None, l1=None, l2=None, ao_repr=False, + with_frozen=True, with_dm1=True): + '''2-particle density matrix in spin-orbital basis. + ''' + from pyscf.cc import uccsd_rdm + if t1 is None: t1 = self.t1 + if t2 is None: t2 = self.t2 + if l1 is None: l1 = self.l1 + if l2 is None: l2 = self.l2 + if l1 is None: l1, l2 = self.solve_lambda(t1, t2) + return uccsd_rdm.make_rdm2(self, t1, t2, l1, l2, ao_repr=ao_repr, + with_frozen=with_frozen, with_dm1=with_dm1)
+ +
[docs] def spin_square(self, mo_coeff=None, s=None): + from pyscf.fci.spin_op import spin_square_general + if mo_coeff is None: + mo_coeff = self.mo_coeff + if s is None: + s = self._scf.get_ovlp() + + dma,dmb = self.make_rdm1() + dmaa,dmab,dmbb = self.make_rdm2() + + return spin_square_general(dma,dmb,dmaa,dmab,dmbb,mo_coeff,s)
+ + def ao2mo(self, mo_coeff=None): + nmoa, nmob = self.get_nmo() + nao = self.mo_coeff[0].shape[0] + nmo_pair = nmoa * (nmoa+1) // 2 + nao_pair = nao * (nao+1) // 2 + mem_incore = (max(nao_pair**2, nmoa**4) + nmo_pair**2) * 8/1e6 + mem_now = lib.current_memory()[0] + if (self._scf._eri is not None and + (mem_incore+mem_now < self.max_memory or self.incore_complete)): + return _make_eris_incore(self, mo_coeff) + + elif getattr(self._scf, 'with_df', None): + # TODO: Uncomment once there is an unrestricted DF-CCSD implementation + #logger.warn(self, 'UCCSD detected DF being used in the HF object. ' + # 'MO integrals are computed based on the DF 3-index tensors.\n' + # 'It\'s recommended to use dfccsd.CCSD for the ' + # 'DF-CCSD calculations') + return _make_df_eris_outcore(self, mo_coeff) + else: + return _make_eris_outcore(self, mo_coeff) + +
[docs] def ipccsd(self, nroots=1, left=False, koopmans=False, guess=None, + partition=None, eris=None): + from pyscf.cc import eom_uccsd + return eom_uccsd.EOMIP(self).kernel(nroots, left, koopmans, guess, + partition, eris)
+ +
[docs] def eaccsd(self, nroots=1, left=False, koopmans=False, guess=None, + partition=None, eris=None): + from pyscf.cc import eom_uccsd + return eom_uccsd.EOMEA(self).kernel(nroots, left, koopmans, guess, + partition, eris)
+ +
[docs] def eeccsd(self, nroots=1, koopmans=False, guess=None, eris=None): + from pyscf.cc import eom_uccsd + return eom_uccsd.EOMEE(self).kernel(nroots, koopmans, guess, eris)
+ +
[docs] def eomee_ccsd(self, nroots=1, koopmans=False, guess=None, eris=None): + from pyscf.cc import eom_uccsd + return eom_uccsd.EOMEESpinKeep(self).kernel(nroots, koopmans, guess, eris)
+ +
[docs] def eomsf_ccsd(self, nroots=1, koopmans=False, guess=None, eris=None): + from pyscf.cc import eom_uccsd + return eom_uccsd.EOMEESpinFlip(self).kernel(nroots, koopmans, guess, eris)
+ +
[docs] def eomip_method(self): + from pyscf.cc import eom_uccsd + return eom_uccsd.EOMIP(self)
+ +
[docs] def eomea_method(self): + from pyscf.cc import eom_uccsd + return eom_uccsd.EOMEA(self)
+ +
[docs] def eomee_method(self): + from pyscf.cc import eom_uccsd + return eom_uccsd.EOMEE(self)
+ +
[docs] def density_fit(self): + raise NotImplementedError
+ +
[docs] def nuc_grad_method(self): + from pyscf.grad import uccsd + return uccsd.Gradients(self)
+ +
[docs] def amplitudes_to_vector(self, t1, t2, out=None): + return amplitudes_to_vector(t1, t2, out)
+ +
[docs] def vector_to_amplitudes(self, vector, nmo=None, nocc=None): + if nocc is None: nocc = self.nocc + if nmo is None: nmo = self.nmo + return vector_to_amplitudes(vector, nmo, nocc)
+ +
[docs] def vector_size(self, nmo=None, nocc=None): + if nocc is None: nocc = self.nocc + if nmo is None: nmo = self.nmo + nocca, noccb = nocc + nmoa, nmob = nmo + nvira, nvirb = nmoa-nocca, nmob-noccb + sizea = nocca * nvira + nocca*(nocca-1)//2*nvira*(nvira-1)//2 + sizeb = noccb * nvirb + noccb*(noccb-1)//2*nvirb*(nvirb-1)//2 + sizeab = nocca * noccb * nvira * nvirb + return sizea + sizeb + sizeab
+ +
[docs] def amplitudes_from_rccsd(self, t1, t2): + return amplitudes_from_rccsd(t1, t2)
+ +
[docs] def get_t1_diagnostic(self, t1=None): + if t1 is None: t1 = self.t1 + raise NotImplementedError
+ #return get_t1_diagnostic(t1) + +
[docs] def get_d1_diagnostic(self, t1=None): + if t1 is None: t1 = self.t1 + raise NotImplementedError
+ #return get_d1_diagnostic(t1) + +
[docs] def get_d2_diagnostic(self, t2=None): + if t2 is None: t2 = self.t2 + raise NotImplementedError
+ #return get_d2_diagnostic(t2) + +CCSD = UCCSD + + +class _ChemistsERIs(ccsd._ChemistsERIs): + def __init__(self, mol=None): + ccsd._ChemistsERIs.__init__(self, mol) + self.OOOO = None + self.OVOO = None + self.OVOV = None + self.OOVV = None + self.OVVO = None + self.OVVV = None + self.VVVV = None + + self.ooOO = None + self.ovOO = None + self.ovOV = None + self.ooVV = None + self.ovVO = None + self.ovVV = None + self.vvVV = None + + self.OVoo = None + self.OOvv = None + self.OVvo = None + + def _common_init_(self, mycc, mo_coeff=None): + if mo_coeff is None: + mo_coeff = mycc.mo_coeff + mo_idx = mycc.get_frozen_mask() + self.mo_coeff = mo_coeff = \ + (mo_coeff[0][:,mo_idx[0]], mo_coeff[1][:,mo_idx[1]]) + # Note: Recomputed fock matrix since SCF may not be fully converged. + dm = mycc._scf.make_rdm1(mycc.mo_coeff, mycc.mo_occ) + vhf = mycc._scf.get_veff(mycc.mol, dm) + fockao = mycc._scf.get_fock(vhf=vhf, dm=dm) + self.focka = reduce(np.dot, (mo_coeff[0].conj().T, fockao[0], mo_coeff[0])) + self.fockb = reduce(np.dot, (mo_coeff[1].conj().T, fockao[1], mo_coeff[1])) + self.fock = (self.focka, self.fockb) + + nocca, noccb = self.nocc = mycc.nocc + self.mol = mycc.mol + + mo_ea = self.focka.diagonal().real + mo_eb = self.fockb.diagonal().real + self.mo_energy = (mo_ea, mo_eb) + gap_a = abs(mo_ea[:nocca,None] - mo_ea[None,nocca:]) + gap_b = abs(mo_eb[:noccb,None] - mo_eb[None,noccb:]) + if gap_a.size > 0: + gap_a = gap_a.min() + else: + gap_a = 1e9 + if gap_b.size > 0: + gap_b = gap_b.min() + else: + gap_b = 1e9 + if gap_a < 1e-5 or gap_b < 1e-5: + logger.warn(mycc, 'HOMO-LUMO gap (%s,%s) too small for UCCSD', + gap_a, gap_b) + return self + + def get_ovvv(self, *slices): + return _get_ovvv_base(self.ovvv, *slices) + + def get_ovVV(self, *slices): + return _get_ovvv_base(self.ovVV, *slices) + + def get_OVvv(self, *slices): + return _get_ovvv_base(self.OVvv, *slices) + + def get_OVVV(self, *slices): + return _get_ovvv_base(self.OVVV, *slices) + + def _contract_VVVV_t2(self, mycc, t2, vvvv_or_direct=False, out=None, verbose=None): + if isinstance(vvvv_or_direct, np.ndarray): + vvvv = vvvv_or_direct + elif vvvv_or_direct: + vvvv = None + else: + vvvv = self.VVVV + return ccsd._contract_vvvv_t2(mycc, self.mol, vvvv, t2, out, verbose) + + def _contract_vvVV_t2(self, mycc, t2, vvvv_or_direct=False, out=None, verbose=None): + if isinstance(vvvv_or_direct, np.ndarray): + vvvv = vvvv_or_direct + elif vvvv_or_direct: + vvvv = None + else: + vvvv = self.vvVV + return ccsd._contract_vvvv_t2(mycc, self.mol, vvvv, t2, out, verbose) + +def _get_ovvv_base(ovvv, *slices): + if ovvv.ndim == 3: + ovw = np.asarray(ovvv[slices]) + nocc, nvir, nvir_pair = ovw.shape + ovvv = lib.unpack_tril(ovw.reshape(nocc*nvir,nvir_pair)) + nvir1 = ovvv.shape[2] + return ovvv.reshape(nocc,nvir,nvir1,nvir1) + elif slices: + return ovvv[slices] + else: + return ovvv + +def _make_eris_incore(mycc, mo_coeff=None, ao2mofn=None): + eris = _ChemistsERIs() + eris._common_init_(mycc, mo_coeff) + + nocca, noccb = mycc.nocc + nmoa, nmob = mycc.nmo + nvira, nvirb = nmoa-nocca, nmob-noccb + + moa = eris.mo_coeff[0] + mob = eris.mo_coeff[1] + nmoa = moa.shape[1] + nmob = mob.shape[1] + + if callable(ao2mofn): + eri_aa = ao2mofn(moa).reshape([nmoa]*4) + eri_bb = ao2mofn(mob).reshape([nmob]*4) + eri_ab = ao2mofn((moa,moa,mob,mob)) + else: + eri_aa = ao2mo.restore(1, ao2mo.full(mycc._scf._eri, moa), nmoa) + eri_bb = ao2mo.restore(1, ao2mo.full(mycc._scf._eri, mob), nmob) + eri_ab = ao2mo.general(mycc._scf._eri, (moa,moa,mob,mob), compact=False) + eri_ba = eri_ab.reshape(nmoa,nmoa,nmob,nmob).transpose(2,3,0,1) + + eri_aa = eri_aa.reshape(nmoa,nmoa,nmoa,nmoa) + eri_ab = eri_ab.reshape(nmoa,nmoa,nmob,nmob) + eri_ba = eri_ba.reshape(nmob,nmob,nmoa,nmoa) + eri_bb = eri_bb.reshape(nmob,nmob,nmob,nmob) + eris.oooo = eri_aa[:nocca,:nocca,:nocca,:nocca].copy() + eris.ovoo = eri_aa[:nocca,nocca:,:nocca,:nocca].copy() + eris.ovov = eri_aa[:nocca,nocca:,:nocca,nocca:].copy() + eris.oovv = eri_aa[:nocca,:nocca,nocca:,nocca:].copy() + eris.ovvo = eri_aa[:nocca,nocca:,nocca:,:nocca].copy() + eris.ovvv = eri_aa[:nocca,nocca:,nocca:,nocca:].copy() + eris.vvvv = eri_aa[nocca:,nocca:,nocca:,nocca:].copy() + + eris.OOOO = eri_bb[:noccb,:noccb,:noccb,:noccb].copy() + eris.OVOO = eri_bb[:noccb,noccb:,:noccb,:noccb].copy() + eris.OVOV = eri_bb[:noccb,noccb:,:noccb,noccb:].copy() + eris.OOVV = eri_bb[:noccb,:noccb,noccb:,noccb:].copy() + eris.OVVO = eri_bb[:noccb,noccb:,noccb:,:noccb].copy() + eris.OVVV = eri_bb[:noccb,noccb:,noccb:,noccb:].copy() + eris.VVVV = eri_bb[noccb:,noccb:,noccb:,noccb:].copy() + + eris.ooOO = eri_ab[:nocca,:nocca,:noccb,:noccb].copy() + eris.ovOO = eri_ab[:nocca,nocca:,:noccb,:noccb].copy() + eris.ovOV = eri_ab[:nocca,nocca:,:noccb,noccb:].copy() + eris.ooVV = eri_ab[:nocca,:nocca,noccb:,noccb:].copy() + eris.ovVO = eri_ab[:nocca,nocca:,noccb:,:noccb].copy() + eris.ovVV = eri_ab[:nocca,nocca:,noccb:,noccb:].copy() + eris.vvVV = eri_ab[nocca:,nocca:,noccb:,noccb:].copy() + + #eris.OOoo = eri_ba[:noccb,:noccb,:nocca,:nocca].copy() + eris.OVoo = eri_ba[:noccb,noccb:,:nocca,:nocca].copy() + #eris.OVov = eri_ba[:noccb,noccb:,:nocca,nocca:].copy() + eris.OOvv = eri_ba[:noccb,:noccb,nocca:,nocca:].copy() + eris.OVvo = eri_ba[:noccb,noccb:,nocca:,:nocca].copy() + eris.OVvv = eri_ba[:noccb,noccb:,nocca:,nocca:].copy() + #eris.VVvv = eri_ba[noccb:,noccb:,nocca:,nocca:].copy() + + if not callable(ao2mofn): + ovvv = eris.ovvv.reshape(nocca*nvira,nvira,nvira) + eris.ovvv = lib.pack_tril(ovvv).reshape(nocca,nvira,nvira*(nvira+1)//2) + eris.vvvv = ao2mo.restore(4, eris.vvvv, nvira) + + OVVV = eris.OVVV.reshape(noccb*nvirb,nvirb,nvirb) + eris.OVVV = lib.pack_tril(OVVV).reshape(noccb,nvirb,nvirb*(nvirb+1)//2) + eris.VVVV = ao2mo.restore(4, eris.VVVV, nvirb) + + ovVV = eris.ovVV.reshape(nocca*nvira,nvirb,nvirb) + eris.ovVV = lib.pack_tril(ovVV).reshape(nocca,nvira,nvirb*(nvirb+1)//2) + vvVV = eris.vvVV.reshape(nvira**2,nvirb**2) + idxa = np.tril_indices(nvira) + idxb = np.tril_indices(nvirb) + eris.vvVV = lib.take_2d(vvVV, idxa[0]*nvira+idxa[1], idxb[0]*nvirb+idxb[1]) + + OVvv = eris.OVvv.reshape(noccb*nvirb,nvira,nvira) + eris.OVvv = lib.pack_tril(OVvv).reshape(noccb,nvirb,nvira*(nvira+1)//2) + return eris + +def _make_df_eris_outcore(mycc, mo_coeff=None): + cput0 = (logger.process_clock(), logger.perf_counter()) + log = logger.Logger(mycc.stdout, mycc.verbose) + eris = _ChemistsERIs() + eris._common_init_(mycc, mo_coeff) + + moa, mob = eris.mo_coeff + nocca, noccb = eris.nocc + nao = moa.shape[0] + nmoa = moa.shape[1] + nmob = mob.shape[1] + nvira = nmoa - nocca + nvirb = nmob - noccb + nvira_pair = nvira*(nvira+1)//2 + nvirb_pair = nvirb*(nvirb+1)//2 + naux = mycc._scf.with_df.get_naoaux() + + # --- Three-center integrals + # (L|aa) + Loo = np.empty((naux,nocca,nocca)) + Lov = np.empty((naux,nocca,nvira)) + Lvo = np.empty((naux,nvira,nocca)) + Lvv = np.empty((naux,nvira_pair)) + # (L|bb) + LOO = np.empty((naux,noccb,noccb)) + LOV = np.empty((naux,noccb,nvirb)) + LVO = np.empty((naux,nvirb,noccb)) + LVV = np.empty((naux,nvirb_pair)) + p1 = 0 + oa, va = np.s_[:nocca], np.s_[nocca:] + ob, vb = np.s_[:noccb], np.s_[noccb:] + # Transform three-center integrals to MO basis + einsum = lib.einsum + for eri1 in mycc._scf.with_df.loop(): + eri1 = lib.unpack_tril(eri1).reshape(-1,nao,nao) + # (L|aa) + Lpq = einsum('Lab,ap,bq->Lpq', eri1, moa, moa) + p0, p1 = p1, p1 + Lpq.shape[0] + blk = np.s_[p0:p1] + Loo[blk] = Lpq[:,oa,oa] + Lov[blk] = Lpq[:,oa,va] + Lvo[blk] = Lpq[:,va,oa] + Lvv[blk] = lib.pack_tril(Lpq[:,va,va].reshape(-1,nvira,nvira)) + # (L|bb) + Lpq = einsum('Lab,ap,bq->Lpq', eri1, mob, mob) + LOO[blk] = Lpq[:,ob,ob] + LOV[blk] = Lpq[:,ob,vb] + LVO[blk] = Lpq[:,vb,ob] + LVV[blk] = lib.pack_tril(Lpq[:,vb,vb].reshape(-1,nvirb,nvirb)) + Loo = Loo.reshape(naux,nocca*nocca) + Lov = Lov.reshape(naux,nocca*nvira) + Lvo = Lvo.reshape(naux,nocca*nvira) + LOO = LOO.reshape(naux,noccb*noccb) + LOV = LOV.reshape(naux,noccb*nvirb) + LVO = LVO.reshape(naux,noccb*nvirb) + + # --- Four-center integrals + dot = lib.ddot + eris.feri1 = lib.H5TmpFile() + # (aa|aa) + eris.oooo = eris.feri1.create_dataset('oooo', (nocca,nocca,nocca,nocca), 'f8') + eris.oovv = eris.feri1.create_dataset('oovv', (nocca,nocca,nvira,nvira), 'f8', chunks=(nocca,nocca,1,nvira)) + eris.ovoo = eris.feri1.create_dataset('ovoo', (nocca,nvira,nocca,nocca), 'f8', chunks=(nocca,1,nocca,nocca)) + eris.ovvo = eris.feri1.create_dataset('ovvo', (nocca,nvira,nvira,nocca), 'f8', chunks=(nocca,1,nvira,nocca)) + eris.ovov = eris.feri1.create_dataset('ovov', (nocca,nvira,nocca,nvira), 'f8', chunks=(nocca,1,nocca,nvira)) + eris.ovvv = eris.feri1.create_dataset('ovvv', (nocca,nvira,nvira_pair), 'f8') + eris.vvvv = eris.feri1.create_dataset('vvvv', (nvira_pair,nvira_pair), 'f8') + eris.oooo[:] = dot(Loo.T, Loo).reshape(nocca,nocca,nocca,nocca) + eris.ovoo[:] = dot(Lov.T, Loo).reshape(nocca,nvira,nocca,nocca) + eris.oovv[:] = lib.unpack_tril(dot(Loo.T, Lvv)).reshape(nocca,nocca,nvira,nvira) + eris.ovvo[:] = dot(Lov.T, Lvo).reshape(nocca,nvira,nvira,nocca) + eris.ovov[:] = dot(Lov.T, Lov).reshape(nocca,nvira,nocca,nvira) + eris.ovvv[:] = dot(Lov.T, Lvv).reshape(nocca,nvira,nvira_pair) + eris.vvvv[:] = dot(Lvv.T, Lvv) + # (bb|bb) + eris.OOOO = eris.feri1.create_dataset('OOOO', (noccb,noccb,noccb,noccb), 'f8') + eris.OOVV = eris.feri1.create_dataset('OOVV', (noccb,noccb,nvirb,nvirb), 'f8', chunks=(noccb,noccb,1,nvirb)) + eris.OVOO = eris.feri1.create_dataset('OVOO', (noccb,nvirb,noccb,noccb), 'f8', chunks=(noccb,1,noccb,noccb)) + eris.OVVO = eris.feri1.create_dataset('OVVO', (noccb,nvirb,nvirb,noccb), 'f8', chunks=(noccb,1,nvirb,noccb)) + eris.OVOV = eris.feri1.create_dataset('OVOV', (noccb,nvirb,noccb,nvirb), 'f8', chunks=(noccb,1,noccb,nvirb)) + eris.OVVV = eris.feri1.create_dataset('OVVV', (noccb,nvirb,nvirb_pair), 'f8') + eris.VVVV = eris.feri1.create_dataset('VVVV', (nvirb_pair,nvirb_pair), 'f8') + eris.OOOO[:] = dot(LOO.T, LOO).reshape(noccb,noccb,noccb,noccb) + eris.OVOO[:] = dot(LOV.T, LOO).reshape(noccb,nvirb,noccb,noccb) + eris.OOVV[:] = lib.unpack_tril(dot(LOO.T, LVV)).reshape(noccb,noccb,nvirb,nvirb) + eris.OVVO[:] = dot(LOV.T, LVO).reshape(noccb,nvirb,nvirb,noccb) + eris.OVOV[:] = dot(LOV.T, LOV).reshape(noccb,nvirb,noccb,nvirb) + eris.OVVV[:] = dot(LOV.T, LVV).reshape(noccb,nvirb,nvirb_pair) + eris.VVVV[:] = dot(LVV.T, LVV) + # (aa|bb) + eris.ooOO = eris.feri1.create_dataset('ooOO', (nocca,nocca,noccb,noccb), 'f8') + eris.ooVV = eris.feri1.create_dataset('ooVV', (nocca,nocca,nvirb,nvirb), 'f8', chunks=(nocca,nocca,1,nvirb)) + eris.ovOO = eris.feri1.create_dataset('ovOO', (nocca,nvira,noccb,noccb), 'f8', chunks=(nocca,1,noccb,noccb)) + eris.ovVO = eris.feri1.create_dataset('ovVO', (nocca,nvira,nvirb,noccb), 'f8', chunks=(nocca,1,nvirb,noccb)) + eris.ovOV = eris.feri1.create_dataset('ovOV', (nocca,nvira,noccb,nvirb), 'f8', chunks=(nocca,1,noccb,nvirb)) + eris.ovVV = eris.feri1.create_dataset('ovVV', (nocca,nvira,nvirb_pair), 'f8') + eris.vvVV = eris.feri1.create_dataset('vvVV', (nvira_pair,nvirb_pair), 'f8') + eris.ooOO[:] = dot(Loo.T, LOO).reshape(nocca,nocca,noccb,noccb) + eris.ovOO[:] = dot(Lov.T, LOO).reshape(nocca,nvira,noccb,noccb) + eris.ooVV[:] = lib.unpack_tril(dot(Loo.T, LVV)).reshape(nocca,nocca,nvirb,nvirb) + eris.ovVO[:] = dot(Lov.T, LVO).reshape(nocca,nvira,nvirb,noccb) + eris.ovOV[:] = dot(Lov.T, LOV).reshape(nocca,nvira,noccb,nvirb) + eris.ovVV[:] = dot(Lov.T, LVV).reshape(nocca,nvira,nvirb_pair) + eris.vvVV[:] = dot(Lvv.T, LVV) + # (bb|aa) + eris.OOvv = eris.feri1.create_dataset('OOvv', (noccb,noccb,nvira,nvira), 'f8', chunks=(noccb,noccb,1,nvira)) + eris.OVoo = eris.feri1.create_dataset('OVoo', (noccb,nvirb,nocca,nocca), 'f8', chunks=(noccb,1,nocca,nocca)) + eris.OVvo = eris.feri1.create_dataset('OVvo', (noccb,nvirb,nvira,nocca), 'f8', chunks=(noccb,1,nvira,nocca)) + eris.OVvv = eris.feri1.create_dataset('OVvv', (noccb,nvirb,nvira_pair), 'f8') + eris.OVoo[:] = dot(LOV.T, Loo).reshape(noccb,nvirb,nocca,nocca) + eris.OOvv[:] = lib.unpack_tril(dot(LOO.T, Lvv)).reshape(noccb,noccb,nvira,nvira) + eris.OVvo[:] = dot(LOV.T, Lvo).reshape(noccb,nvirb,nvira,nocca) + eris.OVvv[:] = dot(LOV.T, Lvv).reshape(noccb,nvirb,nvira_pair) + + log.timer('CCSD integral transformation', *cput0) + return eris + +def _make_eris_outcore(mycc, mo_coeff=None): + eris = _ChemistsERIs() + eris._common_init_(mycc, mo_coeff) + + nocca, noccb = mycc.nocc + nmoa, nmob = mycc.nmo + nvira, nvirb = nmoa-nocca, nmob-noccb + + moa = eris.mo_coeff[0] + mob = eris.mo_coeff[1] + nmoa = moa.shape[1] + nmob = mob.shape[1] + + orboa = moa[:,:nocca] + orbob = mob[:,:noccb] + orbva = moa[:,nocca:] + orbvb = mob[:,noccb:] + eris.feri = lib.H5TmpFile() + eris.oooo = eris.feri.create_dataset('oooo', (nocca,nocca,nocca,nocca), 'f8') + eris.ovoo = eris.feri.create_dataset('ovoo', (nocca,nvira,nocca,nocca), 'f8') + eris.ovov = eris.feri.create_dataset('ovov', (nocca,nvira,nocca,nvira), 'f8') + eris.oovv = eris.feri.create_dataset('oovv', (nocca,nocca,nvira,nvira), 'f8') + eris.ovvo = eris.feri.create_dataset('ovvo', (nocca,nvira,nvira,nocca), 'f8') + eris.ovvv = eris.feri.create_dataset('ovvv', (nocca,nvira,nvira*(nvira+1)//2), 'f8') + #eris.vvvv = eris.feri.create_dataset('vvvv', (nvira,nvira,nvira,nvira), 'f8') + eris.OOOO = eris.feri.create_dataset('OOOO', (noccb,noccb,noccb,noccb), 'f8') + eris.OVOO = eris.feri.create_dataset('OVOO', (noccb,nvirb,noccb,noccb), 'f8') + eris.OVOV = eris.feri.create_dataset('OVOV', (noccb,nvirb,noccb,nvirb), 'f8') + eris.OOVV = eris.feri.create_dataset('OOVV', (noccb,noccb,nvirb,nvirb), 'f8') + eris.OVVO = eris.feri.create_dataset('OVVO', (noccb,nvirb,nvirb,noccb), 'f8') + eris.OVVV = eris.feri.create_dataset('OVVV', (noccb,nvirb,nvirb*(nvirb+1)//2), 'f8') + #eris.VVVV = eris.feri.create_dataset('VVVV', (nvirb,nvirb,nvirb,nvirb), 'f8') + eris.ooOO = eris.feri.create_dataset('ooOO', (nocca,nocca,noccb,noccb), 'f8') + eris.ovOO = eris.feri.create_dataset('ovOO', (nocca,nvira,noccb,noccb), 'f8') + eris.ovOV = eris.feri.create_dataset('ovOV', (nocca,nvira,noccb,nvirb), 'f8') + eris.ooVV = eris.feri.create_dataset('ooVV', (nocca,nocca,nvirb,nvirb), 'f8') + eris.ovVO = eris.feri.create_dataset('ovVO', (nocca,nvira,nvirb,noccb), 'f8') + eris.ovVV = eris.feri.create_dataset('ovVV', (nocca,nvira,nvirb*(nvirb+1)//2), 'f8') + #eris.vvVV = eris.feri.create_dataset('vvVV', (nvira,nvira,nvirb,nvirb), 'f8') + eris.OVoo = eris.feri.create_dataset('OVoo', (noccb,nvirb,nocca,nocca), 'f8') + eris.OOvv = eris.feri.create_dataset('OOvv', (noccb,noccb,nvira,nvira), 'f8') + eris.OVvo = eris.feri.create_dataset('OVvo', (noccb,nvirb,nvira,nocca), 'f8') + eris.OVvv = eris.feri.create_dataset('OVvv', (noccb,nvirb,nvira*(nvira+1)//2), 'f8') + + cput1 = logger.process_clock(), logger.perf_counter() + mol = mycc.mol + # <ij||pq> = <ij|pq> - <ij|qp> = (ip|jq) - (iq|jp) + tmpf = lib.H5TmpFile() + if nocca > 0: + ao2mo.general(mol, (orboa,moa,moa,moa), tmpf, 'aa') + buf = np.empty((nmoa,nmoa,nmoa)) + for i in range(nocca): + lib.unpack_tril(tmpf['aa'][i*nmoa:(i+1)*nmoa], out=buf) + eris.oooo[i] = buf[:nocca,:nocca,:nocca] + eris.ovoo[i] = buf[nocca:,:nocca,:nocca] + eris.ovov[i] = buf[nocca:,:nocca,nocca:] + eris.oovv[i] = buf[:nocca,nocca:,nocca:] + eris.ovvo[i] = buf[nocca:,nocca:,:nocca] + eris.ovvv[i] = lib.pack_tril(buf[nocca:,nocca:,nocca:]) + del (tmpf['aa']) + + if noccb > 0: + buf = np.empty((nmob,nmob,nmob)) + ao2mo.general(mol, (orbob,mob,mob,mob), tmpf, 'bb') + for i in range(noccb): + lib.unpack_tril(tmpf['bb'][i*nmob:(i+1)*nmob], out=buf) + eris.OOOO[i] = buf[:noccb,:noccb,:noccb] + eris.OVOO[i] = buf[noccb:,:noccb,:noccb] + eris.OVOV[i] = buf[noccb:,:noccb,noccb:] + eris.OOVV[i] = buf[:noccb,noccb:,noccb:] + eris.OVVO[i] = buf[noccb:,noccb:,:noccb] + eris.OVVV[i] = lib.pack_tril(buf[noccb:,noccb:,noccb:]) + del (tmpf['bb']) + + if nocca > 0: + buf = np.empty((nmoa,nmob,nmob)) + ao2mo.general(mol, (orboa,moa,mob,mob), tmpf, 'ab') + for i in range(nocca): + lib.unpack_tril(tmpf['ab'][i*nmoa:(i+1)*nmoa], out=buf) + eris.ooOO[i] = buf[:nocca,:noccb,:noccb] + eris.ovOO[i] = buf[nocca:,:noccb,:noccb] + eris.ovOV[i] = buf[nocca:,:noccb,noccb:] + eris.ooVV[i] = buf[:nocca,noccb:,noccb:] + eris.ovVO[i] = buf[nocca:,noccb:,:noccb] + eris.ovVV[i] = lib.pack_tril(buf[nocca:,noccb:,noccb:]) + del (tmpf['ab']) + + if noccb > 0: + buf = np.empty((nmob,nmoa,nmoa)) + ao2mo.general(mol, (orbob,mob,moa,moa), tmpf, 'ba') + for i in range(noccb): + lib.unpack_tril(tmpf['ba'][i*nmob:(i+1)*nmob], out=buf) + eris.OVoo[i] = buf[noccb:,:nocca,:nocca] + eris.OOvv[i] = buf[:noccb,nocca:,nocca:] + eris.OVvo[i] = buf[noccb:,nocca:,:nocca] + eris.OVvv[i] = lib.pack_tril(buf[noccb:,nocca:,nocca:]) + del (tmpf['ba']) + buf = None + cput1 = logger.timer_debug1(mycc, 'transforming oopq, ovpq', *cput1) + + if not mycc.direct: + ao2mo.full(mol, orbva, eris.feri, dataname='vvvv') + ao2mo.full(mol, orbvb, eris.feri, dataname='VVVV') + ao2mo.general(mol, (orbva,orbva,orbvb,orbvb), eris.feri, dataname='vvVV') + eris.vvvv = eris.feri['vvvv'] + eris.VVVV = eris.feri['VVVV'] + eris.vvVV = eris.feri['vvVV'] + cput1 = logger.timer_debug1(mycc, 'transforming vvvv', *cput1) + + return eris + + +def make_tau(t2, t1, r1, fac=1, out=None): + t1a, t1b = t1 + r1a, r1b = r1 + tau1aa = make_tau_aa(t2[0], t1a, r1a, fac, out) + tau1bb = make_tau_aa(t2[2], t1b, r1b, fac, out) + tau1ab = make_tau_ab(t2[1], t1, r1, fac, out) + return tau1aa, tau1ab, tau1bb + +def make_tau_aa(t2aa, t1a, r1a, fac=1, out=None): + tau1aa = np.einsum('ia,jb->ijab', t1a, r1a) + tau1aa-= np.einsum('ia,jb->jiab', t1a, r1a) + tau1aa = tau1aa - tau1aa.transpose(0,1,3,2) + tau1aa *= fac * .5 + tau1aa += t2aa + return tau1aa + +def make_tau_ab(t2ab, t1, r1, fac=1, out=None): + t1a, t1b = t1 + r1a, r1b = r1 + tau1ab = np.einsum('ia,jb->ijab', t1a, r1b) + tau1ab+= np.einsum('ia,jb->ijab', r1a, t1b) + tau1ab *= fac * .5 + tau1ab += t2ab + return tau1ab + +def _flops(nocc, nmo): + nocca, noccb = nocc + nmoa, nmob = nmo + nvira, nvirb = nmoa - nocca, nmob - noccb + + # vvvv + fp = nocca**2 * nvira**4 + fp += noccb**2 * nvirb**4 + fp += nocca * nvira**2 * noccb * nvirb**2 * 2 + + # ovvv + fp += nocca**2 * nvira**3 * 2 + fp += nocca**2 * nvira**3 * 2 + fp += nocca**2 * nvira**3 * 2 + fp += nocca**3 * nvira**3 * 2 + fp += nocca**3 * nvira**2 * 2 + + # OVVV + fp += noccb**2 * nvirb**3 * 2 + fp += noccb**2 * nvirb**3 * 2 + fp += noccb**2 * nvirb**3 * 2 + fp += noccb**3 * nvirb**3 * 2 + fp += noccb**3 * nvirb**2 * 2 + + # ovVV + fp += nocca * nvira * noccb * nvirb**2 * 2 + fp += nocca**2 * nvira * nvirb**2 * 2 + fp += nocca * nvira * noccb * nvirb**2 * 2 + fp += nocca * nvira * noccb * nvirb**2 * 2 + fp += nocca**2 * nvira * noccb * nvirb**2 * 2 + fp += nocca**2 * nvira * noccb * nvirb * 2 + + # OVvv + fp += nocca * nvira**2 * noccb * nvirb * 2 + fp += nvira**2 * noccb**2 * nvirb * 2 + fp += nocca * nvira**2 * noccb * nvirb * 2 + fp += nocca * nvira**2 * noccb * nvirb * 2 + fp += nocca * nvira**2 * noccb**2 * nvirb * 2 + fp += nocca * nvira * noccb**2 * nvirb * 2 + + fp += nocca**4 * nvira * 2 + fp += nocca**4 * nvira**2 * 2 + fp += nocca**4 * nvira**2 * 2 + fp += nocca**3 * nvira**2 * 2 + fp += nocca**3 * nvira**2 * 2 + fp += nocca**2 * nvira**3 * 2 + fp += nocca**3 * nvira**2 * 2 + fp += nocca**3 * nvira**3 * 2 + fp += nocca**2 * nvira**2 * noccb * nvirb * 2 + fp += nocca**3 * nvira**2 * 2 + fp += nocca**3 * nvira**2 * 2 + + fp += noccb**4 * nvirb * 2 + fp += noccb**4 * nvirb**2 * 2 + fp += noccb**4 * nvirb**2 * 2 + fp += noccb**3 * nvirb**2 * 2 + fp += noccb**3 * nvirb**2 * 2 + fp += noccb**2 * nvirb**3 * 2 + fp += noccb**3 * nvirb**2 * 2 + fp += noccb**3 * nvirb**3 * 2 + fp += noccb**2 * nvirb**2 * nocca * nvira * 2 + fp += noccb**3 * nvirb**2 * 2 + fp += noccb**3 * nvirb**2 * 2 + + fp += nocca**2 * nvira * noccb * nvirb * 2 + fp += nocca**2 * nvira * noccb * nvirb * 2 + fp += nocca**2 * noccb * nvirb**2 * 2 + fp += noccb**2 * nvirb * nocca * nvira * 2 + fp += noccb**2 * nvirb * nocca * nvira * 2 + fp += noccb**2 * nocca * nvira**2 * 2 + + fp += nocca**2 * noccb**2 * nvirb * 2 + fp += nocca**2 * nvira * noccb**2 * 2 + fp += nocca**2 * nvira * noccb**2 * nvirb * 2 + fp += nocca**2 * nvira * noccb**2 * nvirb * 2 + + fp += nocca * nvira**2 * noccb * nvirb * 2 + fp += nocca * nvira * noccb * nvirb**2 * 2 + fp += nocca * nvira**2 * noccb * nvirb * 2 + fp += nocca * nvira * noccb * nvirb**2 * 2 + + fp += nocca**2 * nvira**2 * noccb * nvirb * 2 + fp += nocca * nvira * noccb**2 * nvirb**2 * 2 + fp += nocca**2 * nvira**2 * noccb * nvirb * 2 + fp += nocca * nvira * noccb**2 * nvirb**2 * 2 + fp += nocca**2 * nvira * noccb * nvirb**2 * 2 + fp += nocca * nvira**2 * noccb**2 * nvirb * 2 + + fp += nocca * nvira * noccb**2 * nvirb * 2 + fp += nocca**2 * nvira * noccb * nvirb * 2 + fp += nocca * nvira * noccb**2 * nvirb * 2 + fp += nocca**2 * nvira * noccb * nvirb * 2 + fp += nocca**2 * noccb * nvirb**2 * 2 + fp += nocca * nvira**2 * noccb**2 * 2 + + fp += nocca**3 * nvira**2 * 2 + fp += nocca**3 * nvira**2 * 2 + fp += noccb**3 * nvirb**2 * 2 + fp += noccb**3 * nvirb**2 * 2 + + fp += nocca**2 * nvira * noccb * nvirb * 2 + fp += nocca**2 * noccb * nvirb**2 * 2 + fp += nocca**2 * nvira * noccb * nvirb * 2 + fp += noccb**2 * nvirb * nocca * nvira * 2 + fp += noccb**2 * nocca * nvira**2 * 2 + fp += noccb**2 * nvirb * nocca * nvira * 2 + + fp += nocca**3 * nvira**3 * 2 + fp += nocca**2 * nvira**2 * noccb * nvirb * 2 + fp += noccb**3 * nvirb**3 * 2 + fp += noccb**2 * nvirb**2 * nocca * nvira * 2 + + fp += nocca**2 * nvira**2 * noccb * nvirb * 2 + fp += nocca * nvira * noccb**2 * nvirb**2 * 2 + fp += nocca * nvira**2 * noccb**2 * nvirb * 2 + fp += nocca**2 * nvira**2 * noccb * nvirb * 2 + fp += nocca**2 * nvira**2 * noccb * nvirb * 2 + fp += nocca**2 * nvira * noccb * nvirb**2 * 2 + + fp += nocca**2 * nvira**3 * 2 + fp += noccb**2 * nvirb**3 * 2 + fp += nocca * nvira * noccb * nvirb**2 * 2 + fp += nocca * nvira**2 * noccb * nvirb * 2 + fp += nocca**3 * nvira**2 * 2 + fp += noccb**3 * nvirb**2 * 2 + fp += nocca * nvira * noccb**2 * nvirb * 2 + fp += nocca**2 * nvira * noccb * nvirb * 2 + + fp += nocca**2 * nvira**3 * 2 + fp += noccb**2 * nvirb**3 * 2 + fp += nocca**2 * nvira * noccb * nvirb * 2 + fp += nocca * nvira * noccb**2 * nvirb * 2 + return fp + + +if __name__ == '__main__': + from pyscf import gto + + mol = gto.Mole() + mol.atom = [['O', (0., 0., 0.)], + ['O', (1.21, 0., 0.)]] + mol.basis = 'cc-pvdz' + mol.spin = 2 + mol.build() + mf = scf.UHF(mol).run() + # Freeze 1s electrons + # also acceptable + #frozen = 4 or [2,2] + frozen = [[0,1], [0,1]] + ucc = UCCSD(mf, frozen=frozen) + eris = ucc.ao2mo() + ecc, t1, t2 = ucc.kernel(eris=eris) + print(ecc - -0.3486987472235819) + + mol = gto.Mole() + mol.atom = [ + [8 , (0. , 0. , 0.)], + [1 , (0. , -0.757 , 0.587)], + [1 , (0. , 0.757 , 0.587)]] + mol.basis = 'cc-pvdz' + mol.spin = 0 + mol.build() + mf = scf.UHF(mol).run() + + mycc = UCCSD(mf) + mycc.direct = True + ecc, t1, t2 = mycc.kernel() + print(ecc - -0.2133432712431435) + print(mycc.ccsd_t() - -0.003060021865720902) + + e,v = mycc.ipccsd(nroots=8) + print(e[0] - 0.4335604332073799) + print(e[2] - 0.5187659896045407) + print(e[4] - 0.6782876002229172) + + e,v = mycc.eaccsd(nroots=8) + print(e[0] - 0.16737886338859731) + print(e[2] - 0.24027613852009164) + print(e[4] - 0.51006797826488071) + + e,v = mycc.eeccsd(nroots=4) + print(e[0] - 0.2757159395886167) + print(e[1] - 0.2757159395886167) + print(e[2] - 0.2757159395886167) + print(e[3] - 0.3005716731825082) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/pyscf/ci/ucisd.html b/_modules/pyscf/ci/ucisd.html new file mode 100644 index 000000000..0d329b469 --- /dev/null +++ b/_modules/pyscf/ci/ucisd.html @@ -0,0 +1,1154 @@ + + + + + + pyscf.ci.ucisd — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for pyscf.ci.ucisd

+#!/usr/bin/env python
+# Copyright 2014-2021 The PySCF Developers. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Author: Qiming Sun <osirpt.sun@gmail.com>
+#
+
+'''
+Unrestricted CISD
+'''
+
+import numpy
+from pyscf import lib
+from pyscf.lib import logger
+from pyscf.cc import uccsd
+from pyscf.cc import uccsd_rdm
+from pyscf.ci import cisd
+from pyscf.fci import cistring
+from pyscf.cc.ccsd import _unpack_4fold
+
+def make_diagonal(myci, eris):
+    nocca, noccb = eris.nocc
+    nmoa = eris.focka.shape[0]
+    nmob = eris.fockb.shape[1]
+    nvira = nmoa - nocca
+    nvirb = nmob - noccb
+    jdiag_aa = numpy.zeros((nmoa,nmoa))
+    jdiag_ab = numpy.zeros((nmoa,nmob))
+    jdiag_bb = numpy.zeros((nmob,nmob))
+    jdiag_aa[:nocca,:nocca] = numpy.einsum('iijj->ij', eris.oooo)
+    jdiag_aa[:nocca,nocca:] = numpy.einsum('iijj->ij', eris.oovv)
+    jdiag_aa[nocca:,:nocca] = jdiag_aa[:nocca,nocca:].T
+    jdiag_ab[:nocca,:noccb] = numpy.einsum('iijj->ij', eris.ooOO)
+    jdiag_ab[:nocca,noccb:] = numpy.einsum('iijj->ij', eris.ooVV)
+    jdiag_ab[nocca:,:noccb] = numpy.einsum('iijj->ji', eris.OOvv)
+    jdiag_bb[:noccb,:noccb] = numpy.einsum('iijj->ij', eris.OOOO)
+    jdiag_bb[:noccb,noccb:] = numpy.einsum('iijj->ij', eris.OOVV)
+    jdiag_bb[noccb:,:noccb] = jdiag_bb[:noccb,noccb:].T
+
+    kdiag_aa = numpy.zeros((nmoa,nmoa))
+    kdiag_bb = numpy.zeros((nmob,nmob))
+    kdiag_aa[:nocca,:nocca] = numpy.einsum('ijji->ij', eris.oooo)
+    kdiag_aa[:nocca,nocca:] = numpy.einsum('ijji->ij', eris.ovvo)
+    kdiag_aa[nocca:,:nocca] = kdiag_aa[:nocca,nocca:].T
+    kdiag_bb[:noccb,:noccb] = numpy.einsum('ijji->ij', eris.OOOO)
+    kdiag_bb[:noccb,noccb:] = numpy.einsum('ijji->ij', eris.OVVO)
+    kdiag_bb[noccb:,:noccb] = kdiag_bb[:noccb,noccb:].T
+
+#    if eris.vvvv is not None and eris.vvVV is not None and eris.VVVV is not None:
+#        def diag_idx(n):
+#            idx = numpy.arange(n)
+#            return idx * (idx + 1) // 2 + idx
+#        jdiag_aa[nocca:,nocca:] = eris.vvvv[diag_idx(nvira)[:,None],diag_idx(nvira)]
+#        jdiag_ab[nocca:,noccb:] = eris.vvVV[diag_idx(nvira)[:,None],diag_idx(nvirb)]
+#        jdiag_bb[noccb:,noccb:] = eris.VVVV[diag_idx(nvirb)[:,None],diag_idx(nvirb)]
+#        kdiag_aa[nocca:,nocca:] = lib.unpack_tril(eris.vvvv.diagonal())
+#        kdiag_bb[noccb:,noccb:] = lib.unpack_tril(eris.VVVV.diagonal())
+
+    jkdiag_aa = jdiag_aa - kdiag_aa
+    jkdiag_bb = jdiag_bb - kdiag_bb
+
+    mo_ea = eris.focka.diagonal()
+    mo_eb = eris.fockb.diagonal()
+    ehf = (mo_ea[:nocca].sum() + mo_eb[:noccb].sum()
+           - jkdiag_aa[:nocca,:nocca].sum() * .5
+           - jdiag_ab[:nocca,:noccb].sum()
+           - jkdiag_bb[:noccb,:noccb].sum() * .5)
+
+    dia_a = lib.direct_sum('a-i->ia', mo_ea[nocca:], mo_ea[:nocca])
+    dia_a -= jkdiag_aa[:nocca,nocca:]
+    dia_b = lib.direct_sum('a-i->ia', mo_eb[noccb:], mo_eb[:noccb])
+    dia_b -= jkdiag_bb[:noccb,noccb:]
+    e1diag_a = dia_a + ehf
+    e1diag_b = dia_b + ehf
+
+    e2diag_aa = lib.direct_sum('ia+jb->ijab', dia_a, dia_a)
+    e2diag_aa += ehf
+    e2diag_aa += jkdiag_aa[:nocca,:nocca].reshape(nocca,nocca,1,1)
+    e2diag_aa -= jkdiag_aa[:nocca,nocca:].reshape(nocca,1,1,nvira)
+    e2diag_aa -= jkdiag_aa[:nocca,nocca:].reshape(1,nocca,nvira,1)
+    e2diag_aa += jkdiag_aa[nocca:,nocca:].reshape(1,1,nvira,nvira)
+
+    e2diag_ab = lib.direct_sum('ia+jb->ijab', dia_a, dia_b)
+    e2diag_ab += ehf
+    e2diag_ab += jdiag_ab[:nocca,:noccb].reshape(nocca,noccb,1,1)
+    e2diag_ab += jdiag_ab[nocca:,noccb:].reshape(1,1,nvira,nvirb)
+    e2diag_ab -= jdiag_ab[:nocca,noccb:].reshape(nocca,1,1,nvirb)
+    e2diag_ab -= jdiag_ab[nocca:,:noccb].T.reshape(1,noccb,nvira,1)
+
+    e2diag_bb = lib.direct_sum('ia+jb->ijab', dia_b, dia_b)
+    e2diag_bb += ehf
+    e2diag_bb += jkdiag_bb[:noccb,:noccb].reshape(noccb,noccb,1,1)
+    e2diag_bb -= jkdiag_bb[:noccb,noccb:].reshape(noccb,1,1,nvirb)
+    e2diag_bb -= jkdiag_bb[:noccb,noccb:].reshape(1,noccb,nvirb,1)
+    e2diag_bb += jkdiag_bb[noccb:,noccb:].reshape(1,1,nvirb,nvirb)
+
+    return amplitudes_to_cisdvec(ehf, (e1diag_a, e1diag_b),
+                                 (e2diag_aa, e2diag_ab, e2diag_bb))
+
+def contract(myci, civec, eris):
+    nocca, noccb = eris.nocc
+    nmoa = eris.focka.shape[0]
+    nmob = eris.fockb.shape[0]
+    nvira = nmoa - nocca
+    nvirb = nmob - noccb
+    c0, (c1a,c1b), (c2aa,c2ab,c2bb) = \
+            cisdvec_to_amplitudes(civec, (nmoa,nmob), (nocca,noccb), copy=False)
+
+    #:t2 += 0.5*einsum('ijef,abef->ijab', c2, eris.vvvv)
+    #:eris_vvvv = ao2mo.restore(1, eris.vvvv, nvira)
+    #:eris_vvVV = ucisd_slow._restore(eris.vvVV, nvira, nvirb)
+    #:eris_VVVV = ao2mo.restore(1, eris.VVVV, nvirb)
+    #:t2aa += lib.einsum('ijef,aebf->ijab', c2aa, eris_vvvv)
+    #:t2bb += lib.einsum('ijef,aebf->ijab', c2bb, eris_VVVV)
+    #:t2ab += lib.einsum('iJeF,aeBF->iJaB', c2ab, eris_vvVV)
+    t2aa, t2ab, t2bb = myci._add_vvvv(None, (c2aa,c2ab,c2bb), eris)
+    t2aa *= .25
+    t2bb *= .25
+
+    fooa = eris.focka[:nocca,:nocca]
+    foob = eris.fockb[:noccb,:noccb]
+    fova = eris.focka[:nocca,nocca:]
+    fovb = eris.fockb[:noccb,noccb:]
+    fvoa = eris.focka[nocca:,:nocca]
+    fvob = eris.fockb[noccb:,:noccb]
+    fvva = eris.focka[nocca:,nocca:]
+    fvvb = eris.fockb[noccb:,noccb:]
+
+    t0 = 0
+    t1a = 0
+    t1b = 0
+    eris_oovv = _cp(eris.oovv)
+    eris_ooVV = _cp(eris.ooVV)
+    eris_OOvv = _cp(eris.OOvv)
+    eris_OOVV = _cp(eris.OOVV)
+    eris_ovov = _cp(eris.ovov)
+    eris_ovOV = _cp(eris.ovOV)
+    eris_OVOV = _cp(eris.OVOV)
+    #:t2 += eris.oovv * c0
+    t2aa += .25 * c0 * eris_ovov.conj().transpose(0,2,1,3)
+    t2aa -= .25 * c0 * eris_ovov.conj().transpose(0,2,3,1)
+    t2bb += .25 * c0 * eris_OVOV.conj().transpose(0,2,1,3)
+    t2bb -= .25 * c0 * eris_OVOV.conj().transpose(0,2,3,1)
+    t2ab += c0 * eris_ovOV.conj().transpose(0,2,1,3)
+    #:t0 += numpy.einsum('ijab,ijab', eris.oovv, c2) * .25
+    t0 += numpy.einsum('iajb,ijab', eris_ovov, c2aa) * .25
+    t0 -= numpy.einsum('jaib,ijab', eris_ovov, c2aa) * .25
+    t0 += numpy.einsum('iajb,ijab', eris_OVOV, c2bb) * .25
+    t0 -= numpy.einsum('jaib,ijab', eris_OVOV, c2bb) * .25
+    t0 += numpy.einsum('iajb,ijab', eris_ovOV, c2ab)
+    eris_ovov = eris_ovOV = eris_OVOV = None
+
+    #:tmp = einsum('imae,mbej->ijab', c2, eris.ovvo)
+    #:tmp = tmp - tmp.transpose(0,1,3,2)
+    #:t2 += tmp - tmp.transpose(1,0,2,3)
+    eris_ovvo = _cp(eris.ovvo)
+    eris_ovVO = _cp(eris.ovVO)
+    eris_OVVO = _cp(eris.OVVO)
+    ovvo = eris_ovvo - eris_oovv.transpose(0,3,2,1)
+    OVVO = eris_OVVO - eris_OOVV.transpose(0,3,2,1)
+    t2aa += lib.einsum('imae,jbem->ijab', c2aa, ovvo)
+    t2aa += lib.einsum('iMaE,jbEM->ijab', c2ab, eris_ovVO)
+    t2bb += lib.einsum('imae,jbem->ijab', c2bb, OVVO)
+    t2bb += lib.einsum('mIeA,meBJ->IJAB', c2ab, eris_ovVO)
+    t2ab += lib.einsum('imae,meBJ->iJaB', c2aa, eris_ovVO)
+    t2ab += lib.einsum('iMaE,MEBJ->iJaB', c2ab, OVVO)
+    t2ab += lib.einsum('IMAE,jbEM->jIbA', c2bb, eris_ovVO)
+    t2ab += lib.einsum('mIeA,jbem->jIbA', c2ab, ovvo)
+    t2ab -= lib.einsum('iMeA,JMeb->iJbA', c2ab, eris_OOvv)
+    t2ab -= lib.einsum('mIaE,jmEB->jIaB', c2ab, eris_ooVV)
+
+    #:t1 += einsum('nf,nafi->ia', c1, eris.ovvo)
+    t1a += numpy.einsum('nf,nfai->ia', c1a, eris_ovvo)
+    t1a -= numpy.einsum('nf,nifa->ia', c1a, eris_oovv)
+    t1b += numpy.einsum('nf,nfai->ia', c1b, eris_OVVO)
+    t1b -= numpy.einsum('nf,nifa->ia', c1b, eris_OOVV)
+    t1b += numpy.einsum('nf,nfai->ia', c1a, eris_ovVO)
+    t1a += numpy.einsum('nf,iafn->ia', c1b, eris_ovVO)
+
+    #:t1 -= 0.5*einsum('mnae,mnie->ia', c2, eris.ooov)
+    eris_ovoo = _cp(eris.ovoo)
+    eris_OVOO = _cp(eris.OVOO)
+    eris_OVoo = _cp(eris.OVoo)
+    eris_ovOO = _cp(eris.ovOO)
+    t1a += lib.einsum('mnae,meni->ia', c2aa, eris_ovoo)
+    t1b += lib.einsum('mnae,meni->ia', c2bb, eris_OVOO)
+    t1a -= lib.einsum('nMaE,MEni->ia', c2ab, eris_OVoo)
+    t1b -= lib.einsum('mNeA,meNI->IA', c2ab, eris_ovOO)
+    #:tmp = einsum('ma,mbij->ijab', c1, eris.ovoo)
+    #:t2 -= tmp - tmp.transpose(0,1,3,2)
+    t2aa -= lib.einsum('ma,jbmi->jiba', c1a, eris_ovoo)
+    t2bb -= lib.einsum('ma,jbmi->jiba', c1b, eris_OVOO)
+    t2ab -= lib.einsum('ma,JBmi->iJaB', c1a, eris_OVoo)
+    t2ab -= lib.einsum('MA,ibMJ->iJbA', c1b, eris_ovOO)
+
+    #:#:t1 -= 0.5*einsum('imef,maef->ia', c2, eris.ovvv)
+    #:eris_ovvv = _cp(eris.ovvv)
+    #:eris_OVVV = _cp(eris.OVVV)
+    #:eris_ovVV = _cp(eris.ovVV)
+    #:eris_OVvv = _cp(eris.OVvv)
+    #:t1a += lib.einsum('mief,mefa->ia', c2aa, eris_ovvv)
+    #:t1b += lib.einsum('MIEF,MEFA->IA', c2bb, eris_OVVV)
+    #:t1a += lib.einsum('iMfE,MEaf->ia', c2ab, eris_OVvv)
+    #:t1b += lib.einsum('mIeF,meAF->IA', c2ab, eris_ovVV)
+    #:#:tmp = einsum('ie,jeba->ijab', c1, numpy.asarray(eris.ovvv).conj())
+    #:#:t2 += tmp - tmp.transpose(1,0,2,3)
+    #:t2aa += lib.einsum('ie,mbae->imab', c1a, eris_ovvv)
+    #:t2bb += lib.einsum('ie,mbae->imab', c1b, eris_OVVV)
+    #:t2ab += lib.einsum('ie,MBae->iMaB', c1a, eris_OVvv)
+    #:t2ab += lib.einsum('IE,maBE->mIaB', c1b, eris_ovVV)
+    mem_now = lib.current_memory()[0]
+    max_memory = max(0, lib.param.MAX_MEMORY - mem_now)
+    if nvira > 0 and nocca > 0:
+        blksize = max(int(max_memory*1e6/8/(nvira**2*nocca*2)), 2)
+        for p0,p1 in lib.prange(0, nvira, blksize):
+            ovvv = eris.get_ovvv(slice(None), slice(p0,p1))
+            t1a += lib.einsum('mief,mefa->ia', c2aa[:,:,p0:p1], ovvv)
+            t2aa[:,:,p0:p1] += lib.einsum('mbae,ie->miba', ovvv, c1a)
+            ovvv = None
+
+    if nvirb > 0 and noccb > 0:
+        blksize = max(int(max_memory*1e6/8/(nvirb**2*noccb*2)), 2)
+        for p0,p1 in lib.prange(0, nvirb, blksize):
+            OVVV = eris.get_OVVV(slice(None), slice(p0,p1))
+            t1b += lib.einsum('MIEF,MEFA->IA', c2bb[:,:,p0:p1], OVVV)
+            t2bb[:,:,p0:p1] += lib.einsum('mbae,ie->miba', OVVV, c1b)
+            OVVV = None
+
+    if nvirb > 0 and nocca > 0:
+        blksize = max(int(max_memory*1e6/8/(nvirb**2*nocca*2)), 2)
+        for p0,p1 in lib.prange(0, nvira, blksize):
+            ovVV = eris.get_ovVV(slice(None), slice(p0,p1))
+            t1b += lib.einsum('mIeF,meAF->IA', c2ab[:,:,p0:p1], ovVV)
+            t2ab[:,:,p0:p1] += lib.einsum('maBE,IE->mIaB', ovVV, c1b)
+            ovVV = None
+
+    if nvira > 0 and noccb > 0:
+        blksize = max(int(max_memory*1e6/8/(nvira**2*noccb*2)), 2)
+        for p0,p1 in lib.prange(0, nvirb, blksize):
+            OVvv = eris.get_OVvv(slice(None), slice(p0,p1))
+            t1a += lib.einsum('iMfE,MEaf->ia', c2ab[:,:,:,p0:p1], OVvv)
+            t2ab[:,:,:,p0:p1] += lib.einsum('MBae,ie->iMaB', OVvv, c1a)
+            OVvv = None
+
+    #:t1  = einsum('ie,ae->ia', c1, fvv)
+    t1a += lib.einsum('ie,ae->ia', c1a, fvva)
+    t1b += lib.einsum('ie,ae->ia', c1b, fvvb)
+    #:t1 -= einsum('ma,mi->ia', c1, foo)
+    t1a -= lib.einsum('ma,mi->ia', c1a, fooa)
+    t1b -= lib.einsum('ma,mi->ia', c1b, foob)
+    #:t1 += einsum('imae,me->ia', c2, fov)
+    t1a += numpy.einsum('imae,me->ia', c2aa, fova)
+    t1a += numpy.einsum('imae,me->ia', c2ab, fovb)
+    t1b += numpy.einsum('imae,me->ia', c2bb, fovb)
+    t1b += numpy.einsum('miea,me->ia', c2ab, fova)
+
+    #:tmp = einsum('ijae,be->ijab', c2, fvv)
+    #:t2  = tmp - tmp.transpose(0,1,3,2)
+    t2aa += lib.einsum('ijae,be->ijab', c2aa, fvva*.5)
+    t2bb += lib.einsum('ijae,be->ijab', c2bb, fvvb*.5)
+    t2ab += lib.einsum('iJaE,BE->iJaB', c2ab, fvvb)
+    t2ab += lib.einsum('iJeA,be->iJbA', c2ab, fvva)
+    #:tmp = einsum('imab,mj->ijab', c2, foo)
+    #:t2 -= tmp - tmp.transpose(1,0,2,3)
+    t2aa -= lib.einsum('imab,mj->ijab', c2aa, fooa*.5)
+    t2bb -= lib.einsum('imab,mj->ijab', c2bb, foob*.5)
+    t2ab -= lib.einsum('iMaB,MJ->iJaB', c2ab, foob)
+    t2ab -= lib.einsum('mIaB,mj->jIaB', c2ab, fooa)
+
+    #:tmp = numpy.einsum('ia,bj->ijab', c1, fvo)
+    #:tmp = tmp - tmp.transpose(0,1,3,2)
+    #:t2 += tmp - tmp.transpose(1,0,2,3)
+    t2aa += numpy.einsum('ia,bj->ijab', c1a, fvoa)
+    t2bb += numpy.einsum('ia,bj->ijab', c1b, fvob)
+    t2ab += numpy.einsum('ia,bj->ijab', c1a, fvob)
+    t2ab += numpy.einsum('ia,bj->jiba', c1b, fvoa)
+
+    t2aa = t2aa - t2aa.transpose(0,1,3,2)
+    t2aa = t2aa - t2aa.transpose(1,0,2,3)
+    t2bb = t2bb - t2bb.transpose(0,1,3,2)
+    t2bb = t2bb - t2bb.transpose(1,0,2,3)
+
+    #:t2 += 0.5*einsum('mnab,mnij->ijab', c2, eris.oooo)
+    eris_oooo = _cp(eris.oooo)
+    eris_OOOO = _cp(eris.OOOO)
+    eris_ooOO = _cp(eris.ooOO)
+    t2aa += lib.einsum('mnab,minj->ijab', c2aa, eris_oooo)
+    t2bb += lib.einsum('mnab,minj->ijab', c2bb, eris_OOOO)
+    t2ab += lib.einsum('mNaB,miNJ->iJaB', c2ab, eris_ooOO)
+
+    #:t1 += fov.conj() * c0
+    t1a += fova.conj() * c0
+    t1b += fovb.conj() * c0
+    #:t0  = numpy.einsum('ia,ia', fov, c1)
+    t0 += numpy.einsum('ia,ia', fova, c1a)
+    t0 += numpy.einsum('ia,ia', fovb, c1b)
+    return amplitudes_to_cisdvec(t0, (t1a,t1b), (t2aa,t2ab,t2bb))
+
+def amplitudes_to_cisdvec(c0, c1, c2):
+    c1a, c1b = c1
+    c2aa, c2ab, c2bb = c2
+    nocca, nvira = c1a.shape
+    noccb, nvirb = c1b.shape
+    def trilidx(n):
+        idx = numpy.tril_indices(n, -1)
+        return idx[0] * n + idx[1]
+    ooidxa = trilidx(nocca)
+    vvidxa = trilidx(nvira)
+    ooidxb = trilidx(noccb)
+    vvidxb = trilidx(nvirb)
+    size = (1, nocca*nvira, noccb*nvirb, nocca*noccb*nvira*nvirb,
+            len(ooidxa)*len(vvidxa), len(ooidxb)*len(vvidxb))
+    loc = numpy.cumsum(size)
+    civec = numpy.empty(loc[-1], dtype=c2ab.dtype)
+    civec[0] = c0
+    civec[loc[0]:loc[1]] = c1a.ravel()
+    civec[loc[1]:loc[2]] = c1b.ravel()
+    civec[loc[2]:loc[3]] = c2ab.ravel()
+    lib.take_2d(c2aa.reshape(nocca**2,nvira**2), ooidxa, vvidxa, out=civec[loc[3]:loc[4]])
+    lib.take_2d(c2bb.reshape(noccb**2,nvirb**2), ooidxb, vvidxb, out=civec[loc[4]:loc[5]])
+    return civec
+
+def cisdvec_to_amplitudes(civec, nmo, nocc, copy=True):
+    norba, norbb = nmo
+    nocca, noccb = nocc
+    nvira = norba - nocca
+    nvirb = norbb - noccb
+    nooa = nocca * (nocca-1) // 2
+    nvva = nvira * (nvira-1) // 2
+    noob = noccb * (noccb-1) // 2
+    nvvb = nvirb * (nvirb-1) // 2
+    size = (1, nocca*nvira, noccb*nvirb, nocca*noccb*nvira*nvirb,
+            nooa*nvva, noob*nvvb)
+    loc = numpy.cumsum(size)
+    c0 = civec[0]
+    cp = lambda x: (x.copy() if copy else x)
+    c1a = cp(civec[loc[0]:loc[1]].reshape(nocca,nvira))
+    c1b = cp(civec[loc[1]:loc[2]].reshape(noccb,nvirb))
+    c2ab = cp(civec[loc[2]:loc[3]].reshape(nocca,noccb,nvira,nvirb))
+    c2aa = _unpack_4fold(civec[loc[3]:loc[4]], nocca, nvira)
+    c2bb = _unpack_4fold(civec[loc[4]:loc[5]], noccb, nvirb)
+    return c0, (c1a,c1b), (c2aa,c2ab,c2bb)
+
+def to_fcivec(cisdvec, norb, nelec, frozen=None):
+    '''Convert CISD coefficients to FCI coefficients'''
+    if isinstance(nelec, (int, numpy.number)):
+        nelecb = nelec//2
+        neleca = nelec - nelecb
+    else:
+        neleca, nelecb = nelec
+
+    frozena_mask = numpy.zeros(norb, dtype=bool)
+    frozenb_mask = numpy.zeros(norb, dtype=bool)
+    if frozen is None:
+        nfroza = nfrozb = 0
+    elif isinstance(frozen, (int, numpy.integer)):
+        nfroza = nfrozb = frozen
+        frozena_mask[:frozen] = True
+        frozenb_mask[:frozen] = True
+    else:
+        nfroza = len(frozen[0])
+        nfrozb = len(frozen[1])
+        frozena_mask[frozen[0]] = True
+        frozenb_mask[frozen[1]] = True
+
+#    if nfroza != nfrozb:
+#        raise NotImplementedError
+    nocca = numpy.count_nonzero(~frozena_mask[:neleca])
+    noccb = numpy.count_nonzero(~frozenb_mask[:nelecb])
+    nmo = nmoa, nmob = norb - nfroza, norb - nfrozb
+    nocc = nocca, noccb
+    nvira, nvirb = nmoa - nocca, nmob - noccb
+
+    c0, c1, c2 = cisdvec_to_amplitudes(cisdvec, nmo, nocc, copy=False)
+    c1a, c1b = c1
+    c2aa, c2ab, c2bb = c2
+    t1addra, t1signa = cisd.tn_addrs_signs(nmoa, nocca, 1)
+    t1addrb, t1signb = cisd.tn_addrs_signs(nmob, noccb, 1)
+
+    na = cistring.num_strings(nmoa, nocca)
+    nb = cistring.num_strings(nmob, noccb)
+    fcivec = numpy.zeros((na,nb))
+    fcivec[0,0] = c0
+    fcivec[t1addra,0] = c1a.ravel() * t1signa
+    fcivec[0,t1addrb] = c1b.ravel() * t1signb
+    c2ab = c2ab.transpose(0,2,1,3).reshape(nocca*nvira,-1)
+    c2ab = numpy.einsum('i,j,ij->ij', t1signa, t1signb, c2ab)
+    fcivec[t1addra[:,None],t1addrb] = c2ab
+
+    if nocca > 1 and nvira > 1:
+        ooidx = numpy.tril_indices(nocca, -1)
+        vvidx = numpy.tril_indices(nvira, -1)
+        c2aa = c2aa[ooidx][:,vvidx[0],vvidx[1]]
+        t2addra, t2signa = cisd.tn_addrs_signs(nmoa, nocca, 2)
+        fcivec[t2addra,0] = c2aa.ravel() * t2signa
+    if noccb > 1 and nvirb > 1:
+        ooidx = numpy.tril_indices(noccb, -1)
+        vvidx = numpy.tril_indices(nvirb, -1)
+        c2bb = c2bb[ooidx][:,vvidx[0],vvidx[1]]
+        t2addrb, t2signb = cisd.tn_addrs_signs(nmob, noccb, 2)
+        fcivec[0,t2addrb] = c2bb.ravel() * t2signb
+
+    if nfroza == nfrozb == 0:
+        return fcivec
+
+    assert (norb < 63)
+
+    strsa = cistring.gen_strings4orblist(range(norb), neleca)
+    strsb = cistring.gen_strings4orblist(range(norb), nelecb)
+    na = len(strsa)
+    nb = len(strsb)
+    count_a = numpy.zeros(na, dtype=int)
+    count_b = numpy.zeros(nb, dtype=int)
+    parity_a = numpy.zeros(na, dtype=bool)
+    parity_b = numpy.zeros(nb, dtype=bool)
+    core_a_mask = numpy.ones(na, dtype=bool)
+    core_b_mask = numpy.ones(nb, dtype=bool)
+
+    for i in range(norb):
+        if frozena_mask[i]:
+            if i < neleca:
+                core_a_mask &= (strsa & (1 <<i )) != 0
+                parity_a ^= (count_a & 1) == 1
+            else:
+                core_a_mask &= (strsa & (1 << i)) == 0
+        else:
+            count_a += (strsa & (1 << i)) != 0
+
+        if frozenb_mask[i]:
+            if i < nelecb:
+                core_b_mask &= (strsb & (1 <<i )) != 0
+                parity_b ^= (count_b & 1) == 1
+            else:
+                core_b_mask &= (strsb & (1 << i)) == 0
+        else:
+            count_b += (strsb & (1 << i)) != 0
+
+    sub_strsa = strsa[core_a_mask & (count_a == nocca)]
+    sub_strsb = strsb[core_b_mask & (count_b == noccb)]
+    addrsa = cistring.strs2addr(norb, neleca, sub_strsa)
+    addrsb = cistring.strs2addr(norb, nelecb, sub_strsb)
+    fcivec1 = numpy.zeros((na,nb))
+    fcivec1[addrsa[:,None],addrsb] = fcivec
+    fcivec1[parity_a,:] *= -1
+    fcivec1[:,parity_b] *= -1
+    return fcivec1
+
+def from_fcivec(ci0, norb, nelec, frozen=None):
+    '''Extract CISD coefficients from FCI coefficients'''
+    if not (frozen is None or frozen == 0):
+        raise NotImplementedError
+
+    if isinstance(nelec, (int, numpy.number)):
+        nelecb = nelec//2
+        neleca = nelec - nelecb
+    else:
+        neleca, nelecb = nelec
+
+    norba = norbb = norb
+    nocca, noccb = neleca, nelecb
+    nvira = norba - nocca
+    nvirb = norbb - noccb
+    t1addra, t1signa = cisd.tn_addrs_signs(norba, nocca, 1)
+    t1addrb, t1signb = cisd.tn_addrs_signs(norbb, noccb, 1)
+
+    na = cistring.num_strings(norba, nocca)
+    nb = cistring.num_strings(norbb, noccb)
+    ci0 = ci0.reshape(na,nb)
+    c0 = ci0[0,0]
+    c1a = (ci0[t1addra,0] * t1signa).reshape(nocca,nvira)
+    c1b = (ci0[0,t1addrb] * t1signb).reshape(noccb,nvirb)
+
+    c2ab = numpy.einsum('i,j,ij->ij', t1signa, t1signb, ci0[t1addra[:,None],t1addrb])
+    c2ab = c2ab.reshape(nocca,nvira,noccb,nvirb).transpose(0,2,1,3)
+    t2addra, t2signa = cisd.tn_addrs_signs(norba, nocca, 2)
+    t2addrb, t2signb = cisd.tn_addrs_signs(norbb, noccb, 2)
+    c2aa = (ci0[t2addra,0] * t2signa).reshape(nocca*(nocca-1)//2, nvira*(nvira-1)//2)
+    c2aa = _unpack_4fold(c2aa, nocca, nvira)
+    c2bb = (ci0[0,t2addrb] * t2signb).reshape(noccb*(noccb-1)//2, nvirb*(nvirb-1)//2)
+    c2bb = _unpack_4fold(c2bb, noccb, nvirb)
+
+    return amplitudes_to_cisdvec(c0, (c1a,c1b), (c2aa,c2ab,c2bb))
+
+def overlap(cibra, ciket, nmo, nocc, s=None):
+    '''Overlap between two CISD wavefunctions.
+
+    Args:
+        s : a list of 2D arrays
+            The overlap matrix of non-orthogonal one-particle basis
+    '''
+    if s is None:
+        return numpy.dot(cibra, ciket, nmo, nocc)
+
+    if isinstance(nmo, (int, numpy.integer)):
+        nmoa = nmob = nmo
+    else:
+        nmoa, nmob = nmo
+    nocca, noccb = nocc
+    nvira, nvirb = nmoa - nocca, nmob - noccb
+
+    bra0, bra1, bra2 = cisdvec_to_amplitudes(cibra, (nmoa,nmob), nocc, copy=False)
+    ket0, ket1, ket2 = cisdvec_to_amplitudes(ciket, (nmoa,nmob), nocc, copy=False)
+
+    ooidx = numpy.tril_indices(nocca, -1)
+    vvidx = numpy.tril_indices(nvira, -1)
+    bra2aa = lib.take_2d(bra2[0].reshape(nocca**2,nvira**2),
+                         ooidx[0]*nocca+ooidx[1], vvidx[0]*nvira+vvidx[1])
+    ket2aa = lib.take_2d(ket2[0].reshape(nocca**2,nvira**2),
+                         ooidx[0]*nocca+ooidx[1], vvidx[0]*nvira+vvidx[1])
+
+    ooidx = numpy.tril_indices(noccb, -1)
+    vvidx = numpy.tril_indices(nvirb, -1)
+    bra2bb = lib.take_2d(bra2[2].reshape(noccb**2,nvirb**2),
+                         ooidx[0]*noccb+ooidx[1], vvidx[0]*nvirb+vvidx[1])
+    ket2bb = lib.take_2d(ket2[2].reshape(noccb**2,nvirb**2),
+                         ooidx[0]*noccb+ooidx[1], vvidx[0]*nvirb+vvidx[1])
+
+    nova = nocca * nvira
+    novb = noccb * nvirb
+    occlist0a = numpy.arange(nocca).reshape(1,nocca)
+    occlist0b = numpy.arange(noccb).reshape(1,noccb)
+    occlistsa = numpy.repeat(occlist0a, 1+nova+bra2aa.size, axis=0)
+    occlistsb = numpy.repeat(occlist0b, 1+novb+bra2bb.size, axis=0)
+    occlist0a = occlistsa[:1]
+    occlist1a = occlistsa[1:1+nova]
+    occlist2a = occlistsa[1+nova:]
+    occlist0b = occlistsb[:1]
+    occlist1b = occlistsb[1:1+novb]
+    occlist2b = occlistsb[1+novb:]
+
+    ia = 0
+    for i in range(nocca):
+        for a in range(nocca, nmoa):
+            occlist1a[ia,i] = a
+            ia += 1
+    ia = 0
+    for i in range(noccb):
+        for a in range(noccb, nmob):
+            occlist1b[ia,i] = a
+            ia += 1
+
+    ia = 0
+    for i in range(nocca):
+        for j in range(i):
+            for a in range(nocca, nmoa):
+                for b in range(nocca, a):
+                    occlist2a[ia,i] = a
+                    occlist2a[ia,j] = b
+                    ia += 1
+    ia = 0
+    for i in range(noccb):
+        for j in range(i):
+            for a in range(noccb, nmob):
+                for b in range(noccb, a):
+                    occlist2b[ia,i] = a
+                    occlist2b[ia,j] = b
+                    ia += 1
+
+    na = len(occlistsa)
+    trans_a = numpy.empty((na,na))
+    for i, idx in enumerate(occlistsa):
+        s_sub = s[0][idx].T.copy()
+        minors = s_sub[occlistsa]
+        trans_a[i,:] = numpy.linalg.det(minors)
+    nb = len(occlistsb)
+    trans_b = numpy.empty((nb,nb))
+    for i, idx in enumerate(occlistsb):
+        s_sub = s[1][idx].T.copy()
+        minors = s_sub[occlistsb]
+        trans_b[i,:] = numpy.linalg.det(minors)
+
+    # Mimic the transformation einsum('ab,ap->pb', FCI, trans).
+    # The wavefunction FCI has the [excitation_alpha,excitation_beta]
+    # representation.  The zero blocks like FCI[S_alpha,D_beta],
+    # FCI[D_alpha,D_beta], are explicitly excluded.
+    bra_mat = numpy.zeros((na,nb))
+    bra_mat[0,0] = bra0
+    bra_mat[1:1+nova,0] = bra1[0].ravel()
+    bra_mat[0,1:1+novb] = bra1[1].ravel()
+    bra_mat[1+nova:,0] = bra2aa.ravel()
+    bra_mat[0,1+novb:] = bra2bb.ravel()
+    bra_mat[1:1+nova,1:1+novb] = bra2[1].transpose(0,2,1,3).reshape(nova,novb)
+    c_s = lib.einsum('ab,ap,bq->pq', bra_mat, trans_a, trans_b)
+    ovlp  =  c_s[0,0] * ket0
+    ovlp += numpy.dot(c_s[1:1+nova,0], ket1[0].ravel())
+    ovlp += numpy.dot(c_s[0,1:1+novb], ket1[1].ravel())
+    ovlp += numpy.dot(c_s[1+nova:,0] , ket2aa.ravel())
+    ovlp += numpy.dot(c_s[0,1+novb:] , ket2bb.ravel())
+    ovlp += numpy.einsum('ijab,iajb->', ket2[1],
+                         c_s[1:1+nova,1:1+novb].reshape(nocca,nvira,noccb,nvirb))
+    return ovlp
+
+
+def make_rdm1(myci, civec=None, nmo=None, nocc=None, ao_repr=False):
+    r'''
+    One-particle spin density matrices dm1a, dm1b in MO basis (the
+    occupied-virtual blocks due to the orbital response contribution are not
+    included).
+
+    dm1a[p,q] = <q_alpha^\dagger p_alpha>
+    dm1b[p,q] = <q_beta^\dagger p_beta>
+
+    The convention of 1-pdm is based on McWeeney's book, Eq (5.4.20).
+    '''
+    if civec is None: civec = myci.ci
+    if nmo is None: nmo = myci.nmo
+    if nocc is None: nocc = myci.nocc
+    d1 = _gamma1_intermediates(myci, civec, nmo, nocc)
+    return uccsd_rdm._make_rdm1(myci, d1, with_frozen=True, ao_repr=ao_repr)
+
+def make_rdm2(myci, civec=None, nmo=None, nocc=None, ao_repr=False):
+    r'''
+    Two-particle spin density matrices dm2aa, dm2ab, dm2bb in MO basis
+
+    dm2aa[p,q,r,s] = <q_alpha^\dagger s_alpha^\dagger r_alpha p_alpha>
+    dm2ab[p,q,r,s] = <q_alpha^\dagger s_beta^\dagger r_beta p_alpha>
+    dm2bb[p,q,r,s] = <q_beta^\dagger s_beta^\dagger r_beta p_beta>
+
+    (p,q correspond to one particle and r,s correspond to another particle)
+    Two-particle density matrix should be contracted to integrals with the
+    pattern below to compute energy
+
+    E = numpy.einsum('pqrs,pqrs', eri_aa, dm2_aa)
+    E+= numpy.einsum('pqrs,pqrs', eri_ab, dm2_ab)
+    E+= numpy.einsum('pqrs,rspq', eri_ba, dm2_ab)
+    E+= numpy.einsum('pqrs,pqrs', eri_bb, dm2_bb)
+
+    where eri_aa[p,q,r,s] = (p_alpha q_alpha | r_alpha s_alpha )
+    eri_ab[p,q,r,s] = ( p_alpha q_alpha | r_beta s_beta )
+    eri_ba[p,q,r,s] = ( p_beta q_beta | r_alpha s_alpha )
+    eri_bb[p,q,r,s] = ( p_beta q_beta | r_beta s_beta )
+    '''
+    if civec is None: civec = myci.ci
+    if nmo is None: nmo = myci.nmo
+    if nocc is None: nocc = myci.nocc
+    d1 = _gamma1_intermediates(myci, civec, nmo, nocc)
+    d2 = _gamma2_intermediates(myci, civec, nmo, nocc)
+    return uccsd_rdm._make_rdm2(myci, d1, d2, with_dm1=True, with_frozen=True,
+                                ao_repr=ao_repr)
+
+def _gamma1_intermediates(myci, civec, nmo, nocc):
+    nmoa, nmob = nmo
+    nocca, noccb = nocc
+    c0, c1, c2 = cisdvec_to_amplitudes(civec, nmo, nocc, copy=False)
+    c1a, c1b = c1
+    c2aa, c2ab, c2bb = c2
+
+    dvoa = c0.conj() * c1a.T
+    dvob = c0.conj() * c1b.T
+    dvoa += numpy.einsum('jb,ijab->ai', c1a.conj(), c2aa)
+    dvoa += numpy.einsum('jb,ijab->ai', c1b.conj(), c2ab)
+    dvob += numpy.einsum('jb,ijab->ai', c1b.conj(), c2bb)
+    dvob += numpy.einsum('jb,jiba->ai', c1a.conj(), c2ab)
+    dova = dvoa.T.conj()
+    dovb = dvob.T.conj()
+
+    dooa  =-numpy.einsum('ia,ka->ik', c1a.conj(), c1a)
+    doob  =-numpy.einsum('ia,ka->ik', c1b.conj(), c1b)
+    dooa -= numpy.einsum('ijab,ikab->jk', c2aa.conj(), c2aa) * .5
+    dooa -= numpy.einsum('jiab,kiab->jk', c2ab.conj(), c2ab)
+    doob -= numpy.einsum('ijab,ikab->jk', c2bb.conj(), c2bb) * .5
+    doob -= numpy.einsum('ijab,ikab->jk', c2ab.conj(), c2ab)
+
+    dvva  = numpy.einsum('ia,ic->ac', c1a, c1a.conj())
+    dvvb  = numpy.einsum('ia,ic->ac', c1b, c1b.conj())
+    dvva += numpy.einsum('ijab,ijac->bc', c2aa, c2aa.conj()) * .5
+    dvva += numpy.einsum('ijba,ijca->bc', c2ab, c2ab.conj())
+    dvvb += numpy.einsum('ijba,ijca->bc', c2bb, c2bb.conj()) * .5
+    dvvb += numpy.einsum('ijab,ijac->bc', c2ab, c2ab.conj())
+    return (dooa, doob), (dova, dovb), (dvoa, dvob), (dvva, dvvb)
+
+def _gamma2_intermediates(myci, civec, nmo, nocc):
+    nmoa, nmob = nmo
+    nocca, noccb = nocc
+    c0, c1, c2 = cisdvec_to_amplitudes(civec, nmo, nocc, copy=False)
+    c1a, c1b = c1
+    c2aa, c2ab, c2bb = c2
+
+    goovv = c0 * c2aa.conj() * .5
+    goOvV = c0 * c2ab.conj()
+    gOOVV = c0 * c2bb.conj() * .5
+
+    govvv = numpy.einsum('ia,ikcd->kadc', c1a, c2aa.conj()) * .5
+    gOvVv = numpy.einsum('ia,ikcd->kadc', c1a, c2ab.conj())
+    goVvV = numpy.einsum('ia,kidc->kadc', c1b, c2ab.conj())
+    gOVVV = numpy.einsum('ia,ikcd->kadc', c1b, c2bb.conj()) * .5
+
+    gooov = numpy.einsum('ia,klac->klic', c1a, c2aa.conj()) *-.5
+    goOoV =-numpy.einsum('ia,klac->klic', c1a, c2ab.conj())
+    gOoOv =-numpy.einsum('ia,lkca->klic', c1b, c2ab.conj())
+    gOOOV = numpy.einsum('ia,klac->klic', c1b, c2bb.conj()) *-.5
+
+    goooo = numpy.einsum('ijab,klab->ijkl', c2aa.conj(), c2aa) * .25
+    goOoO = numpy.einsum('ijab,klab->ijkl', c2ab.conj(), c2ab)
+    gOOOO = numpy.einsum('ijab,klab->ijkl', c2bb.conj(), c2bb) * .25
+    gvvvv = numpy.einsum('ijab,ijcd->abcd', c2aa, c2aa.conj()) * .25
+    gvVvV = numpy.einsum('ijab,ijcd->abcd', c2ab, c2ab.conj())
+    gVVVV = numpy.einsum('ijab,ijcd->abcd', c2bb, c2bb.conj()) * .25
+
+    goVoV = numpy.einsum('jIaB,kIaC->jCkB', c2ab.conj(), c2ab)
+    gOvOv = numpy.einsum('iJbA,iKcA->JcKb', c2ab.conj(), c2ab)
+
+    govvo = numpy.einsum('ijab,ikac->jcbk', c2aa.conj(), c2aa)
+    govvo+= numpy.einsum('jIbA,kIcA->jcbk', c2ab.conj(), c2ab)
+    goVvO = numpy.einsum('jIbA,IKAC->jCbK', c2ab.conj(), c2bb)
+    goVvO+= numpy.einsum('ijab,iKaC->jCbK', c2aa.conj(), c2ab)
+    gOVVO = numpy.einsum('ijab,ikac->jcbk', c2bb.conj(), c2bb)
+    gOVVO+= numpy.einsum('iJaB,iKaC->JCBK', c2ab.conj(), c2ab)
+    govvo+= numpy.einsum('ia,jb->ibaj', c1a.conj(), c1a)
+    goVvO+= numpy.einsum('ia,jb->ibaj', c1a.conj(), c1b)
+    gOVVO+= numpy.einsum('ia,jb->ibaj', c1b.conj(), c1b)
+
+    dovov = goovv.transpose(0,2,1,3) - goovv.transpose(0,3,1,2)
+    doooo = goooo.transpose(0,2,1,3) - goooo.transpose(0,3,1,2)
+    dvvvv = gvvvv.transpose(0,2,1,3) - gvvvv.transpose(0,3,1,2)
+    dovvo = govvo.transpose(0,2,1,3)
+    dooov = gooov.transpose(0,2,1,3) - gooov.transpose(1,2,0,3)
+    dovvv = govvv.transpose(0,2,1,3) - govvv.transpose(0,3,1,2)
+    doovv =-dovvo.transpose(0,3,2,1)
+    dvvov = None
+
+    dOVOV = gOOVV.transpose(0,2,1,3) - gOOVV.transpose(0,3,1,2)
+    dOOOO = gOOOO.transpose(0,2,1,3) - gOOOO.transpose(0,3,1,2)
+    dVVVV = gVVVV.transpose(0,2,1,3) - gVVVV.transpose(0,3,1,2)
+    dOVVO = gOVVO.transpose(0,2,1,3)
+    dOOOV = gOOOV.transpose(0,2,1,3) - gOOOV.transpose(1,2,0,3)
+    dOVVV = gOVVV.transpose(0,2,1,3) - gOVVV.transpose(0,3,1,2)
+    dOOVV =-dOVVO.transpose(0,3,2,1)
+    dVVOV = None
+
+    dovOV = goOvV.transpose(0,2,1,3)
+    dooOO = goOoO.transpose(0,2,1,3)
+    dvvVV = gvVvV.transpose(0,2,1,3)
+    dovVO = goVvO.transpose(0,2,1,3)
+    dooOV = goOoV.transpose(0,2,1,3)
+    dovVV = goVvV.transpose(0,2,1,3)
+    dooVV = goVoV.transpose(0,2,1,3)
+    dooVV = -(dooVV + dooVV.transpose(1,0,3,2).conj()) * .5
+    dvvOV = None
+
+    dOVov = None
+    dOOoo = None
+    dVVvv = None
+    dOVvo = dovVO.transpose(3,2,1,0).conj()
+    dOOov = gOoOv.transpose(0,2,1,3)
+    dOVvv = gOvVv.transpose(0,2,1,3)
+    dOOvv = gOvOv.transpose(0,2,1,3)
+    dOOvv =-(dOOvv + dOOvv.transpose(1,0,3,2).conj()) * .5
+    dVVov = None
+
+    return ((dovov, dovOV, dOVov, dOVOV),
+            (dvvvv, dvvVV, dVVvv, dVVVV),
+            (doooo, dooOO, dOOoo, dOOOO),
+            (doovv, dooVV, dOOvv, dOOVV),
+            (dovvo, dovVO, dOVvo, dOVVO),
+            (dvvov, dvvOV, dVVov, dVVOV),
+            (dovvv, dovVV, dOVvv, dOVVV),
+            (dooov, dooOV, dOOov, dOOOV))
+
+def trans_rdm1(myci, cibra, ciket, nmo=None, nocc=None):
+    r'''
+    One-particle spin density matrices dm1a, dm1b in MO basis (the
+    occupied-virtual blocks due to the orbital response contribution are not
+    included).
+
+    dm1a[p,q] = <q_alpha^\dagger p_alpha>
+    dm1b[p,q] = <q_beta^\dagger p_beta>
+
+    The convention of 1-pdm is based on McWeeney's book, Eq (5.4.20).
+    '''
+    if nmo is None: nmo = myci.nmo
+    if nocc is None: nocc = myci.nocc
+    c0bra, c1bra, c2bra = myci.cisdvec_to_amplitudes(cibra, nmo, nocc, copy=False)
+    c0ket, c1ket, c2ket = myci.cisdvec_to_amplitudes(ciket, nmo, nocc, copy=False)
+
+    nmoa, nmob = nmo
+    nocca, noccb = nocc
+    bra1a, bra1b = c1bra
+    bra2aa, bra2ab, bra2bb = c2bra
+    ket1a, ket1b = c1ket
+    ket2aa, ket2ab, ket2bb = c2ket
+
+    dvoa = c0bra.conj() * ket1a.T
+    dvob = c0bra.conj() * ket1b.T
+    dvoa += numpy.einsum('jb,ijab->ai', bra1a.conj(), ket2aa)
+    dvoa += numpy.einsum('jb,ijab->ai', bra1b.conj(), ket2ab)
+    dvob += numpy.einsum('jb,ijab->ai', bra1b.conj(), ket2bb)
+    dvob += numpy.einsum('jb,jiba->ai', bra1a.conj(), ket2ab)
+
+    dova = c0ket * bra1a.conj()
+    dovb = c0ket * bra1b.conj()
+    dova += numpy.einsum('jb,ijab->ia', ket1a.conj(), bra2aa)
+    dova += numpy.einsum('jb,ijab->ia', ket1b.conj(), bra2ab)
+    dovb += numpy.einsum('jb,ijab->ia', ket1b.conj(), bra2bb)
+    dovb += numpy.einsum('jb,jiba->ia', ket1a.conj(), bra2ab)
+
+    dooa  =-numpy.einsum('ia,ka->ik', bra1a.conj(), ket1a)
+    doob  =-numpy.einsum('ia,ka->ik', bra1b.conj(), ket1b)
+    dooa -= numpy.einsum('ijab,ikab->jk', bra2aa.conj(), ket2aa) * .5
+    dooa -= numpy.einsum('jiab,kiab->jk', bra2ab.conj(), ket2ab)
+    doob -= numpy.einsum('ijab,ikab->jk', bra2bb.conj(), ket2bb) * .5
+    doob -= numpy.einsum('ijab,ikab->jk', bra2ab.conj(), ket2ab)
+
+    dvva  = numpy.einsum('ia,ic->ac', ket1a, bra1a.conj())
+    dvvb  = numpy.einsum('ia,ic->ac', ket1b, bra1b.conj())
+    dvva += numpy.einsum('ijab,ijac->bc', ket2aa, bra2aa.conj()) * .5
+    dvva += numpy.einsum('ijba,ijca->bc', ket2ab, bra2ab.conj())
+    dvvb += numpy.einsum('ijba,ijca->bc', ket2bb, bra2bb.conj()) * .5
+    dvvb += numpy.einsum('ijab,ijac->bc', ket2ab, bra2ab.conj())
+
+    dm1a = numpy.empty((nmoa,nmoa), dtype=dooa.dtype)
+    dm1a[:nocca,:nocca] = dooa
+    dm1a[:nocca,nocca:] = dova
+    dm1a[nocca:,:nocca] = dvoa
+    dm1a[nocca:,nocca:] = dvva
+    norm = numpy.dot(cibra, ciket)
+    dm1a[numpy.diag_indices(nocca)] += norm
+
+    dm1b = numpy.empty((nmob,nmob), dtype=dooa.dtype)
+    dm1b[:noccb,:noccb] = doob
+    dm1b[:noccb,noccb:] = dovb
+    dm1b[noccb:,:noccb] = dvob
+    dm1b[noccb:,noccb:] = dvvb
+    dm1b[numpy.diag_indices(noccb)] += norm
+
+    if myci.frozen is not None:
+        nmoa = myci.mo_occ[0].size
+        nmob = myci.mo_occ[1].size
+        nocca = numpy.count_nonzero(myci.mo_occ[0] > 0)
+        noccb = numpy.count_nonzero(myci.mo_occ[1] > 0)
+        rdm1a = numpy.zeros((nmoa,nmoa), dtype=dm1a.dtype)
+        rdm1b = numpy.zeros((nmob,nmob), dtype=dm1b.dtype)
+        rdm1a[numpy.diag_indices(nocca)] = norm
+        rdm1b[numpy.diag_indices(noccb)] = norm
+        moidx = myci.get_frozen_mask()
+        moidxa = numpy.where(moidx[0])[0]
+        moidxb = numpy.where(moidx[1])[0]
+        rdm1a[moidxa[:,None],moidxa] = dm1a
+        rdm1b[moidxb[:,None],moidxb] = dm1b
+        dm1a = rdm1a
+        dm1b = rdm1b
+    return dm1a, dm1b
+
+
+class UCISD(cisd.CISD):
+
+
[docs] def vector_size(self): + norba, norbb = self.nmo + nocca, noccb = self.nocc + nvira = norba - nocca + nvirb = norbb - noccb + nooa = nocca * (nocca-1) // 2 + nvva = nvira * (nvira-1) // 2 + noob = noccb * (noccb-1) // 2 + nvvb = nvirb * (nvirb-1) // 2 + size = (1 + nocca*nvira + noccb*nvirb + + nocca*noccb*nvira*nvirb + nooa*nvva + noob*nvvb) + return size
+ + get_nocc = uccsd.get_nocc + get_nmo = uccsd.get_nmo + get_frozen_mask = uccsd.get_frozen_mask + +
[docs] def get_init_guess(self, eris=None, nroots=1, diag=None): + if eris is None: eris = self.ao2mo(self.mo_coeff) + nocca, noccb = self.nocc + mo_ea, mo_eb = eris.mo_energy + eia_a = mo_ea[:nocca,None] - mo_ea[None,nocca:] + eia_b = mo_eb[:noccb,None] - mo_eb[None,noccb:] + t1a = eris.focka[:nocca,nocca:].conj() / eia_a + t1b = eris.fockb[:noccb,noccb:].conj() / eia_b + + eris_ovov = _cp(eris.ovov) + eris_ovOV = _cp(eris.ovOV) + eris_OVOV = _cp(eris.OVOV) + t2aa = eris_ovov.transpose(0,2,1,3) - eris_ovov.transpose(0,2,3,1) + t2bb = eris_OVOV.transpose(0,2,1,3) - eris_OVOV.transpose(0,2,3,1) + t2ab = eris_ovOV.transpose(0,2,1,3).copy() + t2aa = t2aa.conj() + t2ab = t2ab.conj() + t2bb = t2bb.conj() + t2aa /= lib.direct_sum('ia+jb->ijab', eia_a, eia_a) + t2ab /= lib.direct_sum('ia+jb->ijab', eia_a, eia_b) + t2bb /= lib.direct_sum('ia+jb->ijab', eia_b, eia_b) + + emp2 = numpy.einsum('iajb,ijab', eris_ovov, t2aa) * .25 + emp2 -= numpy.einsum('jaib,ijab', eris_ovov, t2aa) * .25 + emp2 += numpy.einsum('iajb,ijab', eris_OVOV, t2bb) * .25 + emp2 -= numpy.einsum('jaib,ijab', eris_OVOV, t2bb) * .25 + emp2 += numpy.einsum('iajb,ijab', eris_ovOV, t2ab) + self.emp2 = emp2.real + logger.info(self, 'Init t2, MP2 energy = %.15g', self.emp2) + + if abs(emp2) < 1e-3 and (abs(t1a).sum()+abs(t1b).sum()) < 1e-3: + t1a = 1e-1 / eia_a + t1b = 1e-1 / eia_b + + ci_guess = amplitudes_to_cisdvec(1, (t1a,t1b), (t2aa,t2ab,t2bb)) + + if nroots > 1: + civec_size = ci_guess.size + ci1_size = t1a.size + t1b.size + dtype = ci_guess.dtype + nroots = min(ci1_size+1, nroots) + + if diag is None: + idx = range(1, nroots) + else: + idx = diag[:ci1_size+1].argsort()[1:nroots] # exclude HF determinant + + ci_guess = [ci_guess] + for i in idx: + g = numpy.zeros(civec_size, dtype) + g[i] = 1.0 + ci_guess.append(g) + + return self.emp2, ci_guess
+ + contract = contract + make_diagonal = make_diagonal + _dot = None + _add_vvvv = uccsd._add_vvvv + + def ao2mo(self, mo_coeff=None): + nmoa, nmob = self.get_nmo() + nao = self.mo_coeff[0].shape[0] + nmo_pair = nmoa * (nmoa+1) // 2 + nao_pair = nao * (nao+1) // 2 + mem_incore = (max(nao_pair**2, nmoa**4) + nmo_pair**2) * 8/1e6 + mem_now = lib.current_memory()[0] + if (self._scf._eri is not None and + (mem_incore+mem_now < self.max_memory) or self.mol.incore_anyway): + return uccsd._make_eris_incore(self, mo_coeff) + + elif getattr(self._scf, 'with_df', None): + return uccsd._make_df_eris_outcore(self, mo_coeff) + else: + return uccsd._make_eris_outcore(self, mo_coeff) + +
[docs] def to_fcivec(self, cisdvec, nmo=None, nocc=None): + return to_fcivec(cisdvec, nmo, nocc)
+ +
[docs] def from_fcivec(self, fcivec, nmo=None, nocc=None): + return from_fcivec(fcivec, nmo, nocc)
+ +
[docs] def amplitudes_to_cisdvec(self, c0, c1, c2): + return amplitudes_to_cisdvec(c0, c1, c2)
+ +
[docs] def cisdvec_to_amplitudes(self, civec, nmo=None, nocc=None, copy=True): + if nmo is None: nmo = self.nmo + if nocc is None: nocc = self.nocc + return cisdvec_to_amplitudes(civec, nmo, nocc, copy=copy)
+ + make_rdm1 = make_rdm1 + make_rdm2 = make_rdm2 + trans_rdm1 = trans_rdm1 + +
[docs] def nuc_grad_method(self): + from pyscf.grad import ucisd + return ucisd.Gradients(self)
+ +CISD = UCISD + +from pyscf import scf +scf.uhf.UHF.CISD = lib.class_as_method(CISD) + +def _cp(a): + return numpy.array(a, copy=False, order='C') + + +if __name__ == '__main__': + from pyscf import gto + + mol = gto.Mole() + mol.verbose = 0 + mol.atom = [ + ['O', ( 0., 0. , 0. )], + ['H', ( 0., -0.757, 0.587)], + ['H', ( 0., 0.757 , 0.587)],] + mol.basis = {'H': 'sto-3g', + 'O': 'sto-3g',} +# mol.build() +# mf = scf.UHF(mol).run(conv_tol=1e-14) +# myci = CISD(mf) +# eris = myci.ao2mo() +# ecisd, civec = myci.kernel(eris=eris) +# print(ecisd - -0.048878084082066106) +# +# nmoa = mf.mo_energy[0].size +# nmob = mf.mo_energy[1].size +# rdm1 = myci.make_rdm1(civec) +# rdm2 = myci.make_rdm2(civec) +# eri_aa = ao2mo.kernel(mf._eri, mf.mo_coeff[0], compact=False).reshape([nmoa]*4) +# eri_bb = ao2mo.kernel(mf._eri, mf.mo_coeff[1], compact=False).reshape([nmob]*4) +# eri_ab = ao2mo.kernel(mf._eri, [mf.mo_coeff[0], mf.mo_coeff[0], +# mf.mo_coeff[1], mf.mo_coeff[1]], compact=False) +# eri_ab = eri_ab.reshape(nmoa,nmoa,nmob,nmob) +# h1a = reduce(numpy.dot, (mf.mo_coeff[0].T, mf.get_hcore(), mf.mo_coeff[0])) +# h1b = reduce(numpy.dot, (mf.mo_coeff[1].T, mf.get_hcore(), mf.mo_coeff[1])) +# e2 = (numpy.einsum('ij,ji', h1a, rdm1[0]) + +# numpy.einsum('ij,ji', h1b, rdm1[1]) + +# numpy.einsum('ijkl,ijkl', eri_aa, rdm2[0]) * .5 + +# numpy.einsum('ijkl,ijkl', eri_ab, rdm2[1]) + +# numpy.einsum('ijkl,ijkl', eri_bb, rdm2[2]) * .5) +# print(ecisd + mf.e_tot - mol.energy_nuc() - e2) # = 0 +# +# print(abs(rdm1[0] - (numpy.einsum('ijkk->ji', rdm2[0]) + +# numpy.einsum('ijkk->ji', rdm2[1]))/(mol.nelectron-1)).sum()) +# print(abs(rdm1[1] - (numpy.einsum('ijkk->ji', rdm2[2]) + +# numpy.einsum('kkij->ji', rdm2[1]))/(mol.nelectron-1)).sum()) + + if 1: + from pyscf.ci import ucisd + from pyscf import fci + nmo = 8 + nocc = nocca, noccb = (4,3) + numpy.random.seed(2) + nvira, nvirb = nmo-nocca, nmo-noccb + cibra = ucisd.amplitudes_to_cisdvec(numpy.random.rand(1), + (numpy.random.rand(nocca,nvira), + numpy.random.rand(noccb,nvirb)), + (numpy.random.rand(nocca,nocca,nvira,nvira), + numpy.random.rand(nocca,noccb,nvira,nvirb), + numpy.random.rand(noccb,noccb,nvirb,nvirb))) + ciket = ucisd.amplitudes_to_cisdvec(numpy.random.rand(1), + (numpy.random.rand(nocca,nvira), + numpy.random.rand(noccb,nvirb)), + (numpy.random.rand(nocca,nocca,nvira,nvira), + numpy.random.rand(nocca,noccb,nvira,nvirb), + numpy.random.rand(noccb,noccb,nvirb,nvirb))) + fcibra = ucisd.to_fcivec(cibra, nmo, nocc) + fciket = ucisd.to_fcivec(ciket, nmo, nocc) + s_mo = (numpy.random.random((nmo,nmo)), + numpy.random.random((nmo,nmo))) + s_mo = (s_mo[0], s_mo[0]) + s0 = fci.addons.overlap(fcibra, fciket, nmo, nocc, s_mo) + s1 = ucisd.overlap(cibra, ciket, nmo, nocc, s_mo) + print(s1, s0, 9) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta.html b/_modules/vayesta.html new file mode 100644 index 000000000..804496d0d --- /dev/null +++ b/_modules/vayesta.html @@ -0,0 +1,250 @@ + + + + + + vayesta — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta

+import sys
+import os.path
+import logging
+import subprocess
+import platform
+import importlib
+
+from vayesta.core import cmdargs
+from vayesta.mpi import init_mpi
+
+
+__version__ = '1.0.1'
+
+# Command line arguments
+args = cmdargs.parse_cmd_args()
+
+# Initialization of MPI
+if args.mpi is None:
+    init_mpi(True, required=False)
+else:
+    init_mpi(args.mpi)
+from vayesta.mpi import mpi
+
+# Logging
+from vayesta.core import vlog
+if args.output_dir:
+    os.makedirs(args.output_dir, exist_ok=True)
+
+vlog.init_logging()
+log = logging.getLogger(__name__)
+log.setLevel(args.log_level)
+
+fmt = vlog.VFormatter(indent=True)
+# Log to stream
+if (not args.quiet and mpi.is_master):
+    # Everything except logging.OUTPUT goes to stderr:
+    errh = vlog.VStreamHandler(sys.stderr, formatter=fmt)
+    errh.addFilter(vlog.LevelExcludeFilter(exclude=[logging.OUTPUT]))
+    log.addHandler(errh)
+    # Log level logging.OUTPUT to stdout
+    outh = vlog.VStreamHandler(sys.stdout, formatter=fmt)
+    outh.addFilter(vlog.LevelIncludeFilter(include=[logging.OUTPUT]))
+    log.addHandler(outh)
+# Log to file
+if (args.log or not mpi.is_master):
+    logname = (args.log or "output")
+    if args.output_dir:
+        logname = os.path.join(args.output_dir, logname)
+    log.addHandler(vlog.VFileHandler(logname, formatter=fmt))
+# Error handler
+errlog = args.errlog
+if errlog:
+    errfmt = vlog.VFormatter(show_mpi_rank=True, indent=False)
+    if args.output_dir:
+        errlog = os.path.join(args.output_dir, errlog)
+    errhandler = vlog.VFileHandler(errlog, formatter=errfmt, add_mpi_rank=False)
+    errhandler.setLevel(args.errlog_level)
+    log.addHandler(errhandler)
+
+# Print Logo, unless interactive Python interpreter
+is_interactive = hasattr(sys, 'ps1')
+if not is_interactive:
+    logofile = os.path.abspath(os.path.join(os.path.dirname(__file__), 'logo.txt'))
+    try:
+        with open(logofile, 'r') as f:
+            logo = f.read()
+        logo = (logo.rstrip() + ' ')
+    except FileNotFoundError:
+        log.error("%s not found.", logofile)
+        logo = ''
+    log.info(logo + '\n', "version " + __version__)
+
+# --- Required modules
+
+
[docs]def import_package(name, required=True): + fmt = ' * %-10s v%-8s location: %s' + try: + package = importlib.import_module(name.lower()) + log.debug(fmt, name, package.__version__, os.path.dirname(package.__file__)) + return package + except ImportError: + if required: + log.critical("%s not found.", name) + raise + log.debug("%s not found.", name) + return None
+ +log.debug("Required packages:") +numpy = import_package('NumPy') +import_package('SciPy') +import_package('h5py') +pyscf = import_package('PySCF') +# Optional +import_package('mpi4py', False) +import_package('cvxpy', False) +ebcc = import_package('ebcc', False) + +# --- Git hashes + +
[docs]def get_git_hash(dir): + git_dir = os.path.join(dir, '.git') + cmd = ['git', '--git-dir=%s' % git_dir, 'rev-parse', '--short', 'HEAD'] + try: + githash = subprocess.check_output(cmd, universal_newlines=True, stderr=subprocess.STDOUT).rstrip() + except subprocess.CalledProcessError: + githash = "<Not Found>" + return githash
+ +log.debug("Git hashes:") +vdir = os.path.dirname(os.path.dirname(__file__)) +vhash = get_git_hash(vdir) +log.debug(" * Vayesta: %s", vhash) +pdir = os.path.dirname(os.path.dirname(pyscf.__file__)) +phash = get_git_hash(pdir) +log.debug(" * PySCF: %s", phash) + +# --- System information +log.debug('System: node= %s processor= %s' % (platform.node(), platform.processor())) + +# --- MPI +if mpi: + log.debug("MPI: rank= %d size= %d node= %s", mpi.rank, mpi.size, platform.node()) + +# --- Environment +log.debug("Environment variables:") +omp_num_threads = os.getenv('OMP_NUM_THREADS') +if omp_num_threads is not None: + omp_num_threads = int(omp_num_threads) +log.debug(" OMP_NUM_THREADS= %s", omp_num_threads) + +# --- + +
[docs]def new_log(logname, fmt=None, remove_existing=True): + if fmt is None: + fmt = vlog.VFormatter(indent=True) + if remove_existing: + for hdl in log.handlers[:]: + # Do not remove error handler + if hdl is errhandler: + continue + log.removeHandler(hdl) + log.addHandler(vlog.VFileHandler(logname, formatter=fmt))
+ +# --- NumPy +numpy.set_printoptions(linewidth=120) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/ao2mo/helper.html b/_modules/vayesta/core/ao2mo/helper.html new file mode 100644 index 000000000..94587eb2c --- /dev/null +++ b/_modules/vayesta/core/ao2mo/helper.html @@ -0,0 +1,744 @@ + + + + + + vayesta.core.ao2mo.helper — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.ao2mo.helper

+import logging
+import numpy as np
+import pyscf
+import pyscf.lib
+import pyscf.ao2mo
+from vayesta.core.util import Object, dot, einsum, energy_string, getif
+
+
+log = logging.getLogger(__name__)
+
+
+
[docs]def get_kconserv(cell, kpts, nk=3): + r'''Get the momentum conservation array for a set of k-points. + + Given k-point indices (k, l, m) the array kconserv[k,l,m] returns + the index n that satifies momentum conservation, + + nk=1: + (k(k) - k(n)) \dot a = 2n\pi + nk=2: + (k(k) - k(l) - k(n)) \dot a = 2n\pi + nk=3: + (k(k) - k(l) + k(m) - k(n)) \dot a = 2n\pi + + This is used for symmetry e.g. integrals of the form + [\phi*[k](1) \phi[l](1) | \phi*[m](2) \phi[n](2)] + are zero unless n satisfies the above. + ''' + nkpts = kpts.shape[0] + a = cell.lattice_vectors() / (2*np.pi) + + if nk == 1: + return list(range(len(kpts))) + kconserv = np.zeros(nk*[nkpts], dtype=int) + if nk == 2: + k_klm = kpts[:,None,:] - kpts # k(k) - k(l) + elif nk == 3: + k_klm = kpts[:,None,None,:] - kpts[:,None,:] + kpts # k(k) - k(l) + k(m) + else: + raise ValueError + + for n, kn in enumerate(kpts): + k_klmn = (k_klm - kn) + k_klmn = einsum('wx,...x->w...', a, k_klmn) + # check whether (1/(2pi) k_klmn dot a) is an integer + mask = einsum('w...->...', abs(k_klmn - np.rint(k_klmn))) < 1e-9 + kconserv[mask] = n + + return kconserv
+ + +
[docs]def get_full_array(eris, mo_coeff=None, out=None): + """Get dense ERI array from CCSD _ChemistEris object.""" + if hasattr(eris, 'OOOO'): + return get_full_array_uhf(eris, mo_coeff=mo_coeff, out=out) + return get_full_array_rhf(eris, mo_coeff=mo_coeff, out=out)
+ + +
[docs]def get_full_array_rhf(eris, mo_coeff=None, out=None): + """Get dense ERI array from CCSD _ChemistEris object.""" + if mo_coeff is not None and not np.allclose(mo_coeff, eris.mo_coeff): + raise NotImplementedError + nocc, nvir = eris.ovoo.shape[:2] + nmo = nocc + nvir + o, v = np.s_[:nocc], np.s_[nocc:] + if out is None: + out = np.zeros(4*[nmo]) + + swap = lambda x : x.transpose(2,3,0,1) # Swap electrons + conj = lambda x : x.transpose(1,0,3,2) # Real orbital symmetry + # 4-occ + out[o,o,o,o] = eris.oooo + # 3-occ + out[o,v,o,o] = eris.ovoo[:] + out[v,o,o,o] = conj(out[o,v,o,o]) + out[o,o,o,v] = swap(out[o,v,o,o]) + out[o,o,v,o] = conj(out[o,o,o,v]) + # 2-occ + out[o,o,v,v] = eris.oovv[:] + out[v,v,o,o] = swap(out[o,o,v,v]) + out[o,v,o,v] = eris.ovov[:] + out[v,o,v,o] = conj(out[o,v,o,v]) + out[o,v,v,o] = eris.ovvo[:] + out[v,o,o,v] = swap(eris.ovvo[:]) + # 1-occ + out[o,v,v,v] = get_ovvv(eris) + out[v,o,v,v] = conj(out[o,v,v,v]) + out[v,v,o,v] = swap(out[o,v,v,v]) + out[v,v,v,o] = conj(out[v,v,o,v]) + # 0-occ + out[v,v,v,v] = get_vvvv(eris) + return out
+ + +
[docs]def get_full_array_uhf(eris, mo_coeff=None, out=None): + """Get dense ERI array from CCSD _ChemistEris object.""" + if mo_coeff is not None and not (np.allclose(mo_coeff[0], eris.mo_coeff[0]) + and np.allclose(mo_coeff[1], eris.mo_coeff[1])): + raise NotImplementedError + nocca, noccb = eris.nocc + nmoa, nmob = eris.fock[0].shape[-1], eris.fock[1].shape[-1] + nvira, nvirb = nmoa - nocca, nmob - noccb + + # Alpha-alpha + blocks_aa = ['oooo', 'ovoo', 'oovv', 'ovov', 'ovvo', 'ovvv', 'vvvv'] + eris_aa = Object() + eris_aa.fock = eris.fock[0] + eris_aa.nocc = nocca + for block in blocks_aa: + setattr(eris_aa, block, getattr(eris, block)) + eri_aa = get_full_array_rhf(eris_aa, mo_coeff=getif(mo_coeff, 0), out=getif(out, 0)) + # Beta-beta + eris_bb = Object() + eris_bb.fock = eris.fock[1] + eris_bb.nocc = noccb + blocks_bb = [b.upper() for b in blocks_aa] + for i, block in enumerate(blocks_bb): + setattr(eris_bb, blocks_aa[i], getattr(eris, block)) + eri_bb = get_full_array_rhf(eris_bb, mo_coeff=getif(mo_coeff, 1), out=getif(out, 2)) + # Alpha-beta + eri_ab = np.zeros((nmoa,nmoa,nmob,nmob)) if out is None else out[1] + oa, ob = np.s_[:nocca], np.s_[:noccb] + va, vb = np.s_[nocca:], np.s_[noccb:] + swap = lambda x : x.transpose(2,3,0,1) # Swap electrons + conj = lambda x : x.transpose(1,0,3,2) # Real orbital symmetry + # 4-occ + eri_ab[oa,oa,ob,ob] = eris.ooOO[:] + # 3-occ + eri_ab[oa,va,ob,ob] = eris.ovOO[:] + eri_ab[va,oa,ob,ob] = conj(eri_ab[oa,va,ob,ob]) + eri_ab[oa,oa,ob,vb] = swap(eris.OVoo[:]) + eri_ab[oa,oa,vb,ob] = conj(eri_ab[oa,oa,ob,vb]) + # 2-occ + eri_ab[oa,oa,vb,vb] = eris.ooVV[:] + eri_ab[va,va,ob,ob] = swap(eris.OOvv[:]) + eri_ab[oa,va,vb,ob] = eris.ovVO[:] + eri_ab[va,oa,ob,vb] = conj(eri_ab[oa,va,vb,ob]) + eri_ab[oa,va,ob,vb] = eris.ovOV[:] + eri_ab[va,oa,vb,ob] = conj(eri_ab[oa,va,ob,vb]) + # 1-occ + eri_ab[oa,va,vb,vb] = get_ovVV(eris, block='ovVV') + eri_ab[va,oa,vb,vb] = conj(eri_ab[oa,va,vb,vb]) + eri_ab[va,va,ob,vb] = swap(get_ovVV(eris, block='OVvv')) + eri_ab[va,va,vb,ob] = conj(eri_ab[va,va,ob,vb]) + # 0-occ + eri_ab[va,va,vb,vb] = get_vvVV(eris) + return eri_aa, eri_ab, eri_bb
+ + +
[docs]def get_ovvv(eris, block='ovvv'): + if hasattr(eris,'OOOO'): + s = (0 if block == 'ovvv' else 1) + nmo = eris.fock[s].shape[-1] + nocc = eris.nocc[s] + else: + nmo = eris.fock.shape[-1] + nocc = eris.nocc + nvir = nmo - nocc + govvv = getattr(eris, block)[:] + if govvv.ndim == 4: + return govvv + nvir_pair = nvir*(nvir+1)//2 + govvv = pyscf.lib.unpack_tril(govvv.reshape(nocc*nvir, nvir_pair)) + govvv = govvv.reshape(nocc,nvir,nvir,nvir) + return govvv
+ + +
[docs]def get_ovVV(eris, block='ovVV'): + assert block in ('ovVV', 'OVvv') + sl, sr = (0, 1) if block == 'ovVV' else (1, 0) + nmoL = eris.fock[sl].shape[-1] + nmoR = eris.fock[sr].shape[-1] + noccL = eris.nocc[sl] + noccR = eris.nocc[sr] + nvirL = nmoL - noccL + nvirR = nmoR - noccR + govvv = getattr(eris, block)[:] + if govvv.ndim == 4: + return govvv + nvir_pair = nvirR*(nvirR+1)//2 + govvv = pyscf.lib.unpack_tril(govvv.reshape(noccL*nvirL, nvir_pair)) + govvv = govvv.reshape(noccL,nvirL,nvirR,nvirR) + return govvv
+ + +
[docs]def get_vvvv(eris, block='vvvv'): + if hasattr(eris, 'VVVV'): + s = (0 if block == 'vvvv' else 1) + nmo = eris.fock[s].shape[-1] + nocc = eris.nocc[s] + else: + nmo = eris.fock.shape[-1] + nocc = eris.nocc + nvir = nmo - nocc + if getattr(eris, block, None) is not None: + gvvvv = getattr(eris, block)[:] + if gvvvv.ndim == 4: + return gvvvv + else: + return pyscf.ao2mo.restore(1, np.asarray(gvvvv[:]), nvir) + # Note that this will not work for 2D systems: + if eris.vvL.ndim == 2: + naux = eris.vvL.shape[-1] + vvl = pyscf.lib.unpack_tril(eris.vvL[:], axis=0).reshape(nvir,nvir,naux) + else: + vvl = eris.vvL[:] + gvvvv = einsum('ijQ,klQ->ijkl', vvl, vvl) + return gvvvv
+ + +
[docs]def get_vvVV(eris, block='vvVV'): + sl, sr = ((0, 1) if block == 'vvVV' else (1, 0)) + nmoL = eris.fock[sl].shape[-1] + nmoR = eris.fock[sr].shape[-1] + noccL = eris.nocc[sl] + noccR = eris.nocc[sr] + nvirL = nmoL - noccL + nvirR = nmoR - noccR + gvvvv = getattr(eris, block)[:] + if getattr(eris, block, None) is not None: + gvvvv = getattr(eris, block)[:] + if gvvvv.ndim == 4: + return gvvvv[:] + else: + nvv = (-1 if gvvvv.size else 0) + xVV = pyscf.lib.unpack_tril(gvvvv[:], axis=0).reshape(nvirL**2, nvv) + return pyscf.lib.unpack_tril(xVV[:], axis=1).reshape(nvirL,nvirL,nvirR,nvirR) + raise NotImplementedError
+ + +
[docs]def get_block(eris, block): + if block in ['ovvv', 'OVVV']: + return get_ovvv(eris, block=block) + if block in ['ovVV', 'OVvv']: + return get_ovVV(eris, block=block) + if block in ['vvvv', 'VVVV']: + return get_vvvv(eris, block=block) + if block in ['vvVV', 'VVvv']: + return get_vvVV(eris, block=block) + return getattr(eris, block)
+ + +
[docs]def pack_ovvv(ovvv): + nocc, nvir = ovvv.shape[:2] + ovvv = pyscf.lib.pack_tril(ovvv.reshape(nocc*nvir, nvir, nvir)) + return ovvv.reshape(nocc, nvir, -1)
+ + +
[docs]def pack_vvvv(vvvv): + nvir = vvvv.shape[0] + return pyscf.ao2mo.restore(4, vvvv, nvir)
+ + +
[docs]def contract_dm2_eris(dm2, eris): + """Contracts _ChemistsERIs with the two-body density matrix. + + Parameters + ---------- + dm2 : ndarry or (ndarray, ndarray, ndarray) + Two-body density matrix or tuple of alpha-alpha, alpha-beta, beta-beta spin blocks for UHF. + eris : _ChemistERIs + PySCF ERIs object. + + Returns + ------- + e2 : float + Two-body energy. + """ + ndim = np.ndim(dm2[0]) + 1 + if ndim == 4: + return contract_dm2_eris_rhf(dm2, eris) + if ndim == 5: + return contract_dm2_eris_uhf(dm2, eris) + raise ValueError("N(dim) of DM2: %d" % ndim)
+ + +def _contract_4d(a, b, transpose=None): + if transpose is not None: + b = b[:].transpose(transpose) + #return einsum('pqrs,pqrs', a, b) + return np.dot(a[:].reshape(-1), b[:].reshape(-1)) + + +
[docs]def contract_dm2_eris_rhf(dm2, eris): + """Contracts _ChemistsERIs with the two-body density matrix. + + Parameters + ---------- + dm2 : ndarry + Two-body density matrix. + eris : _ChemistERIs + PySCF ERIs object. + + Returns + ------- + e2 : float + Two-body energy. + """ + nocc = eris.oooo.shape[0] + o, v = np.s_[:nocc], np.s_[nocc:] + e_oooo = _contract_4d(dm2[o,o,o,o], eris.oooo) + e_ovoo = _contract_4d(dm2[o,v,o,o], eris.ovoo) * 4 + e_oovv = _contract_4d(dm2[o,o,v,v], eris.oovv) * 2 + e_ovov = _contract_4d(dm2[o,v,o,v], eris.ovov) * 2 + e_ovvo = _contract_4d(dm2[o,v,v,o], eris.ovvo) * 2 + e_ovvv = _contract_4d(dm2[o,v,v,v], get_ovvv(eris)) * 4 + e_vvvv = _contract_4d(dm2[v,v,v,v], get_vvvv(eris)) + log.debugv("E(oooo)= %s", energy_string(e_oooo)) + log.debugv("E(ovoo)= %s", energy_string(e_ovoo)) + log.debugv("E(oovv)= %s", energy_string(e_oovv)) + log.debugv("E(ovov)= %s", energy_string(e_ovov)) + log.debugv("E(ovvo)= %s", energy_string(e_ovvo)) + log.debugv("E(ovvv)= %s", energy_string(e_ovvv)) + log.debugv("E(vvvv)= %s", energy_string(e_vvvv)) + e2 = e_oooo + e_ovoo + e_oovv + e_ovov + e_ovvo + e_ovvv + e_vvvv + return e2
+ + +
[docs]def contract_dm2_eris_uhf(dm2, eris): + """Contracts _ChemistsERIs with the two-body density matrix. + + Parameters + ---------- + dm2 : tuple(ndarray, ndarray, ndarray) + Two-body density matrix as a tuple of alpha-alpha, alpha-beta, beta-beta spin blocks. + eris : _ChemistERIs + PySCF ERIs object. + + Returns + ------- + e2 : float + Two-body energy. + """ + nocca = eris.oooo.shape[0] + noccb = eris.OOOO.shape[0] + dm2aa, dm2ab, dm2bb = dm2 + e2 = 0 + # Alpha-alpha + o, v = np.s_[:nocca], np.s_[nocca:] + e2 += _contract_4d(dm2aa[o,o,o,o], eris.oooo) + e2 += _contract_4d(dm2aa[o,v,o,o], eris.ovoo) * 4 + e2 += _contract_4d(dm2aa[o,o,v,v], eris.oovv) * 2 + e2 += _contract_4d(dm2aa[o,v,o,v], eris.ovov) * 2 + e2 += _contract_4d(dm2aa[o,v,v,o], eris.ovvo) * 2 + e2 += _contract_4d(dm2aa[o,v,v,v], get_ovvv(eris)) * 4 + e2 += _contract_4d(dm2aa[v,v,v,v], get_vvvv(eris)) + # Beta-beta + o, v = np.s_[:noccb], np.s_[noccb:] + e2 += _contract_4d(dm2bb[o,o,o,o], eris.OOOO) + e2 += _contract_4d(dm2bb[o,v,o,o], eris.OVOO) * 4 + e2 += _contract_4d(dm2bb[o,o,v,v], eris.OOVV) * 2 + e2 += _contract_4d(dm2bb[o,v,o,v], eris.OVOV) * 2 + e2 += _contract_4d(dm2bb[o,v,v,o], eris.OVVO) * 2 + e2 += _contract_4d(dm2bb[o,v,v,v], get_ovvv(eris, block='OVVV')) * 4 + e2 += _contract_4d(dm2bb[v,v,v,v], get_vvvv(eris, block='VVVV')) + # Alpha-beta + oa, va = np.s_[:nocca], np.s_[nocca:] + ob, vb = np.s_[:noccb], np.s_[noccb:] + e2 += _contract_4d(dm2ab[oa,oa,ob,ob], eris.ooOO) * 2 + e2 += _contract_4d(dm2ab[oa,va,ob,ob], eris.ovOO) * 4 + e2 += _contract_4d(dm2ab[oa,oa,ob,vb], eris.OVoo, transpose=(2,3,0,1)) * 4 + e2 += _contract_4d(dm2ab[oa,oa,vb,vb], eris.ooVV) * 2 + e2 += _contract_4d(dm2ab[va,va,ob,ob], eris.OOvv, transpose=(2,3,0,1)) * 2 + e2 += _contract_4d(dm2ab[oa,va,vb,ob], eris.ovVO) * 4 + e2 += _contract_4d(dm2ab[oa,va,ob,vb], eris.ovOV) * 4 + #e2 += einsum('pqrs,rspq', dm2ab[va,oa,ob,vb], eris.OVvo) * 4 + e2 += _contract_4d(dm2ab[oa,va,vb,vb], get_ovVV(eris, block='ovVV')) * 4 + e2 += _contract_4d(dm2ab[va,va,ob,vb], get_ovVV(eris, block='OVvv'), transpose=(2,3,0,1)) * 4 + e2 += _contract_4d(dm2ab[va,va,vb,vb], get_vvVV(eris)) * 2 + return e2
+ + +# Order used in PySCF for 2-DM intermediates: +dm2intermeds = ['ovov', 'vvvv', 'oooo', 'oovv', 'ovvo', 'vvov', 'ovvv', 'ooov',] + + +def _dm2intermeds_to_dict_rhf(dm2): + dm2dict = {block: dm2[idx] for (idx, block) in enumerate(dm2intermeds)} + return dm2dict + + +def _dm2intermeds_to_dict_uhf(dm2): + dm2dict = {} + + def _add_spinblocks(block, idx): + b0, b1 = block[:2], block[2:] + dm2i = dm2[idx] + dm2dict[block.lower()] = np.asarray(dm2i[0]) + dm2dict[b0.lower() + b1.upper()] = np.asarray(dm2i[1]) + dm2dict[b0.upper() + b1.lower()] = np.asarray(dm2i[2]) + dm2dict[block.upper()] = np.asarray(dm2i[3]) + + for idx, block in enumerate(dm2intermeds): + _add_spinblocks(block, idx) + return dm2dict + + +
[docs]def contract_dm2intermeds_eris_rhf(dm2, eris, destroy_dm2=True): + """Contracts _ChemistsERIs with the two-body density matrix. + + Parameters + ---------- + dm2 : tuple + Intermediates of spin-restricted two-body density matrix. + eris : _ChemistERIs + PySCF ERIs object. + + Returns + ------- + e2 : float + Two-body energy. + """ + dm2 = _dm2intermeds_to_dict_rhf(dm2) + + def _get_block(block, keep=False): + if destroy_dm2 and not keep: + return dm2.pop(block) + return dm2[block] + + e_oooo = _contract_4d(_get_block('oooo'), eris.oooo) * 4 + e_ovoo = _contract_4d(_get_block('ooov'), eris.ovoo, transpose=(2,3,0,1)) * 4 + e_oovv = _contract_4d(_get_block('oovv'), eris.oovv) * 4 + e_ovov = _contract_4d(_get_block('ovov'), eris.ovov) * 4 + e_ovvo = _contract_4d(_get_block('ovvo'), eris.ovvo) * 4 + e_ovvv = _contract_4d(_get_block('ovvv'), get_ovvv(eris)) * 4 + e_vvvv = _contract_4d(_get_block('vvvv'), get_vvvv(eris)) * 4 + log.debugv("E(oooo)= %s", energy_string(e_oooo)) + log.debugv("E(ovoo)= %s", energy_string(e_ovoo)) + log.debugv("E(oovv)= %s", energy_string(e_oovv)) + log.debugv("E(ovov)= %s", energy_string(e_ovov)) + log.debugv("E(ovvo)= %s", energy_string(e_ovvo)) + log.debugv("E(ovvv)= %s", energy_string(e_ovvv)) + log.debugv("E(vvvv)= %s", energy_string(e_vvvv)) + e2 = e_oooo + e_ovoo + e_oovv + e_ovov + e_ovvo + e_ovvv + e_vvvv + return e2
+ + +
[docs]def contract_dm2intermeds_eris_uhf(dm2, eris, destroy_dm2=True): + """Contracts _ChemistsERIs with the two-body density matrix. + + Parameters + ---------- + dm2 : tuple + Intermediates of spin-unrestricted two-body density matrix. + eris : _ChemistERIs + PySCF ERIs object. + + Returns + ------- + e2 : float + Two-body energy. + """ + dm2 = _dm2intermeds_to_dict_uhf(dm2) + + def _get_block(block, keep=False): + if destroy_dm2 and not keep: + return dm2.pop(block) + return dm2[block] + + e2 = 0 + # Alpha-alpha + e2 += _contract_4d(_get_block('oooo'), eris.oooo) + e2 += _contract_4d(_get_block('ooov'), eris.ovoo, transpose=(2,3,0,1)) * 4 + #e2 += _contract_4d(_get_block('ovvo', keep=True), eris.oovv, transpose=(0,3,2,1)) * -2 + e2 += _contract_4d(_get_block('oovv'), eris.oovv) * 2 + e2 += _contract_4d(_get_block('ovov'), eris.ovov) * 2 + e2 += _contract_4d(_get_block('ovvo'), eris.ovvo) * 2 + e2 += _contract_4d(_get_block('ovvv'), get_ovvv(eris)) * 4 + e2 += _contract_4d(_get_block('vvvv'), get_vvvv(eris)) + # Beta-beta + e2 += _contract_4d(_get_block('OOOO'), eris.OOOO) + e2 += _contract_4d(_get_block('OOOV'), eris.OVOO, transpose=(2,3,0,1)) * 4 + #e2 += _contract_4d(_get_block('OVVO', keep=True), eris.OOVV, transpose=(0,3,2,1)) * -2 + e2 += _contract_4d(_get_block('OOVV'), eris.OOVV) * 2 + e2 += _contract_4d(_get_block('OVOV'), eris.OVOV) * 2 + e2 += _contract_4d(_get_block('OVVO'), eris.OVVO) * 2 + e2 += _contract_4d(_get_block('OVVV'), get_ovvv(eris, block='OVVV')) * 4 + e2 += _contract_4d(_get_block('VVVV'), get_vvvv(eris, block='VVVV')) + # Alpha-beta + e2 += _contract_4d(_get_block('ooOO'), eris.ooOO) * 2 + e2 += _contract_4d(_get_block('OOov'), eris.ovOO, transpose=(2,3,0,1)) * 4 + e2 += _contract_4d(_get_block('ooOV'), eris.OVoo, transpose=(2,3,0,1)) * 4 + e2 += _contract_4d(_get_block('ooVV'), eris.ooVV) * 2 + e2 += _contract_4d(_get_block('OOvv'), eris.OOvv) * 2 + e2 += _contract_4d(_get_block('ovVO'), eris.ovVO) * 4 + e2 += _contract_4d(_get_block('ovOV'), eris.ovOV) * 4 + e2 += _contract_4d(_get_block('ovVV'), get_ovVV(eris, block='ovVV')) * 4 + e2 += _contract_4d(_get_block('OVvv'), get_ovVV(eris, block='OVvv')) * 4 + e2 += _contract_4d(_get_block('vvVV'), get_vvVV(eris)) * 2 + return e2
+ + +
[docs]def project_ccsd_eris(eris, mo_coeff, nocc, ovlp, check_subspace=True): + """Project CCSD ERIs to a subset of orbital coefficients. + + Parameters + ---------- + eris : _ChemistERIs + PySCF ERIs object + mo_coeff : (n(AO), n(MO)) array + New subspace MO coefficients. + nocc: int + Number of occupied orbitals. + ovlp : (n(AO), n(AO)) array + AO overlap matrix. + check_subspace : bool, optional + Check if c_occ and c_vir span a subspace of eris.mo_coeff. + Return None if Not. Default: True. + + Returns + ------- + eris : _ChemistERIs or None + ERIs with transformed integral values, as well as transformed attributes + `mo_coeff`, `fock`, and `mo_energy`. + + """ + # New subspace MO coefficients: + c_occ, c_vir = np.hsplit(mo_coeff, [nocc]) + # Old MO coefficients: + c_occ0, c_vir0 = np.hsplit(eris.mo_coeff, [eris.nocc]) + nocc0, nvir0 = c_occ0.shape[-1], c_vir0.shape[-1] + nocc, nvir = c_occ.shape[-1], c_vir.shape[-1] + log.debug("Projecting ERIs: N(occ)= %3d -> %3d N(vir)= %3d -> %3d", nocc0, nocc, nvir0, nvir) + + transform_occ = (nocc != nocc0 or not np.allclose(c_occ, c_occ0)) + if transform_occ: + r_occ = dot(c_occ.T, ovlp, c_occ0) + else: + r_occ = np.eye(nocc) + transform_vir = (nvir != nvir0 or not np.allclose(c_vir, c_vir0)) + if transform_vir: + r_vir = dot(c_vir.T, ovlp, c_vir0) + else: + r_vir = np.eye(nvir) + + # Do nothing + if not (transform_occ or transform_vir): + return eris + + # Check that c_occ and c_vir form a subspace of eris.mo_coeff + # If not return None + if check_subspace: + if nocc0 < nocc: + raise RuntimeError("MO coefficients do not span subspace of eris.mo_coeff.") + if nvir0 < nvir: + raise RuntimeError("MO coefficients do not span subspace of eris.mo_coeff.") + p_occ = np.dot(r_occ.T, r_occ) + e, v = np.linalg.eigh(p_occ) + n = np.count_nonzero(abs(e)>1e-8) + if n < nocc: + log.debug("e(occ)= %d\n%r", n, e) + raise RuntimeError("MO coefficients do not span subspace of eris.mo_coeff.") + p_vir = np.dot(r_vir.T, r_vir) + e, v = np.linalg.eigh(p_vir) + n = np.count_nonzero(abs(e)>1e-8) + if n < nvir: + log.debug("e(vir)= %d\n%r", n, e) + raise RuntimeError("MO coefficients do not span subspace of eris.mo_coeff.") + + r_all = np.block([ + [r_occ, np.zeros((nocc, nvir0))], + [np.zeros((nvir, nocc0)), r_vir]]) + + transform = lambda g, t0, t1, t2, t3 : einsum("abcd,ia,jb,kc,ld -> ijkl", g, t0, t1, t2, t3) + + if hasattr(eris, 'vvL'): + raise NotImplementedError() + + for block in ['oooo', 'ovoo', 'oovv', 'ovov', 'ovvo', 'ovvv', 'vvvv']: + log.debugv("Projecting integrals (%2s|%2s)", block[:2], block[2:]) + g = get_block(eris, block) + shape0 = [(nocc0 if (pos == 'o') else nvir0) for pos in block] + t0123 = [(r_occ if (pos == 'o') else r_vir) for pos in block] + pg = transform(g[:].reshape(shape0), *t0123) + if block == 'ovvv' and getattr(eris, block).ndim == 3: + pg = pack_ovvv(pg) + if block == 'vvvv' and getattr(eris, block).ndim == 2: + pg = pack_vvvv(pg) + setattr(eris, block, pg) + + eris.mo_coeff = np.hstack((c_occ, c_vir)) + eris.nocc = nocc + eris.fock = dot(r_all, eris.fock, r_all.T) + eris.mo_energy = np.diag(eris.fock) + return eris
+ + +if __name__ == '__main__': + def test1(): + import pyscf.gto + import pyscf.scf + import pyscf.cc + from vayesta.misc.molecules import water + + mol = pyscf.gto.Mole() + mol.atom = water() + mol.basis = 'cc-pVDZ' + mol.build() + + hf = pyscf.scf.RHF(mol) + #hf.density_fit(auxbasis='cc-pVDZ-ri') + hf.kernel() + + ccsd = pyscf.cc.CCSD(hf) + eris = ccsd.ao2mo() + eris2 = get_full_array(eris) + + norb = hf.mo_coeff.shape[-1] + eris_test = pyscf.ao2mo.kernel(hf._eri, hf.mo_coeff, compact=False).reshape(4*[norb]) + err = np.linalg.norm(eris2 - eris_test) + print(err) + assert np.allclose(eris2, eris_test) + + def test2(): + import pyscf.pbc + import pyscf.pbc.gto + from vayesta.misc import solids + from timeit import default_timer as timer + + cell = pyscf.pbc.gto.Cell() + cell.a, cell.atom = solids.diamond() + cell.build() + + #kmesh = [3,2,1] + kmesh = [4,5,2] + kpts = cell.get_kpts(kmesh) + + nk = 3 + + t0 = timer() + kconserv = get_kconserv(cell, kpts, nk=nk) + t1 = timer() + kconserv_pyscf = pyscf.pbc.lib.kpts_helper.get_kconserv(cell, kpts, n=nk) + t2 = timer() + assert np.all(kconserv == kconserv_pyscf) + print(t1-t0, t2-t1) + + test2() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/ao2mo/kao2gmo.html b/_modules/vayesta/core/ao2mo/kao2gmo.html new file mode 100644 index 000000000..963c85fcb --- /dev/null +++ b/_modules/vayesta/core/ao2mo/kao2gmo.html @@ -0,0 +1,373 @@ + + + + + + vayesta.core.ao2mo.kao2gmo — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.ao2mo.kao2gmo

+"""AO to MO transformation from k-space (AOs) to supercell real space (MOs)
+
+Author: Max Nusspickel
+Email:  max.nusspickel@gmail.com
+"""
+
+# Standard
+import ctypes
+import logging
+# External
+import numpy as np
+import pyscf.pbc
+import pyscf.pbc.tools
+# Package
+from vayesta.core.util import call_once, einsum, timer
+from vayesta.libs import libcore
+from vayesta.core.ao2mo import helper
+
+
+log = logging.getLogger(__name__)
+
+
[docs]def kao2gmo_cderi(gdf, mo_coeffs, make_real=True, blksize=None, tril_kij=True, driver=None): + """Transform density-fitted ERIs from primtive cell k-AO, to Gamma-point MOs. + + (L|ka,k'b) * C1_(Ra)i * C2_(R'b)j -> (R''L|Ri,R'j) + + Parameters + ---------- + gdf: pyscf.pbc.df.GDF + Gaussian density-fitting object of primitive unit cell. + mo_coeffs: array or tuple(2) of arrays + MO coefficients C1_(Ra)i and C2_(R'b)j for the transformation. If only one coefficient matrix is + passed, it will be used for both C1 and C2. + make_real: bool, optional + Fourier-transform the auxiliary DF dimension, such that the final three-center integrals are real. + Default: True. + blksize: int, optional + Blocksize for the auxiliary dimension. + tril_kij: bool, optional + Only load k-point pairs k >= k', and use the symmetry (L|ka,k'b) = (L|k'b,ka)*. + Default: True. + driver: {None, 'c', 'python'} + Use Python or C driver for the transformation. If None, use C if compiled library is present, + if so use C, else use python. Default: None. + + Returns + ------- + cderi_mo: array + Density-fitted supercell three-center integrals in MO basis. + cderi_mo_neg: array or None + Negative part of density-fitted supercell three-center integrals in MO basis. + None for 3D systems. + """ + + if np.ndim(mo_coeffs[0]) == 1: + mo_coeffs = (mo_coeffs, mo_coeffs) + + cell = gdf.cell + nao = cell.nao + naux = naux_pos = gdf.auxcell.nao_nr() + if cell.dimension < 3: + naux_pos -= 1 + kpts = gdf.kpts + nk = len(kpts) + kconserv = helper.get_kconserv(cell, kpts, nk=2) + # Fourier transform MOs from supercell Gamma point to primitive cell k-points + phase = (pyscf.pbc.tools.k2gamma.get_phase(cell, kpts)[1]).T + + if blksize is None: + max_memory = int(1e9) # 1 GB + max_size = int(max_memory / (nao**2 * 16)) # how many naux fit in max_memory + blksize = np.clip(max_size, 1, int(1e9)) + log.debugv("max_memory= %.3f MB max_size= %d blksize= %d", max_memory/1e6, max_size, blksize) + + if driver is None: + if libcore is None: + driver = 'python' + call_once(log.warning, "Libary 'vayesta/libs/libcore.so' not found, using fallback Python driver.") + else: + driver = 'c' + log.debugv("Driver for kao2gmo_cderi= %s", driver) + if driver == 'python': + transform = lambda cderi_kij, mo1_ki, mo2_kj : einsum('Lab,ai,bj->Lij', cderi_kij, mo1_ki.conj(), mo2_kj) + elif driver == 'c': + + def transform(cderi_kij, mo1_ki, mo2_kj): + naux = cderi_kij.shape[0] + nao = cderi_kij.shape[1] + nmo1 = mo1_ki.shape[-1] + nmo2 = mo2_kj.shape[-1] + buf = np.zeros((naux, nmo1, nmo2), dtype=complex) + cderi_kij = np.asarray(cderi_kij, order='C') + mo1_ki = np.asarray(mo1_ki.conj(), order='C') + mo2_kj = np.asarray(mo2_kj, order='C') + ierr = libcore.ao2mo_cderi( + # In + ctypes.c_int64(nao), + ctypes.c_int64(nmo1), + ctypes.c_int64(nmo2), + ctypes.c_int64(naux), + mo1_ki.ctypes.data_as(ctypes.c_void_p), + mo2_kj.ctypes.data_as(ctypes.c_void_p), + cderi_kij.ctypes.data_as(ctypes.c_void_p), + # Out + buf.ctypes.data_as(ctypes.c_void_p)) + assert (ierr == 0) + return buf + + nmo1 = mo_coeffs[0].shape[-1] + nmo2 = mo_coeffs[1].shape[-1] + mo1 = einsum('kR,Rai->kai', phase.conj(), mo_coeffs[0].reshape(nk,nao,nmo1)) + mo2 = einsum('kR,Rai->kai', phase.conj(), mo_coeffs[1].reshape(nk,nao,nmo2)) + + cderi_mo = np.zeros((nk, naux, nmo1, nmo2), dtype=complex) + if cell.dimension < 3: + cderi_mo_neg = np.zeros((1, nmo1, nmo2), dtype=complex) + else: + cderi_mo_neg = None + + # Rare case that one of the MO sets is empty - exit early + if (nmo1 * nmo2) == 0: + cderi_mo = cderi_mo.reshape((nk*naux, nmo1, nmo2)).real + if cderi_mo_neg is not None: + cderi_mo_neg = cderi_mo_neg.real + return cderi_mo, cderi_mo_neg + + for ki in range(nk): + kjmax = (ki+1) if tril_kij else nk + for kj in range(kjmax): + kk = kconserv[ki,kj] + # Load entire 3c-integrals at k-point pair (ki, kj) into memory: + kpts_ij = (kpts[ki], kpts[kj]) + blk0 = 0 + for labr, labi, sign in gdf.sr_loop(kpts_ij, compact=False, blksize=blksize): + blk1 = (blk0 + labr.shape[0]) + blk = np.s_[blk0:blk1] + blk0 = blk1 + lab = (labr + 1j*labi).reshape(-1, nao, nao) + if (sign == 1): + lij = transform(lab, mo1[ki], mo2[kj]) + cderi_mo[kk,blk] += lij + if tril_kij and (ki > kj): + kk = kconserv[kj,ki] + lij = transform(lab.transpose(0,2,1).conj(), mo1[kj], mo2[ki]) + cderi_mo[kk,blk] += lij + # For 2D systems: + elif (sign == -1): + assert (ki == kj) and (sign == -1) and (lab.shape[0] == 1) + cderi_mo_neg += einsum('Lab,ai,bj->Lij', lab, mo1[ki].conj(), mo2[kj]) + else: + raise ValueError("Sign = %f" % sign) + + cderi_mo /= np.sqrt(nk) + if cderi_mo_neg is not None: + cderi_mo_neg /= np.sqrt(nk) + + if make_real: + # kR,kLij->RLij + cderi_mo = np.tensordot(phase, cderi_mo, axes=1) + im = abs(cderi_mo.imag).max() + if im > 1e-3: + log.error("Imaginary part of (L|ij)= %.2e !!!", im) + elif im > 1e-8: + log.error("Imaginary part of (L|ij)= %.2e !", im) + else: + log.debugv("Imaginary part of (L|ij)= %.2e", im) + cderi_mo = cderi_mo.real + if cderi_mo_neg is not None: + assert (abs(cderi_mo_neg.imag).max() < 1e-10) + cderi_mo_neg = cderi_mo_neg.real + + cderi_mo = cderi_mo.reshape(nk*naux, nmo1, nmo2) + + return cderi_mo, cderi_mo_neg
+ + +if __name__ == '__main__': + import pyscf.pbc + import pyscf.pbc.gto + import pyscf.pbc.df + import pyscf.pbc.tools + + import vayesta.core.ao2mo + + import kao2gmo #import gdf_to_eris + + card = 'D' + + cell = pyscf.pbc.gto.Cell() + cell.a = 3.0*np.eye(3) + cell.a[2,2] = 20.0 + cell.atom = "He 0 0 0" + cell.basis = 'cc-pV%sZ' % card + cell.dimension = 2 + cell.build() + + kmesh = [3,2,1] + #kmesh = [3,3,3] + kpts = cell.make_kpts(kmesh) + + gdf = pyscf.pbc.df.GDF(cell, kpts) + gdf.auxbasis = 'cc-pV%sZ-ri' % card + gdf.build() + + scell = pyscf.pbc.tools.super_cell(cell, kmesh) + sgdf = pyscf.pbc.df.GDF(scell) + sgdf.auxbasis = 'cc-pV%sZ-ri' % card + sgdf.build() + + print("Naux= %d" % sgdf.auxcell.nao) + + nao_sc = scell.nao + #mf = pyscf.pbc.dft.RKS(scell) + #mf.with_df = sgdf + #mf.max_cycle = 1 + #mf.kernel() + #mo_coeff = mf.mo_coeff + mo_coeff = np.random.rand(nao_sc, nao_sc) + + # Exact + t0 = timer() + seri = sgdf.ao2mo(mo_coeff, compact=False).reshape(4*[nao_sc]) + print("Time SC= %.4f" % (timer()-t0)) + + # Old code + nocc = 3 + t0 = timer() + eris_old = kao2gmo.gdf_to_eris(gdf, mo_coeff, nocc) + print("Time old= %.4f" % (timer()-t0)) + + class Object(): + pass + eris_old_2 = Object() + for key, val in eris_old.items(): + setattr(eris_old_2, key, val) + eris_old_2.fock = np.zeros((nao_sc, nao_sc)) + eris_old_2.nocc = nocc + eris_old = vayesta.core.ao2mo.helper.get_full_array(eris_old_2) + + mo_occ = mo_coeff[:,:nocc] + mo_vir = mo_coeff[:,nocc:] + + t0 = timer() + cderi, cderi_neg = kao2gmo_cderi(gdf, (mo_coeff, mo_coeff), driver='python', make_real=True) + #cderi_oo, cderi_neg_oo = kao2gmo_gdf(gdf, (mo_occ, mo_occ), driver='python') + #cderi_ov, cderi_neg_ov = kao2gmo_gdf(gdf, (mo_occ, mo_vir), driver='python') + #cderi_vv, cderi_neg_vv = kao2gmo_gdf(gdf, (mo_vir, mo_vir), driver='python') + print("Time k(Py)= %.4f" % (timer()-t0)) + eri = einsum('Lij,Lkl->ijkl', cderi.conj(), cderi) + if cderi_neg is not None: + eri -= einsum('Lij,Lkl->ijkl', cderi_neg, cderi_neg) + + t0 = timer() + cderi, cderi_neg = kao2gmo_cderi(gdf, (mo_coeff, mo_coeff), driver='c') + print("Time k(C)= %.4f" % (timer()-t0)) + eri2 = einsum('Lij,Lkl->ijkl', cderi ,cderi) + if cderi_neg is not None: + eri2 -= einsum('Lij,Lkl->ijkl', cderi_neg, cderi_neg) + + #print(seri[0,0,0,:]) + #print(eri[0,0,0,:]) + #print(eris_old[0,0,0,:]) + + print(np.linalg.norm(eri - seri)) + print(np.linalg.norm(eri2 - seri)) + print(np.linalg.norm(eris_old - seri)) + print(np.linalg.norm(eris_old - eri)) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/ao2mo/postscf_ao2mo.html b/_modules/vayesta/core/ao2mo/postscf_ao2mo.html new file mode 100644 index 000000000..e9557e605 --- /dev/null +++ b/_modules/vayesta/core/ao2mo/postscf_ao2mo.html @@ -0,0 +1,450 @@ + + + + + + vayesta.core.ao2mo.postscf_ao2mo — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.ao2mo.postscf_ao2mo

+import logging
+
+import numpy as np
+
+import pyscf
+import pyscf.mp
+import pyscf.ci
+import pyscf.cc
+import pyscf.lib
+from pyscf.mp.mp2 import _mo_without_core
+from pyscf.mp.mp2 import _ChemistsERIs as MP2_ChemistsERIs
+from pyscf.cc.rccsd import _ChemistsERIs as RCCSD_ChemistsERIs
+from pyscf.cc.uccsd import _ChemistsERIs as UCCSD_ChemistsERIs
+from pyscf.cc.dfccsd import _ChemistsERIs as DFCCSD_ChemistsERIs
+from pyscf.cc.ccsd import _ChemistsERIs as CCSD_ChemistsERIs
+
+from vayesta.core.util import brange, dot, replace_attr
+from vayesta.core.ao2mo.kao2gmo import kao2gmo_cderi
+
+
+log = logging.getLogger(__name__)
+
+pyscf_version = [int(x) for x in pyscf.__version__.split('.')]
+pyscf_version_atleast_2_1 = np.all(np.asarray(pyscf_version) >= (2, 1, 0))
+
+
+
[docs]def postscf_ao2mo(postscf, mo_coeff=None, fock=None, mo_energy=None, e_hf=None): + """AO to MO transformation of ERIs for post-SCF calculations. + + Use this as postscf_ao2mo(cc,...) instead of cc.ao2mo(...) to allow control + of eris.fock, eris.mo_energy, and eris.e_hf. + + Parameters + ---------- + postscf: PySCF Post-SCF method + Instance of MP2, DFMP2, CCSD, RCCSD, or DFCCSD, with attribute mo_coeff set. + mo_coeff: array, optional + MO coefficients for the AO to MO transformation. If None, PySCF uses postscf.mo_coeff. + Default: None. + fock: array, optional + Fock matrix in AO representation. If None, PySCF uses postscf._scf.get_fock(). Default: None. + mo_energy: array, optional + Active MO energies. If None, PySCF uses fock.diagonal(). Default: None. + e_hf: float, optional + Mean-field energy. If None, PySCF calculates this as postscf._scf.energy_tot(). Default: None. + + Returns + ------- + eris: _ChemistsERIs + PySCF ERIs object which can be used for the respective post-SCF calculation. + """ + replace = {} + if fock is not None: + replace['get_fock'] = (fock if callable(fock) else lambda *args, **kwargs: fock) + # e_hf does not need to be added to ERIs object in PySCF v2.1+ + if e_hf is not None and not pyscf_version_atleast_2_1: + replace['energy_tot'] = (e_hf if callable(e_hf) else lambda *args, **kwargs: e_hf) + if (fock is not None and e_hf is not None): + # make_rdm1 and get_veff are called within postscf.ao2mo, to generate + # the Fock matrix and SCF energy - since we set these directly, + # we can avoid performing any computation in these functions: + do_nothing = lambda *args, **kwargs: None + replace['make_rdm1'] = do_nothing + replace['get_veff'] = do_nothing + + # Replace attributes in `replace` temporarily for the potscf.ao2mo call; + # after the with statement, the attributes are reset to their intial values. + with replace_attr(postscf._scf, **replace): + eris = postscf.ao2mo(mo_coeff) + + if mo_energy is not None: + eris.mo_energy = mo_energy + + return eris
+ +
[docs]def postscf_kao2gmo(postscf, gdf, fock, mo_energy, e_hf=None, mo_coeff=None): + """k-AO to Gamma-MO transformation of ERIs for post-SCF calculations of supercells. + + This can be used to avoid performing the expensive density-fitting in the supercell, + if a smaller primitive unit cell exists. + + Parameters + ---------- + postscf: PySCF Post-SCF method + Instance of MP2, DFMP2, CCSD, RCCSD, or DFCCSD, with attribute mo_coeff set. + gdf: PySCF Gaussian density-fitting object + Density-fitting object of the primitive unit cell. + fock: array + Fock matrix in AO representation. + mo_energy: array + Active MO energies. + e_hf: float + Mean-field energy. + mo_coeff: array, optional + MO coefficients for the AO to MO transformation. If None, PySCF uses postscf.mo_coeff. + Default: None. + + Returns + ------- + eris: _ChemistsERIs + PySCF ERIs object which can be used for the respective supercell post-SCF calculation. + """ + if mo_coeff is None: + mo_coeff = postscf.mo_coeff + # Remove frozen orbitals: + mo_coeff = _mo_without_core(postscf, mo_coeff) + nocc = postscf.nocc + occ, vir = np.s_[:nocc], np.s_[nocc:] + + if isinstance(postscf, pyscf.mp.mp2.MP2): + eris = MP2_ChemistsERIs() + # Only occ-vir block needed for MP2 + mo_coeffs = (mo_coeff[:,occ], mo_coeff[:,vir]) + elif isinstance(postscf, pyscf.cc.rccsd.RCCSD): + eris = RCCSD_ChemistsERIs() + mo_coeffs = (mo_coeff, mo_coeff) + pack = False + store_vvl = False + elif isinstance(postscf, pyscf.cc.dfccsd.RCCSD): + eris = DFCCSD_ChemistsERIs() + mo_coeffs = (mo_coeff, mo_coeff) + pack = True + store_vvl = True + elif isinstance(postscf, (pyscf.ci.cisd.CISD, pyscf.cc.ccsd.CCSD)): + eris = CCSD_ChemistsERIs() + mo_coeffs = (mo_coeff, mo_coeff) + pack = True + store_vvl = False + else: + raise NotImplementedError("Unknown post-SCF method= %s" % type(postscf)) + + eris.mo_coeff = mo_coeff + eris.nocc = nocc + # e_hf does not need to be added to ERIs object in PySCF v2.1+ + if not pyscf_version_atleast_2_1: + eris.e_hf = e_hf + eris.fock = dot(mo_coeff.T, fock, mo_coeff) + eris.mo_energy = mo_energy + + cderi, cderi_neg = kao2gmo_cderi(gdf, mo_coeffs) + + # MP2 + if isinstance(postscf, pyscf.mp.mp2.MP2): + eris.ovov = _contract_cderi(cderi, cderi_neg) + # CCSD + else: + eris.oooo = _contract_cderi(cderi, cderi_neg, block='oooo', nocc=nocc) + eris.ovoo = _contract_cderi(cderi, cderi_neg, block='ovoo', nocc=nocc) + eris.oovv = _contract_cderi(cderi, cderi_neg, block='oovv', nocc=nocc) + eris.ovvo = _contract_cderi(cderi, cderi_neg, block='ovvo', nocc=nocc) + eris.ovov = _contract_cderi(cderi, cderi_neg, block='ovov', nocc=nocc) + eris.ovvv = _contract_cderi(cderi, cderi_neg, block='ovvv', nocc=nocc, pack_right=pack) + if store_vvl: + if cderi_neg is not None: + raise ValueError("Cannot use DFCCSD for 2D systems!") + eris.vvL = pyscf.lib.pack_tril(cderi[:,vir,vir].copy()).T + else: + eris.vvvv = _contract_cderi(cderi, cderi_neg, block='vvvv', nocc=nocc, pack_left=pack, pack_right=pack) + + return eris
+ +
[docs]def postscf_kao2gmo_uhf(postscf, gdf, fock, mo_energy, e_hf=None, mo_coeff=None): + """k-AO to Gamma-MO transformation of ERIs for unrestricted post-SCF calculations of supercells. + + This can be used to avoid performing the expensive density-fitting in the supercell, + if a smaller primitive unit cell exists. + + Parameters + ---------- + postscf: PySCF Post-SCF method + Instance of UMP2 or UCCSD, with attribute mo_coeff set. + gdf: PySCF Gaussian density-fitting object + Density-fitting object of the primitive unit cell. + fock: tuple(2) of arrays + Fock matrix in AO representation (alpha, beta). + mo_energy: tuple(2) or arrays + Active MO energies (alpha, beta). + e_hf: float + Mean-field energy. + mo_coeff: tuple(2) of arrays, optional + MO coefficients for the AO to MO transformation (alpha, beta). + If None, PySCF uses postscf.mo_coeff. Default: None. + + Returns + ------- + eris: _ChemistsERIs + PySCF ERIs object which can be used for the respective supercell post-SCF calculation. + """ + if mo_coeff is None: + mo_coeff = postscf.mo_coeff + # Remove frozen orbitals: + act = postscf.get_frozen_mask() + mo_coeff = (moa, mob) = (mo_coeff[0][:,act[0]], mo_coeff[1][:,act[1]]) + nocc = (nocca, noccb) = postscf.nocc + occa, vira = np.s_[:nocca], np.s_[nocca:] + occb, virb = np.s_[:noccb], np.s_[noccb:] + + if isinstance(postscf, pyscf.mp.ump2.UMP2): + eris = MP2_ChemistsERIs() + # Only occ-vir block needed for MP2 + mo_coeffs_a = (moa[:,occa], moa[:,vira]) + mo_coeffs_b = (mob[:,occb], mob[:,virb]) + elif isinstance(postscf, (pyscf.ci.ucisd.UCISD, pyscf.cc.uccsd.UCCSD)): + eris = UCCSD_ChemistsERIs() + mo_coeffs_a = (moa, moa) + mo_coeffs_b = (mob, mob) + pack = True + else: + raise NotImplementedError("Unknown post-SCF method= %s" % type(postscf)) + + eris.mo_coeff = mo_coeff + eris.nocc = nocc + # e_hf does not need to be added to ERIs object in PySCF v2.1+ + if not pyscf_version_atleast_2_1: + eris.e_hf = e_hf + eris.focka = dot(moa.T, fock[0], moa) + eris.fockb = dot(mob.T, fock[1], mob) + eris.fock = (eris.focka, eris.fockb) + eris.mo_energy = mo_energy + + cderia, cderia_neg = kao2gmo_cderi(gdf, mo_coeffs_a) + cderib, cderib_neg = kao2gmo_cderi(gdf, mo_coeffs_b) + cderi = (cderia, cderib) + cderi_neg = (cderia_neg, cderib_neg) + + # MP2 + if isinstance(postscf, pyscf.mp.mp2.MP2): + eris.ovov = _contract_cderi(cderia, cderia_neg) + eris.OVOV = _contract_cderi(cderib, cderib_neg) + eris.ovOV = _contract_cderi_mixed(cderi, cderi_neg) + # CCSD + else: + # Alpha-alpha: + eris.oooo = _contract_cderi(cderia, cderia_neg, block='oooo', nocc=nocca) + eris.ovoo = _contract_cderi(cderia, cderia_neg, block='ovoo', nocc=nocca) + eris.ovvo = _contract_cderi(cderia, cderia_neg, block='ovvo', nocc=nocca) + eris.oovv = _contract_cderi(cderia, cderia_neg, block='oovv', nocc=nocca) + eris.ovov = _contract_cderi(cderia, cderia_neg, block='ovov', nocc=nocca) + eris.ovvv = _contract_cderi(cderia, cderia_neg, block='ovvv', nocc=nocca, pack_right=pack) + eris.vvvv = _contract_cderi(cderia, cderia_neg, block='vvvv', nocc=nocca, pack_left=pack, pack_right=pack) + # Beta-beta: + eris.OOOO = _contract_cderi(cderib, cderib_neg, block='oooo', nocc=noccb) + eris.OVOO = _contract_cderi(cderib, cderib_neg, block='ovoo', nocc=noccb) + eris.OVVO = _contract_cderi(cderib, cderib_neg, block='ovvo', nocc=noccb) + eris.OOVV = _contract_cderi(cderib, cderib_neg, block='oovv', nocc=noccb) + eris.OVOV = _contract_cderi(cderib, cderib_neg, block='ovov', nocc=noccb) + eris.OVVV = _contract_cderi(cderib, cderib_neg, block='ovvv', nocc=noccb, pack_right=pack) + eris.VVVV = _contract_cderi(cderib, cderib_neg, block='vvvv', nocc=noccb, pack_left=pack, pack_right=pack) + # Alpha-beta: + eris.ooOO = _contract_cderi_mixed(cderi, cderi_neg, block='ooOO', nocc=nocc) + eris.ovOO = _contract_cderi_mixed(cderi, cderi_neg, block='ovOO', nocc=nocc) + eris.ovVO = _contract_cderi_mixed(cderi, cderi_neg, block='ovVO', nocc=nocc) + eris.ooVV = _contract_cderi_mixed(cderi, cderi_neg, block='ooVV', nocc=nocc) + eris.ovOV = _contract_cderi_mixed(cderi, cderi_neg, block='ovOV', nocc=nocc) + eris.ovVV = _contract_cderi_mixed(cderi, cderi_neg, block='ovVV', nocc=nocc, pack_right=pack) + eris.vvVV = _contract_cderi_mixed(cderi, cderi_neg, block='vvVV', nocc=nocc, pack_left=pack, pack_right=pack) + # Beta-Alpha: + eris.OVoo = _contract_cderi_mixed(cderi[::-1], cderi_neg[::-1], block='OVoo', nocc=nocc) + eris.OOvv = _contract_cderi_mixed(cderi[::-1], cderi_neg[::-1], block='OOvv', nocc=nocc) + eris.OVvo = _contract_cderi_mixed(cderi[::-1], cderi_neg[::-1], block='OVvo', nocc=nocc) + eris.OVvv = _contract_cderi_mixed(cderi[::-1], cderi_neg[::-1], block='OVvv', nocc=nocc, pack_right=pack) + + return eris
+ +def _contract_cderi(cderi, cderi_neg, block=None, nocc=None, pack_left=False, pack_right=False, imag_tol=1e-8): + if block is not None: + slices = {'o': np.s_[:nocc], 'v': np.s_[nocc:]} + get_slices = (lambda block : (slices[block[0]], slices[block[1]])) + si, sj = get_slices(block[:2]) + sk, sl = get_slices(block[2:]) + else: + si = sj = sk = sl = np.s_[:] + + # Positive part + cderi_left = cderi[:,si,sj].copy() + cderi_right = cderi[:,sk,sl].copy() + if pack_left: + cderi_left = pyscf.lib.pack_tril(cderi_left) + if pack_right: + cderi_right = pyscf.lib.pack_tril(cderi_right) + eri = np.tensordot(cderi_left.conj(), cderi_right, axes=(0, 0)) + #log.debugv("Final shape of (%s|%s)= %r", block[:2], block[2:], list(eri.shape)) + if cderi_neg is None: + return eri + + # Negative part (for 2D systems) + cderi_left = cderi_neg[:,si,sj] + cderi_right = cderi_neg[:,sk,sl] + if pack_left: + cderi_left = pyscf.lib.pack_tril(cderi_left) + if pack_right: + cderi_right = pyscf.lib.pack_tril(cderi_right) + # Avoid allocating another N^4 object: + max_memory = int(3e8) # 300 MB + nblks = int((eri.size * 8 * (1+np.iscomplexobj(eri)))/max_memory) + size = cderi_left.shape[1] + blksize = int(size/max(nblks, 1)) + log.debugv("max_memory= %d MB nblks= %d size= %d blksize= %d", max_memory/1e6, nblks, size, blksize) + for blk in brange(0, size, blksize): + eri[blk] -= np.tensordot(cderi_left[:,blk].conj(), cderi_right, axes=(0, 0)) + #eri -= np.tensordot(cderi_left.conj(), cderi_right, axes=(0, 0)) + assert (eri.size == 0) or (abs(eri.imag).max() < imag_tol) + return eri + +def _contract_cderi_mixed(cderi, cderi_neg, block=None, nocc=None, pack_left=False, pack_right=False, imag_tol=1e-8): + if block is not None: + noccl, noccr = nocc + slices = {'o': np.s_[:noccl], 'v': np.s_[noccl:], 'O': np.s_[:noccr], 'V': np.s_[noccr:]} + get_slices = (lambda block : (slices[block[0]], slices[block[1]])) + si, sj = get_slices(block[:2]) + sk, sl = get_slices(block[2:]) + else: + si = sj = sk = sl = np.s_[:] + + # Positive part + cderi_left = cderi[0][:,si,sj].copy() + cderi_right = cderi[1][:,sk,sl].copy() + if pack_left: + cderi_left = pyscf.lib.pack_tril(cderi_left) + if pack_right: + cderi_right = pyscf.lib.pack_tril(cderi_right) + eri = np.tensordot(cderi_left.conj(), cderi_right, axes=(0, 0)) + #log.debugv("Final shape of (%s|%s)= %r", block[:2], block[2:], list(eri.shape)) + if cderi_neg[0] is None: + return eri + + # Negative part (for 2D systems) + cderi_left = cderi_neg[0][:,si,sj] + cderi_right = cderi_neg[1][:,sk,sl] + if pack_left: + cderi_left = pyscf.lib.pack_tril(cderi_left) + if pack_right: + cderi_right = pyscf.lib.pack_tril(cderi_right) + # Avoid allocating another N^4 object: + max_memory = int(3e8) # 300 MB + nblks = int((eri.size * 8 * (1+np.iscomplexobj(eri)))/max_memory) + size = cderi_left.shape[1] + blksize = int(size/max(nblks, 1)) + log.debugv("max_memory= %d MB nblks= %d size= %d blksize= %d", max_memory/1e6, nblks, size, blksize) + for blk in brange(0, size, blksize): + eri[blk] -= np.tensordot(cderi_left[:,blk].conj(), cderi_right, axes=(0, 0)) + #eri -= np.tensordot(cderi_left.conj(), cderi_right, axes=(0, 0)) + assert (eri.size == 0) or (abs(eri.imag).max() < imag_tol) + return eri +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/ao2mo/pyscf_eris.html b/_modules/vayesta/core/ao2mo/pyscf_eris.html new file mode 100644 index 000000000..8675ef00d --- /dev/null +++ b/_modules/vayesta/core/ao2mo/pyscf_eris.html @@ -0,0 +1,239 @@ + + + + + + vayesta.core.ao2mo.pyscf_eris — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.ao2mo.pyscf_eris

+import numpy as np
+import pyscf
+import pyscf.cc
+import pyscf.lib
+import pyscf.ao2mo
+
+
+def _pack_ovvv(ovvv):
+    no, nva, nvb = ovvv.shape[:3]
+    nvbp = nvb*(nvb+1)//2
+    ovvv = pyscf.lib.pack_tril(ovvv.reshape(no*nva,nvb,nvb)).reshape(no,nva,nvbp)
+    return ovvv
+
+
+def _pack_vvvv(vvvv):
+    nva = vvvv.shape[0]
+    if np.all(np.asarray(vvvv.shape)==nva):
+        return pyscf.ao2mo.restore(4, vvvv, nva)
+    nvb = vvvv.shape[2]
+    nvap = nva*(nva+1)//2
+    nvbp = nvb*(nvb+1)//2
+    vvvv = pyscf.lib.pack_tril(vvvv.reshape(nva*nva, nvb, nvb))
+    vvvv = pyscf.lib.pack_tril(vvvv.reshape(nva, nva, nvbp), axis=0)
+    vvvv = vvvv.reshape(nvap, nvbp)
+    return vvvv
+
+
+
[docs]def make_ccsd_eris(fock, eris, nocc, mo_energy=None): + """Generate _ChemistERIs object for pyscf.cc.ccsd.CCSD. + + Parameters + ---------- + fock: array + Fock matrix in MO basis. + eris: array + Electron-repulsion integrals in MO basis. + nocc: int + Number of occupied orbitals. + mo_energy: array, optional + MO energies. Used for the initial guess and preconditioning. + Default: fock.diagonal(). + + Returns + ------- + eris: pyscf.cc.ccsd._ChemistERIs + ERI object as used by pyscf.cc.ccsd.CCSD. + """ + eris_out = pyscf.cc.ccsd._ChemistsERIs() + nmo = fock.shape[-1] + nvir = nmo - nocc + o, v = np.s_[:nocc], np.s_[nocc:] + eris_out.oooo = eris[o,o,o,o] + eris_out.ovoo = eris[o,v,o,o] + eris_out.oovv = eris[o,o,v,v] + eris_out.ovvo = eris[o,v,v,o] + eris_out.ovov = eris[o,v,o,v] + eris_out.ovvv = _pack_ovvv(eris[o,v,v,v]) + eris_out.vvvv = _pack_vvvv(eris[v,v,v,v]) + eris_out.fock = fock + eris_out.nocc = nocc + if mo_energy is None: + mo_energy = fock.diagonal() + eris_out.mo_energy = mo_energy + eris_out.mo_coeff = np.eye(nmo) + return eris_out
+ + +
[docs]def make_uccsd_eris(fock, eris, nocc, mo_energy=None): + """Generate _ChemistERIs object for pyscf.cc.uccsd.UCCSD. + + Parameters + ---------- + fock: tuple(2) of arrays + Fock matrix in MO basis. + eris: tuple(3) of arrays + Electron-repulsion integrals in MO basis. + nocc: tuple(2) of ints + Number of occupied orbitals. + mo_energy: tuple(2) of arrays, optional + MO energies. Used for the initial guess and preconditioning. + Default: fock.diagonal(). + + Returns + ------- + eris: pyscf.cc.uccsd._ChemistERIs + ERI object as used by pyscf.cc.uccsd.UCCSD. + """ + eris_out = pyscf.cc.uccsd._ChemistsERIs() + nmo = (fock[0].shape[-1], fock[1].shape[-1]) + nvir = (nmo[0]-nocc[0], nmo[1]-nocc[1]) + oa, va = np.s_[:nocc[0]], np.s_[nocc[0]:] + ob, vb = np.s_[:nocc[1]], np.s_[nocc[1]:] + eris_aa, eris_ab, eris_bb = eris + # Alpha-alpha + eris_out.oooo = eris_aa[oa,oa,oa,oa] + eris_out.ovoo = eris_aa[oa,va,oa,oa] + eris_out.oovv = eris_aa[oa,oa,va,va] + eris_out.ovvo = eris_aa[oa,va,va,oa] + eris_out.ovov = eris_aa[oa,va,oa,va] + eris_out.ovvv = _pack_ovvv(eris_aa[oa,va,va,va]) + eris_out.vvvv = _pack_vvvv(eris_aa[va,va,va,va]) + # Beta-beta + eris_out.OOOO = eris_bb[ob,ob,ob,ob] + eris_out.OVOO = eris_bb[ob,vb,ob,ob] + eris_out.OOVV = eris_bb[ob,ob,vb,vb] + eris_out.OVVO = eris_bb[ob,vb,vb,ob] + eris_out.OVOV = eris_bb[ob,vb,ob,vb] + eris_out.OVVV = _pack_ovvv(eris_bb[ob,vb,vb,vb]) + eris_out.VVVV = _pack_vvvv(eris_bb[vb,vb,vb,vb]) + # Alpha-beta + eris_out.ooOO = eris_ab[oa,oa,ob,ob] + eris_out.ovOO = eris_ab[oa,va,ob,ob] + eris_out.ooVV = eris_ab[oa,oa,vb,vb] + eris_out.ovVO = eris_ab[oa,va,vb,ob] + eris_out.ovOV = eris_ab[oa,va,ob,vb] + eris_out.ovVV = _pack_ovvv(eris_ab[oa,va,vb,vb]) + eris_out.vvVV = _pack_vvvv(eris_ab[va,va,vb,vb]) + # Beta-alpha + eris_ba = eris_ab.transpose(2,3,0,1) + eris_out.OVoo = eris_ba[ob,vb,oa,oa] + eris_out.OOvv = eris_ba[ob,ob,va,va] + eris_out.OVvo = eris_ba[ob,vb,va,oa] + eris_out.OVvv = _pack_ovvv(eris_ba[ob,vb,va,va]) + # Other + eris_out.focka = fock[0] + eris_out.fockb = fock[1] + eris_out.fock = fock + eris_out.nocc = nocc + if mo_energy is None: + mo_energy = (fock[0].diagonal(), fock[1].diagonal()) + eris_out.mo_energy = mo_energy + eris_out.mo_coeff = (np.eye(nmo[0]), np.eye(nmo[1])) + return eris_out
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/bath.html b/_modules/vayesta/core/bath.html new file mode 100644 index 000000000..ce187de6a --- /dev/null +++ b/_modules/vayesta/core/bath.html @@ -0,0 +1,149 @@ + + + + + + vayesta.core.bath — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.bath

+from vayesta.core.bath.dmet import DMET_Bath_RHF
+from vayesta.core.bath.dmet import DMET_Bath_UHF
+from vayesta.core.bath.full import Full_Bath_RHF
+from vayesta.core.bath.full import Full_Bath_UHF
+
+from vayesta.core.bath.ewdmet import EwDMET_Bath_RHF
+
+from vayesta.core.bath.bno import BNO_Threshold
+from vayesta.core.bath.bno import BNO_Bath
+from vayesta.core.bath.bno import MP2_BNO_Bath as MP2_Bath_RHF
+from vayesta.core.bath.bno import UMP2_BNO_Bath as MP2_Bath_UHF
+
+from vayesta.core.bath.r2bath import R2_Bath_RHF
+
+
[docs]def DMET_Bath(fragment, *args, **kwargs): + if fragment.base.is_rhf: + return DMET_Bath_RHF(fragment, *args, **kwargs) + if fragment.base.is_uhf: + return DMET_Bath_UHF(fragment, *args, **kwargs)
+ +
[docs]def EwDMET_Bath(fragment, *args, **kwargs): + if fragment.base.is_rhf: + return EwDMET_Bath_RHF(fragment, *args, **kwargs) + if fragment.base.is_uhf: + raise NotImplementedError
+ +
[docs]def MP2_Bath(fragment, *args, **kwargs): + if fragment.base.is_rhf: + return MP2_Bath_RHF(fragment, *args, **kwargs) + if fragment.base.is_uhf: + return MP2_Bath_UHF(fragment, *args, **kwargs)
+ +
[docs]def R2_Bath(fragment, *args, **kwargs): + if fragment.base.is_rhf: + return R2_Bath_RHF(fragment, *args, **kwargs) + if fragment.base.is_uhf: + raise NotImplementedError
+ +
[docs]def Full_Bath(fragment, *args, **kwargs): + if fragment.base.is_rhf: + return Full_Bath_RHF(fragment, *args, **kwargs) + if fragment.base.is_uhf: + return Full_Bath_UHF(fragment, *args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/bath/bath.html b/_modules/vayesta/core/bath/bath.html new file mode 100644 index 000000000..4f18f7e5c --- /dev/null +++ b/_modules/vayesta/core/bath/bath.html @@ -0,0 +1,149 @@ + + + + + + vayesta.core.bath.bath — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.bath.bath

+"""Bath base class."""
+
+import numpy as np
+
+
+
[docs]class Bath: + + def __init__(self, fragment): + self.fragment = fragment + assert (self.spin_restricted or self.spin_unrestricted) + + @property + def spin_restricted(self): + return (np.ndim(self.mf.mo_coeff[0]) == 1) + + @property + def spin_unrestricted(self): + return (np.ndim(self.mf.mo_coeff[0]) == 2) + + @property + def spinsym(self): + return self.fragment.spinsym + + @property + def mf(self): + return self.fragment.mf + + @property + def mol(self): + return self.fragment.mol + + @property + def log(self): + return self.fragment.log + + @property + def base(self): + return self.fragment.base + + @property + def c_frag(self): + return self.fragment.c_frag
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/bath/bno.html b/_modules/vayesta/core/bath/bno.html new file mode 100644 index 000000000..abccd2869 --- /dev/null +++ b/_modules/vayesta/core/bath/bno.html @@ -0,0 +1,841 @@ + + + + + + vayesta.core.bath.bno — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.bath.bno

+import numbers
+import numpy as np
+from vayesta.core.util import AbstractMethodError, brange, dot, einsum, fix_orbital_sign, hstack, time_string, timer
+from vayesta.core import spinalg
+from vayesta.core.types import Cluster
+from vayesta.core.bath import helper
+from vayesta.core.bath.bath import Bath
+
+
+
[docs]class BNO_Threshold: + + def __init__(self, type, threshold): + """ + number: Fixed number of BNOs + occupation: Occupation thresehold for BNOs ("eta") + truncation: Maximum number of electrons to be ignored + electron-percent: Add BNOs until 100-x% of the total number of all electrons is captured + excited-percent: Add BNOs until 100-x% of the total number of excited electrons is captured + """ + if type not in ('number', 'occupation', 'truncation', 'electron-percent', 'excited-percent'): + raise ValueError() + self.type = type + self.threshold = threshold + + def __repr__(self): + return "%s(type=%s, threshold=%g)" % (self.__class__.__name__, self.type, self.threshold) + +
[docs] def get_number(self, bno_occup, electron_total=None): + """Get number of BNOs.""" + nbno = len(bno_occup) + if (nbno == 0): + return 0 + if (self.type == 'number'): + return self.threshold + if (self.type in ('truncation', 'electron-percent', 'excited-percent')): + npos = np.clip(bno_occup, 0.0, None) + nexcited = np.sum(npos) + nelec0 = 0 + if self.type == 'truncation': + ntarget = (nexcited - self.threshold) + elif self.type == 'electron-percent': + assert (electron_total is not None) + ntarget = (1.0-self.threshold) * electron_total + nelec0 = (electron_total - nexcited) + elif self.type == 'excited-percent': + ntarget = (1.0-self.threshold) * nexcited + for bno_number in range(nbno+1): + nelec = (nelec0 + np.sum(npos[:bno_number])) + if nelec >= ntarget: + return bno_number + raise RuntimeError() + if (self.type == 'occupation'): + return np.count_nonzero(bno_occup >= self.threshold) + raise RuntimeError()
+ + +
[docs]class BNO_Bath(Bath): + """Bath natural orbital (BNO) bath, requires DMET bath.""" + + def __init__(self, fragment, dmet_bath, occtype, *args, c_buffer=None, canonicalize=True, **kwargs): + super().__init__(fragment, *args, **kwargs) + self.dmet_bath = dmet_bath + if occtype not in ('occupied', 'virtual'): + raise ValueError("Invalid occtype: %s" % occtype) + self.occtype = occtype + self.c_buffer = c_buffer + # Canonicalization can be set separately for occupied and virtual: + if np.ndim(canonicalize) == 0: + canonicalize = (canonicalize, canonicalize) + self.canonicalize = canonicalize + # Coefficients, occupations, and correlation energy: + self.coeff, self.occup, self.ecorr = self.kernel() + + @property + def c_cluster_occ(self): + """Occupied DMET cluster orbitals.""" + return self.dmet_bath.c_cluster_occ + + @property + def c_cluster_vir(self): + """Virtual DMET cluster orbitals.""" + return self.dmet_bath.c_cluster_vir + +
[docs] def make_bno_coeff(self, *args, **kwargs): + raise AbstractMethodError()
+ + @property + def c_env(self): + if self.occtype == 'occupied': + return self.dmet_bath.c_env_occ + if self.occtype == 'virtual': + return self.dmet_bath.c_env_vir + + @property + def ncluster(self): + if self.occtype == 'occupied': + return self.dmet_bath.c_cluster_occ.shape[-1] + if self.occtype == 'virtual': + return self.dmet_bath.c_cluster_vir.shape[-1] + +
[docs] def kernel(self): + c_env = self.c_env + if self.spin_restricted and (c_env.shape[-1] == 0): + return c_env, np.zeros(0), None + if self.spin_unrestricted and (c_env[0].shape[-1] + c_env[1].shape[-1] == 0): + return c_env, tuple(2*[np.zeros(0)]), None + self.log.info("Making %s BNOs", self.occtype.capitalize()) + self.log.info("-------%s-----", len(self.occtype)*'-') + self.log.changeIndentLevel(1) + coeff, occup, ecorr = self.make_bno_coeff() + self.log_histogram(occup) + self.log.changeIndentLevel(-1) + self.coeff = coeff + self.occup = occup + return coeff, occup, ecorr
+ +
[docs] def log_histogram(self, n_bno): + if len(n_bno) == 0: + return + self.log.info("%s BNO histogram:", self.occtype.capitalize()) + bins = np.hstack([-np.inf, np.logspace(-3, -10, 8)[::-1], np.inf]) + labels = ' ' + ''.join('{:{w}}'.format('E-%d' % d, w=5) for d in range(3, 11)) + self.log.info(helper.make_histogram(n_bno, bins=bins, labels=labels))
+ +
[docs] def get_bath(self, bno_threshold=None, **kwargs): + return self.truncate_bno(self.coeff, self.occup, bno_threshold=bno_threshold, **kwargs)
+ + @staticmethod + def _has_frozen(c_frozen): + return c_frozen.shape[-1] > 0 + +
[docs] def get_finite_bath_correction(self, c_active, c_frozen): + if not self._has_frozen(c_frozen): + return 0 + e1 = self.ecorr + actspace = self.get_active_space(c_active=c_active) + # --- Canonicalization + fock = self.base.get_fock_for_bath() + if self.canonicalize[0]: + self.log.debugv("Canonicalizing occupied orbitals") + c_active_occ = self.fragment.canonicalize_mo(actspace.c_active_occ, fock=fock)[0] + else: + c_active_occ = actspace.c_active_occ + if self.canonicalize[1]: + self.log.debugv("Canonicalizing virtual orbitals") + c_active_vir = self.fragment.canonicalize_mo(actspace.c_active_vir, fock=fock)[0] + else: + c_active_vir = actspace.c_active_vir + actspace = Cluster.from_coeffs(c_active_occ, c_active_vir, + actspace.c_frozen_occ, actspace.c_frozen_vir) + e0 = self._make_t2(actspace, fock, energy_only=True)[1] + e_fbc = e1-e0 + return e_fbc
+ +
[docs] def truncate_bno(self, coeff, occup, bno_threshold=None, verbose=True): + """Split natural orbitals (NO) into bath and rest.""" + + header = '%s BNOs:' % self.occtype + + if isinstance(bno_threshold, numbers.Number): + bno_threshold = BNO_Threshold('occupation', bno_threshold) + nelec_cluster = self.dmet_bath.get_cluster_electrons() + bno_number = bno_threshold.get_number(occup, electron_total=nelec_cluster) + + # Logging + if verbose: + if header: + self.log.info(header.capitalize()) + fmt = " %4s: N= %4d max= % 9.3g min= % 9.3g sum= % 9.3g ( %7.3f %%)" + def log_space(name, n_part): + if len(n_part) == 0: + self.log.info(fmt[:fmt.index('max')].rstrip(), name, 0) + return + with np.errstate(invalid='ignore'): # supress 0/0 warning + self.log.info(fmt, name, len(n_part), max(n_part), min(n_part), np.sum(n_part), + 100*np.sum(n_part)/np.sum(occup)) + log_space("Bath", occup[:bno_number]) + log_space("Rest", occup[bno_number:]) + + c_bath, c_rest = np.hsplit(coeff, [bno_number]) + return c_bath, c_rest
+ +
[docs] def get_active_space(self, c_active=None): + dmet_bath = self.dmet_bath + nao = self.mol.nao + empty = np.zeros((nao, 0)) if self.spin_restricted else np.zeros((2, nao, 0)) + if self.occtype == 'occupied': + if c_active is None: + c_active_occ = spinalg.hstack_matrices(dmet_bath.c_cluster_occ, self.c_env) + else: + c_active_occ = c_active + c_frozen_occ = empty + if self.c_buffer is not None: + raise NotImplementedError + c_active_vir = dmet_bath.c_cluster_vir + c_frozen_vir = dmet_bath.c_env_vir + elif self.occtype == 'virtual': + if c_active is None: + c_active_vir = spinalg.hstack_matrices(dmet_bath.c_cluster_vir, self.c_env) + else: + c_active_vir = c_active + c_frozen_vir = empty + if self.c_buffer is None: + c_active_occ = dmet_bath.c_cluster_occ + c_frozen_occ = dmet_bath.c_env_occ + else: + c_active_occ = spinalg.hstack_matrices(dmet_bath.c_cluster_occ, self.c_buffer) + ovlp = self.fragment.base.get_ovlp() + r = dot(self.c_buffer.T, ovlp, dmet_bath.c_env_occ) + dm_frozen = np.eye(dmet_bath.c_env_occ.shape[-1]) - np.dot(r.T, r) + e, r = np.linalg.eigh(dm_frozen) + c_frozen_occ = np.dot(dmet_bath.c_env_occ, r[:,e>0.5]) + + actspace = Cluster.from_coeffs(c_active_occ, c_active_vir, c_frozen_occ, c_frozen_vir) + return actspace
+ + def _rotate_dm(self, dm, rot): + return dot(rot, dm, rot.T) + + def _dm_take_env(self, dm): + ncluster = self.ncluster + self.log.debugv("n(cluster)= %d", ncluster) + self.log.debugv("tr(D)= %g", np.trace(dm)) + dm = dm[ncluster:,ncluster:] + self.log.debugv("tr(D[env,env])= %g", np.trace(dm)) + return dm + + def _diagonalize_dm(self, dm): + n_bno, r_bno = np.linalg.eigh(dm) + sort = np.s_[::-1] + n_bno = n_bno[sort] + r_bno = r_bno[:,sort] + return r_bno, n_bno
+ + +
[docs]class BNO_Bath_UHF(BNO_Bath): + + def _rotate_dm(self, dm, rot): + return (super()._rotate_dm(dm[0], rot[0]), + super()._rotate_dm(dm[1], rot[1])) + + @property + def ncluster(self): + if self.occtype == 'occupied': + return (self.dmet_bath.c_cluster_occ[0].shape[-1], self.dmet_bath.c_cluster_occ[1].shape[-1]) + if self.occtype == 'virtual': + return (self.dmet_bath.c_cluster_vir[0].shape[-1], self.dmet_bath.c_cluster_vir[1].shape[-1]) + + def _dm_take_env(self, dm): + ncluster = self.ncluster + self.log.debugv("n(cluster)= (%d, %d)", ncluster[0], ncluster[1]) + self.log.debugv("tr(alpha-D)= %g", np.trace(dm[0])) + self.log.debugv("tr( beta-D)= %g", np.trace(dm[1])) + dm = (dm[0][ncluster[0]:,ncluster[0]:], dm[1][ncluster[1]:,ncluster[1]:]) + self.log.debugv("tr(alpha-D[env,env])= %g", np.trace(dm[0])) + self.log.debugv("tr( beta-D[env,env])= %g", np.trace(dm[1])) + return dm + + def _diagonalize_dm(self, dm): + r_bno_a, n_bno_a = super()._diagonalize_dm(dm[0]) + r_bno_b, n_bno_b = super()._diagonalize_dm(dm[1]) + return (r_bno_a, r_bno_b), (n_bno_a, n_bno_b) + +
[docs] def log_histogram(self, n_bno): + if len(n_bno[0]) == len(n_bno[0]) == 0: + return + self.log.info("%s BNO histogram (alpha/beta):", self.occtype.capitalize()) + bins = np.hstack([-np.inf, np.logspace(-3, -10, 8)[::-1], np.inf]) + labels = ' ' + ''.join('{:{w}}'.format('E-%d' % d, w=5) for d in range(3, 11)) + ha = helper.make_histogram(n_bno[0], bins=bins, labels=labels, rstrip=False).split('\n') + hb = helper.make_histogram(n_bno[1], bins=bins, labels=labels).split('\n') + for i in range(len(ha)): + self.log.info(ha[i] + ' ' + hb[i])
+ +
[docs] def truncate_bno(self, coeff, occup, *args, **kwargs): + c_bath_a, c_rest_a = super().truncate_bno(coeff[0], occup[0], *args, **kwargs) + c_bath_b, c_rest_b = super().truncate_bno(coeff[1], occup[1], *args, **kwargs) + return (c_bath_a, c_bath_b), (c_rest_a, c_rest_b)
+ + @staticmethod + def _has_frozen(c_frozen): + return (c_frozen[0].shape[-1] + c_frozen[1].shape[-1]) > 0
+ + +
[docs]class MP2_BNO_Bath(BNO_Bath): + + def __init__(self, *args, project_dmet_order=0, project_dmet_mode='full', project_dmet=None, **kwargs): + # Backwards compatibility: + if project_dmet: + project_dmet_order = 1 + project_dmet_mode = project_dmet + # TODO: deprecate + self.project_dmet_order = project_dmet_order + self.project_dmet_mode = project_dmet_mode + super().__init__(*args, **kwargs) + + def _make_t2(self, actspace, fock, eris=None, max_memory=None, blksize=None, energy_only=False): + """Make T2 amplitudes and pair correlation energies.""" + + if eris is None: + eris, cderi, cderi_neg = self.get_eris_or_cderi(actspace) + # (ov|ov) + if eris is not None: + self.log.debugv("Making T2 amplitudes from ERIs") + assert (eris.ndim == 4) + nocc, nvir = eris.shape[:2] + # (L|ov) + elif cderi is not None: + self.log.debugv("Making T2 amplitudes from CD-ERIs") + assert (cderi.ndim == 3) + assert (cderi_neg is None or cderi_neg.ndim == 3) + nocc, nvir = cderi.shape[1:] + else: + raise ValueError() + + # Fragment projector: + ovlp = self.base.get_ovlp() + rfrag = dot(actspace.c_active_occ.T, ovlp, self.c_frag) + + t2 = np.empty((nocc, nocc, nvir, nvir)) if not energy_only else None + mo_energy = self._get_mo_energy(fock, actspace) + eia = (mo_energy[:nocc,None] - mo_energy[None,nocc:]) + max_memory = max_memory or int(1e9) + if blksize is None: + blksize = int(max_memory / max(nocc*nvir*nvir*8, 1)) + nenv = (nocc if self.occtype == 'occupied' else nvir) + ecorr = 0 + for blk in brange(0, nocc, blksize): + if eris is not None: + gijab = eris[blk].transpose(0,2,1,3) + else: + gijab = einsum('Lia,Ljb->ijab', cderi[:,blk], cderi) + if cderi_neg is not None: + gijab -= einsum('Lia,Ljb->ijab', cderi_neg[:,blk], cderi_neg) + eijab = (eia[blk][:,None,:,None] + eia[None,:,None,:]) + t2blk = (gijab / eijab) + if not energy_only: + t2[blk] = t2blk + # Projected correlation energy: + tp = einsum('ix,i...->x...', rfrag[blk], t2blk) + gp = einsum('ix,i...->x...', rfrag[blk], gijab) + ecorr += (2*einsum('ijab,ijab->', tp, gp) + - einsum('ijab,ijba->', tp, gp)) + + return t2, ecorr + + def _get_mo_energy(self, fock, actspace): + c_act = actspace.c_active + mo_energy = einsum('ai,ab,bi->i', c_act, fock, c_act) + return mo_energy + + def _get_eris(self, actspace): + # We only need the (ov|ov) block for MP2: + mo_coeff = 2*[actspace.c_active_occ, actspace.c_active_vir] + eris = self.base.get_eris_array(mo_coeff) + return eris + + def _get_cderi(self, actspace): + # We only need the (L|ov) block for MP2: + mo_coeff = (actspace.c_active_occ, actspace.c_active_vir) + cderi, cderi_neg = self.base.get_cderi(mo_coeff) + return cderi, cderi_neg + +
[docs] def get_eris_or_cderi(self, actspace): + eris = cderi = cderi_neg = None + t0 = timer() + if self.fragment.base.has_df: + cderi, cderi_neg = self._get_cderi(actspace) + else: + eris = self._get_eris(actspace) + self.log.timingv("Time for AO->MO transformation: %s", time_string(timer()-t0)) + # TODO: Reuse previously obtained integral transformation into N^2 sized quantity (rather than N^4) + #else: + # self.log.debug("Transforming previous eris.") + # eris = transform_mp2_eris(eris, actspace.c_active_occ, actspace.c_active_vir, ovlp=self.base.get_ovlp()) + return eris, cderi, cderi_neg
+ + def _get_dmet_projector_weights(self, eig): + assert np.all(eig > -1e-10) + assert np.all(eig-1 < 1e-10) + eig = np.clip(eig, 0, 1) + mode = self.project_dmet_mode + if mode == 'full': + weights = np.zeros(len(eig)) + elif mode == 'half': + weights = np.full(len(eig), 0.5) + elif mode == 'linear': + weights = 2*abs(np.fmin(eig, 1-eig)) + elif mode == 'cosine': + weights = (1-np.cos(2*eig*np.pi))/2 + elif mode == 'cosine-half': + weights = (1-np.cos(2*eig*np.pi))/4 + elif mode == 'entropy': + weights = 4*eig*(1-eig) + elif mode == 'sqrt-entropy': + weights = 2*np.sqrt(eig*(1-eig)) + elif mode == 'squared-entropy': + weights = (4*eig*(1-eig))**2 + else: + raise ValueError("Invalid value for project_dmet_mode: %s" % mode) + assert np.all(weights > -1e-14) + assert np.all(weights-1 < 1e-14) + weights = np.clip(weights, 0, 1) + return weights + + def _project_t2(self, t2, actspace): + """Project and symmetrize T2 amplitudes""" + self.log.info("Projecting DMET space for MP2 bath (mode= %s, order= %d).", + self.project_dmet_mode, self.project_dmet_order) + weights = self._get_dmet_projector_weights(self.dmet_bath.n_dmet) + weights = hstack(self.fragment.n_frag*[1], weights) + ovlp = self.fragment.base.get_ovlp() + c_fragdmet = hstack(self.fragment.c_frag, self.dmet_bath.c_dmet) + if self.occtype == 'occupied': + rot = dot(actspace.c_active_vir.T, ovlp, c_fragdmet) + proj = einsum('ix,x,jx->ij', rot, weights, rot) + if self.project_dmet_order == 1: + t2 = einsum('xa,ijab->ijxb', proj, t2) + elif self.project_dmet_order == 2: + t2 = einsum('xa,yb,ijab->ijxy', proj, proj, t2) + else: + raise ValueError + elif self.occtype == 'virtual': + rot = dot(actspace.c_active_occ.T, ovlp, c_fragdmet) + proj = einsum('ix,x,jx->ij', rot, weights, rot) + if self.project_dmet_order == 1: + t2 = einsum('xi,i...->x...', proj, t2) + elif self.project_dmet_order == 2: + t2 = einsum('xi,yj,ij...->xy...', proj, proj, t2) + else: + raise ValueError + t2 = (t2 + t2.transpose(1,0,3,2))/2 + return t2 + +
[docs] def make_delta_dm1(self, t2, actspace): + """Delta MP2 density matrix""" + + if self.project_dmet_order > 0: + t2 = self._project_t2(t2, actspace) + + # This is equivalent to: + # do, dv = pyscf.mp.mp2._gamma1_intermediates(mp2, eris=eris) + # do, dv = -2*do, 2*dv + if self.occtype == 'occupied': + dm = (2*einsum('ikab,jkab->ij', t2, t2) + - einsum('ikab,jkba->ij', t2, t2)) + elif self.occtype == 'virtual': + dm = (2*einsum('ijac,ijbc->ab', t2, t2) + - einsum('ijac,ijcb->ab', t2, t2)) + assert np.allclose(dm, dm.T) + return dm
+ +
[docs] def make_bno_coeff(self, eris=None): + """Construct MP2 bath natural orbital coefficients and occupation numbers. + + This routine works for both for spin-restricted and unrestricted. + + Parameters + ---------- + eris: mp2._ChemistERIs + + Returns + ------- + c_bno: (n(AO), n(BNO)) array + Bath natural orbital coefficients. + n_bno: (n(BNO)) array + Bath natural orbital occupation numbers. + """ + t_init = timer() + + actspace_orig = self.get_active_space() + fock = self.base.get_fock_for_bath() + + # --- Canonicalization [optional] + if self.canonicalize[0]: + self.log.debugv("Canonicalizing occupied orbitals") + c_active_occ, r_occ = self.fragment.canonicalize_mo(actspace_orig.c_active_occ, fock=fock) + else: + c_active_occ = actspace_orig.c_active_occ + r_occ = None + if self.canonicalize[1]: + self.log.debugv("Canonicalizing virtual orbitals") + c_active_vir, r_vir = self.fragment.canonicalize_mo(actspace_orig.c_active_vir, fock=fock) + else: + c_active_vir = actspace_orig.c_active_vir + r_vir = None + actspace = Cluster.from_coeffs(c_active_occ, c_active_vir, + actspace_orig.c_frozen_occ, actspace_orig.c_frozen_vir) + + t0 = timer() + t2, ecorr = self._make_t2(actspace, fock, eris=eris) + t_amps = timer()-t0 + + dm = self.make_delta_dm1(t2, actspace) + + # --- Undo canonicalization + if self.occtype == 'occupied' and r_occ is not None: + dm = self._rotate_dm(dm, r_occ) + elif self.occtype == 'virtual' and r_vir is not None: + dm = self._rotate_dm(dm, r_vir) + # --- Diagonalize environment-environment block + dm = self._dm_take_env(dm) + t0 = timer() + r_bno, n_bno = self._diagonalize_dm(dm) + t_diag = timer()-t0 + c_bno = spinalg.dot(self.c_env, r_bno) + c_bno = fix_orbital_sign(c_bno)[0] + + self.log.timing("Time MP2 bath: amplitudes= %s diagonal.= %s total= %s", + *map(time_string, (t_amps, t_diag, (timer()-t_init)))) + + return c_bno, n_bno, ecorr
+ + +
[docs]class UMP2_BNO_Bath(MP2_BNO_Bath, BNO_Bath_UHF): + + def _get_mo_energy(self, fock, actspace): + c_act_a, c_act_b = actspace.c_active + mo_energy_a = einsum('ai,ab,bi->i', c_act_a, fock[0], c_act_a) + mo_energy_b = einsum('ai,ab,bi->i', c_act_b, fock[1], c_act_b) + return (mo_energy_a, mo_energy_b) + + def _get_eris(self, actspace): + # We only need the (ov|ov) block for MP2: + return self.base.get_eris_array_uhf(actspace.c_active_occ, mo_coeff2=actspace.c_active_vir) + + def _get_cderi(self, actspace): + # We only need the (ov|ov) block for MP2: + mo_a = [actspace.c_active_occ[0], actspace.c_active_vir[0]] + mo_b = [actspace.c_active_occ[1], actspace.c_active_vir[1]] + cderi_a, cderi_neg_a = self.base.get_cderi(mo_a) + cderi_b, cderi_neg_b = self.base.get_cderi(mo_b) + return (cderi_a, cderi_b), (cderi_neg_a, cderi_neg_b) + + def _make_t2(self, actspace, fock, eris=None, max_memory=None, blksize=None, energy_only=False): + """Make T2 amplitudes""" + + if eris is None: + eris, cderi, cderi_neg = self.get_eris_or_cderi(actspace) + # (ov|ov) + if eris is not None: + assert len(eris) == 3 + assert (eris[0].ndim == 4) + assert (eris[1].ndim == 4) + assert (eris[2].ndim == 4) + nocca, nvira = eris[0].shape[:2] + noccb, nvirb = eris[2].shape[:2] + # (L|ov) + elif cderi is not None: + assert len(cderi) == 2 + assert (cderi[0].ndim == 3) + assert (cderi[1].ndim == 3) + nocca, nvira = cderi[0].shape[1:] + noccb, nvirb = cderi[1].shape[1:] + else: + raise ValueError() + + # Fragment projector: + ovlp = self.base.get_ovlp() + rfrag = spinalg.dot(spinalg.T(actspace.c_active_occ), ovlp, self.c_frag) + + if not energy_only: + t2aa = np.empty((nocca, nocca, nvira, nvira)) + t2ab = np.empty((nocca, noccb, nvira, nvirb)) + t2bb = np.empty((noccb, noccb, nvirb, nvirb)) + else: + t2aa = t2ab = t2bb = None + mo_energy = self._get_mo_energy(fock, actspace) + eia_a = (mo_energy[0][:nocca,None] - mo_energy[0][None,nocca:]) + eia_b = (mo_energy[1][:noccb,None] - mo_energy[1][None,noccb:]) + + # Alpha-alpha and Alpha-beta: + max_memory = max_memory or int(1e9) + if blksize is None: + blksize_a = int(max_memory / max(nocca*nvira*nvira * 8, 1)) + else: + blksize_a = blksize + ecorr = 0 + for blk in brange(0, nocca, blksize_a): + # Alpha-alpha + if eris is not None: + gijab = eris[0][blk].transpose(0,2,1,3) + else: + gijab = einsum('Lia,Ljb->ijab', cderi[0][:,blk], cderi[0]) + if cderi_neg[0] is not None: + gijab -= einsum('Lia,Ljb->ijab', cderi_neg[0][:,blk], cderi_neg[0]) + eijab = (eia_a[blk][:,None,:,None] + eia_a[None,:,None,:]) + t2blk = (gijab / eijab) + t2blk -= t2blk.transpose(0,1,3,2) + if not energy_only: + t2aa[blk] = t2blk + # Projected correlation energy: + tp = einsum('ix,i...->x...', rfrag[0][blk], t2blk) + gp = einsum('ix,i...->x...', rfrag[0][blk], gijab) + ecorr += (einsum('ijab,ijab->', tp, gp) + - einsum('ijab,ijba->', tp, gp))/4 + # Alpha-beta + if eris is not None: + gijab = eris[1][blk].transpose(0,2,1,3) + else: + gijab = einsum('Lia,Ljb->ijab', cderi[0][:,blk], cderi[1]) + if cderi_neg[0] is not None: + gijab -= einsum('Lia,Ljb->ijab', cderi_neg[0][:,blk], cderi_neg[1]) + eijab = (eia_a[blk][:,None,:,None] + eia_b[None,:,None,:]) + t2blk = (gijab / eijab) + if not energy_only: + t2ab[blk] = t2blk + # Projected correlation energy: + # Alpha projected: + tp = einsum('ix,i...->x...', rfrag[0][blk], t2blk) + gp = einsum('ix,i...->x...', rfrag[0][blk], gijab) + ecorr += einsum('ijab,ijab->', tp, gp)/2 + # Beta projected: + tp = einsum('jx,ij...->ix...', rfrag[1], t2blk) + gp = einsum('jx,ij...->ix...', rfrag[1], gijab) + ecorr += einsum('ijab,ijab->', tp, gp)/2 + + # Beta-beta: + if blksize is None: + blksize_b = int(max_memory / max(noccb*nvirb*nvirb * 8, 1)) + else: + blksize_b = blksize + for blk in brange(0, noccb, blksize_b): + if eris is not None: + gijab = eris[2][blk].transpose(0,2,1,3) + else: + gijab = einsum('Lia,Ljb->ijab', cderi[1][:,blk], cderi[1]) + if cderi_neg[0] is not None: + gijab -= einsum('Lia,Ljb->ijab', cderi_neg[1][:,blk], cderi_neg[1]) + eijab = (eia_b[blk][:,None,:,None] + eia_b[None,:,None,:]) + t2blk = (gijab / eijab) + t2blk -= t2blk.transpose(0,1,3,2) + if not energy_only: + t2bb[blk] = t2blk + # Projected correlation energy: + tp = einsum('ix,i...->x...', rfrag[1][blk], t2blk) + gp = einsum('ix,i...->x...', rfrag[1][blk], gijab) + ecorr += (einsum('ijab,ijab->', tp, gp) + - einsum('ijab,ijba->', tp, gp))/4 + + return (t2aa, t2ab, t2bb), ecorr + + def _project_t2(self, t2, actspace): + """Project and symmetrize T2 amplitudes""" + self.log.info("Projecting DMET space for MP2 bath (mode= %s, order= %d).", + self.project_dmet_mode, self.project_dmet_order) + weightsa = self._get_dmet_projector_weights(self.dmet_bath.n_dmet[0]) + weightsb = self._get_dmet_projector_weights(self.dmet_bath.n_dmet[1]) + weightsa = hstack(self.fragment.n_frag[0]*[1], weightsa) + weightsb = hstack(self.fragment.n_frag[1]*[1], weightsb) + + # Project and symmetrize: + t2aa, t2ab, t2bb = t2 + ovlp = self.fragment.base.get_ovlp() + c_fragdmet_a = hstack(self.fragment.c_frag[0], self.dmet_bath.c_dmet[0]) + c_fragdmet_b = hstack(self.fragment.c_frag[1], self.dmet_bath.c_dmet[1]) + if self.occtype == 'occupied': + rota = dot(actspace.c_active_vir[0].T, ovlp, c_fragdmet_a) + rotb = dot(actspace.c_active_vir[1].T, ovlp, c_fragdmet_b) + proja = einsum('ix,x,jx->ij', rota, weightsa, rota) + projb = einsum('ix,x,jx->ij', rotb, weightsb, rotb) + if self.project_dmet_order == 1: + t2aa = einsum('xa,ijab->ijxb', proja, t2aa) + t2bb = einsum('xa,ijab->ijxb', projb, t2bb) + t2ab = (einsum('xa,ijab->ijxb', proja, t2ab) + + einsum('xb,ijab->ijax', projb, t2ab))/2 + # Not tested: + elif self.project_dmet_order == 2: + t2aa = einsum('xa,yb,ijab->ijxy', proja, proja, t2aa) + t2bb = einsum('xa,yb,ijab->ijxy', projb, projb, t2bb) + t2ab = (einsum('xa,yb,ijab->ijxy', proja, projb, t2ab) + + einsum('xb,ya,ijab->ijyx', projb, proja, t2ab))/2 + else: + raise ValueError + elif self.occtype == 'virtual': + rota = dot(actspace.c_active_occ[0].T, ovlp, c_fragdmet_a) + rotb = dot(actspace.c_active_occ[1].T, ovlp, c_fragdmet_b) + proja = einsum('ix,x,jx->ij', rota, weightsa, rota) + projb = einsum('ix,x,jx->ij', rotb, weightsb, rotb) + if self.project_dmet_order == 1: + t2aa = einsum('xi,i...->x...', proja, t2aa) + t2bb = einsum('xi,i...->x...', projb, t2bb) + t2ab = (einsum('xi,i...->x...', proja, t2ab) + + einsum('xj,ij...->ix...', projb, t2ab))/2 + # Not tested: + elif self.project_dmet_order == 2: + t2aa = einsum('xi,yj,ij...->xy...', proja, proja, t2aa) + t2bb = einsum('xi,yj,ij...->xy...', projb, projb, t2bb) + t2ab = (einsum('xi,yj,ij...->xy...', proja, projb, t2ab) + + einsum('xj,yi,ij...->yx...', projb, proja, t2ab))/2 + else: + raise ValueError + t2aa = (t2aa + t2aa.transpose(1,0,3,2))/2 + t2bb = (t2bb + t2bb.transpose(1,0,3,2))/2 + return (t2aa, t2ab, t2bb) + +
[docs] def make_delta_dm1(self, t2, actspace): + """Delta MP2 density matrix""" + + if self.project_dmet_order > 0: + t2 = self._project_t2(t2, actspace) + + t2aa, t2ab, t2bb = t2 + # Construct occupied-occupied DM + if self.occtype == 'occupied': + dma = (einsum('imef,jmef->ij', t2aa.conj(), t2aa)/2 + + einsum('imef,jmef->ij', t2ab.conj(), t2ab)) + dmb = (einsum('imef,jmef->ij', t2bb.conj(), t2bb)/2 + + einsum('mief,mjef->ij', t2ab.conj(), t2ab)) + # Construct virtual-virtual DM + elif self.occtype == 'virtual': + dma = (einsum('mnae,mnbe->ba', t2aa.conj(), t2aa)/2 + + einsum('mnae,mnbe->ba', t2ab.conj(), t2ab)) + dmb = (einsum('mnae,mnbe->ba', t2bb.conj(), t2bb)/2 + + einsum('mnea,mneb->ba', t2ab.conj(), t2ab)) + assert np.allclose(dma, dma.T) + assert np.allclose(dmb, dmb.T) + return (dma, dmb)
+ + +# ================================================================================================ # + +# if self.opts.plot_orbitals: +# #bins = np.hstack((-np.inf, np.self.logspace(-9, -3, 9-3+1), np.inf)) +# bins = np.hstack((1, np.self.logspace(-3, -9, 9-3+1), -1)) +# for idx, upper in enumerate(bins[:-1]): +# lower = bins[idx+1] +# mask = np.self.logical_and((dm_occ > lower), (dm_occ <= upper)) +# if np.any(mask): +# coeff = c_rot[:,mask] +# self.log.info("Plotting MP2 bath density between %.0e and %.0e containing %d orbitals." % (upper, lower, coeff.shape[-1])) +# dm = np.dot(coeff, coeff.T) +# dset_idx = (4001 if kind == "occ" else 5001) + idx +# self.cubefile.add_density(dm, dset_idx=dset_idx) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/bath/dmet.html b/_modules/vayesta/core/bath/dmet.html new file mode 100644 index 000000000..92db67e42 --- /dev/null +++ b/_modules/vayesta/core/bath/dmet.html @@ -0,0 +1,404 @@ + + + + + + vayesta.core.bath.dmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.bath.dmet

+import numpy as np
+import scipy
+import scipy.linalg
+
+from vayesta.core.util import dot, einsum, fix_orbital_sign, time_string, timer
+from vayesta.core.bath.bath import Bath
+
+DEFAULT_DMET_THRESHOLD = 1e-6
+
+
[docs]class DMET_Bath_RHF(Bath): + + def __init__(self, fragment, dmet_threshold=DEFAULT_DMET_THRESHOLD): + super().__init__(fragment) + self.dmet_threshold = dmet_threshold + # Output + self.c_dmet = None + self.n_dmet = None + self.c_cluster_occ = None + self.c_cluster_vir = None + self.c_env_occ = None + self.c_env_vir = None + + self.dmet_bath = self + +
[docs] def get_cluster_electrons(self): + """Number of cluster electrons.""" + return 2*self.c_cluster_occ.shape[-1]
+ +
[docs] def get_occupied_bath(self, *args, **kwargs): + """Inherited bath classes can overwrite this to return additional occupied bath orbitals.""" + nao = self.mol.nao_nr() + return np.zeros((nao, 0)), self.c_env_occ
+ +
[docs] def get_virtual_bath(self, *args, **kwargs): + """Inherited bath classes can overwrite this to return additional virtual bath orbitals.""" + nao = self.mol.nao_nr() + return np.zeros((nao, 0)), self.c_env_vir
+ +
[docs] def kernel(self): + # --- DMET bath + self.log.info("Making DMET Bath") + self.log.info("----------------") + self.log.changeIndentLevel(1) + t0 = timer() + c_dmet, n_dmet, c_env_occ, c_env_vir = self.make_dmet_bath(self.fragment.c_env) + + # --- Separate occupied and virtual in cluster + cluster = [self.c_frag, c_dmet] + self.base._check_orthonormal(*cluster, mo_name='cluster MO') + c_cluster_occ, c_cluster_vir = self.fragment.diagonalize_cluster_dm(*cluster, tol=2*self.dmet_threshold) + # Canonicalize + c_cluster_occ = self.fragment.canonicalize_mo(c_cluster_occ)[0] + c_cluster_vir = self.fragment.canonicalize_mo(c_cluster_vir)[0] + if self.base.is_rhf: + self.log.info("Cluster orbitals: n(occ)= %3d n(vir)= %3d", c_cluster_occ.shape[-1], c_cluster_vir.shape[-1]) + else: + self.log.info("Alpha-cluster orbitals: n(occ)= %3d n(vir)= %3d", c_cluster_occ[0].shape[-1], c_cluster_vir[0].shape[-1]) + self.log.info(" Beta-cluster orbitals: n(occ)= %3d n(vir)= %3d", c_cluster_occ[1].shape[-1], c_cluster_vir[1].shape[-1]) + self.log.timing("Time for DMET bath: %s", time_string(timer()-t0)) + self.log.changeIndentLevel(-1) + + self.c_dmet = c_dmet + self.n_dmet = n_dmet + self.c_env_occ = c_env_occ + self.c_env_vir = c_env_vir + self.c_cluster_occ = c_cluster_occ + self.c_cluster_vir = c_cluster_vir
+ +
[docs] def get_environment(self): + return self.c_env_occ, self.c_env_vir
+ +
[docs] def make_dmet_bath(self, c_env, dm1=None, c_ref=None, nbath=None, verbose=True, reftol=0.8): + """Calculate DMET bath, occupied environment and virtual environment orbitals. + + If c_ref is not None, complete DMET orbital space using active transformation of reference orbitals. + + TODO: + * reftol should not be necessary - just determine how many DMET bath orbital N are missing + from C_ref and take the N largest eigenvalues over the combined occupied and virtual + eigenvalues. + + Parameters + ---------- + c_env : (n(AO), n(env)) array + MO-coefficients of environment orbitals. + dm1 : (n(AO), n(AO)) array, optional + Mean-field one-particle reduced density matrix in AO representation. If None, `self.mf.make_rdm1()` is used. + Default: None. + c_ref : ndarray, optional + Reference DMET bath orbitals from previous calculation. + nbath : int, optional + Number of DMET bath orbitals. If set, the parameter `tol` is ignored. Default: None. + tol : float, optional + Tolerance for DMET orbitals in eigendecomposition of density-matrix. Default: 1e-5. + reftol : float, optional + Tolerance for DMET orbitals in projection of reference orbitals. + + Returns + ------- + c_bath : (n(AO), n(bath)) array + DMET bath orbitals. + eig : n(bath) array + DMET orbital occupation numbers (in [0,1]). + c_occenv : (n(AO), n(occ. env)) array + Occupied environment orbitals. + c_virenv : (n(AO), n(vir. env)) array + Virtual environment orbitals. + """ + + # No environemnt -> no bath/environment orbitals + if c_env.shape[-1] == 0: + nao = c_env.shape[0] + return np.zeros((nao, 0)), np.zeros((0,)), np.zeros((nao, 0)), np.zeros((nao, 0)) + + tol = self.dmet_threshold + + # Divide by 2 to get eigenvalues in [0,1] + sc = np.dot(self.base.get_ovlp(), c_env) + if dm1 is None: dm1 = self.mf.make_rdm1() + dm_env = dot(sc.T, dm1, sc) / 2 + try: + eig, r = np.linalg.eigh(dm_env) + except np.linalg.LinAlgError: + eig, r = scipy.linalg.eigh(dm_env) + # Sort: occ. env -> DMET bath -> vir. env + eig, r = eig[::-1], r[:,::-1] + if (eig.min() < -1e-8): + self.log.error("Smallest eigenvalue of environment 1-DM below 0: n= %.10e !", eig.min()) + if ((eig.max()-1) > 1e-8): + self.log.error("Largest eigenvalue of environment 1-DM above 1: n= %.10e !", eig.max()) + c_env = np.dot(c_env, r) + c_env = fix_orbital_sign(c_env)[0] + + if nbath is not None: + # FIXME + raise NotImplementedError() + # Work out tolerance which leads to nbath bath orbitals. This overwrites `tol`. + abseig = abs(eig[np.argsort(abs(eig-0.5))]) + low, up = abseig[nbath-1], abseig[nbath] + if abs(low - up) < 1e-14: + raise RuntimeError("Degeneracy in env. DM does not allow for clear identification of %d bath orbitals!\nabs(eig)= %r" + % (nbath, abseig[:nbath+5])) + tol = (low + up)/2 + self.log.debugv("Tolerance for %3d bath orbitals= %.8g", nbath, tol) + + mask_bath = np.logical_and(eig >= tol, eig <= 1-tol) + mask_occenv = (eig > 1-tol) + mask_virenv = (eig < tol) + nbath = sum(mask_bath) + + noccenv = sum(mask_occenv) + nvirenv = sum(mask_virenv) + self.log.info("DMET bath: n(Bath)= %4d n(occ-Env)= %4d n(vir-Env)= %4d", nbath, noccenv, nvirenv) + assert (nbath + noccenv + nvirenv == c_env.shape[-1]) + c_bath = c_env[:,mask_bath].copy() + c_occenv = c_env[:,mask_occenv].copy() + c_virenv = c_env[:,mask_virenv].copy() + + if verbose: + self.log_info(eig, c_env) + n_dmet = eig[mask_bath] + # Complete DMET orbital space using reference orbitals + # NOT MAINTAINED! + if c_ref is not None: + c_bath, c_occenv, c_virenv = self.use_ref_orbitals(c_bath, c_occenv, c_virenv, c_ref, reftol) + return c_bath, n_dmet, c_occenv, c_virenv
+ +
[docs] def make_dmet_bath_fast(self, c_env, dm1=None): + """Fast DMET orbitals. + from Ref. J. Chem. Phys. 151, 064108 (2019); https://doi.org/10.1063/1.5108818 + + Problem: How to get C_occenv and C_virenv without N^3 diagonalization? + """ + + ovlp = self.base.get_ovlp() + c_occ = self.base.mo_coeff_occ + ca, cb = self.c_frag, c_env + ra = dot(c_occ.T, ovlp, ca) + rb = dot(c_occ.T, ovlp, cb) + d11 = np.dot(ra.T, ra) + ea, ua = np.linalg.eigh(d11) + if (ea.min() < -1e-9): + self.log.error("Min eigenvalue of frag. DM = %.6e !", ea.min()) + if ((ea.max()-1) > 1e-9): + self.log.error("Max eigenvalue of frag. DM = %.6e !", ea.max()) + # Fragment singular values: + ea = np.clip(ea, 0, 1) + sa = np.sqrt(ea) + d21 = np.dot(rb.T, ra) + ub = np.dot(d21, ua) + sab = np.linalg.norm(ub, axis=0) + sb = sab/sa + mask_bath = (sb**2 >= self.dmet_threshold) + ub = ub[:,mask_bath] + # In AO basis + c_bath = np.dot(cb, ub/sab[mask_bath]) + return c_bath
+ +
[docs] def log_info(self, eig, c_env, threshold=1e-10): + tol = self.dmet_threshold + mask = np.logical_and(eig >= threshold, eig <= 1-threshold) + ovlp = self.base.get_ovlp() + maxocc = 2 if self.base.spinsym == 'restricted' else 1 + if np.any(mask): + self.log.info("Mean-field entangled orbitals:") + self.log.info(" Bath Occupation Entanglement Character") + self.log.info(" ---- ---------- ------------ ------------------------------------------------------") + for idx, e in enumerate(eig[mask]): + bath = 'Yes' if (tol <= e <= 1-tol) else 'No' + entang = 4*e*(1-e) + # Mulliken population of DMET orbital: + pop = einsum('a,b,ba->a', c_env[:,mask][:,idx], c_env[:,mask][:,idx], ovlp) + sort = np.argsort(-pop) + pop = pop[sort] + labels = np.asarray(self.mol.ao_labels(None))[sort][:min(len(pop), 4)] + char = ', '.join('%s %s%s (%.0f%%)' % (*(l[1:]), 100*pop[i]) for (i,l) in enumerate(labels)) + self.log.info(" %2d %4s %10.3g %12.3g %s", idx+1, bath, e*maxocc, entang, char) + # Calculate entanglement entropy + mask_bath = np.logical_and(eig >= tol, eig <= 1-tol) + entropy = np.sum(eig * (1-eig)) + entropy_bath = np.sum(eig[mask_bath] * (1-eig[mask_bath])) + self.log.info("Entanglement entropy: total= %.3e bath= %.3e (%.2f %%)", + entropy, entropy_bath, 100*entropy_bath/entropy)
+ +
[docs] def use_ref_orbitals(self, c_bath, c_occenv, c_virenv, c_ref, reftol=0.8): + """Not maintained!""" + nref = c_ref.shape[-1] + nbath = c_bath.shape[-1] + self.log.debug("%d reference DMET orbitals given.", nref) + nmissing = nref - nbath + + # DEBUG + _, eig = self.project_ref_orbitals(c_ref, c_bath) + self.log.debug("Eigenvalues of reference orbitals projected into DMET bath:\n%r", eig) + + if nmissing == 0: + self.log.debug("Number of DMET orbitals equal to reference.") + elif nmissing > 0: + # Perform the projection separately for occupied and virtual environment space + # Otherwise, it is not guaranteed that the additional bath orbitals are + # fully (or very close to fully) occupied or virtual. + # --- Occupied + C_occenv, eig = self.project_ref_orbitals(c_ref, c_occenv) + mask_occref = eig >= reftol + mask_occenv = eig < reftol + self.log.debug("Eigenvalues of projected occupied reference: %s", eig[mask_occref]) + if np.any(mask_occenv): + self.log.debug("Largest remaining: %s", max(eig[mask_occenv])) + # --- Virtual + c_virenv, eig = self.project_ref_orbitals(c_ref, c_virenv) + mask_virref = eig >= reftol + mask_virenv = eig < reftol + self.log.debug("Eigenvalues of projected virtual reference: %s", eig[mask_virref]) + if np.any(mask_virenv): + self.log.debug("Largest remaining: %s", max(eig[mask_virenv])) + # -- Update coefficient matrices + c_bath = np.hstack((c_bath, c_occenv[:,mask_occref], c_virenv[:,mask_virref])) + c_occenv = c_occenv[:,mask_occenv].copy() + c_virenv = c_virenv[:,mask_virenv].copy() + nbath = c_bath.shape[-1] + self.log.debug("New number of occupied environment orbitals: %d", c_occenv.shape[-1]) + self.log.debug("New number of virtual environment orbitals: %d", c_virenv.shape[-1]) + if nbath != nref: + err = "Number of DMET bath orbitals=%d not equal to reference=%d" % (nbath, nref) + self.log.critical(err) + raise RuntimeError(err) + else: + err = "More DMET bath orbitals found than in reference!" + self.log.critical(err) + raise RuntimeError(err) + return c_bath, c_occenv, c_virenv
+ + +
[docs]class DMET_Bath_UHF(DMET_Bath_RHF): + +
[docs] def get_cluster_electrons(self): + """Number of (alpha, beta) cluster electrons.""" + return (self.c_cluster_occ[0].shape[-1] + self.c_cluster_occ[1].shape[-1])
+ +
[docs] def get_occupied_bath(self, *args, **kwargs): + """Inherited bath classes can overwrite this to return additional occupied bath orbitals.""" + nao = self.mol.nao_nr() + return np.zeros((2, nao, 0)), self.c_env_occ
+ +
[docs] def get_virtual_bath(self, *args, **kwargs): + """Inherited bath classes can overwrite this to return additional virtual bath orbitals.""" + nao = self.mol.nao_nr() + return np.zeros((2, nao, 0)), self.c_env_vir
+ +
[docs] def make_dmet_bath(self, c_env, dm1=None, **kwargs): + if dm1 is None: dm1 = self.mf.make_rdm1() + results = [] + for s, spin in enumerate(('alpha', 'beta')): + self.log.info("Making %s-DMET bath", spin) + # Use restricted DMET bath routine for each spin: + results.append(super().make_dmet_bath(c_env[s], dm1=2*dm1[s], **kwargs)) + return tuple(zip(*results))
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/bath/ewdmet.html b/_modules/vayesta/core/bath/ewdmet.html new file mode 100644 index 000000000..e0f646043 --- /dev/null +++ b/_modules/vayesta/core/bath/ewdmet.html @@ -0,0 +1,167 @@ + + + + + + vayesta.core.bath.ewdmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.bath.ewdmet

+import numpy as np
+from vayesta.core.linalg import recursive_block_svd
+from vayesta.core.util import dot
+from vayesta.core import spinalg
+from vayesta.core.bath.bath import Bath
+
+
+
[docs]class EwDMET_Bath_RHF(Bath): + + def __init__(self, fragment, dmet_bath, occtype, *args, threshold=None, max_order=20, **kwargs): + super().__init__(fragment, *args, **kwargs) + self.dmet_bath = dmet_bath + if occtype not in ('occupied', 'virtual'): + raise ValueError("Invalid occtype: %s" % occtype) + self.occtype = occtype + if threshold is None: + threshold = dmet_bath.dmet_threshold + self.threshold = threshold + self.max_order = max_order + # Results + self.c_bath, self.sv, self.orders = self.kernel() + +
[docs] def get_fock(self, *args, **kwargs): + return self.fragment.base.get_fock_for_bath(*args, **kwargs)
+ +
[docs] def kernel(self): + c_bath, sv, orders = self._make_svd() + # Output + for order in range(1, self.max_order+1): + mask = (orders == order) + if np.count_nonzero(mask) == 0: + break + if order == 1: + self.log.info("EwDMET bath:") + self.log.info(" Order %2d: singular values= %s", order, np.array2string(sv[mask])) + return c_bath, sv, orders
+ + def _make_svd(self): + c_env = self.c_env + if (c_env.shape[-1] == 0): + return c_env, np.zeros(0), np.zeros(0) + c_frag = self.fragment.c_frag + n_frag = c_frag.shape[-1] + mo = spinalg.hstack_matrices(c_frag, c_env) + fock = self.get_fock() + f_occ = dot(mo.T, fock, mo) + r_svd, sv, orders = recursive_block_svd(f_occ, n=n_frag, tol=self.threshold, maxblock=self.max_order) + c_svd = np.dot(c_env, r_svd) + return c_svd, sv, orders + + @property + def c_env(self): + if self.occtype == 'occupied': + return self.dmet_bath.c_env_occ + if self.occtype == 'virtual': + return self.dmet_bath.c_env_vir + +
[docs] def get_bath(self, order): + nbath = np.count_nonzero(self.orders <= order) + return np.hsplit(self.c_bath, [nbath])
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/bath/full.html b/_modules/vayesta/core/bath/full.html new file mode 100644 index 000000000..898f17742 --- /dev/null +++ b/_modules/vayesta/core/bath/full.html @@ -0,0 +1,137 @@ + + + + + + vayesta.core.bath.full — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.bath.full

+import numpy as np
+from vayesta.core.bath.bath import Bath
+
+
+
[docs]class Full_Bath_RHF(Bath): + + def __init__(self, fragment, dmet_bath, occtype, *args, **kwargs): + super().__init__(fragment, *args, **kwargs) + self.dmet_bath = dmet_bath + if occtype not in ('occupied', 'virtual'): + raise ValueError("Invalid occtype: %s" % occtype) + self.occtype = occtype + + @property + def c_env(self): + if self.occtype == 'occupied': + return self.dmet_bath.c_env_occ + if self.occtype == 'virtual': + return self.dmet_bath.c_env_vir + +
[docs] def get_bath(self, *args, **kwargs): + nao = self.c_env.shape[0] + return self.c_env, np.zeros((nao, 0))
+ + +
[docs]class Full_Bath_UHF(Full_Bath_RHF): + +
[docs] def get_bath(self, *args, **kwargs): + nao = self.c_env[0].shape[0] + return self.c_env, tuple(2*[np.zeros((nao, 0))])
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/bath/helper.html b/_modules/vayesta/core/bath/helper.html new file mode 100644 index 000000000..8d73ad700 --- /dev/null +++ b/_modules/vayesta/core/bath/helper.html @@ -0,0 +1,228 @@ + + + + + + vayesta.core.bath.helper — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.bath.helper

+import numpy as np
+
+from vayesta.core.util import einsum
+
+
[docs]def make_histogram(values, bins, labels=None, binwidth=5, height=6, fill=':', show_number=False, invertx=True, + rstrip=True): + hist = np.histogram(values, bins)[0] + if invertx: + bins, hist = bins[::-1], hist[::-1] + hmax = hist.max() + + width = binwidth*len(hist) + plot = np.zeros((height + show_number, width), dtype=str) + plot[:] = ' ' + if hmax > 0: + for i, hval in enumerate(hist): + colstart = i*binwidth + colend = (i+1)*binwidth + barheight = int(np.rint(height * hval/hmax)) + if barheight == 0: + continue + # Top + plot[-barheight,colstart+1:colend-1] = '_' + if show_number: + number = ' {:^{w}s}'.format('(%d)' % hval, w=binwidth-1) + for idx, i in enumerate(range(colstart, colend)): + plot[-barheight-1,i] = number[idx] + + if barheight == 1: + continue + # Fill + if fill: + plot[-barheight+1:,colstart+1:colend] = fill + # Left/right border + plot[-barheight+1:,colstart] = '|' + plot[-barheight+1:,colend-1] = '|' + + lines = [''.join(plot[r,:].tolist()) for r in range(height)] + # Baseline + lines.append('+' + ((width-2) * '-') + '+') + + if labels: + if isinstance(labels, str): + lines += [labels] + else: + lines += [''.join(['{:^{w}}'.format(l, w=binwidth) for l in labels])] + + if rstrip: + lines = [line.rstrip() for line in lines] + txt = '\n'.join(lines) + return txt
+ +
[docs]def make_horizontal_histogram(values, bins=None, maxbarlength=50, invertx=True): + if bins is None: + bins = np.hstack([-np.inf, np.logspace(-3, -12, 10)[::-1], np.inf]) + hist = np.histogram(values, bins)[0] + if invertx: + bins, hist = bins[::-1], hist[::-1] + cumsum = 0 + lines = [" {:^13s} {:^4s} {:^51s}".format("Interval", "Sum", "Histogram").rstrip()] + for i, hval in enumerate(hist): + cumsum += hval + barlength = int(maxbarlength * hval/hist.max()) + if hval == 0: + bar = "" + else: + barlength = max(barlength, 1) + bar = ((barlength-1) * "|") + "]" + (" (%d)" % hval) + #log.info(" %5.0e - %5.0e %4d |%s", bins[i+1], bins[i], cumsum, bar) + lines.append(" %5.0e - %5.0e %4d |%s" % (bins[i+1], bins[i], cumsum, bar)) + txt = '\n'.join(lines) + return txt
+ +
[docs]def transform_mp2_eris(eris, c_occ, c_vir, ovlp): # pragma: no cover + """Transform eris of kind (ov|ov) (occupied-virtual-occupied-virtual) + + OBSOLETE: replaced by transform_eris + """ + assert (eris is not None) + assert (eris.ovov is not None) + + c_occ0, c_vir0 = np.hsplit(eris.mo_coeff, [eris.nocc]) + nocc0, nvir0 = c_occ0.shape[-1], c_vir0.shape[-1] + nocc, nvir = c_occ.shape[-1], c_vir.shape[-1] + + transform_occ = (nocc != nocc0 or not np.allclose(c_occ, c_occ0)) + if transform_occ: + r_occ = np.linalg.multi_dot((c_occ.T, ovlp, c_occ0)) + else: + r_occ = np.eye(nocc) + transform_vir = (nvir != nvir0 or not np.allclose(c_vir, c_vir0)) + if transform_vir: + r_vir = np.linalg.multi_dot((c_vir.T, ovlp, c_vir0)) + else: + r_vir = np.eye(nvir) + r_all = np.block([ + [r_occ, np.zeros((nocc, nvir0))], + [np.zeros((nvir, nocc0)), r_vir]]) + + # eris.ovov may be hfd5 dataset on disk -> allocate in memory with [:] + govov = eris.ovov[:].reshape(nocc0, nvir0, nocc0, nvir0) + if transform_occ and transform_vir: + govov = einsum("iajb,xi,ya,zj,wb->xyzw", govov, r_occ, r_vir, r_occ, r_vir) + elif transform_occ: + govov = einsum("iajb,xi,zj->xazb", govov, r_occ, r_occ) + elif transform_vir: + govov = einsum("iajb,ya,wb->iyjw", govov, r_vir, r_vir) + eris.ovov = govov.reshape((nocc*nvir, nocc*nvir)) + eris.mo_coeff = np.hstack((c_occ, c_vir)) + eris.fock = np.linalg.multi_dot((r_all, eris.fock, r_all.T)) + eris.mo_energy = np.diag(eris.fock) + return eris
+ +if __name__ == '__main__': + vals = sorted(np.random.rand(30)) + print(make_vertical_histogram(vals)) + print('') + bins = np.linspace(0, 1, 12) + #for line in horizontal_histogram(vals, bins): + labels = ' ' + ''.join('{:{w}}'.format('E-%d' % d, w=6) for d in range(3, 13)) + print(make_histogram(vals, bins, labels=labels)) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/bath/r2bath.html b/_modules/vayesta/core/bath/r2bath.html new file mode 100644 index 000000000..13d439fa5 --- /dev/null +++ b/_modules/vayesta/core/bath/r2bath.html @@ -0,0 +1,214 @@ + + + + + + vayesta.core.bath.r2bath — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.bath.r2bath

+import numpy as np
+
+from vayesta.core.util import dot, einsum, time_string, timer
+from vayesta.core.bath.bath import Bath
+from vayesta.core.bath import helper
+
+
+BOHR = 0.529177210903
+
+def _to_bohr(rcut, unit):
+    unit = unit.lower()
+    if unit.startswith('ang'):
+        return rcut/BOHR
+    if unit.startswith('b'):
+        return rcut
+    raise ValueError("Invalid unit: %s" % unit)
+
+def _get_r2(mol, center, mesh=None):
+    if getattr(mol, 'dimension', 0) == 0:
+        # TODO: instead of evaluating for each center R,
+        # use <r-R|r-R> = <r|r> - 2*<r|R> + <R|R>^2
+        with mol.with_common_origin(center):
+            return mol.intor_symmetric('int1e_r2')
+
+    # For PBC:
+    # Numerical integration over unit cell
+    if mesh is None:
+        mesh = 3*[100]
+    dx, dy, dz = 1/(2*np.asarray(mesh))
+    x = np.linspace(-0.5+dx, 0.5-dx, mesh[0])
+    y = np.linspace(-0.5+dy, 0.5-dy, mesh[1])
+    z = np.linspace(-0.5+dz, 0.5-dz, mesh[2])
+    mx, my, mz = np.meshgrid(x, y, z, indexing='ij')
+    grid = np.stack((mx.flatten(), my.flatten(), mz.flatten()), axis=1)
+    coords = np.dot(grid, mol.lattice_vectors())
+    # Instead of:
+    #coords = mol.get_uniform_grids(mesh))
+
+    assert not mol.cart
+    # We shift the coords around the center:
+    gtoval = mol.pbc_eval_gto('GTOval_sph', coords + center)
+    r2norm = np.linalg.norm(coords, axis=1)**2
+    dvol = mol.vol/len(coords)
+    r2 = dvol*einsum('xa,x,xb->ab', gtoval, r2norm, gtoval)
+    return r2
+
+
[docs]class R2_Bath_RHF(Bath): + + def __init__(self, fragment, dmet_bath, occtype, *args, **kwargs): + super().__init__(fragment, *args, **kwargs) + self.dmet_bath = dmet_bath + if occtype not in ('occupied', 'virtual'): + raise ValueError("Invalid occtype: %s" % occtype) + self.occtype = occtype + if len(self.fragment.atoms) != 1: + raise NotImplementedError + atom = self.fragment.atoms[0] + self.center = self.mol.atom_coord(atom) # In Bohr! + self.coeff, self.eig = self.kernel() + + @property + def c_env(self): + if self.occtype == 'occupied': + return self.dmet_bath.c_env_occ + if self.occtype == 'virtual': + return self.dmet_bath.c_env_vir + +
[docs] def get_r2(self): + r2 = _get_r2(self.mol, self.center) + r2 = dot(self.c_env.T, r2, self.c_env) + hermierr = np.linalg.norm(r2 - r2.T) + if hermierr > 1e-11: + self.log.warning("Hermiticity error= %.3e", hermierr) + r2 = (r2 + r2.T)/2 + else: + self.log.debug("Hermiticity error= %.3e", hermierr) + return r2
+ +
[docs] def kernel(self): + t_init = t0 = timer() + r2 = self.get_r2() + t_r2 = timer()-t0 + t0 = timer() + eig, rot = np.linalg.eigh(r2) + t_diag = timer()-t0 + if np.any(eig < -1e-13): + raise RuntimeError("Negative eigenvalues: %r" % eig[eig<0]) + eig = np.sqrt(np.clip(eig, 0, None)) + coeff = np.dot(self.c_env, rot) + self.log.debug("%s eigenvalues (A):\n%r", self.occtype.capitalize(), eig*BOHR) + self.log_histogram(eig, self.occtype) + self.log.timing("Time R2 bath: R2= %s diagonal.= %s total= %s", + *map(time_string, (t_r2, t_diag, (timer()-t_init)))) + return coeff, eig
+ +
[docs] def get_bath(self, rcut, unit='Ang'): + rcut = _to_bohr(rcut, unit) + nbath = np.count_nonzero(self.eig <= rcut) + c_bath, c_rest = np.hsplit(self.coeff, [nbath]) + return c_bath, c_rest
+ +
[docs] def log_histogram(self, r, name): + if len(r) == 0: + return + self.log.info("%s R2-bath histogram:", name.capitalize()) + bins = np.linspace(0, 20, 20) + self.log.info(helper.make_histogram(r, bins=bins, invertx=False))
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/cmdargs.html b/_modules/vayesta/core/cmdargs.html new file mode 100644 index 000000000..7a583e197 --- /dev/null +++ b/_modules/vayesta/core/cmdargs.html @@ -0,0 +1,143 @@ + + + + + + vayesta.core.cmdargs — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.cmdargs

+import argparse
+import sys
+
+DEFAULT_LOG = 'vlog.txt'
+DEFAULT_ERR = 'verr.txt'
+DEFAULT_LOGLVL = 20
+DEFAULT_ERRLVL = 30
+
+
[docs]def parse_cmd_args(): + parser = argparse.ArgumentParser(allow_abbrev=False) + # Log files + parser.add_argument('-o', '--output-dir', default='.', help="directory for Vayesta output files [default: current working directory]") + parser.add_argument('--log', default='vlog.txt', help="name of the log file [default: %s]" % DEFAULT_LOG) + parser.add_argument('--errlog', default='verr.txt', help="name of the error log file [default: %s]" % DEFAULT_ERR) + # Log level + parser.add_argument('--log-level', type=int, default=DEFAULT_LOGLVL, + help="logging level for the log file [default: %d]" % DEFAULT_LOGLVL) + parser.add_argument('--errlog-level', type=int, default=DEFAULT_ERRLVL, + help="logging level for the error log file [default: %d]" % DEFAULT_ERRLVL) + parser.add_argument('-q', '--quiet', action='store_true', help='Do not print to terminal') + # Enables infov: + parser.add_argument('-v', action='store_const', dest='log_level', const=15, + help="Enables verbose logging output.") + # Enables debug, timing + parser.add_argument('-vv', action='store_const', dest='log_level', const=10, + help="Enables very verbose logging output.") + # Enables debugv, timingv, trace + parser.add_argument('-vvv', action='store_const', dest='log_level', const=1, + help="Enables complete logging output.") + # MPI + parser.add_argument('--mpi', action='store_true', dest='mpi', default=None, help='Import mpi4py [default: attempt import]') + parser.add_argument('--no-mpi', action='store_false', dest='mpi', default=None, help='Do not import mpi4py') + args, unknown_args = parser.parse_known_args() + + # Remove known arguments: + sys.argv = [sys.argv[0], *unknown_args] + return args
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/foldscf.html b/_modules/vayesta/core/foldscf.html new file mode 100644 index 000000000..b265e77be --- /dev/null +++ b/_modules/vayesta/core/foldscf.html @@ -0,0 +1,723 @@ + + + + + + vayesta.core.foldscf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.foldscf

+import logging
+import copy
+import tempfile
+
+import numpy as np
+import scipy
+import scipy.linalg
+
+import pyscf
+from pyscf import lib
+from pyscf.pbc import tools
+import pyscf.pbc.df
+
+from vayesta.core.util import ImaginaryPartError, OrthonormalityError, dot, einsum
+
+log = logging.getLogger(__name__)
+
+
[docs]def fold_scf(kmf, *args, **kwargs): + """Fold k-point sampled mean-field object to Born-von Karman (BVK) supercell. + See also :class:`FoldedSCF`.""" + if isinstance(kmf, pyscf.pbc.scf.khf.KRHF): + return FoldedRHF(kmf, *args, **kwargs) + if isinstance(kmf, pyscf.pbc.scf.kuhf.KUHF): + return FoldedUHF(kmf, *args, **kwargs) + raise NotImplementedError("Mean-field type= %r" % kmf)
+ +
[docs]class FoldedSCF: + """Fold k-point sampled SCF calculation to the BVK (Born-von Karman) supercell. + + This class automatically updates the attributes `mo_energy`, `mo_coeff`, `mo_occ`, `e_tot`, and `converged`. + It also overwrites the methods `get_ovlp`, `get_hcore`, and `get_veff`, + calling its more efficient k-space variant first and folding the result to the supercell. + + Since `get_hcore` and `get_veff` are implemented, `get_fock` is supported automatically, + if the inherited base SCF class implements it. + + Attributes + ---------- + kmf: pyscf.pbc.gto.KRHF or pyscf.pbc.gto.KRHF + Converged k-point sampled mean-field calculation. + kcell: pyscf.pbc.gto.Cell + Primitive unit cell object. + ncells: int + Number of primitive unit cells within BVK supercell + kphase: (ncells, ncells) array + Transformation matrix between k-point and BVK quantities. + """ + + # Propagate the following attributes to the k-point mean-field: + _from_kmf = ['converged', 'exxdiv', 'verbose', 'max_memory', 'conv_tol', 'conv_tol_grad', + 'stdout'] + + def __init__(self, kmf, kpt=np.zeros(3), **kwargs): + # Create a copy, so that the original mean-field object does not get modified + kmf = copy.copy(kmf) + # Support for k-point symmetry: + if hasattr(kmf, 'to_khf'): + kmf = kmf.to_khf() + self.kmf = kmf + self.subcellmesh = kpts_to_kmesh(self.kmf.cell, kmf.kpts) + cell, self.kphase = get_phase(self.kcell, self.kmf.kpts) + # We cannot call the PySCF __init__.... + #super().__init__(scell, **kwargs) + # ... so we have to intialize a few attributes here: + self.mol = self.cell = cell + + # From scf/hf.py: + self.callback = None + self.scf_summary = {} + self._chkfile = tempfile.NamedTemporaryFile(dir=lib.param.TMPDIR) + self.chkfile = self._chkfile.name + + # from pbc/scf/hf.py: + self.with_df = pyscf.pbc.df.FFTDF(cell) + self.rsjk = None + self.kpt = kpt + if not np.allclose(kpt, 0): + raise NotImplementedError() + + def __getattr__(self, name): + if name in self._from_kmf: + return getattr(self.kmf, name) + raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, name)) + + def __setattr__(self, name, value): + if name in self._from_kmf: + return setattr(self.kmf, name, value) + return super().__setattr__(name, value) + + @property + def e_tot(self): + return (self.ncells * self.kmf.e_tot) + + @e_tot.setter + def e_tot(self, value): + self.kmf.e_tot = (value / self.ncells) + + @property + def ncells(self): + return len(self.kmf.kpts) + + @property + def kcell(self): + return self.kmf.mol + + @property + def _eri(self): + return None + +
[docs] def get_ovlp(self, *args, **kwargs): + sk = self.kmf.get_ovlp(*args, **kwargs) + ovlp = k2bvk_2d(sk, self.kphase) + return ovlp
+ +
[docs] def get_hcore(self, *args, make_real=True, **kwargs): + hk = self.kmf.get_hcore(*args, **kwargs) + hcore = k2bvk_2d(hk, self.kphase, make_real=make_real) + return hcore
+ +
[docs] def get_veff(self, mol=None, dm=None, *args, make_real=True, **kwargs): + assert (mol is None or mol is self.mol) + # Unfold DM into k-space + if dm is not None: dm = bvk2k_2d(dm, self.kphase) + vk = self.kmf.get_veff(self.kmf.mol, dm, *args, **kwargs) + veff = k2bvk_2d(vk, self.kphase, make_real=make_real) + return veff
+ +
[docs]class FoldedRHF(FoldedSCF, pyscf.pbc.scf.hf.RHF): + __doc__ = FoldedSCF.__doc__ + + def __init__(self, kmf, *args, **kwargs): + super().__init__(kmf, *args, **kwargs) + ovlp = self.get_ovlp() + self.mo_energy, self.mo_coeff, self.mo_occ = fold_mos(self.kmf.mo_energy, self.kmf.mo_coeff, self.kmf.mo_occ, + self.kphase, ovlp) + + # Test MO folding + #nk = self.ncells + #hk = [dot(kmf.mo_coeff[k].T, kmf.get_ovlp()[k], kmf.mo_coeff[k]) for k in range(nk)] + + #c = self.mo_coeff + #smf = pyscf.pbc.scf.hf.RHF(self.mol) + #h = dot(c.T.conj(), smf.get_ovlp(), c) + + #nao = self.kcell.nao + #h2 = np.zeros_like(h) + #for k in range(nk): + # s = np.s_[k*nao:(k+1)*nao] + # h2[s,s] = hk[k] + + #for k in range(nk): + # for k2 in range(nk): + # s1 = np.s_[k*nao:(k+1)*nao] + # s2 = np.s_[k2*nao:(k2+1)*nao] + # print(k, k2, np.linalg.norm(h[s1,s2]-h2[s1,s2])) + # if (k == k2): + # print(h[s1,s2][0,:]) + # print(h2[s1,s2][0,:]) + + ##print((h - h2)[1,:]) + #1/0 + + assert np.all(self.mo_coeff.imag == 0)
+ +
[docs]class FoldedUHF(FoldedSCF, pyscf.pbc.scf.uhf.UHF): + __doc__ = FoldedSCF.__doc__ + + def __init__(self, kmf, *args, **kwargs): + super().__init__(kmf, *args, **kwargs) + + ovlp = self.get_ovlp() + self.mo_energy, self.mo_coeff, self.mo_occ = zip( + fold_mos(self.kmf.mo_energy[0], self.kmf.mo_coeff[0], self.kmf.mo_occ[0], self.kphase, ovlp), + fold_mos(self.kmf.mo_energy[1], self.kmf.mo_coeff[1], self.kmf.mo_occ[1], self.kphase, ovlp)) + assert np.all(self.mo_coeff[0].imag == 0) + assert np.all(self.mo_coeff[1].imag == 0)
+ +#def fold_mos(kmf, kmo_energy, kmo_coeff, kmo_occ, kphase, ovlp, make_real=True): +#def fold_mos(kmo_energy, kmo_coeff, kmo_occ, kphase, ovlp, make_real=False, sort=False): +
[docs]def fold_mos(kmo_energy, kmo_coeff, kmo_occ, kphase, ovlp, make_real=True, sort=True): + # --- MO energy and occupations + mo_energy = np.hstack(kmo_energy) + mo_occ = np.hstack(kmo_occ) + # --- MO coefficients + # Number of MOs per k-point (can be k-point depedent, for example due to linear-dependency treatment) + mo_coeff = [] + for k, ck in enumerate(kmo_coeff): + cr = np.multiply.outer(kphase[k], ck) # R,ai -> Rai + mo_coeff.append(cr.reshape(cr.shape[0]*cr.shape[1], cr.shape[2])) # Rai -> (Ra),i + mo_coeff = np.hstack(mo_coeff) + # --- Sort MOs according to energy + if sort: + reorder = np.argsort(mo_energy) + mo_energy = mo_energy[reorder] + mo_coeff = mo_coeff[:,reorder] + mo_occ = mo_occ[reorder] + # --- Make MOs real + if make_real: + mo_energy, mo_coeff = make_mo_coeff_real(mo_energy, mo_coeff, ovlp) + #mo_energy, mo_coeff = make_mo_coeff_real_2(mo_energy, mo_coeff, mo_occ, ovlp, hcore) + # Check orthonormality of folded MOs + err = abs(dot(mo_coeff.T.conj(), ovlp, mo_coeff) - np.eye(mo_coeff.shape[-1])).max() + if err > 1e-4: + log.critical("Supercell MOs are not orthonormal (max error= %.3e)", err) + raise OrthonormalityError("Supercell MOs are not orthonormal") + else: + if err > 1e-6: + logf = log.error + elif err > 1e-8: + logf = log.warning + else: + logf = log.debugv + logf("Supercell MO orthonormality error: L(inf)= %.3e", err) + + return mo_energy, mo_coeff, mo_occ
+ +
[docs]def log_error_norms(msg, err, error_tol=1e-3, warn_tol=1e-6): + l2 = np.linalg.norm(err) + linf = abs(err).max() + lmax = max(l2, linf) + if lmax > error_tol: + log.error(msg+" !!!", l2, linf) + elif lmax > warn_tol: + log.warning(msg+" !", l2, linf) + else: + log.debug(msg, l2, linf)
+ +
[docs]def make_mo_coeff_real(mo_energy, mo_coeff, ovlp, imag_tol=1e-10): + mo_coeff = mo_coeff.copy() + # Check orthonormality + ortherr = abs(dot(mo_coeff.T.conj(), ovlp, mo_coeff) - np.eye(mo_coeff.shape[-1])).max() + log.debugv("Orthonormality error before make_mo_coeff_real: %.2e", ortherr) + + # Testing + sc = np.dot(ovlp, mo_coeff) + im = (np.linalg.norm(mo_coeff.imag, axis=0) > imag_tol) + #im = (np.linalg.norm(mo_coeff.imag, axis=0) > -1.0) + log.debugv("%d complex MOs found. L(2)= %.2e", np.count_nonzero(im), np.linalg.norm(mo_coeff.imag)) + if not np.any(im): + return mo_energy, mo_coeff.real + shift = 1.0 - min(mo_energy[im]) + sc = np.dot(ovlp, mo_coeff[:,im]) + fock = np.dot(sc*(mo_energy[im]+shift), sc.T.conj()) + log_error_norms("Imaginary part in folded Fock matrix: L(2)= %.2e L(inf)= %.2e", fock.imag) + # Diagonalize subspace Fock matrix + # TODO: eigensolver for linear dependencies... + eigh = scipy.linalg.eigh + # Modified PySCF: + # eigh = cell.eigh_factory(lindep_threshold=1e-13, fallback_mode=True) + e, v = eigh(fock.real, ovlp) + # Extract MOs from rank-deficient Fock matrix + mask = (e > 0.5) + assert np.count_nonzero(mask) == len(mo_energy[im]) + e, v = e[mask], v[:,mask] + log_error_norms("Error in folded MO energies: L(2)= %.2e L(inf)= %.2e", mo_energy[im]-(e-shift)) + mo_coeff[:,im] = v + + assert np.all(np.linalg.norm(mo_coeff.imag, axis=0) <= imag_tol) + return mo_energy, mo_coeff.real
+ +
[docs]def make_mo_coeff_real_2(mo_energy, mo_coeff, mo_occ, ovlp, hcore, imag_tol=1e-8): + mo_coeff = mo_coeff.copy() + # Check orthonormality + ortherr = abs(dot(mo_coeff.T.conj(), ovlp, mo_coeff) - np.eye(mo_coeff.shape[-1])).max() + log.debugv("Orthonormality error before make_mo_coeff_real: %.2e", ortherr) + + mo_coeff_occ = mo_coeff[:,mo_occ>0] + mo_coeff_vir = mo_coeff[:,mo_occ==0] + + e_hcore_min = scipy.linalg.eigh(hcore, b=ovlp)[0][0] + shift = (1.0 - e_hcore_min) + + def make_subspace_real(mo_coeff_sub): + # Diagonalize Hcore to separate symmetry sectors + nsub = mo_coeff_sub.shape[-1] + hsub = dot(mo_coeff_sub.T.conj(), hcore, mo_coeff_sub) + shift*np.eye(nsub) + cs = dot(mo_coeff_sub.T.conj(), ovlp) + hsub = dot(cs.T.conj(), hsub, cs) + im = abs(hsub.imag).max() + assert (im < imag_tol), ("Imaginary part of Hcore= %.3e" % im) + e, c = scipy.linalg.eigh(hsub.real, b=ovlp) + colspace = (e > 0.5) + assert (np.count_nonzero(colspace) == nsub) + mo_coeff_sub = c[:,colspace] + + # Canonicalize subspace MO coefficients + p = dot(mo_coeff.T.conj(), ovlp, mo_coeff_sub) + fsub = einsum('ia,i,ib->ab', p.conj(), mo_energy, p) + im = abs(fsub.imag).max() + assert (im < imag_tol), ("Imaginary part of Fock= %.3e" % im) + e, r = np.linalg.eigh(fsub.real) + mo_energy_sub = e + mo_coeff_sub = np.dot(mo_coeff_sub, r) + return mo_energy_sub, mo_coeff_sub + + mo_energy_occ, mo_coeff_occ = make_subspace_real(mo_coeff_occ) + mo_energy_vir, mo_coeff_vir = make_subspace_real(mo_coeff_vir) + mo_energy_real = np.hstack((mo_energy_occ, mo_energy_vir)) + mo_coeff_real = np.hstack((mo_coeff_occ, mo_coeff_vir)) + + log_error_norms("Error in MO energies of real orbitals: L(2)= %.2e L(inf)= %.2e", (mo_energy_real-mo_energy)) + + return mo_energy_real, mo_coeff_real
+ + +# ========================== +# From PySCF, modified + +
[docs]def kpts_to_kmesh(cell, kpts): + """Guess k-mesh from k-points.""" + scaled_k = cell.get_scaled_kpts(kpts).round(8) + kmesh = [len(np.unique(scaled_k[:,d])) for d in range(3)] + return kmesh
+ +
[docs]def translation_vectors_for_kmesh(cell, kmesh): + """Translation vectors to construct super-cell of which the gamma point is + identical to the k-point mesh of primitive cell""" + latt_vec = cell.lattice_vectors() + r_rel = [np.arange(kmesh[d]) for d in range(3)] + r_vec_rel = lib.cartesian_prod(r_rel) + r_vec_abs = np.dot(r_vec_rel, latt_vec) + return r_vec_abs
+ +
[docs]def get_phase(cell, kpts, kmesh=None): + """The unitary transformation that transforms the supercell basis k-mesh + adapted basis. + + Important: This is ordered as (k,R), different to PySCF k2gamma.get_phase! + """ + if kmesh is None: kmesh = kpts_to_kmesh(cell, kpts) + r_vec_abs = translation_vectors_for_kmesh(cell, kmesh) + nr = len(r_vec_abs) + phase = np.exp(1j*np.dot(kpts, r_vec_abs.T)) / np.sqrt(nr) + scell = tools.super_cell(cell, kmesh) + return scell, phase
+ +
[docs]def k2bvk_2d(ak, phase, make_real=True, imag_tol=1e-6): + """Transform unit-cell k-point AO integrals to the supercell gamma-point AO integrals.""" + ag = einsum('kR,...kij,kS->...RiSj', phase, ak, phase.conj()) + imag_norm = abs(ag.imag).max() + if make_real and (imag_norm > imag_tol): + msg = "Imaginary part of supercell integrals: %.2e (tolerance= %.2e)" + log.fatal(msg, imag_norm, imag_tol) + raise ImaginaryPartError(msg % (imag_norm, imag_tol)) + nr, nao = phase.shape[1], ak.shape[-1] + shape = (*ag.shape[:-4], nr*nao, nr*nao) + ag = ag.reshape(shape) + if make_real: + return ag.real + return ag
+ +
[docs]def bvk2k_2d(ag, phase): + """Transform supercell gamma-point AO integrals to the unit-cell k-point AO integrals.""" + nr, nao = phase.shape[1], ag.shape[-1]//phase.shape[1] + shape = (*ag.shape[:-2], nr, nao, nr, nao) + ag = ag.reshape(shape) + ak = einsum('kR,...RiSj,kS->...kij', phase.conj(), ag, phase) + return ak
+ + +#def rotate_mo_to_real(cell, mo_energy, mo_coeff, degen_tol=1e-3, rotate_degen=True): +# """Applies a phase factor to each MO, minimizing the maximum imaginary element. +# +# Typically, this should reduce the imaginary part of a non-degenerate, Gamma point orbital to zero. +# However, for degenerate subspaces, addition treatment is required. +# """ +# +# # Output orbitals +# mo_coeff_out = mo_coeff.copy() +# +# for mo_idx, mo_e in enumerate(mo_energy): +# # Check if MO is degnerate +# if mo_idx == 0: +# degen = (abs(mo_e - mo_energy[mo_idx+1]) < degen_tol) +# elif mo_idx == (len(mo_energy)-1): +# degen = (abs(mo_e - mo_energy[mo_idx-1]) < degen_tol) +# else: +# degen = (abs(mo_e - mo_energy[mo_idx-1]) < degen_tol) or (abs(mo_e - mo_energy[mo_idx+1]) < degen_tol) +# if degen and not rotate_degen: +# continue +# +# mo_c = mo_coeff[:,mo_idx] +# norm_in = np.linalg.norm(mo_c.imag) +# # Find phase which makes the largest element of |C| real +# maxidx = np.argmax(abs(mo_c.imag)) +# maxval = mo_c[maxidx] +# # Determine -phase of maxval and rotate to real axis +# phase = -np.angle(maxval) +# mo_c2 = mo_c*np.exp(1j*phase) +# +# # Only perform rotation if imaginary norm is decreased +# norm_out = np.linalg.norm(mo_c2.imag) +# if (norm_out < norm_in): +# mo_coeff_out[:,mo_idx] = mo_c2 +# else: +# norm_out = norm_in +# if norm_out > 1e-8 and not degen: +# logger.warn(cell, "Non-degenerate MO %4d at E= %+12.8f Ha: ||Im(C)||= %6.2e !", mo_idx, mo_e, norm_out) +# +# return mo_coeff_out +# +#def mo_k2gamma(cell, mo_energy, mo_coeff, kpts, kmesh=None, degen_tol=1e-3, imag_tol=1e-9): +# logger.debug(cell, "Starting mo_k2gamma") +# scell, phase = get_phase(cell, kpts, kmesh) +# +# # Supercell Gamma-point MO energies +# e_gamma = np.hstack(mo_energy) +# # The number of MOs may be k-point dependent (eg. due to linear dependency) +# nmo_k = np.asarray([ck.shape[-1] for ck in mo_coeff]) +# nk = len(mo_coeff) +# nao = mo_coeff[0].shape[0] +# nr = phase.shape[0] +# # Transform mo_coeff from k-points to supercell Gamma-point: +# c_gamma = [] +# for k in range(nk): +# c_k = np.einsum('R,um->Rum', phase[:,k], mo_coeff[k]) +# c_k = c_k.reshape(nr*nao, nmo_k[k]) +# c_gamma.append(c_k) +# c_gamma = np.hstack(c_gamma) +# assert c_gamma.shape == (nr*nao, sum(nmo_k)) +# # Sort according to MO energy +# sort = np.argsort(e_gamma) +# e_gamma, c_gamma = e_gamma[sort], c_gamma[:,sort] +# # Determine overlap by unfolding for better accuracy +# s_k = cell.pbc_intor('int1e_ovlp', hermi=1, kpts=kpts, pbcopt=lib.c_null_ptr()) +# s_gamma = to_supercell_ao_integrals(cell, kpts, s_k) +# # Orthogonality error of unfolded MOs +# err_orth = abs(np.linalg.multi_dot((c_gamma.conj().T, s_gamma, c_gamma)) - np.eye(c_gamma.shape[-1])).max() +# if err_orth > 1e-4: +# logger.error(cell, "Orthogonality error of MOs= %.2e !!!", err_orth) +# else: +# logger.debug(cell, "Orthogonality error of MOs= %.2e", err_orth) +# +# # Make Gamma point MOs real: +# +# # Try to remove imaginary parts by multiplication of simple phase factors +# c_gamma = rotate_mo_to_real(cell, e_gamma, c_gamma, degen_tol=degen_tol) +# +# # For degenerated MOs, the transformed orbitals in super cell may not be +# # real. Construct a sub Fock matrix in super-cell to find a proper +# # transformation that makes the transformed MOs real. +# #e_k_degen = abs(e_gamma[1:] - e_gamma[:-1]) < degen_tol +# #degen_mask = np.append(False, e_k_degen) | np.append(e_k_degen, False) +# +# # Get eigenvalue solver with linear-dependency treatment +# eigh = cell.eigh_factory(lindep_threshold=1e-13, fallback_mode=True) +# +# c_gamma_out = c_gamma.copy() +# mo_mask = (np.linalg.norm(c_gamma.imag, axis=0) > imag_tol) +# logger.debug(cell, "Number of MOs with imaginary coefficients: %d out of %d", np.count_nonzero(mo_mask), len(mo_mask)) +# if np.any(mo_mask): +# #mo_mask = np.s_[:] +# #if np.any(~degen_mask): +# # err_imag = abs(c_gamma[:,~degen_mask].imag).max() +# # logger.debug(cell, "Imaginary part in non-degenerate MO coefficients= %.2e", err_imag) +# # # Diagonalize Fock matrix spanned by degenerate MOs only +# # if err_imag < 1e-8: +# # mo_mask = degen_mask +# +# # F +# #mo_mask = (np.linalg.norm(c_gamma.imag, axis=0) > imag_tol) +# +# # Shift all MOs above the eig=0 subspace, so they can be extracted below +# shift = 1.0 - min(e_gamma[mo_mask]) +# cs = np.dot(c_gamma[:,mo_mask].conj().T, s_gamma) +# f_gamma = np.dot(cs.T.conj() * (e_gamma[mo_mask] + shift), cs) +# logger.debug(cell, "Imaginary parts of Fock matrix: ||Im(F)||= %.2e max|Im(F)|= %.2e", np.linalg.norm(f_gamma.imag), abs(f_gamma.imag).max()) +# +# e, v = eigh(f_gamma.real, s_gamma) +# +# # Extract MOs from rank-deficient Fock matrix +# mask = (e > 0.5) +# assert np.count_nonzero(mask) == len(e_gamma[mo_mask]) +# e, v = e[mask], v[:,mask] +# e_delta = e_gamma[mo_mask] - (e-shift) +# if abs(e_delta).max() > 1e-4: +# logger.error(cell, "Error of MO energies: ||dE||= %.2e max|dE|= %.2e !!!", np.linalg.norm(e_delta), abs(e_delta).max()) +# else: +# logger.debug(cell, "Error of MO energies: ||dE||= %.2e max|dE|= %.2e", np.linalg.norm(e_delta), abs(e_delta).max()) +# c_gamma_out[:,mo_mask] = v +# +# err_imag = abs(c_gamma_out.imag).max() +# if err_imag > 1e-4: +# logger.error(cell, "Imaginary part in gamma-point MOs: max|Im(C)|= %7.2e !!!", err_imag) +# else: +# logger.debug(cell, "Imaginary part in gamma-point MOs: max|Im(C)|= %7.2e", err_imag) +# c_gamma_out = c_gamma_out.real +# +# # Determine mo_phase, i.e. the unitary transformation from k-adapted orbitals to gamma-point orbitals +# s_k_g = np.einsum('kuv,Rk->kuRv', s_k, phase.conj()).reshape(nk,nao,nr*nao) +# mo_phase = [] +# for k in range(nk): +# mo_phase_k = lib.einsum('um,uv,vi->mi', mo_coeff[k].conj(), s_k_g[k], c_gamma_out) +# mo_phase.append(mo_phase_k) +# +# return scell, e_gamma, c_gamma_out, mo_phase +# +#def k2gamma(kmf, kmesh=None): +# r''' +# convert the k-sampled mean-field object to the corresponding supercell +# gamma-point mean-field object. +# +# math: +# C_{\nu ' n'} = C_{\vecR\mu, \veck m} = \frac{1}{\sqrt{N_{\UC}}} +# \e^{\ii \veck\cdot\vecR} C^{\veck}_{\mu m} +# ''' +# def transform(mo_energy, mo_coeff, mo_occ): +# scell, E_g, C_gamma = mo_k2gamma(kmf.cell, mo_energy, mo_coeff, +# kmf.kpts, kmesh)[:3] +# E_sort_idx = np.argsort(np.hstack(mo_energy)) +# mo_occ = np.hstack(mo_occ)[E_sort_idx] +# return scell, E_g, C_gamma, mo_occ +# +# if isinstance(kmf, scf.khf.KRHF): +# scell, E_g, C_gamma, mo_occ = transform(kmf.mo_energy, kmf.mo_coeff, kmf.mo_occ) +# mf = scf.RHF(scell) +# elif isinstance(kmf, scf.kuhf.KUHF): +# scell, Ea, Ca, occ_a = transform(kmf.mo_energy[0], kmf.mo_coeff[0], kmf.mo_occ[0]) +# scell, Eb, Cb, occ_b = transform(kmf.mo_energy[1], kmf.mo_coeff[1], kmf.mo_occ[1]) +# mf = scf.UHF(scell) +# E_g = [Ea, Eb] +# C_gamma = [Ca, Cb] +# mo_occ = [occ_a, occ_b] +# else: +# raise NotImplementedError('SCF object %s not supported' % kmf) +# +# mf.mo_coeff = C_gamma +# mf.mo_energy = E_g +# mf.mo_occ = mo_occ +# mf.converged = kmf.converged +# # Scale energy by number of primitive cells within supercell +# mf.e_tot = len(kmf.kpts)*kmf.e_tot +# +# # Use unfolded overlap matrix for better error cancellation +# #s_k = kmf.cell.pbc_intor('int1e_ovlp', hermi=1, kpts=kmf.kpts, pbcopt=lib.c_null_ptr()) +# s_k = kmf.get_ovlp() +# ovlp = to_supercell_ao_integrals(kmf.cell, kmf.kpts, s_k) +# assert np.allclose(ovlp, ovlp.T) +# ovlp = (ovlp + ovlp.T) / 2 +# mf.get_ovlp = lambda *args : ovlp +# +# return mf + + + +#def to_supercell_mo_integrals(kmf, mo_ints): +# '''Transform from the unitcell k-point MO integrals to the supercell +# gamma-point MO integrals. +# ''' +# cell = kmf.cell +# kpts = kmf.kpts +# +# mo_k = np.array(kmf.mo_coeff) +# Nk, nao, nmo = mo_k.shape +# e_k = np.array(kmf.mo_energy) +# scell, E_g, C_gamma, mo_phase = mo_k2gamma(cell, e_k, mo_k, kpts) +# +# scell_ints = lib.einsum('xui,xuv,xvj->ij', mo_phase.conj(), mo_ints, mo_phase) +# assert(abs(scell_ints.imag).max() < 1e-7) +# return scell_ints.real + + +if __name__ == '__main__': + + import vayesta + from pyscf.pbc import gto, scf + + log = vayesta.log + + cell = gto.Cell() + cell.atom = ''' + H 0.0 0.0 0.0 + H 0.6 0.4 0.0 + ''' + + cell.basis = 'cc-pvdz' + cell.a = np.eye(3) * 4.0 + cell.a[2,2] = 20 + cell.unit='B' + cell.dimension = 2 + cell.build() + + kmesh = [3, 3, 1] + kpts = cell.make_kpts(kmesh) + + khf = scf.KRHF(cell, kpts) + #khf = scf.KUHF(cell, kpts) + khf.conv_tol = 1e-12 + khf = khf.density_fit(auxbasis='cc-pvdz-jkfit') + khf.kernel() + + hf = fold_scf(khf) + + scell = pyscf.pbc.tools.super_cell(cell, kmesh) + shf = scf.RHF(scell) + #shf = scf.UHF(scell) + shf.conv_tol = 1e-12 + shf = shf.density_fit(auxbasis='cc-pvdz-jkfit') + shf.kernel() + + # Overlap matrix + err = np.linalg.norm(hf.get_ovlp() - shf.get_ovlp()) + print("Error overlap= %.3e" % err) + + # Hcore matrix + err = np.linalg.norm(hf.get_hcore() - shf.get_hcore()) + print("Error hcore= %.3e" % err) + + # Veff matrix + err = np.linalg.norm(hf.get_veff() - shf.get_veff()) + print("Error veff= %.3e" % err) + + # Veff matrix for given DM + scell, phase = get_phase(cell, kpts) + dm = k2bvk_2d(khf.get_init_guess(), phase) + err = np.linalg.norm(hf.get_veff(dm=dm) - shf.get_veff(dm=dm)) + print("Error veff for given DM= %.3e" % err) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/fragmentation.html b/_modules/vayesta/core/fragmentation.html new file mode 100644 index 000000000..914153396 --- /dev/null +++ b/_modules/vayesta/core/fragmentation.html @@ -0,0 +1,144 @@ + + + + + + vayesta.core.fragmentation — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.fragmentation

+import pyscf
+import pyscf.scf
+
+from vayesta.core.fragmentation.sao import SAO_Fragmentation as SAO_Fragmentation_RHF
+from vayesta.core.fragmentation.sao import SAO_Fragmentation_UHF
+from vayesta.core.fragmentation.iao import IAO_Fragmentation as IAO_Fragmentation_RHF
+from vayesta.core.fragmentation.iao import IAO_Fragmentation_UHF
+from vayesta.core.fragmentation.iaopao import IAOPAO_Fragmentation as IAOPAO_Fragmentation_RHF
+from vayesta.core.fragmentation.iaopao import IAOPAO_Fragmentation_UHF
+from vayesta.core.fragmentation.site import Site_Fragmentation as Site_Fragmentation_RHF
+from vayesta.core.fragmentation.site import Site_Fragmentation_UHF
+from vayesta.core.fragmentation.cas import CAS_Fragmentation as CAS_Fragmentation_RHF
+from vayesta.core.fragmentation.cas import CAS_Fragmentation_UHF
+
+
[docs]def SAO_Fragmentation(emb, *args, **kwargs): + if emb.is_uhf: + return SAO_Fragmentation_UHF(emb, *args, **kwargs) + return SAO_Fragmentation_RHF(emb, *args, **kwargs)
+ +
[docs]def Site_Fragmentation(emb, *args, **kwargs): + if emb.is_uhf: + return Site_Fragmentation_UHF(emb, *args, **kwargs) + return Site_Fragmentation_RHF(emb, *args, **kwargs)
+ +
[docs]def IAO_Fragmentation(emb, *args, **kwargs): + if emb.is_uhf: + return IAO_Fragmentation_UHF(emb, *args, **kwargs) + return IAO_Fragmentation_RHF(emb, *args, **kwargs)
+ +
[docs]def IAOPAO_Fragmentation(emb, *args, **kwargs): + if emb.is_uhf: + return IAOPAO_Fragmentation_UHF(emb, *args, **kwargs) + return IAOPAO_Fragmentation_RHF(emb, *args, **kwargs)
+ +
[docs]def CAS_Fragmentation(emb, *args, **kwargs): + if emb.is_uhf: + return CAS_Fragmentation_UHF(emb, *args, **kwargs) + return CAS_Fragmentation_RHF(emb, *args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/fragmentation/cas.html b/_modules/vayesta/core/fragmentation/cas.html new file mode 100644 index 000000000..a9a587c1b --- /dev/null +++ b/_modules/vayesta/core/fragmentation/cas.html @@ -0,0 +1,224 @@ + + + + + + vayesta.core.fragmentation.cas — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.fragmentation.cas

+import numpy as np
+from vayesta.core.util import energy_string
+from vayesta.core.fragmentation.fragmentation import Fragmentation
+from vayesta.core.fragmentation.ufragmentation import Fragmentation_UHF
+
+
+
[docs]class CAS_Fragmentation(Fragmentation): + """Fragmentation into mean-field states.""" + + name = "CAS" + +
[docs] def get_coeff(self): + """Return MO coefficients as "fragment" orbitals.""" + return self.mo_coeff
+ +
[docs] def get_labels(self): + return [("", "", "MO", str(x)) for x in range(0, self.nmo)]
+ +
[docs] def get_atom_indices_symbols(self, *args, **kwargs): + raise NotImplementedError("Atomic fragmentation is not compatible with CAS fragmentation")
+ + # Need to overload this function since only accept integer specification in this case. +
[docs] def get_orbital_indices_labels(self, orbitals): + if isinstance(orbitals[0], (int, np.integer)): + orbital_indices = orbitals + orbital_labels = (np.asarray(self.labels, dtype=object)[orbitals]).tolist() + orbital_labels = [('%s%3s %s%-s' % tuple(l)).strip() for l in orbital_labels] + return orbital_indices, orbital_labels + raise ValueError("A list of integers is required! orbitals= %r" % orbitals)
+ +
[docs] def add_cas_fragment(self, ncas, nelec, name=None, degen_tol=1e-8, **kwargs): + """Create a single fragment containing a CAS. + + Parameters + ---------- + ncas: int + Number of spatial orbitals within the fragment. + nelec: int + Number of electrons within the fragment. + name: str, optional + Name for the fragment. If None, a name is automatically generated from the orbital indices. Default: None. + """ + + if self.emb.is_rhf: + occ = self.emb.mo_occ + else: + occ = sum(self.emb.mo_occ) + + if nelec > sum(occ): + raise ValueError("CAS specified with more electrons than present in system.") + if ncas > len(occ): + raise ValueError("CAS specified with more orbitals than present in system.") + # Search for how many orbital pairs we have to include to obtain desired number of electrons. + # This should be stable regardless of occupancies etc. + anyocc = np.where(occ > 0)[0] + offset, nelec_curr = -1, 0 + while nelec_curr < nelec: + offset += 1 + nelec_curr += int(occ[anyocc[-1] - offset]) + + if nelec_curr > nelec or offset > ncas: + raise ValueError( + "Cannot create CAS with required properties around Fermi level with current MO occupancy.") + + def check_for_degen(energies, po, pv, name=""): + # Log orbital energies + for i in range(max(po-2, 0), min(pv+2, len(energies))): + if i < po: + orbtype = 'core' + elif i >= pv: + orbtype = 'external' + else: + orbtype = 'CAS' + if i == po: + self.log.info(62*'-') + self.log.info("MO %4d: %-8s occupation= %1d energy= %s", i, orbtype, occ[i], energy_string(energies[i])) + if i == (pv-1): + self.log.info(62*'-') + + if po > 0: + ogap = energies[po] - energies[po-1] + self.log.info("%sCAS occupied energy gap: %s", name, energy_string(ogap)) + elif po == 0: + self.log.info("%sCAS contains all occupied orbitals.", name) + ogap = np.inf + else: + # Shouldn't reach this as would require CAS to have more electrons than the full system. + raise ValueError("CAS would contain more electrons than full system.") + + if ogap < degen_tol: + raise ValueError("Requested %sCAS splits degenerate occupied orbitals." % name) + + try: + vgap = energies[pv] - energies[pv - 1] + except IndexError: + assert(pv == len(energies)) + self.log.info("%sCAS contains all virtual orbitals.", name) + vgap = np.inf + else: + self.log.info("%sCAS virtual energy gap: %s", name, energy_string(vgap)) + if vgap < degen_tol: + raise ValueError("Requested CAS splits degenerate virtual orbitals.") + + if self.emb.is_rhf: + check_for_degen(self.emb.mo_energy, anyocc[-1]-offset, anyocc[-1]-offset+ncas) + else: + check_for_degen(self.emb.mo_energy[0], anyocc[-1]-offset, anyocc[-1]-offset+ncas, "alpha ") + check_for_degen(self.emb.mo_energy[1], anyocc[-1]-offset, anyocc[-1]-offset+ncas, "beta ") + + orbs = list(range(anyocc[-1]-offset, anyocc[-1]-offset+ncas)) + return self.add_orbital_fragment(orbs, name=name, **kwargs)
+ + +
[docs]class CAS_Fragmentation_UHF(Fragmentation_UHF, CAS_Fragmentation): + +
[docs] def get_labels(self): + return [("", "", "MO", str(x)) for x in range(0, self.nmo[0])]
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/fragmentation/fragmentation.html b/_modules/vayesta/core/fragmentation/fragmentation.html new file mode 100644 index 000000000..d90ba2aaa --- /dev/null +++ b/_modules/vayesta/core/fragmentation/fragmentation.html @@ -0,0 +1,560 @@ + + + + + + vayesta.core.fragmentation.fragmentation — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.fragmentation.fragmentation

+import contextlib
+import numpy as np
+import scipy
+import scipy.linalg
+
+from vayesta.core.util import dot, fix_orbital_sign, time_string, timer
+from vayesta.core.fragmentation import helper
+
+
[docs]def check_orthonormal(log, mo_coeff, ovlp, mo_name="orbital", tol=1e-7): + """Check orthonormality of mo_coeff. + + Supports both RHF and UHF. + """ + # RHF + if np.ndim(mo_coeff[0]) == 1: + err = dot(mo_coeff.T, ovlp, mo_coeff) - np.eye(mo_coeff.shape[-1]) + l2 = np.linalg.norm(err) + linf = abs(err).max() + if max(l2, linf) > tol: + log.error("Orthogonality error of %ss: L(2)= %.2e L(inf)= %.2e !", mo_name, l2, linf) + else: + log.debugv("Orthogonality error of %ss: L(2)= %.2e L(inf)= %.2e", mo_name, l2, linf) + return l2, linf + # UHF + l2a, linfa = check_orthonormal(log, mo_coeff[0], ovlp, mo_name='alpha-%s' % mo_name, tol=tol) + l2b, linfb = check_orthonormal(log, mo_coeff[1], ovlp, mo_name='beta-%s' % mo_name, tol=tol) + return (l2a, l2b), (linfa, linfb)
+ + +
[docs]class Fragmentation: + """Fragmentation for a quantum embedding method class.""" + + name = "<not set>" + + def __init__(self, emb, add_symmetric=True, log=None): + self.emb = emb + self.add_symmetric = add_symmetric + self.log = log or emb.log + self.log.info('%s Fragmentation' % self.name) + self.log.info('%s--------------' % (len(self.name)*'-')) + self.ovlp = self.mf.get_ovlp() + # Secondary fragment state: + self.secfrag_register = [] + # Rotational symmetry state: + self.sym_register = [] + # -- Output: + self.coeff = None + self.labels = None + # Generated fragments: + self.fragments = [] + +
[docs] def kernel(self): + self.coeff = self.get_coeff() + self.labels = self.get_labels()
+ + # --- As contextmanager: + + def __enter__(self): + self.log.changeIndentLevel(1) + self._time0 = timer() + self.kernel() + return self + + def __exit__(self, exc_type, exc_value, exc_traceback): + if exc_type is not None: + return + + if self.add_symmetric: + # Rotational + inversion symmetries are now done within own context + # Translation symmetry are done in the fragmentation context (here): + translation = self.emb.symmetry.translation + if translation is not None: + fragments_sym = self.emb.create_transsym_fragments(translation, fragments=self.fragments) + self.log.info("Adding %d translationally-symmetry related fragments from %d base fragments", + len(fragments_sym), len(self.fragments)) + self.fragments.extend(fragments_sym) + + # Add fragments to embedding class + self.log.debug("Adding %d fragments to embedding class", len(self.fragments)) + self.emb.fragments.extend(self.fragments) + + # Check if fragmentation is (occupied) complete and orthonormal: + orth = self.emb.has_orthonormal_fragmentation() + comp = self.emb.has_complete_fragmentation() + occcomp = self.emb.has_complete_occupied_fragmentation() + self.log.info("Fragmentation: orthogonal= %r, occupied-complete= %r, virtual-complete= %r", + self.emb.has_orthonormal_fragmentation(), + self.emb.has_complete_occupied_fragmentation(), + self.emb.has_complete_virtual_fragmentation()) + self.log.timing("Time for %s fragmentation: %s", self.name, time_string(timer()-self._time0)) + del self._time0 + self.log.changeIndentLevel(-1) + + # --- Adding fragments: + +
[docs] def add_atomic_fragment(self, atoms, orbital_filter=None, name=None, **kwargs): + """Create a fragment of one or multiple atoms, which will be solved by the embedding method. + + Parameters + ---------- + atoms: int, str, list[int], or list[str] + Atom indices or symbols which should be included in the fragment. + name: str, optional + Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None. + **kwargs: + Additional keyword arguments are passed through to the fragment constructor. + + Returns + ------- + Fragment: + Fragment object. + """ + atom_indices, atom_symbols = self.get_atom_indices_symbols(atoms) + name, indices = self.get_atomic_fragment_indices(atoms, orbital_filter=orbital_filter, name=name) + return self._create_fragment(indices, name, atoms=atom_indices, **kwargs)
+ +
[docs] def add_atomshell_fragment(self, atoms, shells, **kwargs): + if isinstance(shells, (int, np.integer)): + shells = [shells] + orbitals = [] + atom_indices, atom_symbols = self.get_atom_indices_symbols(atoms) + for idx, sym in zip(atom_indices, atom_symbols): + for shell in shells: + orbitals.append('%d%3s %s' % (idx, sym, shell)) + return self.add_orbital_fragment(orbitals, atoms=atom_indices, **kwargs)
+ +
[docs] def add_orbital_fragment(self, orbitals, atom_filter=None, name=None, **kwargs): + """Create a fragment of one or multiple orbitals, which will be solved by the embedding method. + + Parameters + ---------- + orbitals: int, str, list[int], or list[str] + Orbital indices or labels which should be included in the fragment. + name: str, optional + Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None. + **kwargs: + Additional keyword arguments are passed through to the fragment constructor. + + Returns + ------- + Fragment: + Fragment object. + """ + name, indices = self.get_orbital_fragment_indices(orbitals, atom_filter=atom_filter, name=name) + return self._create_fragment(indices, name, **kwargs)
+ +
[docs] def add_all_atomic_fragments(self, **kwargs): + """Create a single fragment for each atom in the system. + + Parameters + ---------- + **kwargs: + Additional keyword arguments are passed through to each fragment constructor. + """ + fragments = [] + natom = self.emb.kcell.natm if self.emb.kcell is not None else self.emb.mol.natm + for atom in range(natom): + frag = self.add_atomic_fragment(atom, **kwargs) + fragments.append(frag) + return fragments
+ +
[docs] def add_full_system(self, name='full-system', **kwargs): + atoms = list(range(self.mol.natm)) + return self.add_atomic_fragment(atoms, name=name, **kwargs)
+ + def _create_fragment(self, indices, name, **kwargs): + if len(indices) == 0: + raise ValueError("Fragment %s is empty." % name) + c_frag = self.get_frag_coeff(indices) + c_env = self.get_env_coeff(indices) + fid, mpirank = self.emb.register.get_next() + frag = self.emb.Fragment(self.emb, fid, name, c_frag, c_env, mpi_rank=mpirank, **kwargs) + self.fragments.append(frag) + + # Log fragment orbitals: + self.log.debugv("Fragment %ss:\n%r", self.name, indices) + self.log.debug("Fragment %ss of fragment %s:", self.name, name) + labels = np.asarray(self.labels)[indices] + helper.log_orbitals(self.log.debug, labels) + # Secondary fragments: + if self.secfrag_register: + self.secfrag_register[0].append(frag) + # Symmetric fragments: + for sym in self.sym_register: + sym.append(frag) + + return frag + + # --- Rotational symmetry fragments: + +
[docs] @contextlib.contextmanager + def rotational_symmetry(self, order, axis, center=(0,0,0), unit='Ang'): + if self.secfrag_register: + raise NotImplementedError("Rotational symmetries have to be added before adding secondary fragments") + self.sym_register.append([]) + yield + fragments = self.sym_register.pop() + fragments_sym = self.emb.create_rotsym_fragments(order, axis, center, fragments=fragments, unit=unit, + symbol='R%d' % len(self.sym_register)) + self.log.info("Adding %d rotationally-symmetric fragments", len(fragments_sym)) + self.fragments.extend(fragments_sym) + # For additional (nested) symmetries: + for sym in self.sym_register: + sym.extend(fragments_sym)
+ +
[docs] @contextlib.contextmanager + def inversion_symmetry(self, center=(0,0,0), unit='Ang'): + if self.secfrag_register: + raise NotImplementedError("Symmetries have to be added before adding secondary fragments") + self.sym_register.append([]) + yield + fragments = self.sym_register.pop() + fragments_sym = self.emb.create_invsym_fragments(center, fragments=fragments, unit=unit, symbol='I') + self.log.info("Adding %d inversion-symmetric fragments", len(fragments_sym)) + self.fragments.extend(fragments_sym) + # For additional (nested) symmetries: + for sym in self.sym_register: + sym.extend(fragments_sym)
+ +
[docs] @contextlib.contextmanager + def mirror_symmetry(self, axis, center=(0,0,0), unit='Ang'): + if self.secfrag_register: + raise NotImplementedError("Symmetries have to be added before adding secondary fragments") + self.sym_register.append([]) + yield + fragments = self.sym_register.pop() + fragments_sym = self.emb.create_mirrorsym_fragments(axis, center=center, fragments=fragments, unit=unit, + symbol='M') + self.log.info("Adding %d mirror-symmetric fragments", len(fragments_sym)) + self.fragments.extend(fragments_sym) + # For additional (nested) symmetries: + for sym in self.sym_register: + sym.extend(fragments_sym)
+ + + # --- Secondary fragments: + +
[docs] @contextlib.contextmanager + def secondary_fragments(self, bno_threshold=None, bno_threshold_factor=0.1, solver='MP2'): + if self.secfrag_register: + raise NotImplementedError("Nested secondary fragments") + self.secfrag_register.append([]) + yield + fragments = self.secfrag_register.pop() + fragments_sec = self._create_secondary_fragments(fragments, bno_threshold=bno_threshold, + bno_threshold_factor=bno_threshold_factor, solver=solver) + self.log.info("Adding %d secondary fragments", len(fragments_sec)) + self.fragments.extend(fragments_sec) + # If we are already in a symmetry context, the symmetry-related secondary fragments should also be added: + for sym in self.sym_register: + sym.extend(fragments_sec)
+ + def _create_secondary_fragments(self, fragments, bno_threshold=None, bno_threshold_factor=0.1, solver='MP2'): + + def _create_fragment(fx, flags=None, **kwargs): + if fx.sym_parent is not None: + raise NotImplementedError("Secondary fragments need to be added before symmetry-derived fragments") + flags = (flags or {}).copy() + flags['is_secfrag'] = True + fx_copy = fx.copy(solver=solver, flags=flags, **kwargs) + fx_copy.flags.bath_parent_fragment_id = fx.id + self.log.debugv("Adding secondary fragment: %s", fx_copy) + return fx_copy + + fragments_sec = [] + for fx in fragments: + + bath_opts = fx.opts.bath_options.copy() + if bno_threshold is not None: + bath_opts['threshold'] = bno_threshold + bath_opts.pop('threshold_occ', None) + bath_opts.pop('threshold_vir', None) + else: + if bath_opts.get('threshold', None) is not None: + bath_opts['threshold'] *= bno_threshold_factor + if bath_opts.get('threshold_occ', None) is not None: + bath_opts['threshold_occ'] *= bno_threshold_factor + if bath_opts.get('threshold_vir', None) is not None: + bath_opts['threshold_vir'] *= bno_threshold_factor + frag = _create_fragment(fx, name='%s[x%d|+%s]' % (fx.name, fx.id, solver), bath_options=bath_opts) + fragments_sec.append(frag) + # Double counting + wf_factor = -(fx.opts.wf_factor or 1) + frag = _create_fragment(fx, name='%s[x%d|-%s]' % (fx.name, fx.id, solver), wf_factor=wf_factor, flags=dict(is_envelop=False)) + fragments_sec.append(frag) + fx.flags.is_envelop = False + return fragments_sec + + # --- For convenience: + + @property + def mf(self): + return self.emb.mf + + @property + def mol(self): + return self.mf.mol + + @property + def nao(self): + return self.mol.nao_nr() + + @property + def nmo(self): + return self.mo_coeff.shape[-1] + +
[docs] def get_ovlp(self): + return self.ovlp
+ + @property + def mo_coeff(self): + return self.mf.mo_coeff + + @property + def mo_occ(self): + return self.mf.mo_occ + + # --- These need to be implemented + +
[docs] def get_coeff(self): + """Abstract method.""" + raise NotImplementedError()
+ +
[docs] def get_labels(self): + """Abstract method.""" + raise NotImplementedError()
+ +
[docs] def search_labels(self, labels): + """Abstract method.""" + raise NotImplementedError()
+ + # --- + +
[docs] def get_atoms(self): + """Get the base atom for each fragment orbital.""" + return [l[0] for l in self.labels]
+ +
[docs] def symmetric_orth(self, mo_coeff, ovlp=None, tol=1e-15): + """Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.""" + if ovlp is None: ovlp = self.get_ovlp() + m = dot(mo_coeff.T, ovlp, mo_coeff) + e, v = scipy.linalg.eigh(m) + e_min = e.min() + keep = (e >= tol) + e, v = e[keep], v[:,keep] + x = dot(v/np.sqrt(e), v.T) + x = fix_orbital_sign(x)[0] + return x, e_min
+ + #def check_orth(self, mo_coeff, mo_name=None, tol=1e-7): + # """Check orthonormality of mo_coeff.""" + # err = dot(mo_coeff.T, self.get_ovlp(), mo_coeff) - np.eye(mo_coeff.shape[-1]) + # l2 = np.linalg.norm(err) + # linf = abs(err).max() + # if mo_name is None: mo_name = self.name + # if max(l2, linf) > tol: + # self.log.error("Orthogonality error of %ss: L(2)= %.2e L(inf)= %.2e !", mo_name, l2, linf) + # else: + # self.log.debugv("Orthogonality error of %ss: L(2)= %.2e L(inf)= %.2e", mo_name, l2, linf) + # return l2, linf + +
[docs] def check_orthonormal(self, mo_coeff, mo_name=None, tol=1e-7): + if mo_name is None: mo_name = self.name + return check_orthonormal(self.log, mo_coeff, self.get_ovlp(), mo_name=mo_name, tol=tol)
+ +
[docs] def get_atom_indices_symbols(self, atoms): + """Convert a list of integer or strings to atom indices and symbols.""" + if np.ndim(atoms) == 0: atoms = [atoms] + + if isinstance(atoms[0], (int, np.integer)): + atom_indices = atoms + atom_symbols = [self.mol.atom_symbol(atm) for atm in atoms] + return atom_indices, atom_symbols + if isinstance(atoms[0], str): + atom_symbols = atoms + all_atom_symbols = [self.mol.atom_symbol(atm) for atm in range(self.mol.natm)] + for sym in atom_symbols: + if sym not in all_atom_symbols: + raise ValueError("Cannot find atom with symbol %s in system." % sym) + atom_indices = np.nonzero(np.isin(all_atom_symbols, atom_symbols))[0] + return atom_indices, atom_symbols + raise ValueError("A list of integers or string is required! atoms= %r" % atoms)
+ +
[docs] def get_atomic_fragment_indices(self, atoms, orbital_filter=None, name=None): + """Get fragment indices for one atom or a set of atoms. + + Parameters + ---------- + atoms: list or int or str + List of atom IDs or labels. For a single atom, a single integer or string can be passed as well. + orbital_filter: list, optional + Additionally restrict fragment orbitals to a specific orbital type (e.g. '2p'). Default: None. + name: str, optional + Name for fragment. + + Returns + ------- + name: str + Name of fragment. + indices: list + List of fragment orbitals indices, with coefficients corresponding to `self.coeff[:,indices]`. + """ + atom_indices, atom_symbols = self.get_atom_indices_symbols(atoms) + if name is None: name = '/'.join(atom_symbols) + self.log.debugv("Atom indices of fragment %s: %r", name, atom_indices) + self.log.debugv("Atom symbols of fragment %s: %r", name, atom_symbols) + # Indices of IAOs based at atoms + indices = np.nonzero(np.isin(self.get_atoms(), atom_indices))[0] + # Filter orbital types + if orbital_filter is not None: + keep = self.search_labels(orbital_filter) + indices = [i for i in indices if i in keep] + return name, indices
+ +
[docs] def get_orbital_indices_labels(self, orbitals): + """Convert a list of integer or strings to orbital indices and labels.""" + if np.ndim(orbitals) == 0: orbitals = [orbitals] + + if isinstance(orbitals[0], (int, np.integer)): + orbital_indices = orbitals + orbital_labels = (np.asarray(self.labels, dtype=object)[orbitals]).tolist() + orbital_labels = [('%d%3s %s%-s' % tuple(l)).strip() for l in orbital_labels] + return orbital_indices, orbital_labels + if isinstance(orbitals[0], str): + orbital_labels = orbitals + # Check labels + for l in orbital_labels: + if len(self.search_labels(l)) == 0: + raise ValueError("Cannot find orbital with label %s in system." % l) + orbital_indices = self.search_labels(orbital_labels) + return orbital_indices, orbital_labels + raise ValueError("A list of integers or string is required! orbitals= %r" % orbitals)
+ +
[docs] def get_orbital_fragment_indices(self, orbitals, atom_filter=None, name=None): + if atom_filter is not None: + raise NotImplementedError() + indices, orbital_labels = self.get_orbital_indices_labels(orbitals) + if name is None: name = '/'.join(orbital_labels) + self.log.debugv("Orbital indices of fragment %s: %r", name, indices) + self.log.debugv("Orbital labels of fragment %s: %r", name, orbital_labels) + return name, indices
+ +
[docs] def get_frag_coeff(self, indices): + """Get fragment coefficients for a given set of orbital indices.""" + c_frag = self.coeff[:,indices].copy() + return c_frag
+ +
[docs] def get_env_coeff(self, indices): + """Get environment coefficients for a given set of orbital indices.""" + env = np.ones((self.coeff.shape[-1]), dtype=bool) + env[indices] = False + c_env = self.coeff[:,env].copy() + return c_env
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/fragmentation/helper.html b/_modules/vayesta/core/fragmentation/helper.html new file mode 100644 index 000000000..0374aa7b7 --- /dev/null +++ b/_modules/vayesta/core/fragmentation/helper.html @@ -0,0 +1,123 @@ + + + + + + vayesta.core.fragmentation.helper — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.fragmentation.helper

+
+
+
[docs]def log_orbitals(logger, labels, ncol=8): + # Group orbitals by atom - list(dict.fromkeys(...)) to only get unique atom indices: + atoms = list(dict.fromkeys([l[0] for l in labels])) + labels = [[l for l in labels if (l[0] == atom)] for atom in atoms] + for atom in labels: + prefix = "Atom %4s %3s:" % (atom[0][0], atom[0][1]) + # Print up to ncol orbitals per line: + for idx in range(0, len(atom), ncol): + line = atom[idx:idx+ncol] + fmt = ' %14s ' + len(line)*' %8s' + # Preformat + orbs = [('%s-%s' % (nl, ml) if ml else nl) for a, sym, nl, ml in line] + logger(fmt, prefix, *orbs) + prefix = ""
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/fragmentation/iao.html b/_modules/vayesta/core/fragmentation/iao.html new file mode 100644 index 000000000..5907c9a14 --- /dev/null +++ b/_modules/vayesta/core/fragmentation/iao.html @@ -0,0 +1,303 @@ + + + + + + vayesta.core.fragmentation.iao — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.fragmentation.iao

+import os.path
+import numpy as np
+
+import pyscf
+import pyscf.lo
+
+from vayesta.core.util import dot, einsum, fix_orbital_sign
+from vayesta.core.fragmentation.fragmentation import Fragmentation
+from vayesta.core.fragmentation.ufragmentation import Fragmentation_UHF
+
+# Load default minimal basis set on module initialization
+default_minao = {}
+path = os.path.dirname(__file__)
+with open(os.path.join(path, 'minao.dat'), 'r') as f:
+    for line in f:
+        if line.startswith('#'): continue
+        (basis, minao) = line.split()
+        if minao == 'none': minao = None
+        default_minao[basis] = minao
+
+
[docs]def get_default_minao(basis): + # TODO: Add more to data file + if not isinstance(basis, str): + return 'minao' + bas = basis.replace('-', '').lower() + minao = default_minao.get(bas, 'minao') + if minao is None: + raise ValueError("Could not chose minimal basis for basis %s automatically!", basis) + return minao
+ +
[docs]class IAO_Fragmentation(Fragmentation): + + name = "IAO" + + def __init__(self, *args, minao='auto', **kwargs): + super().__init__(*args, **kwargs) + if minao.lower() == 'auto': + minao = get_default_minao(self.mol.basis) + self.log.info("IAO: computational basis= %s minimal reference basis= %s (automatically chosen)", self.mol.basis, minao) + else: + self.log.debug("IAO: computational basis= %s minimal reference basis= %s", self.mol.basis, minao) + self.minao = minao + try: + self.refmol = pyscf.lo.iao.reference_mol(self.mol, minao=self.minao) + except IndexError as e: + if hasattr(self.mol, "space_group_symmetry"): + if self.mol.space_group_symmetry: + self.log.error("Could not find IAOs when using space group symmetry.") + self.log.error("This is a known issue with some PySCF versions.") + self.log.error( + "Please set `emb.mf.mol.space_group_symmetry=False` when initialising the fragmentation (it can be turned back on afterwards).") + raise ValueError( + "Could not find IAOs when using space group symmetry. Please set `emb.mf.mol.space_group_symmetry=False`.") + raise e + + + @property + def n_iao(self): + return self.refmol.nao + +
[docs] def get_coeff(self, mo_coeff=None, mo_occ=None, add_virtuals=True): + """Make intrinsic atomic orbitals (IAOs). + + Returns + ------- + c_iao : (n(AO), n(IAO)) array + Orthonormalized IAO coefficients. + """ + if mo_coeff is None: mo_coeff = self.mo_coeff + if mo_occ is None: mo_occ = self.mo_occ + ovlp = self.get_ovlp() + + c_occ = mo_coeff[:,mo_occ>0] + c_iao = pyscf.lo.iao.iao(self.mol, c_occ, minao=self.minao) + n_iao = c_iao.shape[-1] + self.log.info("n(AO)= %4d n(MO)= %4d n(occ-MO)= %4d n(IAO)= %4d", + mo_coeff.shape[0], mo_coeff.shape[-1], c_occ.shape[-1], n_iao) + + # Orthogonalize IAO using symmetric (Lowdin) orthogonalization + x, e_min = self.symmetric_orth(c_iao, ovlp) + self.log.debugv("Lowdin orthogonalization of IAOs: n(in)= %3d -> n(out)= %3d , min(eig)= %.3e", x.shape[0], x.shape[1], e_min) + if e_min < 1e-10: + self.log.warning("Small eigenvalue in Lowdin orthogonalization: %.3e !", e_min) + c_iao = np.dot(c_iao, x) + # Check that all electrons are in IAO space + self.check_nelectron(c_iao, mo_coeff, mo_occ) + if add_virtuals: + c_vir = self.get_virtual_coeff(c_iao, mo_coeff=mo_coeff) + c_iao = np.hstack((c_iao, c_vir)) + # Test orthogonality of IAO + self.check_orthonormal(c_iao) + return c_iao
+ +
[docs] def check_nelectron(self, c_iao, mo_coeff, mo_occ): + dm = np.einsum('ai,i,bi->ab', mo_coeff, mo_occ, mo_coeff) + ovlp = self.get_ovlp() + ne_iao = einsum('ai,ab,bc,cd,di->', c_iao, ovlp, dm, ovlp, c_iao) + ne_tot = einsum('ab,ab->', dm, ovlp) + if abs(ne_iao - ne_tot) > 1e-8: + self.log.error("IAOs do not contain the correct number of electrons: IAO= %.8f total= %.8f", ne_iao, ne_tot) + else: + self.log.debugv("Number of electrons: IAO= %.8f total= %.8f", ne_iao, ne_tot) + return ne_iao
+ +
[docs] def get_labels(self): + """Get labels of IAOs. + + Returns + ------- + iao_labels : list of length nIAO + Orbital label (atom-id, atom symbol, nl string, m string) for each IAO. + """ + iao_labels_refmol = self.refmol.ao_labels(None) + self.log.debugv('iao_labels_refmol: %r', iao_labels_refmol) + if self.refmol.natm == self.mol.natm: + iao_labels = iao_labels_refmol + # If there are ghost atoms in the system, they will be removed in refmol. + # For this reason, the atom IDs of mol and refmol will not agree anymore. + # Here we will correct the atom IDs of refmol to agree with mol + # (they will no longer be contiguous integers). + else: + ref2mol = [] + for refatm in range(self.refmol.natm): + ref_coords = self.refmol.atom_coord(refatm) + for atm in range(self.mol.natm): + coords = self.mol.atom_coord(atm) + if np.allclose(coords, ref_coords): + self.log.debugv('reference cell atom %r maps to atom %r', refatm, atm) + ref2mol.append(atm) + break + else: + raise RuntimeError("No atom found with coordinates %r" % ref_coords) + iao_labels = [] + for iao in iao_labels_refmol: + iao_labels.append((ref2mol[iao[0]], iao[1], iao[2], iao[3])) + self.log.debugv('iao_labels: %r', iao_labels) + assert (len(iao_labels_refmol) == len(iao_labels)) + return iao_labels
+ +
[docs] def search_labels(self, labels): + return self.refmol.search_ao_label(labels)
+ +
[docs] def get_virtual_coeff(self, c_iao, mo_coeff=None): + if mo_coeff is None: mo_coeff = self.mo_coeff + ovlp = self.get_ovlp() + # Add remaining virtual space, work in MO space, so that we automatically get the + # correct linear dependency treatment, if n(MO) < n(AO) + c_iao_mo = dot(mo_coeff.T, ovlp, c_iao) + # Get eigenvectors of projector into complement + p_iao = np.dot(c_iao_mo, c_iao_mo.T) + p_rest = np.eye(p_iao.shape[-1]) - p_iao + e, c = np.linalg.eigh(p_rest) + + # Corresponding expression in AO basis (but no linear-dependency treatment): + # p_rest = ovlp - ovlp.dot(c_iao).dot(c_iao.T).dot(ovlp) + # e, c = scipy.linalg.eigh(p_rest, ovlp) + # c_rest = c[:,e>0.5] + + # Ideally, all eigenvalues of P_env should be 0 (IAOs) or 1 (non-IAO) + # Error if > 1e-3 + mask_iao, mask_rest = (e <= 0.5), (e > 0.5) + e_iao, e_rest = e[mask_iao], e[mask_rest] + if np.any(abs(e_iao) > 1e-3): + self.log.error("CRITICAL: Some IAO eigenvalues of 1-P_IAO are not close to 0:\n%r", e_iao) + elif np.any(abs(e_iao) > 1e-6): + self.log.warning("Some IAO eigenvalues e of 1-P_IAO are not close to 0: n= %d max|e|= %.2e", + np.count_nonzero(abs(e_iao) > 1e-6), abs(e_iao).max()) + if np.any(abs(1-e_rest) > 1e-3): + self.log.error("CRITICAL: Some non-IAO eigenvalues of 1-P_IAO are not close to 1:\n%r", e_rest) + elif np.any(abs(1-e_rest) > 1e-6): + self.log.warning("Some non-IAO eigenvalues e of 1-P_IAO are not close to 1: n= %d max|1-e|= %.2e", + np.count_nonzero(abs(1-e_rest) > 1e-6), abs(1-e_rest).max()) + + if not (np.sum(mask_rest) + c_iao.shape[-1] == mo_coeff.shape[-1]): + self.log.critical("Error in construction of remaining virtual orbitals! Eigenvalues of projector 1-P_IAO:\n%r", e) + self.log.critical("Number of eigenvalues above 0.5 = %d", np.sum(mask_rest)) + self.log.critical("Total number of orbitals = %d", mo_coeff.shape[-1]) + raise RuntimeError("Incorrect number of remaining virtual orbitals") + c_rest = np.dot(mo_coeff, c[:,mask_rest]) # Transform back to AO basis + c_rest = fix_orbital_sign(c_rest)[0] + + self.check_orthonormal(np.hstack((c_iao, c_rest)), "IAO+virtual orbital") + return c_rest
+ + +
[docs]class IAO_Fragmentation_UHF(Fragmentation_UHF, IAO_Fragmentation): + +
[docs] def get_coeff(self, mo_coeff=None, mo_occ=None, add_virtuals=True): + if mo_coeff is None: mo_coeff = self.mo_coeff + if mo_occ is None: mo_occ = self.mo_occ + + self.log.info("Alpha-IAOs:") + c_iao_a = IAO_Fragmentation.get_coeff(self, mo_coeff=mo_coeff[0], mo_occ=mo_occ[0], add_virtuals=add_virtuals) + self.log.info(" Beta-IAOs:") + c_iao_b = IAO_Fragmentation.get_coeff(self, mo_coeff=mo_coeff[1], mo_occ=mo_occ[1], add_virtuals=add_virtuals) + return (c_iao_a, c_iao_b)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/fragmentation/iaopao.html b/_modules/vayesta/core/fragmentation/iaopao.html new file mode 100644 index 000000000..721fcc157 --- /dev/null +++ b/_modules/vayesta/core/fragmentation/iaopao.html @@ -0,0 +1,234 @@ + + + + + + vayesta.core.fragmentation.iaopao — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.fragmentation.iaopao

+import numpy as np
+import pyscf.lo
+
+from vayesta.core.util import dot
+from vayesta.core import spinalg
+from vayesta.core.fragmentation.iao import IAO_Fragmentation
+from vayesta.core.fragmentation.iao import IAO_Fragmentation_UHF
+
+
+
[docs]class IAOPAO_Fragmentation(IAO_Fragmentation): + + name = "IAO/PAO" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + # Order according to AOs: + self.order = None + iaopao_labels = self.get_labels() + ao_labels = self.mol.ao_labels(None) + order = [] + for l in ao_labels: + idx = iaopao_labels.index(l) + order.append(idx) + assert np.all([tuple(l) for l in (np.asarray(iaopao_labels, dtype=object)[order])] == ao_labels) + self.order = order + +
[docs] def get_pao_coeff(self, iao_coeff): + core, valence, rydberg = pyscf.lo.nao._core_val_ryd_list(self.mol) + niao = iao_coeff.shape[-1] + npao = len(rydberg) + if (niao+npao != self.nao): + self.log.fatal("Incorrect number of PAOs!") + self.log.fatal("n(IAO)= %d n(PAO)= %d n(AO)= %d", niao, npao, self.nao) + labels = np.asarray(self.mol.ao_labels()) + self.log.fatal("%d core AOs:\n%r", len(core), labels[core].tolist()) + self.log.fatal("%d valence AOs:\n%r", len(valence), labels[valence].tolist()) + self.log.fatal("%d Rydberg AOs:\n%r", len(rydberg), labels[rydberg].tolist()) + raise RuntimeError("Incorrect number of PAOs!") + + # In case a minimal basis set is used: + if not rydberg: + return np.zeros((self.nao, 0)) + # "Representation of Rydberg-AOs in terms of AOs" + pao_coeff = np.eye(self.nao)[:,rydberg] + # Project AOs onto non-IAO space: + # (S^-1 - C.CT) . S = (1 - C.CT.S) + ovlp = self.get_ovlp() + p_pao = np.eye(self.nao) - dot(iao_coeff, iao_coeff.T, ovlp) + pao_coeff = np.dot(p_pao, pao_coeff) + + # Orthogonalize PAOs: + x, e_min = self.symmetric_orth(pao_coeff, ovlp) + self.log.debugv("Lowdin orthogonalization of PAOs: n(in)= %3d -> n(out)= %3d , e(min)= %.3e", + x.shape[0], x.shape[1], e_min) + if e_min < 1e-10: + self.log.warning("Small eigenvalue in Lowdin orthogonalization: %.3e !", e_min) + pao_coeff = np.dot(pao_coeff, x) + return pao_coeff
+ +
[docs] def get_coeff(self, order=None): + """Make projected atomic orbitals (PAOs).""" + if order is None: order = self.order + iao_coeff = IAO_Fragmentation.get_coeff(self, add_virtuals=False) + pao_coeff = self.get_pao_coeff(iao_coeff) + coeff = spinalg.hstack_matrices(iao_coeff, pao_coeff) + assert (coeff.shape[-1] == self.mf.mo_coeff.shape[-1]) + # Test orthogonality of IAO+PAO + self.check_orthonormal(coeff) + if order is not None: + return coeff[:,order] + return coeff
+ +
[docs] def get_labels(self, order=None): + if order is None: order = self.order + iao_labels = super().get_labels() + core, valence, rydberg = pyscf.lo.nao._core_val_ryd_list(self.mol) + pao_labels = [tuple(x) for x in np.asarray(self.mol.ao_labels(None), dtype=tuple)[rydberg]] + labels = iao_labels + pao_labels + if order is not None: + return [tuple(l) for l in np.asarray(labels, dtype=object)[order]] + return labels
+ +
[docs] def search_labels(self, labels): + return self.mol.search_ao_label(labels)
+ +
[docs]class IAOPAO_Fragmentation_UHF(IAOPAO_Fragmentation, IAO_Fragmentation_UHF): + +
[docs] def get_coeff(self, order=None): + """Make projected atomic orbitals (PAOs).""" + if order is None: order = self.order + iao_coeff = IAO_Fragmentation_UHF.get_coeff(self, add_virtuals=False) + + pao_coeff_a = IAOPAO_Fragmentation.get_pao_coeff(self, iao_coeff[0]) + pao_coeff_b = IAOPAO_Fragmentation.get_pao_coeff(self, iao_coeff[1]) + pao_coeff = (pao_coeff_a, pao_coeff_b) + + coeff = spinalg.hstack_matrices(iao_coeff, pao_coeff) + assert (coeff[0].shape[-1] == self.mf.mo_coeff[0].shape[-1]) + assert (coeff[1].shape[-1] == self.mf.mo_coeff[1].shape[-1]) + # Test orthogonality of IAO+PAO + self.check_orthonormal(coeff) + + if order is not None: + return (coeff[0][:,order], coeff[1][:,order]) + return coeff
+ +if __name__ == '__main__': + + import logging + log = logging.getLogger(__name__) + import pyscf.gto + import pyscf.scf + + mol = pyscf.gto.Mole() + mol.atom = 'O 0 0 -1.2 ; C 0 0 0 ; O 0 0 1.2' + mol.basis = 'cc-pVDZ' + mol.build() + + mf = pyscf.scf.RHF(mol) + mf.kernel() + + iaopao = IAOPAO_Fragmentation(mf, log) + + ao_labels = mol.ao_labels(None) + print("Atomic order") + for i, l in enumerate(iaopao.get_labels()): + print("%30r vs %30r" % (l, ao_labels[i])) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/fragmentation/sao.html b/_modules/vayesta/core/fragmentation/sao.html new file mode 100644 index 000000000..1723f9085 --- /dev/null +++ b/_modules/vayesta/core/fragmentation/sao.html @@ -0,0 +1,140 @@ + + + + + + vayesta.core.fragmentation.sao — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.fragmentation.sao

+import numpy as np
+
+from vayesta.core.fragmentation.fragmentation import Fragmentation
+from vayesta.core.fragmentation.ufragmentation import Fragmentation_UHF
+
+
[docs]class SAO_Fragmentation(Fragmentation): + + name = "SAO" + +
[docs] def get_coeff(self): + ovlp = self.get_ovlp() + idt = np.eye(self.nao) + if np.allclose(ovlp, idt): + return idt + x, e_min = self.symmetric_orth(idt, ovlp) + self.log.debugv("Lowdin orthogonalization of AOs: n(in)= %3d -> n(out)= %3d , e(min)= %.3e", + x.shape[0], x.shape[1], e_min) + if e_min < 1e-10: + self.log.warning("Small eigenvalue in Lowdin orthogonalization: %.3e !", e_min) + self.check_orthonormal(x) + return x
+ +
[docs] def get_labels(self): + return self.mol.ao_labels(None)
+ +
[docs] def search_labels(self, labels): + return self.mol.search_ao_label(labels)
+ +
[docs]class SAO_Fragmentation_UHF(Fragmentation_UHF, SAO_Fragmentation): + +
[docs] def get_coeff(self): + x = super().get_coeff() + return (x, x)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/fragmentation/site.html b/_modules/vayesta/core/fragmentation/site.html new file mode 100644 index 000000000..71df9680c --- /dev/null +++ b/_modules/vayesta/core/fragmentation/site.html @@ -0,0 +1,117 @@ + + + + + + vayesta.core.fragmentation.site — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.fragmentation.site

+from vayesta.core.fragmentation.sao import SAO_Fragmentation
+from vayesta.core.fragmentation.sao import SAO_Fragmentation_UHF
+
+
[docs]class Site_Fragmentation(SAO_Fragmentation): + + name = "Site"
+ +
[docs]class Site_Fragmentation_UHF(SAO_Fragmentation_UHF): + + name = "Site"
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/fragmentation/ufragmentation.html b/_modules/vayesta/core/fragmentation/ufragmentation.html new file mode 100644 index 000000000..087adf1bd --- /dev/null +++ b/_modules/vayesta/core/fragmentation/ufragmentation.html @@ -0,0 +1,142 @@ + + + + + + vayesta.core.fragmentation.ufragmentation — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.fragmentation.ufragmentation

+import numpy as np
+
+from vayesta.core.fragmentation.fragmentation import Fragmentation
+
+# TODO: Allow different indices for alpha and beta
+
+
[docs]class Fragmentation_UHF(Fragmentation): + """Fragmentation for unrestricted HF.""" + + @property + def nmo(self): + return (self.mo_coeff[0].shape[-1], + self.mo_coeff[1].shape[-1]) + + #def check_orth(self, mo_coeff, mo_name=None, *args, **kwargs): + # results = [] + # for s, spin in enumerate(('alpha', 'beta')): + # results.append(super().check_orth(mo_coeff[s], '%s-%s' % (spin[0], mo_name), *args, **kwargs)) + # return tuple(zip(*results)) + +
[docs] def get_frag_coeff(self, indices): + """Get fragment coefficients for a given set of orbital indices.""" + c_frag = (self.coeff[0][:,indices].copy(), + self.coeff[1][:,indices].copy()) + return c_frag
+ +
[docs] def get_env_coeff(self, indices): + """Get environment coefficients for a given set of orbital indices.""" + env = [np.ones((self.coeff[0].shape[-1]), dtype=bool), + np.ones((self.coeff[1].shape[-1]), dtype=bool)] + env[0][indices] = False + env[1][indices] = False + c_env = (self.coeff[0][:,env[0]].copy(), + self.coeff[1][:,env[1]].copy()) + return c_env
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/helper.html b/_modules/vayesta/core/helper.html new file mode 100644 index 000000000..fafc34691 --- /dev/null +++ b/_modules/vayesta/core/helper.html @@ -0,0 +1,234 @@ + + + + + + vayesta.core.helper — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.helper

+import numpy as np
+
+
[docs]def orbital_sign_convention(mo_coeff, inplace=True): + if not inplace: + mo_coeff = mo_coeff.copy() + absmax = np.argmax(abs(mo_coeff), axis=0) + nmo = mo_coeff.shape[-1] + swap = mo_coeff[absmax,np.arange(nmo)] < 0 + mo_coeff[:,swap] *= -1 + signs = np.ones((nmo,), dtype=int) + signs[swap] = -1 + return mo_coeff, signs
+ +# --- Packing/unpacking arrays + +
[docs]def get_dtype_int(obj): + if obj is None: + return 0 + dtint = np.asarray(obj.dtype.char, dtype='a8').view(int)[()] + return dtint
+ +
[docs]def get_dtype(dtint): + if dtint == 0: + return None + val = np.asarray(dtint).view('a8')[()] + dtype = np.dtype(val) + return dtype
+ +
[docs]def pack_metadata(array, maxdim=8): + if np.ndim(array) > maxdim: + raise NotImplementedError + dtint = get_dtype_int(array) + if dtint: + ndim = array.ndim + shape = list(array.shape) + (maxdim-array.ndim)*[0] + else: + ndim = 0 + shape = maxdim*[0] + metadata = [dtint, ndim] + shape + return np.asarray(metadata, dtype=int)
+ +
[docs]def unpack_metadata(array, maxdim=8): + metadata = array[:maxdim+2].view(int) + dtype = get_dtype(metadata[0]) + ndim, shape = metadata[1], metadata[2:] + return dtype, ndim, shape
+ +
[docs]def pack_arrays(*arrays, dtype=float, maxdim=8): + """Pack multiple arrays into a single array of data type `dtype`. + + Useful for MPI communication.""" + + def pack(array): + metadata = pack_metadata(array).view(dtype) + if array is None: + return metadata + array = array.flatten().view(dtype) + return np.hstack((metadata, array)) + + packed = [] + for array in arrays: + packed.append(pack(array)) + return np.hstack(packed)
+ +
[docs]def unpack_arrays(packed, dtype=float, maxdim=8): + """Unpack a single array of data type `dtype` into multiple arrays. + + Useful for MPI communication.""" + + unpacked = [] + while True: + if packed.size == 0: + break + metadata, packed = np.hsplit(packed, [maxdim+2]) + dtype, ndim, shape = unpack_metadata(metadata) + if dtype is None: + unpacked.append(None) + continue + shape = shape[:ndim] + size = np.product(shape) + array, packed = np.hsplit(packed, [size]) + unpacked.append(array.view(dtype).reshape(shape)) + return unpacked
+ + +if __name__ == '__main__': + import sys + + arrays_in = [ + np.asarray(list(range(100))), + None, + np.random.rand(70), + #np.random.rand(70)*1j, + #np.asarray([True, False, False]) + ] + pack = pack_arrays(*arrays_in) + + print(np.sum([sys.getsizeof(x) for x in arrays_in])) + print(sys.getsizeof(pack)) + + arrays_out = unpack_arrays(pack) + print(len(arrays_out)) + print(arrays_out) + + assert len(arrays_in) == len(arrays_out) + for i, x in enumerate(arrays_in): + if x is None: + assert arrays_out[i] is None + else: + assert np.all(x == arrays_out[i]) + + 1/0 + + obj = np.random.rand(3) + dtint = get_dtype_int(obj) + dt = get_dtype(dtint) + + obj = np.asarray([2]) + dtint = get_dtype_int(obj) + dt = get_dtype(dtint) + + obj = np.asarray([2], dtype=np.int8) + dtint = get_dtype_int(obj) + dt = get_dtype(dtint) + + obj = np.asarray([True]) + dtint = get_dtype_int(obj) + dt = get_dtype(dtint) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/linalg.html b/_modules/vayesta/core/linalg.html new file mode 100644 index 000000000..75000812d --- /dev/null +++ b/_modules/vayesta/core/linalg.html @@ -0,0 +1,247 @@ + + + + + + vayesta.core.linalg — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.linalg

+import logging
+import numpy as np
+
+
+log = logging.getLogger(__name__)
+
+
[docs]def recursive_block_svd(a, n, tol=1e-10, maxblock=100): + """Perform SVD of rectangular, offdiagonal blocks of a matrix recursively. + + Parameters + ---------- + a : (m, m) array + Input matrix. + n : int + Number of rows of the first offdiagonal block. + tol : float, optional + Singular values below the tolerance are considered uncoupled. Default: 1e-10. + maxblock : int, optional + Maximum number of recursions. Default: 100. + + Returns + ------- + coeff : (m-n, m-n) array + Coefficients. + sv : (m-n) array + Singular values. + order : (m-n) array + Orders. + """ + size = a.shape[-1] + log.debugv("Recursive block SVD of %dx%d matrix" % a.shape) + coeff = np.eye(size) + sv = np.full((size-n,), 0.0) + orders = np.full((size-n,), np.inf) + + ndone = 0 + low = np.s_[:n] + env = np.s_[n:] + + for order in range(1, maxblock+1): + blk = np.linalg.multi_dot((coeff.T, a, coeff))[low,env] + nmax = blk.shape[-1] + assert blk.ndim == 2 + assert np.all(np.asarray(blk.shape) > 0) + + u, s, vh = np.linalg.svd(blk) + rot = vh.T.conj() + ncpl = np.count_nonzero(s >= tol) + log.debugv("Order= %3d - found %3d bath orbitals in %3d with tol= %8.2e: SV= %r" % (order, ncpl, blk.shape[1], tol, s[:ncpl].tolist())) + if ncpl == 0: + log.debugv("Remaining environment orbitals are decoupled; exiting.") + break + # Update output + coeff[:,env] = np.dot(coeff[:,env], rot) + sv[ndone:(ndone+ncpl)] = s[:ncpl] + orders[ndone:(ndone+ncpl)] = order + # Update spaces + low = np.s_[(n+ndone):(n+ndone+ncpl)] + env = np.s_[(n+ndone+ncpl):] + ndone += ncpl + + if ndone == (size - n): + log.debugv("All bath orbitals found; exiting.") + break + assert (ndone < (size - n)) + else: + log.debug("Found %d out of %d bath orbitals in %d recursions", ndone, size-n, maxblock) + + coeff = coeff[n:,n:] + assert np.allclose(np.dot(coeff.T, coeff)-np.eye(coeff.shape[-1]), 0) + log.debugv("SV= %r", sv) + log.debugv("orders= %r", orders) + return coeff, sv, orders
+ + +if __name__ == '__main__': + import pyscf + import pyscf.gto + import pyscf.scf + atom = """ + Ti 0.0 0.0 0.0 + O -%f 0.0 0.0 + O +%f 0.0 0.0 + O 0.0 -%f 0.0 + O 0.0 +%f 0.0 + O 0.0 0.0 -%f + O 0.0 0.0 +%f + """ + d = 1.85 + basis = '6-31G' + atom = atom % tuple(6*[d]) + mol = pyscf.gto.Mole(atom=atom, basis=basis, charge=-2) + mol.build() + + hf = pyscf.scf.RHF(mol) + hf.kernel() + + import vayesta + import vayesta.ewf + log = vayesta.log + ewf = vayesta.ewf.EWF(hf) + #f = ewf.make_atom_fragment(0) + f = ewf.make_ao_fragment('Ti 3d') + c_cluster_occ, c_cluster_vir, c_env_occ, _, c_env_vir, _ = f.make_bath(bath_type=None) + #f.kernel() + dm_hf = hf.make_rdm1() + fock = ewf.get_fock() + c_frag = f.c_frag + c_env = f.c_env + + # Construct via SVD + dmocc1 = np.linalg.multi_dot((c_frag.T, fock, c_env_occ)) + u, s, vh = np.linalg.svd(dmocc1) + mo_svd = np.dot(c_env_occ, vh.T) + ncpl = len(s) + print("Order1 SV= %r" % s) + + dmocc2 = np.linalg.multi_dot((mo_svd[:,:ncpl].T, fock, mo_svd[:,ncpl:])) + u, s, vh = np.linalg.svd(dmocc2) + print("Order2 SV= %r" % s) + + # Use function: + nimp = c_frag.shape[-1] + c = np.hstack((c_frag, c_env_occ)) + f = np.linalg.multi_dot((c.T, fock, c)) + mo_svd2, sv, orders = recursive_block_svd(f, n=nimp) + mo_svd2 = np.dot(c_env_occ, mo_svd2) + print(sv) + print(orders) + + e_svd = np.linalg.eigh(np.dot(mo_svd, mo_svd.T))[0] + e_svd2 = np.linalg.eigh(np.dot(mo_svd2, mo_svd2.T))[0] + assert np.allclose(e_svd, e_svd2) + + # Construct directly + #nocc = np.count_nonzero(hf.mo_occ > 0) + #occ = np.s_[:nocc] + #ovlp = hf.get_ovlp() + #lhs = np.linalg.multi_dot((c_frag.T, ovlp, hf.mo_coeff[:,occ])) + #rhs = np.linalg.multi_dot((c_env_occ.T, ovlp, hf.mo_coeff[:,occ])) + #mo_direct = np.einsum('ai,i,xi->xa', lhs, hf.mo_energy[occ], rhs) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/qemb/corrfunc.html b/_modules/vayesta/core/qemb/corrfunc.html new file mode 100644 index 000000000..7dcc37f4e --- /dev/null +++ b/_modules/vayesta/core/qemb/corrfunc.html @@ -0,0 +1,415 @@ + + + + + + vayesta.core.qemb.corrfunc — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.qemb.corrfunc

+"""Expectation values for quantum embedding methods."""
+
+import functools
+import itertools
+import numpy as np
+from vayesta.core.util import dot, einsum, log_time
+from vayesta.misc import corrfunc
+
+
+
[docs]def get_corrfunc_mf(emb, kind, dm1=None, atoms=None, projection='sao'): + """dm1 in MO basis""" + if emb.spinsym == 'unrestricted' and kind.lower() in ('n,n', 'dn,dn'): + raise NotImplementedError + if dm1 is None: + if emb.spinsym == 'restricted': + dm1 = np.zeros((emb.nmo, emb.nmo)) + dm1[np.diag_indices(emb.nocc)] = 2 + elif emb.spinsym == 'unrestricted': + dm1a = np.zeros((emb.nmo[0], emb.nmo[0])) + dm1b = np.zeros((emb.nmo[1], emb.nmo[1])) + dm1a[np.diag_indices(emb.nocc[0])] = 1 + dm1b[np.diag_indices(emb.nocc[1])] = 1 + dm1 = (dm1a, dm1b) + if emb.spinsym == 'restricted': + funcs = { + 'n,n': functools.partial(corrfunc.chargecharge, subtract_indep=False), + 'dn,dn': functools.partial(corrfunc.chargecharge, subtract_indep=True), + 'sz,sz': corrfunc.spinspin_z, + } + elif emb.spinsym == 'unrestricted': + funcs = { + 'sz,sz': corrfunc.spinspin_z_unrestricted, + } + func = funcs.get(kind.lower()) + if func is None: + raise ValueError(kind) + atoms1, atoms2, proj = emb._get_atom_projectors(atoms, projection) + corr = np.zeros((len(atoms1), len(atoms2))) + for a, atom1 in enumerate(atoms1): + for b, atom2 in enumerate(atoms2): + corr[a,b] = func(dm1, None, proj1=proj[atom1], proj2=proj[atom2]) + return corr
+ + +
[docs]def get_corrfunc(emb, kind, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None, use_symmetry=True, + orbital_filter=None): + """Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X. + + TODO: MPI + + Parameters + ---------- + atoms : list[int] or list[list[int]], optional + Atom indices for which the spin-spin correlation function should be evaluated. + If set to None (default), all atoms of the system will be considered. + If a list is given, all atom pairs formed from this list will be considered. + If a list of two lists is given, the first list contains the indices of atom A, + and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. + This is useful in cases where one is only interested in the correlation to + a small subset of atoms. Default: None + + Returns + ------- + corr : array(N,M) + Atom projected correlation function. + """ + kind = kind.lower() + if kind not in ('n,n', 'dn,dn', 'sz,sz'): + raise ValueError(kind) + + # --- Setup + f1, f2, f22 = { + 'n,n': (1, 2, 1), + 'dn,dn': (1, 2, 1), + 'sz,sz': (1/4, 1/2, 1/2), + }[kind] + if dm2_with_dm1 is None: + dm2_with_dm1 = False + if dm2 is not None: + # Determine if DM2 contains DM1 by calculating norm + norm = einsum('iikk->', dm2) + ne2 = emb.mol.nelectron*(emb.mol.nelectron-1) + dm2_with_dm1 = (norm > ne2/2) + atoms1, atoms2, proj = emb._get_atom_projectors(atoms, projection, orbital_filter=orbital_filter) + corr = np.zeros((len(atoms1), len(atoms2))) + + # 1-DM contribution: + with log_time(emb.log.timing, "Time for 1-DM contribution: %s"): + if dm1 is None: + dm1 = emb.make_rdm1() + for a, atom1 in enumerate(atoms1): + tmp = np.dot(proj[atom1], dm1) + for b, atom2 in enumerate(atoms2): + corr[a,b] = f1*np.sum(tmp*proj[atom2]) + + # Non-(approximate cumulant) DM2 contribution: + if not dm2_with_dm1: + with log_time(emb.log.timing, "Time for non-cumulant 2-DM contribution: %s"): + occ = np.s_[:emb.nocc] + occdiag = np.diag_indices(emb.nocc) + ddm1 = dm1.copy() + ddm1[occdiag] -= 1 + for a, atom1 in enumerate(atoms1): + tmp = np.dot(proj[atom1], ddm1) + for b, atom2 in enumerate(atoms2): + corr[a,b] -= f2*np.sum(tmp[occ] * proj[atom2][occ]) # N_atom^2 * N^2 scaling + if kind in ('n,n', 'dn,dn'): + # These terms are zero for Sz,Sz (but not in UHF) + # Traces of projector*DM(HF) and projector*[DM(CC)+DM(HF)/2]: + tr1 = {a: np.trace(p[occ,occ]) for a, p in proj.items()} # DM(HF) + tr2 = {a: np.sum(p * ddm1) for a, p in proj.items()} # DM(CC) + DM(HF)/2 + for a, atom1 in enumerate(atoms1): + for b, atom2 in enumerate(atoms2): + corr[a,b] += f2*(tr1[atom1]*tr2[atom2] + tr1[atom2]*tr2[atom1]) + + with log_time(emb.log.timing, "Time for cumulant 2-DM contribution: %s"): + if dm2 is not None: + # DM2(aa) = (DM2 - DM2.transpose(0,3,2,1))/6 + # DM2(ab) = DM2/2 - DM2(aa) + # DM2(aa) - DM2(ab)] = 2*DM2(aa) - DM2/2 + # = DM2/3 - DM2.transpose(0,3,2,1)/3 - DM2/2 + # = -DM2/6 - DM2.transpose(0,3,2,1)/3 + if kind in ('n,n', 'dn,dn'): + pass + elif kind == 'sz,sz': + # DM2 is not needed anymore, so we can overwrite: + dm2 = -(dm2/6 + dm2.transpose(0,3,2,1)/3) + for a, atom1 in enumerate(atoms1): + tmp = np.tensordot(proj[atom1], dm2) + for b, atom2 in enumerate(atoms2): + corr[a,b] += f22*np.sum(tmp*proj[atom2]) + else: + # Cumulant DM2 contribution: + ffilter = dict(sym_parent=None) if use_symmetry else {} + maxgen = None if use_symmetry else 0 + cst = np.dot(emb.get_ovlp(), emb.mo_coeff) + for fx in emb.get_fragments(contributes=True, **ffilter): + # Currently only defined for EWF + # (but could also be defined for a democratically partitioned cumulant): + dm2 = fx.make_fragment_dm2cumulant() + if kind in ('n,n', 'dn,dn'): + pass + # DM2(aa) = (DM2 - DM2.transpose(0,3,2,1))/6 + # DM2(ab) = DM2/2 - DM2(aa) + # DM2(aa) - DM2(ab)] = 2*DM2(aa) - DM2/2 + # = DM2/3 - DM2.transpose(0,3,2,1)/3 - DM2/2 + # = -DM2/6 - DM2.transpose(0,3,2,1)/3 + elif kind == 'sz,sz': + dm2 = -(dm2/6 + dm2.transpose(0,3,2,1)/3) + + for fx2, cx2_coeff in fx.loop_symmetry_children([fx.cluster.coeff], include_self=True, maxgen=maxgen): + rx = np.dot(cx2_coeff.T, cst) + projx = {atom: dot(rx, p_atom, rx.T) for (atom, p_atom) in proj.items()} + for a, atom1 in enumerate(atoms1): + tmp = np.tensordot(projx[atom1], dm2) + for b, atom2 in enumerate(atoms2): + corr[a,b] += f22*np.sum(tmp*projx[atom2]) + + # Remove independent particle [P(A).DM1 * P(B).DM1] contribution + if kind == 'dn,dn': + for a, atom1 in enumerate(atoms1): + for b, atom2 in enumerate(atoms2): + corr[a,b] -= np.sum(dm1*proj[atom1]) * np.sum(dm1*proj[atom2]) + + return corr
+ +
[docs]def get_corrfunc_unrestricted(emb, kind, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None, + use_symmetry=True, orbital_filter=None): + """Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X. + + TODO: MPI + + Parameters + ---------- + atoms : list[int] or list[list[int]], optional + Atom indices for which the spin-spin correlation function should be evaluated. + If set to None (default), all atoms of the system will be considered. + If a list is given, all atom pairs formed from this list will be considered. + If a list of two lists is given, the first list contains the indices of atom A, + and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. + This is useful in cases where one is only interested in the correlation to + a small subset of atoms. Default: None + + Returns + ------- + corr : array(N,M) + Atom projected correlation function. + """ + kind = kind.lower() + #if kind not in ('n,n', 'dn,dn', 'sz,sz'): + if kind not in ('sz,sz',): + raise ValueError(kind) + + # --- Setup + f1, f2, f22 = { + #'n,n': (1, 2, 1), + #'dn,dn': (1, 2, 1), + 'sz,sz': (1/4, 1/2, 1/4), + }[kind] + if dm2_with_dm1 is None: + dm2_with_dm1 = False + if dm2 is not None: + # Determine if DM2 contains DM1 by calculating norm + norm = einsum('iikk->', dm2[0]) + 2*einsum('iikk->', dm2[1]) + einsum('iikk->', dm2[2]) + ne2 = emb.mol.nelectron*(emb.mol.nelectron-1) + dm2_with_dm1 = (norm > ne2/2) + atoms1, atoms2, proj = emb._get_atom_projectors(atoms, projection, orbital_filter=orbital_filter) + corr = np.zeros((len(atoms1), len(atoms2))) + + # 1-DM contribution: + with log_time(emb.log.timing, "Time for 1-DM contribution: %s"): + if dm1 is None: + dm1 = emb.make_rdm1() + # Loop over spin: + for s in range(2): + for a, atom1 in enumerate(atoms1): + tmp = np.dot(proj[atom1][s], dm1[s]) + for b, atom2 in enumerate(atoms2): + corr[a,b] += f1*np.sum(tmp*proj[atom2][s]) + + # Non-(approximate cumulant) DM2 contribution: + if not dm2_with_dm1: + with log_time(emb.log.timing, "Time for non-cumulant 2-DM contribution: %s"): + ddm1 = (dm1[0].copy(), dm1[1].copy()) + ddm1[0][np.diag_indices(emb.nocc[0])] -= 0.5 + ddm1[1][np.diag_indices(emb.nocc[1])] -= 0.5 + for s in range(2): + occ = np.s_[:emb.nocc[s]] + for a, atom1 in enumerate(atoms1): + tmp = np.dot(proj[atom1][s], ddm1[s]) + for b, atom2 in enumerate(atoms2): + corr[a,b] -= f2*np.sum(tmp[occ] * proj[atom2][s][occ]) # N_atom^2 * N^2 scaling + + ## Note that this contribution cancel to 0 in RHF, + # since tr1[0] == tr1[1] and tr2[0] == tr2[1]: + tr1 = [] + tr2 = [] + # Loop over spin: + for s in range(2): + occ = np.s_[:emb.nocc[s]] + tr1.append({a: np.trace(p[s][occ,occ]) for a, p in proj.items()}) # DM(HF) + tr2.append({a: np.sum(p[s] * ddm1[s]) for a, p in proj.items()}) # DM(CC) + DM(HF)/2 + # Loop over spins s1, s2: + for s1, s2 in itertools.product(range(2), repeat=2): + sign = (1 if (s1 == s2) else -1) + for a, atom1 in enumerate(atoms1): + for b, atom2 in enumerate(atoms2): + corr[a,b] += sign*(tr1[s1][atom1]*tr2[s2][atom2] + tr1[s1][atom2]*tr2[s2][atom1])/4 + + if kind in ('n,n', 'dn,dn'): + # TODO + raise NotImplementedError + # These terms are zero for Sz,Sz (but not in UHF) + # Traces of projector*DM(HF) and projector*[DM(CC)+DM(HF)/2]: + tr1 = {a: np.trace(p[occ,occ]) for a, p in proj.items()} # DM(HF) + tr2 = {a: np.sum(p * ddm1) for a, p in proj.items()} # DM(CC) + DM(HF)/2 + for a, atom1 in enumerate(atoms1): + for b, atom2 in enumerate(atoms2): + corr[a,b] += f2*(tr1[atom1]*tr2[atom2] + tr1[atom2]*tr2[atom1]) + + with log_time(emb.log.timing, "Time for cumulant 2-DM contribution: %s"): + if dm2 is not None: + dm2aa, dm2ab, dm2bb = dm2 + if kind in ('n,n', 'dn,dn'): + raise NotImplementedError + elif kind == 'sz,sz': + pass + for a, atom1 in enumerate(atoms1): + tmpa = np.tensordot(proj[atom1][0], dm2aa) - np.tensordot(dm2ab, proj[atom1][1]) + tmpb = np.tensordot(proj[atom1][1], dm2bb) - np.tensordot(proj[atom1][0], dm2ab) + for b, atom2 in enumerate(atoms2): + corr[a,b] += f22*(np.sum(tmpa*proj[atom2][0]) + np.sum(tmpb*proj[atom2][1])) + else: + # Cumulant DM2 contribution: + ffilter = dict(sym_parent=None) if use_symmetry else {} + maxgen = None if use_symmetry else 0 + ovlp = emb.get_ovlp() + csta = np.dot(ovlp, emb.mo_coeff[0]) + cstb = np.dot(ovlp, emb.mo_coeff[1]) + for fx in emb.get_fragments(contributes=True, **ffilter): + # Currently only defined for EWF + # (but could also be defined for a democratically partitioned cumulant): + dm2aa, dm2ab, dm2bb = fx.make_fragment_dm2cumulant() + if kind in ('n,n', 'dn,dn'): + # TODO + raise NotImplementedError + if kind == 'sz,sz': + pass + for fx2, (cx2_coeffa, cx2_coeffb) in fx.loop_symmetry_children([fx.cluster.coeff[0], fx.cluster.coeff[1]], + include_self=True, maxgen=maxgen): + rxa = np.dot(cx2_coeffa.T, csta) + rxb = np.dot(cx2_coeffb.T, cstb) + projx = {atom: (dot(rxa, p_atom[0], rxa.T), dot(rxb, p_atom[1], rxb.T)) + for (atom, p_atom) in proj.items()} + for a, atom1 in enumerate(atoms1): + tmpa = np.tensordot(projx[atom1][0], dm2aa) - np.tensordot(dm2ab, projx[atom1][1]) + tmpb = np.tensordot(projx[atom1][1], dm2bb) - np.tensordot(projx[atom1][0], dm2ab) + for b, atom2 in enumerate(atoms2): + corr[a,b] += f22*(np.sum(tmpa*projx[atom2][0]) + np.sum(tmpb*projx[atom2][1])) + + # Remove independent particle [P(A).DM1 * P(B).DM1] contribution + if kind == 'dn,dn': + # TODO + raise NotImplementedError + for a, atom1 in enumerate(atoms1): + for b, atom2 in enumerate(atoms2): + corr[a,b] -= np.sum(dm1*proj[atom1]) * np.sum(dm1*proj[atom2]) + + return corr
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/qemb/fragment.html b/_modules/vayesta/core/qemb/fragment.html new file mode 100644 index 000000000..018d1d8e0 --- /dev/null +++ b/_modules/vayesta/core/qemb/fragment.html @@ -0,0 +1,1164 @@ + + + + + + vayesta.core.qemb.fragment — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.qemb.fragment

+# --- Standard library
+import dataclasses
+import itertools
+import os.path
+import typing
+# --- External
+import numpy as np
+import pyscf
+import pyscf.lo
+# --- Internal
+from vayesta.core.util import (OptionsBase, cache, deprecated, dot, einsum, energy_string, fix_orbital_sign, hstack,
+                               log_time, time_string, timer)
+from vayesta.core import spinalg
+from vayesta.core.types import Cluster
+from vayesta.core.symmetry import SymmetryIdentity
+from vayesta.core.symmetry import SymmetryTranslation
+import vayesta.core.ao2mo
+import vayesta.core.ao2mo.helper
+from vayesta.core.types import WaveFunction
+# Bath
+from vayesta.core.bath import BNO_Threshold
+from vayesta.core.bath import DMET_Bath
+from vayesta.core.bath import EwDMET_Bath
+from vayesta.core.bath import MP2_Bath
+from vayesta.core.bath import Full_Bath
+from vayesta.core.bath import R2_Bath
+# Other
+from vayesta.misc.cubefile import CubeFile
+from vayesta.mpi import mpi
+from vayesta.solver import get_solver_class, check_solver_config, ClusterHamiltonian
+
+# Get MPI rank of fragment
+get_fragment_mpi_rank = lambda *args : args[0].mpi_rank
+
+
+
[docs]@dataclasses.dataclass +class Options(OptionsBase): + # Inherited from Embedding + # ------------------------ + # --- Bath options + bath_options: dict = None + # --- Solver options + solver_options: dict = None + # --- Other + store_eris: bool = None # If True, ERIs will be cached in Fragment.hamil + dm_with_frozen: bool = None # TODO: is still used? + screening: typing.Optional[str] = None + # Fragment specific + # ----------------- + # Auxiliary fragments are treated before non-auxiliary fragments, but do not contribute to expectation values + auxiliary: bool = False + coupled_fragments: list = dataclasses.field(default_factory=list) + sym_factor: float = 1.0
+ + +
[docs]class Fragment: + + Options = Options + +
[docs] @dataclasses.dataclass + class Flags: + # If multiple cluster exist for a given atom, the envelop fragment is + # the one with the largest (super) cluster space. This is used, for example, + # for the finite-bath and ICMP2 corrections + is_envelop: bool = True + is_secfrag: bool = False + # Secondary fragment parameter + bath_parent_fragment_id: typing.Optional[int] = None
+ +
[docs] @dataclasses.dataclass + class Results: + fid: int = None # Fragment ID + converged: bool = None # True, if solver reached convergence criterion or no convergence required (eg. MP2 solver) + # --- Energies + e_corr: float = None # Fragment correlation energy contribution + # --- Wave-function + wf: WaveFunction = None # WaveFunction object (MP2, CCSD,...) + pwf: WaveFunction = None # Fragment-projected wave function
+ + + def __init__(self, base, fid, name, c_frag, c_env, + solver=None, + atoms=None, aos=None, active=True, + sym_parent=None, sym_op=None, + mpi_rank=0, flags=None, + log=None, **kwargs): + """Abstract base class for quantum embedding fragments. + + The fragment may keep track of associated atoms or atomic orbitals, using + the `atoms` and `aos` attributes, respectively. + + Parameters + ---------- + base : Embedding + Quantum embedding method the fragment is part of. + fid : int + Fragment ID. + name : str + Name of fragment. + c_frag : (nAO, nFrag) array + Fragment orbital coefficients. + c_env : (nAO, nEnv) array + Environment (non-fragment) orbital coefficients. + fragment_type : {'IAO', 'Lowdin-AO', 'AO'} + Fragment orbital type. + atoms : list or int, optional + Associated atoms. Default: None + aos : list or int, optional + Associated atomic orbitals. Default: None + sym_factor : float, optional + Symmetry factor (number of symmetry equivalent fragments). Default: 1.0. + sym_parent : Fragment, optional + Symmetry related parent fragment. Default: None. + sym_op : Callable, optional + Symmetry operation on AO basis function, representing the symmetry to the `sym_parent` object. Default: None. + log : logging.Logger + Logger object. If None, the logger of the `base` object is used. Default: None. + + Attributes + ---------- + mol + mf + size + nelectron + id_name + log : logging.Logger + Logger object. + base : Embedding + Quantum embedding method, the fragment is part of. + id : int + Unique fragment ID. + name : str + Name of framgnet. + c_frag : (nAO, nFrag) array + Fragment orbital coefficients. + c_env : (nAO, nEnv) array + Environment (non-fragment) orbital coefficients. + fragment_type : {'IAO', 'Lowdin-AO', 'AO'} + Fragment orbital type. + sym_factor : float + Symmetry factor (number of symmetry equivalent fragments). + atoms : list + Atoms in fragment. + aos : list + Atomic orbitals in fragment + coupled_fragments : list + List of fragments, the current fragment is coupled to. + """ + self.log = log or base.log + self.id = fid + self.name = name + self.base = base + + # Options + self.opts = self.Options() # Default options + self.opts.update(**self.base.opts.asdict(deepcopy=True)) # Update with embedding class options + self.opts.replace(**kwargs) # Replace with keyword arguments + + # Flags + self.flags = self.Flags(**(flags or {})) + + solver = solver or self.base.solver + self.check_solver(solver) + + self.solver = solver + self.c_frag = c_frag + self.c_env = c_env + self.sym_factor = self.opts.sym_factor + self.sym_parent = sym_parent + self.sym_op = sym_op + # For some embeddings, it may be necessary to keep track of any associated atoms or basis functions (AOs) + self.atoms = atoms + # TODO: Is aos still used? + self.aos = aos + self.active = active + + # MPI + self.mpi_rank = mpi_rank + + # This set of orbitals is used in the projection to evaluate expectation value contributions + # of the fragment. By default it is equal to `self.c_frag`. + self.c_proj = self.c_frag + + # Initialize self.bath, self._cluster, self._results, self.hamil + self.reset() + + self.log.debugv("Creating %r", self) + #self.log.info(break_into_lines(str(self.opts), newline='\n ')) + + def __repr__(self): + if mpi: + return '%s(id= %d, name= %s, mpi_rank= %d)' % ( + self.__class__.__name__, self.id, self.name, self.mpi_rank) + return '%s(id= %d, name= %s)' % (self.__class__.__name__, self.id, self.name) + + def __str__(self): + return '%s %d: %s' % (self.__class__.__name__, self.id, self.name) + +
[docs] def log_info(self): + # Some output + fmt = ' > %-24s ' + self.log.info(fmt+'%d', "Fragment orbitals:", self.n_frag) + self.log.info(fmt+'%f', "Symmetry factor:", self.sym_factor) + self.log.info(fmt+'%.10f', "Number of electrons:", self.nelectron) + if self.atoms is not None: + self.log.info(fmt+'%r', "Associated atoms:", self.atoms) + if self.aos is not None: + self.log.info(fmt+'%r', "Associated AOs:", self.aos)
+ + @property + def mol(self): + return self.base.mol + + @property + def mf(self): + return self.base.mf + + @property + def n_frag(self): + """Number of fragment orbitals.""" + return self.c_frag.shape[-1] + + @property + def nelectron(self): + """Number of mean-field electrons.""" + sc = np.dot(self.base.get_ovlp(), self.c_frag) + ne = einsum('ai,ab,bi->', sc, self.mf.make_rdm1(), sc) + return ne + +
[docs] def trimmed_name(self, length=10, add_dots=True): + """Fragment name trimmed to a given maximum length.""" + if len(self.name) <= length: + return self.name + if add_dots: + return self.name[:(length-3)] + "..." + return self.name[:length]
+ + @property + def id_name(self): + """Use this whenever a unique name is needed (for example to open a separate file for each fragment).""" + return "%d-%s" % (self.id, self.trimmed_name()) + +
[docs] def change_options(self, **kwargs): + self.opts.replace(**kwargs)
+ + @property + def hamil(self): + # Cache the hamiltonian object; note that caching or not of eris is handled inside the hamiltonian object. + if self._hamil is None: + self.hamil = self.get_frag_hamil() + return self._hamil + + @hamil.setter + def hamil(self, value): + self._hamil = value + + # --- Overlap matrices + # -------------------- + + def _csc_dot(self, c1, c2, ovlp=True, transpose_left=True, transpose_right=False): + if transpose_left: + c1 = c1.T + if transpose_right: + c2 = c2.T + if ovlp is True: + ovlp = self.base.get_ovlp() + if ovlp is None: + return dot(c1, c2) + return dot(c1, ovlp, c2) + +
[docs] @cache + def get_overlap(self, key): + """Get overlap between cluster orbitals, fragment orbitals, or MOs. + + The return value is cached but not copied; do not modify the array in place without + creating a copy! + + Examples: + >>> s = self.get_overlap('cluster|mo') + >>> s = self.get_overlap('cluster|frag') + >>> s = self.get_overlap('mo[occ]|cluster[occ]') + >>> s = self.get_overlap('mo[vir]|cluster[vir]') + """ + if key.count('|') > 1: + left, center, right = key.rsplit('|', maxsplit=2) + overlap_left = self.get_overlap('|'.join((left, center))) + overlap_right = self.get_overlap('|'.join((center, right))) + return self._csc_dot(overlap_left, overlap_right, ovlp=None, transpose_left=False) + + # Standardize key to reduce cache misses: + key_mod = key.lower().replace(' ', '') + if key_mod != key: + return self.get_overlap(key_mod) + + def _get_coeff(key): + if 'frag' in key: + return self.c_frag + if 'proj' in key: + return self.c_proj + if 'occ' in key: + part = '_occ' + elif 'vir' in key: + part = '_vir' + else: + part = '' + if 'mo' in key: + return getattr(self.base, 'mo_coeff%s' % part) + if 'cluster' in key: + return getattr(self.cluster, 'c_active%s' % part) + raise ValueError("Invalid key: '%s'") + + left, right = key.split('|') + c_left = _get_coeff(left) + c_right = _get_coeff(right) + return self._csc_dot(c_left, c_right)
+ +
[docs] def get_coeff_env(self): + if self.c_env is not None: + return self.c_env + return self.sym_op(self.sym_parent.get_coeff_env())
+ + @property + def results(self): + return self.get_symmetry_parent()._results + + @results.setter + def results(self, value): + if self.sym_parent is not None: + raise RuntimeError("Cannot set attribute results in symmetry derived fragment.") + self._results = value + + @property + def cluster(self): + if self.sym_parent is not None: + return self.sym_parent.cluster.basis_transform(self.sym_op) + return self._cluster + + @cluster.setter + def cluster(self, value): + if self.sym_parent is not None: + raise RuntimeError("Cannot set attribute cluster in symmetry derived fragment.") + self._cluster = value + +
[docs] def reset(self, reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True): + self.log.debugv("Resetting %s (reset_bath= %r, reset_cluster= %r, reset_eris= %r, reset_inactive= %r)", + self, reset_bath, reset_cluster, reset_eris, reset_inactive) + if not reset_inactive and not self.active: + return + if reset_bath: + self._dmet_bath = None + self._bath_factory_occ = None + self._bath_factory_vir = None + if reset_cluster: + self._cluster = None + self.get_overlap.cache_clear() + if reset_eris: + self.hamil = None + self._seris_ov = None + self._results = None
+ +
[docs] def get_fragments_with_overlap(self, tol=1e-8, **kwargs): + """Get list of fragments which overlap both in occupied and virtual space.""" + c_occ = self.get_overlap('mo[occ]|cluster[occ]') + c_vir = self.get_overlap('mo[vir]|cluster[vir]') + def svd(cx, cy): + rxy = np.dot(cx.T, cy) + return np.linalg.svd(rxy, compute_uv=False) + frags = [] + for fx in self.base.get_fragments(**kwargs): + if (fx.id == self.id): + continue + cx_occ = fx.get_overlap('mo[occ]|cluster[occ]') + s_occ = svd(c_occ, cx_occ) + if s_occ.max() < tol: + continue + cx_vir = fx.get_overlap('mo[vir]|cluster[vir]') + s_vir = svd(c_vir, cx_vir) + if s_vir.max() < tol: + continue + frags.append(fx) + return frags
+ +
[docs] def couple_to_fragment(self, frag): + if frag is self: + raise RuntimeError("Cannot couple fragment with itself.") + self.log.debugv("Coupling %s with %s", self, frag) + self.opts.coupled_fragments.append(frag)
+ +
[docs] def couple_to_fragments(self, frags): + for frag in frags: + self.couple_to_fragment(frag)
+ +
[docs] def get_fragment_mf_energy(self): + """Calculate the part of the mean-field energy associated with the fragment. + + Does not include nuclear-nuclear repulsion! + """ + px = self.get_fragment_projector(self.base.mo_coeff) + hveff = dot(px, self.base.mo_coeff.T, 2*self.base.get_hcore()+self.base.get_veff(), self.base.mo_coeff) + occ = (self.base.mo_occ > 0) + e_mf = np.sum(np.diag(hveff)[occ]) + return e_mf
+ + @property + def contributes(self): + """True if fragment contributes to expectation values, else False.""" + return (self.active and not self.opts.auxiliary) + +
[docs] def get_fragment_projector(self, coeff, c_proj=None, inverse=False): + """Projector for one index of amplitudes local energy expression. + + Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs + + Parameters + ---------- + coeff : ndarray, shape(n(AO), N) + Occupied or virtual orbital coefficients. + inverse : bool, optional + Return 1-p instead. Default: False. + + Returns + ------- + p : (n, n) array + Projection matrix. + """ + if c_proj is None: c_proj = self.c_proj + r = dot(coeff.T, self.base.get_ovlp(), c_proj) + p = np.dot(r, r.T) + if inverse: + p = (np.eye(p.shape[-1]) - p) + return p
+ +
[docs] def get_mo_occupation(self, *mo_coeff, dm1=None): + """Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals. + + Parameters + ---------- + mo_coeff : ndarray, shape(N, M) + Orbital coefficients. + + Returns + ------- + occup : ndarray, shape(M) + Occupation numbers of orbitals. + """ + mo_coeff = hstack(*mo_coeff) + if dm1 is None: dm1 = self.mf.make_rdm1() + sc = np.dot(self.base.get_ovlp(), mo_coeff) + occup = einsum('ai,ab,bi->i', sc, dm1, sc) + return occup
+ + #def check_mo_occupation(self, expected, *mo_coeff, tol=None): + # if tol is None: tol = 2*self.opts.dmet_threshold + # occup = self.get_mo_occupation(*mo_coeff) + # if not np.allclose(occup, expected, atol=tol): + # raise RuntimeError("Incorrect occupation of orbitals (expected %f):\n%r" % (expected, occup)) + # return occup + +
[docs] def canonicalize_mo(self, *mo_coeff, fock=None, eigvals=False, sign_convention=True): + """Diagonalize Fock matrix within subspace. + + TODO: move to Embedding class + + Parameters + ---------- + *mo_coeff : ndarrays + Orbital coefficients. + eigenvalues : ndarray + Return MO energies of canonicalized orbitals. + + Returns + ------- + mo_canon : ndarray + Canonicalized orbital coefficients. + rot : ndarray + Rotation matrix: np.dot(mo_coeff, rot) = mo_canon. + """ + if fock is None: fock = self.base.get_fock() + mo_coeff = hstack(*mo_coeff) + fock = dot(mo_coeff.T, fock, mo_coeff) + mo_energy, rot = np.linalg.eigh(fock) + self.log.debugv("Canonicalized MO energies:\n%r", mo_energy) + mo_can = np.dot(mo_coeff, rot) + if sign_convention: + mo_can, signs = fix_orbital_sign(mo_can) + rot = rot*signs[np.newaxis] + assert np.allclose(np.dot(mo_coeff, rot), mo_can) + assert np.allclose(np.dot(mo_can, rot.T), mo_coeff) + if eigvals: + return mo_can, rot, mo_energy + return mo_can, rot
+ +
[docs] def diagonalize_cluster_dm(self, *mo_coeff, dm1=None, norm=2, tol=1e-4): + """Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals. + + Parameters + ---------- + *mo_coeff: array or list of arrays + Orbital coefficients. If multiple are given, they will be stacked along their second dimension. + dm1: array, optional + Mean-field density matrix, used to separate occupied and virtual cluster orbitals. + If None, `self.mf.make_rdm1()` is used. Default: None. + tol: float, optional + If set, check that all eigenvalues of the cluster DM are close + to 0 or 2, with the tolerance given by tol. Default= 1e-4. + + Returns + ------- + c_cluster_occ: (n(AO), n(occ cluster)) array + Occupied cluster orbital coefficients. + c_cluster_vir: (n(AO), n(vir cluster)) array + Virtual cluster orbital coefficients. + """ + if dm1 is None: dm1 = self.mf.make_rdm1() + c_cluster = hstack(*mo_coeff) + sc = np.dot(self.base.get_ovlp(), c_cluster) + dm = dot(sc.T, dm1, sc) + e, r = np.linalg.eigh(dm) + if tol and not np.allclose(np.fmin(abs(e), abs(e-norm)), 0, atol=tol, rtol=0): + raise RuntimeError("Eigenvalues of cluster-DM not all close to 0 or %d:\n%s" % (norm, e)) + e, r = e[::-1], r[:,::-1] + c_cluster = np.dot(c_cluster, r) + c_cluster = fix_orbital_sign(c_cluster)[0] + nocc = np.count_nonzero(e >= (norm/2)) + c_cluster_occ, c_cluster_vir = np.hsplit(c_cluster, [nocc]) + + return c_cluster_occ, c_cluster_vir
+ +
[docs] def project_ref_orbitals(self, c_ref, c): + """Project reference orbitals into available space in new geometry. + + The projected orbitals will be ordered according to their eigenvalues within the space. + + Parameters + ---------- + c : ndarray + Orbital coefficients. + c_ref : ndarray + Orbital coefficients of reference orbitals. + """ + nref = c_ref.shape[-1] + assert (nref > 0) + assert (c.shape[-1] > 0) + self.log.debug("Projecting %d reference orbitals into space of %d orbitals", nref, c.shape[-1]) + s = self.base.get_ovlp() + # Diagonalize reference orbitals among themselves (due to change in overlap matrix) + c_ref_orth = pyscf.lo.vec_lowdin(c_ref, s) + assert (c_ref_orth.shape == c_ref.shape) + # Diagonalize projector in space + csc = np.linalg.multi_dot((c_ref_orth.T, s, c)) + p = np.dot(csc.T, csc) + e, r = np.linalg.eigh(p) + e, r = e[::-1], r[:,::-1] + c = np.dot(c, r) + + return c, e
+ + # --- Symmetry + # ============ + +
[docs] def copy(self, fid=None, name=None, **kwargs): + """Create copy of fragment, without adding it to the fragments list.""" + if fid is None: + fid = self.base.register.get_next_id() + name = name or ('%s(copy)' % self.name) + kwargs_copy = self.opts.asdict().copy() + kwargs_copy.update(kwargs) + attrs = ['c_frag', 'c_env', 'solver', 'atoms', 'aos', 'active', 'sym_parent', 'sym_op', 'mpi_rank', 'log'] + for attr in attrs: + if attr in kwargs_copy: + continue + kwargs_copy[attr] = getattr(self, attr) + frag = type(self)(self.base, fid, name, **kwargs_copy) + return frag
+ +
[docs] @deprecated() + def add_tsymmetric_fragments(self, tvecs, symtol=1e-6): + """ + + Parameters + ---------- + tvecs: array(3) of integers + Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell. + symtol: float, optional + Tolerance for the error of the mean-field density matrix between symmetry related fragments. + If the largest absolute difference in the density-matrix is above this value, + and exception will be raised. Default: 1e-6. + + Returns + ------- + fragments: list + List of T-symmetry related fragments. These will be automatically added to base.fragments and + have the attributes `sym_parent` and `sym_op` set. + """ + ovlp = self.base.get_ovlp() + dm1 = self.mf.make_rdm1() + + fragments = [] + for i, (dx, dy, dz) in enumerate(itertools.product(range(tvecs[0]), range(tvecs[1]), range(tvecs[2]))): + if i == 0: continue + tvec = (dx/tvecs[0], dy/tvecs[1], dz/tvecs[2]) + sym_op = SymmetryTranslation(self.base.symmetry, tvec) + if sym_op is None: + self.log.error("No T-symmetric fragment found for translation (%d,%d,%d) of fragment %s", dx, dy, dz, self.name) + continue + # Name for translationally related fragments + name = '%s_T(%d,%d,%d)' % (self.name, dx, dy, dz) + # Translated coefficients + c_frag_t = sym_op(self.c_frag) + c_env_t = None # Avoid expensive symmetry operation on environment orbitals + # Check that translated fragment does not overlap with current fragment: + fragovlp = self._csc_dot(self.c_frag, c_frag_t, ovlp=ovlp) + if self.base.spinsym == 'restricted': + fragovlp = abs(fragovlp).max() + elif self.base.spinsym == 'unrestricted': + fragovlp = max(abs(fragovlp[0]).max(), abs(fragovlp[1]).max()) + if (fragovlp > 1e-8): + self.log.critical("Translation (%d,%d,%d) of fragment %s not orthogonal to original fragment (overlap= %.3e)!", + dx, dy, dz, self.name, fragovlp) + raise RuntimeError("Overlapping fragment spaces.") + + # Add fragment + frag_id = self.base.register.get_next_id() + frag = self.base.Fragment(self.base, frag_id, name, c_frag_t, c_env_t, + sym_parent=self, sym_op=sym_op, mpi_rank=self.mpi_rank, + **self.opts.asdict()) + self.base.fragments.append(frag) + # Check symmetry + # (only for the primitive translations (1,0,0), (0,1,0), and (0,0,1) to reduce number of sym_op(c_env) calls) + if (abs(dx)+abs(dy)+abs(dz) == 1): + charge_err, spin_err = self.get_symmetry_error(frag, dm1=dm1) + if max(charge_err, spin_err) > symtol: + self.log.critical("Mean-field DM1 not symmetric for translation (%d,%d,%d) of %s (errors: charge= %.3e, spin= %.3e)!", + dx, dy, dz, self.name, charge_err, spin_err) + raise RuntimeError("MF not symmetric under translation (%d,%d,%d)" % (dx, dy, dz)) + else: + self.log.debugv("Mean-field DM symmetry error for translation (%d,%d,%d) of %s: charge= %.3e, spin= %.3e", + dx, dy, dz, self.name, charge_err, spin_err) + + fragments.append(frag) + return fragments
+ +
[docs] @deprecated(replacement='add_tsymmetric_fragment') + def make_tsymmetric_fragments(self, *args, **kwargs): # pragma: no cover + return self.add_tsymmetric_fragments(*args, **kwargs)
+ +
[docs] def get_symmetry_parent(self): + if self.sym_parent is None: + return self + return self.sym_parent.get_symmetry_parent()
+ +
[docs] def get_symmetry_operation(self): + if self.sym_parent is None: + return SymmetryIdentity(self.base.symmetry) + return self.sym_op
+ +
[docs] def get_symmetry_generations(self, maxgen=None, **filters): + if maxgen == 0: + return [] + generations = [] + fragments = self.base.get_fragments(**filters) + # Direct children: + lastgen = self.base.get_fragments(fragments, sym_parent=self) + generations.append(lastgen) + # Children of children, etc: + for gen in range(1, maxgen or 1000): + newgen = [] + for fx in lastgen: + newgen += self.base.get_fragments(fragments, sym_parent=fx) + if not newgen: + break + generations.append(newgen) + lastgen = newgen + return generations
+ +
[docs] def get_symmetry_children(self, maxgen=None, **filters): + gens = self.get_symmetry_generations(maxgen, **filters) + # Flatten list of lists: + children = list(itertools.chain.from_iterable(gens)) + return children
+ +
[docs] def get_symmetry_tree(self, maxgen=None, **filters): + """Returns a recursive tree: + + [(x, [children of x]), (y, [children of y]), ...] + """ + if maxgen is None: + maxgen = 1000 + if maxgen == 0: + return [] + # Get direct children: + children = self.get_symmetry_children(maxgen=1, **filters) + # Build tree recursively: + tree = [(x, x.get_symmetry_tree(maxgen=maxgen-1, **filters)) for x in children] + return tree
+ +
[docs] def loop_symmetry_children(self, arrays=None, axes=None, symtree=None, maxgen=None, include_self=False): + """Loop over all symmetry related fragments, including children of children, etc. + + Parameters + ---------- + arrays : ndarray or list[ndarray], optional + If arrays are passed, the symmetry operation of each symmetry related fragment will be + applied to this array along the axis given in `axes`. + axes : list[int], optional + List of axes, along which the symmetry operation is applied for each element of `arrays`. + If None, the first axis will be used. + """ + + def get_yield(fragment, arrays): + if arrays is None or len(arrays) == 0: + return fragment + if len(arrays) == 1: + return fragment, arrays[0] + return fragment, arrays + + if include_self: + yield get_yield(self, arrays) + if maxgen == 0: + return + elif maxgen is None: + maxgen = 1000 + if arrays is None: + arrays = [] + if axes is None: + axes = len(arrays)*[0] + if symtree is None: + symtree = self.get_symmetry_tree() + for child, grandchildren in symtree: + intermediates = [child.sym_op(arr, axis=axis) for (arr, axis) in zip(arrays, axes)] + yield get_yield(child, intermediates) + if grandchildren and maxgen > 1: + yield from child.loop_symmetry_children(intermediates, axes=axes, symtree=grandchildren, maxgen=(maxgen-1))
+ + @property + def n_symmetry_children(self): + """Includes children of children, etc.""" + return len(self.get_symmetry_children()) + + @property + def symmetry_factor(self): + """Includes children of children, etc.""" + return (self.n_symmetry_children+1) + +
[docs] def get_symmetry_error(self, frag, dm1=None): + """Get translational symmetry error between two fragments.""" + if dm1 is None: + dm1 = self.mf.make_rdm1() + ovlp = self.base.get_ovlp() + # This fragment (x) + cx = np.hstack((self.c_frag, self.get_coeff_env())) + dmx = dot(cx.T, ovlp, dm1, ovlp, cx) + # Other fragment (y) + cy = np.hstack((frag.c_frag, frag.get_coeff_env())) + dmy = dot(cy.T, ovlp, dm1, ovlp, cy) + err = abs(dmx - dmy).max() + return err, 0.0
+ + #def check_mf_tsymmetry(self): + # """Check translational symmetry of the mean-field between fragment and its children.""" + # ovlp = self.base.get_ovlp() + # sds = dot(ovlp, self.mf.make_rdm1(), ovlp) + # c0 = np.hstack((self.c_frag, self.c_env)) + # dm0 = dot(c0.T, sds, c0) + # for frag in self.get_symmetry_children(): + # c1 = np.hstack((frag.c_frag, frag.c_env)) + # dm1 = dot(c1.T, sds, c1) + # err = abs(dm1 - dm0).max() + # if err > mf_tol: + # self.log.error("Mean-field not T-symmetric between %s and %s (error= %.3e)!", + # self.name, frag.name, err) + # continue + # else: + # self.log.debugv("Mean-field T-symmetry error between %s and %s = %.3e", self.name, frag.name, err) + + # Bath and cluster + # ---------------- + + def _get_bath_option(self, key, occtype): + """Get bath-option, checking if a occupied-virtual specific option has been set.""" + opts = self.opts.bath_options + opt = opts.get('%s_%s' % (key, occtype[:3]), None) + if opt is not None: + return opt + return opts[key] + +
[docs] def make_bath(self): + + # --- DMET bath + dmet = DMET_Bath(self, dmet_threshold=self.opts.bath_options['dmet_threshold']) + dmet.kernel() + self._dmet_bath = dmet + + # --- Additional bath + def get_bath(occtype): + otype = occtype[:3] + assert otype in ('occ', 'vir') + btype = self._get_bath_option('bathtype', occtype) + if btype is None: + self.log.warning("bathtype=None is deprecated; use bathtype='dmet'.") + btype = 'dmet' + if btype == 'all': + self.log.warning("bathtype='all' is deprecated; use bathtype='full'.") + btype = 'full' + if btype == 'mp2-bno': + self.log.warning("bathtype='mp2-bno' is deprecated; use bathtype='mp2'.") + btype = 'mp2' + # DMET bath only + if btype == 'dmet': + return None + # Full bath (for debugging) + if btype == 'full': + return Full_Bath(self, dmet_bath=dmet, occtype=occtype) + # Energy-weighted DMET bath + if btype == 'ewdmet': + threshold = self._get_bath_option('threshold', occtype) + max_order = self._get_bath_option('max_order', occtype) + return EwDMET_Bath(self, dmet_bath=dmet, occtype=occtype, threshold=threshold, max_order=max_order) + # Spatially close orbitals + if btype == 'r2': + return R2_Bath(self, dmet, occtype=occtype) + # MP2 bath natural orbitals + if btype == 'mp2': + project_dmet_order = self._get_bath_option('project_dmet_order', occtype) + project_dmet_mode = self._get_bath_option('project_dmet_mode', occtype) + addbuffer = self._get_bath_option('addbuffer', occtype) and occtype == 'virtual' + if addbuffer: + other = 'occ' if (otype == 'vir') else 'vir' + c_buffer = getattr(dmet, 'c_env_%s' % other) + else: + c_buffer = None + return MP2_Bath(self, dmet_bath=dmet, occtype=occtype, c_buffer=c_buffer, + project_dmet_order=project_dmet_order, project_dmet_mode=project_dmet_mode) + raise NotImplementedError('bathtype= %s' % btype) + self._bath_factory_occ = get_bath(occtype='occupied') + self._bath_factory_vir = get_bath(occtype='virtual')
+ +
[docs] def make_cluster(self): + + def get_orbitals(occtype): + factory = getattr(self, '_bath_factory_%s' % occtype[:3]) + btype = self._get_bath_option('bathtype', occtype) + if btype == 'dmet': + c_bath = None + c_frozen = getattr(self._dmet_bath, 'c_env_%s' % occtype[:3]) + elif btype == 'full': + c_bath, c_frozen = factory.get_bath() + elif btype == 'r2': + rcut = self._get_bath_option('rcut', occtype) + unit = self._get_bath_option('unit', occtype) + c_bath, c_frozen = factory.get_bath(rcut=rcut) + elif btype == 'ewdmet': + order = self._get_bath_option('order', occtype) + c_bath, c_frozen = factory.get_bath(order) + elif btype == 'mp2': + threshold = self._get_bath_option('threshold', occtype) + truncation = self._get_bath_option('truncation', occtype) + bno_threshold = BNO_Threshold(truncation, threshold) + c_bath, c_frozen = factory.get_bath(bno_threshold) + else: + raise ValueError + return c_bath, c_frozen + + c_bath_occ, c_frozen_occ = get_orbitals('occupied') + c_bath_vir, c_frozen_vir = get_orbitals('virtual') + c_active_occ = spinalg.hstack_matrices(self._dmet_bath.c_cluster_occ, c_bath_occ) + c_active_vir = spinalg.hstack_matrices(self._dmet_bath.c_cluster_vir, c_bath_vir) + # Canonicalize orbitals + if self._get_bath_option('canonicalize', 'occupied'): + c_active_occ = self.canonicalize_mo(c_active_occ)[0] + if self._get_bath_option('canonicalize', 'virtual'): + c_active_vir = self.canonicalize_mo(c_active_vir)[0] + cluster = Cluster.from_coeffs(c_active_occ, c_active_vir, c_frozen_occ, c_frozen_vir) + + # Check occupations + def check_occup(mo_coeff, expected): + occup = self.get_mo_occupation(mo_coeff) + # RHF + atol = self.opts.bath_options['dmet_threshold'] + if np.ndim(occup[0]) == 0: + assert np.allclose(occup, 2*expected, rtol=0, atol=2*atol) + else: + assert np.allclose(occup[0], expected, rtol=0, atol=atol) + assert np.allclose(occup[1], expected, rtol=0, atol=atol) + check_occup(cluster.c_total_occ, 1) + check_occup(cluster.c_total_vir, 0) + + self.log.info('Orbitals for %s', self) + self.log.info('-------------%s', len(str(self))*'-') + self.log.info(cluster.repr_size().replace('%', '%%')) + + self.cluster = cluster + return cluster
+ + # --- Results + # =========== + +
[docs] def get_fragment_mo_energy(self, c_active=None, fock=None): + """Returns approximate MO energies, using the the diagonal of the Fock matrix. + + Parameters + ---------- + c_active: array, optional + fock: array, optional + """ + if c_active is None: c_active = self.cluster.c_active + if fock is None: fock = self.base.get_fock() + mo_energy = einsum('ai,ab,bi->i', c_active, fock, c_active) + return mo_energy
+ +
[docs] @mpi.with_send(source=get_fragment_mpi_rank) + def get_fragment_dmet_energy(self, dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True): + """Get fragment contribution to whole system DMET energy from cluster DMs. + + After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy! + + Parameters + ---------- + dm1: array, optional + Cluster one-electron reduced density-matrix in cluster basis. If `None`, `self.results.dm1` is used. Default: None. + dm2: array, optional + Cluster two-electron reduced density-matrix in cluster basis. If `None`, `self.results.dm2` is used. Default: None. + hamil : ClusterHamiltonian object. + Object representing cluster hamiltonian, possibly including cached ERIs. + part_cumulant: bool, optional + If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, + the full 2-DM will be partitioned, as it is done in most of the DMET literature. + True is recommended, unless checking for agreement with literature results. Default: True. + approx_cumulant: bool, optional + If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, + instead of the true cumulant, if `part_cumulant=True`. Default: True. + + Returns + ------- + e_dmet: float + Electronic fragment DMET energy. + """ + assert (mpi.rank == self.mpi_rank) + if dm1 is None: dm1 = self.results.dm1 + if dm1 is None: raise RuntimeError("DM1 not found for %s" % self) + c_act = self.cluster.c_active + t0 = timer() + if hamil is None: + hamil = self._hamil + if hamil is None: + hamil = self.get_frag_hamil() + + eris = hamil.get_eris_bare() + + if dm2 is None: + dm2 = self.results.wf.make_rdm2(with_dm1=not part_cumulant, approx_cumulant=approx_cumulant) + + # Get effective core potential + if h1e_eff is None: + if part_cumulant: + h1e_eff = dot(c_act.T, self.base.get_hcore_for_energy(), c_act) + else: + # Use the original Hcore (without chemical potential modifications), but updated mf-potential! + h1e_eff = self.base.get_hcore_for_energy() + self.base.get_veff_for_energy(with_exxdiv=False)/2 + h1e_eff = dot(c_act.T, h1e_eff, c_act) + occ = np.s_[:self.cluster.nocc_active] + v_act = einsum('iipq->pq', eris[occ,occ,:,:]) - einsum('iqpi->pq', eris[occ,:,:,occ])/2 + h1e_eff -= v_act + + p_frag = self.get_fragment_projector(c_act) + # Check number of electrons + ne = einsum('ix,ij,jx->', p_frag, dm1, p_frag) + self.log.debugv("Number of electrons for DMET energy in fragment %12s: %.8f", self, ne) + + # Evaluate energy + e1b = einsum('xj,xi,ij->', h1e_eff, p_frag, dm1) + e2b = einsum('xjkl,xi,ijkl->', eris, p_frag, dm2)/2 + + self.log.debugv("E(DMET): E(1)= %s E(2)= %s", energy_string(e1b), energy_string(e2b)) + e_dmet = self.opts.sym_factor*(e1b + e2b) + self.log.debugv("Fragment E(DMET)= %+16.8f Ha", e_dmet) + self.log.timingv("Time for DMET energy: %s", time_string(timer()-t0)) + return e_dmet
+ + # --- Counterpoise + # ================ + +
[docs] def make_counterpoise_mol(self, rmax, nimages=1, unit='A', **kwargs): + """Make molecule object for counterposise calculation. + + WARNING: This has only been tested for periodic systems so far! + + Parameters + ---------- + rmax : float + All atom centers within range `rmax` are added as ghost-atoms in the counterpoise correction. + nimages : int, optional + Number of neighboring unit cell in each spatial direction. Has no effect in open boundary + calculations. Default: 5. + unit : ['A', 'B'] + Unit for `rmax`, either Angstrom (`A`) or Bohr (`B`). + **kwargs : + Additional keyword arguments for returned PySCF Mole/Cell object. + + Returns + ------- + mol_cp : pyscf.gto.Mole or pyscf.pbc.gto.Cell + Mole or Cell object with periodic boundary conditions removed + and with ghost atoms added depending on `rmax` and `nimages`. + """ + if len(self.atoms) != 1: + raise NotImplementedError + import vayesta.misc + return vayesta.misc.counterpoise.make_mol(self.mol, self.atoms[1], rmax=rmax, nimages=nimages, unit=unit, **kwargs)
+ + # --- Orbital plotting + # -------------------- + +
[docs] @mpi.with_send(source=get_fragment_mpi_rank) + def pop_analysis(self, cluster=None, dm1=None, **kwargs): + if cluster is None: cluster = self.cluster + if dm1 is None: dm1 = self.results.dm1 + if dm1 is None: raise ValueError("DM1 not found for %s" % self) + # Add frozen mean-field contribution: + dm1 = cluster.add_frozen_rdm1(dm1) + return self.base.pop_analysis(dm1, mo_coeff=cluster.coeff, **kwargs)
+ +
[docs] def plot3d(self, filename, gridsize=(100, 100, 100), **kwargs): + """Write cube density data of fragment orbitals to file.""" + nx, ny, nz = gridsize + directory = os.path.dirname(filename) + if directory: + os.makedirs(directory, exist_ok=True) + cube = CubeFile(self.mol, filename=filename, nx=nx, ny=ny, nz=nz, **kwargs) + cube.add_orbital(self.c_frag) + cube.write()
+ +
[docs] def check_solver(self, solver): + is_uhf = np.ndim(self.base.mo_coeff[1]) == 2 + if self.opts.screening: + is_eb = "crpa_full" in self.opts.screening + else: + is_eb = False + check_solver_config(is_uhf, is_eb, solver, self.log)
+ +
[docs] def get_solver(self, solver=None): + if solver is None: + solver = self.solver + cl_ham = self.hamil + solver_cls = get_solver_class(cl_ham, solver) + solver_opts = self.get_solver_options(solver) + cluster_solver = solver_cls(cl_ham, **solver_opts) + if self.opts.screening is not None: + cluster_solver.hamil.add_screening(self._seris_ov) + return cluster_solver
+ +
[docs] def get_frag_hamil(self): + # This detects based on fragment what kind of Hamiltonian is appropriate (restricted and/or EB). + return ClusterHamiltonian(self, self.mf, self.log, screening=self.opts.screening, + cache_eris=self.opts.store_eris)
+ +
[docs] def get_solver_options(self, *args, **kwargs): + raise AbstractMethodError
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/qemb/qemb.html b/_modules/vayesta/core/qemb/qemb.html new file mode 100644 index 000000000..fc30c04e8 --- /dev/null +++ b/_modules/vayesta/core/qemb/qemb.html @@ -0,0 +1,1760 @@ + + + + + + vayesta.core.qemb.qemb — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.qemb.qemb

+import logging
+from datetime import datetime
+import dataclasses
+import copy
+import itertools
+import os
+import os.path
+from typing import Optional
+
+import numpy as np
+
+import pyscf
+import pyscf.mp
+import pyscf.ci
+import pyscf.cc
+import pyscf.pbc
+import pyscf.pbc.tools
+import pyscf.lib
+from pyscf.mp.mp2 import _mo_without_core
+from vayesta.core.foldscf import FoldedSCF, fold_scf
+from vayesta.core.util import (OptionsBase, OrthonormalityError, SymmetryError, dot, einsum, energy_string,
+                               getattr_recursive, hstack, log_method, log_time, with_doc)
+from vayesta.core import spinalg
+from vayesta.core.ao2mo import kao2gmo_cderi
+from vayesta.core.ao2mo import postscf_ao2mo
+from vayesta.core.ao2mo import postscf_kao2gmo
+from vayesta.core.scmf import PDMET, Brueckner
+from vayesta.core.qemb.scrcoulomb import build_screened_eris
+from vayesta.mpi import mpi
+from vayesta.core.qemb.register import FragmentRegister
+from vayesta.rpa import ssRIRPA
+from vayesta.solver import check_solver_config
+
+# Symmetry
+from vayesta.core.symmetry import SymmetryGroup
+from vayesta.core.symmetry import SymmetryInversion
+from vayesta.core.symmetry import SymmetryReflection
+from vayesta.core.symmetry import SymmetryRotation
+from vayesta.core.symmetry import SymmetryTranslation
+
+# Fragmentations
+from vayesta.core.fragmentation import SAO_Fragmentation
+from vayesta.core.fragmentation import IAO_Fragmentation
+from vayesta.core.fragmentation import IAOPAO_Fragmentation
+from vayesta.core.fragmentation import Site_Fragmentation
+from vayesta.core.fragmentation import CAS_Fragmentation
+
+from vayesta.misc.cptbisect import ChempotBisection
+
+# Expectation values
+from vayesta.core.qemb.corrfunc import get_corrfunc
+from vayesta.core.qemb.corrfunc import get_corrfunc_mf
+
+# --- This Package
+
+from vayesta.core.qemb.fragment import Fragment
+#from . import helper
+from vayesta.core.qemb.rdm import make_rdm1_demo_rhf
+from vayesta.core.qemb.rdm import make_rdm2_demo_rhf
+
+
+
[docs]@dataclasses.dataclass +class Options(OptionsBase): + store_eris: bool = True # If True, ERIs will be stored in Fragment.hamil; otherwise they will be recalculated whenever needed. + global_frag_chempot: float = None # Global fragment chemical potential (e.g. for democratically partitioned DMs) + dm_with_frozen: bool = False # Add frozen parts to cluster DMs + # --- Bath options + bath_options: dict = OptionsBase.dict_with_defaults( + # General + bathtype='dmet', canonicalize=True, + # DMET bath + dmet_threshold=1e-8, + # R2 bath + rcut=None, unit='Ang', + # EwDMET bath + order=None, max_order=20, # +threshold (same as MP2 bath) + # MP2 bath + threshold=None, truncation='occupation', project_dmet_order=2, + project_dmet_mode='squared-entropy', addbuffer=False, + # The following options can be set occupied/virtual-specific: + bathtype_occ=None, bathtype_vir=None, + rcut_occ=None, rcut_vir=None, + unit_occ=None, unit_vir=None, + order_occ=None, order_vir=None, + max_order_occ=None, max_order_vir=None, + threshold_occ=None, threshold_vir=None, + truncation_occ=None, truncation_vir=None, + project_dmet_order_occ=None, project_dmet_order_vir=None, + project_dmet_mode_occ=None, project_dmet_mode_vir=None, + addbuffer_occ=None, addbuffer_dmet_vir=None, + canonicalize_occ=None, canonicalize_vir=None, + ) + # --- Solver options + solver_options: dict = OptionsBase.dict_with_defaults( + # General + conv_tol=None, + # CCSD + solve_lambda=True, conv_tol_normt=None, + level_shift=None, diis_space=None, diis_start_cycle=None, + iterative_damping=None, + # FCI + threads=1, max_cycle=300, fix_spin=None, lindep=None, + davidson_only=True, init_guess='default', + # EBFCI/EBCCSD + max_boson_occ=2, + # EBCC + ansatz=None, + # Dump + dumpfile='clusters.h5', + # MP2 + compress_cderi=False) + # --- Other + symmetry_tol: float = 1e-6 # Tolerance (in Bohr) for atomic positions + symmetry_mf_tol: float = 1e-5 # Tolerance for mean-field solution + screening: Optional[str] = None
+ +
[docs]class Embedding: + """Base class for quantum embedding methods. + + Parameters + ---------- + mf : pyscf.scf.SCF + PySCF mean-field object. + solver : str, optional + Default solver for cluster problems. The available solvers depend on the embedding class. + Default: 'CCSD'. + log : logging.Logger, optional + Vayesta logger object. Default: None + bath_options : dict, optional + Bath specific options. The bath type is determined by the key `bathtype` (default: 'DMET'). + The following bath specific options can be specified. + + All bath types: + + dmet_threshold : float, optional + Threshold for DMET bath orbitals. Orbitals with eigenvalues larger than `dmet_threshold` + or smaller than 1-`dmet_threshold` will be added as bath orbitals. Default: 1e-6. + + MP2 bath (`bathtype = 'MP2'`): + + threshold : float + Threshold for MP2 natural orbital truncation. Orbitals with eigenvalues larger than + `threshold` will be added as bath orbitals. + + R2 bath (`bathtype = 'R2'`): + + rcut : float + Range cutoff for R2 bath. Orbitals with eigenvalues smaller than `rcut` will be added + as bath orbitals. + unit : {'Ang', 'Bohr'}, optional + Unit of `rcut`. Default: 'Ang'. + + solver_options : dict, optional + Solver specific options. The following solver specific options can be specified. + + + conv_tol : float + Energy convergence tolerance [valid for 'CISD', 'CCSD', 'TCCSD', 'FCI'] + conv_tol_normt : float + Amplitude convergence tolerance [valid for 'CCSD', 'TCCSD'] + fix_spin : float + Target specified spin state [valid for 'FCI'] + solve_lambda : bool + Solve Lambda-equations [valid for 'CCSD', 'TCCSD']. If False, T-amplitudes are used instead. + dumpfile : str + Dump cluster orbitals and integrals to file [valid for 'Dump'] + + Attributes + ---------- + mol + nao + ncells + nmo + nfrag + e_mf + log : logging.Logger + Logger object. + self.mf : pyscf.scf.SCF + PySCF mean-field object. + self.mo_energy : (nMO) array + MO energies. + self.mo_occ : (nMO) array + MO occupation numbers. + self.mo_coeff : (nAO, nMO) array + MO coefficients. + self.fragments : list + List of fragments for embedding calculation. + self.kcell : pyscf.pbc.gto.Cell + For k-point sampled mean-field calculation, which have been folded to the supercell, + this will hold the original primitive unit cell. + self.kpts : (nK, 3) array + For k-point sampled mean-field calculation, which have been folded to the supercell, + this will hold the original k-points. + self.kdf : pyscf.pbc.df.GDF + For k-point sampled mean-field calculation, which have been folded to the supercell, + this will hold the original Gaussian density-fitting object. + """ + + # Shadow these in inherited methods: + Fragment = Fragment + Options = Options + + # Deprecated: + is_rhf = True + is_uhf = False + # Use instead: + spinsym = 'restricted' + + def __init__(self, mf, solver='CCSD', log=None, overwrite=None, **kwargs): + # 1) Logging + # ---------- + self.log = log or logging.getLogger(__name__) + self.log.info("") + self.log.info("INITIALIZING %s" % self.__class__.__name__.upper()) + self.log.info("=============%s" % (len(str(self.__class__.__name__))*"=")) + with self.log.indent(): + + # 2) Options + # ---------- + self.opts = self.Options().replace(**kwargs) + + # 3) Overwrite methods/attributes + # ------------------------------- + if overwrite is not None: + for name, attr in overwrite.items(): + if callable(attr): + self.log.info("Overwriting method %s of %s", name, self.__class__.__name__) + setattr(self, name, attr.__get__(self)) + else: + self.log.info("Overwriting attribute %s of %s", name, self.__class__.__name__) + setattr(self, name, attr) + + # 4) Mean-field + # ------------- + self.mf = None + self.kcell = None + self.kpts = None + self.kdf = None + self.madelung = None + with log_time(self.log.timing, "Time for mean-field setup: %s"): + self.init_mf(mf) + + # 5) Other + # -------- + self.check_solver(solver) + self.solver = solver + self.symmetry = SymmetryGroup(self.mol, xtol=self.opts.symmetry_tol) + nimages = getattr(self.mf, 'subcellmesh', None) + if nimages: + self.symmetry.set_translations(nimages) + # Rotations need to be added manually! + + self.register = FragmentRegister() + self.fragments = [] + self.with_scmf = None # Self-consistent mean-field + # Initialize results + self._reset() + + + def _mpi_bcast_mf(self, mf): + """Use mo_energy and mo_coeff from master MPI rank only.""" + # If vayesta.misc.scf_with_mpi was used, we do not need broadcast + # as the MO coefficients will already be the same + if getattr(mf, 'with_mpi', False): + return + with log_time(self.log.timing, "Time to broadcast mean-field to all MPI ranks: %s"): + # Check if all MPI ranks have the same mean-field MOs + #mo_energy = mpi.world.gather(mf.mo_energy) + #if mpi.is_master: + # moerr = np.max([abs(mo_energy[i] - mo_energy[0]).max() for i in range(len(mpi))]) + # if moerr > 1e-6: + # self.log.warning("Large difference of MO energies between MPI ranks= %.2e !", moerr) + # else: + # self.log.debugv("Largest difference of MO energies between MPI ranks= %.2e", moerr) + # Use MOs of master process + mf.mo_energy = mpi.world.bcast(mf.mo_energy, root=0) + mf.mo_coeff = mpi.world.bcast(mf.mo_coeff, root=0) + +
[docs] def init_mf(self, mf): + self._mf_orig = mf # Keep track of original mean-field object - be careful not to modify in any way, to avoid side effects! + + # Create shallow copy of mean-field object; this way it can be updated without side effects outside the quantum + # embedding method if attributes are replaced in their entirety + # (eg. `mf.mo_coeff = mo_new` instead of `mf.mo_coeff[:] = mo_new`). + mf = copy.copy(mf) + self.log.debugv("type(mf)= %r", type(mf)) + # If the mean-field has k-points, automatically fold to the supercell: + if getattr(mf, 'kpts', None) is not None: + with log_time(self.log.timing, "Time for k->G folding of MOs: %s"): + mf = fold_scf(mf) + if isinstance(mf, FoldedSCF): + self.kcell, self.kpts, self.kdf = mf.kmf.mol, mf.kmf.kpts, mf.kmf.with_df + # Make sure that all MPI ranks use the same MOs`: + if mpi: + self._mpi_bcast_mf(mf) + self.mf = mf + if not (self.is_rhf or self.is_uhf): + raise ValueError("Cannot deduce RHF or UHF!") + + # Evaluating the Madelung constant is expensive - cache result + if self.has_exxdiv: + self.madelung = pyscf.pbc.tools.madelung(self.mol, self.mf.kpt) + + # Original mean-field integrals - do not change these! + self._ovlp_orig = self.mf.get_ovlp() + self._hcore_orig = self.mf.get_hcore() + self._veff_orig = self.mf.get_veff() + # Cached integrals - these can be changed! + self._ovlp = self._ovlp_orig + self._hcore = self._hcore_orig + self._veff = self._veff_orig + + # Hartree-Fock energy - this can be different from mf.e_tot, when the mean-field + # is not a (converged) HF calculations + e_mf = (mf.e_tot / self.ncells) + e_hf = self.e_mf + de = (e_mf - e_hf) + rde = (de / e_mf) + if not self.mf.converged: + self.log.warning("Mean-field not converged!") + self.log.info("Initial E(mean-field)= %s", energy_string(e_mf)) + self.log.info("Calculated E(HF)= %s", energy_string(e_hf)) + self.log.info("Difference dE= %s ( %.1f%%)", energy_string(de), rde) + if (abs(de) > 1e-3) or (abs(rde) > 1e-6): + self.log.warning("Large difference between initial E(mean-field) and calculated E(HF)!") + + #FIXME (no RHF/UHF dependent code here) + if self.is_rhf: + self.log.info("n(AO)= %4d n(MO)= %4d n(linear dep.)= %4d", self.nao, self.nmo, self.nao-self.nmo) + else: + self.log.info("n(AO)= %4d n(alpha/beta-MO)= (%4d, %4d) n(linear dep.)= (%4d, %4d)", + self.nao, *self.nmo, self.nao-self.nmo[0], self.nao-self.nmo[1]) + + self._check_orthonormal(self.mo_coeff, mo_name='MO') + + if self.mo_energy is not None: + if self.is_rhf: + self.log.debugv("MO energies (occ):\n%r", self.mo_energy[self.mo_occ > 0]) + self.log.debugv("MO energies (vir):\n%r", self.mo_energy[self.mo_occ == 0]) + else: + self.log.debugv("alpha-MO energies (occ):\n%r", self.mo_energy[0][self.mo_occ[0] > 0]) + self.log.debugv("beta-MO energies (occ):\n%r", self.mo_energy[1][self.mo_occ[1] > 0]) + self.log.debugv("alpha-MO energies (vir):\n%r", self.mo_energy[0][self.mo_occ[0] == 0]) + self.log.debugv("beta-MO energies (vir):\n%r", self.mo_energy[1][self.mo_occ[1] == 0])
+ +
[docs] def change_options(self, **kwargs): + self.opts.replace(**kwargs) + for fx in self.fragments: + fkwds = {key : kwargs[key] for key in [key for key in kwargs if hasattr(fx.opts, key)]} + fx.change_options(**fkwds)
+ + # --- Basic properties and methods + # ================================ + + def __repr__(self): + keys = ['mf'] + fmt = ('%s(' + len(keys)*'%s: %r, ')[:-2] + ')' + values = [self.__dict__[k] for k in keys] + return fmt % (self.__class__.__name__, *[x for y in zip(keys, values) for x in y]) + + # Mol/Cell properties + + @property + def mol(self): + """Mole or Cell object.""" + return self.mf.mol + + @property + def has_exxdiv(self): + """Correction for divergent exact-exchange potential.""" + return (hasattr(self.mf, 'exxdiv') and self.mf.exxdiv is not None) + +
[docs] def get_exxdiv(self): + """Get divergent exact-exchange (exxdiv) energy correction and potential. + + Returns + ------- + e_exxdiv: float + Divergent exact-exchange energy correction per unit cell. + v_exxdiv: array + Divergent exact-exchange potential correction in AO basis. + """ + if not self.has_exxdiv: return 0, None + sc = np.dot(self.get_ovlp(), self.mo_coeff[:,:self.nocc]) + e_exxdiv = -self.madelung * self.nocc + v_exxdiv = -self.madelung * np.dot(sc, sc.T) + self.log.debugv("Divergent exact-exchange (exxdiv) correction= %+16.8f Ha", e_exxdiv) + return e_exxdiv/self.ncells, v_exxdiv
+ + @property + def pbc_dimension(self): + return getattr(self.mol, 'dimension', 0) + + @property + def nao(self): + """Number of atomic orbitals.""" + return self.mol.nao_nr() + + @property + def ncells(self): + """Number of primitive cells within supercell.""" + if self.kpts is None: return 1 + return len(self.kpts) + + @property + def has_df(self): + return (self.df is not None) or (self.kdf is not None) + + @property + def df(self): + if hasattr(self.mf, 'with_df') and self.mf.with_df is not None: + return self.mf.with_df + return None + + # Mean-field properties + + #def init_vhf_ehf(self): + # """Get Hartree-Fock potential and energy.""" + # if self.opts.recalc_vhf: + # self.log.debug("Calculating HF potential from mean-field object.") + # vhf = self.mf.get_veff() + # else: + # self.log.debug("Calculating HF potential from MOs.") + # cs = np.dot(self.mo_coeff.T, self.get_ovlp()) + # fock = np.dot(cs.T*self.mo_energy, cs) + # vhf = (fock - self.get_hcore()) + # h1e = self.get_hcore_for_energy() + # ehf = self.mf.energy_tot(h1e=h1e, vhf=vhf) + # return vhf, ehf + + @property + def mo_energy(self): + """Molecular orbital energies.""" + return self.mf.mo_energy + + @property + def mo_coeff(self): + """Molecular orbital coefficients.""" + return self.mf.mo_coeff + + @property + def mo_occ(self): + """Molecular orbital occupations.""" + return self.mf.mo_occ + + # MOs setters: + + #@mo_energy.setter + #def mo_energy(self, mo_energy): + # """Updating the MOs resets the effective potential cache `_veff`.""" + # self.log.debugv("MF attribute 'mo_energy' is updated; deleting cached _veff.") + # #self._veff = None + # self.mf.mo_energy = mo_energy + + #@mo_coeff.setter + #def mo_coeff(self, mo_coeff): + # """Updating the MOs resets the effective potential cache `_veff`.""" + # self.log.debugv("MF attribute 'mo_coeff' is updated; deleting chached _veff.") + # #self._veff = None + # self.mf.mo_coeff = mo_coeff + + #@mo_occ.setter + #def mo_occ(self, mo_occ): + # """Updating the MOs resets the effective potential cache `_veff`.""" + # self.log.debugv("MF attribute 'mo_occ' is updated; deleting chached _veff.") + # #self._veff = None + # self.mf.mo_occ = mo_occ + + @property + def nmo(self): + """Total number of molecular orbitals (MOs).""" + return self.mo_coeff.shape[-1] + + @property + def nocc(self): + """Number of occupied MOs.""" + return np.count_nonzero(self.mo_occ > 0) + + @property + def nvir(self): + """Number of virtual MOs.""" + return np.count_nonzero(self.mo_occ == 0) + + @property + def mo_energy_occ(self): + """Occupied MO energies.""" + return self.mo_energy[:self.nocc] + + @property + def mo_energy_vir(self): + """Virtual MO coefficients.""" + return self.mo_energy[self.nocc:] + + @property + def mo_coeff_occ(self): + """Occupied MO coefficients.""" + return self.mo_coeff[:,:self.nocc] + + @property + def mo_coeff_vir(self): + """Virtual MO coefficients.""" + return self.mo_coeff[:,self.nocc:] + + @property + def e_mf(self): + """Total mean-field energy per unit cell (not folded supercell). + Note that the input unit cell itself can be a supercell, in which case + `e_mf` refers to this cell. + """ + h1e = self.get_hcore_for_energy() + vhf = self.get_veff_for_energy() + e_mf = self.mf.energy_tot(h1e=h1e, vhf=vhf) + return e_mf/self.ncells + + @property + def e_nuc(self): + """Nuclear-repulsion energy per unit cell (not folded supercell).""" + return self.mol.energy_nuc()/self.ncells + + # Embedding properties + + @property + def nfrag(self): + """Number of fragments.""" + return len(self.fragments) + +
[docs] def loop(self): + """Loop over fragments.""" + for frag in self.fragments: + yield frag
+ + # --- Integral methods + # ==================== + + # Integrals of the original mean-field object - these cannot be changed: + + def _get_ovlp_orig(self): + return self._ovlp_orig + + def _get_hcore_orig(self): + return self._hcore_orig + + def _get_veff_orig(self, with_exxdiv=True): + if not with_exxdiv and self.has_exxdiv: + v_exxdiv = self.get_exxdiv()[1] + return self._get_veff_orig() - v_exxdiv + return self._veff_orig + + def _get_fock_orig(self, with_exxdiv=True): + return (self._get_hcore_orig() + self._get_veff_orig(with_exxdiv=with_exxdiv)) + + # Integrals which change with mean-field updates or chemical potential shifts: + +
[docs] def get_ovlp(self): + """AO-overlap matrix.""" + return self._ovlp
+ +
[docs] def get_hcore(self): + """Core Hamiltonian (kinetic energy plus nuclear-electron attraction).""" + return self._hcore
+ +
[docs] def get_veff(self, dm1=None, with_exxdiv=True): + """Hartree-Fock Coulomb and exchange potential in AO basis.""" + if not with_exxdiv and self.has_exxdiv: + v_exxdiv = self.get_exxdiv()[1] + return self.get_veff(dm1=dm1) - v_exxdiv + if dm1 is None: + return self._veff + return self.mf.get_veff(dm=dm1)
+ +
[docs] def get_fock(self, dm1=None, with_exxdiv=True): + """Fock matrix in AO basis.""" + return self.get_hcore() + self.get_veff(dm1=dm1, with_exxdiv=with_exxdiv)
+ +
[docs] def set_ovlp(self, value): + self.log.debug("Changing ovlp matrix.") + self._ovlp = value
+ +
[docs] def set_hcore(self, value): + self.log.debug("Changing hcore matrix.") + self._hcore = value
+ +
[docs] def set_veff(self, value): + self.log.debug("Changing veff matrix.") + self._veff = value
+ + # Integrals for energy evaluation + # Overwriting these allows using different integrals for the energy evaluation + +
[docs] def get_hcore_for_energy(self): + """Core Hamiltonian used for energy evaluation.""" + return self.get_hcore()
+ +
[docs] def get_veff_for_energy(self, dm1=None, with_exxdiv=True): + """Hartree-Fock potential used for energy evaluation.""" + return self.get_veff(dm1=dm1, with_exxdiv=with_exxdiv)
+ +
[docs] def get_fock_for_energy(self, dm1=None, with_exxdiv=True): + """Fock matrix used for energy evaluation.""" + return (self.get_hcore_for_energy() + self.get_veff_for_energy(dm1=dm1, with_exxdiv=with_exxdiv))
+ +
[docs] def get_fock_for_bath(self, dm1=None, with_exxdiv=True): + """Fock matrix used for bath orbitals.""" + return self.get_fock(dm1=dm1, with_exxdiv=with_exxdiv)
+ + # Other integral methods: + +
[docs] def get_ovlp_power(self, power): + """get power of AO overlap matrix. + + For folded calculations, this uses the k-point sampled overlap, for better performance and accuracy. + + Parameters + ---------- + power : float + Matrix power. + + Returns + ------- + spow : (n(AO), n(AO)) array + Matrix power of AO overlap matrix + """ + if power == 1: return self.get_ovlp() + if self.kcell is None: + e, v = np.linalg.eigh(self.get_ovlp()) + return np.dot(v*(e**power), v.T.conj()) + sk = self.kcell.pbc_intor('int1e_ovlp', hermi=1, kpts=self.kpts, pbcopt=pyscf.lib.c_null_ptr()) + ek, vk = np.linalg.eigh(sk) + spowk = einsum('kai,ki,kbi->kab', vk, ek**power, vk.conj()) + spow = pyscf.pbc.tools.k2gamma.to_supercell_ao_integrals(self.kcell, self.kpts, spowk) + return spow
+ +
[docs] def get_cderi(self, mo_coeff, compact=False, blksize=None): + """Get density-fitted three-center integrals in MO basis.""" + if compact: + raise NotImplementedError() + if self.kdf is not None: + return kao2gmo_cderi(self.kdf, mo_coeff) + + if np.ndim(mo_coeff[0]) == 1: + mo_coeff = (mo_coeff, mo_coeff) + + nao = self.mol.nao + naux = (self.df.auxcell.nao if hasattr(self.df, 'auxcell') else self.df.auxmol.nao) + cderi = np.zeros((naux, mo_coeff[0].shape[-1], mo_coeff[1].shape[-1])) + cderi_neg = None + if blksize is None: + blksize = int(1e9 / naux*nao*nao * 8) + # PBC: + if hasattr(self.df, 'sr_loop'): + blk0 = 0 + for labr, labi, sign in self.df.sr_loop(compact=False, blksize=blksize): + assert np.allclose(labi, 0) + assert (cderi_neg is None) # There should be only one block with sign -1 + labr = labr.reshape(-1, nao, nao) + if (sign == 1): + blk1 = (blk0 + labr.shape[0]) + blk = np.s_[blk0:blk1] + blk0 = blk1 + cderi[blk] = einsum('Lab,ai,bj->Lij', labr, mo_coeff[0], mo_coeff[1]) + elif (sign == -1): + cderi_neg = einsum('Lab,ai,bj->Lij', labr, mo_coeff[0], mo_coeff[1]) + return cderi, cderi_neg + # No PBC: + blk0 = 0 + for lab in self.df.loop(blksize=blksize): + blk1 = (blk0 + lab.shape[0]) + blk = np.s_[blk0:blk1] + blk0 = blk1 + lab = pyscf.lib.unpack_tril(lab) + cderi[blk] = einsum('Lab,ai,bj->Lij', lab, mo_coeff[0], mo_coeff[1]) + return cderi, None
+ +
[docs] @log_method() + def get_eris_array(self, mo_coeff, compact=False): + """Get electron-repulsion integrals in MO basis as a NumPy array. + + Parameters + ---------- + mo_coeff: [list(4) of] (n(AO), n(MO)) array + MO coefficients. + + Returns + ------- + eris: (n(MO), n(MO), n(MO), n(MO)) array + Electron-repulsion integrals in MO basis. + """ + # PBC with k-points: + if self.kdf is not None: + if compact: + raise NotImplementedError + if np.ndim(mo_coeff[0]) == 1: + mo_coeff = 4*[mo_coeff] + cderi1, cderi1_neg = kao2gmo_cderi(self.kdf, mo_coeff[:2]) + if (mo_coeff[0] is mo_coeff[2]) and (mo_coeff[1] is mo_coeff[3]): + cderi2, cderi2_neg = cderi1, cderi1_neg + else: + cderi2, cderi2_neg = kao2gmo_cderi(self.kdf, mo_coeff[2:]) + eris = einsum('Lij,Lkl->ijkl', cderi1.conj(), cderi2) + if cderi1_neg is not None: + eris -= einsum('Lij,Lkl->ijkl', cderi1_neg.conj(), cderi2_neg) + return eris + # Molecules and Gamma-point PBC: + if hasattr(self.mf, 'with_df') and self.mf.with_df is not None: + eris = self.mf.with_df.ao2mo(mo_coeff, compact=compact) + elif self.mf._eri is not None: + eris = pyscf.ao2mo.kernel(self.mf._eri, mo_coeff, compact=compact) + else: + eris = self.mol.ao2mo(mo_coeff, compact=compact) + if not compact: + if isinstance(mo_coeff, np.ndarray) and mo_coeff.ndim == 2: + shape = 4*[mo_coeff.shape[-1]] + else: + shape = [mo.shape[-1] for mo in mo_coeff] + eris = eris.reshape(shape) + return eris
+ +
[docs] @log_method() + def get_eris_object(self, postscf, fock=None): + """Get ERIs for post-SCF methods. + + For folded PBC calculations, this folds the MO back into k-space + and contracts with the k-space three-center integrals.. + + Parameters + ---------- + postscf: one of the following PySCF methods: MP2, CCSD, RCCSD, DFCCSD + Post-SCF method with attribute mo_coeff set. + + Returns + ------- + eris: _ChemistsERIs + ERIs which can be used for the respective post-scf method. + """ + if fock is None: + if isinstance(postscf, pyscf.mp.mp2.MP2): + fock = self.get_fock() + elif isinstance(postscf, (pyscf.ci.cisd.CISD, pyscf.cc.ccsd.CCSD)): + fock = self.get_fock(with_exxdiv=False) + else: + raise ValueError("Unknown post-SCF method: %r", type(postscf)) + # For MO energies, always use get_fock(): + mo_act = _mo_without_core(postscf, postscf.mo_coeff) + mo_energy = einsum('ai,ab,bi->i', mo_act, self.get_fock(), mo_act) + e_hf = self.mf.e_tot + + # Fold MOs into k-point sampled primitive cell, to perform efficient AO->MO transformation: + if self.kdf is not None: + return postscf_kao2gmo(postscf, self.kdf, fock=fock, mo_energy=mo_energy, e_hf=e_hf) + # Regular AO->MO transformation + eris = postscf_ao2mo(postscf, fock=fock, mo_energy=mo_energy, e_hf=e_hf) + return eris
+ +
[docs] @log_method() + @with_doc(build_screened_eris) + def build_screened_eris(self, *args, **kwargs): + scrfrags = [x.opts.screening for x in self.fragments if x.opts.screening is not None] + if len(scrfrags) > 0: + # Calculate total dRPA energy in N^4 time; this is cheaper than screening calculations. + rpa = ssRIRPA(self.mf, log=self.log) + self.e_nonlocal, energy_error = rpa.kernel_energy(correction='linear') + if scrfrags.count("mrpa") > 0: + build_screened_eris(self, *args, **kwargs)
+ + # Symmetry between fragments + # -------------------------- + +
[docs] def create_symmetric_fragments(self, symmetry, fragments=None, symbol=None, mf_tol=None, check_mf=True): + """Add rotationally or translationally symmetric fragments. + + Parameters + ---------- + mf_tol: float, optional + Tolerance for the error of the mean-field density matrix between symmetry related fragments. + If the largest absolute difference in the density-matrix is above this value, + and exception will be raised. Default: self.opts.symmetry_mf_tol. + + Returns + ------- + fragments: list + List of T-symmetry related fragments. These will have the attributes `sym_parent` and `sym_op` set. + """ + default_axes = {'x': (1,0,0), 'y': (0,1,0), 'z': (0,0,1)} + symtype = symmetry['type'] + + def to_bohr(point, unit): + unit = unit.lower() + point = np.asarray(point, dtype=float) + if unit.startswith('ang'): + return point / 0.529177210903 + if unit == 'latvec': + #kcell = self.kcell if self.kcell is not None else self.mol + return np.dot(point, (self.kcell or self.mol).lattice_vectors()) + if unit.startswith('bohr'): + return point + raise ValueError("unit= %s" % unit) + + def shift_point_to_supercell(point): + """Shift point in primitive cell to equivalent, scaled point in supercell.""" + if self.kcell is None: + # No PBC or no supercell + return point + ak = self.kcell.lattice_vectors() # primtive cell lattice vectors + bk = np.linalg.inv(ak) + a = self.mol.lattice_vectors() # supercell lattice vectors + shift = (np.diag(a)/np.diag(ak) - 1)/2 + # Shift in internal coordinates, then transform back + point = np.dot(np.dot(point, bk) + shift, ak) + return point + + if symtype == 'inversion': + center = to_bohr(symmetry['center'], symmetry['unit']) + center = shift_point_to_supercell(center) + symbol = symbol or 'I' + symlist = [1] + elif symtype == 'reflection': + center = to_bohr(symmetry['center'], symmetry['unit']) + center = shift_point_to_supercell(center) + axis = symmetry['axis'] + axis = np.asarray(default_axes.get(axis, axis), dtype=float) + axis = to_bohr(axis, symmetry['unit']) + symbol = symbol or 'M' + symlist = [1] + elif symtype == 'rotation': + order = symmetry['order'] + axis = symmetry['axis'] + axis = np.asarray(default_axes.get(axis, axis), dtype=float) + axis = to_bohr(axis, symmetry['unit']) + center = to_bohr(symmetry['center'], symmetry['unit']) + center = shift_point_to_supercell(center) + symlist = range(1, order) + symbol = symbol or 'R' + elif symtype == 'translation': + translation = np.asarray(symmetry['translation']) + symlist = list(itertools.product(range(translation[0]), range(translation[1]), range(translation[2])))[1:] + symbol = symbol or 'T' + else: + raise ValueError("Symmetry type= %s" % symtype) + + ovlp = self.get_ovlp() + if check_mf: + dm1 = self.mf.make_rdm1() + + if fragments is None: + fragments = self.get_fragments() + ftree = [[fx] for fx in fragments] + for i, sym in enumerate(symlist): + + if symtype == 'inversion': + sym_op = SymmetryInversion(self.symmetry, center=center) + elif symtype == 'inversion': + sym_op = SymmetryReflection(self.symmetry, axis=axis, center=center) + elif symtype == 'reflection': + sym_op = SymmetryReflection(self.symmetry, axis=axis, center=center) + elif symtype == 'rotation': + rotvec = 2*np.pi * (sym/order) * axis/np.linalg.norm(axis) + sym_op = SymmetryRotation(self.symmetry, rotvec, center=center) + elif symtype == 'translation': + transvec = np.asarray(sym)/translation + sym_op = SymmetryTranslation(self.symmetry, transvec) + + for flist in ftree: + parent = flist[0] + # Name for symmetry related fragment + if symtype == 'inversion': + name = '%s_%s' % (parent.name, symbol) + elif symtype == 'reflection': + name = '%s_%s' % (parent.name, symbol) + elif symtype == 'rotation': + name = '%s_%s(%d)' % (parent.name, symbol, sym) + elif symtype == 'translation': + name = '%s_%s(%d,%d,%d)' % (parent.name, symbol, *sym) + # Translated coefficients + c_frag_t = sym_op(parent.c_frag) + c_env_t = None # Avoid expensive symmetry operation on environment orbitals + # Check that translated fragment does not overlap with current fragment: + fragovlp = parent._csc_dot(parent.c_frag, c_frag_t, ovlp=ovlp) + if self.spinsym == 'restricted': + fragovlp = abs(fragovlp).max() + elif self.spinsym == 'unrestricted': + fragovlp = max(abs(fragovlp[0]).max(), abs(fragovlp[1]).max()) + if (fragovlp > 1e-6): + self.log.critical("%s of fragment %s not orthogonal to original fragment (overlap= %.1e)!", + sym_op, parent.name, fragovlp) + raise RuntimeError("Overlapping fragment spaces (overlap= %.1e)" % fragovlp) + + # Add fragment + frag_id = self.register.get_next_id() + frag = self.Fragment(self, frag_id, name, c_frag_t, c_env_t, solver=parent.solver, sym_parent=parent, + sym_op=sym_op, mpi_rank=parent.mpi_rank, flags=dataclasses.asdict(parent.flags), + **parent.opts.asdict()) + # Check symmetry + # (only for the first rotation or primitive translations (1,0,0), (0,1,0), and (0,0,1) + # to reduce number of sym_op(c_env) calls) + if check_mf and (abs(np.asarray(sym)).sum() == 1): + charge_err, spin_err = parent.get_symmetry_error(frag, dm1=dm1) + if max(charge_err, spin_err) > (mf_tol or self.opts.symmetry_mf_tol): + self.log.critical("Mean-field DM1 not symmetric for %s of %s (errors: charge= %.1e, spin= %.1e)!", + sym_op, parent.name, charge_err, spin_err) + raise RuntimeError("MF not symmetric under %s" % sym_op) + else: + self.log.debugv("Mean-field DM symmetry error for %s of %s: charge= %.1e, spin= %.1e", + sym_op, parent.name, charge_err, spin_err) + + # Insert after parent fragment + flist.append(frag) + fragments_sym = [fx for flist in ftree for fx in flist[1:]] + return fragments_sym
+ +
[docs] def create_invsym_fragments(self, center, fragments=None, unit='Ang', **kwargs): + """Create inversion symmetric fragments. + + Parameters + ---------- + mf_tol: float, optional + Tolerance for the error of the mean-field density matrix between symmetry related fragments. + If the largest absolute difference in the density-matrix is above this value, + and exception will be raised. Default: 1e-6. + + Returns + ------- + fragments: list + List of inversion-symmetry related fragments. These will have have the attributes `sym_parent` and `sym_op` set. + """ + symmetry = dict(type='inversion', center=center, unit=unit) + return self.create_symmetric_fragments(symmetry, fragments=fragments, **kwargs)
+ +
[docs] def create_mirrorsym_fragments(self, axis, center, fragments=None, unit='Ang', **kwargs): + """Create mirror symmetric fragments. + + Parameters + ---------- + mf_tol: float, optional + Tolerance for the error of the mean-field density matrix between symmetry related fragments. + If the largest absolute difference in the density-matrix is above this value, + and exception will be raised. Default: 1e-6. + + Returns + ------- + fragments: list + List of mirror-symmetry related fragments. These will have have the attributes `sym_parent` and `sym_op` set. + """ + symmetry = dict(type='reflection', axis=axis, center=center, unit=unit) + return self.create_symmetric_fragments(symmetry, fragments=fragments, **kwargs)
+ +
[docs] def create_rotsym_fragments(self, order, axis, center, fragments=None, unit='Ang', **kwargs): + """Create rotationally symmetric fragments. + + Parameters + ---------- + mf_tol: float, optional + Tolerance for the error of the mean-field density matrix between symmetry related fragments. + If the largest absolute difference in the density-matrix is above this value, + and exception will be raised. Default: 1e-6. + + Returns + ------- + fragments: list + List of rotationally-symmetry related fragments. These will have have the attributes `sym_parent` and `sym_op` set. + """ + symmetry = dict(type='rotation', order=order, axis=axis, center=center, unit=unit) + return self.create_symmetric_fragments(symmetry, fragments=fragments, **kwargs)
+ +
[docs] def create_transsym_fragments(self, translation, fragments=None, **kwargs): + """Create translationally symmetric fragments. + + Parameters + ---------- + translation: array(3) of integers + Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell. + mf_tol: float, optional + Tolerance for the error of the mean-field density matrix between symmetry related fragments. + If the largest absolute difference in the density-matrix is above this value, + and exception will be raised. Default: 1e-6. + + Returns + ------- + fragments: list + List of T-symmetry related fragments. These will have the attributes `sym_parent` and `sym_op` set. + """ + symmetry = dict(type='translation', translation=translation) + return self.create_symmetric_fragments(symmetry, fragments=fragments, **kwargs)
+ +
[docs] def get_symmetry_parent_fragments(self): + """Returns a list of all fragments, which are parents to symmetry related child fragments. + + Returns + ------- + parents: list + A list of all parent fragments, ordered in the same way as they appear in `self.fragments`. + """ + parents = [] + for f in self.fragments: + if f.sym_parent is None: + parents.append(f) + return parents
+ +
[docs] def get_symmetry_child_fragments(self, include_parents=False): + """Returns a list of all fragments, which are children to symmetry related parent fragments. + + Parameters + ---------- + include_parents: bool, optional + If true, the parent fragment of each symmetry group is prepended to each symmetry sublist. + + Returns + ------- + children: list of lists + A list with the length of the number of parent fragments in the system, each element + being another list containing all the children fragments of the given parent fragment. + Both the outer and inner lists are ordered in the same way that the fragments appear in `self.fragments`. + """ + parents = self.get_symmetry_parent_fragments() + if include_parents: + children = [[p] for p in parents] + else: + children = [[] for p in parents] + parent_ids = [p.id for p in parents] + for f in self.fragments: + if f.sym_parent is None: continue + pid = f.sym_parent.id + assert (pid in parent_ids) + idx = parent_ids.index(pid) + children[idx].append(f) + return children
+ +
[docs] def get_fragments(self, fragments=None, options=None, flags=None, **filters): + """Return all fragments which obey the specified conditions. + + Arguments + --------- + **filters: + List of returned fragments will be filtered according to specified + keyword arguments. + + Returns + ------- + fragments: list + List of fragments. + + Examples + -------- + + Only returns fragments with mpi_rank 0, 1, or 2: + + >>> self.get_fragments(mpi_rank=[0,1,2]) + + Only returns fragments with no symmetry parent: + + >>> self.get_fragments(sym_parent=None) + """ + if fragments is None: + fragments = self.fragments + options = options or {} + flags = flags or {} + if not (filters or options or flags): + return fragments + + def _values_atleast_1d(d): + return {k: (v if callable(v) else np.atleast_1d(v)) for k, v in d.items()} + filters = _values_atleast_1d(filters) + options = _values_atleast_1d(options) + flags = _values_atleast_1d(flags) + + def _skip(attr, filt): + if callable(filt): + return not filt(attr) + return attr not in filt + + filtered_fragments = [] + for frag in fragments: + skip = False + # Check filters: + for key, filt in filters.items(): + attr = getattr(frag, key) + skip = _skip(attr, filt) + if skip: break + if skip: + continue + # Check options: + for key, filt in options.items(): + attr = getattr_recursive(frag.opts, key) + skip = _skip(attr, filt) + if skip: break + # Check flags: + for key, filt in flags.items(): + attr = getattr_recursive(frag.flags, key) + skip = _skip(attr, filt) + if skip: break + if skip: + continue + filtered_fragments.append(frag) + return filtered_fragments
+ +
[docs] def get_fragment_overlap_norm(self, fragments=None, occupied=True, virtual=True, norm=2): + """Get matrix of overlap norms between fragments.""" + if fragments is None: + fragments = self.get_fragments() + if isinstance(fragments[0], self.Fragment): + fragments = 2*[fragments] + + if not (occupied or virtual): + raise ValueError + overlap = np.zeros((len(fragments[0]), len(fragments[1]))) + ovlp = self.get_ovlp() + nxy_occ = nxy_vir = np.inf + for i, fx in enumerate(fragments[0]): + if occupied: + cxs_occ = spinalg.dot(spinalg.T(fx.cluster.c_occ), ovlp) + if virtual: + cxs_vir = spinalg.dot(spinalg.T(fx.cluster.c_vir), ovlp) + for j, fy in enumerate(fragments[1]): + if occupied: + rxy_occ = spinalg.dot(cxs_occ, fy.cluster.c_occ) + nxy_occ = np.amax(spinalg.norm(rxy_occ, ord=norm)) + if virtual: + rxy_vir = spinalg.dot(cxs_vir, fy.cluster.c_vir) + nxy_vir = np.amax(spinalg.norm(rxy_vir, ord=norm)) + overlap[i,j] = np.amin((nxy_occ, nxy_vir)) + return overlap
+ + def _absorb_fragments(self, tol=1e-10): + """TODO""" + for fx in self.get_fragments(active=True): + for fy in self.get_fragments(active=True): + if (fx.id == fy.id): + continue + if not (fx.active and fy.active): + continue + + def svd(cx, cy): + rxy = np.dot(cx.T, cy) + u, s, v = np.linalg.svd(rxy, full_matrices=False) + if s.min() >= (1-tol): + nx = cx.shape[-1] + ny = cy.shape[-1] + swap = False if (nx >= ny) else True + return swap + return None + + cx_occ = fx.get_overlap('mo[occ]|cluster[occ]') + cy_occ = fy.get_overlap('mo[occ]|cluster[occ]') + swocc = svd(cx_occ, cy_occ) + if swocc is None: + continue + + cx_vir = fx.get_overlap('mo[vir]|cluster[vir]') + cy_vir = fy.get_overlap('mo[vir]|cluster[vir]') + swvir = svd(cx_vir, cy_vir) + if swocc != swvir: + continue + + # Absorb smaller + if swocc: + fx, fy = fy, fx + c_frag = hstack(fx.c_frag, fy.c_frag) + fx.c_frag = c_frag + name = '/'.join((fx.name, fy.name)) + fy.active = False + self.log.info("Subspace found: adding %s to %s (new name= %s)!", fy, fx, name) + # Update fx + fx.name = name + fx.c_env = None + fx._dmet_bath = None + fx._occ_bath_factory = None + fx._vir_bath_factory = None + + # Results + # ------- + +
[docs] def communicate_clusters(self): + """Communicate cluster orbitals between MPI ranks.""" + if not mpi: + return + with log_time(self.log.timing, "Time to communicate clusters: %s"): + for x in self.get_fragments(sym_parent=None): + source = x.mpi_rank + if (mpi.rank == source): + x.cluster.orig_mf = None + cluster = mpi.world.bcast(x.cluster, root=source) + if (mpi.rank != source): + x.cluster = cluster + x.cluster.orig_mf = self.mf
+ +
[docs] @log_method() + @with_doc(make_rdm1_demo_rhf) + def make_rdm1_demo(self, *args, **kwargs): + return make_rdm1_demo_rhf(self, *args, **kwargs)
+ +
[docs] @log_method() + @with_doc(make_rdm2_demo_rhf) + def make_rdm2_demo(self, *args, **kwargs): + return make_rdm2_demo_rhf(self, *args, **kwargs)
+ +
[docs] def get_dmet_elec_energy(self, part_cumulant=True, approx_cumulant=True): + """Calculate electronic DMET energy via democratically partitioned density-matrices. + + Parameters + ---------- + part_cumulant: bool, optional + If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, + the full 2-DM will be partitioned, as it is done in most of the DMET literature. + True is recommended, unless checking for agreement with literature results. Default: True. + approx_cumulant: bool, optional + If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, + instead of the true cumulant, if `part_cumulant=True`. Default: True. + + Returns + ------- + e_dmet: float + Electronic DMET energy. + """ + e_dmet = 0.0 + for x in self.get_fragments(active=True, mpi_rank=mpi.rank, sym_parent=None): + wx = x.symmetry_factor + e_dmet += wx*x.get_fragment_dmet_energy(part_cumulant=part_cumulant, approx_cumulant=approx_cumulant) + if mpi: + mpi.world.allreduce(e_dmet) + if part_cumulant: + dm1 = self.make_rdm1_demo(ao_basis=True) + if not approx_cumulant: + vhf = self.get_veff_for_energy(dm1=dm1, with_exxdiv=False) + elif (int(approx_cumulant) == 1): + dm1 = 2*np.asarray(dm1) - self.mf.make_rdm1() + vhf = self.get_veff_for_energy(with_exxdiv=False) + else: + raise ValueError + e_dmet += np.sum(np.asarray(vhf) * dm1)/2 + + self.log.debugv("E_elec(DMET)= %s", energy_string(e_dmet)) + return e_dmet / self.ncells
+ +
[docs] def get_dmet_energy(self, part_cumulant=True, approx_cumulant=True, with_nuc=True, with_exxdiv=True): + """Calculate DMET energy via democratically partitioned density-matrices. + + Parameters + ---------- + part_cumulant: bool, optional + If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, + the full 2-DM will be partitioned, as it is done in most of the DMET literature. + True is recommended, unless checking for agreement with literature results. Default: True. + approx_cumulant: bool, optional + If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, + instead of the true cumulant, if `part_cumulant=True`. Default: True. + with_nuc: bool, optional + Include nuclear-repulsion energy. Default: True. + with_exxdiv: bool, optional + Include divergent exact-exchange correction. Default: True. + + Returns + ------- + e_dmet: float + DMET energy. + """ + e_dmet = self.get_dmet_elec_energy(part_cumulant=part_cumulant, approx_cumulant=approx_cumulant) + if with_nuc: + e_dmet += self.e_nuc + if with_exxdiv and self.has_exxdiv: + e_dmet += self.get_exxdiv()[0] + return e_dmet
+ + get_corrfunc_mf = log_method()(get_corrfunc_mf) + get_corrfunc = log_method()(get_corrfunc) + + # Utility + # ------- + + def _check_orthonormal(self, *mo_coeff, mo_name='', crit_tol=1e-2, err_tol=1e-7): + """Check orthonormality of mo_coeff.""" + mo_coeff = hstack(*mo_coeff) + err = dot(mo_coeff.T, self.get_ovlp(), mo_coeff) - np.eye(mo_coeff.shape[-1]) + l2 = np.linalg.norm(err) + linf = abs(err).max() + if mo_name: + mo_name = (' of %ss' % mo_name) + if max(l2, linf) > crit_tol: + self.log.critical("Orthonormality error%s: L(2)= %.2e L(inf)= %.2e !", mo_name, l2, linf) + raise OrthonormalityError("Orbitals not orhonormal!") + elif max(l2, linf) > err_tol: + self.log.error("Orthonormality error%s: L(2)= %.2e L(inf)= %.2e !", mo_name, l2, linf) + else: + self.log.debugv("Orthonormality error%s: L(2)= %.2e L(inf)= %.2e", mo_name, l2, linf) + return l2, linf + +
[docs] def get_mean_cluster_size(self): + return np.mean([x.cluster.norb_active for x in self.fragments])
+ +
[docs] def get_average_cluster_size(self, average='mean'): + if average == 'mean': + return self.get_mean_cluster_size() + raise ValueError
+ +
[docs] def get_min_cluster_size(self): + return np.min([x.cluster.norb_active for x in self.fragments])
+ +
[docs] def get_max_cluster_size(self): + return np.max([x.cluster.norb_active for x in self.fragments])
+ + # --- Population analysis + # ----------------------- + + def _get_atom_projectors(self, atoms=None, projection='sao', orbital_filter=None): + if atoms is None: + atoms2 = list(range(self.mol.natm)) + # For supercell systems, we do not want all supercell-atom pairs, + # but only primitive-cell -- supercell pairs: + atoms1 = atoms2 if (self.kcell is None) else list(range(self.kcell.natm)) + elif isinstance(atoms[0], (int, np.integer)): + atoms1 = atoms2 = atoms + else: + atoms1, atoms2 = atoms + + # Get atomic projectors: + projection = projection.lower() + if projection == 'sao': + frag = SAO_Fragmentation(self) + elif projection.replace('+', '').replace('/', '') == 'iaopao': + frag = IAOPAO_Fragmentation(self) + elif projection == 'iao': + frag = IAO_Fragmentation(self) + self.log.warning("IAO projection is not recommended for population analysis! Use IAO+PAO instead.") + else: + raise ValueError("Invalid projection: %s" % projection) + frag.kernel() + ovlp = self.get_ovlp() + projectors = {} + cs = spinalg.dot(spinalg.transpose(self.mo_coeff), ovlp) + for atom in sorted(set(atoms1).union(atoms2)): + name, indices = frag.get_atomic_fragment_indices(atom, orbital_filter=orbital_filter) + c_atom = frag.get_frag_coeff(indices) + if isinstance(c_atom, tuple): + no_orbs = c_atom[0].shape[1] == 0 and c_atom[1].shape[1] == 0 + else: + no_orbs = c_atom.shape[1] == 0 + + if no_orbs and orbital_filter is not None: + self.log.error("No orbitals found for atom %d when filtered!" % atom) + raise ValueError("No orbitals found for atom %d when filtered" % atom) + r = spinalg.dot(cs, c_atom) + projectors[atom] = spinalg.dot(r, spinalg.transpose(r)) + + return atoms1, atoms2, projectors + +
[docs] def get_lo_coeff(self, local_orbitals='lowdin', minao='auto'): + if local_orbitals.lower() == 'lowdin': + # Avoid pre_orth_ao step! + #self.c_lo = c_lo = pyscf.lo.orth_ao(self.mol, 'lowdin') + #self.c_lo = c_lo = pyscf.lo.orth_ao(self.mol, 'meta-lowdin', pre_orth_ao=None) + return self.get_ovlp_power(power=-0.5) + elif local_orbitals.lower() == 'iao+pao': + return IAOPAO_Fragmentation(self, minao=minao).get_coeff() + raise ValueError("Unknown local orbitals: %r" % local_orbitals)
+ +
[docs] def pop_analysis(self, dm1, mo_coeff=None, local_orbitals='lowdin', minao='auto', write=True, filename=None, filemode='a', + orbital_resolved=False, mpi_rank=0): + """ + Parameters + ---------- + dm1 : (N, N) array + If `mo_coeff` is None, AO representation is assumed. + local_orbitals : {'lowdin', 'mulliken', 'iao+pao'} or array + Kind of population analysis. Default: 'lowdin'. + + Returns + ------- + pop : (N) array + Population of atomic orbitals. + """ + if mo_coeff is not None: + dm1 = einsum('ai,ij,bj->ab', mo_coeff, dm1, mo_coeff) + + ovlp = self.get_ovlp() + if isinstance(local_orbitals, str): + lo = local_orbitals.lower() + if lo == 'mulliken': + c_lo = None + else: + c_lo = self.get_lo_coeff(lo, minao=minao) + else: + c_lo = local_orbitals + + if c_lo is None: + pop = einsum('ab,ba->a', dm1, ovlp) + else: + cs = np.dot(c_lo.T, ovlp) + pop = einsum('ia,ab,ib->i', cs, dm1, cs) + + if write and (mpi.rank == mpi_rank): + self.write_population(pop, filename=filename, filemode=filemode, orbital_resolved=orbital_resolved) + return pop
+ +
[docs] def get_atomic_charges(self, pop): + charges = np.zeros(self.mol.natm) + spins = np.zeros(self.mol.natm) + if len(pop) != self.mol.nao: + raise ValueError("n(AO)= %d n(Pop)= %d" % (self.mol.nao, len(pop))) + + for i, label in enumerate(self.mol.ao_labels(None)): + charges[label[0]] -= pop[i] + charges += self.mol.atom_charges() + return charges, spins
+ +
[docs] def write_population(self, pop, filename=None, filemode='a', orbital_resolved=False): + charges, spins = self.get_atomic_charges(pop) + if orbital_resolved: + aoslices = self.mol.aoslice_by_atom()[:,2:] + aolabels = self.mol.ao_labels() + + if filename is None: + write = lambda *args : self.log.info(*args) + write("Population analysis") + write("-------------------") + else: + dirname = os.path.dirname(filename) + if dirname: os.makedirs(dirname, exist_ok=True) + f = open(filename, filemode) + write = lambda fmt, *args : f.write((fmt+'\n') % args) + tstamp = datetime.now() + self.log.info("Writing population analysis to file \"%s\". Time-stamp: %s", filename, tstamp) + write("# Time-stamp: %s", tstamp) + write("# Population analysis") + write("# -------------------") + + for atom, charge in enumerate(charges): + write("%3d %-7s q= % 11.8f s= % 11.8f", atom, self.mol.atom_symbol(atom) + ':', charge, spins[atom]) + if orbital_resolved: + aos = aoslices[atom] + for ao in range(aos[0], aos[1]): + label = aolabels[ao] + if np.ndim(pop[0]) == 1: + write(" %4d %-16s= % 11.8f % 11.8f" % (ao, label, pop[0][ao], pop[1][ao])) + else: + write(" %4d %-16s= % 11.8f" % (ao, label, pop[ao])) + if filename is not None: + f.close()
+ + def _check_fragment_nelectron(self, fragments=None, nelec=None): + if fragments is None: + fragments = self.get_fragments(flags=dict(is_envelop=True)) + if nelec is None: + nelec = self.mol.nelectron + nelec_frags = sum([f.sym_factor*f.nelectron for f in fragments]) + + self.log.info("Number of electrons over %d fragments= %.8f target= %.8f", len(fragments), nelec_frags, nelec) + if abs(nelec_frags - nelec) > 1e-6: + self.log.warning("Number of mean-field electrons in fragments not equal to the target number of electrons.") + return nelec_frags + + # --- Fragmentation methods + +
[docs] def sao_fragmentation(self, **kwargs): + """Initialize the quantum embedding method for the use of SAO (Lowdin-AO) fragments.""" + return SAO_Fragmentation(self, **kwargs)
+ +
[docs] def site_fragmentation(self, **kwargs): + """Initialize the quantum embedding method for the use of site fragments.""" + return Site_Fragmentation(self, **kwargs)
+ +
[docs] def iao_fragmentation(self, minao='auto', **kwargs): + """Initialize the quantum embedding method for the use of IAO fragments. + + Parameters + ---------- + minao: str, optional + IAO reference basis set. Default: 'auto' + """ + return IAO_Fragmentation(self, minao=minao, **kwargs)
+ +
[docs] def iaopao_fragmentation(self, minao='auto', **kwargs): + """Initialize the quantum embedding method for the use of IAO+PAO fragments. + + Parameters + ---------- + minao: str, optional + IAO reference basis set. Default: 'auto' + """ + return IAOPAO_Fragmentation(self, minao=minao, **kwargs)
+ +
[docs] def cas_fragmentation(self, **kwargs): + """Initialize the quantum embedding method for the use of site fragments.""" + return CAS_Fragmentation(self, **kwargs)
+ + def _check_fragmentation(self, complete_occupied=True, complete_virtual=True, tol=1e-7): + """Check if union of fragment spaces is orthonormal and complete.""" + if self.spinsym == 'restricted': + nspin = 1 + tspin = lambda x, s : x + nelec = self.mol.nelectron + elif self.spinsym == 'unrestricted': + nspin = 2 + tspin = lambda x, s : x[s] + nelec = self.mol.nelec + ovlp = self.get_ovlp() + dm1 = self.mf.make_rdm1() + for s in range(nspin): + nmo_s = tspin(self.nmo, s) + nelec_s = tspin(nelec, s) + fragments = self.get_fragments(active=True, flags=dict(is_secfrag=False)) + if not fragments: + return False + c_frags = np.hstack([tspin(x.c_frag, s) for x in fragments]) + nfrags = c_frags.shape[-1] + csc = dot(c_frags.T, ovlp, c_frags) + if not np.allclose(csc, np.eye(nfrags), rtol=0, atol=tol): + self.log.debug("Non-orthogonal error= %.3e", abs(csc - np.eye(nfrags)).max()) + return False + if complete_occupied and complete_virtual: + if (nfrags != nmo_s): + return False + elif complete_occupied or complete_virtual: + cs = np.dot(c_frags.T, ovlp) + ne = einsum('ia,ab,ib->', cs, tspin(dm1, s), cs) + if complete_occupied and (abs(ne - nelec_s) > tol): + return False + if complete_virtual and (abs((nfrags-ne) - (nmo_s-nelec_s)) > tol): + return False + return True + +
[docs] def has_orthonormal_fragmentation(self, **kwargs): + """Check if union of fragment spaces is orthonormal.""" + return self._check_fragmentation(complete_occupied=False, complete_virtual=False, **kwargs)
+ +
[docs] def has_complete_fragmentation(self, **kwargs): + """Check if union of fragment spaces is orthonormal and complete.""" + return self._check_fragmentation(complete_occupied=True, complete_virtual=True, **kwargs)
+ +
[docs] def has_complete_occupied_fragmentation(self, **kwargs): + """Check if union of fragment spaces is orthonormal and complete in the occupied space.""" + return self._check_fragmentation(complete_occupied=True, complete_virtual=False, **kwargs)
+ +
[docs] def has_complete_virtual_fragmentation(self, **kwargs): + """Check if union of fragment spaces is orthonormal and complete in the virtual space.""" + return self._check_fragmentation(complete_occupied=False, complete_virtual=True, **kwargs)
+ +
[docs] def require_complete_fragmentation(self, message=None, incl_virtual=True, **kwargs): + if incl_virtual: + complete = self.has_complete_fragmentation(**kwargs) + else: + complete = self.has_complete_occupied_fragmentation(**kwargs) + if complete: + return + if message: + message = ' %s' % message + else: + message = '' + self.log.error("Fragmentation is not orthogonal and complete.%s", message)
+ + # --- Reset + + def _reset_fragments(self, *args, **kwargs): + for fx in self.fragments: + fx.reset(*args, **kwargs) + + def _reset(self): + self.e_corr = None + self.converged = False + +
[docs] def reset(self, *args, **kwargs): + self._reset() + self._reset_fragments(*args, **kwargs)
+ + # --- Mean-field updates + +
[docs] def update_mf(self, mo_coeff, mo_energy=None, veff=None): + """Update underlying mean-field object.""" + # Chech orthonormal MOs + if not np.allclose(dot(mo_coeff.T, self.get_ovlp(), mo_coeff) - np.eye(mo_coeff.shape[-1]), 0): + raise ValueError("MO coefficients not orthonormal!") + self.mf.mo_coeff = mo_coeff + dm = self.mf.make_rdm1(mo_coeff=mo_coeff) + if veff is None: + veff = self.mf.get_veff(dm=dm) + self.set_veff(veff) + if mo_energy is None: + # Use diagonal of Fock matrix as MO energies + mo_energy = einsum('ai,ab,bi->i', mo_coeff, self.get_fock(), mo_coeff) + self.mf.mo_energy = mo_energy + self.mf.e_tot = self.mf.energy_tot(dm=dm, h1e=self.get_hcore(), vhf=veff)
+ +
[docs] def check_fragment_symmetry(self, dm1, symtol=1e-6): + """Check that the mean-field obeys the symmetry between fragments.""" + frags = self.get_symmetry_child_fragments(include_parents=True) + for group in frags: + parent, children = group[0], group[1:] + for child in children: + charge_err, spin_err = parent.get_symmetry_error(child, dm1=dm1) + if (max(charge_err, spin_err) > symtol): + raise SymmetryError("%s and %s not symmetric! Errors: charge= %.2e spin= %.2e" + % (parent.name, child.name, charge_err, spin_err)) + else: + self.log.debugv("Symmetry between %s and %s: Errors: charge= %.2e spin= %.2e", + parent.name, child.name, charge_err, spin_err)
+ + # --- Decorators + # These replace the qemb.kernel method! + +
[docs] def optimize_chempot(self, cpt_init=0.0, dm1func=None, dm1kwds=None, robust=False): + + if dm1func is None: + dm1func = self.make_rdm1_demo + if dm1kwds is None: + dm1kwds = {} + + kernel_orig = self.kernel + iters = [] + result = None + + def func(cpt, *args, **kwargs): + nonlocal iters, result + self.opts.global_frag_chempot = cpt + result = kernel_orig(*args, **kwargs) + dm1 = dm1func(**dm1kwds) + if self.is_rhf: + ne = np.trace(dm1) + else: + ne = np.trace(dm1[0]) + np.trace(dm1[1]) + err = (ne - self.mol.nelectron) + iters.append((cpt, err, self.converged, self.e_tot)) + return err + + bisect = ChempotBisection(func, cpt_init=cpt_init, robust=robust, log=self.log) + + def kernel(self, *args, **kwargs): + nonlocal iters, result + cpt = bisect.kernel(*args, **kwargs) + # Print info: + self.log.info("Chemical potential optimization") + self.log.info("-------------------------------") + self.log.info(" Iteration Chemical potential N(elec) error Converged Total Energy") + for i, (cpt, err, conv, etot) in enumerate(iters): + self.log.info(" %9d %19s %+14.8f %9r %19s", + i+1, energy_string(cpt), err, conv, energy_string(etot)) + if not bisect.converged: + self.log.error('Chemical potential not found!') + return result + self.kernel = kernel.__get__(self)
+ +
[docs] def pdmet_scmf(self, *args, **kwargs): + """Decorator for p-DMET.""" + self.with_scmf = PDMET(self, *args, **kwargs) + self.kernel = self.with_scmf.kernel
+ +
[docs] def brueckner_scmf(self, *args, **kwargs): + """Decorator for Brueckner-DMET.""" + self.with_scmf = Brueckner(self, *args, **kwargs) + self.kernel = self.with_scmf.kernel
+ +
[docs] def check_solver(self, solver): + is_uhf = np.ndim(self.mo_coeff[1]) == 2 + if self.opts.screening: + is_eb = "crpa_full" in self.opts.screening + else: + is_eb = False + check_solver_config(is_uhf, is_eb, solver, self.log)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/qemb/register.html b/_modules/vayesta/core/qemb/register.html new file mode 100644 index 000000000..9bd170462 --- /dev/null +++ b/_modules/vayesta/core/qemb/register.html @@ -0,0 +1,134 @@ + + + + + + vayesta.core.qemb.register — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.qemb.register

+from vayesta.mpi import mpi
+
+
+
[docs]class FragmentRegister: + + def __init__(self, mpi_size=None): + self._next_id = -1 + if mpi_size is None: + mpi_size = mpi.size + self._mpi_size = mpi_size + self._next_mpi_rank = -1 + +
[docs] def get_next_id(self): + self._next_id += 1 + return self._next_id
+ +
[docs] def get_next_mpi_rank(self, runtime=None, memory=None): + """TODO: get next MPI rank based on runtime and memory estimates.""" + if runtime is not None: + raise NotImplementedError() + if memory is not None: + raise NotImplementedError() + self._next_mpi_rank = (self._next_mpi_rank + 1) % self._mpi_size + return self._next_mpi_rank
+ +
[docs] def get_next(self, *args, **kwargs): + """Get next free fragment ID and MPI rank.""" + return (self.get_next_id(), self.get_next_mpi_rank(*args, **kwargs))
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/qemb/scrcoulomb.html b/_modules/vayesta/core/qemb/scrcoulomb.html new file mode 100644 index 000000000..82d1f25bf --- /dev/null +++ b/_modules/vayesta/core/qemb/scrcoulomb.html @@ -0,0 +1,342 @@ + + + + + + vayesta.core.qemb.scrcoulomb — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.qemb.scrcoulomb

+import logging
+import numpy as np
+import scipy
+import scipy.linalg
+from vayesta.rpa import ssRIRPA
+from vayesta.core.util import dot, einsum
+from vayesta.mpi import mpi
+
+
+
[docs]def build_screened_eris(emb, fragments=None, cderi_ov=None, calc_e=True, npoints=48, log=None): + """Generates renormalised coulomb interactions for use in local cluster calculations. + Currently requires unrestricted system. + + Parameters + ---------- + emb : Embedding + Embedding instance. + fragments : list of vayesta.qemb.Fragment subclasses, optional + List of fragments for the calculation, used to define local interaction spaces. + If None, `emb.get_fragments(sym_parent=None)` is used. Default: None. + cderi_ov : np.array or tuple of np.array, optional. + Cholesky-decomposed ERIs in the particle-hole basis of mf. If mf is unrestricted + this should be a list of arrays corresponding to the different spin channels. + calc_ecorrection : bool, optional. + Whether to calculate a nonlocal energy correction at the level of RPA + npoints : int, optional + Number of points for numerical integration. Default: 48. + log : logging.Logger, optional + Logger object. If None, the logger of the `emb` object is used. Default: None. + + Returns + ------- + seris_ov : list of tuples of np.array + List of spin-dependent screened (ov|ov), for each fragment provided. + erpa: float + Delta RPA correction computed as difference between full system RPA energy and + cluster correlation energies; currently only functional in CAS fragmentations. + """ + if log is None: + log = log or emb.log or logging.getLogger(__name__) + log.info("Calculating screened Coulomb interactions") + log.info("-----------------------------------------") + + # --- Setup + if fragments is None: + fragments = emb.get_fragments(active=True, sym_parent=None, mpi_rank=mpi.rank) + fragments = [f for f in fragments if f.opts.screening == 'mrpa'] + if emb.spinsym != 'unrestricted': + raise NotImplementedError("Screened interactions require a spin-unrestricted formalism.") + if emb.df is None: + raise NotImplementedError("Screened interactions require density-fitting.") + r_occs = [f.get_overlap('mo[occ]|cluster[occ]') for f in fragments] + r_virs = [f.get_overlap('mo[vir]|cluster[vir]') for f in fragments] + target_rots, ovs_active = _get_target_rot(r_occs, r_virs) + + rpa = ssRIRPA(emb.mf, log=log, Lpq=cderi_ov) + if calc_e: + # This scales as O(N^4) + erpa, energy_error = rpa.kernel_energy(correction='linear') + else: + erpa = None + + tr = np.concatenate(target_rots, axis=0) + if sum(sum(ovs_active)) > 0: + # Computation scales as O(N^4) + moms_interact, est_errors = rpa.kernel_moms(0, tr, npoints=npoints) + momzero_interact = moms_interact[0] + else: + momzero_interact = np.zeros_like(np.concatenate(tr, axis=0)) + + # Now need to separate into local contributions + n = 0 + local_moments = [] + for nov, rot in zip(ovs_active, target_rots): + # Computation costs O(N^2 N_clus^2) + # Get corresponding section of overall moment, then project to just local contribution. + local_moments += [dot(momzero_interact[n:n+sum(nov)], rot.T)] + n += sum(nov) + + # Then construct the RPA coupling matrix A-B, given by the diagonal matrix of energy differences. + no = np.array(sum(emb.mf.mo_occ.T > 0)) + norb = np.array(emb.mo_coeff).shape[1] + nv = norb - no + + def get_eps_singlespin(no_, nv_, mo_energy): + eps = np.zeros((no_, nv_)) + eps = eps + mo_energy[no_:] + eps = (eps.T - mo_energy[:no_]).T + eps = eps.reshape(-1) + return eps + eps = np.concatenate([get_eps_singlespin(no[0], nv[0], emb.mf.mo_energy[0]), + get_eps_singlespin(no[1], nv[1], emb.mf.mo_energy[1])]) + + # And use this to perform inversion to calculate interaction in cluster. + seris_ov = [] + for i, (f, rot, mom, (ova, ovb)) in enumerate(zip(fragments, target_rots, local_moments, ovs_active)): + amb = einsum("pn,qn,n->pq", rot, rot, eps) # O(N^2 N_clus^4) + # Everything from here on is independent of system size, scaling at most as O(N_clus^6) + # (arrays have side length equal to number of cluster single-particle excitations). + mominv = np.linalg.inv(mom) + apb = dot(mominv, amb, mominv) + + # This is the renormalised coulomb kernel in the cluster. + # Note that this is only defined in the particle-hole space, but has the same 8-fold symmetry + # as the (assumed real) coulomb interaction. + kc = 0.5 * (apb - amb) + # Now need to strip out spin components of the renormalised interaction, and change to 4 orbital + # indices. + no = f.cluster.nocc_active + nv = f.cluster.nvir_active + kcaa = kc[:ova, :ova].reshape((no[0], nv[0], no[0], nv[0])) + kcab = kc[:ova, ova:].reshape((no[0], nv[0], no[1], nv[1])) + kcbb = kc[ova:, ova:].reshape((no[1], nv[1], no[1], nv[1])) + + if kcaa.shape == kcbb.shape: + # This is not that meaningful, since the alpha and beta basis themselves may be different: + log.info("Screened interations in %s: spin-symmetry= %.3e spin-dependence= %.3e", + f.name, abs(kcaa-kcbb).max(), abs((kcaa+kcbb)/2-kcab).max()) + kc = (kcaa, kcab, kcbb) + f._seris_ov = kc + seris_ov.append(kc) + + return seris_ov, erpa
+ +
[docs]def get_screened_eris_full(eris, seris_ov, copy=True, log=None): + """Build full array of screened ERIs, given the bare ERIs and screening.""" + + def replace_ov(full, ov, spins): + out = full.copy() if copy else full + no1, no2 = ov.shape[0], ov.shape[2] + o1, v1 = np.s_[:no1], np.s_[no1:] + o2, v2 = np.s_[:no2], np.s_[no2:] + out[o1,v1,o2,v2] = ov + out[v1,o1,o2,v2] = ov.transpose([1, 0, 2, 3]) + out[o1,v1,v2,o2] = ov.transpose([0, 1, 3, 2]) + out[v1,o1,v2,o2] = ov.transpose([1, 0, 3, 2]) + if log: + maxidx = np.unravel_index(np.argmax(abs(full-out)), full.shape) + log.info("Maximally screened element of W(%2s|%2s): V= %.3e -> W= %.3e (delta= %.3e)", + 2*spins[0], 2*spins[1], full[maxidx], out[maxidx], out[maxidx]-full[maxidx]) + return out + + seris = (replace_ov(eris[0], seris_ov[0], 'aa'), + replace_ov(eris[1], seris_ov[1], 'ab'), + replace_ov(eris[2], seris_ov[2], 'bb')) + return seris
+ +
[docs]def get_screened_eris_ccsd(eris, seris_ov, add_restore_bare=True, log=None): + + if add_restore_bare: + gaa = eris.ovov[:] + gab = eris.ovOV[:] + gbb = eris.OVOV[:] + + saa, sab, sbb = seris_ov + # Alpha-alpha + eris.ovov = saa + eris.ovvo = saa.transpose([0,1,3,2]) + # Alpha-beta + eris.ovOV = sab + eris.ovVO = sab.transpose([0,1,3,2]) + # Beta-beta + eris.OVOV = sbb + eris.OVVO = sbb.transpose([0,1,3,2]) + # Beta-alpha + eris.OVvo = sab.transpose([2,3,1,0]) + + # Add restore_bare function to remove screening later on + if add_restore_bare: + def get_bare(eris): + return (gaa, gab, gbb) + def restore_bare(eris): + eris = get_screened_eris_ccsd(eris, eris.get_bare(), add_restore_bare=False) + del eris.get_bare, eris.restore_bare + return eris + + eris.get_bare = get_bare.__get__(eris) + eris.restore_bare = restore_bare.__get__(eris) + + return eris
+ +def _get_target_rot(r_active_occs, r_active_virs): + """Given the definitions of our cluster spaces in terms of rotations of the occupied and virtual + orbitals, define the equivalent rotation of the full-system particle-hole excitation space. + + Parameters + ---------- + mf : pyscf.scf.SCF + PySCF mean-field object. + fragments : list of vayesta.qemb.Fragment subclasses + List of fragments for the calculation, used to define local interaction spaces. + + Returns + ------- + target_rots : list of np.array + Rotations of particle-hole excitation space defining clusters. + ovs_active : list of int + Total number of local particle-hole excitations for each cluster. + """ + + def get_target_rot_spat(ro, rv): + """ + Parameters + ---------- + ro : list of tuples of np.array + List of occupied orbital rotations defining clusters, with separate spin channels. + rv : list of tuples of np.array + List of virtual orbital rotations defining clusters, with separate spin channels. + + Returns + ------- + rot : np.array + Rotation of system particle-hole excitation space into cluster particle-hole excitation space. + """ + no = ro.shape[1] + nv = rv.shape[1] + ov_active = no * nv + rot = einsum("iJ,aB->JBia", ro, rv).reshape((ov_active, -1)) + return rot, ov_active + + nfrag = len(r_active_occs) + assert(nfrag == len(r_active_virs)) + ovs_active = np.full((nfrag, 2), fill_value=0) + + target_rots = [] + + for i, (r_o, r_v) in enumerate(zip(r_active_occs, r_active_virs)): + + arot, ova = get_target_rot_spat(r_o[0], r_v[0]) + brot, ovb = get_target_rot_spat(r_o[1], r_v[1]) + + spinorb_active_rot = scipy.linalg.block_diag(arot, brot) + target_rots += [spinorb_active_rot] + ovs_active[i] = np.array([ova, ovb]) + + return target_rots, ovs_active +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/qemb/ufragment.html b/_modules/vayesta/core/qemb/ufragment.html new file mode 100644 index 000000000..18616d38a --- /dev/null +++ b/_modules/vayesta/core/qemb/ufragment.html @@ -0,0 +1,345 @@ + + + + + + vayesta.core.qemb.ufragment — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.qemb.ufragment

+
+import numpy as np
+
+from vayesta.core.util import dot, einsum, energy_string, log_time, time_string, timer, with_doc
+from vayesta.core import spinalg
+from vayesta.core.qemb.fragment import Fragment
+
+
+
[docs]class UFragment(Fragment): + +
[docs] def log_info(self): + # Some output + fmt = ' > %-24s ' + self.log.info(fmt+'%d , %d', "Fragment orbitals:", *self.n_frag) + self.log.info(fmt+'%f', "Symmetry factor:", self.sym_factor) + self.log.info(fmt+'%.10f , %.10f', "Number of electrons:", *self.nelectron) + if self.atoms is not None: + self.log.info(fmt+'%r', "Associated atoms:", self.atoms) + if self.aos is not None: + self.log.info(fmt+'%r', "Associated AOs:", self.aos)
+ + @property + def n_frag(self): + """Number of fragment orbitals.""" + return (self.c_frag[0].shape[-1], + self.c_frag[1].shape[-1]) + + @property + def nelectron(self): + """Number of mean-field electrons.""" + ovlp = self.base.get_ovlp() + dm = self.mf.make_rdm1() + ne = [] + for s in range(2): + sc = np.dot(ovlp, self.c_frag[s]) + ne.append(einsum('ai,ab,bi->', sc, dm[s], sc)) + return tuple(ne) + +
[docs] def get_mo_occupation(self, *mo_coeff, dm1=None, **kwargs): + """Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals. + + Parameters + ---------- + mo_coeff : ndarray, shape(N, M) + Orbital coefficients. + + Returns + ------- + occ : ndarray, shape(M) + Occupation numbers of orbitals. + """ + mo_coeff = spinalg.hstack_matrices(*mo_coeff) + if dm1 is None: dm1 = self.mf.make_rdm1() + results = [] + for s, spin in enumerate(('alpha', 'beta')): + results.append(super().get_mo_occupation(mo_coeff[s], dm1=dm1[s], **kwargs)) + return results
+ +
[docs] def canonicalize_mo(self, *mo_coeff, fock=None, **kwargs): + """Diagonalize Fock matrix within subspace. + + Parameters + ---------- + *mo_coeff : ndarrays + Orbital coefficients. + eigenvalues : ndarray + Return MO energies of canonicalized orbitals. + + Returns + ------- + mo_canon : ndarray + Canonicalized orbital coefficients. + rot : ndarray + Rotation matrix: np.dot(mo_coeff, rot) = mo_canon. + """ + if fock is None: fock = self.base.get_fock() + mo_coeff = spinalg.hstack_matrices(*mo_coeff) + results = [] + for s, spin in enumerate(('alpha', 'beta')): + results.append(super().canonicalize_mo(mo_coeff[s], fock=fock[s], **kwargs)) + return tuple(zip(*results))
+ +
[docs] def diagonalize_cluster_dm(self, *mo_coeff, dm1=None, norm=1, **kwargs): + """Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals. + + Parameters + ---------- + *mo_coeff : ndarrays + Orbital coefficients. + tol : float, optional + If set, check that all eigenvalues of the cluster DM are close + to 0 or 1, with the tolerance given by tol. Default= 1e-4. + + Returns + ------- + c_cluster_occ : ndarray + Occupied cluster orbitals. + c_cluster_vir : ndarray + Virtual cluster orbitals. + """ + mo_coeff = spinalg.hstack_matrices(*mo_coeff) + if dm1 is None: dm1 = self.mf.make_rdm1() + results = [] + for s, spin in enumerate(('alpha', 'beta')): + res_s = super().diagonalize_cluster_dm(mo_coeff[s], dm1=dm1[s], norm=norm, **kwargs) + results.append(res_s) + return tuple(zip(*results))
+ + # Amplitude projection + # -------------------- + +
[docs] def get_fragment_projector(self, coeff, c_proj=None, **kwargs): + if c_proj is None: c_proj = self.c_proj + projectors = [] + for s in range(2): + projectors.append(super().get_fragment_projector(coeff[s], c_proj=c_proj[s], **kwargs)) + return tuple(projectors)
+ +
[docs] def get_fragment_mf_energy(self): + """Calculate the part of the mean-field energy associated with the fragment. + + Does not include nuclear-nuclear repulsion! + """ + pa, pb = self.get_fragment_projector(self.base.mo_coeff) + hveff = (dot(pa, self.base.mo_coeff[0].T, self.base.get_hcore()+self.base.get_veff()[0]/2, self.base.mo_coeff[0]), + dot(pb, self.base.mo_coeff[1].T, self.base.get_hcore()+self.base.get_veff()[1]/2, self.base.mo_coeff[1])) + occ = ((self.base.mo_occ[0] > 0), (self.base.mo_occ[1] > 0)) + e_mf = np.sum(np.diag(hveff[0])[occ[0]]) + np.sum(np.diag(hveff[1])[occ[1]]) + return e_mf
+ +
[docs] def get_fragment_mo_energy(self, c_active=None, fock=None): + """Returns approximate MO energies, using the the diagonal of the Fock matrix. + + Parameters + ---------- + c_active: array, optional + fock: array, optional + """ + if c_active is None: c_active = self.cluster.c_active + if fock is None: fock = self.base.get_fock() + mo_energy_a = einsum('ai,ab,bi->i', c_active[0], fock[0], c_active[0]) + mo_energy_b = einsum('ai,ab,bi->i', c_active[1], fock[1], c_active[1]) + return (mo_energy_a, mo_energy_b)
+ +
[docs] @with_doc(Fragment.get_fragment_dmet_energy) + def get_fragment_dmet_energy(self, dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True): + if dm1 is None: dm1 = self.results.dm1 + if dm1 is None: raise RuntimeError("DM1 not found for %s" % self) + c_act = self.cluster.c_active + t0 = timer() + if hamil is None: + hamil = self.hamil + gaa, gab, gbb = hamil.get_eris_bare() + + if dm2 is None: + dm2 = self.results.wf.make_rdm2(with_dm1=not part_cumulant, approx_cumulant=approx_cumulant) + dm1a, dm1b = dm1 + dm2aa, dm2ab, dm2bb = dm2 + + # Get effective core potential + if h1e_eff is None: + if part_cumulant: + h1e_eff = self.base.get_hcore_for_energy() + h1e_eff = (dot(c_act[0].T, h1e_eff, c_act[0]), + dot(c_act[1].T, h1e_eff, c_act[1])) + else: + # Use the original Hcore (without chemical potential modifications), but updated mf-potential! + h1e_eff = self.base.get_hcore_for_energy() + self.base.get_veff_for_energy(with_exxdiv=False)/2 + h1e_eff = (dot(c_act[0].T, h1e_eff[0], c_act[0]), + dot(c_act[1].T, h1e_eff[1], c_act[1])) + oa = np.s_[:self.cluster.nocc_active[0]] + ob = np.s_[:self.cluster.nocc_active[1]] + va = (einsum('iipq->pq', gaa[oa,oa,:,:]) + einsum('pqii->pq', gab[:,:,ob,ob]) + - einsum('ipqi->pq', gaa[oa,:,:,oa]))/2 + vb = (einsum('iipq->pq', gbb[ob,ob,:,:]) + einsum('iipq->pq', gab[oa,oa,:,:]) + - einsum('ipqi->pq', gbb[ob,:,:,ob]))/2 + h1e_eff = (h1e_eff[0]-va, h1e_eff[1]-vb) + + p_frag = self.get_fragment_projector(c_act) + # Check number of electrons + nea = einsum('ix,ij,jx->', p_frag[0], dm1a, p_frag[0]) + neb = einsum('ix,ij,jx->', p_frag[1], dm1b, p_frag[1]) + self.log.info("Number of local electrons for DMET energy: %.8f %.8f", nea, neb) + + # Evaluate energy + e1b = (einsum('xj,xi,ij->', h1e_eff[0], p_frag[0], dm1a) + + einsum('xj,xi,ij->', h1e_eff[1], p_frag[1], dm1b)) + e2b = (einsum('xjkl,xi,ijkl->', gaa, p_frag[0], dm2aa) + + einsum('xjkl,xi,ijkl->', gbb, p_frag[1], dm2bb) + + einsum('xjkl,xi,ijkl->', gab, p_frag[0], dm2ab) + + einsum('ijxl,xk,ijkl->', gab, p_frag[1], dm2ab))/2 + self.log.debugv("E(DMET): E(1)= %s E(2)= %s", energy_string(e1b), energy_string(e2b)) + e_dmet = self.opts.sym_factor*(e1b + e2b) + self.log.debug("Fragment E(DMET)= %+16.8f Ha", e_dmet) + self.log.timing("Time for DMET energy: %s", time_string(timer()-t0)) + return e_dmet
+ + # --- Symmetry + # ============ + +
[docs] def get_symmetry_error(self, frag, dm1=None): + """Get translational symmetry error between two fragments.""" + if dm1 is None: + dm1 = self.mf.make_rdm1() + dma, dmb = dm1 + ovlp = self.base.get_ovlp() + # This fragment (x) + cxa, cxb = spinalg.hstack_matrices(self.c_frag, self.c_env) + dmxa = dot(cxa.T, ovlp, dma, ovlp, cxa) + dmxb = dot(cxb.T, ovlp, dmb, ovlp, cxb) + # Other fragment (y) + if frag.c_env is None: + cy_env = frag.sym_op(self.c_env) + else: + cy_env = frag.c_env + cya, cyb = spinalg.hstack_matrices(frag.c_frag, cy_env) + dmya = dot(cya.T, ovlp, dma, ovlp, cya) + dmyb = dot(cyb.T, ovlp, dmb, ovlp, cyb) + charge_err = abs(dmxa+dmxb-dmya-dmyb).max() + spin_err = abs(dmxa-dmxb-dmya+dmyb).max() + return charge_err, spin_err
+ + # --- Overlap matrices + # -------------------- + + def _csc_dot(self, c1, c2, ovlp=True, transpose_left=True, transpose_right=False): + if transpose_left: + c1 = (c1[0].T, c1[1].T) + if transpose_right: + c2 = (c2[0].T, c2[1].T) + if ovlp is True: + ovlp = self.base.get_ovlp() + if ovlp is None: + outa = dot(c1[0], c2[0]) + outb = dot(c1[1], c2[1]) + return (outa, outb) + outa = dot(c1[0], ovlp, c2[0]) + outb = dot(c1[1], ovlp, c2[1]) + return (outa, outb)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/qemb/uqemb.html b/_modules/vayesta/core/qemb/uqemb.html new file mode 100644 index 000000000..a084d8679 --- /dev/null +++ b/_modules/vayesta/core/qemb/uqemb.html @@ -0,0 +1,378 @@ + + + + + + vayesta.core.qemb.uqemb — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.qemb.uqemb

+import numpy as np
+
+import pyscf
+import pyscf.mp
+import pyscf.ci
+import pyscf.cc
+
+from vayesta.core.qemb.qemb import Embedding
+from vayesta.core.qemb.ufragment import UFragment
+
+from vayesta.core.ao2mo.postscf_ao2mo import postscf_ao2mo
+from vayesta.core.util import dot, einsum, log_method, with_doc
+from vayesta.core import spinalg
+from vayesta.core.ao2mo import kao2gmo_cderi
+from vayesta.core.ao2mo import postscf_kao2gmo_uhf
+from vayesta.mpi import mpi
+from vayesta.core.qemb.corrfunc import get_corrfunc_unrestricted
+
+from vayesta.core.qemb.rdm import make_rdm1_demo_uhf
+from vayesta.core.qemb.rdm import make_rdm2_demo_uhf
+
+
[docs]class UEmbedding(Embedding): + """Spin unrestricted quantum embedding.""" + + # Shadow this in inherited methods: + Fragment = UFragment + + # Deprecated: + is_rhf = False + is_uhf = True + # Use instead: + spinsym = 'unrestricted' + + #def get_init_veff(self): + # if self.opts.recalc_vhf: + # self.log.debug("Recalculating HF potential from MF object.") + # veff = self.mf.get_veff() + # else: + # self.log.debug("Determining HF potential from MO energies and coefficients.") + # cs = einsum('...ai,ab->...ib', self.mo_coeff, self.get_ovlp()) + # fock = einsum('...ia,...i,...ib->ab', cs, self.mo_energy, cs) + # veff = (fock - self.get_hcore()) + # e_hf = self.mf.energy_tot(vhf=veff) + # return veff, e_hf + + #def _mpi_bcast_mf(self, mf): + # """Use mo_energy and mo_coeff from master MPI rank only.""" + # # Check if all MPI ranks have the same mean-field MOs + # #mo_energy = mpi.world.gather(mf.mo_energy) + # #if mpi.is_master: + # # moerra = np.max([abs(mo_energy[i][0] - mo_energy[0][0]).max() for i in range(len(mpi))]) + # # moerrb = np.max([abs(mo_energy[i][1] - mo_energy[0][1]).max() for i in range(len(mpi))]) + # # moerr = max(moerra, moerrb) + # # if moerr > 1e-6: + # # self.log.warning("Large difference of MO energies between MPI ranks= %.2e !", moerr) + # # else: + # # self.log.debugv("Largest difference of MO energies between MPI ranks= %.2e", moerr) + # # Use MOs of master process + # mf.mo_energy = mpi.world.bcast(mf.mo_energy, root=0) + # mf.mo_coeff = mpi.world.bcast(mf.mo_coeff, root=0) + + @property + def nmo(self): + """Total number of molecular orbitals (MOs).""" + return (self.mo_coeff[0].shape[-1], + self.mo_coeff[1].shape[-1]) + + @property + def nocc(self): + """Number of occupied MOs.""" + return (np.count_nonzero(self.mo_occ[0] > 0), + np.count_nonzero(self.mo_occ[1] > 0)) + + @property + def nvir(self): + """Number of virtual MOs.""" + return (np.count_nonzero(self.mo_occ[0] == 0), + np.count_nonzero(self.mo_occ[1] == 0)) + + @property + def mo_coeff_occ(self): + """Occupied MO coefficients.""" + return (self.mo_coeff[0][:,:self.nocc[0]], + self.mo_coeff[1][:,:self.nocc[1]]) + + @property + def mo_coeff_vir(self): + """Virtual MO coefficients.""" + return (self.mo_coeff[0][:,self.nocc[0]:], + self.mo_coeff[1][:,self.nocc[1]:]) + + def _check_orthonormal(self, *mo_coeff, mo_name='', **kwargs): + mo_coeff = spinalg.hstack_matrices(*mo_coeff) + results = [] + for s, spin in enumerate(('alpha', ' beta')): + name_s = '-'.join([spin, mo_name]) + res_s = super()._check_orthonormal(mo_coeff[s], mo_name=name_s, **kwargs) + results.append(res_s) + return tuple(zip(*results)) + +
[docs] def get_exxdiv(self): + """Get divergent exact-exchange (exxdiv) energy correction and potential. + + Returns + ------- + e_exxdiv: float + Divergent exact-exchange energy correction per unit cell. + v_exxdiv: array + Divergent exact-exchange potential correction in AO basis. + """ + if not self.has_exxdiv: return 0, None + ovlp = self.get_ovlp() + sca = np.dot(ovlp, self.mo_coeff[0][:,:self.nocc[0]]) + scb = np.dot(ovlp, self.mo_coeff[1][:,:self.nocc[1]]) + nocc = (self.nocc[0] + self.nocc[1])/2 + e_exxdiv = -self.madelung * nocc / self.ncells + v_exxdiv_a = -self.madelung * np.dot(sca, sca.T) + v_exxdiv_b = -self.madelung * np.dot(scb, scb.T) + self.log.debug("Divergent exact-exchange (exxdiv) correction= %+16.8f Ha", e_exxdiv) + return e_exxdiv, (v_exxdiv_a, v_exxdiv_b)
+ +
[docs] @log_method() + def get_eris_array_uhf(self, mo_coeff, mo_coeff2=None, compact=False): + """Get electron-repulsion integrals in MO basis as a NumPy array. + + Parameters + ---------- + mo_coeff: tuple(2) of (n(AO), n(MO)) array + MO coefficients. + + Returns + ------- + eris: + Electron-repulsion integrals in MO basis. + """ + if mo_coeff2 is None: + mo_coeff2 = mo_coeff + moa, mob = mo_coeff + mo2a, mo2b = mo_coeff2 + # PBC with k-points: + if self.kdf is not None: + if compact: + raise NotImplementedError + cderia, cderia_neg = kao2gmo_cderi(self.kdf, (moa, mo2a)) + cderib, cderib_neg = kao2gmo_cderi(self.kdf, (mob, mo2b)) + eris_aa = einsum('Lij,Lkl->ijkl', cderia.conj(), cderia) + eris_ab = einsum('Lij,Lkl->ijkl', cderia.conj(), cderib) + eris_bb = einsum('Lij,Lkl->ijkl', cderib.conj(), cderib) + if cderia_neg is not None: + eris_aa -= einsum('Lij,Lkl->ijkl', cderia_neg.conj(), cderia_neg) + eris_ab -= einsum('Lij,Lkl->ijkl', cderia_neg.conj(), cderib_neg) + eris_bb -= einsum('Lij,Lkl->ijkl', cderib_neg.conj(), cderib_neg) + return (eris_aa, eris_ab, eris_bb) + + eris_aa = super().get_eris_array((moa, mo2a, moa, mo2a), compact=compact) + eris_ab = super().get_eris_array((moa, mo2a, mob, mo2b), compact=compact) + eris_bb = super().get_eris_array((mob, mo2b, mob, mo2b), compact=compact) + return (eris_aa, eris_ab, eris_bb)
+ +
[docs] @log_method() + def get_eris_object(self, postscf, fock=None): + """Get ERIs for post-SCF methods. + + For folded PBC calculations, this folds the MO back into k-space + and contracts with the k-space three-center integrals.. + + Parameters + ---------- + postscf: one of the following post-SCF methods: MP2, CCSD, RCCSD, DFCCSD + Post-SCF method with attribute mo_coeff set. + + Returns + ------- + eris: _ChemistsERIs + ERIs which can be used for the respective post-SCF method. + """ + if fock is None: + if isinstance(postscf, pyscf.mp.mp2.MP2): + fock = self.get_fock() + elif isinstance(postscf, (pyscf.ci.cisd.CISD, pyscf.cc.ccsd.CCSD)): + fock = self.get_fock(with_exxdiv=False) + else: + raise ValueError("Unknown post-HF method: %r", type(postscf)) + # For MO energies, always use get_fock(): + act = postscf.get_frozen_mask() + mo_act = (postscf.mo_coeff[0][:,act[0]], postscf.mo_coeff[1][:,act[1]]) + mo_energy = (einsum('ai,ab,bi->i', mo_act[0], self.get_fock()[0], mo_act[0]), + einsum('ai,ab,bi->i', mo_act[1], self.get_fock()[1], mo_act[1])) + e_hf = self.mf.e_tot + + # 1) Fold MOs into k-point sampled primitive cell, to perform efficient AO->MO transformation: + if self.kdf is not None: + eris = postscf_kao2gmo_uhf(postscf, self.kdf, fock=fock, mo_energy=mo_energy, e_hf=e_hf) + return eris + # 2) Regular AO->MO transformation + eris = postscf_ao2mo(postscf, fock=fock, mo_energy=mo_energy, e_hf=e_hf) + return eris
+ +
[docs] def update_mf(self, mo_coeff, mo_energy=None, veff=None): + """Update underlying mean-field object.""" + # Chech orthonormal MOs + if not (np.allclose(dot(mo_coeff[0].T, self.get_ovlp(), mo_coeff[0]) - np.eye(mo_coeff[0].shape[-1]), 0) + and np.allclose(dot(mo_coeff[1].T, self.get_ovlp(), mo_coeff[1]) - np.eye(mo_coeff[1].shape[-1]), 0)): + raise ValueError("MO coefficients not orthonormal!") + self.mf.mo_coeff = mo_coeff + dm = self.mf.make_rdm1(mo_coeff=mo_coeff) + if veff is None: + veff = self.mf.get_veff(dm=dm) + self.set_veff(veff) + if mo_energy is None: + # Use diagonal of Fock matrix as MO energies + fock = self.get_fock() + mo_energy = (einsum('ai,ab,bi->i', mo_coeff[0], fock[0], mo_coeff[0]), + einsum('ai,ab,bi->i', mo_coeff[1], fock[1], mo_coeff[1])) + self.mf.mo_energy = mo_energy + self.mf.e_tot = self.mf.energy_tot(dm=dm, h1e=self.get_hcore(), vhf=veff)
+ +
[docs] def check_fragment_symmetry(self, dm1, charge_tol=1e-6, spin_tol=1e-6): + frags = self.get_symmetry_child_fragments(include_parents=True) + for group in frags: + parent, children = group[0], group[1:] + for child in children: + charge_err, spin_err = parent.get_tsymmetry_error(child, dm1=dm1) + if (charge_err > charge_tol) or (spin_err > spin_tol): + raise RuntimeError("%s and %s not symmetric: charge error= %.3e spin error= %.3e !" + % (parent.name, child.name, charge_err, spin_err)) + self.log.debugv("Symmetry between %s and %s: charge error= %.3e spin error= %.3e", parent.name, child.name, charge_err, spin_err)
+ + def _check_fragment_nelectron(self): + nelec_frags = (sum([f.sym_factor*f.nelectron[0] for f in self.loop()]), + sum([f.sym_factor*f.nelectron[1] for f in self.loop()])) + self.log.info("Total number of mean-field electrons over all fragments= %.8f , %.8f", *nelec_frags) + if abs(nelec_frags[0] - np.rint(nelec_frags[0])) > 1e-4 or abs(nelec_frags[1] - np.rint(nelec_frags[1])) > 1e-4: + self.log.warning("Number of electrons not integer!") + return nelec_frags + + # --- Other + # --------- + +
[docs] @log_method() + @with_doc(make_rdm1_demo_uhf) + def make_rdm1_demo(self, *args, **kwargs): + return make_rdm1_demo_uhf(self, *args, **kwargs)
+ +
[docs] @log_method() + @with_doc(make_rdm2_demo_uhf) + def make_rdm2_demo(self, *args, **kwargs): + return make_rdm2_demo_uhf(self, *args, **kwargs)
+ +
[docs] def pop_analysis(self, dm1, mo_coeff=None, local_orbitals='lowdin', write=True, minao='auto', mpi_rank=0, **kwargs): + # IAO / PAOs are spin dependent - we need to build them here: + if isinstance(local_orbitals, str) and local_orbitals.lower() == 'iao+pao': + local_orbitals = self.get_lo_coeff('iao+pao', minao=minao) + pop = [] + for s, spin in enumerate(('alpha', 'beta')): + mo = (mo_coeff[s] if mo_coeff is not None else None) + lo = (local_orbitals if isinstance(local_orbitals, str) else local_orbitals[s]) + pop.append(super().pop_analysis(dm1[s], mo_coeff=mo, local_orbitals=lo, write=False, **kwargs)) + if write and (mpi.rank == mpi_rank): + self.write_population(pop, **kwargs) + return pop
+ +
[docs] def get_atomic_charges(self, pop): + charges = np.zeros(self.mol.natm) + spins = np.zeros(self.mol.natm) + for i, label in enumerate(self.mol.ao_labels(fmt=None)): + charges[label[0]] -= (pop[0][i] + pop[1][i]) + spins[label[0]] += (pop[0][i] - pop[1][i]) + charges += self.mol.atom_charges() + return charges, spins
+ + get_corrfunc = log_method()(get_corrfunc_unrestricted)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/scmf.html b/_modules/vayesta/core/scmf.html new file mode 100644 index 000000000..8564290a5 --- /dev/null +++ b/_modules/vayesta/core/scmf.html @@ -0,0 +1,121 @@ + + + + + + vayesta.core.scmf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.scmf

+from vayesta.core.scmf.pdmet import PDMET_RHF
+from vayesta.core.scmf.pdmet import PDMET_UHF
+from vayesta.core.scmf.brueckner import Brueckner_RHF
+from vayesta.core.scmf.brueckner import Brueckner_UHF
+
+
+
[docs]def PDMET(emb, *args, **kwargs): + if emb.is_rhf: + return PDMET_RHF(emb, *args, **kwargs) + return PDMET_UHF(emb, *args, **kwargs)
+ +
[docs]def Brueckner(emb, *args, **kwargs): + if emb.is_rhf: + return Brueckner_RHF(emb, *args, **kwargs) + return Brueckner_UHF(emb, *args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/scmf/brueckner.html b/_modules/vayesta/core/scmf/brueckner.html new file mode 100644 index 000000000..f8344d410 --- /dev/null +++ b/_modules/vayesta/core/scmf/brueckner.html @@ -0,0 +1,251 @@ + + + + + + vayesta.core.scmf.brueckner — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.scmf.brueckner

+import numpy as np
+import scipy
+import scipy.linalg
+#from vayesta.misc import PCDIIS
+from vayesta.core.util import dot, fix_orbital_sign
+from vayesta.core.scmf.scmf import SCMF
+
+
+
[docs]class Brueckner_RHF(SCMF): + + name = "Brueckner" + + def __init__(self, *args, diis_obj='dm1', **kwargs): + super().__init__(*args, **kwargs) + self.diis_obj = diis_obj.lower() + + #def get_diis(self): + # """PC-DIIS""" + # nocc = np.count_nonzero(self.mf.mo_occ > 0) + # diis = PCDIIS(self._mo_orig[:,:nocc].copy()) + # return diis + +
[docs] def get_t1(self): + """Get global T1 amplitudes from quantum embedding calculation.""" + return self.emb.get_global_t1()
+ +
[docs] def update_mo_coeff(self, mf, diis=None): + """Get new MO coefficients.""" + t1 = self.get_t1() + self.log.debug("Norm of T1: L(2)= %.3e L(inf)= %.3e", np.linalg.norm(t1), abs(t1).max()) + nocc, nvir = t1.shape + nmo = (nocc + nvir) + occ, vir = np.s_[:nocc], np.s_[nocc:] + ovlp = self.emb.get_ovlp() + # Perform DIIS in original MO basis, then transform back: + if diis and self.diis_obj == 't1': + ro = dot(mf.mo_coeff[:,occ].T, ovlp, self._mo_orig) + rv = dot(mf.mo_coeff[:,vir].T, ovlp, self._mo_orig) + t1 = dot(ro.T, t1, rv) + t1 = diis.update(t1, xerr=t1) + ## Transform back + t1 = dot(ro, t1, rv.T) + + mo_change = (1-self.damping)*np.dot(mf.mo_coeff[:,vir], t1.T) + self.log.debug("Change of occupied Brueckner orbitals= %.3e", np.linalg.norm(mo_change)) + bmo_occ = (mf.mo_coeff[:,occ] + mo_change) + + # Orthogonalize occupied orbitals + # If there was no AO-overlap matrix: bmo_occ = np.linalg.qr(bmo_occ)[0] + dm_occ = np.dot(bmo_occ, bmo_occ.T) + e, v = scipy.linalg.eigh(dm_occ, b=ovlp, type=2) + bmo_occ = v[:,-nocc:] + # DIIS of occupied density + if diis and self.diis_obj == 'dm1': + dm_occ = np.dot(bmo_occ, bmo_occ.T) + r = np.dot(ovlp, self._mo_orig) + dm_occ = dot(r.T, dm_occ, r) + dm_occ = diis.update(dm_occ) + e, v = np.linalg.eigh(dm_occ) + bmo_occ = np.dot(self._mo_orig, v)[:,-nocc:] + + # Virtual space + dm_vir = (np.linalg.inv(ovlp) - np.dot(bmo_occ, bmo_occ.T)) + e, v = scipy.linalg.eigh(dm_vir, b=ovlp, type=2) + bmo_vir = v[:,-nvir:] + + assert (bmo_occ.shape[-1] == nocc) and (bmo_vir.shape[-1] == nvir) + mo_coeff = np.hstack((bmo_occ, bmo_vir)) + mo_coeff = fix_orbital_sign(mo_coeff)[0] + return mo_coeff
+ +
[docs]class Brueckner_UHF(Brueckner_RHF): + +
[docs] def update_mo_coeff(self, mf, diis=None): + t1a, t1b = self.get_t1() + self.log.debug("Norm of alpha/beta-T1 L(2)= %.3e %.3e L(inf)= %.3e %.3e", + np.linalg.norm(t1a), np.linalg.norm(t1b), abs(t1a).max(), abs(t1b).max()) + nocca, nvira = t1a.shape + noccb, nvirb = t1b.shape + nmoa, nmob = nocca + nvira, noccb + nvirb + occa, vira = np.s_[:nocca], np.s_[nocca:] + occb, virb = np.s_[:noccb], np.s_[noccb:] + ovlp = self.emb.get_ovlp() + + # Perform DIIS in original MO basis, then transform back: + if diis and self.diis_obj == 't1': + roa = dot(mf.mo_coeff[0][:,occa].T, ovlp, self._mo_orig[0]) + rob = dot(mf.mo_coeff[1][:,occb].T, ovlp, self._mo_orig[1]) + rva = dot(mf.mo_coeff[0][:,vira].T, ovlp, self._mo_orig[0]) + rvb = dot(mf.mo_coeff[1][:,virb].T, ovlp, self._mo_orig[1]) + + t1a = dot(roa.T, t1a, rva) + t1b = dot(rob.T, t1b, rvb) + t1a, t1b = diis.update(np.asarry((t1a,t1b)), xerr=np.asarray((t1a,t1b))) + #t1b = diis.update(t1b, xerr=t1b) + ## Transform back + t1a = dot(roa, t1a, rva.T) + t1b = dot(rob, t1b, rvb.T) + + mo_change_a = (1-self.damping)*np.dot(mf.mo_coeff[0][:,vira], t1a.T) + mo_change_b = (1-self.damping)*np.dot(mf.mo_coeff[1][:,virb], t1b.T) + self.log.debug("Change of alpha/beta occupied Brueckner orbitals= %.3e %.3e", + np.linalg.norm(mo_change_a), np.linalg.norm(mo_change_b)) + bmo_occ_a = (mf.mo_coeff[0][:,occa] + mo_change_a) + bmo_occ_b = (mf.mo_coeff[1][:,occb] + mo_change_b) + + # Orthogonalize occupied orbitals + # If there was no AO-overlap matrix: bmo_occ = np.linalg.qr(bmo_occ)[0] + dm_occ_a = np.dot(bmo_occ_a, bmo_occ_a.T) + dm_occ_b = np.dot(bmo_occ_b, bmo_occ_b.T) + ea, va = scipy.linalg.eigh(dm_occ_a, b=ovlp, type=2) + eb, vb = scipy.linalg.eigh(dm_occ_b, b=ovlp, type=2) + bmo_occ_a = va[:,-nocca:] + bmo_occ_b = vb[:,-noccb:] + + # DIIS of occupied density + if diis and self.diis_obj == 'dm1': + dm_occ_a = np.dot(bmo_occ_a, bmo_occ_a.T) + dm_occ_b = np.dot(bmo_occ_b, bmo_occ_b.T) + ra = np.dot(ovlp, self._mo_orig[0]) + rb = np.dot(ovlp, self._mo_orig[1]) + dm_occ_a = dot(ra.T, dm_occ_a, ra) + dm_occ_b = dot(rb.T, dm_occ_b, rb) + #dm_occ_a = diis.update(dm_occ_a) + #dm_occ_b = diis.update(dm_occ_b) + dm_occ_a, dm_occ_b = diis.update(np.asarray((dm_occ_a, dm_occ_b))) + ea, va = np.linalg.eigh(dm_occ_a) + eb, vb = np.linalg.eigh(dm_occ_b) + bmo_occ_a = np.dot(self._mo_orig[0], va)[:,-nocca:] + bmo_occ_b = np.dot(self._mo_orig[1], vb)[:,-noccb:] + + # Virtual space + dm_vir_a = (np.linalg.inv(ovlp) - np.dot(bmo_occ_a, bmo_occ_a.T)) + dm_vir_b = (np.linalg.inv(ovlp) - np.dot(bmo_occ_b, bmo_occ_b.T)) + ea, va = scipy.linalg.eigh(dm_vir_a, b=ovlp, type=2) + eb, vb = scipy.linalg.eigh(dm_vir_b, b=ovlp, type=2) + bmo_vir_a = va[:,-nvira:] + bmo_vir_b = vb[:,-nvirb:] + + assert (bmo_occ_a.shape[-1] == nocca) and (bmo_vir_a.shape[-1] == nvira) + assert (bmo_occ_b.shape[-1] == noccb) and (bmo_vir_b.shape[-1] == nvirb) + mo_coeff_a = np.hstack((bmo_occ_a, bmo_vir_a)) + mo_coeff_b = np.hstack((bmo_occ_b, bmo_vir_b)) + return (mo_coeff_a, mo_coeff_b)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/scmf/pdmet.html b/_modules/vayesta/core/scmf/pdmet.html new file mode 100644 index 000000000..f73c46817 --- /dev/null +++ b/_modules/vayesta/core/scmf/pdmet.html @@ -0,0 +1,213 @@ + + + + + + vayesta.core.scmf.pdmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.scmf.pdmet

+import numpy as np
+from vayesta.core.util import dot, fix_orbital_sign
+from vayesta.core.scmf.scmf import SCMF
+
+
+
[docs]class PDMET_RHF(SCMF): + + name = "p-DMET" + + def __init__(self, *args, dm_type='default', **kwargs): + super().__init__(*args, **kwargs) + self.dm_type = dm_type.lower() + +
[docs] def get_rdm1(self): + """DM1 in MO basis.""" + dm_type = self.dm_type + if dm_type.startswith('default'): + dm1 = self.emb.make_rdm1() + elif dm_type.startswith('demo'): + dm1 = self.emb.make_rdm1_demo() + else: + raise NotImplementedError("dm_type= %r" % dm_type) + # Check electron number + nelec_err = abs(np.trace(dm1) - self.emb.mol.nelectron) + if nelec_err > 1e-5: + self.log.warning("Large electron error in 1DM= %.3e", nelec_err) + return dm1
+ +
[docs] def update_mo_coeff(self, mf, diis=None): + dm1 = self.get_rdm1() + # Transform to original MO basis + r = dot(self.emb.mo_coeff.T, self.emb.get_ovlp(), self._mo_orig) + dm1 = dot(r.T, dm1, r) + if diis is not None: + dm1 = diis.update(dm1) + mo_occ, rot = np.linalg.eigh(dm1) + mo_occ, rot = mo_occ[::-1], rot[:,::-1] + nocc = np.count_nonzero(mf.mo_occ > 0) + if abs(mo_occ[nocc-1] - mo_occ[nocc]) < 1e-8: + self.log.critical("p-DMET MO occupation numbers (occupied):\n%s", mo_occ[:nocc]) + self.log.critical("p-DMET MO occupation numbers (virtual):\n%s", mo_occ[nocc:]) + raise RuntimeError("Degeneracy in MO occupation!") + else: + self.log.debug("p-DMET MO occupation numbers (occupied):\n%s", mo_occ[:nocc]) + self.log.debug("p-DMET MO occupation numbers (virtual):\n%s", mo_occ[nocc:]) + mo_coeff = np.dot(self._mo_orig, rot) + mo_coeff = fix_orbital_sign(mo_coeff)[0] + return mo_coeff
+ + +
[docs]class PDMET_UHF(PDMET_RHF): + +
[docs] def get_rdm1(self): + """DM1 in MO basis.""" + dm_type = self.dm_type + if dm_type.startswith('default'): + dm1 = self.emb.make_rdm1() + elif dm_type.startswith('demo'): + dm1 = self.emb.make_rdm1_demo() + else: + raise NotImplementedError("dm_type= %r" % dm_type) + # Check electron number + nelec_err = abs(np.trace(dm1[0]+dm1[1]) - self.emb.mol.nelectron) + if nelec_err > 1e-5: + self.log.warning("Large electron error in 1DM= %.3e", nelec_err) + # Check spin + spin_err = abs(np.trace(dm1[0]-dm1[1]) - self.emb.mol.spin) + if spin_err > 1e-5: + self.log.warning("Large spin error in 1DM= %.3e", spin_err) + return dm1
+ +
[docs] def update_mo_coeff(self, mf, diis=None): + dma, dmb = self.get_rdm1() + mo_coeff = self.emb.mo_coeff + ovlp = self.emb.get_ovlp() + # Transform DM to original MO basis + ra = dot(mo_coeff[0].T, ovlp, self._mo_orig[0]) + rb = dot(mo_coeff[1].T, ovlp, self._mo_orig[1]) + dma = dot(ra.T, dma, ra) + dmb = dot(rb.T, dmb, rb) + if diis is not None: + assert dma.shape == dmb.shape + dma, dmb = diis.update(np.asarray((dma, dmb))) + mo_occ_a, rot_a = np.linalg.eigh(dma) + mo_occ_b, rot_b = np.linalg.eigh(dmb) + mo_occ_a, rot_a = mo_occ_a[::-1], rot_a[:,::-1] + mo_occ_b, rot_b = mo_occ_b[::-1], rot_b[:,::-1] + nocc_a = np.count_nonzero(mf.mo_occ[0] > 0) + nocc_b = np.count_nonzero(mf.mo_occ[1] > 0) + + def log_occupation(logger): + logger("p-DMET MO occupation numbers (alpha-occupied):\n%s", mo_occ_a[:nocc_a]) + logger("p-DMET MO occupation numbers (beta-occupied):\n%s", mo_occ_b[:nocc_b]) + logger("p-DMET MO occupation numbers (alpha-virtual):\n%s", mo_occ_a[nocc_a:]) + logger("p-DMET MO occupation numbers (beta-virtual):\n%s", mo_occ_b[nocc_b:]) + if min(abs(mo_occ_a[nocc_a-1] - mo_occ_a[nocc_a]), + abs(mo_occ_b[nocc_b-1] - mo_occ_b[nocc_b])) < 1e-8: + log_occupation(self.log.critical) + raise RuntimeError("Degeneracy in MO occupation!") + log_occupation(self.log.debugv) + + mo_coeff_a = np.dot(self._mo_orig[0], rot_a) + mo_coeff_b = np.dot(self._mo_orig[1], rot_b) + mo_coeff_a = fix_orbital_sign(mo_coeff_a)[0] + mo_coeff_b = fix_orbital_sign(mo_coeff_b)[0] + return (mo_coeff_a, mo_coeff_b)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/scmf/scmf.html b/_modules/vayesta/core/scmf/scmf.html new file mode 100644 index 000000000..53cf74e45 --- /dev/null +++ b/_modules/vayesta/core/scmf/scmf.html @@ -0,0 +1,230 @@ + + + + + + vayesta.core.scmf.scmf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.scmf.scmf

+"""Self-consistent mean-field decorators"""
+
+import numpy as np
+import pyscf
+import pyscf.lib
+from vayesta.core.util import AbstractMethodError, SymmetryError, energy_string
+
+
+
[docs]class SCMF: + + name = "SCMF" + + def __init__(self, emb, etol=1e-8, dtol=1e-6, maxiter=100, damping=0.0, diis=True): + self.emb = emb + self.etol = (etol if etol is not None else np.inf) + self.dtol = (dtol if dtol is not None else np.inf) + self.maxiter = maxiter + self.damping = damping + self.diis = diis + self.iteration = 0 + # Save original kernel + self._kernel_orig = self.emb.kernel + # Save original orbitals + self._mo_orig = self.mf.mo_coeff + # Output + self.converged = False + self.energies = [] # Total energy per iteration + + @property + def log(self): + return self.emb.log + + @property + def mf(self): + return self.emb.mf + + @property + def e_tot(self): + return self.energies[-1] + + @property + def e_tot_oneshot(self): + return self.energies[0] + +
[docs] def get_diis(self): + return pyscf.lib.diis.DIIS()
+ + @property + def kernel_orig(self): + """Original kernel of embedding method.""" + return self._kernel_orig + +
[docs] def update_mo_coeff(self, mf, diis=None): + """Get new set of MO coefficients. + + Must be implemented for any SCMF method.""" + raise AbstractMethodError()
+ +
[docs] def check_convergence(self, e_tot, dm1, e_last=None, dm1_last=None, etol=None, dtol=None): + if etol is None: etol = self.etol + if dtol is None: dtol = self.dtol + if e_last is not None: + de = (e_tot - e_last) + # RHF: + if self.emb.is_rhf: + ddm = abs(dm1-dm1_last).max() / 2 + else: + # UHF: + ddm = max(abs(dm1[0]-dm1_last[0]).max(), + abs(dm1[1]-dm1_last[1]).max()) + else: + de = ddm = np.inf + tighten = (1-self.damping) + if (abs(de) < tighten*etol) and (ddm < tighten*dtol): + return True, de, ddm + return False, de, ddm
+ +
[docs] def kernel(self, *args, **kwargs): + diis = (self.get_diis() if self.diis else None) + + e_last = dm1_last = None + for self.iteration in range(1, self.maxiter+1): + + self.log.info("%s iteration %3d", self.name, self.iteration) + self.log.info("%s==============", len(self.name)*"=") + + if self.iteration > 1: + self.emb.reset() + + # Run clusters, save results + res = self.kernel_orig(*args, **kwargs) + e_mf = self.mf.e_tot + e_corr = self.emb.get_e_corr() + e_tot = (e_mf + e_corr) + self.energies.append(e_tot) + + # Update MF + mo_coeff = self.update_mo_coeff(self.mf, diis=diis) + self.emb.update_mf(mo_coeff) + + dm1 = self.mf.make_rdm1() + # Check symmetry + try: + self.emb.check_fragment_symmetry(dm1) + except SymmetryError: + self.log.error("Symmetry check failed in %s", self.name) + self.converged = False + break + + # Check convergence + conv, de, ddm = self.check_convergence(e_tot, dm1, e_last, dm1_last) + fmt = "%s iteration %3d (dE= %s dDM= %9.3e): E(MF)= %s E(corr)= %s E(tot)= %s" + estr = energy_string + self.log.output(fmt, self.name, self.iteration, estr(de), ddm, estr(e_mf), estr(e_corr), estr(e_tot)) + if conv: + self.log.info("%s converged in %d iterations", self.name, self.iteration) + self.converged = True + break + e_last, dm1_last = e_tot, dm1 + + else: + self.log.warning("%s did not converge in %d iterations!", self.name, self.iteration) + return res
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/spinalg.html b/_modules/vayesta/core/spinalg.html new file mode 100644 index 000000000..8a7383743 --- /dev/null +++ b/_modules/vayesta/core/spinalg.html @@ -0,0 +1,206 @@ + + + + + + vayesta.core.spinalg — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.spinalg

+"""Some utility to perform operations for RHF and UHF using the
+same functions"""
+
+import numpy as np
+from vayesta.core import util
+
+__all__ = ['add_numbers', 'hstack_matrices']
+
+
+
[docs]def add_numbers(*args): + # RHF + if np.all([np.isscalar(arg) for arg in args]): + return sum(args) + # UHF + if not np.any([np.isscalar(arg) for arg in args]): + return (sum([arg[0] for arg in args]), + sum([arg[1] for arg in args])) + raise ValueError
+ +
[docs]def hstack_matrices(*args, ignore_none=True): + if ignore_none: + args = [x for x in args if x is not None] + ndims = np.asarray([(arg[0].ndim+1) for arg in args]) + # RHF + if np.all(ndims == 2): + return util.hstack(*args) + # UHF + if np.all(ndims == 3): + return (util.hstack(*[arg[0] for arg in args]), + util.hstack(*[arg[1] for arg in args])) + raise ValueError("ndims= %r" % ndims)
+ +def dot(*args, out=None): + """Generalizes dot with or without spin channel: ij,jk->ik or Sij,Sjk->Sik + + Additional non spin-dependent matrices can be present, eg. Sij,jk,Skl->Skl. + + Note that unlike numpy.dot, this does not support vectors.""" + maxdim = np.max([np.ndim(x[0]) for x in args]) + 1 + # No spin-dependent arguments present + if maxdim == 2: + return util.dot(*args, out=out) + # Spin-dependent arguments present + assert (maxdim == 3) + if out is None: + out = 2*[None] + args_a = [(x if np.ndim(x[0]) < 2 else x[0]) for x in args] + args_b = [(x if np.ndim(x[1]) < 2 else x[1]) for x in args] + return (util.dot(*args_a, out=out[0]), util.dot(*args_b, out=out[1])) + +def eigh(a, b=None, *args, **kwargs): + ndim = np.ndim(a[0]) + 1 + # RHF + if ndim == 2: + return scipy.linalg.eigh(a, b=b, *args, **kwargs) + # UHF + if b is None or np.ndim(b[0]) == 1: + b = (b, b) + results = (scipy.linalg.eigh(a[0], b=b[0], *args, **kwargs), + scipy.linalg.eigh(a[1], b=b[1], *args, **kwargs)) + return tuple(zip(*results)) + +def transpose(a, axes=None): + if np.ndim(a[0]) == 1: + return np.transpose(a, axes=axes) + return (transpose(a[0], axes=axes), transpose(a[1], axes=axes)) + +T = transpose + +def _guess_spinsym(a): + if isinstance(a, (tuple, list)): + return 'unrestricted' + return 'restricted' + +def _make_func(func, nargs=1): + + def _func(a, *args, spinsym=None, **kwargs): + spinsym = spinsym or _guess_spinsym(a) + if spinsym == 'restricted': + return func(a, *args, **kwargs) + if nargs == 1: + return tuple(func(a[i], *args, **kwargs) for i in range(len(a))) + if nargs == 2: + assert len(args) >= 1 + b, args = args[0], args[1:] + return tuple(func(a[i], b[i], *args, **kwargs) for i in range(len(a))) + if nargs == 3: + assert len(args) >= 2 + b, c, args = args[0], args[1], args[2:] + return tuple(func(a[i], b[i], c[i], *args, **kwargs) for i in range(len(a))) + raise NotImplementedError + return _func + + +zeros_like = _make_func(np.zeros_like) +add = _make_func(np.add, nargs=2) +subtract = _make_func(np.subtract, nargs=2) +multiply = _make_func(np.multiply, nargs=2) +copy = _make_func(np.copy, nargs=1) +norm = _make_func(np.linalg.norm, nargs=1) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/symmetry/group.html b/_modules/vayesta/core/symmetry/group.html new file mode 100644 index 000000000..92d368785 --- /dev/null +++ b/_modules/vayesta/core/symmetry/group.html @@ -0,0 +1,178 @@ + + + + + + vayesta.core.symmetry.group — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.symmetry.group

+import logging
+import numpy as np
+
+
+log = logging.getLogger(__name__)
+
+
[docs]class SymmetryGroup: + """Detect symmetry group automatically (use spglib?).""" + + def __init__(self, mol, xtol=1e-8, check_basis=True, check_label=False): + self.mol = mol + self.xtol = xtol + self.check_basis = check_basis + self.check_label = check_label + self.translation = None + + @property + def natom(self): + return self.mol.natm + + @property + def nao(self): + return self.mol.nao + + @property + def dimension(self): + return getattr(self.mol, 'dimension', 0) + +
[docs] def compare_atoms(self, atom1, atom2, check_basis=None, check_label=None): + """Compare atom symbol and (optionally) basis between atom1 and atom2.""" + if check_basis is None: + check_basis = self.check_basis + if check_label is None: + check_label = self.check_label + if check_label: + type1 = self.mol.atom_symbol(atom1) + type2 = self.mol.atom_symbol(atom2) + else: + type1 = self.mol.atom_pure_symbol(atom1) + type2 = self.mol.atom_pure_symbol(atom2) + if (type1 != type2): + return False + if not check_basis: + return True + bas1 = self.mol._basis[self.mol.atom_symbol(atom1)] + bas2 = self.mol._basis[self.mol.atom_symbol(atom2)] + return (bas1 == bas2)
+ +
[docs] def get_closest_atom(self, coords): + """pos in internal coordinates.""" + dists = np.linalg.norm(self.mol.atom_coords()-coords, axis=1) + idx = np.argmin(dists) + return idx, dists[idx]
+ +
[docs] def add_rotation(self, order, axis, center, unit='ang'): + log.critical(("The specification of rotational symmetry between fragments has changed." + " Check examples/ewf/73-rotational-symmetry.py for the new syntax.")) + raise NotImplementedError
+ +
[docs] def set_translations(self, nimages): + """Set translational symmetry. + + Parameters + ---------- + nimages : array(3) + Number of translationally symmetric images in the direction of the first, second, + and third lattice vector. + """ + self.translation = np.asarray(nimages)
+ +
[docs] def clear_translations(self): + self.translations = None
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/symmetry/operation.html b/_modules/vayesta/core/symmetry/operation.html new file mode 100644 index 000000000..c1f4cdba3 --- /dev/null +++ b/_modules/vayesta/core/symmetry/operation.html @@ -0,0 +1,497 @@ + + + + + + vayesta.core.symmetry.operation — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.symmetry.operation

+import logging
+import itertools
+import numpy as np
+import scipy
+import scipy.spatial
+import pyscf
+import pyscf.symm
+from vayesta.core.util import AbstractMethodError, einsum
+
+
+log = logging.getLogger(__name__)
+
+BOHR = 0.529177210903
+
+
[docs]class SymmetryOperation: + + def __init__(self, group): + self.group = group + log.debugv("Creating %s", self) + + @property + def mol(self): + return self.group.mol + + @property + def xtol(self): + return self.group.xtol + + @property + def natom(self): + return self.group.natom + + @property + def nao(self): + return self.group.nao + + def __call__(self, a, *args, axis=0, **kwargs): + return self.call_wrapper(a, *args, axis=axis, **kwargs) + +
[docs] def call_wrapper(self, a, *args, axis=0, **kwargs): + """Common pre- and post-processing for all symmetries. + + Symmetry specific processing is performed in call_kernel.""" + if hasattr(axis, '__len__'): + for ax in axis: + a = self(a, *args, axis=ax, **kwargs) + return a + if isinstance(a, (tuple, list)): + return tuple([self(x, *args, axis=axis, **kwargs) for x in a]) + a = np.moveaxis(a, axis, 0) + # Reorder AOs according to new atomic center + a = a[self.ao_reorder] + a = self.call_kernel(a, *args, **kwargs) + a = np.moveaxis(a, 0, axis) + return a
+ +
[docs] def call_kernel(self, *args, **kwargs): + raise AbstractMethodError
+ +
[docs] def apply_to_point(self, r0): + raise AbstractMethodError
+ +
[docs] def get_atom_reorder(self): + """Reordering of atoms for a given rotation. + + Parameters + ---------- + + Returns + ------- + reorder: list + inverse: list + """ + reorder = np.full((self.natom,), -1, dtype=int) + inverse = np.full((self.natom,), -1, dtype=int) + + def assign(): + success = True + for atom0, r0 in enumerate(self.mol.atom_coords()): + r1 = self.apply_to_point(r0) + atom1, dist = self.group.get_closest_atom(r1) + if dist > self.xtol: + log.error("No symmetry related atom found for atom %d. Closest atom is %d with distance %.3e a.u.", + atom0, atom1, dist) + success = False + elif not self.group.compare_atoms(atom0, atom1): + log.error("Atom %d is not symmetry related to atom %d.", atom1, atom0) + success = False + else: + log.debug("Atom %d is symmetry related to atom %d.", atom1, atom0) + reorder[atom1] = atom0 + inverse[atom0] = atom1 + return success + + if not assign(): + return None, None + + assert (not np.any(reorder == -1)) + assert (not np.any(inverse == -1)) + assert np.all(np.arange(self.natom)[reorder][inverse] == np.arange(self.natom)) + return reorder, inverse
+ +
[docs] def get_ao_reorder(self, atom_reorder): + if atom_reorder is None: + return None, None + aoslice = self.mol.aoslice_by_atom()[:,2:] + reorder = np.full((self.mol.nao,), -1) + inverse = np.full((self.mol.nao,), -1) + for atom0 in range(self.natom): + atom1 = atom_reorder[atom0] + aos0 = list(range(aoslice[atom0,0], aoslice[atom0,1])) + aos1 = list(range(aoslice[atom1,0], aoslice[atom1,1])) + reorder[aos0[0]:aos0[-1]+1] = aos1 + inverse[aos1[0]:aos1[-1]+1] = aos0 + assert not np.any(reorder == -1) + assert not np.any(inverse == -1) + assert np.all(np.arange(self.nao)[reorder][inverse] == np.arange(self.nao)) + return reorder, inverse
+ +
[docs] def rotate_angular_orbitals(self, a, rotmats): + """Rotate between orbitals in p,d,f,... shells.""" + ao_loc = self.mol.ao_loc + ao_start = ao_loc[0] + b = a.copy() + for bas, ao_end in enumerate(ao_loc[1:]): + l = self.mol.bas_angular(bas) + # s orbitals do not require rotation: + if l == 0: + ao_start = ao_end + continue + rot = rotmats[l] + size = ao_end - ao_start + + # It is possible that multiple shells are contained in a single 'bas'! + nl = rot.shape[0] + assert (size % nl == 0) + for shell0 in range(0, size, nl): + shell = np.s_[ao_start+shell0:ao_start+shell0+nl] + b[shell] = einsum('x...,xy->y...', a[shell], rot) + ao_start = ao_end + return b
+ + +
[docs]class SymmetryIdentity(SymmetryOperation): + + def __repr__(self): + return "Identity" + + def __call__(self, a, **kwargs): + return a + +
[docs] def apply_to_point(self, r0): + return r0
+ +
[docs] def get_atom_reorder(self): + reorder = list(range(self.mol.natm)) + return reorder, reorder
+ + +
[docs]class SymmetryInversion(SymmetryOperation): + + def __init__(self, group, center=(0,0,0)): + center = np.asarray(center, dtype=float) + self.center = center + + super().__init__(group) + + self.atom_reorder = self.get_atom_reorder()[0] + if self.atom_reorder is None: + raise RuntimeError("Symmetry %s not found" % self) + self.ao_reorder = self.get_ao_reorder(self.atom_reorder)[0] + + def __repr__(self): + return "Inversion(%g,%g,%g)" % tuple(self.center) + +
[docs] def apply_to_point(self, r0): + return 2*self.center - r0
+ +
[docs] def call_kernel(self, a): + rotmats = [(-1)**i * np.eye(n) for (i, n) in enumerate(range(1,19,2))] + a = self.rotate_angular_orbitals(a, rotmats) + return a
+ + +
[docs]class SymmetryReflection(SymmetryOperation): + + def __init__(self, group, axis, center=(0,0,0)): + center = np.asarray(center, dtype=float) + self.center = center + self.axis = np.asarray(axis)/np.linalg.norm(axis) + super().__init__(group) + + self.atom_reorder = self.get_atom_reorder()[0] + if self.atom_reorder is None: + raise RuntimeError("Symmetry %s not found" % self) + self.ao_reorder = self.get_ao_reorder(self.atom_reorder)[0] + + # A reflection can be decomposed into a C2-rotation + inversion + # We use this to derive the angular transformation matrix: + rot = scipy.spatial.transform.Rotation.from_rotvec(self.axis*np.pi).as_matrix() + try: + angular_rotmats = pyscf.symm.basis._momentum_rotation_matrices(self.mol, rot) + except AttributeError: + angular_rotmats = pyscf.symm.basis._ao_rotation_matrices(self.mol, rot) + # Inversion of p,f,h,... shells: + self.angular_rotmats =[(-1)**i * x for (i, x) in enumerate(angular_rotmats)] + + def __repr__(self): + return "Reflection(%g,%g,%g)" % tuple(self.axis) + +
[docs] def as_matrix(self): + """Householder matrix. Does not account for shifted origin!""" + return np.eye(3) - 2*np.outer(self.axis, self.axis)
+ +
[docs] def apply_to_point(self, r0): + """Householder transformation.""" + r1 = r0 - 2*np.dot(np.outer(self.axis, self.axis), r0-self.center) + return r1
+ +
[docs] def call_kernel(self, a): + a = self.rotate_angular_orbitals(a, self.angular_rotmats) + return a
+ + +
[docs]class SymmetryRotation(SymmetryOperation): + + def __init__(self, group, rotvec, center=(0,0,0)): + self.rotvec = np.asarray(rotvec, dtype=float) + self.center = np.asarray(center, dtype=float) + super().__init__(group) + + self.atom_reorder = self.get_atom_reorder()[0] + if self.atom_reorder is None: + raise RuntimeError("Symmetry %s not found" % self) + self.ao_reorder = self.get_ao_reorder(self.atom_reorder)[0] + try: + self.angular_rotmats = pyscf.symm.basis._momentum_rotation_matrices(self.mol, self.as_matrix()) + except AttributeError: + self.angular_rotmats = pyscf.symm.basis._ao_rotation_matrices(self.mol, self.as_matrix()) + + def __repr__(self): + return "Rotation(%g,%g,%g)" % tuple(self.rotvec) + +
[docs] def as_matrix(self): + return scipy.spatial.transform.Rotation.from_rotvec(self.rotvec).as_matrix()
+ +
[docs] def apply_to_point(self, r0): + rot = self.as_matrix() + return np.dot(rot, (r0 - self.center)) + self.center
+ +
[docs] def call_kernel(self, a): + a = self.rotate_angular_orbitals(a, self.angular_rotmats) + return a
+ + +
[docs]class SymmetryTranslation(SymmetryOperation): + + def __init__(self, group, vector, boundary=None, atom_reorder=None, ao_reorder=None): + self.vector = np.asarray(vector, dtype=float) + super().__init__(group) + + if boundary is None: + boundary = getattr(self.mol, 'boundary', 'PBC') + if np.ndim(boundary) == 0: + boundary = 3*[boundary] + elif np.ndim(boundary) == 1 and len(boundary) == 2: + boundary = [boundary[0], boundary[1], 'PBC'] + self.boundary = boundary + + # Atom reorder + self.atom_reorder_phases = None + self.ao_reorder_phases = None + if atom_reorder is None: + atom_reorder, _, self.atom_reorder_phases = self.get_atom_reorder() + self.atom_reorder = atom_reorder + assert (self.atom_reorder is not None) + # AO reorder + if ao_reorder is None: + ao_reorder, _, self.ao_reorder_phases = self.get_ao_reorder() + self.ao_reorder = ao_reorder + assert (self.ao_reorder is not None) + + def __repr__(self): + return "Translation(%f,%f,%f)" % tuple(self.vector) + +
[docs] def call_kernel(self, a): + if self.ao_reorder_phases is None: + return a + return a * self.ao_reorder_phases[tuple([np.s_[:]] + (a.ndim-1)*[None])]
+ +
[docs] def inverse(self): + return type(self)(self.mol, -self.vector, boundary=self.boundary, atom_reorder=np.argsort(self.atom_reorder))
+ + @property + def lattice_vectors(self): + return self.mol.lattice_vectors() + + @property + def inv_lattice_vectors(self): + return np.linalg.inv(self.lattice_vectors) + + @property + def boundary_phases(self): + return np.asarray([1 if (b.lower() == 'pbc') else -1 for b in self.boundary]) + + @property + def vector_xyz(self): + """Translation vector in real-space coordinates (unit = Bohr).""" + latvecs = self.lattice_vectors + vector_xyz = np.dot(self.lattice_vectors, self.vector) + return vector_xyz + + @property + def inverse_atom_reorder(self): + if self.atom_reorder is None: + return None + return np.argsort(self.atom_reorder) + +
[docs] def get_atom_reorder(self): + """Reordering of atoms for a given translation. + + Parameters + ---------- + + Returns + ------- + reorder: list + inverse: list + phases: list + """ + atom_coords_abc = np.dot(self.mol.atom_coords(), self.inv_lattice_vectors) + + def get_atom_at(pos): + """pos in internal coordinates.""" + for dx, dy, dz in itertools.product([0,-1,1], repeat=3): + if self.group.dimension in (1, 2) and (dz != 0): continue + if self.group.dimension == 1 and (dy != 0): continue + dr = np.asarray([dx, dy, dz]) + phase = np.product(self.boundary_phases[dr!=0]) + dists = np.linalg.norm(atom_coords_abc + dr - pos, axis=1) + idx = np.argmin(dists) + if (dists[idx] < self.xtol): + return idx, phase + return None, None + + reorder = np.full((self.natom,), -1) + inverse = np.full((self.natom,), -1) + phases = np.full((self.natom,), 0) + for atom0, coords0 in enumerate(atom_coords_abc): + atom1, phase = get_atom_at(coords0 + self.vector) + if atom1 is None: + return None, None, None + if not self.group.compare_atoms(atom0, atom1): + return None, None, None + reorder[atom1] = atom0 + inverse[atom0] = atom1 + phases[atom0] = phase + assert (not np.any(reorder == -1)) + assert (not np.any(inverse == -1)) + assert (not np.any(phases == 0)) + assert np.all(np.arange(self.natom)[reorder][inverse] == np.arange(self.natom)) + return reorder, inverse, phases
+ +
[docs] def get_ao_reorder(self, atom_reorder=None, atom_reorder_phases=None): + if atom_reorder is None: + atom_reorder = self.atom_reorder + if atom_reorder_phases is None: + atom_reorder_phases = self.atom_reorder_phases + if atom_reorder is None: + return None, None, None + aoslice = self.mol.aoslice_by_atom()[:,2:] + reorder = np.full((self.mol.nao,), -1) + inverse = np.full((self.mol.nao,), -1) + if atom_reorder_phases is not None: + phases = np.full((self.mol.nao,), 0) + else: + phases = None + for atom0 in range(self.natom): + atom1 = atom_reorder[atom0] + aos0 = list(range(aoslice[atom0,0], aoslice[atom0,1])) + aos1 = list(range(aoslice[atom1,0], aoslice[atom1,1])) + reorder[aos0[0]:aos0[-1]+1] = aos1 + inverse[aos1[0]:aos1[-1]+1] = aos0 + if atom_reorder_phases is not None: + phases[aos0[0]:aos0[-1]+1] = atom_reorder_phases[atom1] + assert not np.any(reorder == -1) + assert not np.any(inverse == -1) + if atom_reorder_phases is not None: + assert not np.any(phases == 0) + assert np.all(np.arange(self.nao)[reorder][inverse] == np.arange(self.nao)) + return reorder, inverse, phases
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/symmetry/symmetry.html b/_modules/vayesta/core/symmetry/symmetry.html new file mode 100644 index 000000000..059da3d63 --- /dev/null +++ b/_modules/vayesta/core/symmetry/symmetry.html @@ -0,0 +1,425 @@ + + + + + + vayesta.core.symmetry.symmetry — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.symmetry.symmetry

+import logging
+
+import numpy as np
+from vayesta.core.symmetry import tsymmetry
+
+
+log = logging.getLogger(__name__)
+
+
+
[docs]def unit_vector(vector): + """Returns the unit vector of the vector.""" + return vector / np.linalg.norm(vector)
+ +
[docs]def angle_between(v1, v2): + """Returns the angle in radians between vectors 'v1' and 'v2':: + + >>> angle_between((1, 0, 0), (0, 1, 0)) + 1.5707963267948966 + >>> angle_between((1, 0, 0), (1, 0, 0)) + 0.0 + >>> angle_between((1, 0, 0), (-1, 0, 0)) + 3.141592653589793 + """ + u1 = unit_vector(v1) + u2 = unit_vector(v2) + return np.arccos(np.clip(np.dot(u1, u2), -1.0, 1.0))
+ +
[docs]class Symmetry: + + def __init__(self, mf, log=log): + self.mf = mf + self.nsubcells = None + self.log = log + + if self.has_pbc: + #self.nsubcells = self.find_subcells(respect_dm1=self.mf.make_rdm1()) + # MF is FoldedSCF + if hasattr(mf, 'nsubcells'): + self.nsubcells = mf.nsubcells + self.log.info("Found %d x %d x %d primitive subcells in unit cell", *self.nsubcells) + + @property + def mol(self): + return self.mf.mol + + @property + def cell(self): + if (self.pbcndims == 0): + raise AttributeError + return self.mol + + @property + def natom(self): + return self.mol.natm + + @property + def natom_unique(self): + mf = getattr(self.mf, 'kmf', self.mf) + return mf.mol.natm + +
[docs] def get_unique_atoms(self): #, r_tol=1e-5): + return list(range(self.natom_unique))
+ + #if self.nsubcells is None: + # return list(range(self.natom)) + #avecs = self.primitive_lattice_vectors() + #bvecs = np.linalg.inv(avecs.T) + #atoms = [] + #for atom, coords in enumerate(self.atom_coords()): + # coords = np.dot(coords, bvecs.T) + # if np.any(coords >= (1.0-r_tol)): + # continue + # atoms.append(atom) + #return atoms + +
[docs] def primitive_lattice_vectors(self): + return self.lattice_vectors() / self.nsubcells[:,None]
+ +
[docs] def atom_coords(self, unit='Bohr'): + return self.mol.atom_coords(unit=unit)
+ +
[docs] def lattice_vectors(self): + return self.cell.lattice_vectors()
+ + @property + def pbcndims(self): + """Number of periodic boundary conditions: 0 = No PBC, 1 = 1D 2 = 2D, 3 = 3D.""" + self.mol.lattice_vectors() + try: + self.mol.lattice_vectors() + except AttributeError: + return 0 + return self.mol.dimension + + @property + def has_pbc(self): + return (self.pbcndims > 0) + +
[docs] def compare_atoms(self, atom1, atom2, respect_labels=False, respect_basis=True): + """Compare atom symbol and (optionally) basis between atom1 and atom2.""" + + if respect_labels: + type1 = self.mol.atom_symbol(atom1) + type2 = self.mol.atom_symbol(atom2) + else: + type1 = self.mol.atom_pure_symbol(atom1) + type2 = self.mol.atom_pure_symbol(atom2) + + if type1 != type2: + return False + if not respect_basis: + return True + bas1 = self.mol._basis[self.mol.atom_symbol(atom1)] + bas2 = self.mol._basis[self.mol.atom_symbol(atom2)] + if bas1 != bas2: + return False + return True
+ + +
[docs] def find_subcells(self, respect_basis=True, respect_labels=False, respect_dm1=None, r_tol=1e-5, dm1_tol=1e-6): + """Find subcells within cell, with unit cell vectors parallel to the supercell. + + Parameters + ---------- + respect_basis: bool, optional + If True, the basis functions are considered when determining the symmetry. Default: True. + respect_labels: bool, optional + If True, the labels of atoms (such as "H1" or "C*") are considered when determining the symmetry. Default: False. + respect_dm1: array or None, optional + If a (tuple of) density-matrix is passed, it is considered when determining the symmetry. Default: None. + r_tol: float, optional + Real space tolerance to determine if two atoms are symmetry equivalent. Default: 1e-5. + dm1_tol: float, optional + Density-matrix tolerance to determine the symmetry. Default: 1e-6. + + Returns + ------- + nsubcells: tuple(3) + Number of primitive subcells in (a0, a1, a2) direction. + """ + avecs = self.lattice_vectors() + bvecs = np.linalg.inv(avecs.T) + coords = self.atom_coords() + + if respect_dm1 is not None: + # RHF + if np.ndim(respect_dm1[0]) == 1: + dm1s = [respect_dm1] + dm1_tol *= 2 + # UHF + else: + dm1s = respect_dm1 + + coords_internal = np.einsum('ar,br->ab', coords, bvecs) + + checked = [] # Keep track of vectors which were already checked, to improve performance + dvecs = [[] for i in range(3)] + for atm1 in range(self.natom): + for atm2 in range(atm1+1, self.natom): + + # 1) Compare atom symbol and basis + equal = self.compare_atoms(atm1, atm2, respect_basis=respect_basis, respect_labels=False) + if not equal: + continue + + pos1 = coords_internal[atm1] + pos2 = coords_internal[atm2] + dvec = (pos2 - pos1) + + # 3) Check parallel to one and only lattice vector + dim = np.argwhere(abs(dvec) > r_tol) + if len(dim) != 1: + continue + dim = dim[0][0] + + # Check if vector has been checked before + if checked: + diff = (dvec[None] - np.asarray(checked)) + checked_before = np.allclose(np.amin(abs(diff), axis=0), 0) + if checked_before: + continue + checked.append(dvec) + + # 4) Check if dvec already in dvecs or an integer multiple of a vector already in dvecs + if dvecs[dim]: + found = False + for i in range(1, 100): + diff = np.linalg.norm(dvec[None]/i - dvecs[dim], axis=1) + if np.any(diff < r_tol): + found = True + break + if found: + continue + + # 5) Check if dvec is valid symmetry for all atoms: + tvec = np.dot(dvec, avecs) + reorder, _, phases = tsymmetry.reorder_atoms(self.cell, tvec, unit='Bohr') + if reorder is None: + continue + + # Check if mean-field is symmetric + if respect_dm1 is not None: + reorder, _, phases = tsymmetry.reorder_atoms2aos(self.cell, reorder, phases) + assert np.allclose(phases, 1) + dmsym = True + for dm1 in dm1s: + dm1t = dm1[reorder][:,reorder] + if not np.allclose(dm1, dm1t, rtol=0, atol=dm1_tol): + dmsym = False + break + if not dmsym: + continue + + # 6) Add as new dvec + dvecs[dim].append(dvec) + + # Check that not more than a single vector was found for each dimension + assert np.all([(len(dvecs[d]) <= 1) for d in range(3)]) + nsubcells = [(1/(dvecs[d][0][d]) if dvecs[d] else 1) for d in range(3)] + assert np.allclose(np.rint(nsubcells), nsubcells) + + nsubcells = np.rint(nsubcells).astype(int) + return nsubcells
+ + + #def find_primitive_cells_old(self, tol=1e-5): + # if self.pbcndims == 0: + # raise ValueError() + + # # Construct all atom1 < atom2 vectors + # #for atom1, coords1 in enumerate(self.atom_coords()): + # # for atom2, coords2 in enumerate(self.atom_coords + # coords = self.atom_coords() + # aavecs = (coords[:,None,:] - coords[None,:,:]) + + # #print(coords[3] - coords[1]) + # #print(aavecs[3,1]) + + + # tvecs = aavecs.reshape(self.natom*self.natom, 3) + # #tvecs = np.unique(tvecs, axis=0) + + # # Filter zero T vectors + # tvecs = np.asarray([t for t in tvecs if (np.linalg.norm(t) > 1e-6)]) + + # # Filter unique T vectors + # tvecs_unique = [] + # for tvec in tvecs[1:]: + # if np.sum(tvec) < 0: + # tvec *= -1 + # if len(tvecs_unique) == 0: + # tvecs_unique.append(tvec) + # continue + # unique = True + # for utvec in tvecs_unique: + # if min(np.linalg.norm(tvec - utvec), np.linalg.norm(tvec + utvec)) < tol: + # unique = False + # break + # if unique: + # tvecs_unique.append(tvec) + # tvecs = np.asarray(tvecs_unique) + + # # Filter and sort according to parallelity to lattice vectors + # latvec = self.lattice_vectors() + # tvecs_dim = [[], [], []] + # for tvec in tvecs: + # for d in range(3): + # angle = min(angle_between(tvec, latvec[d]), angle_between(-tvec, latvec[d])) + # if angle < 1e-5: + # tvecs_dim[d].append(tvec) + # break + # #tvecs = np.asarray(tvecs_para) + # print(tvecs_dim[0]) + # print(tvecs_dim[1]) + # print(tvecs_dim[2]) + + # # Find most + # for d in range(3): + # pass + + +if __name__ == '__main__': + from timeit import default_timer as timer + + import pyscf + import pyscf.pbc + import pyscf.pbc.gto + import pyscf.pbc.scf + import pyscf.pbc.tools + + cell = pyscf.pbc.gto.Cell() + cell.a = 3*np.eye(3) + #cell.a[0,2] += 2.0 + #cell.atom = ['He 0 0 0', 'He 0 0 1', 'He 0 0 2.0000000001', 'He 0 1 2', 'He 2 2 1', 'He 5 5 5'] + #cell.atom = ['He %f %f %f' % tuple(xyz) for xyz in np.random.rand(4,3)] + cell.atom = 'He 0 0 0' + cell.unit = 'Bohr' + cell.basis = 'def2-svp' + cell.build() + #cell.dimension = 2 + + + sc = [1, 2, 3] + cell = pyscf.pbc.tools.super_cell(cell, sc) + #cell.atom += ['Ne 1 2 3'] + #cell.build() + + mf = pyscf.pbc.scf.RHF(cell) + mf = mf.density_fit(auxbasis='def2-svp-ri') + mf.kernel() + dm1 = mf.make_rdm1() + dm1 += 1e-7*np.random.rand(*dm1.shape) + + sym = Symmetry(cell) + t0 = timer() + ncells = sym.find_primitive_ncells(respect_dm1=dm1) + + print(timer()-t0) + print(ncells) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/symmetry/tsymmetry.html b/_modules/vayesta/core/symmetry/tsymmetry.html new file mode 100644 index 000000000..505ff3314 --- /dev/null +++ b/_modules/vayesta/core/symmetry/tsymmetry.html @@ -0,0 +1,392 @@ + + + + + + vayesta.core.symmetry.tsymmetry — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.symmetry.tsymmetry

+"""Translational symmetry module."""
+import logging
+import itertools
+
+import numpy as np
+from pyscf.lib.parameters import BOHR
+
+log = logging.getLogger(__name__)
+
+
[docs]def to_bohr(a, unit): + if unit[0].upper() == 'A': + return a/BOHR + if unit[0].upper() == 'B': + return a + raise ValueError("Unknown unit: %s" % unit)
+ +
[docs]def get_mesh_tvecs(cell, tvecs, unit='Ang'): + rvecs = cell.lattice_vectors() + if (np.ndim(tvecs) == 1 and len(tvecs) == 3): + mesh = tvecs + tvecs = [rvecs[d]/mesh[d] for d in range(3)] + elif (np.ndim(tvecs) == 2 and tvecs.shape == (3,3)): + for d in range(3): + if np.all(tvecs[d] == 0): + tvecs[d] = rvecs[d] + tvecs = to_bohr(tvecs, unit) + mesh = [] + for d in range(3): + nd = np.round(np.linalg.norm(rvecs[d]) / np.round(np.linalg.norm(tvecs[d]))) + if abs(nd - int(nd)) > 1e-14: + raise ValueError("Translationally vectors not consumerate with lattice vectors. Correct units?") + mesh.append(int(nd)) + else: + raise ValueError("Unknown set of T-vectors: %r" % tvecs) + return mesh, tvecs
+ +
[docs]def loop_tvecs(cell, tvecs, unit='Ang', include_origin=False): + mesh, tvecs = get_mesh_tvecs(cell, tvecs, unit) + log.debugv("nx= %d ny= %d nz= %d", *mesh) + log.debugv("tvecs=\n%r", tvecs) + for dz, dy, dx in itertools.product(range(mesh[2]), range(mesh[1]), range(mesh[0])): + if not include_origin and (abs(dx) + abs(dy) + abs(dz) == 0): + continue + t = dx*tvecs[0] + dy*tvecs[1] + dz*tvecs[2] + yield (dx, dy, dz), t
+ +
[docs]def tsymmetric_atoms(cell, rvecs, xtol=1e-8, unit='Ang', check_element=True, check_basis=True): + """Get indices of translationally symmetric atoms. + + Parameters + ---------- + cell: pyscf.pbc.gto.Cell + Unit cell. + rvecs: (3, 3) array + The rows contain the real space translation vectors. + xtol: float, optional + Tolerance to identify equivalent atom positions. Default: 1e-8 + unit: ['Ang', 'Bohr'] + Unit of `rvecs` and `xtol`. Default: 'Ang'. + + Returns + ------- + indices: list + List with length `cell.natm`. Each element represents the lowest atom index of a + translationally symmetry equivalent atom. + """ + rvecs = to_bohr(rvecs, unit) + + # Reciprocal lattice vectors + bvecs = np.linalg.inv(rvecs.T) + atom_coords = cell.atom_coords() + indices = [0] + for atm1 in range(1, cell.natm): + type1 = cell.atom_pure_symbol(atm1) + bas1 = cell._basis[cell.atom_symbol(atm1)] + # Position in internal coordinates: + pos1 = np.dot(atom_coords[atm1], bvecs.T) + for atm2 in set(indices): + # 1) Compare element symbol + if check_element: + type2 = cell.atom_pure_symbol(atm2) + if type1 != type2: + continue + # 2) Compare basis set + if check_basis: + bas2 = cell._basis[cell.atom_symbol(atm2)] + if bas1 != bas2: + continue + # 3) Check distance modulo lattice vectors + pos2 = np.dot(atom_coords[atm2], bvecs.T) + dist = (pos2 - pos1) + dist -= np.rint(dist) + if np.linalg.norm(dist) < xtol: + # atm1 and atm2 are symmetry equivalent + log.debug("Atom %d is translationally symmetric to atom %d", atm1, atm2) + indices.append(atm2) + break + else: + # No symmetry related atom could be found; append own index + indices.append(atm1) + + return indices
+ +
[docs]def compare_atoms(cell, atm1, atm2, check_basis=True): + type1 = cell.atom_pure_symbol(atm1) + type2 = cell.atom_pure_symbol(atm2) + if type1 != type2: + return False + if not check_basis: + return True + bas1 = cell._basis[cell.atom_symbol(atm1)] + bas2 = cell._basis[cell.atom_symbol(atm2)] + if bas1 != bas2: + return False + return True
+ +
[docs]def reorder_atoms(cell, tvec, boundary=None, unit='Ang', check_basis=True): + """Reordering of atoms for a given translation. + + Parameters + ---------- + tvec: (3) array + Translation vector. + + Returns + ------- + reorder: list + inverse: list + """ + if boundary is None: + if hasattr(cell, 'boundary'): + boundary = cell.boundary + else: + boundary = 'PBC' + if np.ndim(boundary) == 0: + boundary = 3*[boundary] + elif np.ndim(boundary) == 1 and len(boundary) == 2: + boundary = [boundary[0], boundary[1], 'PBC'] + + tvec = to_bohr(tvec, unit) + + rvecs = cell.lattice_vectors() + bvecs = np.linalg.inv(rvecs.T) + log.debugv("lattice vectors=\n%r", rvecs) + log.debugv("inverse lattice vectors=\n%r", bvecs) + atom_coords = np.dot(cell.atom_coords(), bvecs.T) + log.debugv("Atom coordinates:") + for atm, coords in enumerate(atom_coords): + log.debugv("%3d %f %f %f", atm, *coords) + log.debugv("boundary= %r", boundary) + for d in range(3): + if boundary[d].upper() == 'PBC': + boundary[d] = 1 + elif boundary[d].upper() == 'APBC': + boundary[d] = -1 + else: + raise ValueError("Boundary= %s" % boundary) + boundary = np.asarray(boundary) + log.debugv("boundary= %r", boundary) + + def get_atom_at(pos, xtol=1e-8): + for dx, dy, dz in itertools.product([0,-1,1], repeat=3): + if cell.dimension in (1, 2) and (dz != 0): continue + if cell.dimension == 1 and (dy != 0): continue + dr = np.asarray([dx, dy, dz]) + phase = np.product(boundary[dr!=0]) + #log.debugv("dx= %d dy= %d dz= %d phase= %d", dx, dy, dz, phase) + #print(atom_coords.shape, dr.shape, pos.shape) + dists = np.linalg.norm(atom_coords + dr - pos, axis=1) + idx = np.argmin(dists) + if (dists[idx] < xtol): + return idx, phase + #log.debugv("atom %d not close with distance %f", idx, dists[idx]) + return None, None + + natm = cell.natm + reorder = np.full((natm,), -1) + inverse = np.full((natm,), -1) + phases = np.full((natm,), 0) + tvec_internal = np.dot(tvec, bvecs.T) + for atm0 in range(cell.natm): + atm1, phase = get_atom_at(atom_coords[atm0] + tvec_internal) + if atm1 is None or not compare_atoms(cell, atm0, atm1, check_basis=check_basis): + return None, None, None + log.debugv("atom %d T-symmetric to atom %d for translation %s", atm1, atm0, tvec) + reorder[atm1] = atm0 + inverse[atm0] = atm1 + phases[atm0] = phase + assert not np.any(reorder == -1) + assert not np.any(inverse == -1) + assert not np.any(phases == 0) + + assert np.all(np.arange(cell.natm)[reorder][inverse] == np.arange(cell.natm)) + + return reorder, inverse, phases
+ +
[docs]def reorder_atoms2aos(cell, atom_reorder, atom_phases): + if atom_reorder is None: + return None, None, None + aoslice = cell.aoslice_by_atom()[:,2:] + nao = cell.nao_nr() + reorder = np.full((nao,), -1) + inverse = np.full((nao,), -1) + phases = np.full((nao,), 0) + for atm0 in range(cell.natm): + atm1 = atom_reorder[atm0] + aos0 = list(range(aoslice[atm0,0], aoslice[atm0,1])) + aos1 = list(range(aoslice[atm1,0], aoslice[atm1,1])) + reorder[aos0[0]:aos0[-1]+1] = aos1 + inverse[aos1[0]:aos1[-1]+1] = aos0 + phases[aos0[0]:aos0[-1]+1] = atom_phases[atm1] + assert not np.any(reorder == -1) + assert not np.any(inverse == -1) + assert not np.any(phases == 0) + + assert np.all(np.arange(nao)[reorder][inverse] == np.arange(nao)) + + return reorder, inverse, phases
+ + +
[docs]def reorder_aos(cell, tvec, unit='Ang'): + atom_reorder, atom_inverse, atom_phases = reorder_atoms(cell, tvec, unit=unit) + return reorder_atoms2aos(cell, atom_reorder, atom_phases)
+ #if atom_reorder is None: + # return None, None, None + #aoslice = cell.aoslice_by_atom()[:,2:] + #nao = cell.nao_nr() + #reorder = np.full((nao,), -1) + #inverse = np.full((nao,), -1) + #phases = np.full((nao,), 0) + #for atm0 in range(cell.natm): + # atm1 = atom_reorder[atm0] + # aos0 = list(range(aoslice[atm0,0], aoslice[atm0,1])) + # aos1 = list(range(aoslice[atm1,0], aoslice[atm1,1])) + # reorder[aos0[0]:aos0[-1]+1] = aos1 + # inverse[aos1[0]:aos1[-1]+1] = aos0 + # phases[aos0[0]:aos0[-1]+1] = atom_phases[atm1] + #assert not np.any(reorder == -1) + #assert not np.any(inverse == -1) + #assert not np.any(phases == 0) + + #assert np.all(np.arange(nao)[reorder][inverse] == np.arange(nao)) + + #return reorder, inverse, phases + +def _make_reorder_op(reorder, phases): + def reorder_op(a, axis=0): + if isinstance(a, (tuple, list)): + return tuple([reorder_op(x, axis=axis) for x in a]) + bc = tuple(axis*[None] + [slice(None, None, None)] + (a.ndim-axis-1)*[None]) + return np.take(a, reorder, axis=axis) * phases[bc] + return reorder_op + +
[docs]def get_tsymmetry_op(cell, tvec, unit='Ang'): + reorder, inverse, phases = reorder_aos(cell, tvec, unit=unit) + if reorder is None: + # Not a valid symmetry + return None + tsym_op = _make_reorder_op(reorder, phases) + return tsym_op
+ +if __name__ == '__main__': + import vayesta + log = vayesta.log + + import pyscf + import pyscf.pbc.gto + import pyscf.pbc.tools + + cell = pyscf.pbc.gto.Cell() + cell.atom='H 0 0 0, H 0 1 2' + cell.basis='sto-3g' + cell.a = np.eye(3) + cell.dimension = 1 + cell.build() + + ncopy = 4 + cell = pyscf.pbc.tools.super_cell(cell, [ncopy,1,1]) + + reorder, inverse, phases = reorder_atoms(cell, cell.a[0]/ncopy, unit='B') + print(reorder) + print(inverse) + + reorder, inverse, phases = reorder_aos(cell, cell.a[0]/ncopy, unit='B') + print(reorder) + print(inverse) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/cluster.html b/_modules/vayesta/core/types/cluster.html new file mode 100644 index 000000000..d532c079e --- /dev/null +++ b/_modules/vayesta/core/types/cluster.html @@ -0,0 +1,301 @@ + + + + + + vayesta.core.types.cluster — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.cluster

+import numpy as np
+
+from vayesta.core.types.orbitals import Orbitals
+from vayesta.core.spinalg import add_numbers, hstack_matrices
+
+__all__ = ['Cluster', 'ClusterRHF', 'ClusterUHF']
+
+
+
[docs]class Cluster: + + def __init__(self, active_orbitals, frozen_orbitals): + self.active_orbitals = active_orbitals + self.frozen_orbitals = frozen_orbitals + +
[docs] @staticmethod + def from_coeffs(c_active_occ, c_active_vir, c_frozen_occ, c_frozen_vir): + c_active = hstack_matrices(c_active_occ, c_active_vir) + c_frozen = hstack_matrices(c_frozen_occ, c_frozen_vir) + is_rhf = (c_active_occ[0].ndim == 1) + if is_rhf: + nocc_active = c_active_occ.shape[-1] + nocc_frozen = c_frozen_occ.shape[-1] + else: + nocc_active = tuple(x.shape[-1] for x in c_active_occ) + nocc_frozen = tuple(x.shape[-1] for x in c_frozen_occ) + active = Orbitals(c_active, occ=nocc_active) + frozen = Orbitals(c_frozen, occ=nocc_frozen) + if is_rhf: + return ClusterRHF(active, frozen) + return ClusterUHF(active, frozen)
+ + # --- Active + + @property + def norb_active(self): + return self.active_orbitals.norb + + @property + def nocc_active(self): + return self.active_orbitals.nocc + + @property + def nvir_active(self): + return self.active_orbitals.nvir + + @property + def c_active(self): + return self.active_orbitals.coeff + + @property + def c_active_occ(self): + return self.active_orbitals.coeff_occ + + @property + def c_active_vir(self): + return self.active_orbitals.coeff_vir + + # Shorthand: + norb = norb_active + nocc = nocc_active + nvir = nvir_active + coeff = c_active + c_occ = c_active_occ + c_vir = c_active_vir + + # --- Frozen + + @property + def norb_frozen(self): + return self.frozen_orbitals.norb + + @property + def nocc_frozen(self): + return self.frozen_orbitals.nocc + + @property + def nvir_frozen(self): + return self.frozen_orbitals.nvir + + @property + def c_frozen(self): + return self.frozen_orbitals.coeff + + @property + def c_frozen_occ(self): + return self.frozen_orbitals.coeff_occ + + @property + def c_frozen_vir(self): + return self.frozen_orbitals.coeff_vir + + # --- Active+Frozen + + @property + def norb_total(self): + return add_numbers(self.norb_active, self.norb_frozen) + + @property + def nocc_total(self): + return add_numbers(self.nocc_active, self.nocc_frozen) + + @property + def nvir_total(self): + return add_numbers(self.nvir_active, self.nvir_frozen) + + @property + def c_total(self): + return hstack_matrices(self.c_total_occ, self.c_total_vir) + + @property + def c_total_occ(self): + return hstack_matrices(self.c_frozen_occ, self.c_active_occ) + + @property + def c_total_vir(self): + return hstack_matrices(self.c_active_vir, self.c_frozen_vir) + +
[docs] def copy(self): + return type(self)(self.active_orbitals.copy(), self.frozen_orbitals.copy())
+ +
[docs] def basis_transform(self, trafo, inplace=False): + cp = self if inplace else self.copy() + cp.active_orbitals.basis_transform(trafo, inplace=True) + cp.frozen_orbitals.basis_transform(trafo, inplace=True) + return cp
+ + +
[docs]class ClusterRHF(Cluster): + + spinsym = 'restricted' + + def __repr__(self): + return '%s(norb_active= %d, norb_frozen= %d)' % (self.__class__.__name__, + self.norb_active, self.norb_frozen) + + # Indices and slices + +
[docs] def get_active_slice(self): + return np.s_[self.nocc_frozen : self.nocc_frozen+self.norb_active]
+ +
[docs] def get_active_indices(self): + return list(range(self.nocc_frozen, self.nocc_frozen+self.norb_active))
+ +
[docs] def get_frozen_indices(self): + return list(range(self.nocc_frozen)) + list(range(self.norb_total-self.nvir_frozen, self.norb_total))
+ +
[docs] def repr_size(self): + lines = [] + fmt = (10*" " + 2*" %-15s" + " %-5s") + lines += [fmt % ("Active", "Frozen", "Total")] + lines += [fmt % (15*'-', 15*'-', 5*'-')] + fmt = ' %-8s' + 2*' %5d (%6.1f%%)' + ' %5d' + get_values = lambda a, f, n : (a, 100*a/n, f, 100*f/n, n) + lines += [fmt % ("Occupied", *get_values(self.nocc_active, self.nocc_frozen, self.nocc_total))] + lines += [fmt % ("Virtual", *get_values(self.nvir_active, self.nvir_frozen, self.nvir_total))] + lines += [fmt % ("Total", *get_values(self.norb_active, self.norb_frozen, self.norb_total))] + return '\n'.join(lines)
+ + +
[docs]class ClusterUHF(Cluster): + + spinsym = 'unrestricted' + + def __repr__(self): + return '%s(norb_active= (%d, %d), norb_frozen= (%d, %d))' % (self.__class__.__name__, + *self.norb_active, *self.norb_frozen) + + # Indices and slices + +
[docs] def get_active_slice(self): + return (np.s_[self.nocc_frozen[0]:self.nocc_frozen[0]+self.norb_active[0]], + np.s_[self.nocc_frozen[1]:self.nocc_frozen[1]+self.norb_active[1]])
+ +
[docs] def get_active_indices(self): + return (list(range(self.nocc_frozen[0], self.nocc_frozen[0]+self.norb_active[0])), + list(range(self.nocc_frozen[1], self.nocc_frozen[1]+self.norb_active[1])))
+ +
[docs] def get_frozen_indices(self): + return (list(range(self.nocc_frozen[0])) + + list(range(self.norb_total[0]-self.nvir_frozen[0], self.norb_total[0])), + list(range(self.nocc_frozen[1])) + + list(range(self.norb_total[1]-self.nvir_frozen[1], self.norb_total[1])))
+ +
[docs] def repr_size(self): + lines = [] + fmt = (10*" " + 2*" %-22s" + " %-12s") + lines += [(fmt % ("Active", "Frozen", "Total")).rstrip()] + lines += [fmt % (22*'-', 22*'-', 12*'-')] + fmt = ' %-8s' + 2*' %5d, %5d (%6.1f%%)' + ' %5d, %5d' + get_values = lambda a, f, n : (a[0], a[1], 100*(a[0]+a[1])/(n[0]+n[1]), + f[0], f[1], 100*(f[0]+f[1])/(n[0]+n[1]), n[0], n[1]) + lines += [fmt % ("Occupied", *get_values(self.nocc_active, self.nocc_frozen, self.nocc_total))] + lines += [fmt % ("Virtual", *get_values(self.nvir_active, self.nvir_frozen, self.nvir_total))] + lines += [fmt % ("Total", *get_values(self.norb_active, self.norb_frozen, self.norb_total))] + return '\n'.join(lines)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/orbitals.html b/_modules/vayesta/core/types/orbitals.html new file mode 100644 index 000000000..00216485a --- /dev/null +++ b/_modules/vayesta/core/types/orbitals.html @@ -0,0 +1,351 @@ + + + + + + vayesta.core.types.orbitals — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.orbitals

+import numpy as np
+from vayesta.core.helper import pack_arrays, unpack_arrays
+
+__all__ = [
+        'Orbitals', 'SpatialOrbitals', 'SpinOrbitals', 'GeneralOrbitals',
+        ]
+
+class MolecularOrbitals:
+    """Abstract base class"""
+
+    def __repr__(self):
+        return "%s(norb= %r, nocc= %r, nvir= %r)" % (self.__class__.__name__, self.norb, self.nocc, self.nvir)
+
+    def copy(self):
+        def _copy(x):
+            if x is None:
+                return None
+            if np.isscalar(x):
+                return x
+            if isinstance(x, tuple):
+                return tuple(_copy(y) for y in x)
+            if isinstance(x, list):
+                return [_copy(y) for y in x]
+            if isinstance(x, np.ndarray):
+                return x.copy()
+            raise ValueError
+        return type(self)(coeff=_copy(self.coeff), energy=_copy(self.energy), occ=_copy(self.occ),
+                labels=_copy(self.labels), maxocc=_copy(self.maxocc))
+
+
[docs]def Orbitals(coeff, *args, **kwargs): + if np.ndim(coeff[0]) == 2: + return SpinOrbitals(coeff, *args, **kwargs) + return SpatialOrbitals(coeff, *args, **kwargs)
+ +
[docs]class SpatialOrbitals(MolecularOrbitals): + + def __init__(self, coeff, energy=None, occ=None, labels=None, maxocc=2): + self.coeff = np.asarray(coeff, dtype=float) + self.energy = np.asarray(energy, dtype=float) if energy is not None else None + self.maxocc = maxocc + if isinstance(occ, (int, np.integer)): + occ = np.asarray(occ*[self.maxocc] + (self.norb-occ)*[0]) + self.occ = np.asarray(occ, dtype=float) if occ is not None else None + self.labels = labels + + @property + def nspin(self): + return 1 + + @property + def norb(self): + return self.coeff.shape[-1] + + @property + def nocc(self): + if self.occ is None: + return None + return np.count_nonzero(self.occ > 0) + + @property + def nvir(self): + if self.occ is None: + return None + return np.count_nonzero(self.occ == 0) + + @property + def nelec(self): + if self.occ is None: + return None + ne = self.occ.sum() + if abs(np.rint(ne)-ne) < 1e-14: + return int(np.rint(ne)) + return ne + + @property + def coeff_occ(self): + return self.coeff[:,:self.nocc] + + @property + def coeff_vir(self): + return self.coeff[:,self.nocc:] + +
[docs] def basis_transform(self, trafo, inplace=False): + cp = self if inplace else self.copy() + cp.coeff = trafo(cp.coeff) + return cp
+ +
[docs] def to_spin_orbitals(self): + return SpinOrbitals.from_spatial_orbitals(self)
+ +
[docs] def to_general_orbitals(self): + return GeneralOrbitals.from_spatial_orbitals(self)
+ +
[docs] def pack(self, dtype=float): + """Pack into a single array of data type `dtype`. + + Useful for communication via MPI.""" + data = (self.coeff, self.energy, self.occ) + return pack_arrays(*data, dtype=dtype)
+ +
[docs] @classmethod + def unpack(cls, packed): + """Unpack from a single array of data type `dtype`. + + Useful for communication via MPI.""" + coeff, energy, occ = unpack_arrays(packed) + return cls(coeff, energy=energy, occ=occ)
+ + +
[docs]class SpinOrbitals(MolecularOrbitals): + + def __init__(self, coeff, energy=None, occ=None, labels=None, maxocc=1): + if energy is None: energy = (None, None) + if occ is None: occ = (None, None) + if labels is None: labels = (None, None) + if np.isscalar(maxocc): maxocc = (maxocc, maxocc) + self.alpha = SpatialOrbitals(coeff[0], energy=energy[0], occ=occ[0], labels=labels[0], maxocc=maxocc[0]) + self.beta = SpatialOrbitals(coeff[1], energy=energy[1], occ=occ[1], labels=labels[1], maxocc=maxocc[1]) + +
[docs] @classmethod + def from_spatial_orbitals(cls, orbitals): + energy = (orbitals.energy, orbitals.energy) if orbitals.energy is not None else None + occ = (orbitals.occ/2, orbitals.occ/2) if orbitals.occ is not None else None + labels = (orbitals.labels, orbitals.labels) if orbitals.labels is not None else None + return cls((orbitals.coeff, orbitals.coeff), energy=energy, occ=occ, labels=labels)
+ +
[docs] def to_general_orbitals(self): + return GeneralOrbitals.from_spin_orbitals(self)
+ + @property + def norba(self): + return self.alpha.norb + + @property + def norbb(self): + return self.beta.norb + + @property + def nocca(self): + return self.alpha.nocc + + @property + def noccb(self): + return self.beta.nocc + + @property + def nvira(self): + return self.alpha.nvir + + @property + def nvirb(self): + return self.beta.nvir + + @property + def nspin(self): + return 2 + + def __getattr__(self, name): + if name in ('norb', 'nocc', 'nvir', 'nelec', 'energy', + 'coeff', 'coeff_occ', 'coeff_vir', 'occ', 'labels', 'maxocc'): + return (getattr(self.alpha, name), getattr(self.beta, name)) + raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, name)) + + def __setattr__(self, name, value): + if name in ('energy', 'coeff', 'occ', 'labels'): + setattr(self.alpha, name, value[0]) + setattr(self.beta, name, value[1]) + return + super().__setattr__(name, value) + +
[docs] def basis_transform(self, trafo, inplace=False): + if not hasattr(trafo, '__len__'): + trafo = (trafo, trafo) + cp = self if inplace else self.copy() + cp.alpha.basis_transform(trafo[0], inplace=True) + cp.beta.basis_transform(trafo[1], inplace=True) + return cp
+ +
[docs] def pack(self, dtype=float): + """Pack into a single array of data type `dtype`. + + Useful for communication via MPI.""" + data = (*self.coeff, *self.energy, *self.occ) + return pack_arrays(*data, dtype=dtype)
+ +
[docs] @classmethod + def unpack(cls, packed): + """Unpack from a single array of data type `dtype`. + + Useful for communication via MPI.""" + unpacked = unpack_arrays(packed) + coeff = unpacked[:2] + energy = unpacked[2:4] + occ = unpacked[4:6] + return cls(coeff, energy=energy, occ=occ)
+ + +
[docs]class GeneralOrbitals(SpatialOrbitals): + + @property + def nspin(self): + return 3 + +
[docs] @classmethod + def from_spatial_orbitals(cls, orbitals): + raise NotImplementedError
+ +
[docs] @classmethod + def from_spin_orbitals(cls, orbitals): + raise NotImplementedError
+ +if __name__ == '__main__': + + def test_spatial(nao=20, nocc=5, nvir=15): + coeff = np.random.rand(nao, nao) + energy = np.random.rand(nao) + occ = np.asarray(nocc*[2] + nvir*[0]) + + orbs = SpatialOrbitals(coeff, energy=energy, occ=occ) + #packed = orbs.pack() + #orbs2 = SpatialOrbitals.unpack(packed) + orbs2 = orbs.copy() + assert np.all(orbs.coeff == orbs2.coeff) + assert np.all(orbs.energy == orbs2.energy) + assert np.all(orbs.occ == orbs2.occ) + + def test_spin(nao=20, nocc=5, nvir=15): + coeff = [] + energy = [] + occ = [] + for s in range(2): + coeff.append(np.random.rand(nao, nao)) + energy.append(np.random.rand(nao)) + occ.append(np.asarray(nocc*[2] + nvir*[0])) + + orbs = SpinOrbitals(coeff, energy=energy, occ=occ) + packed = orbs.pack() + orbs2 = SpinOrbitals.unpack(packed) + for s in range(2): + assert np.all(orbs.coeff[s] == orbs2.coeff[s]) + assert np.all(orbs.energy[s] == orbs2.energy[s]) + assert np.all(orbs.occ[s] == orbs2.occ[s]) + + test_spatial() + test_spin() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/wf/ccsd.html b/_modules/vayesta/core/types/wf/ccsd.html new file mode 100644 index 000000000..63f18bb96 --- /dev/null +++ b/_modules/vayesta/core/types/wf/ccsd.html @@ -0,0 +1,428 @@ + + + + + + vayesta.core.types.wf.ccsd — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.wf.ccsd

+import numpy as np
+# TODO: Remove once unnecessary:
+from vayesta.core.vpyscf import ccsd_rdm
+from vayesta.core.vpyscf import uccsd_rdm
+# import pyscf
+# import pyscf.cc
+from vayesta.core import spinalg
+from vayesta.core.util import NotCalculatedError, Object, callif, einsum
+from vayesta.core.types import wf as wf_types
+from vayesta.core.types.orbitals import SpatialOrbitals
+from vayesta.core.types.wf.project import (project_c1, project_c2, project_uc1, project_uc2, symmetrize_c2,
+                                           symmetrize_uc2)
+from vayesta.core.helper import pack_arrays, unpack_arrays
+
+
+
[docs]def CCSD_WaveFunction(mo, t1, t2, **kwargs): + if mo.nspin == 1: + cls = RCCSD_WaveFunction + elif mo.nspin == 2: + cls = UCCSD_WaveFunction + return cls(mo, t1, t2, **kwargs)
+ + +
[docs]class RCCSD_WaveFunction(wf_types.WaveFunction): + + # TODO: Once standard PySCF accepts additional keyword arguments: + #_make_rdm1_backend = pyscf.cc.ccsd_rdm.make_rdm1 + #_make_rdm2_backend = pyscf.cc.ccsd_rdm.make_rdm2 + _make_rdm1_backend = ccsd_rdm.make_rdm1 + _make_rdm2_backend = ccsd_rdm.make_rdm2 + + def __init__(self, mo, t1, t2, l1=None, l2=None, projector=None): + super().__init__(mo, projector=projector) + self.t1 = t1 + self.t2 = t2 + self.l1 = l1 + self.l2 = l2 + +
[docs] def make_rdm1(self, t_as_lambda=False, with_mf=True, ao_basis=False): + if t_as_lambda: + l1, l2 = self.t1, self.t2 + elif (self.l1 is None or self.l2 is None): + raise NotCalculatedError("Lambda-amplitudes required for RDM1.") + else: + l1, l2 = self.l1, self.l2 + fakecc = Object() + fakecc.mo_coeff = self.mo.coeff + dm1 = type(self)._make_rdm1_backend(fakecc, t1=self.t1, t2=self.t2, l1=l1, l2=l2, + with_frozen=False, ao_repr=ao_basis, with_mf=with_mf) + return dm1
+ +
[docs] def make_rdm2(self, t_as_lambda=False, with_dm1=True, ao_basis=False, approx_cumulant=True): + if t_as_lambda: + l1, l2 = self.t1, self.t2 + elif (self.l1 is None or self.l2 is None): + raise NotCalculatedError("Lambda-amplitudes required for RDM2.") + else: + l1, l2 = self.l1, self.l2 + fakecc = Object() + fakecc.mo_coeff = self.mo.coeff + fakecc.stdout = None + fakecc.verbose = 0 + fakecc.max_memory = int(10e9) # 10 GB + dm2 = type(self)._make_rdm2_backend(fakecc, t1=self.t1, t2=self.t2, l1=l1, l2=l2, + with_frozen=False, ao_repr=ao_basis, with_dm1=with_dm1) + if not with_dm1: + if not approx_cumulant: + dm2nc = self.make_rdm2_non_cumulant(t_as_lambda=t_as_lambda, ao_basis=ao_basis) + if isinstance(dm2nc, np.ndarray): + dm2 -= dm2nc + # UHF: + else: + dm2 = tuple((dm2[i]-dm2nc[i]) for i in range(len(dm2nc))) + elif (approx_cumulant in (1, True)): + pass + elif (approx_cumulant == 2): + raise NotImplementedError + else: + raise ValueError + return dm2
+ +
[docs] def make_rdm2_non_cumulant(self, t_as_lambda=False, ao_basis=False): + dm1 = self.make_rdm1(t_as_lambda=t_as_lambda, with_mf=False, ao_basis=ao_basis) + dm2 = (einsum('ij,kl->ijkl', dm1, dm1) - einsum('ij,kl->iklj', dm1, dm1)/2) + return dm2
+ +
[docs] def multiply(self, factor): + self.t1 *= factor + self.t2 *= factor + if self.l1 is not None: + self.l1 *= factor + if self.l2 is not None: + self.l2 *= factor
+ +
[docs] def project(self, projector, inplace=False): + wf = self if inplace else self.copy() + wf.t1 = project_c1(wf.t1, projector) + wf.t2 = project_c2(wf.t2, projector) + wf.l1 = project_c1(wf.l1, projector) + wf.l2 = project_c2(wf.l2, projector) + wf.projector = projector + return wf
+ +
[docs] def pack(self, dtype=float): + """Pack into a single array of data type `dtype`. + + Useful for communication via MPI.""" + mo = self.mo.pack(dtype=dtype) + data = (mo, self.t1, self.t2, self.l1, self.l2, self.projector) + pack = pack_arrays(*data, dtype=dtype) + return pack
+ +
[docs] @classmethod + def unpack(cls, packed): + """Unpack from a single array of data type `dtype`. + + Useful for communication via MPI.""" + mo, t1, t2, l1, l2, projector = unpack_arrays(packed) + mo = SpatialOrbitals.unpack(mo) + return cls(mo, t1, t2, l1=l1, l2=l2, projector=projector)
+ +
[docs] def restore(self, projector=None, inplace=False, sym=True): + if projector is None: projector = self.projector + wf = self.project(projector.T, inplace=inplace) + wf.projector = None + if not sym: + return wf + wf.t2 = symmetrize_c2(wf.t2) + if wf.l2 is None: + return wf + wf.l2 = symmetrize_c2(wf.l2) + return wf
+ +
[docs] def copy(self): + t1 = spinalg.copy(self.t1) + t2 = spinalg.copy(self.t2) + l1 = callif(spinalg.copy, self.l1) + l2 = callif(spinalg.copy, self.l2) + proj = callif(spinalg.copy, self.projector) + return type(self)(self.mo.copy(), t1, t2, l1=l1, l2=l2, projector=proj)
+ +
[docs] def as_unrestricted(self): + if self.projector is not None: + raise NotImplementedError + mo = self.mo.to_spin_orbitals() + def _to_uccsd(t1, t2): + t1, t2 = self.t1.copy, self.t2.copy() + t2aa = t2 - t2.transpose(0,1,3,2) + return (t1, t1), (t2aa, t2, t2aa) + t1, t2 = _to_uccsd(self.t1, self.t2) + l1 = l2 = None + if self.l1 is not None and self.l2 is not None: + l1, l2 = _to_uccsd(self.l1, self.l2) + return UCCSD_WaveFunction(mo, t1, t2, l1=l1, l2=l2)
+ +
[docs] def as_mp2(self): + raise NotImplementedError
+ +
[docs] def as_cisd(self, c0=1.0): + """In intermediate normalization.""" + if self.projector is not None: + raise NotImplementedError + c1 = c0*self.t1 + c2 = c0*(self.t2 + einsum('ia,jb->ijab', self.t1, self.t1)) + return wf_types.RCISD_WaveFunction(self.mo, c0, c1, c2, projector=self.projector)
+ +
[docs] def as_ccsd(self): + return self
+ +
[docs] def as_fci(self): + raise NotImplementedError
+ + +
[docs]class UCCSD_WaveFunction(RCCSD_WaveFunction): + + # TODO + #_make_rdm1_backend = pyscf.cc.uccsd_rdm.make_rdm1 + #_make_rdm2_backend = pyscf.cc.uccsd_rdm.make_rdm2 + _make_rdm1_backend = uccsd_rdm.make_rdm1 + _make_rdm2_backend = uccsd_rdm.make_rdm2 + + # Spin blocks of T-Amplitudes + + @property + def t1a(self): + return self.t1[0] + + @property + def t1b(self): + return self.t1[1] + + @property + def t2aa(self): + return self.t2[0] + + @property + def t2ab(self): + return self.t2[1] + + @property + def t2ba(self): + if len(self.t2) == 4: + return self.t2[2] + return self.t2ab.transpose(1,0,3,2) + + @property + def t2bb(self): + return self.t2[-1] + + # Spin blocks of L-Amplitudes + + @property + def l1a(self): + return self.l1[0] + + @property + def l1b(self): + return self.l1[1] + + @property + def l2aa(self): + return self.l2[0] + + @property + def l2ab(self): + return self.l2[1] + + @property + def l2ba(self): + if len(self.l2) == 4: + return self.l2[2] + return self.l2ab.transpose(1,0,3,2) + + @property + def l2bb(self): + return self.l2[-1] + +
[docs] def make_rdm2_non_cumulant(self, t_as_lambda=False, ao_basis=False): + dm1a, dm1b = self.make_rdm1(t_as_lambda=t_as_lambda, with_mf=False, ao_basis=ao_basis) + dm2aa = (einsum('ij,kl->ijkl', dm1a, dm1a) - einsum('ij,kl->iklj', dm1a, dm1a)) + dm2bb = (einsum('ij,kl->ijkl', dm1b, dm1b) - einsum('ij,kl->iklj', dm1b, dm1b)) + dm2ab = einsum('ij,kl->ijkl', dm1a, dm1b) + dm2 = (dm2aa, dm2ab, dm2bb) + return dm2
+ +
[docs] def project(self, projector, inplace=False): + wf = self if inplace else self.copy() + wf.t1 = project_uc1(wf.t1, projector) + wf.t2 = project_uc2(wf.t2, projector) + wf.l1 = project_uc1(wf.l1, projector) + wf.l2 = project_uc2(wf.l2, projector) + wf.projector = projector + return wf
+ +
[docs] def restore(self, projector=None, inplace=False, sym=True): + if projector is None: projector = self.projector + wf = self.project((projector[0].T, projector[1].T), inplace=inplace) + wf.projector = None + if not sym: + return wf + wf.t2 = symmetrize_uc2(wf.t2) + if self.l2 is None: + return wf + wf.l2 = symmetrize_uc2(wf.l2) + return wf
+ +
[docs] def as_mp2(self): + raise NotImplementedError
+ +
[docs] def as_cisd(self, c0=1.0): + if self.projector is not None: + raise NotImplementedError + c1a = c0*self.t1a + c1b = c0*self.t1b + c2aa = c0*(self.t2aa + einsum('ia,jb->ijab', self.t1a, self.t1a) + - einsum('ib,ja->ijab', self.t1a, self.t1a)) + c2bb = c0*(self.t2bb + einsum('ia,jb->ijab', self.t1b, self.t1b) + - einsum('ib,ja->ijab', self.t1b, self.t1b)) + c2ab = c0*(self.t2ab + einsum('ia,jb->ijab', self.t1a, self.t1b)) + c1 = (c1a, c1b) + if len(self.t2) == 3: + c2 = (c2aa, c2ab, c2bb) + elif len(self.t2) == 4: + c2ba = c0*self.t2ba + einsum('ia,jb->ijab', c1b, c1a) + c2 = (c2aa, c2ab, c2ba, c2bb) + return wf_types.UCISD_WaveFunction(self.mo, c0, c1, c2, projector=self.projector)
+ +
[docs] def as_fci(self): + raise NotImplementedError
+ +
[docs] def multiply(self, factor): + self.t1 = spinalg.multiply(self.t1, len(self.t1)*[factor]) + self.t2 = spinalg.multiply(self.t2, len(self.t2)*[factor]) + if self.l1 is not None: + self.l1 = spinalg.multiply(self.l1, len(self.l1)*[factor]) + if self.l2 is not None: + self.l2 = spinalg.multiply(self.l2, len(self.l2)*[factor])
+ + #def pack(self, dtype=float): + # """Pack into a single array of data type `dtype`. + + # Useful for communication via MPI.""" + # mo = self.mo.pack(dtype=dtype) + # l1 = self.l1 is not None else [None, None] + # l2 = self.l2 is not None else len(self.t2)*[None] + # projector = self.projector is not None else [None] + # data = (mo, *self.t1, *self.t2, *l1, *l2, *projector) + # pack = pack_arrays(*data, dtype=dtype) + # return pack + + #@classmethod + #def unpack(cls, packed): + # """Unpack from a single array of data type `dtype`. + + # Useful for communication via MPI.""" + # mo, *unpacked = unpack_arrays(packed) + # mo = SpinOrbitals.unpack(mo) + # t1a, t1b, t2, l1, l2, projector = + # wf = cls(mo, t1, t2, l1=l1, l2=l2) + # if projector is not None: + # wf.projector = projector + # return wf +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/wf/ccsdtq.html b/_modules/vayesta/core/types/wf/ccsdtq.html new file mode 100644 index 000000000..1fcdd94b6 --- /dev/null +++ b/_modules/vayesta/core/types/wf/ccsdtq.html @@ -0,0 +1,150 @@ + + + + + + vayesta.core.types.wf.ccsdtq — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.wf.ccsdtq

+from vayesta.core.types import wf as wf_types
+
+
+
[docs]def CCSDTQ_WaveFunction(mo, *args, **kwargs): + if mo.nspin == 1: + cls = RCCSDTQ_WaveFunction + elif mo.nspin == 2: + cls = UCCSDTQ_WaveFunction + return cls(mo, *args, **kwargs)
+ + +
[docs]class RCCSDTQ_WaveFunction(wf_types.WaveFunction): + # TODO: Contract T4's down to intermediates to reduce EC-CC memory overheads. + + def __init__(self, mo, t1, t2, t3, t4): + super().__init__(mo) + self.t1 = t1 + self.t2 = t2 + self.t3 = t3 + self.t4 = t4 + self._check_amps() + + def _check_amps(self): + if not (isinstance(self.t4, tuple) and len(self.t4) == 2): + raise ValueError("t4 definition in RCCSDTQ wfn requires tuple of (abaa, abab) spin signatures") + +
[docs] def as_ccsdtq(self): + return self
+ +
[docs] def as_ccsd(self): + if self.projector is not None: + raise NotImplementedError + return wf_types.CCSD_WaveFunction(self.mo, self.t1, self.t2)
+ +
[docs] def as_cisd(self, c0=1.0): + return self.as_ccsd().as_cisd()
+ +
[docs]class UCCSDTQ_WaveFunction(RCCSDTQ_WaveFunction): + def _check_amps(self): + if not (isinstance(self.t3, tuple) and len(self.t3) == 4): + raise ValueError("t4 definition in UCCSDTQ wfn requires tuple of (aaa, aba, bab, bbb) spin signatures") + if not (isinstance(self.t4, tuple) and len(self.t4) == 5): + raise ValueError( + "t4 definition in UCCSDTQ wfn requires tuple of (aaaa, aaab, abab, abbb, bbbb) spin signatures")
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/wf/cisd.html b/_modules/vayesta/core/types/wf/cisd.html new file mode 100644 index 000000000..c8a68cb2a --- /dev/null +++ b/_modules/vayesta/core/types/wf/cisd.html @@ -0,0 +1,293 @@ + + + + + + vayesta.core.types.wf.cisd — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.wf.cisd

+import numpy as np
+import pyscf
+import pyscf.ci
+from vayesta.core import spinalg
+from vayesta.core.util import callif, einsum
+from vayesta.core.types import wf as wf_types
+from vayesta.core.types.wf.project import (project_c1, project_c2, project_uc1, project_uc2, symmetrize_c2,
+                                           symmetrize_uc2)
+
+
+
[docs]def CISD_WaveFunction(mo, c0, c1, c2, **kwargs): + if mo.nspin == 1: + cls = RCISD_WaveFunction + elif mo.nspin == 2: + cls = UCISD_WaveFunction + return cls(mo, c0, c1, c2, **kwargs)
+ + +
[docs]class RCISD_WaveFunction(wf_types.WaveFunction): + + def __init__(self, mo, c0, c1, c2, projector=None): + super().__init__(mo, projector=projector) + self.c0 = c0 + self.c1 = c1 + self.c2 = c2 + +
[docs] def project(self, projector, inplace=False): + wf = self if inplace else self.copy() + wf.c1 = project_c1(wf.c1, projector) + wf.c2 = project_c2(wf.c2, projector) + wf.projector = projector + return wf
+ +
[docs] def restore(self, projector=None, inplace=False, sym=True): + if projector is None: projector = self.projector + wf = self.project(projector.T, inplace=inplace) + wf.projector = None + if not sym: + return wf + wf.c2 = symmetrize_c2(wf.c2) + return wf
+ +
[docs] def copy(self): + c0 = self.c0 + c1 = spinalg.copy(self.c1) + c2 = spinalg.copy(self.c2) + proj = callif(spinalg.copy, self.projector) + return type(self)(self.mo.copy(), c0, c1, c2, projector=proj)
+ +
[docs] def as_mp2(self): + raise NotImplementedError
+ +
[docs] def as_cisd(self, c0=None): + if c0 is None: + return self + c1 = self.c1 * c0/self.c0 + c2 = self.c2 * c0/self.c0 + return RCISD_WaveFunction(self.mo, c0, c1, c2, projector=self.projector)
+ +
[docs] def as_ccsd(self): + proj = self.projector + if proj is not None: + self = self.restore() + t1 = self.c1/self.c0 + t2 = self.c2/self.c0 - einsum('ia,jb->ijab', t1, t1) + l1, l2 = t1, t2 + wf = wf_types.RCCSD_WaveFunction(self.mo, t1, t2, l1=l1, l2=l2, projector=self.projector) + if proj is not None: + wf = wf.project(proj) + return wf
+ +
[docs] def get_cisdvec(self): + if self.projector is not None: + raise NotImplementedError + return np.hstack((self.c0, self.c1.ravel(), self.c2.ravel()))
+ +
[docs] def as_fci(self): + ci = pyscf.ci.cisd.to_fcivec(self.get_cisdvec(), self.mo.norb, self.mo.nelec) + return wf_types.RFCI_WaveFunction(self.mo, ci, projector=self.projector)
+ + +
[docs]class UCISD_WaveFunction(RCISD_WaveFunction): + + @property + def c1a(self): + return self.c1[0] + + @property + def c1b(self): + return self.c1[1] + + @property + def c2aa(self): + return self.c2[0] + + @property + def c2ab(self): + return self.c2[1] + + @property + def c2ba(self): + if len(self.c2) == 4: + return self.c2[2] + return self.c2ab.transpose(1,0,3,2) + + @property + def c2bb(self): + return self.c2[-1] + +
[docs] def project(self, projector, inplace=False): + wf = self if inplace else self.copy() + wf.c1 = project_uc1(wf.c1, projector) + wf.c2 = project_uc2(wf.c2, projector) + wf.projector = projector + return wf
+ +
[docs] def restore(self, projector=None, inplace=False, sym=True): + if projector is None: projector = self.projector + wf = self.project((projector[0].T, projector[1].T), inplace=inplace) + wf.projector = None + if not sym: + return wf + wf.c2 = symmetrize_uc2(wf.c2) + return wf
+ +
[docs] def as_mp2(self): + raise NotImplementedError
+ +
[docs] def as_cisd(self, c0=None): + if c0 is None: + return self + c1a = self.c1a * c0/self.c0 + c1b = self.c1b * c0/self.c0 + c2aa = self.c2aa * c0/self.c0 + c2ab = self.c2ab * c0/self.c0 + c2bb = self.c2bb * c0/self.c0 + c1 = (c1a, c1b) + if len(self.c2) == 3: + c2 = (c2aa, c2ab, c2bb) + elif len(self.c2) == 4: + c2ba = self.c2ba * c0/self.c0 + c2 = (c2aa, c2ab, c2ba, c2bb) + return wf_types.UCISD_WaveFunction(self.mo, c0, c1, c2, projector=self.projector)
+ +
[docs] def as_ccsd(self): + proj = self.projector + if proj is not None: + self = self.restore() + t1a = self.c1a/self.c0 + t1b = self.c1b/self.c0 + t1 = (t1a, t1b) + t2aa = self.c2aa/self.c0 - einsum('ia,jb->ijab', t1a, t1a) + einsum('ib,ja->ijab', t1a, t1a) + t2bb = self.c2bb/self.c0 - einsum('ia,jb->ijab', t1b, t1b) + einsum('ib,ja->ijab', t1b, t1b) + t2ab = self.c2ab/self.c0 - einsum('ia,jb->ijab', t1a, t1b) + if len(self.c2) == 3: + t2 = (t2aa, t2ab, t2bb) + elif len(self.c2) == 4: + t2ba = self.c2ab/self.c0 - einsum('ia,jb->ijab', t1b, t1a) + t2 = (t2aa, t2ab, t2ba, t2bb) + l1, l2 = t1, t2 + wf = wf_types.UCCSD_WaveFunction(self.mo, t1, t2, l1=l1, l2=l2, projector=self.projector) + if proj is not None: + wf = wf.project(proj) + return wf
+ +
[docs] def get_cisdvec(self): + if self.projector is not None: + raise NotImplementedError + return pyscf.ci.ucisd.amplitudes_to_cisdvec(self.c0, self.c1, self.c2)
+ +
[docs] def as_fci(self): + norb = self.mo.norb + if norb[0] != norb[1]: + # TODO: Allow padding via frozen argument? + raise NotImplementedError + try: + ci = pyscf.ci.ucisd.to_fcivec(self.get_cisdvec(), norb[0], self.mo.nelec) + except ValueError as e: + nocca, noccb = self.mo.nelec + nvira, nvirb = norb[0] - nocca, norb[1] - noccb + + if (0 in [nocca, nvira]) and (0 in [noccb, nvirb]): + ci = np.full((1, 1), fill_value=1.0) + else: + raise e + + return wf_types.UFCI_WaveFunction(self.mo, ci, projector=self.projector)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/wf/cisdtq.html b/_modules/vayesta/core/types/wf/cisdtq.html new file mode 100644 index 000000000..8670385ef --- /dev/null +++ b/_modules/vayesta/core/types/wf/cisdtq.html @@ -0,0 +1,171 @@ + + + + + + vayesta.core.types.wf.cisdtq — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.wf.cisdtq

+from vayesta.core.types import wf as wf_types
+from vayesta.core.types.wf import t_to_c
+
+
+
[docs]def CISDTQ_WaveFunction(mo, *args, **kwargs): + if mo.nspin == 1: + cls = RCISDTQ_WaveFunction + elif mo.nspin == 2: + cls = UCISDTQ_WaveFunction + return cls(mo, *args, **kwargs)
+ + +
[docs]class RCISDTQ_WaveFunction(wf_types.WaveFunction): + + def __init__(self, mo, c0, c1, c2, c3, c4): + super().__init__(mo) + self.c0 = c0 + self.c1 = c1 + self.c2 = c2 + self.c3 = c3 + self.c4 = c4 + if not (isinstance(c4, tuple) and len(c4) == 2): + raise ValueError("c4 definition in RCISDTQ wfn requires tuple of (abaa, abab) spin signatures") + +
[docs] def as_ccsdtq(self): + c1 = self.c1 / self.c0 + c2 = self.c2 / self.c0 + c3 = self.c3 / self.c0 + c4 = tuple(c / self.c0 for c in self.c4) + + t1 = t_to_c.t1_rhf(c1) + t2 = t_to_c.t2_rhf(t1, c2) + t3 = t_to_c.t3_rhf(t1, t2, c3) + t4 = t_to_c.t4_rhf(t1, t2, t3, c4) + + return wf_types.RCCSDTQ_WaveFunction(self.mo, t1=t1, t2=t2, t3=t3, t4=t4)
+ + +
[docs]class UCISDTQ_WaveFunction(wf_types.WaveFunction): + + def __init__(self, mo, c0, c1, c2, c3, c4): + super().__init__(mo) + self.c0 = c0 + self.c1 = c1 + self.c2 = c2 + self.c3 = c3 + self.c4 = c4 + if not (isinstance(c3, tuple) and len(c3) == 4): + raise ValueError("c4 definition in UCISDTQ wfn requires tuple of (aaa, aba, bab, bbb) spin signatures") + if not (isinstance(c4, tuple) and len(c4) == 5): + raise ValueError( + "c4 definition in UCISDTQ wfn requires tuple of (aaaa, aaab, abab, abbb, bbbb) spin signatures") + +
[docs] def as_ccsdtq(self): + c1 = tuple(c / self.c0 for c in self.c1) + c2 = tuple(c / self.c0 for c in self.c2) + c3 = tuple(c / self.c0 for c in self.c3) + c4 = tuple(c / self.c0 for c in self.c4) + + t1 = t_to_c.t1_uhf(c1) + t2 = t_to_c.t2_uhf(t1, c2) + t3 = t_to_c.t3_uhf(t1, t2, c3) + t4 = t_to_c.t4_uhf(t1, t2, t3, c4) + + return wf_types.UCCSDTQ_WaveFunction(self.mo, t1=t1, t2=t2, t3=t3, t4=t4)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/wf/fci.html b/_modules/vayesta/core/types/wf/fci.html new file mode 100644 index 000000000..8457d7a04 --- /dev/null +++ b/_modules/vayesta/core/types/wf/fci.html @@ -0,0 +1,596 @@ + + + + + + vayesta.core.types.wf.fci — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.wf.fci

+import numpy as np
+import pyscf
+import pyscf.fci
+from vayesta.core.util import decompress_axes, dot, einsum, tril_indices_ndim
+from vayesta.core.types import wf as wf_types
+
+
[docs]def FCI_WaveFunction(mo, ci, **kwargs): + if mo.nspin == 1: + cls = RFCI_WaveFunction + elif mo.nspin == 2: + cls = UFCI_WaveFunction + return cls(mo, ci, **kwargs)
+ + +
[docs]class RFCI_WaveFunction(wf_types.WaveFunction): + + def __init__(self, mo, ci, projector=None): + super().__init__(mo, projector=projector) + self.ci = ci + +
[docs] def make_rdm1(self, ao_basis=False, with_mf=True): + dm1 = pyscf.fci.direct_spin1.make_rdm1(self.ci, self.norb, self.nelec) + if not with_mf: + dm1[np.diag_indices(self.nocc)] -= 2 + if not ao_basis: + return dm1 + return dot(self.mo.coeff, dm1, self.mo.coeff.T)
+ +
[docs] def make_rdm2(self, ao_basis=False, with_dm1=True, approx_cumulant=True): + dm1, dm2 = pyscf.fci.direct_spin1.make_rdm12(self.ci, self.norb, self.nelec) + if not with_dm1: + if not approx_cumulant: + dm2 -= (einsum('ij,kl->ijkl', dm1, dm1) - einsum('ij,kl->iklj', dm1, dm1)/2) + elif (approx_cumulant in (1, True)): + dm1[np.diag_indices(self.nocc)] -= 1 + for i in range(self.nocc): + dm2[i,i,:,:] -= 2*dm1 + dm2[:,:,i,i] -= 2*dm1 + dm2[:,i,i,:] += dm1 + dm2[i,:,:,i] += dm1 + elif (approx_cumulant == 2): + raise NotImplementedError + else: + raise ValueError + if not ao_basis: + return dm2 + return einsum('ijkl,ai,bj,ck,dl->abcd', dm2, *(4*[self.mo.coeff]))
+ +
[docs] def project(self, projector, inplace=False): + raise NotImplementedError
+ +
[docs] def restore(self, projector=None, inplace=False): + raise NotImplementedError
+ + @property + def c0(self): + return self.ci[0,0] + +
[docs] def as_unrestricted(self): + mo = self.mo.to_spin_orbitals() + return UFCI_WaveFunction(mo, self.ci)
+ +
[docs] def as_mp2(self): + raise self.as_cisd().as_mp2()
+ +
[docs] def as_cisd(self, c0=None): + if self.projector is not None: + raise NotImplementedError + norb, nocc, nvir = self.norb, self.nocc, self.nvir + t1addr, t1sign = pyscf.ci.cisd.t1strs(norb, nocc) + + # Change to arrays, in case of empty slice + t1addr = np.asarray(t1addr, dtype=int) + + c1 = self.ci[0,t1addr] * t1sign + c2 = einsum('i,j,ij->ij', t1sign, t1sign, self.ci[t1addr[:,None],t1addr]) + c1 = c1.reshape(nocc,nvir) + c2 = c2.reshape(nocc,nvir,nocc,nvir).transpose(0,2,1,3) + if c0 is None: + c0 = self.c0 + else: + c1 *= c0/self.c0 + c2 *= c0/self.c0 + return wf_types.RCISD_WaveFunction(self.mo, c0, c1, c2, projector=self.projector)
+ +
[docs] def as_cisdtq(self, c0=None): + if self.projector is not None: + raise NotImplementedError + norb, nocc, nvir = self.norb, self.nocc, self.nvir + # For packed 2D arrays + ij_pairs = int(nocc * (nocc - 1) / 2) + ab_pairs = int(nvir * (nvir - 1) / 2) + ooidx = np.tril_indices(nocc, -1) # second index lower than first + vvidx = np.tril_indices(nvir, -1) # second index lower than first + # For packed 3D arrays + oooidx = tril_indices_ndim(nocc, 3) # i > j > k + vvvidx = tril_indices_ndim(nvir, 3) # a > b > c + ijk_pairs = int(nocc * (nocc - 1) * (nocc - 2) / 6) + abc_pairs = int(nvir * (nvir - 1) * (nvir - 2) / 6) + + t1addr, t1sign = pyscf.ci.cisd.tn_addrs_signs(norb, nocc, 1) + t2addr, t2sign = pyscf.ci.cisd.tn_addrs_signs(norb, nocc, 2) + t3addr, t3sign = pyscf.ci.cisd.tn_addrs_signs(norb, nocc, 3) + t4addr, t4sign = pyscf.ci.cisd.tn_addrs_signs(norb, nocc, 4) + + t1addr = np.asarray(t1addr, dtype=int) + t2addr = np.asarray(t2addr, dtype=int) + t3addr = np.asarray(t3addr, dtype=int) + t4addr = np.asarray(t4addr, dtype=int) + + # === C1 amplitudes === + # These functions extract out the indicies and signs of + # the *same spin* excitations of a given rank from the FCI vector + # C1 are taken to be the beta -> beta excitations (which should be + # the same as alpha -> alpha), by taking the first (alpha) index to be doubly occupied. + c1 = self.ci[0,t1addr] * t1sign + c1 = c1.reshape((nocc, nvir)) + + # === C2 amplitudes === + # For RHF, we want the (alpha, beta) -> (alpha, beta) excitation amplitudes. + # Therefore, we can just take single excitations of alpha and + # combine with the single excitations of beta. + c2 = np.einsum('i,j,ij->ij', t1sign, t1sign, self.ci[t1addr[:, None], t1addr]) + c2 = c2.reshape((nocc, nvir, nocc, nvir)) + c2 = c2.transpose(0, 2, 1, 3) + + # === C3 amplitudes === + # For the C3 amplitudes, we want to find the ijk -> abc amplitudes of + # spin signature (alpha, beta, alpha) -> (alpha, beta, alpha) + c3 = np.einsum('i,j,ij->ij', t2sign, t1sign, self.ci[t2addr[:, None], t1addr]) + c3 = decompress_axes("iiaajb", c3, shape=(nocc, nocc, nvir, nvir, nocc, nvir)) + c3 = c3.transpose(0, 4, 1, 2, 5, 3) + + # === C4 amplitudes === + # For the C4 amplitudes, ijkl -> abcd, we are going to store two different spin + # signatures: + # (alpha, beta, alpha, beta) -> (alpha, beta, alpha, beta) and + # (alpha, beta, alpha, alpha) -> (alpha, beta, alpha, alpha) + c4_abaa = np.einsum('i,j,ij->ij', t3sign, t1sign, self.ci[t3addr[:, None], t1addr]) + c4_abaa = decompress_axes("iiiaaajb", c4_abaa, shape=(nocc, nocc, nocc, nvir, nvir, nvir, nocc, nvir)) + c4_abaa = c4_abaa.transpose(0, 6, 2, 1, 3, 7, 5, 4) + c4_abab = np.einsum('i,j,ij->ij', t2sign, t2sign, self.ci[t2addr[:, None], t2addr]) + c4_abab = decompress_axes("iiaajjbb", c4_abab, shape=(nocc, nocc, nvir, nvir, nocc, nocc, nvir, nvir)) + c4_abab = c4_abab.transpose(0, 4, 1, 5, 2, 6, 3, 7) + + if c0 is None: + c0 = self.c0 + else: + c1 *= c0/self.c0 + c2 *= c0/self.c0 + c3 *= c0/self.c0 + c4_abab *= c0/self.c0 + c4_abaa *= c0/self.c0 + + return wf_types.RCISDTQ_WaveFunction(self.mo, c0, c1, c2, c3, (c4_abaa, c4_abab))
+ +
[docs] def as_ccsd(self): + return self.as_cisd().as_ccsd()
+ +
[docs] def as_ccsdtq(self): + return self.as_cisdtq().as_ccsdtq()
+ +
[docs] def as_fci(self): + return self
+ + +
[docs]class UFCI_WaveFunction(RFCI_WaveFunction): + +
[docs] def make_rdm1(self, ao_basis=False, with_mf=True): + assert (self.norb[0] == self.norb[1]) + dm1 = pyscf.fci.direct_spin1.make_rdm1s(self.ci, self.norb[0], self.nelec) + if not with_mf: + dm1[0][np.diag_indices(self.nocc[0])] -= 1 + dm1[1][np.diag_indices(self.nocc[1])] -= 1 + if not ao_basis: + return dm1 + return (dot(self.mo.coeff[0], dm1[0], self.mo.coeff[0].T), + dot(self.mo.coeff[1], dm1[1], self.mo.coeff[1].T))
+ +
[docs] def make_rdm2(self, ao_basis=False, with_dm1=True, approx_cumulant=True): + assert (self.norb[0] == self.norb[1]) + dm1, dm2 = pyscf.fci.direct_spin1.make_rdm12s(self.ci, self.norb[0], self.nelec) + if not with_dm1: + dm1a, dm1b = dm1 + dm2aa, dm2ab, dm2bb = dm2 + if not approx_cumulant: + dm2aa -= (einsum('ij,kl->ijkl', dm1a, dm1a) - einsum('ij,kl->iklj', dm1a, dm1a)) + dm2bb -= (einsum('ij,kl->ijkl', dm1b, dm1b) - einsum('ij,kl->iklj', dm1b, dm1b)) + dm2ab -= einsum('ij,kl->ijkl', dm1a, dm1b) + elif (approx_cumulant in (1, True)): + dm1a[np.diag_indices(self.nocca)] -= 0.5 + dm1b[np.diag_indices(self.noccb)] -= 0.5 + for i in range(self.nocca): + dm2aa[i,i,:,:] -= dm1a + dm2aa[:,:,i,i] -= dm1a + dm2aa[:,i,i,:] += dm1a + dm2aa[i,:,:,i] += dm1a + dm2ab[i,i,:,:] -= dm1b + for i in range(self.noccb): + dm2bb[i,i,:,:] -= dm1b + dm2bb[:,:,i,i] -= dm1b + dm2bb[:,i,i,:] += dm1b + dm2bb[i,:,:,i] += dm1b + dm2ab[:,:,i,i] -= dm1a + elif (approx_cumulant == 2): + raise NotImplementedError + else: + raise ValueError + if not ao_basis: + return dm2 + moa, mob = self.mo.coeff + return (einsum('ijkl,ai,bj,ck,dl->abcd', dm2[0], *(4*[moa])), + einsum('ijkl,ai,bj,ck,dl->abcd', dm2[1], *[moa, moa, mob, mob]), + einsum('ijkl,ai,bj,ck,dl->abcd', dm2[2], *(4*[mob])))
+ +
[docs] def as_cisd(self, c0=None): + if self.projector is not None: + raise NotImplementedError + norba, norbb = self.norb + nocca, noccb = self.nocc + nvira, nvirb = self.nvir + + t1addra, t1signa = pyscf.ci.cisd.tn_addrs_signs(norba, nocca, 1) + t1addrb, t1signb = pyscf.ci.cisd.tn_addrs_signs(norbb, noccb, 1) + t2addra, t2signa = pyscf.ci.cisd.tn_addrs_signs(norba, nocca, 2) + t2addrb, t2signb = pyscf.ci.cisd.tn_addrs_signs(norbb, noccb, 2) + + # Change to arrays, in case of empty slice + t1addra = np.asarray(t1addra, dtype=int) + t1addrb = np.asarray(t1addrb, dtype=int) + + na = pyscf.fci.cistring.num_strings(norba, nocca) + nb = pyscf.fci.cistring.num_strings(norbb, noccb) + + ci = self.ci.reshape(na,nb) + c1a = (self.ci[t1addra,0] * t1signa).reshape(nocca,nvira) + c1b = (self.ci[0,t1addrb] * t1signb).reshape(noccb,nvirb) + + nocca_comp = nocca*(nocca-1)//2 + noccb_comp = noccb*(noccb-1)//2 + nvira_comp = nvira*(nvira-1)//2 + nvirb_comp = nvirb*(nvirb-1)//2 + c2aa = (self.ci[t2addra,0] * t2signa).reshape(nocca_comp, nvira_comp) + c2bb = (self.ci[0,t2addrb] * t2signb).reshape(noccb_comp, nvirb_comp) + c2aa = pyscf.cc.ccsd._unpack_4fold(c2aa, nocca, nvira) + c2bb = pyscf.cc.ccsd._unpack_4fold(c2bb, noccb, nvirb) + c2ab = einsum('i,j,ij->ij', t1signa, t1signb, self.ci[t1addra[:,None],t1addrb]) + c2ab = c2ab.reshape(nocca,nvira,noccb,nvirb).transpose(0,2,1,3) + if c0 is None: + c0 = self.c0 + else: + c1a *= c0/self.c0 + c1b *= c0/self.c0 + c2aa *= c0/self.c0 + c2ab *= c0/self.c0 + c2bb *= c0/self.c0 + c1 = (c1a, c1b) + c2 = (c2aa, c2ab, c2bb) + return wf_types.UCISD_WaveFunction(self.mo, c0, c1, c2, projector=self.projector)
+ +
[docs] def as_cisdtq(self, c0=None): + if self.projector is not None: + raise NotImplementedError + + norba, norbb = self.norb + nocca, noccb = self.nocc + nvira, nvirb = self.nvir + + ij_pairs_a = int(nocca * (nocca - 1) / 2) + ab_pairs_a = int(nvira * (nvira - 1) / 2) + ij_pairs_b = int(noccb * (noccb - 1) / 2) + ab_pairs_b = int(nvirb * (nvirb - 1) / 2) + ooidx_a = np.tril_indices(nocca, -1) # second index lower than first + vvidx_a = np.tril_indices(nvira, -1) # second index lower than first + ooidx_b = np.tril_indices(noccb, -1) # second index lower than first + vvidx_b = np.tril_indices(nvirb, -1) # second index lower than first + # For packed 3D arrays + oooidx_a = tril_indices_ndim(nocca, 3) # i > j > k + vvvidx_a = tril_indices_ndim(nvira, 3) # a > b > c + ijk_pairs_a = int(nocca * (nocca - 1) * (nocca - 2) / 6) + abc_pairs_a = int(nvira * (nvira - 1) * (nvira - 2) / 6) + oooidx_b = tril_indices_ndim(noccb, 3) # i > j > k + vvvidx_b = tril_indices_ndim(nvirb, 3) # a > b > c + ijk_pairs_b = int(noccb * (noccb - 1) * (noccb - 2) / 6) + abc_pairs_b = int(nvirb * (nvirb - 1) * (nvirb - 2) / 6) + + ijkl_pairs_a = int(nocca * (nocca - 1) * (nocca - 2) * (nocca - 3) / 24) + abcd_pairs_a = int(nvira * (nvira - 1) * (nvira - 2) * (nvira - 3) / 24) + ijkl_pairs_b = int(noccb * (noccb - 1) * (noccb - 2) * (noccb - 3) / 24) + abcd_pairs_b = int(nvirb * (nvirb - 1) * (nvirb - 2) * (nvirb - 3) / 24) + + t1addra, t1signa = pyscf.ci.cisd.tn_addrs_signs(norba, nocca, 1) + t1addrb, t1signb = pyscf.ci.cisd.tn_addrs_signs(norbb, noccb, 1) + t2addra, t2signa = pyscf.ci.cisd.tn_addrs_signs(norba, nocca, 2) + t2addrb, t2signb = pyscf.ci.cisd.tn_addrs_signs(norbb, noccb, 2) + t3addra, t3signa = pyscf.ci.cisd.tn_addrs_signs(norba, nocca, 3) + t3addrb, t3signb = pyscf.ci.cisd.tn_addrs_signs(norbb, noccb, 3) + t4addra, t4signa = pyscf.ci.cisd.tn_addrs_signs(norba, nocca, 4) + t4addrb, t4signb = pyscf.ci.cisd.tn_addrs_signs(norbb, noccb, 4) + + # Change to arrays, in case of empty slice + t1addra = np.asarray(t1addra, dtype=int) + t1addrb = np.asarray(t1addrb, dtype=int) + t2addra = np.asarray(t2addra, dtype=int) + t2addrb = np.asarray(t2addrb, dtype=int) + t3addra = np.asarray(t3addra, dtype=int) + t3addrb = np.asarray(t3addrb, dtype=int) + t4addra = np.asarray(t4addra, dtype=int) + t4addrb = np.asarray(t4addrb, dtype=int) + + na = pyscf.fci.cistring.num_strings(norba, nocca) + nb = pyscf.fci.cistring.num_strings(norbb, noccb) + + # C1 + c1_a = (self.ci[t1addra,0] * t1signa).reshape(nocca,nvira) + c1_b = (self.ci[0,t1addrb] * t1signb).reshape(noccb,nvirb) + + # C2 + c2_aa = (self.ci[t2addra,0] * t2signa).reshape(ij_pairs_a, ab_pairs_a) + c2_aa = pyscf.cc.ccsd._unpack_4fold(c2_aa, nocca, nvira) + + c2_bb = (self.ci[0,t2addrb] * t2signb).reshape(ij_pairs_b, ab_pairs_b) + c2_bb = pyscf.cc.ccsd._unpack_4fold(c2_bb, noccb, nvirb) + + c2_ab = einsum('i,j,ij->ij', t1signa, t1signb, self.ci[t1addra[:, None], t1addrb]) + c2_ab = c2_ab.reshape(nocca, nvira, noccb, nvirb) + c2_ab = c2_ab.transpose(0, 2, 1, 3) + + # C3 + c3_aaa = (self.ci[t3addra,0] * t3signa).reshape(ijk_pairs_a, abc_pairs_a) + c3_aaa = decompress_axes("iiiaaa", c3_aaa, shape=(nocca, nocca, nocca, nvira, nvira, nvira)) + + c3_bbb = (self.ci[0,t3addrb] * t3signb).reshape(ijk_pairs_b, abc_pairs_b) + c3_bbb = decompress_axes("iiiaaa", c3_bbb, shape=(noccb, noccb, noccb, nvirb, nvirb, nvirb)) + + c3_aba = np.einsum('i,j,ij->ij', t2signa, t1signb, self.ci[t2addra[:, None], t1addrb]) + c3_aba = decompress_axes("iiaajb", c3_aba, shape=(nocca, nocca, nvira, nvira, noccb, nvirb)) + c3_aba = c3_aba.transpose(0, 4, 1, 2, 5, 3) + + c3_bab = np.einsum('i,j,ij->ij', t1signa, t2signb, self.ci[t1addra[:, None], t2addrb]) + c3_bab = decompress_axes("iajjbb", c3_bab, shape=(nocca, nvira, noccb, noccb, nvirb, nvirb)) + c3_bab = c3_bab.transpose(2, 0, 3, 4, 1, 5) + + # C4 + c4_aaaa = (self.ci[t4addra,0] * t4signa).reshape(ijkl_pairs_a, abcd_pairs_a) + c4_aaaa = decompress_axes("iiiiaaaa", c4_aaaa, shape=(nocca, nocca, nocca, nocca, nvira, nvira, nvira, nvira)) + + c4_bbbb = (self.ci[0,t4addrb] * t4signb).reshape(ijkl_pairs_b, abcd_pairs_b) + c4_bbbb = decompress_axes("iiiiaaaa", c4_bbbb, shape=(noccb, noccb, noccb, noccb, nvirb, nvirb, nvirb, nvirb)) + + c4_aaab = np.einsum('i,j,ij->ij', t3signa, t1signb, self.ci[t3addra[:,None], t1addrb]) + c4_aaab = decompress_axes("iiiaaajb", c4_aaab, shape=(nocca, nocca, nocca, nvira, nvira, nvira, noccb, nvirb)) + c4_aaab = c4_aaab.transpose(0, 1, 2, 6, 3, 4, 5, 7) + + c4_abab = np.einsum('i,j,ij->ij', t2signa, t2signb, self.ci[t2addra[:,None], t2addrb]) + c4_abab = decompress_axes("iiaajjbb", c4_abab, shape=(nocca, nocca, nvira, nvira, noccb, noccb, nvirb, nvirb)) + c4_abab = c4_abab.transpose(0, 4, 1, 5, 2, 6, 3, 7) + + c4_abbb = np.einsum('i,j,ij->ij', t1signa, t3signb, self.ci[t1addra[:,None], t3addrb]) + c4_abbb = decompress_axes("iajjjbbb", c4_abbb, shape=(nocca, nvira, noccb, noccb, noccb, nvirb, nvirb, nvirb)) + c4_abbb = c4_abbb.transpose(0, 2, 3, 4, 1, 5, 6, 7) + + c1 = (c1_a, c1_b) + c2 = (c2_aa, c2_ab, c2_bb) + c3 = (c3_aaa, c3_aba, c3_bab, c3_bbb) + c4 = (c4_aaaa, c4_aaab, c4_abab, c4_abbb, c4_bbbb) + + if c0 is None: + c0 = self.c0 + else: + fac = c0 / self.c0 + c1 = tuple(c * fac for c in c1) + c2 = tuple(c * fac for c in c2) + c3 = tuple(c * fac for c in c3) + c4 = tuple(c * fac for c in c4) + + return wf_types.UCISDTQ_WaveFunction(self.mo, c0, c1, c2, c3, c4)
+ + +
[docs]class UFCI_WaveFunction_w_dummy(UFCI_WaveFunction): + """Class to allow use of dummy orbitals to balance alpha and beta spin channels. + This is done by introducing a dummy `SpinOrbitals` object during calculation of properties in orbital basis, then + removal of dummy indices from these quantities. + We currently choose to only introduce virtual orbitals. + + TODO check all quantities removed are negligible. + """ + + def __init__(self, mo, ci, dummy_orbs, projector=None): + super().__init__(mo, ci, projector) + self.dummy_orbs = dummy_orbs + + if len(dummy_orbs[0]) > 0: + dummy_occ = min(dummy_orbs[0]) < self.nocca + else: + dummy_occ = min(dummy_orbs[1]) < self.noccb + if dummy_occ: + raise NotImplementedError("Only dummy virtual orbitals are supported.") + norb = np.array(self.ndummy) + np.array(self.norb) + if norb[0] != norb[1]: + raise RuntimeError("Including padded orbitals doesn't match the number of orbitals in each spin channel!" + " %d != %d (%d + %d != %d + %d)" % (norb[0], norb[1], self.ndummy[0], self.norb[0], + self.ndummy[1], self.norb[1])) + + @property + def ndummy(self): + return tuple([len(x) for x in self.dummy_orbs]) + + @property + def dummy_mo(self): + # Dummy orbital object to impersonate correct number of orbitals for pyscf routines. + coeff = self.mo.coeff + norb = np.array(self.ndummy) + np.array(self.norb) + nao = coeff[0].shape[0] + # Generate coefficients of correct dimension, but with zero contribution. + + coeff_w_dummy = [np.zeros((norb[0], nao)), np.zeros((norb[0], nao))] + sa, sb = self._phys_ind_orbs() + + coeff_w_dummy[0][sa] = coeff[0].T + coeff_w_dummy[1][sb] = coeff[1].T + + coeff_w_dummy = [x.T for x in coeff_w_dummy] + return type(self.mo)(coeff_w_dummy, occ=self.mo.nocc) + + def _phys_ind_orbs(self): + return [np.array([i for i in range(y) if i not in x]) for x, y in zip(self.dummy_orbs, self.norb)] + + def _phys_ind_vir(self): + return [np.array([i for i in range(y) if i + z not in x]) for x, y, z in zip(self.dummy_orbs, self.nvir, self.nocc)] + +
[docs] def make_rdm1(self, ao_basis=False, *args, **kwargs): + with replace_attr(self, mo=self.dummy_mo): + dm1 = super().make_rdm1(*args, ao_basis=ao_basis, **kwargs) + if ao_basis: + return dm1 + sa, sb = self._phys_ind_orbs() + return (dm1[0][np.ix_(sa, sa)], dm1[1][np.ix_(sb, sb)])
+ +
[docs] def make_rdm2(self, ao_basis=False, *args, **kwargs): + with replace_attr(self, mo=self.dummy_mo): + dm2 = super().make_rdm2(*args, ao_basis=ao_basis, **kwargs) + if ao_basis: + return dm2 + sa, sb = self._phys_ind_orbs() + return (dm2[0][np.ix_(sa, sa, sa, sa)], dm2[1][np.ix_(sa, sa, sb, sb)], dm2[2][np.ix_(sb, sb, sb, sb)])
+ +
[docs] def as_cisd(self, *args, **kwargs): + self.check_norb() + with replace_attr(self, mo=self.dummy_mo): + wf_cisd = super().as_cisd(*args, **kwargs) + va, vb = self._phys_ind_vir() + + c1a, c1b = wf_cisd.c1 + c2aa, c2ab, c2bb = wf_cisd.c2 + + # Define function to apply slices to virtual orbitals only + def vsl(a, sl): + # Swap slicelist order as well for consistency + return a.transpose()[np.ix_(*sl[::-1])].transpose() + + c1 = (vsl(c1a, [va]), vsl(c1b, [vb])) + c2 = (vsl(c2aa, [va, va]), vsl(c2ab, [va, vb]), vsl(c2bb, [vb, vb])) + return wf_types.UCISD_WaveFunction(self.mo, wf_cisd.c0, c1, c2, projector=self.projector)
+ +
[docs] def as_cisdtq(self, *args, **kwargs): + with replace_attr(self, mo=self.dummy_mo): + wf_cisdtq = super().as_cisdtq(*args, **kwargs) + va, vb = self._phys_ind_vir() + + # Have wavefunction, but with dummy indices. + c1a, c1b = wf_cisdtq.c1 + c2aa, c2ab, c2bb = wf_cisdtq.c2 + c3aaa, c3aba, c3bab, c3bbb = wf_cisdtq.c3 + c4aaaa, c4aaab, c4abab, c4abbb, c4bbbb = wf_cisdtq.c4 + + # Define function to apply slices to virtual orbitals only + def vsl(a, sl): + # Swap slicelist order as well for consistency + return a.transpose()[np.ix_(*sl[::-1])].transpose() + + c1 = (vsl(c1a, [va]), vsl(c1b, [vb])) + c2 = (vsl(c2aa, [va, va]), vsl(c2ab, [va, vb]), vsl(c2bb, [vb, vb])) + + c3 = (vsl(c3aaa, [va, va, va]), vsl(c3aba, [va, vb, va]), vsl(c3bab, [vb, va, vb]), vsl(c3bbb, [vb, vb, vb])) + + c4 = (vsl(c4aaaa, [va, va, va, va]), vsl(c4aaab, [va, va, va, vb]), vsl(c4abab, [va, vb, va, vb]), + vsl(c4abbb, [va, vb, vb, vb]), vsl(c4bbbb, [vb, vb, vb, vb])) + + return wf_types.UCISDTQ_WaveFunction(self.mo, wf_cisdtq.c0, c1, c2, c3, c4)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/wf/hf.html b/_modules/vayesta/core/types/wf/hf.html new file mode 100644 index 000000000..07057a64d --- /dev/null +++ b/_modules/vayesta/core/types/wf/hf.html @@ -0,0 +1,162 @@ + + + + + + vayesta.core.types.wf.hf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.wf.hf

+import numpy as np
+from vayesta.core.util import einsum
+from vayesta.core.types import wf as wf_types
+
+
+
[docs]def HF_WaveFunction(mo): + if mo.nspin == 1: + cls = RHF_WaveFunction + elif mo.nspin == 2: + cls = UHF_WaveFunction + return cls(mo)
+ + +
[docs]class RHF_WaveFunction(wf_types.WaveFunction): + +
[docs] def make_rdm1(self, mo_coeff=None, mo_occ=None, ao_basis=True): + if mo_occ is None: mo_occ = self.mo.occ + if not ao_basis: + return np.diag(mo_occ) + if mo_coeff is None: mo_coeff = self.mo.coeff + occ = (mo_occ > 0) + return np.dot(mo_coeff[:,occ]*mo_occ[occ], mo_coeff[:,occ].T)
+ +
[docs] def make_rdm2(self, mo_coeff=None, mo_occ=None, ao_basis=True): + dm1 = self.make_rdm1(mo_coeff=mo_coeff, mo_occ=mo_occ, ao_basis=ao_basis) + dm2 = einsum('ij,kl->ijkl', dm1, dm1) - einsum('ij,kl->iklj', dm1, dm1)/2 + return dm2
+ +
[docs] def as_restricted(self): + return self
+ +
[docs] def as_unrestricted(self): + raise NotImplementedError
+ + +
[docs]class UHF_WaveFunction(RHF_WaveFunction): + +
[docs] def make_rdm1(self, mo_coeff=None, mo_occ=None, ao_basis=True): + if mo_coeff is None: mo_coeff = self.mo.coeff + if mo_occ is None: mo_occ = self.mo.occ + dm1a = super().make_rdm1(mo_coeff=mo_coeff[0], mo_occ=mo_occ[0], ao_basis=ao_basis) + dm1b = super().make_rdm1(mo_coeff=mo_coeff[1], mo_occ=mo_occ[1], ao_basis=ao_basis) + return (dm1a, dm1b)
+ +
[docs] def make_rdm2(self, mo_coeff=None, mo_occ=None, ao_basis=True): + dm1a, dm1b = self.make_rdm1(mo_coeff=mo_coeff, mo_occ=mo_occ, ao_basis=ao_basis) + dm2aa = einsum('ij,kl->ijkl', dm1a, dm1a) - einsum('ij,kl->iklj', dm1a, dm1a) + dm2bb = einsum('ij,kl->ijkl', dm1b, dm1b) - einsum('ij,kl->iklj', dm1b, dm1b) + dm2ab = einsum('ij,kl->ijkl', dm1a, dm1b) + return (dm2aa, dm2ab, dm2bb)
+ +
[docs] def as_restricted(self): + raise NotImplementedError
+ +
[docs] def as_unrestricted(self): + return self
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/wf/mp2.html b/_modules/vayesta/core/types/wf/mp2.html new file mode 100644 index 000000000..66c68e421 --- /dev/null +++ b/_modules/vayesta/core/types/wf/mp2.html @@ -0,0 +1,304 @@ + + + + + + vayesta.core.types.wf.mp2 — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.wf.mp2

+import numpy as np
+from vayesta.core import spinalg
+from vayesta.core.util import callif, dot, einsum
+from vayesta.core.types import wf as wf_types
+from vayesta.core.types.orbitals import SpatialOrbitals
+from vayesta.core.types.wf.project import project_c2, project_uc2, symmetrize_c2, symmetrize_uc2
+from vayesta.core.helper import pack_arrays, unpack_arrays
+
+
+
[docs]def MP2_WaveFunction(mo, t2, **kwargs): + if mo.nspin == 1: + cls = RMP2_WaveFunction + elif mo.nspin == 2: + cls = UMP2_WaveFunction + return cls(mo, t2, **kwargs)
+ + +
[docs]class RMP2_WaveFunction(wf_types.WaveFunction): + + def __init__(self, mo, t2, projector=None): + super().__init__(mo, projector=projector) + self.t2 = t2 + +
[docs] def make_rdm1(self, with_mf=True, ao_basis=False): + t2 = self.t2 + doo = -(2*einsum('ikab,jkab->ij', t2, t2) - einsum('ikab,kjab->ij', t2, t2)) + dvv = 2*einsum('ijac,ijbc->ab', t2, t2) - einsum('ijac,ijcb->ab', t2, t2) + if with_mf: + doo += np.eye(self.nocc) + dm1 = np.zeros((self.norb, self.norb)) + occ, vir = np.s_[:self.nocc], np.s_[self.nocc:] + dm1[occ,occ] = doo + doo.T + dm1[vir,vir] = dvv + dvv.T + if ao_basis: + dm1 = dot(self.mo.coeff, dm1, self.mo.coeff.T) + return dm1
+ +
[docs] def make_rdm2(self, with_dm1=True, ao_basis=False, approx_cumulant=True): + dm2 = np.zeros((self.norb, self.norb, self.norb, self.norb)) + occ, vir = np.s_[:self.nocc], np.s_[self.nocc:] + dovov = 4*self.t2.transpose(0,2,1,3) - 2*self.t2.transpose(0,3,1,2) + dm2[occ,vir,occ,vir] = dovov + dm2[vir,occ,vir,occ] = dovov.transpose(1,0,3,2) + if with_dm1: + dm1 = self.make_rdm1(with_mf=False) + dm1[np.diag_indices(self.nocc)] += 1 + for i in range(self.nocc): + dm2[i,i,:,:] += 2*dm1 + dm2[:,:,i,i] += 2*dm1 + dm2[:,i,i,:] -= dm1 + dm2[i,:,:,i] -= dm1 + else: + if int(approx_cumulant) != 1: + raise NotImplementedError + if ao_basis: + dm2 = einsum('ijkl,ai,bj,ck,dl->abcd', dm2, *(4*[self.mo.coeff])) + return dm2
+ +
[docs] def as_restricted(self): + return self
+ +
[docs] def as_unrestricted(self): + mo = self.mo.to_spin_orbitals() + t2 = self.t2.copy() + t2aa = (t2 - t2.transpose(0,1,3,2)) + t2 = (t2aa, t2, t2aa) + return UMP2_WaveFunction(mo, t2)
+ +
[docs] def multiply(self, factor): + self.t2 *= factor
+ +
[docs] def project(self, projector, inplace=False): + wf = self if inplace else self.copy() + wf.t2 = project_c2(wf.t2, projector) + wf.projector = projector + return wf
+ +
[docs] def restore(self, projector=None, inplace=False, sym=True): + if projector is None: projector = self.projector + wf = self.project(projector.T, inplace=inplace) + wf.projector = None + if not sym: + return wf + wf.t2 = symmetrize_c2(wf.t2) + return wf
+ +
[docs] def as_mp2(self): + return self
+ +
[docs] def as_cisd(self, c0=1.0): + nocc1 = self.t2.shape[0] + c1 = np.zeros((nocc1, self.nvir)) + c2 = c0*self.t2 + return wf_types.RCISD_WaveFunction(self.mo, c0, c1, c2, projector=self.projector)
+ +
[docs] def as_ccsd(self): + nocc1 = self.t2.shape[0] + t1 = np.zeros((nocc1, self.nvir)) + return wf_types.CCSD_WaveFunction(self.mo, t1, self.t2, l1=t1, l2=self.t2, projector=self.projector)
+ +
[docs] def as_fci(self): + raise NotImplementedError
+ +
[docs] def copy(self): + proj = callif(spinalg.copy, self.projector) + t2 = spinalg.copy(self.t2) + return type(self)(self.mo.copy(), t2, projector=proj)
+ +
[docs] def pack(self, dtype=float): + """Pack into a single array of data type `dtype`. + + Useful for communication via MPI.""" + mo = self.mo.pack(dtype=dtype) + data = (mo, self.t2, self.projector) + pack = pack_arrays(*data, dtype=dtype) + return pack
+ +
[docs] @classmethod + def unpack(cls, packed): + """Unpack from a single array of data type `dtype`. + + Useful for communication via MPI.""" + mo, t2, projector = unpack_arrays(packed) + mo = SpatialOrbitals.unpack(mo) + return cls(mo, t2, projector=projector)
+ + +
[docs]class UMP2_WaveFunction(RMP2_WaveFunction): + + @property + def t2aa(self): + return self.t2[0] + + @property + def t2ab(self): + return self.t2[1] + + @property + def t2ba(self): + if len(self.t2) == 4: + return self.t2[2] + return self.t2ab.transpose(1,0,3,2) + + @property + def t2bb(self): + return self.t2[-1] + +
[docs] def make_rdm1(self, *args, **kwargs): + raise NotImplementedError
+ +
[docs] def make_rdm2(self, *args, **kwargs): + raise NotImplementedError
+ +
[docs] def project(self, projector, inplace=False): + wf = self if inplace else self.copy() + wf.t2 = project_uc2(wf.t2, projector) + wf.projector = projector + return wf
+ +
[docs] def restore(self, projector=None, inplace=False, sym=True): + if projector is None: projector = self.projector + wf = self.project((projector[0].T, projector[1].T), inplace=inplace) + wf.projector = None + if not sym: + return wf + wf.t2 = symmetrize_uc2(wf.t2) + return wf
+ +
[docs] def as_mp2(self): + return self
+ +
[docs] def as_cisd(self, c0=1.0): + nocc1a = self.t2aa.shape[0] + nocc1b = self.t2bb.shape[0] + c1 = (np.zeros((nocc1a, self.nvira)), + np.zeros((nocc1b, self.nvirb))) + c2aa = c0*self.t2aa + c2ab = c0*self.t2ab + c2bb = c0*self.t2bb + if len(self.t2) == 3: + c2 = (c2aa, c2ab, c2bb) + elif len(self.t2) == 4: + c2ba = c0*self.t2ba + c2 = (c2aa, c2ab, c2ba, c2bb) + return wf_types.UCISD_WaveFunction(self.mo, c0, c1, c2, projector=self.projector)
+ +
[docs] def as_ccsd(self): + nocc1a = self.t2aa.shape[0] + nocc1b = self.t2bb.shape[0] + t1 = (np.zeros((nocc1a, self.nvira)), + np.zeros((nocc1b, self.nvirb))) + return wf_types.UCCSD_WaveFunction(self.mo, t1, self.t2, l1=t1, l2=self.t2, projector=self.projector)
+ +
[docs] def as_fci(self): + return NotImplementedError
+ +
[docs] def multiply(self, factor): + self.t2 = spinalg.multiply(self.t2, len(self.t2)*[factor])
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/wf/project.html b/_modules/vayesta/core/types/wf/project.html new file mode 100644 index 000000000..e8e9c7094 --- /dev/null +++ b/_modules/vayesta/core/types/wf/project.html @@ -0,0 +1,153 @@ + + + + + + vayesta.core.types.wf.project — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.wf.project

+"""Utility functions for projection of wave functions."""
+
+import numpy as np
+
+
+
[docs]def project_c1(c1, p): + if c1 is None: return None + if p is None: return c1 + return np.dot(p, c1)
+ +
[docs]def project_c2(c2, p): + if c2 is None: return None + if p is None: return c2 + return np.tensordot(p, c2, axes=1)
+ +
[docs]def project_uc1(c1, p): + if c1 is None: return None + if p is None: return c1 + return (project_c1(c1[0], p[0]), + project_c1(c1[1], p[1]))
+ +
[docs]def project_uc2(c2, p): + if c2 is None: return None + if p is None: return c2 + c2ba = (c2[2] if len(c2) == 4 else c2[1].transpose(1,0,3,2)) + return (project_c2(c2[0], p[0]), + project_c2(c2[1], p[0]), + #einsum('xi,ij...->ix...', p[1], c2[1]), + project_c2(c2ba, p[1]), + project_c2(c2[-1], p[1]))
+ +
[docs]def symmetrize_c2(c2, inplace=True): + if not inplace: + c2 = c2.copy() + c2 = (c2 + c2.transpose(1,0,3,2))/2 + return c2
+ +
[docs]def symmetrize_uc2(c2, inplace=True): + if not inplace: + c2 = tuple(x.copy() for x in c2) + c2aa = symmetrize_c2(c2[0]) + c2bb = symmetrize_c2(c2[-1]) + # Mixed spin: + c2ab = c2[1] + if len(c2) == 4: + c2ab = (c2ab + c2[2].transpose(1,0,3,2))/2 + return (c2aa, c2ab, c2bb)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/wf/t_to_c.html b/_modules/vayesta/core/types/wf/t_to_c.html new file mode 100644 index 000000000..e9139d6c6 --- /dev/null +++ b/_modules/vayesta/core/types/wf/t_to_c.html @@ -0,0 +1,582 @@ + + + + + + vayesta.core.types.wf.t_to_c — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.wf.t_to_c

+"""
+These expressions were obtained from https://doi.org/10.1063/1.4996044 for
+GHF, and then spin integrated to RHF and UHF expressions.
+"""
+
+import numpy as np
+from vayesta.core.util import einsum
+
+
[docs]def t1_uhf(c1): + c1_aa, c1_bb = c1 + nocc = (c1_aa.shape[0], c1_bb.shape[0]) + nvir = (c1_aa.shape[1], c1_bb.shape[1]) + t1_aa = np.zeros((nocc[0], nvir[0]), dtype=np.float64) + t1_aa += einsum("ia->ia", c1_aa) + t1_bb = np.zeros((nocc[1], nvir[1]), dtype=np.float64) + t1_bb += einsum("ia->ia", c1_bb) + return t1_aa, t1_bb
+ +
[docs]def t1_rhf(c1): + nocc, nvir = c1.shape + t1 = np.zeros((nocc, nvir), dtype=np.float64) + t1 += einsum("ia->ia", c1) + return t1
+ +
[docs]def t2_uhf(t1, c2): + t1_aa, t1_bb = t1 + c2_aaaa, c2_abab, c2_bbbb = c2 + nocc = (t1_aa.shape[0], t1_bb.shape[0]) + nvir = (t1_aa.shape[1], t1_bb.shape[1]) + t2_aaaa = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + t2_aaaa += einsum("ijab->ijab", c2_aaaa) + t2_aaaa += einsum("ib,ja->ijab", t1_aa, t1_aa) + t2_aaaa += einsum("ia,jb->ijab", t1_aa, t1_aa) * -1.0 + t2_abab = np.zeros((nocc[0], nocc[1], nvir[0], nvir[1]), dtype=np.float64) + t2_abab += einsum("ijab->ijab", c2_abab) + t2_abab += einsum("ia,jb->ijab", t1_aa, t1_bb) * -1.0 + t2_bbbb = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + t2_bbbb += einsum("ijab->ijab", c2_bbbb) + t2_bbbb += einsum("ib,ja->ijab", t1_bb, t1_bb) + t2_bbbb += einsum("ia,jb->ijab", t1_bb, t1_bb) * -1.0 + return t2_aaaa, t2_abab, t2_bbbb
+ +
[docs]def t2_rhf(t1, c2): + nocc, nvir = t1.shape + t2 = np.zeros((nocc, nocc, nvir, nvir), dtype=np.float64) + t2 += einsum("ijab->ijab", c2) + t2 += einsum("ia,jb->ijab", t1, t1) * -1.0 + return t2
+ +
[docs]def t3_uhf(t1, t2, c3): + t1_aa, t1_bb = t1 + t2_aaaa, t2_abab, t2_bbbb = t2 + c3_aaaaaa, c3_abaaba, c3_babbab, c3_bbbbbb = c3 + nocc = (t1_aa.shape[0], t1_bb.shape[0]) + nvir = (t1_aa.shape[1], t1_bb.shape[1]) + t3_aaaaaa = np.zeros((nocc[0], nocc[0], nocc[0], nvir[0], nvir[0], nvir[0]), dtype=np.float64) + t3_aaaaaa += einsum("ijkabc->ijkabc", c3_aaaaaa) + t3_aaaaaa += einsum("ia,jkbc->ijkabc", t1_aa, t2_aaaa) * -1.0 + t3_aaaaaa += einsum("ic,jkab->ijkabc", t1_aa, t2_aaaa) * -1.0 + t3_aaaaaa += einsum("ja,ikbc->ijkabc", t1_aa, t2_aaaa) + t3_aaaaaa += einsum("jc,ikab->ijkabc", t1_aa, t2_aaaa) + t3_aaaaaa += einsum("ka,ijbc->ijkabc", t1_aa, t2_aaaa) * -1.0 + t3_aaaaaa += einsum("kc,ijab->ijkabc", t1_aa, t2_aaaa) * -1.0 + x0 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x0 += einsum("ijab->ijab", t2_aaaa) + x0 += einsum("ib,ja->ijab", t1_aa, t1_aa) * -1.0 + x0 += einsum("ia,jb->ijab", t1_aa, t1_aa) + t3_aaaaaa += einsum("ib,kjca->ijkabc", t1_aa, x0) + t3_aaaaaa += einsum("kb,jica->ijkabc", t1_aa, x0) + t3_aaaaaa += einsum("jb,kica->ijkabc", t1_aa, x0) * -1.0 + t3_abaaba = np.zeros((nocc[0], nocc[1], nocc[0], nvir[0], nvir[1], nvir[0]), dtype=np.float64) + t3_abaaba += einsum("ijkabc->ijkabc", c3_abaaba) + t3_abaaba += einsum("ia,kjcb->ijkabc", t1_aa, t2_abab) * -1.0 + t3_abaaba += einsum("ic,kjab->ijkabc", t1_aa, t2_abab) + t3_abaaba += einsum("ka,ijcb->ijkabc", t1_aa, t2_abab) + t3_abaaba += einsum("kc,ijab->ijkabc", t1_aa, t2_abab) * -1.0 + x0 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x0 += einsum("ijab->ijab", t2_aaaa) + x0 += einsum("ib,ja->ijab", t1_aa, t1_aa) * -1.0 + x0 += einsum("ia,jb->ijab", t1_aa, t1_aa) + t3_abaaba += einsum("jb,kica->ijkabc", t1_bb, x0) * -1.0 + t3_babbab = np.zeros((nocc[1], nocc[0], nocc[1], nvir[1], nvir[0], nvir[1]), dtype=np.float64) + t3_babbab += einsum("ijkabc->ijkabc", c3_babbab) + t3_babbab += einsum("ia,jkbc->ijkabc", t1_bb, t2_abab) * -1.0 + t3_babbab += einsum("ic,jkba->ijkabc", t1_bb, t2_abab) + t3_babbab += einsum("ka,jibc->ijkabc", t1_bb, t2_abab) + t3_babbab += einsum("kc,jiba->ijkabc", t1_bb, t2_abab) * -1.0 + x0 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x0 += einsum("ijab->ijab", t2_bbbb) + x0 += einsum("ib,ja->ijab", t1_bb, t1_bb) * -1.0 + x0 += einsum("ia,jb->ijab", t1_bb, t1_bb) + t3_babbab += einsum("jb,kica->ijkabc", t1_aa, x0) * -1.0 + t3_bbbbbb = np.zeros((nocc[1], nocc[1], nocc[1], nvir[1], nvir[1], nvir[1]), dtype=np.float64) + t3_bbbbbb += einsum("ijkabc->ijkabc", c3_bbbbbb) + t3_bbbbbb += einsum("ia,jkbc->ijkabc", t1_bb, t2_bbbb) * -1.0 + t3_bbbbbb += einsum("ic,jkab->ijkabc", t1_bb, t2_bbbb) * -1.0 + t3_bbbbbb += einsum("ja,ikbc->ijkabc", t1_bb, t2_bbbb) + t3_bbbbbb += einsum("jc,ikab->ijkabc", t1_bb, t2_bbbb) + t3_bbbbbb += einsum("ka,ijbc->ijkabc", t1_bb, t2_bbbb) * -1.0 + t3_bbbbbb += einsum("kc,ijab->ijkabc", t1_bb, t2_bbbb) * -1.0 + x0 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x0 += einsum("ijab->ijab", t2_bbbb) + x0 += einsum("ib,ja->ijab", t1_bb, t1_bb) * -1.0 + x0 += einsum("ia,jb->ijab", t1_bb, t1_bb) + t3_bbbbbb += einsum("ib,kjca->ijkabc", t1_bb, x0) + t3_bbbbbb += einsum("kb,jica->ijkabc", t1_bb, x0) + t3_bbbbbb += einsum("jb,kica->ijkabc", t1_bb, x0) * -1.0 + return t3_aaaaaa, t3_abaaba, t3_babbab, t3_bbbbbb
+ +
[docs]def t3_rhf(t1, t2, c3): + nocc, nvir = t1.shape + t3 = np.zeros((nocc, nocc, nocc, nvir, nvir, nvir), dtype=np.float64) + t3 += einsum("ijkabc->ijkabc", c3) + t3 += einsum("ia,kjcb->ijkabc", t1, t2) * -1.0 + t3 += einsum("ic,kjab->ijkabc", t1, t2) + t3 += einsum("ka,ijcb->ijkabc", t1, t2) + t3 += einsum("kc,ijab->ijkabc", t1, t2) * -1.0 + x0 = np.zeros((nocc, nocc, nvir, nvir), dtype=np.float64) + x0 += einsum("ijab->ijab", t2) * -1.0 + x0 += einsum("ijba->ijab", t2) + x0 += einsum("ib,ja->ijab", t1, t1) + x0 += einsum("ia,jb->ijab", t1, t1) * -1.0 + t3 += einsum("jb,ikca->ijkabc", t1, x0) * -1.0 + return t3
+ +
[docs]def t4_uhf(t1, t2, t3, c4): + t1_aa, t1_bb = t1 + t2_aaaa, t2_abab, t2_bbbb = t2 + t3_aaaaaa, t3_abaaba, t3_babbab, t3_bbbbbb = t3 + c4_aaaaaaaa, c4_aaabaaab, c4_abababab, c4_abbbabbb, c4_bbbbbbbb = c4 + nocc = (t1_aa.shape[0], t1_bb.shape[0]) + nvir = (t1_aa.shape[1], t1_bb.shape[1]) + t4_aaaaaaaa = np.zeros((nocc[0], nocc[0], nocc[0], nocc[0], nvir[0], nvir[0], nvir[0], nvir[0]), dtype=np.float64) + t4_aaaaaaaa += einsum("ijklabcd->ijklabcd", c4_aaaaaaaa) + t4_aaaaaaaa += einsum("la,ijkbcd->ijklabcd", t1_aa, t3_aaaaaa) + t4_aaaaaaaa += einsum("lb,ijkacd->ijklabcd", t1_aa, t3_aaaaaa) * -1.0 + t4_aaaaaaaa += einsum("lc,ijkabd->ijklabcd", t1_aa, t3_aaaaaa) + t4_aaaaaaaa += einsum("ld,ijkabc->ijklabcd", t1_aa, t3_aaaaaa) * -1.0 + t4_aaaaaaaa += einsum("ilcd,jkab->ijklabcd", t2_aaaa, t2_aaaa) * -1.0 + t4_aaaaaaaa += einsum("ilbd,jkac->ijklabcd", t2_aaaa, t2_aaaa) + t4_aaaaaaaa += einsum("ilad,jkbc->ijklabcd", t2_aaaa, t2_aaaa) * -1.0 + t4_aaaaaaaa += einsum("ilbc,jkad->ijklabcd", t2_aaaa, t2_aaaa) * -1.0 + t4_aaaaaaaa += einsum("ilac,jkbd->ijklabcd", t2_aaaa, t2_aaaa) + t4_aaaaaaaa += einsum("ilab,jkcd->ijklabcd", t2_aaaa, t2_aaaa) * -1.0 + t4_aaaaaaaa += einsum("ikcd,jlab->ijklabcd", t2_aaaa, t2_aaaa) + t4_aaaaaaaa += einsum("ikbd,jlac->ijklabcd", t2_aaaa, t2_aaaa) * -1.0 + t4_aaaaaaaa += einsum("ikad,jlbc->ijklabcd", t2_aaaa, t2_aaaa) + t4_aaaaaaaa += einsum("ikbc,jlad->ijklabcd", t2_aaaa, t2_aaaa) + t4_aaaaaaaa += einsum("ikac,jlbd->ijklabcd", t2_aaaa, t2_aaaa) * -1.0 + t4_aaaaaaaa += einsum("ikab,jlcd->ijklabcd", t2_aaaa, t2_aaaa) + t4_aaaaaaaa += einsum("ijcd,klab->ijklabcd", t2_aaaa, t2_aaaa) * -1.0 + t4_aaaaaaaa += einsum("ijbd,klac->ijklabcd", t2_aaaa, t2_aaaa) + t4_aaaaaaaa += einsum("ijad,klbc->ijklabcd", t2_aaaa, t2_aaaa) * -1.0 + t4_aaaaaaaa += einsum("ijbc,klad->ijklabcd", t2_aaaa, t2_aaaa) * -1.0 + t4_aaaaaaaa += einsum("ijac,klbd->ijklabcd", t2_aaaa, t2_aaaa) + t4_aaaaaaaa += einsum("ijab,klcd->ijklabcd", t2_aaaa, t2_aaaa) * -1.0 + x0 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x0 += einsum("ijab->ijab", t2_aaaa) + x0 += einsum("ib,ja->ijab", t1_aa, t1_aa) * -1.0 + x0 += einsum("ia,jb->ijab", t1_aa, t1_aa) + x1 = np.zeros((nocc[0], nocc[0], nocc[0], nvir[0], nvir[0], nvir[0]), dtype=np.float64) + x1 += einsum("ijkabc->ijkabc", t3_aaaaaa) + x1 += einsum("ja,ikbc->ijkabc", t1_aa, t2_aaaa) * -1.0 + x1 += einsum("jb,ikac->ijkabc", t1_aa, t2_aaaa) + x1 += einsum("jc,ikab->ijkabc", t1_aa, t2_aaaa) * -1.0 + x1 += einsum("ka,ijbc->ijkabc", t1_aa, t2_aaaa) + x1 += einsum("kb,ijac->ijkabc", t1_aa, t2_aaaa) * -1.0 + x1 += einsum("kc,ijab->ijkabc", t1_aa, t2_aaaa) + x1 += einsum("ia,kjcb->ijkabc", t1_aa, x0) + x1 += einsum("ic,kjba->ijkabc", t1_aa, x0) + x1 += einsum("ib,kjca->ijkabc", t1_aa, x0) * -1.0 + t4_aaaaaaaa += einsum("ib,ljkdac->ijklabcd", t1_aa, x1) + t4_aaaaaaaa += einsum("id,ljkcab->ijklabcd", t1_aa, x1) + t4_aaaaaaaa += einsum("ia,ljkdbc->ijklabcd", t1_aa, x1) * -1.0 + t4_aaaaaaaa += einsum("ic,ljkdab->ijklabcd", t1_aa, x1) * -1.0 + x2 = np.zeros((nocc[0], nocc[0], nocc[0], nvir[0], nvir[0], nvir[0]), dtype=np.float64) + x2 += einsum("ijkabc->ijkabc", t3_aaaaaa) + x2 += einsum("ia,jkbc->ijkabc", t1_aa, t2_aaaa) + x2 += einsum("ib,jkac->ijkabc", t1_aa, t2_aaaa) * -1.0 + x2 += einsum("ic,jkab->ijkabc", t1_aa, t2_aaaa) + x2 += einsum("ka,ijbc->ijkabc", t1_aa, t2_aaaa) + x2 += einsum("kb,ijac->ijkabc", t1_aa, t2_aaaa) * -1.0 + x2 += einsum("kc,ijab->ijkabc", t1_aa, t2_aaaa) + t4_aaaaaaaa += einsum("ja,likdbc->ijklabcd", t1_aa, x2) + t4_aaaaaaaa += einsum("jc,likdab->ijklabcd", t1_aa, x2) + t4_aaaaaaaa += einsum("jb,likdac->ijklabcd", t1_aa, x2) * -1.0 + t4_aaaaaaaa += einsum("jd,likcab->ijklabcd", t1_aa, x2) * -1.0 + x3 = np.zeros((nocc[0], nocc[0], nocc[0], nvir[0], nvir[0], nvir[0]), dtype=np.float64) + x3 += einsum("ijkabc->ijkabc", t3_aaaaaa) + x3 += einsum("ia,jkbc->ijkabc", t1_aa, t2_aaaa) + x3 += einsum("ib,jkac->ijkabc", t1_aa, t2_aaaa) * -1.0 + x3 += einsum("ic,jkab->ijkabc", t1_aa, t2_aaaa) + t4_aaaaaaaa += einsum("kb,lijdac->ijklabcd", t1_aa, x3) + t4_aaaaaaaa += einsum("kd,lijcab->ijklabcd", t1_aa, x3) + t4_aaaaaaaa += einsum("ka,lijdbc->ijklabcd", t1_aa, x3) * -1.0 + t4_aaaaaaaa += einsum("kc,lijdab->ijklabcd", t1_aa, x3) * -1.0 + t4_aaabaaab = np.zeros((nocc[0], nocc[0], nocc[0], nocc[1], nvir[0], nvir[0], nvir[0], nvir[1]), dtype=np.float64) + t4_aaabaaab += einsum("ijklabcd->ijklabcd", c4_aaabaaab) + t4_aaabaaab += einsum("ia,jlkbdc->ijklabcd", t1_aa, t3_abaaba) * -1.0 + t4_aaabaaab += einsum("ic,jlkadb->ijklabcd", t1_aa, t3_abaaba) * -1.0 + t4_aaabaaab += einsum("ja,ilkbdc->ijklabcd", t1_aa, t3_abaaba) + t4_aaabaaab += einsum("jc,ilkadb->ijklabcd", t1_aa, t3_abaaba) + t4_aaabaaab += einsum("ka,iljbdc->ijklabcd", t1_aa, t3_abaaba) * -1.0 + t4_aaabaaab += einsum("kc,iljadb->ijklabcd", t1_aa, t3_abaaba) * -1.0 + t4_aaabaaab += einsum("klcd,ijab->ijklabcd", t2_abab, t2_aaaa) * -1.0 + t4_aaabaaab += einsum("klad,ijbc->ijklabcd", t2_abab, t2_aaaa) * -1.0 + t4_aaabaaab += einsum("jlcd,ikab->ijklabcd", t2_abab, t2_aaaa) + t4_aaabaaab += einsum("jlad,ikbc->ijklabcd", t2_abab, t2_aaaa) + t4_aaabaaab += einsum("ilcd,jkab->ijklabcd", t2_abab, t2_aaaa) * -1.0 + t4_aaabaaab += einsum("ilad,jkbc->ijklabcd", t2_abab, t2_aaaa) * -1.0 + x0 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x0 += einsum("ijab->ijab", t2_aaaa) + x0 += einsum("ib,ja->ijab", t1_aa, t1_aa) * -1.0 + x0 += einsum("ia,jb->ijab", t1_aa, t1_aa) + t4_aaabaaab += einsum("ilbd,kjca->ijklabcd", t2_abab, x0) + t4_aaabaaab += einsum("klbd,jica->ijklabcd", t2_abab, x0) + t4_aaabaaab += einsum("jlbd,kica->ijklabcd", t2_abab, x0) * -1.0 + x1 = np.zeros((nocc[0], nocc[0], nocc[0], nvir[0], nvir[0], nvir[0]), dtype=np.float64) + x1 += einsum("ijkabc->ijkabc", t3_aaaaaa) + x1 += einsum("ja,ikbc->ijkabc", t1_aa, t2_aaaa) * -1.0 + x1 += einsum("jb,ikac->ijkabc", t1_aa, t2_aaaa) + x1 += einsum("jc,ikab->ijkabc", t1_aa, t2_aaaa) * -1.0 + x1 += einsum("ka,ijbc->ijkabc", t1_aa, t2_aaaa) + x1 += einsum("kb,ijac->ijkabc", t1_aa, t2_aaaa) * -1.0 + x1 += einsum("kc,ijab->ijkabc", t1_aa, t2_aaaa) + x1 += einsum("ia,kjcb->ijkabc", t1_aa, x0) + x1 += einsum("ic,kjba->ijkabc", t1_aa, x0) + x1 += einsum("ib,kjca->ijkabc", t1_aa, x0) * -1.0 + t4_aaabaaab += einsum("ld,kijcab->ijklabcd", t1_bb, x1) * -1.0 + x2 = np.zeros((nocc[1], nvir[1], nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x2 += einsum("jikbac->iajkbc", t3_abaaba) + x2 += einsum("jb,kica->iajkbc", t1_aa, t2_abab) + x2 += einsum("jc,kiba->iajkbc", t1_aa, t2_abab) * -1.0 + x2 += einsum("kb,jica->iajkbc", t1_aa, t2_abab) * -1.0 + x2 += einsum("kc,jiba->iajkbc", t1_aa, t2_abab) + t4_aaabaaab += einsum("ib,ldkjca->ijklabcd", t1_aa, x2) + t4_aaabaaab += einsum("kb,ldjica->ijklabcd", t1_aa, x2) + t4_aaabaaab += einsum("jb,ldkica->ijklabcd", t1_aa, x2) * -1.0 + t4_abababab = np.zeros((nocc[0], nocc[1], nocc[0], nocc[1], nvir[0], nvir[1], nvir[0], nvir[1]), dtype=np.float64) + t4_abababab += einsum("ijklabcd->ijklabcd", c4_abababab) + t4_abababab += einsum("ia,jklbcd->ijklabcd", t1_aa, t3_babbab) * -1.0 + t4_abababab += einsum("ic,jklbad->ijklabcd", t1_aa, t3_babbab) + t4_abababab += einsum("ka,jilbcd->ijklabcd", t1_aa, t3_babbab) + t4_abababab += einsum("kc,jilbad->ijklabcd", t1_aa, t3_babbab) * -1.0 + t4_abababab += einsum("ilab,kjcd->ijklabcd", t2_abab, t2_abab) + t4_abababab += einsum("ilcb,kjad->ijklabcd", t2_abab, t2_abab) * -1.0 + t4_abababab += einsum("ijcd,klab->ijklabcd", t2_abab, t2_abab) * -1.0 + t4_abababab += einsum("ijad,klcb->ijklabcd", t2_abab, t2_abab) + t4_abababab += einsum("ilad,kjcb->ijklabcd", t2_abab, t2_abab) * -1.0 + t4_abababab += einsum("ilcd,kjab->ijklabcd", t2_abab, t2_abab) + t4_abababab += einsum("ijcb,klad->ijklabcd", t2_abab, t2_abab) + t4_abababab += einsum("ijab,klcd->ijklabcd", t2_abab, t2_abab) * -1.0 + x0 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x0 += einsum("ijab->ijab", t2_aaaa) + x0 += einsum("ib,ja->ijab", t1_aa, t1_aa) * -1.0 + x0 += einsum("ia,jb->ijab", t1_aa, t1_aa) + x1 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x1 += einsum("ijab->ijab", t2_bbbb) + x1 += einsum("ib,ja->ijab", t1_bb, t1_bb) * -1.0 + x1 += einsum("ia,jb->ijab", t1_bb, t1_bb) + t4_abababab += einsum("kica,ljdb->ijklabcd", x0, x1) * -1.0 + x2 = np.zeros((nocc[1], nvir[1], nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x2 += einsum("jikbac->iajkbc", t3_abaaba) + x2 += einsum("jb,kica->iajkbc", t1_aa, t2_abab) + x2 += einsum("jc,kiba->iajkbc", t1_aa, t2_abab) * -1.0 + x2 += einsum("kb,jica->iajkbc", t1_aa, t2_abab) * -1.0 + x2 += einsum("kc,jiba->iajkbc", t1_aa, t2_abab) + t4_abababab += einsum("jd,lbkica->ijklabcd", t1_bb, x2) + t4_abababab += einsum("lb,jdkica->ijklabcd", t1_bb, x2) + t4_abababab += einsum("jb,ldkica->ijklabcd", t1_bb, x2) * -1.0 + t4_abababab += einsum("ld,jbkica->ijklabcd", t1_bb, x2) * -1.0 + t4_abbbabbb = np.zeros((nocc[0], nocc[1], nocc[1], nocc[1], nvir[0], nvir[1], nvir[1], nvir[1]), dtype=np.float64) + t4_abbbabbb += einsum("ijklabcd->ijklabcd", c4_abbbabbb) + t4_abbbabbb += einsum("jb,kilcad->ijklabcd", t1_bb, t3_babbab) * -1.0 + t4_abbbabbb += einsum("jd,kilbac->ijklabcd", t1_bb, t3_babbab) * -1.0 + t4_abbbabbb += einsum("kb,jilcad->ijklabcd", t1_bb, t3_babbab) + t4_abbbabbb += einsum("kd,jilbac->ijklabcd", t1_bb, t3_babbab) + t4_abbbabbb += einsum("lb,jikcad->ijklabcd", t1_bb, t3_babbab) * -1.0 + t4_abbbabbb += einsum("ld,jikbac->ijklabcd", t1_bb, t3_babbab) * -1.0 + t4_abbbabbb += einsum("ilad,jkbc->ijklabcd", t2_abab, t2_bbbb) * -1.0 + t4_abbbabbb += einsum("ilab,jkcd->ijklabcd", t2_abab, t2_bbbb) * -1.0 + t4_abbbabbb += einsum("ikad,jlbc->ijklabcd", t2_abab, t2_bbbb) + t4_abbbabbb += einsum("ikab,jlcd->ijklabcd", t2_abab, t2_bbbb) + t4_abbbabbb += einsum("ijad,klbc->ijklabcd", t2_abab, t2_bbbb) * -1.0 + t4_abbbabbb += einsum("ijab,klcd->ijklabcd", t2_abab, t2_bbbb) * -1.0 + x0 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x0 += einsum("ijab->ijab", t2_bbbb) + x0 += einsum("ib,ja->ijab", t1_bb, t1_bb) * -1.0 + x0 += einsum("ia,jb->ijab", t1_bb, t1_bb) + t4_abbbabbb += einsum("ilac,kjdb->ijklabcd", t2_abab, x0) + t4_abbbabbb += einsum("ijac,lkdb->ijklabcd", t2_abab, x0) + t4_abbbabbb += einsum("ikac,ljdb->ijklabcd", t2_abab, x0) * -1.0 + x1 = np.zeros((nocc[1], nocc[1], nocc[1], nvir[1], nvir[1], nvir[1]), dtype=np.float64) + x1 += einsum("ijkabc->ijkabc", t3_bbbbbb) + x1 += einsum("ja,ikbc->ijkabc", t1_bb, t2_bbbb) * -1.0 + x1 += einsum("jb,ikac->ijkabc", t1_bb, t2_bbbb) + x1 += einsum("jc,ikab->ijkabc", t1_bb, t2_bbbb) * -1.0 + x1 += einsum("ka,ijbc->ijkabc", t1_bb, t2_bbbb) + x1 += einsum("kb,ijac->ijkabc", t1_bb, t2_bbbb) * -1.0 + x1 += einsum("kc,ijab->ijkabc", t1_bb, t2_bbbb) + x1 += einsum("ia,kjcb->ijkabc", t1_bb, x0) + x1 += einsum("ic,kjba->ijkabc", t1_bb, x0) + x1 += einsum("ib,kjca->ijkabc", t1_bb, x0) * -1.0 + t4_abbbabbb += einsum("ia,ljkdbc->ijklabcd", t1_aa, x1) * -1.0 + x2 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1], nocc[0], nvir[0]), dtype=np.float64) + x2 += einsum("ikjacb->ijabkc", t3_babbab) + x2 += einsum("ia,kjcb->ijabkc", t1_bb, t2_abab) + x2 += einsum("ib,kjca->ijabkc", t1_bb, t2_abab) * -1.0 + x2 += einsum("ja,kicb->ijabkc", t1_bb, t2_abab) * -1.0 + x2 += einsum("jb,kica->ijabkc", t1_bb, t2_abab) + t4_abbbabbb += einsum("jc,lkdbia->ijklabcd", t1_bb, x2) + t4_abbbabbb += einsum("lc,kjdbia->ijklabcd", t1_bb, x2) + t4_abbbabbb += einsum("kc,ljdbia->ijklabcd", t1_bb, x2) * -1.0 + t4_bbbbbbbb = np.zeros((nocc[1], nocc[1], nocc[1], nocc[1], nvir[1], nvir[1], nvir[1], nvir[1]), dtype=np.float64) + t4_bbbbbbbb += einsum("ijklabcd->ijklabcd", c4_bbbbbbbb) + t4_bbbbbbbb += einsum("la,ijkbcd->ijklabcd", t1_bb, t3_bbbbbb) + t4_bbbbbbbb += einsum("lb,ijkacd->ijklabcd", t1_bb, t3_bbbbbb) * -1.0 + t4_bbbbbbbb += einsum("lc,ijkabd->ijklabcd", t1_bb, t3_bbbbbb) + t4_bbbbbbbb += einsum("ld,ijkabc->ijklabcd", t1_bb, t3_bbbbbb) * -1.0 + t4_bbbbbbbb += einsum("ilcd,jkab->ijklabcd", t2_bbbb, t2_bbbb) * -1.0 + t4_bbbbbbbb += einsum("ilbd,jkac->ijklabcd", t2_bbbb, t2_bbbb) + t4_bbbbbbbb += einsum("ilad,jkbc->ijklabcd", t2_bbbb, t2_bbbb) * -1.0 + t4_bbbbbbbb += einsum("ilbc,jkad->ijklabcd", t2_bbbb, t2_bbbb) * -1.0 + t4_bbbbbbbb += einsum("ilac,jkbd->ijklabcd", t2_bbbb, t2_bbbb) + t4_bbbbbbbb += einsum("ilab,jkcd->ijklabcd", t2_bbbb, t2_bbbb) * -1.0 + t4_bbbbbbbb += einsum("ikcd,jlab->ijklabcd", t2_bbbb, t2_bbbb) + t4_bbbbbbbb += einsum("ikbd,jlac->ijklabcd", t2_bbbb, t2_bbbb) * -1.0 + t4_bbbbbbbb += einsum("ikad,jlbc->ijklabcd", t2_bbbb, t2_bbbb) + t4_bbbbbbbb += einsum("ikbc,jlad->ijklabcd", t2_bbbb, t2_bbbb) + t4_bbbbbbbb += einsum("ikac,jlbd->ijklabcd", t2_bbbb, t2_bbbb) * -1.0 + t4_bbbbbbbb += einsum("ikab,jlcd->ijklabcd", t2_bbbb, t2_bbbb) + t4_bbbbbbbb += einsum("ijcd,klab->ijklabcd", t2_bbbb, t2_bbbb) * -1.0 + t4_bbbbbbbb += einsum("ijbd,klac->ijklabcd", t2_bbbb, t2_bbbb) + t4_bbbbbbbb += einsum("ijad,klbc->ijklabcd", t2_bbbb, t2_bbbb) * -1.0 + t4_bbbbbbbb += einsum("ijbc,klad->ijklabcd", t2_bbbb, t2_bbbb) * -1.0 + t4_bbbbbbbb += einsum("ijac,klbd->ijklabcd", t2_bbbb, t2_bbbb) + t4_bbbbbbbb += einsum("ijab,klcd->ijklabcd", t2_bbbb, t2_bbbb) * -1.0 + x0 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x0 += einsum("ijab->ijab", t2_bbbb) + x0 += einsum("ib,ja->ijab", t1_bb, t1_bb) * -1.0 + x0 += einsum("ia,jb->ijab", t1_bb, t1_bb) + x1 = np.zeros((nocc[1], nocc[1], nocc[1], nvir[1], nvir[1], nvir[1]), dtype=np.float64) + x1 += einsum("ijkabc->ijkabc", t3_bbbbbb) + x1 += einsum("ja,ikbc->ijkabc", t1_bb, t2_bbbb) * -1.0 + x1 += einsum("jb,ikac->ijkabc", t1_bb, t2_bbbb) + x1 += einsum("jc,ikab->ijkabc", t1_bb, t2_bbbb) * -1.0 + x1 += einsum("ka,ijbc->ijkabc", t1_bb, t2_bbbb) + x1 += einsum("kb,ijac->ijkabc", t1_bb, t2_bbbb) * -1.0 + x1 += einsum("kc,ijab->ijkabc", t1_bb, t2_bbbb) + x1 += einsum("ia,kjcb->ijkabc", t1_bb, x0) + x1 += einsum("ic,kjba->ijkabc", t1_bb, x0) + x1 += einsum("ib,kjca->ijkabc", t1_bb, x0) * -1.0 + t4_bbbbbbbb += einsum("ib,ljkdac->ijklabcd", t1_bb, x1) + t4_bbbbbbbb += einsum("id,ljkcab->ijklabcd", t1_bb, x1) + t4_bbbbbbbb += einsum("ia,ljkdbc->ijklabcd", t1_bb, x1) * -1.0 + t4_bbbbbbbb += einsum("ic,ljkdab->ijklabcd", t1_bb, x1) * -1.0 + x2 = np.zeros((nocc[1], nocc[1], nocc[1], nvir[1], nvir[1], nvir[1]), dtype=np.float64) + x2 += einsum("ijkabc->ijkabc", t3_bbbbbb) + x2 += einsum("ia,jkbc->ijkabc", t1_bb, t2_bbbb) + x2 += einsum("ib,jkac->ijkabc", t1_bb, t2_bbbb) * -1.0 + x2 += einsum("ic,jkab->ijkabc", t1_bb, t2_bbbb) + x2 += einsum("ka,ijbc->ijkabc", t1_bb, t2_bbbb) + x2 += einsum("kb,ijac->ijkabc", t1_bb, t2_bbbb) * -1.0 + x2 += einsum("kc,ijab->ijkabc", t1_bb, t2_bbbb) + t4_bbbbbbbb += einsum("ja,likdbc->ijklabcd", t1_bb, x2) + t4_bbbbbbbb += einsum("jc,likdab->ijklabcd", t1_bb, x2) + t4_bbbbbbbb += einsum("jb,likdac->ijklabcd", t1_bb, x2) * -1.0 + t4_bbbbbbbb += einsum("jd,likcab->ijklabcd", t1_bb, x2) * -1.0 + x3 = np.zeros((nocc[1], nocc[1], nocc[1], nvir[1], nvir[1], nvir[1]), dtype=np.float64) + x3 += einsum("ijkabc->ijkabc", t3_bbbbbb) + x3 += einsum("ia,jkbc->ijkabc", t1_bb, t2_bbbb) + x3 += einsum("ib,jkac->ijkabc", t1_bb, t2_bbbb) * -1.0 + x3 += einsum("ic,jkab->ijkabc", t1_bb, t2_bbbb) + t4_bbbbbbbb += einsum("kb,lijdac->ijklabcd", t1_bb, x3) + t4_bbbbbbbb += einsum("kd,lijcab->ijklabcd", t1_bb, x3) + t4_bbbbbbbb += einsum("ka,lijdbc->ijklabcd", t1_bb, x3) * -1.0 + t4_bbbbbbbb += einsum("kc,lijdab->ijklabcd", t1_bb, x3) * -1.0 + return t4_aaaaaaaa, t4_aaabaaab, t4_abababab, t4_abbbabbb, t4_bbbbbbbb
+ +
[docs]def t4_rhf(t1, t2, t3, c4): + nocc, nvir = t1.shape + c4_abaaabaa, c4_abababab = c4 + t4_abababab = np.zeros((nocc, nocc, nocc, nocc, nvir, nvir, nvir, nvir), dtype=np.float64) + t4_abababab += einsum("ijklabcd->ijklabcd", c4_abababab) + t4_abababab += einsum("jb,ilkadc->ijklabcd", t1, t3) * -1.0 + t4_abababab += einsum("jd,ilkabc->ijklabcd", t1, t3) + t4_abababab += einsum("lb,ijkadc->ijklabcd", t1, t3) + t4_abababab += einsum("ld,ijkabc->ijklabcd", t1, t3) * -1.0 + t4_abababab += einsum("ijab,klcd->ijklabcd", t2, t2) * -1.0 + t4_abababab += einsum("ijad,klcb->ijklabcd", t2, t2) + t4_abababab += einsum("ijcb,klad->ijklabcd", t2, t2) + t4_abababab += einsum("ijcd,klab->ijklabcd", t2, t2) * -1.0 + t4_abababab += einsum("ilab,kjcd->ijklabcd", t2, t2) + t4_abababab += einsum("ilad,kjcb->ijklabcd", t2, t2) * -1.0 + t4_abababab += einsum("ilcb,kjad->ijklabcd", t2, t2) * -1.0 + t4_abababab += einsum("ilcd,kjab->ijklabcd", t2, t2) + x0 = np.zeros((nocc, nocc, nvir, nvir), dtype=np.float64) + x0 += einsum("ijab->ijab", t2) * -1.0 + x0 += einsum("ijba->ijab", t2) + x0 += einsum("ib,ja->ijab", t1, t1) + x0 += einsum("ia,jb->ijab", t1, t1) * -1.0 + t4_abababab += einsum("ikac,jldb->ijklabcd", x0, x0) + x1 = np.zeros((nocc, nocc, nocc, nvir, nvir, nvir), dtype=np.float64) + x1 += einsum("ijkabc->ijkabc", t3) + x1 += einsum("ia,jkbc->ijkabc", t1, t2) + x1 += einsum("ic,jkba->ijkabc", t1, t2) * -1.0 + x1 += einsum("ka,jibc->ijkabc", t1, t2) * -1.0 + x1 += einsum("kc,jiba->ijkabc", t1, t2) + t4_abababab += einsum("ic,jklbad->ijklabcd", t1, x1) + t4_abababab += einsum("ka,jilbcd->ijklabcd", t1, x1) + t4_abababab += einsum("ia,jklbcd->ijklabcd", t1, x1) * -1.0 + t4_abababab += einsum("kc,jilbad->ijklabcd", t1, x1) * -1.0 + t4_abaaabaa = np.zeros((nocc, nocc, nocc, nocc, nvir, nvir, nvir, nvir), dtype=np.float64) + #t4_abaaabaa += einsum("ikljacdb->ijklabcd", c4_abaaabaa) # NOTE incorrect in generated eqns + t4_abaaabaa += einsum("ijklabcd->ijklabcd", c4_abaaabaa) + t4_abaaabaa += einsum("ia,kjlcbd->ijklabcd", t1, t3) * -1.0 + t4_abaaabaa += einsum("id,kjlabc->ijklabcd", t1, t3) * -1.0 + t4_abaaabaa += einsum("ka,ijlcbd->ijklabcd", t1, t3) + t4_abaaabaa += einsum("kd,ijlabc->ijklabcd", t1, t3) + t4_abaaabaa += einsum("la,ijkcbd->ijklabcd", t1, t3) * -1.0 + t4_abaaabaa += einsum("ld,ijkabc->ijklabcd", t1, t3) * -1.0 + t4_abaaabaa += einsum("ijab,klcd->ijklabcd", t2, t2) * -1.0 + t4_abaaabaa += einsum("ijab,kldc->ijklabcd", t2, t2) + t4_abaaabaa += einsum("ijdb,klac->ijklabcd", t2, t2) * -1.0 + t4_abaaabaa += einsum("ijdb,klca->ijklabcd", t2, t2) + t4_abaaabaa += einsum("ilac,kjdb->ijklabcd", t2, t2) + t4_abaaabaa += einsum("ilcd,kjab->ijklabcd", t2, t2) + t4_abaaabaa += einsum("ilca,kjdb->ijklabcd", t2, t2) * -1.0 + t4_abaaabaa += einsum("ildc,kjab->ijklabcd", t2, t2) * -1.0 + t4_abaaabaa += einsum("ikac,ljdb->ijklabcd", t2, t2) * -1.0 + t4_abaaabaa += einsum("ikcd,ljab->ijklabcd", t2, t2) * -1.0 + t4_abaaabaa += einsum("ikca,ljdb->ijklabcd", t2, t2) + t4_abaaabaa += einsum("ikdc,ljab->ijklabcd", t2, t2) + x0 = np.zeros((nocc, nocc, nvir, nvir), dtype=np.float64) + x0 += einsum("ijab->ijab", t2) * -1.0 + x0 += einsum("ijba->ijab", t2) + x0 += einsum("ib,ja->ijab", t1, t1) + x0 += einsum("ia,jb->ijab", t1, t1) * -1.0 + t4_abaaabaa += einsum("kjcb,ilda->ijklabcd", t2, x0) * -1.0 + x1 = np.zeros((nocc, nocc, nvir, nvir), dtype=np.float64) + x1 += einsum("ijab->ijab", t2) + x1 += einsum("ijba->ijab", t2) * -1.0 + x1 += einsum("ib,ja->ijab", t1, t1) * -1.0 + x1 += einsum("ia,jb->ijab", t1, t1) + t4_abaaabaa += einsum("ijcb,klda->ijklabcd", t2, x1) * -1.0 + t4_abaaabaa += einsum("ljcb,ikda->ijklabcd", t2, x1) * -1.0 + x2 = np.zeros((nocc, nocc, nocc, nvir, nvir, nvir), dtype=np.float64) + x2 += einsum("ijkabc->ijkabc", t3) * -1.0 + x2 += einsum("ijkacb->ijkabc", t3) + x2 += einsum("ijkbac->ijkabc", t3) + x2 += einsum("ja,ikbc->ijkabc", t1, t2) + x2 += einsum("ja,ikcb->ijkabc", t1, t2) * -1.0 + x2 += einsum("jb,ikac->ijkabc", t1, t2) * -1.0 + x2 += einsum("jb,ikca->ijkabc", t1, t2) + x2 += einsum("jc,ikab->ijkabc", t1, t2) + x2 += einsum("jc,ikba->ijkabc", t1, t2) * -1.0 + x2 += einsum("ka,ijbc->ijkabc", t1, t2) * -1.0 + x2 += einsum("ka,ijcb->ijkabc", t1, t2) + x2 += einsum("kb,ijac->ijkabc", t1, t2) + x2 += einsum("kb,ijca->ijkabc", t1, t2) * -1.0 + x2 += einsum("kc,ijab->ijkabc", t1, t2) * -1.0 + x2 += einsum("kc,ijba->ijkabc", t1, t2) + x2 += einsum("ia,jkcb->ijkabc", t1, x0) * -1.0 + x2 += einsum("ib,jkca->ijkabc", t1, x1) * -1.0 + x2 += einsum("ic,jkab->ijkabc", t1, x1) * -1.0 + t4_abaaabaa += einsum("jb,iklacd->ijklabcd", t1, x2) + x3 = np.zeros((nocc, nocc, nocc, nvir, nvir, nvir), dtype=np.float64) + x3 += einsum("ijkabc->ijkabc", t3) + x3 += einsum("ia,kjcb->ijkabc", t1, t2) + x3 += einsum("ic,kjab->ijkabc", t1, t2) * -1.0 + x3 += einsum("ka,ijcb->ijkabc", t1, t2) * -1.0 + x3 += einsum("kc,ijab->ijkabc", t1, t2) + t4_abaaabaa += einsum("ic,kjlabd->ijklabcd", t1, x3) + t4_abaaabaa += einsum("lc,ijkabd->ijklabcd", t1, x3) + t4_abaaabaa += einsum("kc,ijlabd->ijklabcd", t1, x3) * -1.0 + return t4_abaaabaa, t4_abababab
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/types/wf/wf.html b/_modules/vayesta/core/types/wf/wf.html new file mode 100644 index 000000000..d1698c365 --- /dev/null +++ b/_modules/vayesta/core/types/wf/wf.html @@ -0,0 +1,225 @@ + + + + + + vayesta.core.types.wf.wf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.types.wf.wf

+import importlib
+import numpy as np
+import pyscf
+import pyscf.mp
+import pyscf.ci
+import pyscf.cc
+import pyscf.fci
+from vayesta.core.util import AbstractMethodError
+from vayesta.core.types import wf
+from vayesta.core.types.orbitals import SpatialOrbitals, SpinOrbitals
+
+
+
[docs]class WaveFunction: + + def __init__(self, mo, projector=None): + self.mo = mo + self.projector = projector + + def __repr__(self): + return "%s(norb= %r, nocc= %r, nvir=%r)" % (self.__class__.__name__, self.norb, self.nocc, self.nvir) + + @property + def norb(self): + return self.mo.norb + + @property + def nocc(self): + return self.mo.nocc + + @property + def nvir(self): + return self.mo.nvir + + @property + def norba(self): + return self.mo.norba + + @property + def norbb(self): + return self.mo.norbb + + @property + def nocca(self): + return self.mo.nocca + + @property + def noccb(self): + return self.mo.noccb + + @property + def nvira(self): + return self.mo.nvira + + @property + def nvirb(self): + return self.mo.nvirb + + @property + def nelec(self): + return self.mo.nelec + +
[docs] def make_rdm1(self, *args, **kwargs): + raise AbstractMethodError
+ +
[docs] def make_rdm2(self, *args, **kwargs): + raise AbstractMethodError
+ +
[docs] @staticmethod + def from_pyscf(obj, **kwargs): + # HF + # TODO + def eris_init(obj, mod): + if 'eris' in kwargs: + return kwargs['eris'] + eris = importlib.import_module(mod.__name__)._ChemistsERIs() + eris._common_init_(obj) + return eris + # MP2 + if isinstance(obj, pyscf.mp.ump2.UMP2): + eris = eris_init(obj, pyscf.mp.ump2) + mo = SpinOrbitals(eris.mo_coeff, energy=eris.mo_energy, occ=obj.nocc) + return wf.UMP2_WaveFunction(mo, obj.t2) + if isinstance(obj, pyscf.mp.mp2.MP2): + eris = eris_init(obj, pyscf.mp.mp2) + mo = SpatialOrbitals(eris.mo_coeff, energy=eris.mo_energy, occ=obj.nocc) + return wf.RMP2_WaveFunction(mo, obj.t2) + # CCSD + if isinstance(obj, pyscf.cc.uccsd.UCCSD): + eris = eris_init(obj, pyscf.cc.uccsd) + mo = SpinOrbitals(eris.mo_coeff, energy=eris.mo_energy, occ=obj.nocc) + return wf.UCCSD_WaveFunction(mo, obj.t1, obj.t2, l1=obj.l1, l2=obj.l2) + if isinstance(obj, pyscf.cc.ccsd.CCSD): + eris = eris_init(obj, pyscf.cc.ccsd) + mo = SpatialOrbitals(eris.mo_coeff, energy=eris.mo_energy, occ=obj.nocc) + return wf.RCCSD_WaveFunction(mo, obj.t1, obj.t2, l1=obj.l1, l2=obj.l2) + # CISD + if isinstance(obj, pyscf.ci.ucisd.UCISD): + eris = eris_init(obj, pyscf.cc.uccsd) + mo = SpinOrbitals(eris.mo_coeff, energy=eris.mo_energy, occ=obj.nocc) + c0, c1, c2 = obj.cisdvec_to_amplitudes(obj.ci) + return wf.UCISD_WaveFunction(mo, c0, c1, c2) + if isinstance(obj, pyscf.ci.cisd.CISD): + eris = eris_init(obj, pyscf.cc.ccsd) + mo = SpatialOrbitals(eris.mo_coeff, energy=eris.mo_energy, occ=obj.nocc) + c0, c1, c2 = obj.cisdvec_to_amplitudes(obj.ci) + return wf.RCISD_WaveFunction(mo, c0, c1, c2) + # FCI + if isinstance(obj, pyscf.fci.direct_uhf.FCISolver): + mo = kwargs['mo'] + return wf.UFCI_WaveFunction(mo, obj.ci) + if isinstance(obj, pyscf.fci.direct_spin1.FCISolver): + mo = kwargs['mo'] + if isinstance(mo, np.ndarray): + nelec = sum(obj.nelec) + assert (nelec % 2 == 0) + nocc = nelec // 2 + mo = SpatialOrbitals(mo, occ=nocc) + return wf.RFCI_WaveFunction(mo, obj.ci) + raise NotImplementedError
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/util.html b/_modules/vayesta/core/util.html new file mode 100644 index 000000000..c92ac99cc --- /dev/null +++ b/_modules/vayesta/core/util.html @@ -0,0 +1,798 @@ + + + + + + vayesta.core.util — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.util

+from contextlib import contextmanager
+from copy import deepcopy
+import itertools
+import dataclasses
+import functools
+import logging
+import os
+import re
+import string
+import sys
+from timeit import default_timer
+
+
+try:
+    import psutil
+except (ModuleNotFoundError, ImportError):
+    psutil = None
+
+import numpy as np
+
+
+modlog = logging.getLogger(__name__)
+
+# util module can be imported as *, such that the following is imported:
+__all__ = [
+        # General
+        'Object', 'OptionsBase', 'brange', 'deprecated', 'cache', 'call_once', 'with_doc',
+        # NumPy replacements
+        'dot', 'tril_indices_ndim', 'einsum', 'hstack', 'decompress_axes',
+        # Exceptions
+        'AbstractMethodError', 'ConvergenceError', 'OrthonormalityError', 'ImaginaryPartError',
+        'NotCalculatedError',
+        # String formatting
+        'energy_string', 'time_string', 'memory_string',
+        # Time & memory
+        'timer', 'log_time', 'get_used_memory', 'log_method',
+        # Other
+	'getattr_recursive', 'setattr_recursive',
+        'replace_attr', 'break_into_lines', 'fix_orbital_sign', 'split_into_blocks',
+        'getif', 'callif', 'permutations_with_signs',
+        ]
+
+
[docs]class Object: + pass
+ +
[docs]def cache(maxsize_or_user_function=16, typed=False, copy=False): + """Adds LRU cache to function or method. + + If the function or method returns a mutable object, e.g. a NumPy array, + cache hits will return the same object. If the object has been modified + (for example by the user on the script level), the modified object will be + returned by future calls. To avoid this, a (deep)copy of the result can be + performed, by setting copy=True. + + modified from https://stackoverflow.com/questions/54909357 + """ + # For Python 3.7 support: + if callable(maxsize_or_user_function): + user_function = maxsize_or_user_function + maxsize = 16 + else: + user_function = None + maxsize = maxsize_or_user_function + lru_cache = functools.lru_cache(maxsize, typed) + if not copy: + if user_function is not None: + return lru_cache(user_function) + else: + return lru_cache + def decorator(func): + cached_func = lru_cache(func) + @functools.wraps(func) + def wrapper(*args, **kwargs): + return deepcopy(cached_func(*args, **kwargs)) + wrapper.cache_clear = cached_func.cache_clear + wrapper.cache_info = cached_func.cache_info + # Python 3.9+ + if hasattr(cached_func, 'cache_parameters'): + wrapper.cache_parameters = cached_func.cache_parameters + return wrapper + return decorator
+ +
[docs]@functools.lru_cache(None) +def call_once(func, *args, **kwargs): + return func(*args, **kwargs)
+ +
[docs]def with_doc(doc): + """Use this decorator to add doc string for function + + @with_doc(doc) + def func: + ... + + is equivalent to + + func.__doc__ = doc + """ + if not isinstance(doc, str): + if hasattr(doc, '__doc__'): + doc = doc.__doc__ + def func_with_doc(func): + func.__doc__ = doc + return func + return func_with_doc
+ +# --- NumPy + +
[docs]def tril_indices_ndim(n, dims, include_diagonal=False): + """Return lower triangular indices for a multidimensional array. + + Copied from ebcc. + """ + + ranges = [np.arange(n)] * dims + + if dims == 0: + return tuple() + elif dims == 1: + return (ranges[0],) + + if include_diagonal: + func = np.greater_equal + else: + func = np.greater + + slices = [ + tuple(slice(None) if i == j else np.newaxis for i in range(dims)) for j in range(dims) + ] + + casted = [rng[ind] for rng, ind in zip(ranges, slices)] + mask = functools.reduce(np.logical_and, [func(a, b) for a, b in zip(casted[:-1], casted[1:])]) + + tril = tuple( + np.broadcast_to(inds, mask.shape)[mask] for inds in np.indices(mask.shape, sparse=True) + ) + + return tril
+ +
[docs]def decompress_axes(subscript, array_flat, shape, include_diagonal=False, symmetry=None): + """Decompress an array that has dimensions flattened according to + permutation symmetries in the signs. + + Copied from ebcc. + """ + + assert "->" not in subscript + + # Get symmetry string if needed: + if symmetry is None: + symmetry = "-" * len(subscript) + + # Initialise decompressed array + array = np.zeros(shape) + + # Substitute the input characters so that they are ordered: + subs = {} + i = 0 + for char in subscript: + if char not in subs: + subs[char] = chr(97 + i) + i += 1 + subscript = "".join([subs[s] for s in subscript]) + + # Reshape array so that all axes of the same character are adjacent: + arg = np.argsort(list(subscript)) + array = array.transpose(arg) + subscript = "".join([subscript[i] for i in arg]) + + # Reshape array so that all axes of the same character are flattened: + sizes = {} + for char, n in zip(subscript, array.shape): + if char in sizes: + assert sizes[char] == n + else: + sizes[char] = n + array = array.reshape([sizes[char] ** subscript.count(char) for char in sorted(set(subscript))]) + + # Check the symmetry string, and compress it: + n = 0 + symmetry_compressed = "" + for char in sorted(set(subscript)): + assert len(set(symmetry[n : n + subscript.count(char)])) == 1 + symmetry_compressed += symmetry[n] + n += subscript.count(char) + + # For each axis type, get the necessary lower-triangular indices: + indices = [ + tril_indices_ndim(sizes[char], subscript.count(char), include_diagonal=include_diagonal) + for char in sorted(set(subscript)) + ] + + # Iterate over permutations with signs: + for tup in itertools.product(*[permutations_with_signs(ind) for ind in indices]): + indices_perm, signs = zip(*tup) + signs = [s if symm == "-" else 1 for s, symm in zip(signs, symmetry_compressed)] + + # Apply the indices: + indices_perm = [ + np.ravel_multi_index(ind, (sizes[char],) * subscript.count(char)) + for ind, char in zip(indices_perm, sorted(set(subscript))) + ] + indices_perm = [ + ind[tuple(np.newaxis if i != j else slice(None) for i in range(len(indices_perm)))] + for j, ind in enumerate(indices_perm) + ] + shape = array[tuple(indices_perm)].shape + array[tuple(indices_perm)] = array_flat.reshape(shape) * np.prod(signs) + + # Reshape array to non-flattened format + array = array.reshape( + sum([(sizes[char],) * subscript.count(char) for char in sorted(set(subscript))], tuple()) + ) + + # Undo transpose: + arg = np.argsort(arg) + array = array.transpose(arg) + + return array
+ +
[docs]def dot(*args, out=None, ignore_none=False): + """Like NumPy's multi_dot, but variadic""" + if ignore_none: + args = [a for a in args if a is not None] + return np.linalg.multi_dot(args, out=out)
+ +def _einsum_replace_decorated_subscripts(subscripts): + """Support for decorated indices: a!, b$, c3, d123. + + Characters in ',->.()[]{}' cannot be used as decorators. + """ + free = sorted(set(string.ascii_letters).difference(set(subscripts))) + keep = (string.ascii_letters + ' ,->.()[]{}') + replaced = {} + subscripts_out = [] + for char in subscripts: + if char in keep: + subscripts_out += char + continue + else: + last = (subscripts_out.pop() if len(subscripts_out) else '%') + if last not in string.ascii_letters: + raise ValueError("Invalid subscripts: '%s'" % subscripts) + comb = (last + char) + if comb not in replaced: + replaced[comb] = free.pop() + subscripts_out += replaced[comb] + return ''.join(subscripts_out) + +def _ordered_einsum(einsumfunc, subscripts, *operands, **kwargs): + """Support for parenthesis in einsum subscripts: '(ab,bc),cd->ad'.""" + + def resolve(subs, *ops): + #print('resolve called with %s and %d operands' % (subs, len(ops))) + + idx_right = re.sub('[\]}]', ')', subs).find(')') + idx_left = re.sub('[\[{]', '(', subs[:idx_right]).rfind('(') + + if idx_left == idx_right == -1: + return einsumfunc(subs, *ops, **kwargs) + if (idx_left == -1 or idx_right == -1): + raise ValueError("Unmatched parenthesis: '%s'" % subs) + bracket_types = {'(': ')', '[': ']', '{': '}'} + if subs[idx_right] != bracket_types[subs[idx_left]]: + raise ValueError("Unmatched parenthesis: '%s'" % subs) + + subs_int = subs[idx_left+1:idx_right] + subs_left = subs[:idx_left] + subs_right = subs[idx_right+1:] + + # Split operands + nops_left = subs_left.count(',') + nops_right = subs_right.count(',') + nops_int = subs_int.count(',') + 1 + ops_int = ops[nops_left:nops_left+nops_int] + ops_left = ops[:nops_left] + ops_right = ops[nops_left+nops_int:] + + if '->' in subs_int: + subs_int_in, subs_int_out = subs_int.split('->') + else: + subs_int_in = subs_int + + #possible = subs_int_in.replace(',', '').replace(' ', '') + #subs_int_out = ''.join([x for x in possible if x in (subs_left + subs_right)]) + #subs_int = '->'.join([subs_int_in, subs_int_out]) + subs_int_out = np.core.einsumfunc._parse_einsum_input((subs_int_in, *ops_int))[1] + + # Perform intern einsum + res_int = einsumfunc(subs_int, *ops_int, **kwargs) + # Resolve recursively + subs_ext = subs_left + subs_int_out + subs_right + ops_ext = ops_left + (res_int,) + ops_right + return resolve(subs_ext, *ops_ext) + + res = resolve(subscripts, *operands) + return res + +
[docs]def einsum(subscripts, *operands, **kwargs): + subscripts = _einsum_replace_decorated_subscripts(subscripts) + + if np.any([x in subscripts for x in '()[]{}']): + return _ordered_einsum(einsum, subscripts, *operands, **kwargs) + + kwargs['optimize'] = kwargs.get('optimize', True) + driver = kwargs.get('driver', np.einsum) + try: + res = driver(subscripts, *operands, **kwargs) + # Better shape information in case of exception: + except ValueError: + modlog.fatal("einsum('%s',...) failed. shapes of arguments:", subscripts) + for i, arg in enumerate(operands): + modlog.fatal('%d: %r', i, list(np.asarray(arg).shape)) + raise + # Unpack scalars (for optimize = True): + if isinstance(res, np.ndarray) and res.ndim == 0: + res = res[()] + return res
+ +
[docs]def hstack(*args, ignore_none=True): + """Like NumPy's hstack, but variadic, ignores any arguments which are None and improved error message.""" + if ignore_none: + args = [x for x in args if x is not None] + try: + return np.hstack(args) + except ValueError as e: + modlog.critical("Exception while trying to stack the following objects:") + for x in args: + modlog.critical("type= %r shape= %r", type(x), x.shape if hasattr(x, 'shape') else "None") + raise e
+ +
[docs]def brange(*args, minstep=1, maxstep=None): + """Similar to PySCF's prange, but returning a slice instead. + + Start, stop, and blocksize can be accessed from each slice blk as + blk.start, blk.stop, and blk.step. + """ + if len(args) == 1: + stop = args[0] + start = 0 + step = 1 + elif len(args) == 2: + start, stop = args[:2] + step = 1 + elif len(args) == 3: + start, stop, step = args + else: + raise ValueError() + + if stop <= start: + return + if maxstep is None: + maxstep = (stop-start) + step = int(np.clip(step, minstep, maxstep)) + for i in range(start, stop, step): + blk = np.s_[i:min(i+step, stop)] + yield blk
+ +
[docs]def split_into_blocks(array, axis=0, blocksize=None, max_memory=int(1e9)): + size = array.shape[axis] + axis = axis % array.ndim + if blocksize is None: + mem = array.nbytes + nblocks = max(int(np.ceil(mem/max_memory)), 1) + blocksize = int(np.ceil(size/nblocks)) + if blocksize >= size: + yield slice(None), array + return + for i in range(0, size, blocksize): + blk = np.s_[i:min(i+blocksize, size)] + yield blk, array[axis*(slice(None), ) + (blk,)]
+ +# --- Exceptions + +
[docs]class AbstractMethodError(NotImplementedError): + pass
+ +
[docs]class ConvergenceError(RuntimeError): + pass
+ +
[docs]class ImaginaryPartError(RuntimeError): + pass
+ +
[docs]class OrthonormalityError(RuntimeError): + pass
+ +
[docs]class NotCalculatedError(AttributeError): + """Raise if a necessary attribute has not been calculated.""" + pass
+ +class SymmetryError(RuntimeError): + pass + +# --- Energy + +
[docs]def energy_string(energy, unit='Ha'): + if unit == 'eV': + energy *= 27.211386245988 + if unit: unit = ' %s' % unit + return '%+16.8f%s' % (energy, unit)
+ +# --- Time and memory + +timer = default_timer + +
[docs]@contextmanager +def log_time(logger, message, *args, mintime=None, **kwargs): + """Log time to execute the body of a with-statement. + + Use as: + >>> with log_time(log.info, 'Time for hcore: %s'): + >>> hcore = mf.get_hcore() + + Parameters + ---------- + logger + message + """ + try: + t0 = timer() + yield t0 + finally: + t = (timer()-t0) + if logger and (mintime is None or t >= mintime): + logger(message, *args, time_string(t), **kwargs)
+ +
[docs]def log_method(message='Time for %(classname).%(funcname): %s', log=None): + def decorator(func): + @functools.wraps(func) + def wrapped(self, *args, **kwargs): + nonlocal message, log + message = message.replace('%(classname)', type(self).__name__) + message = message.replace('%(funcname)', func.__name__) + log = log or getattr(self, 'log', False) or modlog + log.debugv("Entering method '%s'", func.__name__) + with log_time(log.timing, message): + res = func(self, *args, **kwargs) + log.debugv("Exiting method '%s'", func.__name__) + return res + return wrapped + return decorator
+ +
[docs]def time_string(seconds, show_zeros=False): + """String representation of seconds.""" + seconds, sign = abs(seconds), np.sign(seconds) + m, s = divmod(seconds, 60) + if seconds >= 3600 or show_zeros: + tstr = "%.0f h %.0f min" % divmod(m, 60) + elif seconds >= 60: + tstr = "%.0f min %.0f s" % (m, s) + else: + tstr = "%.1f s" % s + if sign == -1: + tstr = '-%s' % tstr + return tstr
+ +MEMUNITS = {'b': 1, 'kb': 1e3, 'mb': 1e6, 'gb': 1e9, 'tb': 1e12} + +
[docs]def get_used_memory(unit='b'): + if psutil is not None: + process = psutil.Process(os.getpid()) + mem = process.memory_info().rss # in bytes + # Fallback: use os module + elif sys.platform.startswith('linux'): + pagesize = os.sysconf("SC_PAGE_SIZE") + with open("/proc/%s/statm" % os.getpid()) as f: + mem = int(f.readline().split()[1])*pagesize + else: + mem = 0 + mem /= MEMUNITS[unit.lower()] + return mem
+ +
[docs]def memory_string(nbytes, fmt='6.2f'): + """String representation of nbytes""" + if isinstance(nbytes, np.ndarray) and nbytes.size > 1: + nbytes = nbytes.nbytes + if nbytes < 1e3: + val = nbytes + unit = "B" + elif nbytes < 1e6: + val = nbytes / 1e3 + unit = "kB" + elif nbytes < 1e9: + val = nbytes / 1e6 + unit = "MB" + elif nbytes < 1e12: + val = nbytes / 1e9 + unit = "GB" + else: + val = nbytes / 1e12 + unit = "TB" + return "{:{fmt}} {unit}".format(val, unit=unit, fmt=fmt)
+ +# --- + +# Recursive get- and setattr + +
[docs]def getattr_recursive(obj, attr, *args): + def _getattr(obj, attr): + return getattr(obj, attr, *args) + return functools.reduce(_getattr, [obj] + attr.split('.'))
+ +
[docs]def setattr_recursive(obj, attr, val): + pre, _, post = attr.rpartition('.') + return setattr(rgetattr(obj, pre) if pre else obj, post, val)
+ +
[docs]@contextmanager +def replace_attr(obj, **kwargs): + """Temporary replace attributes and methods of object.""" + orig = {} + try: + for name, attr in kwargs.items(): + orig[name] = getattr(obj, name) # Save originals + if callable(attr): + setattr(obj, name, attr.__get__(obj)) # For functions: replace and bind as method + else: + setattr(obj, name, attr) # Just set otherwise + yield obj + finally: + # Restore originals + for name, attr in orig.items(): + setattr(obj, name, attr)
+ +
[docs]def break_into_lines(string, linelength=100, sep=None, newline='\n'): + """Break a long string into multiple lines""" + if len(string) <= linelength: + return string + split = string.split(sep) + lines = [split[0]] + for s in split[1:]: + if (len(lines[-1]) + 1 + len(s)) > linelength: + # Start new line + lines.append(s) + else: + lines[-1] += ' ' + s + return newline.join(lines)
+ +
[docs]def deprecated(message=None, replacement=None): + """This is a decorator which can be used to mark functions + as deprecated. It will result in a warning being emitted + when the function is used.""" + def decorator(func): + if message is not None: + msg = message + else: + msg = "Function `%s` is deprecated." % func.__name__ + if replacement is not None: + msg += " Use `%s` instead." % replacement + + @functools.wraps(func) + def wrapped(*args, **kwargs): + if len(args) > 0 and hasattr(args[0], 'log'): + log = args[0].log + else: + log = modlog + log.deprecated(msg) + return func(*args, **kwargs) + return wrapped + return decorator
+ +
[docs]@dataclasses.dataclass +class OptionsBase: + """Abstract base class for Option dataclasses. + + This should be inherited and decorated with `@dataclasses.dataclass`. + One can then define attributes and default values as for any dataclass. + This base class provides some dictionary-like methods, like `get` and `items` + and also the method `replace`, in order to update options from another Option object + or dictionary. + """ + +
[docs] def get(self, attr, default=None): + """Dictionary-like access to attributes. + Allows the definition of a default value, of the attribute is not present. + """ + if hasattr(self, attr): + return getattr(self, attr) + return default
+ +
[docs] def asdict(self, deepcopy=False): + if deepcopy: + return dataclasses.asdict(self) + return self.__dict__
+ +
[docs] def keys(self): + return self.asdict().keys()
+ +
[docs] def values(self): + return self.asdict().values()
+ +
[docs] def items(self): + return self.asdict().items()
+ +
[docs] @classmethod + def get_default(cls, field): + for x in dataclasses.fields(cls): + if (x.name == field): + return x.default + raise TypeError
+ +
[docs] @classmethod + def get_default_factory(cls, field): + for x in dataclasses.fields(cls): + if (x.name == field): + return x.default_factory + raise TypeError
+ +
[docs] def replace(self, **kwargs): + keys = self.keys() + for key, val in kwargs.items(): + if key not in keys: + raise TypeError("replace got an unexpected keyword argument '%s'" % key) + selfval = getattr(self, key) + if isinstance(val, dict) and isinstance(selfval, dict): + for dkey in val.keys(): + if dkey not in selfval.keys(): + raise TypeError("Replace got an unexpected key for dictionary %s: '%s'" % (key, dkey)) + setattr(self, key, {**selfval, **val}) + else: + setattr(self, key, val) + return self
+ +
[docs] def update(self, **kwargs): + keys = self.keys() + for key, val in kwargs.items(): + if key not in keys: + continue + if isinstance(val, dict) and isinstance(getattr(self, key), dict): + #getattr(self, key).update(val) + setattr(self, key, {**getattr(self, key), **val}) + else: + setattr(self, key, val) + return self
+ +
[docs] @staticmethod + def dict_with_defaults(**kwargs): + return dataclasses.field(default_factory=lambda: kwargs)
+ +
[docs] @classmethod + def change_dict_defaults(cls, field, **kwargs): + defaults = cls.get_default_factory(field)() + return cls.dict_with_defaults(**{**defaults, **kwargs})
+ +
[docs]def fix_orbital_sign(mo_coeff, inplace=True): + # UHF + if np.ndim(mo_coeff[0]) == 2: + mo_coeff_a, sign_a = fix_orbital_sign(mo_coeff[0], inplace=inplace) + mo_coeff_b, sign_b = fix_orbital_sign(mo_coeff[1], inplace=inplace) + return (mo_coeff_a, mo_coeff_b), (sign_a, sign_b) + if not inplace: + mo_coeff = mo_coeff.copy() + absmax = np.argmax(abs(mo_coeff), axis=0) + nmo = mo_coeff.shape[-1] + swap = mo_coeff[absmax,np.arange(nmo)] < 0 + mo_coeff[:,swap] *= -1 + signs = np.ones((nmo,), dtype=int) + signs[swap] = -1 + return mo_coeff, signs
+ +
[docs]def getif(obj, key, cond=lambda x: x is not None, default=None): + """Returns obj[key] if cond(obj) else default.""" + if cond(obj): + return obj[key] + return default
+ +
[docs]def callif(func, arg, cond=lambda x, **kw: x is not None, default=None, **kwargs): + """Returns func(arg, **kwargs) if cond(arg, **kwargs) else default.""" + if cond(arg, **kwargs): + return func(arg, **kwargs) + return default
+ +
[docs]def permutations_with_signs(seq): + """Generate permutations of seq, yielding also a sign which is + equal to +1 for an even number of swaps, and -1 for an odd number + of swaps. + + Copied from ebcc. + """ + + def _permutations(seq): + if not seq: + return [[]] + + items = [] + for i, item in enumerate(_permutations(seq[:-1])): + inds = range(len(item) + 1) + if i % 2 == 0: + inds = reversed(inds) + items += [item[:i] + seq[-1:] + item[i:] for i in inds] + + return items + + return [(item, -1 if i % 2 else 1) for i, item in enumerate(_permutations(list(seq)))]
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/core/vlog.html b/_modules/vayesta/core/vlog.html new file mode 100644 index 000000000..815f70322 --- /dev/null +++ b/_modules/vayesta/core/vlog.html @@ -0,0 +1,322 @@ + + + + + + vayesta.core.vlog — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.core.vlog

+"""Vayesta logging module"""
+
+import functools
+import contextlib
+import logging
+
+from vayesta.mpi import mpi
+
+"""
+Log levels (* are custom levels):
+
+Name            Level           Usage
+----            -----           -----
+FATAL   (*)     100             For errors which will raise a non-recoverable Exception
+CRITICAL        50              For errors which will are non-recoverable
+ERROR           40              For errors which are likely non-recoverable
+WARNING         30              For possible errors and important information
+DEPRECATED      30              For deprecated code
+OUTPUT  (*)     25              Main result level - the only level which by default gets streamed to stdout
+INFO            20              Information, readable to users
+INFOV   (*)     15  (-v)        Verbose information, readable to users
+TIMING  (*)     12  (-vv)       Timing information for primary routines
+DEBUG           10  (-vv)       Debugging information, indented for developers
+DEBUGV  (*)      5  (-vvv)      Verbose debugging information
+TIMINGV (*)      2  (-vvv)      Verbose timings information for secondary subroutines
+TRACE   (*)      1  (-vvv)      To trace function flow
+"""
+
+LVL_PREFIX = {
+   "FATAL" : "FATAL",
+   "CRITICAL" : "CRITICAL",
+   "ERROR" : "ERROR",
+   "WARNING" : "WARNING",
+   "DEPRECATED" : "WARNING",
+   "OUT" : "OUTPUT",
+   "DEBUG" : "DEBUG",
+   "DEBUGV" : "DEBUG",
+   "TRACE" : "TRACE",
+   }
+
+
+
[docs]class NoLogger: + + def __getattr__(self, key): + """Return function which does nothing.""" + return (lambda *args, **kwargs : None)
+ +
[docs]class LevelRangeFilter(logging.Filter): + """Only log events with level in interval [low, high).""" + + def __init__(self, *args, low=None, high=None, **kwargs): + super().__init__(*args, **kwargs) + self._low = low + self._high = high + +
[docs] def filter(self, record): + if self._low is None: + return (record.levelno < self._high) + if self._high is None: + return (self._low <= record.levelno) + return (self._low <= record.levelno < self._high)
+ +
[docs]class LevelIncludeFilter(logging.Filter): + """Only log events with level in include.""" + + def __init__(self, *args, include, **kwargs): + super().__init__(*args, **kwargs) + self._include = include + +
[docs] def filter(self, record): + return (record.levelno in self._include)
+ +
[docs]class LevelExcludeFilter(logging.Filter): + """Only log events with level not in exlude.""" + + def __init__(self, *args, exclude, **kwargs): + super().__init__(*args, **kwargs) + self._exclude = exclude + +
[docs] def filter(self, record): + return (record.levelno not in self._exclude)
+ +
[docs]class VFormatter(logging.Formatter): + """Formatter which adds a prefix column and indentation.""" + + def __init__(self, *args, + show_level=True, show_mpi_rank=False, prefix_sep='|', + indent=False, indent_char=' ', indent_width=4, **kwargs): + super().__init__(*args, **kwargs) + + self.show_level = show_level + self.show_mpi_rank = show_mpi_rank + + self.prefix_width = 0 + if show_level: + self.prefix_width += len(max(LVL_PREFIX.values(), key=len)) + 2 + if show_mpi_rank: + self.prefix_width += len(str(mpi.size-1)) + 6 + + self.prefix_sep = prefix_sep + self.indent = indent + self.indent_char = indent_char + self.indent_width = indent_width + +
[docs] def format(self, record): + message = record.msg % record.args + indent = prefix = "" + if self.show_level: + prefix = LVL_PREFIX.get(record.levelname, "") + if prefix: + prefix = '[%s]' % prefix + if self.show_mpi_rank: + prefix += '[MPI %d]' % mpi.rank + prefix = '%-*s%s' % (self.prefix_width, prefix, self.prefix_sep) + if self.indent: + root = logging.getLogger() + indent = root.indentLevel * self.indent_width * self.indent_char + lines = [indent + x for x in message.split("\n")] + if prefix: + lines = [((prefix + " " + line) if line else prefix) for line in lines] + return "\n".join(lines)
+ +
[docs]class VStreamHandler(logging.StreamHandler): + """Default stream handler with IndentedFormatter""" + + def __init__(self, stream, formatter=None, **kwargs): + super().__init__(stream, **kwargs) + if formatter is None: + formatter = VFormatter() + self.setFormatter(formatter)
+ +
[docs]class VFileHandler(logging.FileHandler): + """Default file handler with IndentedFormatter""" + + def __init__(self, filename, mode='a', formatter=None, add_mpi_rank=True, delay=True, **kwargs): + filename = get_logname(filename, add_mpi_rank=add_mpi_rank) + super().__init__(filename, mode=mode, delay=delay, **kwargs) + if formatter is None: + formatter = VFormatter() + self.setFormatter(formatter)
+ +
[docs]def get_logname(name, add_mpi_rank=True, ext='txt'): + if mpi and add_mpi_rank: + name = '%s.mpi%d' % (name, mpi.rank) + if ext and not name.endswith('.%s' % ext): + name = '%s.%s' % (name, ext) + return name
+ +
[docs]def init_logging(): + """Call this to initialize and configure logging, when importing Vayesta. + + This will: + 1) Add four new logging levels: + `output`, `infov`, `timing`, `debugv`, and `timingv`. + 2) Adds the attribute `indentLevel` to the root logger and two new Logger methods: + `setIndentLevel`, `changeIndentLevel`. + """ + + # Add new log levels + # ------------------ + def add_log_level(level, name, log_once=False): + logging.addLevelName(level, name.upper()) + setattr(logging, name.upper(), level) + def logForLevel(self, message, *args, **kwargs): + if self.isEnabledFor(level): + self._log(level, message, args, **kwargs) + if log_once: + logForLevel = functools.lru_cache(None)(logForLevel) + def logToRoot(message, *args, **kwargs): + logging.log(level, message, *args, **kwargs) + setattr(logging.getLoggerClass(), name, logForLevel) + setattr(logging, name, logToRoot) + add_log_level(100, "fatal") + add_log_level(30, "deprecated", log_once=True) + add_log_level(25, "output") + add_log_level(15, "infov") + add_log_level(12, "timing") + add_log_level(5, "debugv") + add_log_level(2, "timingv") + add_log_level(1, "trace") + + # Add indentation support + # ----------------------- + # Note that indents are only tracked by the root logger + root = logging.getLogger() + root.indentLevel = 0 + + def setIndentLevel(self, level): + root = logging.getLogger() + root.indentLevel = max(level, 0) + return root.indentLevel + + def changeIndentLevel(self, delta): + root = logging.getLogger() + root.indentLevel = max(root.indentLevel + delta, 0) + return root.indentLevel + + class indent(contextlib.ContextDecorator): + + def __init__(self, delta=1): + self.delta = delta + self.level_init = None + self.root = logging.getLogger() + + def __enter__(self): + self.level_init = self.root.indentLevel + self.root.indentLevel = max(self.level_init+self.delta, 0) + + def __exit__(self, *args): + self.root.indentLevel = self.level_init + + logging.Logger.setIndentLevel = setIndentLevel + logging.Logger.changeIndentLevel = changeIndentLevel + logging.Logger.indent = indent + # Deprecated: + logging.Logger.withIndentLevel = indent
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/dmet.html b/_modules/vayesta/dmet.html new file mode 100644 index 000000000..13b8f342a --- /dev/null +++ b/_modules/vayesta/dmet.html @@ -0,0 +1,134 @@ + + + + + + vayesta.dmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.dmet

+"""Density Matrix Embedding Theory (DMET) method
+Author: Charles Scott
+email:  cjcargillscott@gmail.com
+"""
+
+import pyscf
+import pyscf.scf
+import logging
+
+try:
+    import cvxpy
+except ModuleNotFoundError as e:
+    cvxpy = None
+    raise ModuleNotFoundError("CVXPY is required for DMET correlation potential fitting.") from e
+
+from vayesta.dmet.dmet import RDMET
+from vayesta.dmet.udmet import UDMET
+
+log = logging.getLogger(__name__)
+
+
[docs]def DMET(mf, *args, **kwargs): + """Determine restricted or unrestricted by inspection of mean-field object""" + if isinstance(mf, pyscf.scf.uhf.UHF): + return UDMET(mf, *args, **kwargs) + elif isinstance(mf, pyscf.scf.rohf.ROHF): + log.warning("Converting ROHF reference to UHF") + return UDMET(mf.to_uhf(), *args, **kwargs) + return RDMET(mf, *args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/dmet/dmet.html b/_modules/vayesta/dmet/dmet.html new file mode 100644 index 000000000..9e8036636 --- /dev/null +++ b/_modules/vayesta/dmet/dmet.html @@ -0,0 +1,407 @@ + + + + + + vayesta.dmet.dmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.dmet.dmet

+import dataclasses
+from timeit import default_timer as timer
+
+import numpy as np
+import scipy
+
+from vayesta.core.qemb import Embedding
+from vayesta.core.util import break_into_lines, time_string
+from vayesta.dmet.fragment import DMETFragment, DMETFragmentExit
+
+from vayesta.dmet.sdp_sc import perform_SDP_fit
+from vayesta.dmet.updates import MixUpdate, DIISUpdate
+
+
+
[docs]@dataclasses.dataclass +class Options(Embedding.Options): + """Options for DMET calculations.""" + iao_minao: str = 'auto' # Minimal basis for IAOs + dm_with_frozen: bool = False # Add frozen parts to cluster DMs + # -- Self-consistency + maxiter: int = 30 + charge_consistent: bool = True + max_elec_err: float = 1e-4 + conv_tol: float = 1e-6 + diis: bool = True + mixing_param: float = 0.5 + mixing_variable: str = "hl rdm" + oneshot: bool = False + # --- Solver options + solver_options: dict = Embedding.Options.change_dict_defaults('solver_options', + # CCSD + solve_lambda=True)
+ +
[docs]@dataclasses.dataclass +class DMETResults: + cluster_sizes: np.ndarray = None + e_corr: float = None
+ +
[docs]class DMET(Embedding): + + Fragment = DMETFragment + Options = Options + + def __init__(self, mf, solver='CCSD', log=None, **kwargs): + t_start = timer() + # If we're running in oneshot mode will only do a single iteration, regardless of this setting, but good to have + # consistent settings. + if kwargs.get("oneshot", False): + kwargs["maxiter"] = 1 + + super().__init__(mf, solver=solver, log=log, **kwargs) + + self.log.info("Parameters of %s:", self.__class__.__name__) + self.log.info(break_into_lines(str(self.opts), newline='\n ')) + + # --- Check input + if not mf.converged: + self.log.error("Mean-field calculation not converged.") + + self.vcorr = None + + self.iteration = 0 + self.cluster_results = {} + self.results = [] + self.e_dmet = self.e_mf - self.mf.energy_nuc() + + self.log.timing("Time for DMET setup: %s", time_string(timer() - t_start)) + + @property + def e_tot(self): + return self.e_mf + self.e_corr + + def __repr__(self): + keys = ['mf', 'solver'] + fmt = ('%s(' + len(keys) * '%s: %r, ')[:-2] + ')' + values = [self.__dict__[k] for k in keys] + return fmt % (self.__class__.__name__, *[x for y in zip(keys, values) for x in y]) + +
[docs] def kernel(self): + """Run DMET calculation. + """ + t_start = timer() + + if self.nfrag == 0: + raise ValueError("No fragments defined for calculation.") + + maxiter = self.opts.maxiter + # View this as a single number for now. + if self.opts.bath_options['bathtype'] == 'mp2' and maxiter > 1: + raise NotImplementedError("MP2 bath calculation is currently ignoring the correlation potential, so does" + " not work properly for self-consistent calculations.") + + fock = self.get_fock() + if self.vcorr is None: + self.vcorr = np.zeros((self.nao,) * 2) + else: + self.log.info("Starting from previous correlation potential.") + + cpt = 0.0 + mf = self.mf + + sym_parents = self.get_symmetry_parent_fragments() + sym_children = self.get_symmetry_child_fragments() + nsym = [len(x) + 1 for x in sym_children] + + if not self.opts.mixing_variable == "hl rdm": + raise ValueError("Only DIIS extrapolation of the high-level rdms is current implemented.") + + if self.opts.diis: + self.updater = DIISUpdate() + else: + self.updater = MixUpdate(self.opts.mixing_param) + self.converged = False + for iteration in range(1, maxiter + 1): + self.iteration = iteration + self.log.info("Now running iteration %2d", iteration) + self.log.info("------------------------") + if iteration > 1: + self.reset() + # For first iteration want to run on provided mean-field state. + mo_energy, mo_coeff = self.mf.eig(fock + self.vcorr, self.get_ovlp()) + self.update_mf(mo_coeff, mo_energy) + + if self.opts.charge_consistent: + fock = self.get_fock() + # Need to optimise a global chemical potential to ensure electron number is converged. + nelec_mf = self._check_fragment_nelectron() + if type(nelec_mf) == tuple: + nelec_mf = sum(nelec_mf) + + if self.opts.screening == 'mrpa': + for f in self.get_fragments(sym_parent=None): + f.make_bath() + f.make_cluster() + self.build_screened_eris() + + def electron_err(cpt, construct_bath=False): + err = self.calc_electron_number_defect(cpt, nelec_mf, sym_parents, nsym, construct_bath) + return err + + err = electron_err(cpt, construct_bath=not self.opts.screening) + + if abs(err) > self.opts.max_elec_err * nelec_mf: + # Need to find chemical potential bracket. + # Error is positive if excess electrons at high-level, and negative if too few electrons at high-level. + # Changing chemical potential should introduces similar change in high-level electron number, so we want + # our new chemical potential to be shifted in the opposite direction as electron error. + new_cpt = cpt - np.sign(err) * 0.1 + # Set this in case of errors later on. + new_err = err + try: + new_err = electron_err(new_cpt) + except np.linalg.LinAlgError as e: + if self.solver == "CCSD": + self.log.info("Caught DIIS error in CCSD; trying smaller chemical potential deviation.") + # Want to end up with 3/4 of current value after multiplied by two. + new_cpt = cpt - (new_cpt - cpt) * 3 / 8 + else: + raise e + if err * new_err > 0: # Check if errors have same sign. + for ntry in range(10): + new_cpt = cpt + (new_cpt - cpt) * 2 + try: + new_err = electron_err(new_cpt) + except np.linalg.LinAlgError as e: + if self.solver == "CCSD": + self.log.info("Caught DIIS error in CCSD; trying smaller chemical potential deviation.") + # Want to end up with 3/4 of current value after multiplied by two. + new_cpt = cpt - (new_cpt - cpt) * 3 / 8 + else: + raise e + if err * new_err < 0: + break + else: + self.log.fatal("Could not find chemical potential bracket.") + break + # If we've got to here we've found a bracket. + [lo, hi] = sorted([cpt, new_cpt]) + cpt, res = scipy.optimize.brentq(electron_err, a=lo, b=hi, full_output=True, + xtol=self.opts.max_elec_err * nelec_mf) # self.opts.max_elec_err * nelec_mf) + self.log.info("Converged chemical potential: {:6.4e}".format(cpt)) + # Recalculate to ensure all fragments have up-to-date info. Brentq strangely seems to do an extra + # calculation at the end... + electron_err(cpt) + else: + self.log.info("Previous chemical potential still suitable") + + e1, e2, emf = 0.0, 0.0, 0.0 + for x, frag in enumerate(sym_parents): + e1_contrib, e2_contrib = frag.results.e1, frag.results.e2 + e1 += e1_contrib * nsym[x] + e2 += e2_contrib * nsym[x] + emf += frag.get_fragment_mf_energy() * nsym[x] + # print(e1 + e2, e1, e2) + # print(frag.get_fragment_dmet_energy()) + self.e_corr = e1 + e2 - emf + self.log.info("Total DMET energy {:8.4f}".format(self.e_tot)) + self.log.info("Energy Contributions: 1-body={:8.4f}, 2-body={:8.4f}".format(e1, e2)) + if self.opts.oneshot: + break + curr_rdms, delta_rdms = self.updater.update(self.hl_rdms) + self.log.info("Change in high-level RDMs: {:6.4e}".format(delta_rdms)) + vcorr_new = self.update_vcorr(fock, curr_rdms) + delta = sum((vcorr_new - self.vcorr).reshape(-1) ** 2) ** (0.5) + self.log.info("Delta Vcorr {:6.4e}".format(delta)) + if delta < self.opts.conv_tol: + self.converged = True + self.log.info("DMET converged after %d iterations" % iteration) + break + self.vcorr = vcorr_new + else: + self.log.error("Self-consistency not reached in {} iterations.".format(maxiter)) + + self.print_results() + + self.log.info("Total wall time: %s", time_string(timer() - t_start)) + self.log.info("All done.")
+ +
[docs] def calc_electron_number_defect(self, chempot, nelec_target, parent_fragments, nsym, construct_bath=True): + self.log.info("Running chemical potential={:8.6e}".format(chempot)) + + nelec_hl = 0.0 + exit = False + for x, frag in enumerate(parent_fragments): + msg = "Now running %s" % (frag) + self.log.info(msg) + self.log.info(len(msg) * "-") + self.log.changeIndentLevel(1) + try: + result = frag.kernel(construct_bath=construct_bath, chempot=chempot) + except DMETFragmentExit as e: + exit = True + self.log.info("Exiting %s", frag) + self.log.changeIndentLevel(-1) + raise e + self.cluster_results[frag.id] = result + self.log.changeIndentLevel(-1) + if exit: + break + # Project rdm into fragment space; currently in cluster canonical orbitals. + nelec_hl += frag.get_nelectron_hl() * nsym[x] + + self.hl_rdms = [f.get_frag_hl_dm() for f in parent_fragments] + self.log.info("Chemical Potential {:8.6e} gives Total electron deviation {:6.4e}".format( + chempot, nelec_hl - nelec_target)) + return nelec_hl - nelec_target
+ +
[docs] def update_vcorr(self, fock, curr_rdms): + # Now for the DMET self-consistency! + self.log.info("Now running DMET correlation potential fitting") + # Note that we want the total number of electrons, not just in fragments, and that this treats different spin + # channels separately; for RHF the resultant problems are identical and so can just be solved once. + # As such need to use the spin-dm, rather than spatial. + vcorr_new = perform_SDP_fit(self.mol.nelec[0], fock, self.get_impurity_coeffs(), [x / 2 for x in curr_rdms], + self.get_ovlp(), self.log) + return vcorr_new
+ +
[docs] def get_impurity_coeffs(self): + sym_parents = self.get_symmetry_parent_fragments() + sym_children = self.get_symmetry_child_fragments() + + return [ + [parent.c_frag] + [c.c_frag for c in children] for (parent, children) in zip(sym_parents, sym_children) + ]
+ +
[docs] def print_results(self): # , results): + self.log.info("Energies") + self.log.info("========") + fmt = "%-20s %+16.8f Ha" + # for i, frag in enumerate(self.loop()): + # e_corr = results["e_corr"][i] + # self.log.output(fmt, 'E(corr)[' + frag.trimmed_name() + ']=', e_corr) + self.log.output(fmt, 'E(corr)=', self.e_corr) + self.log.output(fmt, 'E(MF)=', self.e_mf) + self.log.output(fmt, 'E(nuc)=', self.mol.energy_nuc()) + self.log.output(fmt, 'E(tot)=', self.e_tot)
+ +
[docs] def print_clusters(self): + """Print fragments of calculations.""" + self.log.info("%3s %20s %8s %4s", "ID", "Name", "Solver", "Size") + for frag in self.loop(): + self.log.info("%3d %20s %8s %4d", frag.id, frag.name, frag.solver, frag.size)
+ +
[docs] def make_rdm1(self, *args, **kwargs): + return self.make_rdm1_demo(*args, **kwargs)
+ +
[docs] def make_rdm2(self, *args, **kwargs): + return self.make_rdm2_demo(*args, **kwargs)
+ +
[docs] def get_corrfunc(self, kind, dm1=None, dm2=None, **kwargs): + if dm1 is None: + dm1 = self.make_rdm1() + if dm2 is None: + dm2 = self.make_rdm2() + return super().get_corrfunc(kind, dm1=dm1, dm2=dm2, **kwargs)
+ +DMET.make_rdm1.__doc__ = DMET.make_rdm1_demo.__doc__ +DMET.make_rdm2.__doc__ = DMET.make_rdm2_demo.__doc__ + +RDMET = DMET +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/dmet/fragment.html b/_modules/vayesta/dmet/fragment.html new file mode 100644 index 000000000..b18973c1e --- /dev/null +++ b/_modules/vayesta/dmet/fragment.html @@ -0,0 +1,235 @@ + + + + + + vayesta.dmet.fragment — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.dmet.fragment

+import dataclasses
+
+# External libaries
+import numpy as np
+
+from vayesta.core.qemb import Fragment
+from vayesta.core.bath import BNO_Threshold
+
+from vayesta.core import ao2mo
+from vayesta.core.util import dot, log_time
+
+
+# We might want to move the useful things from here into core, since they seem pretty general.
+
+
[docs]class DMETFragmentExit(Exception): + pass
+ + + +
[docs]class DMETFragment(Fragment): +
[docs] @dataclasses.dataclass + class Results(Fragment.Results): + n_active: int = None + e1: float = None + e2: float = None + dm1: np.ndarray = None + dm2: np.ndarray = None
+ + def __init__(self, *args, **kwargs): + + """ + Parameters + ---------- + base : DMET + Base DMET object. + fid : int + Unique ID of fragment. + name : + Name of fragment. + """ + super().__init__(*args, **kwargs) + self.solver_results = None + +
[docs] def kernel(self, solver=None, init_guess=None, seris_ov=None, construct_bath=True, chempot=None): + """Run solver for a single BNO threshold. + + Parameters + ---------- + solver : {'MP2', 'CISD', 'CCSD', 'CCSD(T)', 'FCI'}, optional + Correlated solver. + + Returns + ------- + results : DMETFragmentResults + """ + solver = solver or self.base.solver + if self._dmet_bath is None or construct_bath: + self.make_bath() + + cluster = self.make_cluster() + # If we want to reuse previous info for initial guess and eris we'd do that here... + # We can now overwrite the orbitals from last BNO run: + self._c_active_occ = cluster.c_active_occ + self._c_active_vir = cluster.c_active_vir + + if solver is None: + return None + + cluster_solver = self.get_solver(solver) + # Chemical potential + if chempot is not None: + px = self.get_fragment_projector(self.cluster.c_active) + if isinstance(px, tuple): + cluster_solver.v_ext = (-chempot * px[0], -chempot * px[1]) + else: + cluster_solver.v_ext = -chempot * px + + with log_time(self.log.info, ("Time for %s solver:" % solver) + " %s"): + cluster_solver.kernel() + self.hamil = cluster_solver.hamil + self._results = results = self.Results(fid=self.id, wf=cluster_solver.wf, n_active=self.cluster.norb_active, + dm1=cluster_solver.wf.make_rdm1(), dm2=cluster_solver.wf.make_rdm2()) + + self.hamil = cluster_solver.hamil + + results.e1, results.e2 = self.get_dmet_energy_contrib(hamil=self.hamil) + + return results
+ +
[docs] def get_solver_options(self, solver): + solver_opts = {} + solver_opts.update(self.opts.solver_options) + return solver_opts
+ +
[docs] def get_dmet_energy_contrib(self, hamil=None): + """Calculate the contribution of this fragment to the overall DMET energy. + + TODO: use core.qemb.fragment.get_fragment_dmet_energy instead? + """ + # Projector to the impurity in the active basis. + P_imp = self.get_fragment_projector(self.cluster.c_active) + c_act = self.cluster.c_active + if hamil is None: + hamil = self.hamil + eris = hamil.get_eris_bare() + + nocc = self.cluster.c_active_occ.shape[1] + occ = np.s_[:nocc] + # Calculate the effective onebody interaction within the cluster. + f_act = np.linalg.multi_dot((c_act.T, self.mf.get_fock(), c_act)) + v_act = 2 * np.einsum('iipq->pq', eris[occ, occ]) - np.einsum('iqpi->pq', eris[occ, :, :, occ]) + h_eff = f_act - v_act + h_bare = np.linalg.multi_dot((c_act.T, self.base.get_hcore(), c_act)) + + e1 = 0.5 * dot(P_imp, h_bare + h_eff, self.results.dm1).trace() + e2 = 0.5 * np.einsum('pt,tqrs,pqrs->', P_imp, eris, self.results.dm2) + # Code to generate the HF energy contribution for testing purposes. + # mf_dm1 = np.linalg.multi_dot((c_act.T, self.base.get_ovlp(), self.mf.make_rdm1(),\ + # self.base.get_ovlp(), c_act)) + # e_hf = np.linalg.multi_dot((P_imp, 0.5 * (h_bare + f_act), mf_dm1)).trace() + return e1, e2
+ +
[docs] def get_frag_hl_dm(self): + c = dot(self.c_frag.T, self.mf.get_ovlp(), self.cluster.c_active) + return dot(c, self.results.dm1, c.T)
+ +
[docs] def get_nelectron_hl(self): + return self.get_frag_hl_dm().trace()
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/dmet/pdmet.html b/_modules/vayesta/dmet/pdmet.html new file mode 100644 index 000000000..9fb39bcfe --- /dev/null +++ b/_modules/vayesta/dmet/pdmet.html @@ -0,0 +1,177 @@ + + + + + + vayesta.dmet.pdmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.dmet.pdmet

+import copy
+import logging
+
+import numpy as np
+import scipy
+import scipy.linalg
+
+log = logging.getLogger(__name__)
+
+
[docs]def update_mf(mf, dm1, canonicalize=True, inplace=False, damping=0.0, diis=None): + """p-DMET mean-field update.""" + + if not inplace: + mf = copy.copy(mf) + if damping > 0: + dm1 = (1-damping)*dm1 + damping*mf.make_rdm1() + if diis: + dm1 = diis.update(dm1) + symerr = abs(dm1-dm1.T).max() + if symerr > 1e-10: + log.warning("Density-matrix not symmetric! L(inf)= %.3e", symerr) + + ovlp = mf.get_ovlp() + mo_occ, mo_coeff = scipy.linalg.eigh(dm1, b=ovlp, type=2) + mo_occ, mo_coeff = mo_occ[::-1], mo_coeff[:,::-1] + nocc = np.count_nonzero(mf.mo_occ > 0) + log.info("p-DMET occupation numbers:\n%r", mo_occ) + occ_homo = mo_occ[nocc-1] + occ_lumo = mo_occ[nocc] + if abs(occ_homo - occ_lumo) < 1e-8: + raise RuntimeError("Degeneracy in MO occupation.") + + if canonicalize: + fock = mf.get_fock() + occ, vir = np.s_[:nocc], np.s_[nocc:] + foo = np.linalg.multi_dot((mo_coeff[:,occ].T, fock, mo_coeff[:,occ])) + eo, ro = np.linalg.eigh(foo) + log.debug("Occupied eigenvalues:\n%r", eo) + mo_coeff[:,occ] = np.dot(mo_coeff[:,occ], ro) + fvv = np.linalg.multi_dot((mo_coeff[:,vir].T, fock, mo_coeff[:,vir])) + ev, rv = np.linalg.eigh(fvv) + log.debug("Virtual eigenvalues:\n%r", ev) + mo_coeff[:,vir] = np.dot(mo_coeff[:,vir], rv) + + mf.mo_coeff = mo_coeff + mf.mo_energy = None + mf.e_tot = mf.energy_tot() + return mf
+ + +if __name__ == '__main__': + import pyscf + import pyscf.gto + import pyscf.scf + import pyscf.cc + + logging.basicConfig(level=logging.DEBUG) + + mol = pyscf.gto.Mole(atom='H 0 0 0 ; F 0 0 2', basis='cc-pvdz') + mol.build() + + mf = pyscf.scf.RHF(mol) + mf.kernel() + log.debug("HF eigenvalues:\n%r", mf.mo_energy) + + cc = pyscf.cc.CCSD(mf) + cc.kernel() + + dm1 = cc.make_rdm1(ao_repr=True) + mf = update_mf(mf, dm1) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/dmet/sdp_sc.html b/_modules/vayesta/dmet/sdp_sc.html new file mode 100644 index 000000000..0f6325b8d --- /dev/null +++ b/_modules/vayesta/dmet/sdp_sc.html @@ -0,0 +1,184 @@ + + + + + + vayesta.dmet.sdp_sc — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.dmet.sdp_sc

+import numpy as np
+
+from vayesta.dmet import cvxpy as cp
+
+
+
[docs]def perform_SDP_fit(nelec, fock, impurity_projectors, target_rdms, ovlp, log): + """Given all required information about the system, generate the correlation potential reproducing the local DM + via a semidefinite program, as described in doi.org/10.1103/PhysRevB.102.085123. Initially use SCS solver, though + others (eg. MOSEK) could be used if this runs into issues. + + Note that initially we will only have a single impurity in each symmetry class, until the fragmentation routines are + updated to include symmetry. + + Parameters + ---------- + nelec: integer + Number of electrons in the system. + fock: np.array + Fock matrix of the full system, in the spatial orbital basis. + impurity_projectors: list of list of np.array + For each class of symmetry-equivalent impurities, projection from the full spatial orbital basis to the impurity + set. + target_rdms: list of np.array + Impurity-local one-body density matrices for each class of impurities. + ovlp: np.array + Overlap matrix of the AOs, so we can implicitly transform into the PAO basis. + """ + # print("Target RDMs:") + # print(target_rdms) + # print([x.trace() for x in target_rdms]) + + # First calculate the number of different symmetry-eqivalent orbital sets for each class of impurity (this is the + # symmetry factor, elsewhere in the code). + nimp = [x[0].shape[1] for x in impurity_projectors] + nsym = [len(x) for x in impurity_projectors] + log.info("Number of site fragments: %s" % nimp) + log.info("Number of symmetry-related fragments: %s" % nsym) + + z = cp.Variable(fock.shape, PSD=True) + us = [cp.Variable((i, i), symmetric=True) for i in nimp] + alpha = cp.Variable(1) + + # We have the coefficients of the impurity orbitals in the nonorthogonal AO basis, C. + # The coefficients of the AOs in the impurity orbitals is then equal to S @ C.T + AO_in_imps = [[aproj.T @ ovlp for aproj in curr_proj] for curr_proj in impurity_projectors] + + # Check this is correctly orthogonal. + # print([x[0].T @ y[0].T for (x,y) in zip(impurity_projectors, AO_in_imps)]) + + # Want to construct the full correlation potential, in the AO basis. + utot = sum( + [cp.matmul(aproj.T, cp.matmul(us[i], aproj)) for i, curr_proj in enumerate(AO_in_imps) for aproj in curr_proj]) + # import scipy + # c_pao = np.linalg.inv(scipy.linalg.sqrtm(ovlp)) + + # First constraint in AO basis required for solution, second enforces tracelessness of Vcorr. + constraints = [ + fock + utot + z - alpha * ovlp >> 0, + sum([cp.trace(x) for x in us]) == 0, + ] + # Object function computed implicitly in PAO basis; partially use the fragment basis thanks to the invariance of the + # trace to orthogonal rotations (if you're using nonorthogonal fragment orbitals this will need a bit more thought). + objective = cp.Minimize( + sum([cp.trace(rdm1 @ ux) * ni for ni, rdm1, ux in zip(nsym, target_rdms, us)]) + - alpha * nelec + cp.trace(cp.matmul(z, np.linalg.inv(ovlp))) + ) + prob = cp.Problem(objective, constraints) + + solval = prob.solve(solver=cp.SCS, eps=1e-8) + msg = "SDP fitting completed. Status= %s" % prob.status + if not prob.status in [cp.OPTIMAL]: # , cp.OPTIMAL_INACCURATE]: + log.warning(msg) + else: + log.info(msg) + + # Report the result of the optimisation. + return utot.value
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/dmet/udmet.html b/_modules/vayesta/dmet/udmet.html new file mode 100644 index 000000000..c852dd7c9 --- /dev/null +++ b/_modules/vayesta/dmet/udmet.html @@ -0,0 +1,143 @@ + + + + + + vayesta.dmet.udmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.dmet.udmet

+import numpy as np
+
+from vayesta.core.qemb import UEmbedding
+
+from vayesta.dmet import RDMET
+from vayesta.dmet.ufragment import UDMETFragment as Fragment
+
+from vayesta.dmet.sdp_sc import perform_SDP_fit
+
+
+
[docs]class UDMET(UEmbedding, RDMET): + Fragment = Fragment + +
[docs] def update_vcorr(self, fock, curr_rdms): + impurity_coeffs = self.get_impurity_coeffs() + self.log.info("Now running DMET correlation potential fitting") + # Note that we want the total number of electrons, not just in fragments, and that this uses spatial orbitals. + vcorr_new = np.array((perform_SDP_fit(self.mol.nelec[0], fock[0], impurity_coeffs[0], [x[0] for x in curr_rdms], + self.get_ovlp(), self.log), + perform_SDP_fit(self.mol.nelec[1], fock[1], impurity_coeffs[1], [x[1] for x in curr_rdms], + self.get_ovlp(), self.log))) + + return vcorr_new
+ +
[docs] def get_impurity_coeffs(self): + sym_parents = self.get_symmetry_parent_fragments() + sym_children = self.get_symmetry_child_fragments() + return [ + [ + [parent.c_frag[x]] + [c.c_frag[x] for c in children] for (parent, children) in zip(sym_parents, + sym_children)] + for x in [0, 1] + ]
+ +UDMET.make_rdm1.__doc__ = UDMET.make_rdm1_demo.__doc__ +UDMET.make_rdm2.__doc__ = UDMET.make_rdm2_demo.__doc__ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/dmet/ufragment.html b/_modules/vayesta/dmet/ufragment.html new file mode 100644 index 000000000..eb5b6e337 --- /dev/null +++ b/_modules/vayesta/dmet/ufragment.html @@ -0,0 +1,166 @@ + + + + + + vayesta.dmet.ufragment — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.dmet.ufragment

+import numpy as np
+
+from vayesta.core.util import dot, einsum, log_time, timer
+from vayesta.core.qemb import UFragment
+from vayesta.dmet.fragment import DMETFragment
+
+
[docs]class UDMETFragment(UFragment, DMETFragment): + +
[docs] def set_cas(self, *args, **kwargs): + raise NotImplementedError()
+ +
[docs] def get_frag_hl_dm(self): + ca = dot(self.c_frag[0].T, self.mf.get_ovlp(), self.cluster.c_active[0]) + cb = dot(self.c_frag[1].T, self.mf.get_ovlp(), self.cluster.c_active[1]) + + return dot(ca, self.results.dm1[0], ca.T), dot(cb, self.results.dm1[1], cb.T)
+ +
[docs] def get_nelectron_hl(self): + dma, dmb = self.get_frag_hl_dm() + return dma.trace() + dmb.trace()
+ +
[docs] def get_dmet_energy_contrib(self, hamil=None): + """Calculate the contribution of this fragment to the overall DMET energy.""" + # Projector to the impurity in the active basis. + p_imp_a, p_imp_b = self.get_fragment_projector(self.cluster.c_active) + + c_active = self.cluster.c_active + t0 = timer() + if hamil is None: + hamil = self.hamil + eris = hamil.get_eris_bare() + + fock = self.base.get_fock() + fa = dot(c_active[0].T, fock[0], c_active[0]) + fb = dot(c_active[1].T, fock[1], c_active[1]) + oa = np.s_[:self.cluster.nocc_active[0]] + ob = np.s_[:self.cluster.nocc_active[1]] + gaa, gab, gbb = eris + va = (einsum('iipq->pq', gaa[oa,oa]) + einsum('pqii->pq', gab[:,:,ob,ob]) # Coulomb + - einsum('ipqi->pq', gaa[oa,:,:,oa])) # Exchange + vb = (einsum('iipq->pq', gbb[ob,ob]) + einsum('iipq->pq', gab[oa,oa]) # Coulomb + - einsum('ipqi->pq', gbb[ob,:,:,ob])) # Exchange + h_eff = (fa-va, fb-vb) + + h_bare = tuple([dot(c.T, self.base.get_hcore(), c) for c in c_active]) + + e1 = 0.5 * (dot(p_imp_a, h_bare[0] + h_eff[0], self.results.dm1[0]).trace() + + dot(p_imp_b, h_bare[1] + h_eff[1], self.results.dm1[1]).trace()) + + e2 = 0.5 * (einsum("tp,pqrs,tqrs->", p_imp_a, eris[0], self.results.dm2[0]) + + einsum("tp,pqrs,tqrs->", p_imp_a, eris[1], self.results.dm2[1]) + + einsum("tr,pqrs,pqts->", p_imp_b, eris[1], self.results.dm2[1]) + + einsum("tp,pqrs,tqrs->", p_imp_b, eris[2], self.results.dm2[2])) + + # Code to generate the HF energy contribution for testing purposes. + # mf_dm1 = np.linalg.multi_dot((c_act.T, self.base.get_ovlp(), self.mf.make_rdm1(),\ + # self.base.get_ovlp(), c_act)) + # e_hf = np.linalg.multi_dot((P_imp, 0.5 * (h_bare + f_act), mf_dm1)).trace() + return e1, e2
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/dmet/updates.html b/_modules/vayesta/dmet/updates.html new file mode 100644 index 000000000..d1e30abb6 --- /dev/null +++ b/_modules/vayesta/dmet/updates.html @@ -0,0 +1,179 @@ + + + + + + vayesta.dmet.updates — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.dmet.updates

+import numpy as np
+
+from pyscf.lib import diis
+
+
+
[docs]class Update: + def __init__(self): + self.param_shape = None + self.prev_params = None + + def _flatten_params(self, params): + + def get_shape(x): + return [get_shape(y) if type(y) != np.ndarray else y.shape for y in x] + + def get_flat(x): + return np.concatenate([get_flat(y) if type(y) != np.ndarray else y.ravel() for y in x]) + + flat_params = get_flat(params) + + if self.param_shape is None: + self.param_shape = get_shape(params) + self.prev_params = np.zeros_like(flat_params) + + return flat_params + + def _unflatten_params(self, params): + res = [] + x = 0 + + def get_nonflat(flat_params, shapes, x): + if type(shapes[0]) == int: + return flat_params[x:x + np.product(shapes)].reshape(shapes), x + np.product(shapes) + else: + finres = [] + for shape in shapes: + res, x = get_nonflat(flat_params, shape, x) + finres += [res] + return finres, x + + nonflat_params, x = get_nonflat(params, self.param_shape, x) + assert (x == len(params)) + return nonflat_params
+ + +
[docs]class DIISUpdate(Update): + def __init__(self, space_size=6, min_space_size=1): + super().__init__() + # Force incore on DIIS, otherwise we'll demolish our storage for large enough systems. + self.adiis = diis.DIIS(incore=True) + self.adiis.space = space_size + self.adiis.min_space = min_space_size + +
[docs] def update(self, params): + flat_params = self._flatten_params(params) + diff = sum((flat_params - self.prev_params) ** 2) ** (0.5) + update = self.adiis.update(flat_params) + self.prev_params = flat_params + return self._unflatten_params(update), diff
+ + +
[docs]class MixUpdate(Update): + def __init__(self, alpha=1.0): + super().__init__() + self.alpha = alpha + +
[docs] def update(self, params): + flat_params = self._flatten_params(params) + diff = sum((flat_params - self.prev_params) ** 2) ** (0.5) + update = (1.0 - self.alpha) * self.prev_params + self.alpha * flat_params + self.prev_params = flat_params + return self._unflatten_params(update), diff
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/edmet.html b/_modules/vayesta/edmet.html new file mode 100644 index 000000000..616b72498 --- /dev/null +++ b/_modules/vayesta/edmet.html @@ -0,0 +1,128 @@ + + + + + + vayesta.edmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.edmet

+"""Extended Density Matrix Embedding Theory (EDMET) method
+Author: Charles Scott
+email:  cjcargillscott@gmail.com
+"""
+
+import pyscf
+import pyscf.scf
+import logging
+
+from vayesta.edmet.edmet import REDMET
+from vayesta.edmet.uedmet import UEDMET
+
+log = logging.getLogger(__name__)
+
+
[docs]def EDMET(mf, *args, **kwargs): + """Determine restricted or unrestricted by inspection of mean-field object""" + if isinstance(mf, pyscf.scf.uhf.UHF): + return UEDMET(mf, *args, **kwargs) + elif isinstance(mf, pyscf.scf.rohf.ROHF): + log.warning("Converting ROHF reference to UHF") + return UEMET(mf.to_uhf(), *args, **kwargs) + return REDMET(mf, *args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/edmet/edmet.html b/_modules/vayesta/edmet/edmet.html new file mode 100644 index 000000000..a7634786e --- /dev/null +++ b/_modules/vayesta/edmet/edmet.html @@ -0,0 +1,485 @@ + + + + + + vayesta.edmet.edmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.edmet.edmet

+import dataclasses
+from timeit import default_timer as timer
+
+import numpy as np
+import scipy
+
+from vayesta.core.util import dot, time_string
+from vayesta.dmet import RDMET
+from vayesta.dmet.updates import MixUpdate, DIISUpdate
+from vayesta.rpa import ssRPA, ssRIRPA
+from vayesta.edmet.fragment import EDMETFragment, EDMETFragmentExit
+from vayesta.solver import check_solver_config
+
+
[docs]@dataclasses.dataclass +class Options(RDMET.Options): + maxiter: int = 1 + make_dd_moments: bool = False + old_sc_condition: bool = False + max_bos: int = np.inf + occ_proj_kernel: bool = False + boson_xc_kernel: bool = False + bosonic_interaction: str = "xc" + solver_options: dict = RDMET.Options.change_dict_defaults('solver_options', + polaritonic_shift=True)
+ + +
[docs]@dataclasses.dataclass +class EDMETResults: + cluster_sizes: np.ndarray = None + e_corr: float = None
+ +
[docs]class EDMET(RDMET): + + Fragment = EDMETFragment + Options = Options + + def __init__(self, mf, solver='EBFCI', log=None, **kwargs): + # If we aren't running in oneshot mode we need to calculate the dd moments. + if not kwargs.get("oneshot", False): + kwargs["make_dd_moments"] = True + + super().__init__(mf, solver=solver, log=log, **kwargs) + self.interaction_kernel = None + + @property + def with_df(self): + return hasattr(self.mf, "with_df") + + @property + def eps(self): + eps = np.zeros((self.nocc, self.nvir)) + eps = eps + self.mo_energy[self.nocc:] + eps = (eps.T - self.mo_energy[:self.nocc]).T + eps = eps.reshape(-1) + return eps, eps + +
[docs] def check_solver(self, solver): + is_uhf = np.ndim(self.mo_coeff[1]) == 2 + is_eb = True + check_solver_config(is_uhf, is_eb, solver, self.log)
+ +
[docs] def kernel(self): + + t_start = timer() + + if self.nfrag == 0: + raise ValueError("No fragments defined for calculation.") + + maxiter = self.opts.maxiter + # rdm = self.mf.make_rdm1() + # if bno_thr < np.inf and maxiter > 1: + # raise NotImplementedError("MP2 bath calculation is currently ignoring the correlation potential, so does" + # " not work properly for self-consistent calculations.") + # Initialise parameters for self-consistency iteration + fock = self.get_fock() + if self.vcorr is None: + self.vcorr = np.zeros((self.nao,) * 2) + else: + self.log.info("Starting from previous correlation potential.") + if self.with_df: + # Store alpha and beta components separately. + self.xc_kernel = [[np.zeros((0, self.nao, self.nao))] * 2] * 2 + else: + # Store alpha-alpha, alpha-beta and beta-beta components separately. + self.xc_kernel = [np.zeros((self.nao,) * 4)] * 3 + + cpt = 0.0 + mf = self.mf + + sym_parents = self.get_symmetry_parent_fragments() + sym_children = self.get_symmetry_child_fragments() + nsym = [len(x) + 1 for x in sym_children] + + if not self.opts.mixing_variable == "hl rdm": + raise ValueError("Only DIIS extrapolation of the high-level rdms is current implemented.") + + if self.opts.diis: + self.updater = DIISUpdate() + else: + self.updater = MixUpdate(self.opts.mixing_param) + + self.converged = False + for iteration in range(1, maxiter + 1): + self.iteration = iteration + self.log.info("Now running iteration= %2d", iteration) + self.log.info("****************************************************") + if iteration > 1: + self.reset() + # For first iteration want to run on provided mean-field state. + mo_energy, mo_coeff = mf.eig(fock + self.vcorr, self.get_ovlp()) + self.update_mf(mo_coeff, mo_energy) + if self.opts.charge_consistent: + fock = self.get_fock() + self.set_up_fragments(sym_parents, nsym) + + # Need to optimise a global chemical potential to ensure electron number is converged. + nelec_mf = self._check_fragment_nelectron() + if type(nelec_mf) == tuple: + nelec_mf = sum(nelec_mf) + + def electron_err(cpt): + err = self.calc_electron_number_defect(cpt, nelec_mf, sym_parents, nsym) + return err + + err = electron_err(cpt) + if abs(err) > self.opts.max_elec_err * nelec_mf: + # Need to find chemical potential bracket. + # Error is positive if excess electrons at high-level, and negative if too few electrons at high-level. + # Changing chemical potential should introduces similar change in high-level electron number, so we want + # our new chemical potential to be shifted in the opposite direction as electron error. + new_cpt = cpt - np.sign(err) * 0.1 + # Set this in case of errors later on. + new_err = err + try: + new_err = electron_err(new_cpt) + except np.linalg.LinAlgError as e: + if self.solver == "EBCCSD": + self.log.info("Caught DIIS error in CCSD; trying smaller chemical potential deviation.") + # Want to end up with 3/4 of current value after multiplied by two. + new_cpt = cpt - (new_cpt - cpt) * 3 / 8 + else: + raise e + if err * new_err > 0: # Check if errors have same sign. + for ntry in range(10): + new_cpt = cpt + (new_cpt - cpt) * 2 + try: + new_err = electron_err(new_cpt) + except np.linalg.LinAlgError as e: + if self.solver == "CCSD": + self.log.info("Caught DIIS error in CCSD; trying smaller chemical potential deviation.") + # Want to end up with 3/4 of current value after multiplied by two. + new_cpt = cpt - (new_cpt - cpt) * 3 / 8 + else: + raise e + if err * new_err < 0: + break + else: + self.log.fatal("Could not find chemical potential bracket.") + # If we've got to here we've found a bracket. + [lo, hi] = sorted([cpt, new_cpt]) + cpt, res = scipy.optimize.brentq(electron_err, a=lo, b=hi, full_output=True, + xtol=self.opts.max_elec_err * nelec_mf) + # self.opts.max_elec_err * nelec_mf) + self.log.info("Converged chemical potential: %6.4e", cpt) + # Recalculate to ensure all fragments have up-to-date info. Brentq strangely seems to do an extra + # calculation at the end... + electron_err(cpt) + else: + self.log.info("Previous chemical potential still suitable") + + e1, e2, efb, emf = 0.0, 0.0, 0.0, 0.0 + for x, frag in enumerate(sym_parents): + e1_contrib, e2_contrib, efb_contrib = frag.results.e1, frag.results.e2, frag.results.e_fb + e1 += e1_contrib * nsym[x] + e2 += e2_contrib * nsym[x] + efb += efb_contrib * nsym[x] + emf += frag.get_fragment_mf_energy() * nsym[x] + + self.e_corr = e1 + e2 + efb + self.e_nonlocal - emf + self.log.info("Total EDMET energy {:12.8f}".format(self.e_tot)) + self.log.info( + "Energy Contributions: 1-body={:12.8f} \n" + " 2-body={:12.8f} \n" + " coupled-boson={:12.8f} \n" + " nonlocal correlation energy={:12.8f} \n" + " mean-field energy={:12.8f} \n" + " correlation energy={:12.8f}".format(e1, e2, efb, self.e_nonlocal, emf, self.e_corr)) + if self.opts.oneshot: + break + # Want to do coupled DIIS optimisation of high-level rdms and local dd response moments. + [curr_rdms, curr_dd0, curr_dd1], delta_prop = self.updater.update([self.hl_rdms, self.hl_dd0, self.hl_dd1]) + + self.log.info("Change in high-level properties: {:6.4e}".format(delta_prop)) + # Now for the DMET self-consistency! + self.log.info("Now running DMET correlation potential fitting") + vcorr_new = self.update_vcorr(fock, curr_rdms) + delta = sum((vcorr_new - self.vcorr).reshape(-1) ** 2) ** (0.5) + self.log.info("Delta Vcorr {:6.4e}".format(delta)) + + xc_kernel_new = self.get_updated_correlation_kernel(curr_dd0, curr_dd1, sym_parents, sym_children) + if delta < self.opts.conv_tol and delta_prop < self.opts.conv_tol: + self.converged = True + self.log.info("EDMET converged after %d iterations" % iteration) + break + else: + self.vcorr = vcorr_new + self.xc_kernel = xc_kernel_new + else: + self.log.error("Self-consistency not reached in {} iterations.".format(maxiter)) + # Now have final results. + self.print_results() + self.timing = timer() - t_start + self.log.info("Total wall time: %s", time_string(self.timing)) + + self.log.info("All done.")
+ +
[docs] def set_up_fragments(self, sym_parents, nsym): + + # First, set up and run RPA. Note that our self-consistency only couples same-spin excitations so we can + # solve a subset of the RPA equations. + if self.with_df: + # Set up for RIRPPA zeroth moment calculation. + rpa = ssRIRPA(self.mf, self.xc_kernel, self.log) + self.e_rpa, energy_error = rpa.kernel_energy(correction="linear") + self.log.info("RPA total energy=%6.4e", self.e_rpa) + # Get fermionic bath set up, and calculate the cluster excitation space. + rot_ovs = [f.set_up_fermionic_bath() for f in sym_parents] + target_rot = np.concatenate(rot_ovs, axis=0) + if target_rot.shape[0] > 0: + moms_interact, est_errors = rpa.kernel_moms(0, target_rot, npoints=48) + else: + moms_interact = np.zeros_like(target_rot) + # Get appropriate slices to obtain required active spaces. + ovs_active = [f.ov_active_tot for f in sym_parents] + ovs_active_slices = [slice(sum(ovs_active[:i]), sum(ovs_active[:i + 1])) for i in + range(len(sym_parents))] + # Use interaction component of moment to generate bosonic degrees of freedom. + rot_bos = [f.define_bosons(moms_interact[0, sl, :]) for (f, sl) in zip(sym_parents, ovs_active_slices)] + nbos = [x.shape[0] for x in rot_bos] + bos_slices = [slice(sum(nbos[:i]), sum(nbos[:i + 1])) for i in range(len(sym_parents))] + if sum(nbos) > 0: + # Calculate zeroth moment of bosonic degrees of freedom. + mom0_bos, est_errors = rpa.kernel_moms(0, np.concatenate(rot_bos, axis=0), npoints=48) + else: + mom0_bos = np.zeros((sum(nbos), moms_interact.shape[2])) + eps = np.concatenate(self.eps) + # Can then invert relation to generate coupled electron-boson Hamiltonian. + e_nonlocal = self.e_rpa + for f, nc, sl in zip(sym_parents, nsym, bos_slices): + e_nonlocal -= f.construct_boson_hamil(mom0_bos[0, sl, :], eps, self.xc_kernel) * nc + else: + rpa = ssRPA(self.mf, self.log) + # We need to explicitly solve RPA equations before anything. + rpa.kernel(xc_kernel=self.xc_kernel) + self.log.info("RPA particle-hole gap %4.2e", rpa.freqs_ss.min()) + # Then generate full RPA moments. + mom0 = rpa.gen_moms(0, self.xc_kernel)[0] + eps = np.concatenate(self.eps) + self.e_rpa = rpa.calc_energy_correction(self.xc_kernel, version=3) + e_nonlocal = self.e_rpa + self.log.info("RPA total energy=%6.4e", e_nonlocal) + for f, nc in zip(sym_parents, nsym): + rot_ov = f.set_up_fermionic_bath() + mom0_interact = dot(rot_ov, mom0) + rot_bos = f.define_bosons(mom0_interact) + mom0_bos = dot(rot_bos, mom0) + e_nonlocal -= f.construct_boson_hamil(mom0_bos, eps, self.xc_kernel) * nc + self.e_nonlocal = e_nonlocal
+ +
[docs] def calc_electron_number_defect(self, chempot, nelec_target, parent_fragments, nsym, + construct_bath=True): + self.log.info("Running chemical potential={:8.6e}".format(chempot)) + # Save original one-body hamiltonian calculation. + saved_hcore = self.mf.get_hcore + + hl_rdms = [None] * len(parent_fragments) + hl_dd0 = [None] * len(parent_fragments) + hl_dd1 = [None] * len(parent_fragments) + nelec_hl = 0.0 + exit = False + for x, frag in enumerate(parent_fragments): + msg = "Now running %s" % (frag) + self.log.info(msg) + self.log.info(len(msg) * "*") + self.log.changeIndentLevel(1) + + try: + result = frag.kernel(construct_bath=construct_bath, chempot=chempot) + except EDMETFragmentExit as e: + exit = True + self.log.info("Exiting %s", frag) + self.log.changeIndentLevel(-1) + raise e + + self.cluster_results[frag.id] = result + self.log.changeIndentLevel(-1) + if exit: + break + + # dd moments are already in fragment basis + hl_dd0[x] = frag.results.dd_mom0 + hl_dd1[x] = frag.results.dd_mom1 + nelec_hl += frag.get_nelectron_hl() * nsym[x] + + self.hl_rdms = [f.get_frag_hl_dm() for f in parent_fragments] + self.hl_dd0 = hl_dd0 + self.hl_dd1 = hl_dd1 + self.log.info("Chemical Potential {:8.6e} gives Total electron deviation {:6.4e}".format( + chempot, nelec_hl - nelec_target)) + return nelec_hl - nelec_target
+ +
[docs] def get_updated_correlation_kernel(self, curr_dd0, curr_dd1, sym_parents, sym_children): + """ + Generate the update to our RPA exchange-correlation kernel this iteration. + """ + eps = np.concatenate(self.eps) + # Separate into spin components; in RHF case we still expect aaaa and aabb components to differ. + if self.with_df: + k = [[np.zeros((0, self.nao, self.nao))] * 2, [np.zeros((0, self.nao, self.nao))] * 2] + + def combine(old, new): + return [[np.concatenate([a, b], axis=0) for a, b in zip(x, y)] for (x, y) in zip(old, new)] + else: + k = [np.zeros([self.nao] * 4) for x in range(3)] + + def combine(old, new): + return [old[x] + new[x] for x in range(3)] + for d0, d1, parent, children in zip(curr_dd0, curr_dd1, sym_parents, sym_children): + local_contrib = parent.construct_correlation_kernel_contrib(eps, d0, d1, eris=None) + contrib = parent.get_correlation_kernel_contrib(local_contrib) + k = combine(k, contrib) + for child in children: + contrib = child.get_correlation_kernel_contrib(local_contrib) + k = combine(k, contrib) + return tuple(k)
+ +
[docs] def improve_nl_energy(self, use_plasmon=True, deg=5): + """Perform exact adiabatic-connection integration to obtain improved estimate for the nonlocal correlation + energy at the level of RPA. This is initially only calculated using a linear approximation.""" + orig_correction = self.e_nonlocal + + etot = self.run_exact_full_ac(deg=deg, calc_local=False)[0][0] + eps = np.concatenate(self.eps) + elocs = [x.calc_exact_ac(eps, use_plasmon, deg) for x in self.fragments] + + new_correction = etot - sum(elocs) + self.log.info("Numerical integration of the adiabatic connection modified nonlocal energy estimate by %6.4e", + new_correction - orig_correction) + return self.e_tot + new_correction - orig_correction
+ +
[docs] def run_exact_full_ac(self, xc_kernel=None, deg=5, calc_local=False, cluster_constrain=False, npoints=48): + """During calculation we only calculate the linearised nonlocal correlation energy, since this is relatively + cheap (only a single RPA numerical integration). This instead performs the exact energy via numerical + integration of the adiabatic connection.""" + + if isinstance(xc_kernel, str): + if xc_kernel.lower() == "drpa": + xc = None + else: + raise ValueError("Unknown xc kernel %s provided".format(xc_kernel)) + elif xc_kernel is None: + xc = self.xc_kernel + elif isinstance(xc_kernel, tuple) or isinstance(xc_kernel, np.ndarray): + xc = xc_kernel + else: + raise ValueError("Unknown xc kernel provided") + + if self.with_df: + # Set up for RIRPA zeroth moment calculation. + rpa = ssRIRPA(self.mf, xc, self.log) + local_rot = [np.concatenate([x.get_rot_to_mf_ov(), x.r_bos], axis=0) for x in self.fragments] if calc_local else None + frag_proj = [x.get_fragment_projector_ov() for x in self.fragments] if calc_local else None + return rpa.direct_AC_integration(local_rot, frag_proj, deg=deg, npoints=npoints, + cluster_constrain=cluster_constrain) + else: + raise NotImplementedError
+ +REDMET = EDMET +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/edmet/fragment.html b/_modules/vayesta/edmet/fragment.html new file mode 100644 index 000000000..155e1e0ea --- /dev/null +++ b/_modules/vayesta/edmet/fragment.html @@ -0,0 +1,1301 @@ + + + + + + vayesta.edmet.fragment — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.edmet.fragment

+import dataclasses
+from timeit import default_timer as timer
+
+import numpy as np
+import pyscf.lib
+import scipy.linalg
+
+from vayesta.core.util import dot, einsum, log_time, time_string
+from vayesta.dmet.fragment import DMETFragment
+from vayesta.solver import check_solver_config
+from vayesta.core.bath import helper
+
+
+from pyscf import __config__
+
+
[docs]class EDMETFragmentExit(Exception): + pass
+ + +
[docs]@dataclasses.dataclass +class Options(DMETFragment.Options): + make_dd_moments: bool = None + old_sc_condition: bool = None + max_bos: int = None + occ_proj_kernel: bool = None + boson_xc_kernel: bool = None + bosonic_interaction: str = None
+ + +
[docs]class EDMETFragment(DMETFragment): + + Options = Options + +
[docs] @dataclasses.dataclass + class Results(DMETFragment.Results): + dm_eb: np.ndarray = None + eb_couplings: np.ndarray = None + boson_freqs: tuple = None + dd_mom0: np.ndarray = None + dd_mom1: np.ndarray = None + e_fb: float = None
+ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.prev_xc_contrib = None + + @property + def ov_active(self): + return self.cluster.nocc_active * self.cluster.nvir_active + + @property + def ov_active_tot(self): + return 2 * self.ov_active + + @property + def ov_mf(self): + return self.base.nocc * self.base.nvir + + @property + def nbos(self): + if self.sym_parent is not None: + return self.sym_parent.nbos + else: + try: + return self.r_bos.shape[0] + except AttributeError: + raise RuntimeError("Bosons are not yet defined!") + + @property + def r_bos(self): + if self.sym_parent is not None: + raise RuntimeError("Symmetry transformation for EDMET bosons in particle-hole basis is not yet implemented." + ) + return self._r_bos + + @r_bos.setter + def r_bos(self, value): + if self.sym_parent is not None: + raise RuntimeError("Cannot set attribute r_bos in symmetry derived fragment.") + self._r_bos = value + + @property + def r_bos_ao(self): + # NB this is the definition of the bosons as a rotation of AO pair excitations. + if self.sym_parent is None: + # Need to convert bosonic definition from ov-excitations into ao pairs. + r_bos = self.r_bos + co = self.base.mo_coeff_occ + cv = self.base.mo_coeff_vir + r_bosa = r_bos[:, :self.ov_mf].reshape((self.nbos, self.base.nocc, self.base.nvir)) + r_bosb = r_bos[:, self.ov_mf:].reshape((self.nbos, self.base.nocc, self.base.nvir)) + + return (einsum("nia,pi,qa->npq", r_bosa, co, cv), einsum("nia,pi,qa->npq", r_bosb, co, cv)) + + else: + r_bos_ao = self.sym_parent.r_bos_ao + # Need to rotate to account for symmetry operations. + r_bos_ao = tuple([self.sym_op(self.sym_op(x, axis=2), axis=1) for x in r_bos_ao]) + return r_bos_ao + + @property + def r_ao_bos(self): + # This is the rotation from the bosons into the AO basis. + s = self.base.get_ovlp() + return tuple([einsum("npq,pr,qs->nrs", x, s, s) for x in self.r_bos_ao]) + + @property + def energy_couplings(self): + try: + return self._ecouplings + except AttributeError: + return self.couplings + + @energy_couplings.setter + def energy_couplings(self, value): + self._ecouplings = value + +
[docs] def check_solver(self, solver): + is_uhf = np.ndim(self.base.mo_coeff[1]) == 2 + is_eb = True + check_solver_config(is_uhf, is_eb, solver, self.log)
+ +
[docs] def get_fock(self): + f = self.base.get_fock() + return np.array((f, f))
+ +
[docs] def get_co_active(self): + co = self.cluster.c_active_occ + return co, co
+ +
[docs] def get_cv_active(self): + cv = self.cluster.c_active_vir + return cv, cv
+ +
[docs] def get_rot_to_mf_ov(self): + ro = self.get_overlap('mo[occ]|cluster[occ]') + rv = self.get_overlap('mo[vir]|cluster[vir]') + spat_rot = einsum("iJ,aB->iaJB", ro, rv).reshape((self.ov_mf, self.ov_active)).T + res = np.zeros((2 * self.ov_active, 2 * self.ov_mf)) + res[:self.ov_active, :self.ov_mf] = spat_rot + res[self.ov_active:2 * self.ov_active, self.ov_mf:2 * self.ov_mf] = spat_rot + return res
+ +
[docs] def get_fragment_projector_ov(self, proj="o", inc_bosons=False): + """In space of cluster p-h excitations, generate the projector to the impurity portion of the occupied index.""" + if not ("o" in proj or "v" in proj): + raise ValueError("Must project the occupied and/or virtual index to the fragment. Please specify at least " + "one") + + nex = self.ov_active_tot + if inc_bosons: + nex += self.nbos + + def get_ov_projector(po, pv): + p_ov_spat = einsum("ij,ab->iajb", po, pv).reshape((self.ov_active, self.ov_active)) + p_ov = np.zeros((nex, nex)) + p_ov[:self.ov_active, :self.ov_active] = p_ov_spat + p_ov[self.ov_active:2 * self.ov_active, self.ov_active:2 * self.ov_active] = p_ov_spat + return p_ov + + p_ov = np.zeros((nex, nex)) + if "o" in proj: + po = self.get_fragment_projector(self.cluster.c_active_occ) + pv = np.eye(self.cluster.nvir_active) + p_ov += get_ov_projector(po, pv) + if "v" in proj: + po = np.eye(self.cluster.nocc_active) + pv = self.get_fragment_projector(self.cluster.c_active_vir) + p_ov += get_ov_projector(po, pv) + return p_ov
+ +
[docs] def set_up_fermionic_bath(self): + """Set up the fermionic bath orbitals""" + self.make_bath() + cluster = self.make_cluster() + self._c_active_occ = cluster.c_active_occ + self._c_active_vir = cluster.c_active_vir + # Want to return the rotation of the canonical HF orbitals which produce the cluster canonical orbitals. + return self.get_rot_to_mf_ov()
+ +
[docs] def define_bosons(self, rpa_mom, rot_ov=None, tol=1e-8): + """Given the RPA zeroth moment between the fermionic cluster excitations and the rest of the space, define + our cluster bosons. + Note that this doesn't define our Hamiltonian, since we don't yet have the required portion of our + zeroth moment for the bosonic degrees of freedom. + """ + if rot_ov is None: + rot_ov = self.get_rot_to_mf_ov() + self.rpa_mom = rpa_mom + # Need to remove fermionic degrees of freedom from moment contribution. Null space of rotation matrix is size + # N^4, so instead deduct projection onto fermionic space. + rot_ov_pinv = np.linalg.pinv(rot_ov.T) + env_mom = rpa_mom - dot(rpa_mom, rot_ov.T, rot_ov_pinv) + # v defines the rotation of the mean-field excitation space specifying our bosons. + u, s, v = np.linalg.svd(env_mom, full_matrices=False) + + want = s > tol + nbos = min(sum(want), self.opts.max_bos) + if nbos < len(s): + self.log.info("Zeroth moment matching generated %d cluster bosons.Largest discarded singular value: %4.2e.", + nbos, s[nbos:].max()) + else: + self.log.info("Zeroth moment matching generated %d cluster bosons.", nbos) + self.log.info("Fragment %s Quasiboson histogram", self.id_name) + self.log.info("------------------------------%s", "-"*len(self.id_name)) + bins = np.hstack([-np.inf, np.logspace(0, -12, 13)[::-1], np.inf]) + self.log.info(helper.make_horizontal_histogram(s, bins=bins)) + # Calculate the relevant components of the zeroth moment- we don't want to recalculate these. + self.r_bos = v[:nbos, :] + self.eta0_ferm = np.dot(rpa_mom, rot_ov.T) + self.eta0_coupling = np.dot(env_mom, self.r_bos.T) + return self.r_bos
+ +
[docs] def construct_boson_hamil(self, eta0_bos, eps, xc_kernel): + """Given the zeroth moment coupling of our bosons to the remainder of the space, along with stored information, + generate the components of our interacting electron-boson Hamiltonian. + At the same time, calculate the local RPA correlation energy since this requires all the same information we + already have to hand. + """ + + self.store_cluster_rpa(eta0_bos, eps, xc_kernel) + + if "qba" in self.opts.bosonic_interaction.lower(): + bosonic_exchange = "bos_ex" in self.opts.bosonic_interaction.lower() + self.proj_hamil_qba(exchange_between_bos=bosonic_exchange) + else: + if self.opts.bosonic_interaction.lower() == "xc": + couplings_aa, couplings_bb, a_bos, b_bos = self.save_wxc + elif self.opts.bosonic_interaction.lower() == "direct": + couplings_aa, couplings_bb, a_bos, b_bos = self.save_noxc + else: + self.log.critical("Unknown bosonic interaction kernel specified.") + raise RuntimeError + + self.a_bos = a_bos + if self.nbos >0: + self.bos_freqs, x, y = bogoliubov_decouple(a_bos + b_bos, a_bos - b_bos) + couplings_aa = einsum("npq,nm->mpq", couplings_aa, x) + einsum("npq,nm->mqp", couplings_aa, y) + couplings_bb = np.einsum("npq,nm->mpq", couplings_bb, x) + np.einsum("npq,nm->mqp", couplings_bb, y) + else: + self.bos_freqs = np.zeros((0,)) + self.couplings = (couplings_aa, couplings_bb) + + # Will also want to save the effective local modification resulting from our local construction. + self.log.info("Local correlation energy for fragment %d: %6.4e", self.id, self.loc_erpa) + return self.loc_erpa
+ +
[docs] def store_cluster_rpa(self, eta0_bos, eps, xc_kernel): + """This function just stores all required information for the """ + self.eta0_bos = np.dot(eta0_bos, self.r_bos.T) + ov_rot = self.get_rot_to_mf_ov() + # Get couplings between all fermionic and boson degrees of freedom. + eris = self.get_eri_couplings(np.concatenate([ov_rot, self.r_bos], axis=0)) + # Depending upon the specifics of our construction we may need to deduct the contribution from this cluster + # in the previous iteration to avoid double counting in future. + xc_apb, xc_amb = self.get_xc_couplings(xc_kernel, np.concatenate([ov_rot, self.r_bos], axis=0)) + eps_loc = self.get_loc_eps(eps, np.concatenate([ov_rot, self.r_bos], axis=0)) + apb = eps_loc + 2 * eris + xc_apb + + # This is the bare amb. + amb = eps_loc + xc_amb + eta0 = np.zeros_like(apb) + eta0[:self.ov_active_tot, :self.ov_active_tot] = self.eta0_ferm + eta0[:self.ov_active_tot, self.ov_active_tot:] = self.eta0_coupling + eta0[self.ov_active_tot:, :self.ov_active_tot] = self.eta0_coupling.T + eta0[self.ov_active_tot:, self.ov_active_tot:] = self.eta0_bos + + # Need to generate projector from our RPA excitation space to the local fragment degrees of freedom. + fproj_ov = self.get_fragment_projector_ov() + # loc_erpa = (einsum("pq,qr,rp->", fproj_ov, eta0[:self.ov_active_tot, :], apb[:, :self.ov_active_tot]) \ + # - einsum("pq,qp->", fproj_ov, eps_loc[:self.ov_active_tot, :self.ov_active_tot]) \ + # - einsum("pq,qp->", fproj_ov, eris[:self.ov_active_tot, :self.ov_active_tot])) / 2.0 + xc_b = (xc_apb - xc_amb) / 2.0 + self.loc_erpa = (einsum("pq,qr,rp->", fproj_ov, eta0[:self.ov_active_tot], + (apb - (xc_b / 2.0))[:, :self.ov_active_tot]) + - einsum("pq,qp->", fproj_ov, + ((apb + amb - xc_b) / 2)[:self.ov_active_tot, :self.ov_active_tot]) + ) / 2.0 + + # loc_erpa = (einsum("pq,qr,rp->", fproj_ov, eta0[:self.ov_active_tot], eris[:, :self.ov_active_tot]) + # - einsum("pq,qp->", fproj_ov, eris[:self.ov_active_tot, :self.ov_active_tot])) / 4.0 + + renorm_amb = dot(eta0, apb, eta0) + self.amb_renorm_effect = renorm_amb - amb + + maxdev = abs(amb - renorm_amb)[:self.ov_active_tot, :self.ov_active_tot].max() + if maxdev > 1e-6: + self.log.error("Maximum deviation in irreducible polarisation propagator=%6.4e", + abs(amb - renorm_amb)[:self.ov_active_tot, :self.ov_active_tot].max()) + + # If have xc kernel from previous iteration want to deduct contribution from this cluster; otherwise bosons + # will contain a double-counted representation of the already captured correlation in the cluster. + self.save_noxc = self._get_boson_hamil(apb - xc_apb, renorm_amb - xc_amb) + + if self.prev_xc_contrib is not None: + dc_apb, dc_amb = self.get_xc_couplings(self.prev_xc_contrib, np.concatenate([ov_rot, self.r_bos], axis=0)) + apb -= dc_apb + renorm_amb -= dc_amb + + self.save_wxc = self._get_boson_hamil(apb, renorm_amb) + # These are the quantities before decoupling, since these in some sense represent the `physical' excitations of + # the system. ie. each quasi-bosonic excitation operator is made up of only environmental excitations, rather + # than also including deexcitations, making later manipulations more straightforward. + self.apb = apb + self.amb = renorm_amb + self.eta0 = eta0
+ + def _get_boson_hamil(self, apb, amb): + a = 0.5 * (apb + amb) + b = 0.5 * (apb - amb) + + nactive_a = nactive_b = self.cluster.norb_active + + couplings_aa = np.zeros((self.nbos, nactive_a, nactive_a)) + couplings_bb = np.zeros((self.nbos, nactive_b, nactive_b)) + + couplings_aa[:, :self.cluster.nocc_active, self.cluster.nocc_active:] = a[2 * self.ov_active:, + :self.ov_active].reshape( + self.nbos, self.cluster.nocc_active, self.cluster.nvir_active) + couplings_aa[:, self.cluster.nocc_active:, :self.cluster.nocc_active] = b[2 * self.ov_active:, + :self.ov_active].reshape( + self.nbos, self.cluster.nocc_active, self.cluster.nvir_active).transpose([0, 2, 1]) + couplings_bb[:, :self.cluster.nocc_active, self.cluster.nocc_active:] = \ + a[2 * self.ov_active:, self.ov_active:2 * self.ov_active].reshape( + self.nbos, self.cluster.nocc_active, self.cluster.nvir_active) + couplings_bb[:, self.cluster.nocc_active:, :self.cluster.nocc_active] = \ + b[2 * self.ov_active:, self.ov_active:2 * self.ov_active].reshape( + self.nbos, self.cluster.nocc_active, self.cluster.nvir_active).transpose([0, 2, 1]) + + a_bos = a[2 * self.ov_active:, 2 * self.ov_active:] + b_bos = b[2 * self.ov_active:, 2 * self.ov_active:] + + return couplings_aa, couplings_bb, a_bos, b_bos + +
[docs] def get_eri_couplings(self, rot): + """Obtain eri in a space defined by an arbitrary rotation of the mean-field particle-hole excitations of our + systems. Note that this should only really be used in the case that such a rotation cannot be described by a + rotation of the underlying single-particle basis, since highly efficient routines already exist for this case.. + """ + + # Convert rots from full-space particle-hole excitations into AO pairs. + def conv_to_aos(r): + r = r.reshape((-1, self.base.nocc, self.base.nvir)) + return einsum("nia,pi,qa->npq", r, self.base.mo_coeff_occ, self.base.mo_coeff_vir) + + rota, rotb = rot[:, :self.ov_mf], rot[:, self.ov_mf:2 * self.ov_mf] + + if hasattr(self.base.mf, "with_df"): + rota, rotb = conv_to_aos(rota), conv_to_aos(rotb) + # Loop through cderis + res = np.zeros((rot.shape[0], rot.shape[0])) + for eri1 in self.mf.with_df.loop(): + l_ = einsum("npq,lpq->nl", pyscf.lib.unpack_tril(eri1), rota + rotb) + + res += dot(l_.T, l_) + return res + else: + # This is painful to do for each fragment, but comes from working with 4-index eris. + eris = self.base.get_eris_array(self.mf.mo_coeff) + eris = eris[:self.base.nocc, self.base.nocc:, :self.base.nocc, self.base.nocc:].reshape( + (self.ov_mf, self.ov_mf)) + return dot(rota + rotb, eris, rota.T + rotb.T)
+ +
[docs] def conv_to_aos(self, ra, rb): + # Convert rots from full-space particle-hole excitations into AO pairs. + def conv_to_aos(r): + r = r.reshape((-1, self.base.nocc, self.base.nvir)) + return einsum("nia,pi,qa->npq", r, self.base.mo_coeff_occ, self.base.mo_coeff_vir) + + return conv_to_aos(ra), conv_to_aos(rb)
+ +
[docs] def get_xc_couplings(self, xc_kernel, rot): + + ov_mf = self.ov_mf + if isinstance(ov_mf, int): ov_mf = (ov_mf, ov_mf) + + rota, rotb = rot[:, :ov_mf[0]], rot[:, ov_mf[0]:sum(ov_mf)] + + rota, rotb = self.conv_to_aos(rota, rotb) + if self.base.with_df: + # Store low-rank expression for xc kernel. + # Store alpha and beta-spin xc-kernel contributions separately, so need to treat separately. + la_l = einsum("npq,lpq->nl", xc_kernel[0][0], rota) + einsum("npq,lpq->nl", xc_kernel[1][0], rotb) + la_r = einsum("npq,lpq->nl", xc_kernel[0][1], rota) + einsum("npq,lpq->nl", xc_kernel[1][1], rotb) + + lb_l = einsum("npq,lpq->nl", xc_kernel[0][0], rota) + einsum("npq,lpq->nl", xc_kernel[1][0], rotb) + lb_r = einsum("npq,lqp->nl", xc_kernel[0][1], rota) + einsum("npq,lqp->nl", xc_kernel[1][1], rotb) + + acontrib = dot(la_l.T, la_r) + bcontrib = dot(lb_l.T, lb_r) + apb = acontrib + bcontrib + amb = acontrib - bcontrib + else: + # Have full-rank expression for xc kernel, but separate spin channels. + acontrib = einsum("lpq,pqrs,mrs->lm", rota, xc_kernel[1], rotb) + acontrib += acontrib.T + einsum("lpq,pqrs,mrs->lm", rota, xc_kernel[0], rota) + einsum("lpq,pqrs,mrs->lm", + rotb, xc_kernel[2], + rotb) + + bcontrib = einsum("lpq,pqrs,msr->lm", rota, xc_kernel[1], rotb) + bcontrib += bcontrib.T + einsum("lpq,pqrs,msr->lm", rota, xc_kernel[0], rota) + einsum("lpq,pqrs,msr->lm", + rotb, xc_kernel[2], + rotb) + + apb = acontrib + bcontrib + amb = acontrib - bcontrib + return apb, amb
+ +
[docs] def get_loc_eps(self, eps, rot): + return einsum("ln,n,mn->lm", rot, eps, rot)
+ +
[docs] def proj_hamil_qba(self, exchange_between_bos=True): + """Generate quasi-bosonic Hamiltonian via projection of appropriate Hamiltonian elements of full system. + This represents the bosons as an explicit sum of environmental excitations, which we then approximate as bosonic + degrees of freedom.""" + + # Note that electron-boson couplings set here describe a Hamiltonian with terms: + # V[n,p,q] p^+ q b_n^+ + h.c. + # This is arbitrary (and indeed different solvers have different definitions) but this is definitely the one + # used here for all future reference (after much checking...). + t0 = timer() + c = self.cluster.c_active + if not isinstance(c, tuple): + ca = cb = c + else: + ca, cb = c + # indexed as npq in atomic orbitals, but p is a projection of the occupied indices and q virtual indices. + r_bos_aoa, r_bos_aob = self.r_bos_ao + # Note that our o-v fock matrix blocks may be nonzero, however our environmental states are always constructed + # from only particle-hole excitations. + # If no correlation potential was used this can be calculated by eps. + fa, fb = self.get_fock() + + coa, cob = self.get_co_active() + cva, cvb = self.get_cv_active() + + noa, nva = coa.shape[1], cva.shape[1] + nob, nvb = cob.shape[1], cvb.shape[1] + + ovlp = self.base.get_ovlp() + t_fock_start = timer() + # Can just use expressions for Hamiltonian elements between single excitations. + # First, get fock contributions. All are N^3 or less. + # This will be zero if at HF solution. + # V_n <= C_{nia}f_{ia} + bos_nonconserv = einsum("npq,pq->n", r_bos_aoa, fa) + einsum("npq,pq->n", r_bos_aob, fb) + # \Omega_n <= C_{mia}C_{nib}f_{ab} - C_{mia}C_{nja}f_{ij} + a_bos = einsum("npq,msr,qr,ps->nm", r_bos_aoa, r_bos_aoa, fa, ovlp) + \ + einsum("npq,msr,qr,ps->nm", r_bos_aob, r_bos_aob, fb, ovlp) + a_bos -= einsum("npq,mrs,pr,qs->nm", r_bos_aoa, r_bos_aoa, fa, ovlp) + \ + einsum("npq,mrs,pr,qs->nm", r_bos_aob, r_bos_aob, fb, ovlp) + + # Write this as a single function for both spin channels, to avoid chance of typos + def get_fock_couplings_spin_channel(r_bos_ao, f, co, cv, no, nv): + couplings = np.zeros((self.nbos,) + (no + nv,) * 2) + # No o->v excitation fock contribution. + # v->o excitation within active space. + # V_{nai} <= C_{nic}f_{ac} - C_{nka}f_{ik} + couplings[:, no:, :no] = einsum("npc,qc,pi,qa->nai", r_bos_ao, f, dot(ovlp, co), cv) - \ + einsum("nkq,pk,pi,qa->nai", r_bos_ao, f, co, dot(ovlp, cv)) + # o->o excitation within active space. Note that we're constructing the non-normal ordered parameterisation + # here, so all signs are flipped for o-o component. + # V_{nij} <= -(\delta_{ij}C_{nkc}f_{ck} - C_{njc}f_{ic}) + fac = einsum("nck,ck->n", r_bos_ao, f) + couplings[:, :no, :no] = -einsum("pq,n->npq", np.eye(no), fac) + \ + einsum("npc,qc,qi,pj->nij", r_bos_ao, f, co, dot(ovlp, co)) + # v->v excitation within active space. + # V_{nab} <= C_{nic}f_{ac} C_{nka}f_{ik} + couplings[:, no:, no:] = einsum("pq,n->npq", np.eye(nv), fac) - \ + einsum("nkp,kq,pa,qb->nab", r_bos_ao, f, dot(ovlp, cv), cv) + return couplings + + fcouplings_aa = get_fock_couplings_spin_channel(r_bos_aoa, fa, coa, cva, noa, nva) + fcouplings_bb = get_fock_couplings_spin_channel(r_bos_aob, fb, cob, cvb, nob, nvb) + + t_fock = timer() - t_fock_start + + # Get coulombic contribution; for coupling this is just V_{npq} <= C_{nkc}<pk||qc>. + ccouplings_aa = np.zeros_like(fcouplings_aa) + ccouplings_bb = np.zeros_like(fcouplings_bb) + + t_coulomb = 0 + if exchange_between_bos: + t_bos_exchange = 0 + + if self.base.with_df: + if exchange_between_bos: + blk_prefactor = self.nbos * (self.mf.mol.nao ** 2) + else: + blk_prefactor = self.mf.mol.nao ** 2 + # Limit ourselves to only use quarter the maximum memory for the single largest array. + blksize = max(1, int(__config__.MAX_MEMORY / (4 * 8.0 * blk_prefactor))) + if blksize > self.mf.with_df.get_naoaux(): + blksize = None + else: + self.log.info("Using blksize of %d to generate Bosonic Hamiltonian.", blksize) + + for eri1 in self.mf.with_df.loop(blksize): + # Here we've kept the old einsum expressions around just in case we need comparison later. + l_ = pyscf.lib.unpack_tril(eri1) + t_coulomb_start = timer() + # First generate coulomb interactions effects. This all scales as N^3. + # l_bos = einsum("npq,mpq->nm", l_, r_bos_aoa + r_bos_aob) # N^3 + # la_ferm = einsum("npq,pi,qj->nij", l_, ca, ca) # N^3 + # lb_ferm = einsum("npq,pi,qj->nij", l_, cb, cb) # N^3 + + l_bos = np.tensordot(l_, r_bos_aoa + r_bos_aob, ([1, 2], [1, 2])) + la_ferm = np.tensordot(np.tensordot(l_, ca, ([1], [0])), ca, ([1], [0])) + lb_ferm = np.tensordot(np.tensordot(l_, cb, ([1], [0])), cb, ([1], [0])) + + # print("!!1!!", + # abs(einsum("npq,mpq->nm", l_, r_bos_aoa + r_bos_aob) - l_bos).max(), + # abs(einsum("npq,pi,qj->nij", l_, ca, ca) - la_ferm).max(), + # abs(einsum("npq,pi,qj->nij", l_, cb, cb) - lb_ferm).max() + # ) + + # V_{npq} <= (pq|ia)C_{nia} = <pi|qa>C_{nia} + # ccouplings_aa += einsum("nm,nij->mij", l_bos, la_ferm) # N^3 + # ccouplings_bb += einsum("nm,nij->mij", l_bos, lb_ferm) # N^3 + ccouplings_aa += np.tensordot(l_bos, la_ferm, ([0], [0])) + ccouplings_bb += np.tensordot(l_bos, lb_ferm, ([0], [0])) + + # print("!!2!!", + # abs(einsum("nm,nij->mij", l_bos, la_ferm) - np.tensordot(l_bos, la_ferm, ([0], [0]))).max(), + # abs( einsum("nm,nij->mij", l_bos, lb_ferm) - np.tensordot(l_bos, lb_ferm, ([0], [0]))).max() + # ) + + del la_ferm, lb_ferm + # \Omega_n <= (ia|bj)C_{nia}C_{mjb} = <ib|aj>C_{nia}C_{mjb} + # a_bos += einsum("nm,no->mo", l_bos, l_bos) # N + a_bos += np.tensordot(l_bos, l_bos, ([0], [0])) + del l_bos + # Now exchange contributions; those to the coupling are straightforward (N^3) to calculate. + # la_singl = einsum("npq,pi->niq", l_, ca) # N^3 + # lb_singl = einsum("npq,pi->niq", l_, cb) # N^3 + la_singl = np.tensordot(l_, ca, ([1], [0])).transpose((0, 2, 1)) # N^3 + lb_singl = np.tensordot(l_, cb, ([1], [0])).transpose((0, 2, 1)) # N^3 + # print("!!3!!", + # abs(einsum("npq,pi->niq", l_, ca) - la_singl).max(), + # abs(einsum("npq,pi->niq", l_, cb) - lb_singl).max()) + # V_{npq} <= -(pa|iq)C_{nia} = -<pi|aq>C_{nia} + # ccouplings_aa -= einsum("nip,njq,mpq->mji", la_singl, la_singl, r_bos_aoa) # N^3 + # ccouplings_bb -= einsum("nip,njq,mpq->mji", lb_singl, lb_singl, r_bos_aob) # N^3 + + ccouplings_aa -= np.tensordot( + la_singl, + np.tensordot(la_singl, r_bos_aoa, ([2], [2])), # njq,mpq->njmp + ([0, 2], [0, 3]) + ).transpose([2, 1, 0]) # nip,njmp->ijm->mji + + ccouplings_bb -= np.tensordot( + lb_singl, + np.tensordot(lb_singl, r_bos_aob, ([2], [2])), # njq,mpq->njmp + ([0, 2], [0, 3]) + ).transpose([2, 1, 0]) # nip,njmp->ijm->mji + + # print("!!4!!", + # abs(einsum("nip,njq,mpq->mji", la_singl, la_singl, r_bos_aoa) - np.tensordot( + # la_singl, + # np.tensordot(la_singl, r_bos_aoa, ([2], [2])), # njq,mpq->njmp + # ([0, 2], [0, 3]) + # ).transpose([2, 1, 0])).max(), + # abs(einsum("nip,njq,mpq->mji", lb_singl, lb_singl, r_bos_aob) - np.tensordot( + # lb_singl, + # np.tensordot(lb_singl, r_bos_aob, ([2], [2])), # njq,mpq->njmp + # ([0, 2], [0, 3]) + # ).transpose([2, 1, 0])).max() + # ) + + t_coulomb += timer() - t_coulomb_start + del la_singl, lb_singl + if exchange_between_bos: + t_bosex_start = timer() + # boson-boson interactions are N^4, so if have O(N) clusters this would push our scaling to N^5... + # Note we want both `occupied` indices of bosonic degrees of freedom to contract to same l, and the + # same for both `virtual` indices. + # Only same-spin so need to do different channels separately. + # \Omega_n <= (ab|ji)C_{nia}C_{mjb} = <aj|bi>C_{nia}C_{mjb} + # a_bos -= einsum("nqrm,nrql->ml", + # einsum("npq,mpr->nqrm", l_, r_bos_aoa), + # einsum("npq,lrq->nprl", l_, r_bos_aoa)) + # a_bos -= einsum("nqrm,nrql->ml", + # einsum("npq,mpr->nqrm", l_, r_bos_aob), + # einsum("npq,lrq->nprl", l_, r_bos_aob)) + + a_bos -= np.tensordot(np.tensordot(l_, r_bos_aoa, ([1], [1])), # npq,mpr->nqmr + np.tensordot(l_, r_bos_aoa, ([2], [2])), # npq,mrq->npmr + ([0, 1, 3], [0, 3, 1])) # nqmr,nrlq->ml + a_bos -= np.tensordot(np.tensordot(l_, r_bos_aob, ([1], [1])), # npq,mpr->nqmr + np.tensordot(l_, r_bos_aob, ([2], [2])), # npq,mrq->npmr + ([0, 1, 3], [0, 3, 1])) # nqmr,nrlq->ml + + t_bos_exchange += timer() - t_bosex_start + else: + raise NotImplementedError("Explicit QBA Hamiltonian construction is currently only implemented for use with" + "density fitting.") + + couplings_aa = fcouplings_aa + ccouplings_aa + couplings_bb = fcouplings_bb + ccouplings_bb + + nelec = self.cluster.nocc_active + if not isinstance(nelec, int): + nelec = sum(nelec) + else: + nelec *= 2 + shift = -einsum("npp->n", couplings_aa[:, :noa, :noa]) - einsum("npp->n", couplings_bb[:, :nob, :nob]) + + bos_nonconserv += shift + + couplings_aa += einsum("n,pq->npq", bos_nonconserv / nelec, np.eye(noa + nva)) + couplings_bb += einsum("n,pq->npq", bos_nonconserv / nelec, np.eye(nob + nvb)) + + # Decouple bosons here. + self.bos_freqs, c = np.linalg.eigh(a_bos) + self.couplings = (einsum("nm,npq->mqp", c, couplings_aa), einsum("nm,npq->mqp", c, couplings_bb)) + # ccouplings[n,p,q] = <pi||qa>C_{nia}; can use this for energy evaluation later. + self.energy_couplings = (einsum("nm,npq->mqp", c, ccouplings_aa), einsum("nm,npq->mqp", c, ccouplings_bb)) + + self.log.info("Time for Bosonic Hamiltonian Projection into fragment %d: %s", self.id, + time_string(timer() - t0)) + if exchange_between_bos: + self.log.info(" %s for fock components, %s for N^3 scaling coulombic components and %s for N^4 " + "bosonic exchange.", time_string(t_fock), time_string(t_coulomb), + time_string(t_bos_exchange)) + else: + self.log.info(" %s for fock components, and %s for N^3 scaling coulombic components.", + time_string(t_fock), time_string(t_coulomb))
+ +
[docs] def check_qba_approx(self, rdm1): + """Given boson and cluster coefficient definitions, checks deviation from exact bosonic commutation relations + within our cluster projected onto the ground state. + This will hopefully tell us whether our bosons are likely to be a good approximation to the full system. + We could take the L2 norm of the overall deviation, but given most of the resultant operators have essentially + negligible expectation values with the ground state this is an unnecessarily pessimistic + estimator. + """ + + r_bos_a, r_bos_b = self.get_rbos_split() + r_o = self.get_overlap('mo[occ]|cluster[occ]') + r_v = self.get_overlap('mo[vir]|cluster[vir]') + if not self.base.is_uhf: + r_o = (r_o, r_o) + r_v = (r_v, r_v) + rdm1 = (rdm1 / 2, rdm1 / 2) + + # Contributions to commutator [b_n, b_m^+] + odev_a = einsum("nia,mja,ik,jl->nmkl", r_bos_a, r_bos_a, r_o[0], r_o[0]) + odev_b = einsum("nia,mja,ik,jl->nmkl", r_bos_b, r_bos_b, r_o[1], r_o[1]) + + vdev_a = einsum("nia,mib,ac,bd->nmcd", r_bos_a, r_bos_a, r_v[0], r_v[0]) + vdev_b = einsum("nia,mib,ac,bd->nmcd", r_bos_b, r_bos_b, r_v[1], r_v[1]) + + no_a, no_b = r_o[0].shape[1], r_o[1].shape[1] + dev = einsum("nmij,ij->nm", odev_a, np.eye(no_a) - rdm1[0][:no_a, :no_a]) + \ + einsum("nmij,ij->nm", odev_b, np.eye(no_b) - rdm1[1][:no_b, :no_b]) + \ + einsum("nmab,ab->nm", vdev_a, rdm1[0][no_a:, no_a:]) + \ + einsum("nmab,ab->nm", vdev_b, rdm1[1][no_b:, no_b:]) + self.log.info("Maximum neglected local density fluctuation in quasi-boson commutation=%6.4e", abs(dev.max()))
+ +
[docs] def get_rbos_split(self): + r_bos_a = self.r_bos[:, :self.ov_mf] + r_bos_b = self.r_bos[:, self.ov_mf:] + return r_bos_a.reshape((self.nbos, self.base.nocc, self.base.nvir)), r_bos_b.reshape( + (self.nbos, self.base.nocc, self.base.nvir))
+ +
[docs] def kernel(self, solver=None, eris=None, construct_bath=False, + chempot=None): + """Solve the fragment with the specified solver and chemical potential.""" + solver = solver or self.solver + + # Create solver object + t0 = timer() + cluster_solver = self.get_solver(solver) + # Chemical potential + if chempot is not None: + px = self.get_fragment_projector(self.cluster.c_active) + if isinstance(px, tuple): + cluster_solver.v_ext = (-chempot*px[0], -chempot*px[1]) + else: + cluster_solver.v_ext = -chempot*px + + with log_time(self.log.info, ("Time for %s solver:" % solver) + " %s"): + cluster_solver.kernel() + + wf = cluster_solver.wf + + dm1 = wf.make_rdm1() + dm2 = wf.make_rdm2() + if self.nbos > 0: + self.check_qba_approx(dm1) + dm_eb = wf.make_rdmeb() + self._results = results = self.Results(fid=self.id, n_active=self.cluster.norb_active, + converged=True, wf=wf, dm1=dm1, dm2=dm2, dm_eb=dm_eb) + results.e1, results.e2, results.e_fb = self.get_edmet_energy_contrib() + + if self.opts.make_dd_moments: + r_o = self.get_overlap('cluster[occ]|frag') + r_v = self.get_overlap('cluster[vir]|frag') + if isinstance(r_o, tuple): + r = tuple([np.concatenate([x, y], axis=0) for x, y in zip(r_o, r_v)]) + else: + r = np.concatenate([r_o, r_v], axis=0) + + ddmoms = wf.make_dd_moms(1, coeffs=r) + if self.opts.old_sc_condition: + ddmoms[0] = [np.einsum("ppqq->pq", x) for x in ddmoms[0]] + ddmoms[1] = [np.einsum("ppqq->pq", x) for x in ddmoms[1]] + results.dd_mom0 = ddmoms[0] + results.dd_mom1 = ddmoms[1] + + return results
+ +
[docs] def get_solver_options(self, solver): + solver_opts = {} + solver_opts.update(self.opts.solver_options) + pass_through = [] + for attr in pass_through: + self.log.debugv("Passing fragment option %s to solver.", attr) + solver_opts[attr] = getattr(self.opts, attr) + + return solver_opts
+ +
[docs] def get_edmet_energy_contrib(self, hamil=None): + """Generate EDMET energy contribution, according to expression given in appendix of EDMET preprint""" + e1, e2 = self.get_dmet_energy_contrib(hamil) + c_act = self.cluster.c_active + p_imp = self.get_fragment_projector(c_act) + if not isinstance(p_imp, tuple): + p_imp = (p_imp, p_imp) + dm_eb = self._results.dm_eb + couplings = self.energy_couplings + + # Have separate spin contributions. + if "qba" in self.opts.bosonic_interaction: + # Already have exchange effects included in interactions, so can use straightforward contraction. + # dm_eb -> <0|b^+ p^+ q|0> in P[p,q,b]. + # couplings -> <pi||qa>C_{nia} in couplings[n,p,q]. + # Want <pj||qb>C_{njb} ( <b_n^+ q^+ p> - <b_n q^+ p>) so our energy is: + efb = 0.25 * (einsum("qr,npq,rpn", p_imp[0], couplings[0], dm_eb[0] - dm_eb[0].transpose(1, 0, 2)) + + einsum("qr,npq,rpn", p_imp[1], couplings[1], dm_eb[1] - dm_eb[1].transpose(1, 0, 2)) + ) + self.delta = efb + else: + efb = 0.5 * ( + np.einsum("pr,npq,rqn", p_imp[0], couplings[0], dm_eb[0]) + + np.einsum("qr,npq,prn", p_imp[0], couplings[0], dm_eb[0]) + + np.einsum("pr,npq,rqn", p_imp[1], couplings[1], dm_eb[1]) + + np.einsum("qr,npq,prn", p_imp[1], couplings[1], dm_eb[1]) + ) + return e1, e2, efb
+ + # From this point on have functionality to perform self-consistency. + +
[docs] def construct_correlation_kernel_contrib(self, epsilon, m0_new, m1_new, eris=None, svdtol=1e-12): + """ + Generate the contribution to the correlation kernel arising from this fragment, in terms of local degrees of + freedom (ie cluster orbitals and bosons). + """ + + new_amb, new_apb = self.get_composite_moments(m0_new, m1_new) + + r_occ = self.get_overlap('mo[occ]|cluster[occ]') + r_vir = self.get_overlap('mo[vir]|cluster[vir]') + if not isinstance(r_occ, tuple): r_occ = (r_occ, r_occ) + if not isinstance(r_vir, tuple): r_vir = (r_vir, r_vir) + ov_a, ov_b = self.ov_active_ab + no_a, no_b = self.nocc_ab + nv_a, nv_b = self.nvir_ab + ncl_a, ncl_b = self.nclus_ab + # We want to actually consider the difference from the dRPA kernel. + # Get irreducible polarisation propagator. + ov_rot = self.get_rot_to_mf_ov() + eps_loc = self.get_loc_eps(epsilon, np.concatenate([ov_rot, self.r_bos], axis=0)) + # Get eri couplings between all fermionic and boson degrees of freedom. + eris = self.get_eri_couplings(np.concatenate([ov_rot, self.r_bos], axis=0)) + # Calculate just xc contribution. + # For A+B need to deduct dRPA contribution. + new_xc_apb = new_apb - eps_loc - 2 * eris + # For A-B need to deduct effective dRPA contribution and the renormalisation of interactions introduced in + # cluster construction. + new_xc_amb = new_amb - eps_loc - self.amb_renorm_effect + + new_xc_a = 0.5 * (new_xc_apb + new_xc_amb) + new_xc_b = 0.5 * (new_xc_apb - new_xc_amb) + # Now just need to convert to ensure proper symmetries of couplings are imposed, and project each index in turn + # into the fragment space. + if self.opts.occ_proj_kernel: + fr_proj = self.get_fragment_projector_ov(proj="o", inc_bosons=True) + # Need to divide my the number of projectors actually applied; here it's just two. + fac = 2.0 + else: + fr_proj = self.get_fragment_projector_ov(proj="ov", inc_bosons=True) + # Have sum of occupied and virtual projectors, so four total. + fac = 4.0 + + new_xc_a = (dot(fr_proj, new_xc_a) + dot(new_xc_a, fr_proj)) / fac + new_xc_b = (dot(fr_proj, new_xc_b) + dot(new_xc_b, fr_proj)) / fac + + # Now need to combine A and B contributions, taking care of bosonic contributions. + # Note that we currently won't have any boson-boson contributions, and all contributions are + # symmetric. + + def get_fermionic_spat_contrib(acon, bcon, no_l, nv_l, no_r, nv_r): + f_shape = (no_l, nv_l, no_r, nv_r) + fermionic = np.zeros((no_l + nv_l,) * 2 + (no_r + nv_r,) * 2) + fermionic[:no_l, no_l:, :no_r, no_r:] = acon.reshape(f_shape) + fermionic[:no_l, no_l:, no_r:, :no_r] = bcon.reshape(f_shape).transpose((0, 1, 3, 2)) + fermionic = fermionic + fermionic.transpose((1, 0, 3, 2)) + return fermionic + ferm_aa = get_fermionic_spat_contrib(new_xc_a[:ov_a, :ov_a], new_xc_b[:ov_a, :ov_a], no_a, nv_a, no_a, nv_a) + ferm_ab = get_fermionic_spat_contrib(new_xc_a[:ov_a, ov_a:ov_a + ov_b], new_xc_b[:ov_a, ov_a:ov_a+ov_b], + no_a, nv_a, no_b, nv_b) + ferm_bb = get_fermionic_spat_contrib(new_xc_a[ov_a:ov_a+ov_b, ov_a:ov_a+ov_b], + new_xc_b[ov_a:ov_a+ov_b, ov_a:ov_a+ov_b], no_b, nv_b, no_b, nv_b) + + def get_fb_spat_contrib(acon, bcon, no, nv): + fb_shape = (no, nv, self.nbos) + fermbos = np.zeros((no + nv,) * 2 + (self.nbos,)) + fermbos[:no, no:, :] = acon.reshape(fb_shape) + fermbos[no:, :no, :] = bcon.reshape(fb_shape).transpose((1, 0, 2)) + return fermbos + + if self.opts.boson_xc_kernel: + fb_a = get_fb_spat_contrib(new_xc_a[:ov_a, ov_a+ov_b:], new_xc_b[:ov_a, ov_a+ov_b:], no_a, nv_a) + fb_b = get_fb_spat_contrib(new_xc_a[ov_a:ov_a+ov_b, ov_a+ov_b:], new_xc_b[ov_a:ov_a+ov_b, ov_a+ov_b:], + no_b, nv_b) + else: + fb_a = np.zeros((no_a + nv_a,) * 2 + (0,)) + fb_b = np.zeros((no_b + nv_b,) * 2 + (0,)) + + if self.base.with_df: + # If using RI we can now perform an svd to generate a low-rank representation in the cluster. + def construct_low_rank_rep(vaa, vab, vbb, v_fb_a, v_fb_b): + """Generates low-rank representation of kernel. Note that this will usually be non-PSD, so a real + representation will be necessarily asymmetric. Once code is generalised for complex numbers can + use symmetric decomposition...""" + na, nb = vaa.shape[0], vbb.shape[0] + nbos = v_fb_a.shape[2] + nferm_tot = na ** 2 + nb ** 2 + + vaa = vaa.reshape((na ** 2, na ** 2)) + vbb = vbb.reshape((nb ** 2, nb ** 2)) + vab = vab.reshape((na ** 2, nb ** 2)) + + v_fb_a_ex = v_fb_a.reshape((na ** 2, nbos)) + v_fb_b_ex = v_fb_b.reshape((nb ** 2, nbos)) + + v_fb_a_dex = v_fb_a.transpose((1, 0, 2)).reshape((na ** 2, nbos)) + v_fb_b_dex = v_fb_b.transpose((1, 0, 2)).reshape((nb ** 2, nbos)) + + fullv = np.zeros((na ** 2 + nb ** 2 + 2 * nbos,) * 2) + fullv[:na ** 2, :na ** 2] = vaa + fullv[na ** 2:nferm_tot, na ** 2:nferm_tot] = vbb + fullv[:na ** 2, na ** 2:nferm_tot] = vab + fullv[na ** 2:nferm_tot, :na ** 2] = vab.T + + # Component coupling to bosonic excitations. + fullv[:na ** 2, nferm_tot:nferm_tot + nbos] = v_fb_a_ex + fullv[na ** 2:nferm_tot, nferm_tot:nferm_tot + nbos] = v_fb_b_ex + + fullv[nferm_tot:nferm_tot + nbos, :na ** 2] = v_fb_a_ex.T + fullv[nferm_tot:nferm_tot + nbos, na ** 2:nferm_tot] = v_fb_b_ex.T + + # Component coupling to bosonic excitations. + fullv[:na ** 2, nferm_tot + nbos:] = v_fb_a_dex + fullv[na ** 2:nferm_tot, nferm_tot + nbos:] = v_fb_b_dex + + fullv[nferm_tot + nbos:, :na ** 2] = v_fb_a_dex.T + fullv[nferm_tot + nbos:, na ** 2:nferm_tot] = v_fb_b_dex.T + + u, s, v = np.linalg.svd(fullv, full_matrices=False) + want = s > svdtol + nwant = sum(want) + self.log.info("Fragment %d gives rank %d xc-kernel contribution.", self.id, nwant) + repr_l = einsum("n,np->np", s[:nwant] ** (0.5), v[:nwant]) + repr_r = einsum("n,pn->np", s[:nwant] ** (0.5), u[:, :nwant]) + + repf_a = (repr_l[:, :na ** 2].reshape((nwant, na, na)), + repr_r[:, :na ** 2].reshape((nwant, na, na))) + repf_b = (repr_l[:, na ** 2:nferm_tot].reshape((nwant, nb, nb)), + repr_r[:, na ** 2:nferm_tot].reshape((nwant, nb, nb))) + repbos_ex = (repr_l[:, nferm_tot:nferm_tot + nbos], repr_r[:, nferm_tot:nferm_tot + nbos]) + repbos_dex = (repr_l[:, nferm_tot + nbos:], repr_r[:, nferm_tot + nbos:]) + return repf_a, repf_b, repbos_ex, repbos_dex + + return construct_low_rank_rep(ferm_aa, ferm_ab, ferm_bb, fb_a, fb_b) + else: + return ferm_aa, ferm_ab, ferm_bb, fb_a, fb_b
+ +
[docs] def get_correlation_kernel_contrib(self, contrib): + """Gets contribution to xc kernel in full space of system.""" + + c = dot(self.base.get_ovlp(), self.cluster.c_active) + + if self.base.with_df: + # First get the contribution from the fermionic degrees of freedom. + res = [tuple([einsum("nij,pi,qj->npq", x, c, c) for x in y]) for y in contrib[:2]] + if self.opts.boson_xc_kernel: + repbos_ex, repbos_dex = contrib[2:] + r_ao_bosa, r_ao_bosb = self.r_ao_bos + + bos_contrib = [ + (einsum("nz,zpq->npq", repbos_ex[0], r_ao_bosa) + einsum("nz,zpq->nqp", repbos_dex[0], r_ao_bosa), + einsum("nz,zpq->npq", repbos_ex[1], r_ao_bosa) + einsum("nz,zpq->nqp", repbos_dex[1], r_ao_bosa)), + (einsum("nz,zpq->npq", repbos_ex[0], r_ao_bosb) + einsum("nz,zpq->nqp", repbos_dex[0], r_ao_bosb), + einsum("nz,zpq->npq", repbos_ex[1], r_ao_bosb) + einsum("nz,zpq->nqp", repbos_dex[1], r_ao_bosb))] + res = [tuple([z1 + z2 for z1, z2 in zip(x, y)]) for x, y in zip(res, bos_contrib)] + self.prev_xc_contrib = res + return res + else: + v_aa, v_ab, v_bb, fb_a, fb_b = contrib + v_aa = einsum("ijkl,pi,qj,rk,sl->pqrs", v_aa, c, c, c, c) + v_ab = einsum("ijkl,pi,qj,rk,sl->pqrs", v_ab, c, c, c, c) + v_bb = einsum("ijkl,pi,qj,rk,sl->pqrs", v_bb, c, c, c, c) + + if self.opts.boson_xc_kernel: + r_bosa, r_bosb = self.r_bos_ao + # First bosonic excitations, need to consider boson for both first and second index pair. + bos_v_aa = einsum("ijn,pi,qj,nrs->pqrs", fb_a, c, c, r_bosa) + bos_v_aa += einsum("pqrs->rspq", bos_v_aa) + bos_v_bb = einsum("ijn,pi,qj,nrs->pqrs", fb_b, c, c, r_bosb) + bos_v_bb += einsum("pqrs->rspq", bos_v_bb) + bos_v_ab = einsum("ijn,pi,qj,nrs->pqrs", fb_a, c, c, r_bosb) + bos_v_ab += einsum("ijn,pi,qj,nrs->rspq", fb_b, c, c, r_bosa) + # Bosonic dexcitations contributions swap pqrs->qpsr. + bos_v_aa += einsum("pqrs->qpsr", bos_v_aa) + bos_v_ab += einsum("pqrs->qpsr", bos_v_ab) + bos_v_bb += einsum("pqrs->qpsr", bos_v_bb) + + v_aa += bos_v_aa + v_ab += bos_v_ab + v_bb += bos_v_bb + + self.prev_xc_contrib = (v_aa, v_ab, v_bb) + + return v_aa, v_ab, v_bb
+ +
[docs] def get_composite_moments(self, m0_new, m1_new): + """Construct composite moments using the local solver dd moments and the lattice RPA moments""" + # Get the ApB, AmB and m0 for this cluster. Note that this is pre-boson decoupling, but we don't actually care + # about that here and it shouldn't change our answer. + apb_orig = self.apb + amb_orig = self.amb + m0_orig = self.eta0 + # Now want to construct rotations defining which degrees of freedom contribute to two-point quantities. + rot_ov_frag, rot_frag_ov, proj_to_order = self.get_rot_ov_frag() + ov_a, ov_b = self.ov_active_ab + # Now generate new moments in whatever space our self-consistency condition requires. + m0_new = [dot(proj_to_order.T, x.reshape((proj_to_order.shape[0],) * 2), proj_to_order) for x in m0_new] + m1_new = [dot(proj_to_order.T, x.reshape((proj_to_order.shape[0],) * 2), proj_to_order) for x in m1_new] + + def get_updated(orig, update, rot_ovf, rot_fov): + """Given the original value of a block, the updated solver value, and rotations between appropriate spaces + generate the updated value of the appropriate block.""" + if not isinstance(rot_ovf, tuple): rot_ovf = (rot_ovf, rot_ovf) + if not isinstance(rot_fov, tuple): rot_fov = (rot_fov, rot_fov) + # Generate difference in local, two-point excitation basis. + diff = update - np.linalg.multi_dot([rot_ovf[0], orig, rot_ovf[1].T]) + return orig + np.linalg.multi_dot([rot_fov[0], diff, rot_fov[1].T]) + + def get_updated_spincomponents(orig, update, rot_ov_frag, rot_frag_ov): + newmat = orig.copy() + + newmat[:ov_a, :ov_a] = get_updated(newmat[:ov_a, :ov_a], update[0], rot_ov_frag[0], rot_frag_ov[0]) + newmat[:ov_a, ov_a:ov_a + ov_b] = get_updated(newmat[:ov_a, ov_a:ov_a + ov_b], update[1], rot_ov_frag, + rot_frag_ov) + newmat[ov_a:ov_a + ov_b, :ov_a] = newmat[:ov_a, ov_a:ov_a + ov_b].T + newmat[ov_a:ov_a + ov_b, ov_a:ov_a + ov_b] = get_updated(newmat[ov_a:ov_a + ov_b, ov_a:ov_a + ov_b], + update[2], + rot_ov_frag[1], rot_frag_ov[1]) + return newmat + + new_amb = get_updated_spincomponents(amb_orig, m1_new, rot_ov_frag, rot_frag_ov) + new_m0 = get_updated_spincomponents(m0_orig, m0_new, rot_ov_frag, rot_frag_ov) + new_m0_inv = np.linalg.inv(new_m0) + new_apb = np.linalg.multi_dot([new_m0_inv, new_amb, new_m0_inv]) + + return new_amb, new_apb
+ +
[docs] def get_rot_ov_frag(self): + """Get rotations between the relevant space for fragment two-point excitations and the cluster active occupied- + virtual excitations.""" + + occ_frag_rot = self.get_overlap('cluster[occ]|frag') + vir_frag_rot = self.get_overlap('cluster[vir]|frag') + ov_loc = self.ov_active + if self.opts.old_sc_condition: + # Then get projectors to local quantities in ov-basis. Note this needs to be stacked to apply to each spin + # pairing separately. + rot_ov_frag = np.einsum("ip,ap->pia", occ_frag_rot, vir_frag_rot).reshape((-1, ov_loc)) + # Get pseudo-inverse to map from frag to loc. Since occupied-virtual excitations aren't spanning this + # isn't a simple transpose. + rot_frag_ov = np.linalg.pinv(rot_ov_frag) + proj_to_order = np.eye(rot_ov_frag.shape[0]) + else: + # First, grab rotations from particle-hole excitations to fragment degrees of freedom, ignoring reordering + rot_ov_frag = np.einsum("ip,aq->pqia", occ_frag_rot, vir_frag_rot).reshape((-1, ov_loc)) + # Set up matrix to map down to only a single index ordering. + proj_to_order = np.zeros((self.n_frag,) * 4) + for p in range(self.n_frag): + for q in range(p + 1): + proj_to_order[p, q, p, q] = proj_to_order[q, p, p, q] = 1.0 + proj_to_order = proj_to_order.reshape((self.n_frag ** 2, self.n_frag, self.n_frag)) + # Now restrict to triangular portion of array + proj_to_order = pyscf.lib.pack_tril(proj_to_order) + # proj_from_order = np.linalg.pinv(proj_to_order) + # Now have rotation between single fragment ordering, and fragment particle-hole excits. + rot_ov_frag = dot(proj_to_order.T, rot_ov_frag) + # Get pseudo-inverse to map from frag to loc. Since occupied-virtual excitations aren't spanning this + # isn't a simple transpose. + rot_frag_ov = np.linalg.pinv(rot_ov_frag) + # Return tuples so can can unified interface with UHF implementation. + return (rot_ov_frag, rot_ov_frag), (rot_frag_ov, rot_frag_ov), proj_to_order
+ +
[docs] def calc_exact_ac(self, eps, use_plasmon=True, deg=5): + """Evaluate the exact local energy for RPA in this cluster via the Adiabatic Connection, with or without + the plasmon formula. Note that although + + """ + ov_rot = self.get_rot_to_mf_ov() + # Get couplings between all fermionic and boson degrees of freedom. + eris = self.get_eri_couplings(np.concatenate([ov_rot, self.r_bos], axis=0)) + + eps_loc = self.get_loc_eps(eps, np.concatenate([ov_rot, self.r_bos], axis=0)) + + fproj_ov = self.get_fragment_projector_ov() + + xc_apb = self.apb - eps_loc - 2 * eris + # NB for the sake of our local energy evaluation the renormalisation is just a component of the coulomb + # interaction. + xc_amb = self.amb - eps_loc - self.amb_renorm_effect + + def calc_eta0(alpha): + amb_alpha = eps_loc + (self.amb - eps_loc) * alpha + apb_alpha = eps_loc + (self.apb - eps_loc) * alpha + # e, c = np.linalg.eig(dot(amb, apb)) + MPrt = scipy.linalg.sqrtm(dot(amb_alpha, apb_alpha)) # einsum("pn,n,qn->pq", c, e ** (0.5), c) + eta0 = dot(MPrt, np.linalg.solve(apb_alpha, np.eye(apb_alpha.shape[0]))) + return eta0 + + def calc_contrib_partialint(alpha): + eta0 = calc_eta0(alpha) + eta0inv = np.linalg.inv(eta0) + + return -(einsum("pq,qr,rp->", fproj_ov, eta0[:self.ov_active_tot], xc_apb[:, :self.ov_active_tot]) + + einsum("pq,qr,rp->", fproj_ov, eta0inv[:self.ov_active_tot], + xc_amb[:, :self.ov_active_tot])) / 4 + + def calc_contrib_direct(alpha): + eta0 = calc_eta0(alpha) + eta0inv = np.linalg.inv(eta0) + # This is just the contribution from the bare, standard coulomb interaction. + e_bare = einsum("pq,pr,rq->", fproj_ov, + (eta0 - np.eye(self.ov_active_tot + self.nbos))[:self.ov_active_tot], + eris[:, :self.ov_active_tot]) / 2 + # Need to account for renormalisation of bosonic interactions, which is included in cluster coulomb kernel. + renorm = self.amb_renorm_effect / 2 + e_renorm = einsum("pq,pr,rq->", fproj_ov, + (eta0inv - np.eye(self.ov_active_tot + self.nbos))[:self.ov_active_tot], + renorm[:, :self.ov_active_tot]) / 2 + + return e_bare + e_renorm + + def run_ac_inter(func, deg=5): + points, weights = np.polynomial.legendre.leggauss(deg) + # Shift and reweight to interval of [0,1]. + points += 1 + points /= 2 + weights /= 2 + return sum([w * func(p) for w, p in zip(weights, points)]) + + if use_plasmon: + e_plasmon = (einsum("pq,qr,rp->", fproj_ov, self.eta0[:self.ov_active_tot], + self.apb[:, :self.ov_active_tot]) - ( + einsum("pq,qp->", fproj_ov, + (eps_loc + eris + self.amb_renorm_effect / 2)[:self.ov_active_tot, + :self.ov_active_tot]))) / 2 + + return e_plasmon + run_ac_inter(calc_contrib_partialint, deg) + + else: + return run_ac_inter(calc_contrib_direct, deg)
+ +
[docs] def test_total_rpa_energy(self, eps, use_plasmon=True, deg=5): + """Evaluate the exact local energy for RPA in this cluster via the Adiabatic Connection, with or without + the plasmon formula. Note that although + + """ + ov_rot = self.get_rot_to_mf_ov() + # Get couplings between all fermionic and boson degrees of freedom. + eris = self.get_eri_couplings(np.concatenate([ov_rot, self.r_bos], axis=0)) + + eps_loc = self.get_loc_eps(eps, np.concatenate([ov_rot, self.r_bos], axis=0)) + xc_apb = self.apb - eps_loc - 2 * eris + # NB for the sake of our local energy evaluation the renormalisation is just a component of the coulomb + # interaction. + xc_amb = self.amb - eps_loc - self.amb_renorm_effect + + def calc_eta0(alpha): + amb_alpha = eps_loc + (self.amb - eps_loc) * alpha + apb_alpha = eps_loc + (self.apb - eps_loc) * alpha + # e, c = np.linalg.eig(dot(amb, apb)) + MPrt = scipy.linalg.sqrtm(dot(amb_alpha, apb_alpha)) # einsum("pn,n,qn->pq", c, e ** (0.5), c) + eta0 = dot(MPrt, np.linalg.solve(apb_alpha, np.eye(apb_alpha.shape[0]))) + return eta0 + + def calc_contrib_partialint(alpha): + eta0 = calc_eta0(alpha) + eta0inv = np.linalg.inv(eta0) + + return -(einsum("pq,qp->", eta0, xc_apb) + + einsum("pq,qp->", eta0inv, xc_amb)) / 4 + + def calc_contrib_direct(alpha): + eta0 = calc_eta0(alpha) + eta0inv = np.linalg.inv(eta0) + # This is just the contribution from the bare, standard coulomb interaction. + e_bare = einsum("pq,qp->", (eta0 - np.eye(self.ov_active_tot + self.nbos)), eris) / 2 + # Need to account for renormalisation of bosonic interactions, which is included in cluster coulomb kernel. + renorm = self.amb_renorm_effect / 2 + e_renorm = einsum("pq,qp->", (eta0inv - np.eye(self.ov_active_tot + self.nbos)), renorm) / 2 + + return e_bare + e_renorm + + def run_ac_inter(func, deg=5): + points, weights = np.polynomial.legendre.leggauss(deg) + # Shift and reweight to interval of [0,1]. + points += 1 + points /= 2 + weights /= 2 + return sum([w * func(p) for w, p in zip(weights, points)]) + + e_plasmon = (einsum("pq,qp->", self.eta0, self.apb) - + ((eps_loc + eris + self.amb_renorm_effect / 2).trace())) / 2 + + e_plasmon = e_plasmon + run_ac_inter(calc_contrib_partialint, deg) + + e_direct = run_ac_inter(calc_contrib_direct, deg) + + self.log.info("Difference between plasmon and direct AC total correlation energies: %6.4e", + e_plasmon - e_direct) + + return e_plasmon, e_direct
+ + @property + def ov_active_ab(self): + ov = self.ov_active + if isinstance(ov, int): + return (ov, ov) + else: + return ov + + @property + def nocc_ab(self): + no = self.cluster.nocc_active + if isinstance(no, int): + return (no, no) + else: + return no + + @property + def nclus_ab(self): + ncl = self.cluster.norb_active + if isinstance(ncl, int): + return (ncl, ncl) + else: + return ncl + + @property + def nvir_ab(self): + return tuple([x - y for x, y in zip(self.nclus_ab, self.nocc_ab)]) + +
[docs] def split_ov_spin_components(self, mat): + ov = self.ov_active + if isinstance(ov, tuple): + ova, ovb = ov + else: + ova = ovb = ov + + return mat[:ova, :ova], mat[:ova, ova:ova + ovb], mat[ova:ova + ovb, ova:ova + ovb]
+ + +
[docs]def bogoliubov_decouple(apb, amb): + # Perform quick bogliubov transform to decouple our bosons. + rt_amb = scipy.linalg.sqrtm(amb) + m = dot(rt_amb, apb, rt_amb) + e, c = np.linalg.eigh(m) + freqs = e ** (0.5) + + xpy = np.einsum("n,qp,pn->qn", freqs ** (-0.5), rt_amb, c) + xmy = np.einsum("n,qp,pn->qn", freqs ** (0.5), np.linalg.inv(rt_amb), c) + x = 0.5 * (xpy + xmy) + y = 0.5 * (xpy - xmy) + return freqs, x, y
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/edmet/uedmet.html b/_modules/vayesta/edmet/uedmet.html new file mode 100644 index 000000000..d93f12b26 --- /dev/null +++ b/_modules/vayesta/edmet/uedmet.html @@ -0,0 +1,134 @@ + + + + + + vayesta.edmet.uedmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.edmet.uedmet

+import numpy as np
+
+from vayesta.dmet import UDMET
+from vayesta.edmet import REDMET
+from vayesta.edmet.ufragment import UEDMETFragment as Fragment
+
+
+
[docs]class UEDMET(REDMET, UDMET): + + @property + def eps(self): + noa, nob = self.nocc + nva, nvb = self.nvir + + epsa = np.zeros((noa, nva)) + epsa = epsa + self.mo_energy[0, noa:] + epsa = (epsa.T - self.mo_energy[0, :noa]).T + epsa = epsa.reshape(-1) + + epsb = np.zeros((nob, nvb)) + epsb = epsb + self.mo_energy[1, nob:] + epsb = (epsb.T - self.mo_energy[1, :nob]).T + epsb = epsb.reshape(-1) + + return epsa, epsb + + Fragment = Fragment
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/edmet/ufragment.html b/_modules/vayesta/edmet/ufragment.html new file mode 100644 index 000000000..eae5bdd33 --- /dev/null +++ b/_modules/vayesta/edmet/ufragment.html @@ -0,0 +1,355 @@ + + + + + + vayesta.edmet.ufragment — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.edmet.ufragment

+import numpy as np
+import pyscf.lib
+
+from vayesta.core.util import dot, einsum
+from vayesta.dmet.ufragment import UDMETFragment
+from vayesta.edmet.fragment import EDMETFragment
+
+
+
[docs]class UEDMETFragment(UDMETFragment, EDMETFragment): + + @property + def ov_active(self): + no_a, no_b = self.cluster.nocc_active + nv_a, nv_b = self.cluster.nvir_active + return no_a * nv_a, no_b * nv_b + + @property + def ov_active_tot(self): + return sum(self.ov_active) + + @property + def ov_mf(self): + no_a, no_b = self.base.nocc + nv_a, nv_b = self.base.nvir + return no_a * nv_a, no_b * nv_b + + @property + def r_bos_ao(self): + if self.sym_parent is None: + # Need to convert bosonic definition from ov-excitations into ao pairs. + r_bos = self.r_bos + co_a, co_b = self.base.mo_coeff_occ + cv_a, cv_b = self.base.mo_coeff_vir + + r_bosa = r_bos[:, :self.ov_mf[0]].reshape((self.nbos, self.base.nocc[0], self.base.nvir[0])) + r_bosb = r_bos[:, self.ov_mf[0]:].reshape((self.nbos, self.base.nocc[1], self.base.nvir[1])) + return (einsum("nia,pi,qa->npq", r_bosa, co_a, cv_a), einsum("nia,pi,qa->npq", r_bosb, co_b, cv_b)) + else: + r_bos_ao = self.sym_parent.r_bos_ao + # Need to rotate to account for symmetry operations. + r_bos_ao = tuple([self.sym_op(self.sym_op(x, axis=2), axis=1) for x in r_bos_ao]) + return r_bos_ao + +
[docs] def get_fock(self): + return self.base.get_fock()
+ +
[docs] def get_co_active(self): + return self.cluster.c_active_occ
+ +
[docs] def get_cv_active(self): + return self.cluster.c_active_vir
+ +
[docs] def get_rot_to_mf_ov(self): + r_o = self.get_overlap('mo[occ]|cluster[occ]') + r_v = self.get_overlap('mo[vir]|cluster[vir]') + spat_rota = einsum("iJ,aB->iaJB", r_o[0], r_v[0]).reshape((self.ov_mf[0], self.ov_active[0])).T + spat_rotb = einsum("iJ,aB->iaJB", r_o[1], r_v[1]).reshape((self.ov_mf[1], self.ov_active[1])).T + res = np.zeros((sum(self.ov_active), sum(self.ov_mf))) + res[:self.ov_active[0], :self.ov_mf[0]] = spat_rota + res[self.ov_active[0]:, self.ov_mf[0]:] = spat_rotb + return res
+ +
[docs] def get_fragment_projector_ov(self, proj="o", inc_bosons=False): + """In space of cluster p-h excitations, generate the projector to the .""" + if not ("o" in proj or "v" in proj): + raise ValueError("Must project the occupied and/or virtual index to the fragment. Please specify at least " + "one") + + nex = self.ov_active_tot + if inc_bosons: + nex += self.nbos + + def get_ov_projector(poa, pob, pva, pvb): + p_ova = einsum("ij,ab->iajb", poa, pva).reshape((self.ov_active[0], self.ov_active[0])) + p_ovb = einsum("ij,ab->iajb", pob, pvb).reshape((self.ov_active[1], self.ov_active[1])) + p_ov = np.zeros((nex, nex)) + p_ov[:self.ov_active[0], :self.ov_active[0]] = p_ova + p_ov[self.ov_active[0]:self.ov_active_tot, self.ov_active[0]:self.ov_active_tot] = p_ovb + return p_ov + + p_ov = np.zeros((nex, nex)) + if "o" in proj: + poa, pob = self.get_fragment_projector(self.cluster.c_active_occ) + pva, pvb = [np.eye(x) for x in self.cluster.nvir_active] + p_ov += get_ov_projector(poa, pob, pva, pvb) + if "v" in proj: + poa, pob = [np.eye(x) for x in self.cluster.nocc_active] + pva, pvb = self.get_fragment_projector(self.cluster.c_active_vir) + p_ov += get_ov_projector(poa, pob, pva, pvb) + return p_ov
+ + def _get_boson_hamil(self, apb, amb): + a = 0.5 * (apb + amb) + b = 0.5 * (apb - amb) + + n_a, n_b = self.cluster.norb_active + nocc_a, nocc_b = self.cluster.nocc_active + nvir_a, nvir_b = self.cluster.nvir_active + ov_a, ov_b = self.ov_active + + couplings_aa = np.zeros((self.nbos, n_a, n_a)) + couplings_bb = np.zeros((self.nbos, n_b, n_b)) + + couplings_aa[:, :nocc_a, nocc_a:] = a[ov_a + ov_b:, :ov_a].reshape(self.nbos, nocc_a, nvir_a) + couplings_aa[:, nocc_a:, :nocc_a] = b[ov_a + ov_b:, :ov_a].reshape(self.nbos, nocc_a, nvir_a).transpose( + [0, 2, 1]) + + couplings_bb[:, :nocc_b, nocc_b:] = a[ov_a + ov_b:, ov_a:ov_a + ov_b].reshape(self.nbos, nocc_b, nvir_b) + couplings_bb[:, nocc_b:, :nocc_b] = b[ov_a + ov_b:, ov_a:ov_a + ov_b].reshape(self.nbos, nocc_b, + nvir_b).transpose( + [0, 2, 1]) + + a_bos = a[ov_a + ov_b:, ov_a + ov_b:] + b_bos = b[ov_a + ov_b:, ov_a + ov_b:] + + return couplings_aa, couplings_bb, a_bos, b_bos + +
[docs] def conv_to_aos(self, ra, rb): + ra = ra.reshape((-1, self.base.nocc[0], self.base.nvir[0])) + rb = rb.reshape((-1, self.base.nocc[1], self.base.nvir[1])) + return einsum("nia,pi,qa->npq", ra, self.base.mo_coeff_occ[0], self.base.mo_coeff_vir[0]), \ + einsum("nia,pi,qa->npq", rb, self.base.mo_coeff_occ[1], self.base.mo_coeff_vir[1])
+ +
[docs] def get_eri_couplings(self, rot): + """Obtain eri in a space defined by an arbitrary rotation of the mean-field particle-hole excitations of our + systems. Note that this should only really be used in the case that such a rotation cannot be described by a + rotation of the underlying single-particle basis, since highly efficient routines already exist for this case.. + """ + + # Convert rots from full-space particle-hole excitations into AO pairs. + + rota, rotb = rot[:, :self.ov_mf[0]], rot[:, self.ov_mf[0]:sum(self.ov_mf)] + + if hasattr(self.base.mf, "with_df"): + rota, rotb = self.conv_to_aos(rota, rotb) + # Loop through cderis + res = np.zeros((rot.shape[0], rot.shape[0])) + for eri1 in self.mf.with_df.loop(): + l_ = einsum("npq,lpq->nl", pyscf.lib.unpack_tril(eri1), rota + rotb) + + res += dot(l_.T, l_) + return res + else: + # This is painful to do for each fragment, but comes from working with 4-index eris. + c_act = self.mf.mo_coeff + eris_aa, eris_ab, eris_bb = self.base.get_eris_array_uhf((c_act[0], c_act[1])) + eris_aa = eris_aa[:self.base.nocc[0], self.base.nocc[0]:, :self.base.nocc[0], self.base.nocc[0]:].reshape( + (self.ov_mf[0], self.ov_mf[0])) + eris_ab = eris_ab[:self.base.nocc[0], self.base.nocc[0]:, :self.base.nocc[1], self.base.nocc[1]:].reshape( + (self.ov_mf[0], self.ov_mf[1])) + eris_bb = eris_bb[:self.base.nocc[1], self.base.nocc[1]:, :self.base.nocc[1], self.base.nocc[1]:].reshape( + (self.ov_mf[1], self.ov_mf[1])) + + return dot(rota, eris_aa, rota.T) + dot(rota, eris_ab, rotb.T) + \ + dot(rotb, eris_ab.T, rota.T) + dot(rotb, eris_bb, rotb.T)
+ +
[docs] def get_rbos_split(self): + r_bos_a = self.r_bos[:, :self.ov_mf[0]] + r_bos_b = self.r_bos[:, self.ov_mf[0]:] + return r_bos_a.reshape((self.nbos, self.base.nocc[0], self.base.nvir[1])), r_bos_b.reshape( + (self.nbos, self.base.nocc[0], self.base.nvir[1]))
+ +
[docs] def get_rot_ov_frag(self): + """Get rotations between the relevant space for fragment two-point excitations and the cluster active occupied- + virtual excitations.""" + + occ_frag_rot = self.get_overlap('cluster[occ]|frag') + vir_frag_rot = self.get_overlap('cluster[vir]|frag') + if self.opts.old_sc_condition: + # Then get projectors to local quantities in ov-basis. Note this needs to be stacked to apply to each spin + # pairing separately. + rot_ov_frag = tuple([np.einsum("ip,ap->pia", x, y).reshape((-1, ov)) for x, y, ov in + zip(occ_frag_rot, vir_frag_rot, self.ov_active)]) + # Get pseudo-inverse to map from frag to loc. Since occupied-virtual excitations aren't spanning this + # isn't a simple transpose. + proj_to_order = np.eye(rot_ov_frag[0].shape[0]) + else: + # First, grab rotations from particle-hole excitations to fragment degrees of freedom, ignoring reordering + rot_ov_frag = tuple([np.einsum("ip,aq->pqia", x, y).reshape((-1, ov)) for x, y, ov in + zip(occ_frag_rot, vir_frag_rot, self.ov_active)]) + # Set up matrix to map down to only a single index ordering. + # Note that we current assume the number of alpha and beta orbitals is equal + nf = self.n_frag[0] + proj_to_order = np.zeros((nf,) * 4) + for p in range(nf): + for q in range(p + 1): + proj_to_order[p, q, p, q] = proj_to_order[q, p, p, q] = 1.0 + proj_to_order = proj_to_order.reshape((nf ** 2, nf, nf)) + # Now restrict to triangular portion of array + proj_to_order = pyscf.lib.pack_tril(proj_to_order) + # proj_from_order = np.linalg.pinv(proj_to_order) + # Now have rotation between single fragment ordering, and fragment particle-hole excits. + rot_ov_frag = tuple([dot(proj_to_order.T, x) for x in rot_ov_frag]) + # Get pseudo-inverse to map from frag to loc. Since occupied-virtual excitations aren't spanning this + # isn't a simple transpose. + rot_frag_ov = tuple([np.linalg.pinv(x) for x in rot_ov_frag]) + + # Return tuples so can can unified interface with UHF implementation. + return rot_ov_frag, rot_frag_ov, proj_to_order
+ +
[docs] def get_correlation_kernel_contrib(self, contrib): + """Gets contribution to xc kernel in full space of system.""" + + ca = dot(self.base.get_ovlp(), self.cluster.c_active[0]) + cb = dot(self.base.get_ovlp(), self.cluster.c_active[1]) + + if self.base.with_df: + # First get the contribution from the fermionic degrees of freedom. + res = [tuple([einsum("nij,pi,qj->npq", x, c, c) for x in y]) for y, c in zip(contrib[:2], [ca, cb])] + if self.opts.boson_xc_kernel: + repbos_ex, repbos_dex = contrib[2:] + r_ao_bosa, r_ao_bosb = self.r_ao_bos + + bos_contrib = [ + (einsum("nz,zpq->npq", repbos_ex[0], r_ao_bosa) + einsum("nz,zpq->nqp", repbos_dex[0], r_ao_bosa), + einsum("nz,zpq->npq", repbos_ex[1], r_ao_bosa) + einsum("nz,zpq->nqp", repbos_dex[1], r_ao_bosa)), + (einsum("nz,zpq->npq", repbos_ex[0], r_ao_bosb) + einsum("nz,zpq->nqp", repbos_dex[0], r_ao_bosb), + einsum("nz,zpq->npq", repbos_ex[1], r_ao_bosb) + einsum("nz,zpq->nqp", repbos_dex[1], r_ao_bosb))] + res = [tuple([z1 + z2 for z1, z2 in zip(x, y)]) for x, y in zip(res, bos_contrib)] + self.prev_xc_contrib = res + return res + else: + v_aa, v_ab, v_bb, fb_a, fb_b = contrib + v_aa = einsum("ijkl,pi,qj,rk,sl->pqrs", v_aa, ca, ca, ca, ca) + v_ab = einsum("ijkl,pi,qj,rk,sl->pqrs", v_ab, ca, ca, cb, cb) + v_bb = einsum("ijkl,pi,qj,rk,sl->pqrs", v_bb, cb, cb, cb, cb) + + if self.opts.boson_xc_kernel: + r_bosa, r_bosb = self.r_bos_ao + # First bosonic excitations + bos_v_aa = einsum("ijn,pi,qj,nrs->pqrs", fb_a, ca, ca, r_bosa) + bos_v_aa += einsum("pqrs->rspq", bos_v_aa) + bos_v_bb = einsum("ijn,pi,qj,nrs->pqrs", fb_b, cb, cb, r_bosb) + bos_v_bb += einsum("pqrs->rspq", bos_v_bb) + bos_v_ab = einsum("ijn,pi,qj,nrs->pqrs", fb_a, ca, ca, r_bosb) + bos_v_ab += einsum("ijn,pi,qj,nrs->rspq", fb_b, cb, cb, r_bosa) + # Bosonic dexcitations contributions swap pqrs->qpsr. + bos_v_aa += einsum("pqrs->qpsr", bos_v_aa) + bos_v_ab += einsum("pqrs->qpsr", bos_v_ab) + bos_v_bb += einsum("pqrs->qpsr", bos_v_bb) + + v_aa += bos_v_aa + v_ab += bos_v_ab + v_bb += bos_v_bb + + self.prev_xc_contrib = (v_aa, v_ab, v_bb) + + return v_aa, v_ab, v_bb
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/ewf.html b/_modules/vayesta/ewf.html new file mode 100644 index 000000000..210ae443e --- /dev/null +++ b/_modules/vayesta/ewf.html @@ -0,0 +1,129 @@ + + + + + + vayesta.ewf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.ewf

+"""Embedded wave function (EWF) method
+Author: Max Nusspickel
+email:  max.nusspickel@gmail.com
+"""
+
+import pyscf
+import pyscf.scf
+import logging 
+
+#from .ewf import EWF as REWF
+from vayesta.ewf.ewf import REWF
+from vayesta.ewf.uewf import UEWF
+
+log = logging.getLogger(__name__)
+
+
[docs]def EWF(mf, *args, **kwargs): + """Determine restricted or unrestricted by inspection of mean-field object""" + if isinstance(mf, pyscf.scf.uhf.UHF): + return UEWF(mf, *args, **kwargs) + elif isinstance(mf, pyscf.scf.rohf.ROHF): + log.warning("Converting ROHF reference to UHF") + return UEWF(mf.to_uhf(), *args, **kwargs) + return REWF(mf, *args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/ewf/ewf.html b/_modules/vayesta/ewf/ewf.html new file mode 100644 index 000000000..b2f17a51e --- /dev/null +++ b/_modules/vayesta/ewf/ewf.html @@ -0,0 +1,885 @@ + + + + + + vayesta.ewf.ewf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.ewf.ewf

+# --- Standard
+import dataclasses
+# --- External
+import numpy as np
+from vayesta.core.util import (NotCalculatedError, break_into_lines, cache, deprecated, dot, einsum, energy_string,
+                               log_method, log_time, time_string, timer)
+from vayesta.core.qemb import Embedding
+from vayesta.core.fragmentation import SAO_Fragmentation
+from vayesta.core.fragmentation import IAOPAO_Fragmentation
+from vayesta.mpi import mpi
+from vayesta.ewf.fragment import Fragment
+from vayesta.ewf.amplitudes import get_global_t1_rhf
+from vayesta.ewf.amplitudes import get_global_t2_rhf
+from vayesta.ewf.rdm import make_rdm1_ccsd
+from vayesta.ewf.rdm import make_rdm1_ccsd_global_wf
+from vayesta.ewf.rdm import make_rdm2_ccsd_global_wf
+from vayesta.ewf.rdm import make_rdm1_ccsd_proj_lambda
+from vayesta.ewf.rdm import make_rdm2_ccsd_proj_lambda
+from vayesta.ewf.icmp2 import get_intercluster_mp2_energy_rhf
+
+
+
[docs]@dataclasses.dataclass +class Options(Embedding.Options): + """Options for EWF calculations.""" + # --- Fragment settings + iao_minao : str = 'auto' # Minimal basis for IAOs + # --- Bath settings + bath_options: dict = Embedding.Options.change_dict_defaults('bath_options', + bathtype='mp2', threshold=1e-8) + #ewdmet_max_order: int = 1 + # If multiple bno thresholds are to be calculated, we can project integrals and amplitudes from a previous larger cluster: + project_eris: bool = False # Project ERIs from a pervious larger cluster (corresponding to larger eta), can result in a loss of accuracy especially for large basis sets! + project_init_guess: bool = True # Project converted T1,T2 amplitudes from a previous larger cluster + energy_functional: str = 'wf' + # Calculation modes + calc_e_wf_corr: bool = True + calc_e_dm_corr: bool = False + # --- Solver settings + t_as_lambda: bool = None # If True, use T-amplitudes inplace of Lambda-amplitudes + store_wf_type: str = None # If set, fragment WFs will be converted to the respective type, before storing them + # Counterpoise correction of BSSE + bsse_correction: bool = True + bsse_rmax: float = 5.0 # In Angstrom + nelectron_target: int = None + # --- Couple embedding problems (currently only CCSD) + sc_mode: int = 0 + coupled_iterations: bool = False + # --- Debugging + _debug_wf: str = None
+ + +
[docs]class EWF(Embedding): + + Fragment = Fragment + Options = Options + + def __init__(self, mf, solver='CCSD', bno_threshold=None, bath_type=None, solve_lambda=None, log=None, **kwargs): + t0 = timer() + super().__init__(mf, solver=solver, log=log, **kwargs) + + # Backwards support + if bno_threshold is not None: + self.log.deprecated("keyword argument bno_threshold is deprecated!") + self.opts.bath_options = {**self.opts.bath_options, **dict(threshold=bno_threshold)} + if bath_type is not None: + self.log.deprecated("keyword argument bath_type is deprecated!") + self.opts.bath_options = {**self.opts.bath_options, **dict(bathtype=bath_type)} + if solve_lambda is not None: + self.log.deprecated("keyword argument solve_lambda is deprecated!") + self.opts.solver_options = {**self.opts.solver_options, **dict(solve_lambda=solve_lambda)} + + # Logging + with self.log.indent(): + # Options + self.log.info("Parameters of %s:", self.__class__.__name__) + self.log.info(break_into_lines(str(self.opts), newline='\n ')) + self.log.info("Time for %s setup: %s", self.__class__.__name__, time_string(timer()-t0)) + + def __repr__(self): + keys = ['mf', 'solver'] + fmt = ('%s(' + len(keys)*'%s: %r, ')[:-2] + ')' + values = [self.__dict__[k] for k in keys] + return fmt % (self.__class__.__name__, *[x for y in zip(keys, values) for x in y]) + + def _reset(self, **kwargs): + super()._reset(**kwargs) + # TODO: Redo self-consistencies + self.iteration = 0 + self._make_rdm1_ccsd_global_wf_cached.cache_clear() + + # Default fragmentation +
[docs] def fragmentation(self, *args, **kwargs): + return self.iao_fragmentation(*args, **kwargs)
+ +
[docs] def tailor_all_fragments(self): + for x in self.fragments: + for y in self.fragments: + if (x == y): + continue + x.add_tailor_fragment(y)
+ +
[docs] def kernel(self): + """Run EWF.""" + t_start = timer() + + # Automatic fragmentation + if len(self.fragments) == 0: + self.log.debug("No fragments found. Adding all atomic IAO fragments.") + with self.fragmentation() as frag: + frag.add_all_atomic_fragments() + self._check_fragment_nelectron() + + # Debug: calculate exact WF + if self.opts._debug_wf is not None: + self._debug_get_wf(self.opts._debug_wf) + + # --- Create bath and clusters + if mpi: + mpi.world.Barrier() + self.log.info("") + self.log.info("MAKING BATH AND CLUSTERS") + self.log.info("========================") + fragments = self.get_fragments(active=True, sym_parent=None, mpi_rank=mpi.rank) + fragdict = {f.id: f for f in fragments} + with log_time(self.log.timing, "Total time for bath and clusters: %s"): + for x in fragments: + if x._results is not None: + self.log.debug("Resetting %s" % x) + x.reset() + msg = "Making bath and clusters for %s%s" % (x, (" on MPI process %d" % mpi.rank) if mpi else "") + self.log.info(msg) + self.log.info(len(msg)*"-") + with self.log.indent(): + if x._dmet_bath is None: + # Make own bath: + if x.flags.bath_parent_fragment_id is None: + x.make_bath() + # Copy bath (DMET, occupied, virtual) from other fragment: + else: + bath_parent = fragdict[x.flags.bath_parent_fragment_id] + for attr in ('_dmet_bath', '_bath_factory_occ', '_bath_factory_vir'): + setattr(x, attr, getattr(bath_parent, attr)) + if x._cluster is None: + x.make_cluster() + if mpi: + mpi.world.Barrier() + + if mpi: + with log_time(self.log.timing, "Time for MPI communication of clusters: %s"): + self.communicate_clusters() + + # --- Screened Coulomb interaction + if any(x.opts.screening is not None for x in fragments): + self.log.info("") + self.log.info("SCREENING INTERACTIONS") + self.log.info("======================") + with log_time(self.log.timing, "Time for screened interations: %s"): + self.build_screened_eris() + + # --- Loop over fragments with no symmetry parent and with own MPI rank + self.log.info("") + self.log.info("RUNNING SOLVERS") + self.log.info("===============") + with log_time(self.log.timing, "Total time for solvers: %s"): + # Split fragments in auxiliary and regular, solve auxiliary fragments first + fragments_aux = [x for x in fragments if x.opts.auxiliary] + fragments_reg = [x for x in fragments if not x.opts.auxiliary] + for frags in [fragments_aux, fragments_reg]: + for x in frags: + msg = "Solving %s%s" % (x, (" on MPI process %d" % mpi.rank) if mpi else "") + self.log.info(msg) + self.log.info(len(msg)*"-") + with self.log.indent(): + x.kernel() + if mpi: + mpi.world.Barrier() + + if self.solver.lower() == 'dump': + self.log.output("Clusters dumped to file '%s'", self.opts.solver_options['dumpfile']) + return + + # --- Check convergence of fragments + conv = self._all_converged(fragments) + if not conv: + self.log.error("Some fragments did not converge!") + self.converged = conv + + # --- Evaluate correlation energy and log information + self.e_corr = self.get_e_corr() + self.log.output('E(MF)= %s', energy_string(self.e_mf)) + self.log.output('E(corr)= %s', energy_string(self.e_corr)) + self.log.output('E(tot)= %s', energy_string(self.e_tot)) + self.log.info("Total wall time: %s", time_string(timer()-t_start)) + return self.e_tot
+ + def _all_converged(self, fragments): + conv = True + for fx in fragments: + conv = (conv and fx.results.converged) + if mpi: + conv = mpi.world.allreduce(conv, op=mpi.MPI.LAND) + return conv + + # --- CC Amplitudes + # ----------------- + + # T-amplitudes + get_global_t1 = get_global_t1_rhf + get_global_t2 = get_global_t2_rhf + + # Lambda-amplitudes +
[docs] def get_global_l1(self, *args, t_as_lambda=None, **kwargs): + get_lambda = True if not t_as_lambda else False + return self.get_global_t1(*args, get_lambda=get_lambda, **kwargs)
+
[docs] def get_global_l2(self, *args, t_as_lambda=None, **kwargs): + get_lambda = True if not t_as_lambda else False + return self.get_global_t2(*args, get_lambda=get_lambda, **kwargs)
+ +
[docs] def t1_diagnostic(self, warntol=0.02): + # Per cluster + for fx in self.get_fragments(active=True, mpi_rank=mpi.rank): + wfx = fx.results.wf.as_ccsd() + t1 = wfx.t1 + nelec = 2*t1.shape[0] + t1diag = np.linalg.norm(t1) / np.sqrt(nelec) + if t1diag >= warntol: + self.log.warning("T1 diagnostic for %-20s %.5f", str(f)+':', t1diag) + else: + self.log.info("T1 diagnostic for %-20s %.5f", str(f)+':', t1diag) + # Global + t1 = self.get_global_t1(mpi_target=0) + if mpi.is_master: + nelec = 2*t1.shape[0] + t1diag = np.linalg.norm(t1) / np.sqrt(nelec) + if t1diag >= warntol: + self.log.warning("Global T1 diagnostic: %.5f", t1diag) + else: + self.log.info("Global T1 diagnostic: %.5f", t1diag)
+ + # --- Bardwards compatibility: +
[docs] @deprecated("get_t1 is deprecated - use get_global_t1 instead.") + def get_t1(self, *args, **kwargs): + return self.get_global_t1(*args, **kwargs)
+
[docs] @deprecated("get_t2 is deprecated - use get_global_t2 instead.") + def get_t2(self, *args, **kwargs): + return self.get_global_t2(*args, **kwargs)
+
[docs] @deprecated("get_l1 is deprecated - use get_global_l1 instead.") + def get_l1(self, *args, **kwargs): + return self.get_global_l1(*args, **kwargs)
+
[docs] @deprecated("get_l2 is deprecated - use get_global_l2 instead.") + def get_l2(self, *args, **kwargs): + return self.get_global_l2(*args, **kwargs)
+ + # --- Density-matrices + # -------------------- + + # Defaults + +
[docs] def make_rdm1(self, *args, **kwargs): + if self.solver.lower() == 'ccsd': + return self._make_rdm1_ccsd_global_wf(*args, **kwargs) + if self.solver.lower() == 'mp2': + return self._make_rdm1_mp2_global_wf(*args, **kwargs) + if self.solver.lower() == 'fci': + return self.make_rdm1_demo(*args, **kwargs) + raise NotImplementedError("make_rdm1 for solver '%s'" % self.solver)
+ +
[docs] def make_rdm2(self, *args, **kwargs): + if self.solver.lower() == 'ccsd': + return self._make_rdm2_ccsd_proj_lambda(*args, **kwargs) + #return self._make_rdm2_ccsd(*args, **kwargs) + if self.solver.lower() == 'mp2': + return self._make_rdm2_ccsd_proj_lambda(*args, t_as_lambda=True, **kwargs) + raise NotImplementedError("make_rdm2 for solver '%s'" % self.solver)
+ + # DM1 + @log_method() + def _make_rdm1_mp2(self, *args, **kwargs): + return make_rdm1_ccsd(self, *args, mp2=True, **kwargs) + + @log_method() + def _make_rdm1_ccsd(self, *args, **kwargs): + return make_rdm1_ccsd(self, *args, mp2=False, **kwargs) + + @log_method() + def _make_rdm1_ccsd_global_wf(self, *args, ao_basis=False, with_mf=True, **kwargs): + dm1 = self._make_rdm1_ccsd_global_wf_cached(*args, **kwargs) + if with_mf: + dm1[np.diag_indices(self.nocc)] += 2 + if ao_basis: + dm1 = dot(self.mo_coeff, dm1, self.mo_coeff.T) + return dm1 + + @cache(copy=True) + def _make_rdm1_ccsd_global_wf_cached(self, *args, **kwargs): + return make_rdm1_ccsd_global_wf(self, *args, **kwargs) + + def _make_rdm1_mp2_global_wf(self, *args, **kwargs): + return self._make_rdm1_ccsd_global_wf(*args, t_as_lambda=True, with_t1=False, **kwargs) + + @log_method() + def _make_rdm1_ccsd_proj_lambda(self, *args, **kwargs): + return make_rdm1_ccsd_proj_lambda(self, *args, **kwargs) + + # DM2 + + @log_method() + def _make_rdm2_ccsd_global_wf(self, *args, **kwargs): + return make_rdm2_ccsd_global_wf(self, *args, **kwargs) + + @log_method() + def _make_rdm2_ccsd_proj_lambda(self, *args, **kwargs): + return make_rdm2_ccsd_proj_lambda(self, *args, **kwargs) + + # --- Energy + # ---------- + + # Correlation + +
[docs] def get_e_corr(self, functional=None, **kwargs): + functional = (functional or self.opts.energy_functional) + if functional == 'projected': + # TODO: print deprecation message + functional = 'wf' + if functional == 'wf': + return self.get_wf_corr_energy(**kwargs) + if functional == 'dm-t2only': + return self.get_dm_corr_energy(t_as_lambda=True, **kwargs) + if functional == 'dm': + return self.get_dm_corr_energy(**kwargs) + raise ValueError("Unknown energy functional: '%s'" % functional)
+ +
[docs] @mpi.with_allreduce() + def get_wf_corr_energy(self): + e_corr = 0.0 + # Only loop over fragments of own MPI rank + for x in self.get_fragments(contributes=True, sym_parent=None, mpi_rank=mpi.rank): + if x.results.e_corr is not None: + ex = x.results.e_corr + else: + wf = x.results.wf.as_cisd(c0=1.0) + px = x.get_overlap('frag|cluster-occ') + wf = wf.project(px) + es, ed, ex = x.get_fragment_energy(wf.c1, wf.c2) + self.log.debug("%20s: E(S)= %s E(D)= %s E(tot)= %s", x, energy_string(es), energy_string(ed), energy_string(ex)) + e_corr += x.symmetry_factor * ex + return e_corr/self.ncells
+ +
[docs] def get_proj_corr_energy(self): + """TODO: deprecate in favor of get_wf_corr_energy.""" + return self.get_wf_corr_energy()
+ +
[docs] def get_dm_corr_energy(self, dm1='global-wf', dm2='projected-lambda', t_as_lambda=None, with_exxdiv=None): + e1 = self.get_dm_corr_energy_e1(dm1=dm1, t_as_lambda=None, with_exxdiv=None) + e2 = self.get_dm_corr_energy_e2(dm2=dm2, t_as_lambda=t_as_lambda) + e_corr = (e1 + e2) + self.log.debug("Ecorr(1)= %s Ecorr(2)= %s Ecorr= %s", *map(energy_string, (e1, e2, e_corr))) + return e_corr
+ +
[docs] def get_dm_corr_energy_e1(self, dm1='global-wf', t_as_lambda=None, with_exxdiv=None): + # Correlation energy due to changes in 1-DM and non-cumulant 2-DM: + if dm1 == 'global-wf': + dm1 = self._make_rdm1_ccsd_global_wf(with_mf=False, t_as_lambda=t_as_lambda, ao_basis=True) + elif dm1 == '2p1l': + dm1 = self._make_rdm1_ccsd(with_mf=False, t_as_lambda=t_as_lambda, ao_basis=True) + elif dm1 == '1p1l': + dm1 = self._make_rdm1_ccsd_1p1l(with_mf=False, t_as_lambda=t_as_lambda, ao_basis=True) + else: + raise ValueError + + if with_exxdiv is None: + if self.has_exxdiv: + with_exxdiv = np.all([x.solver == 'MP2' for x in self.fragments]) + any_mp2 = np.any([x.solver == 'MP2' for x in self.fragments]) + any_not_mp2 = np.any([x.solver != 'MP2' for x in self.fragments]) + if (any_mp2 and any_not_mp2): + self.log.warning("Both MP2 and not MP2 solvers detected - unclear usage of exxdiv!") + else: + with_exxdiv = False + + fock = self.get_fock_for_energy(with_exxdiv=with_exxdiv) + e1 = np.sum(fock*dm1) + return e1/self.ncells
+ +
[docs] @mpi.with_allreduce() + def get_dm_corr_energy_e2(self, dm2='projected-lambda', t_as_lambda=None): + """Correlation energy due to cumulant""" + if t_as_lambda is None: + t_as_lambda = self.opts.t_as_lambda + if dm2 == 'global-wf': + dm2 = self._make_rdm2_ccsd_global_wf(t_as_lambda=t_as_lambda, with_dm1=False) + # TODO: AO basis, late DF contraction + if self.spinsym == 'restricted': + g = self.get_eris_array(self.mo_coeff) + e2 = einsum('pqrs,pqrs', g, dm2)/2 + else: + dm2aa, dm2ab, dm2bb = dm2 + gaa, gab, gbb = self.get_eris_array_uhf(self.mo_coeff) + e2 = (einsum('pqrs,pqrs', gaa, dm2aa)/2 + + einsum('pqrs,pqrs', gbb, dm2bb)/2 + + einsum('pqrs,pqrs', gab, dm2ab)) + elif dm2 == 'projected-lambda': + e2 = 0.0 + for x in self.get_fragments(contributes=True, sym_parent=None, mpi_rank=mpi.rank): + ex = x.results.e_corr_dm2cumulant + if ex is None or (t_as_lambda is not None and (t_as_lambda != x.opts.t_as_lambda)): + ex = x.make_fragment_dm2cumulant_energy(t_as_lambda=t_as_lambda) + e2 += x.symmetry_factor * x.sym_factor * ex + else: + raise ValueError("Unknown value for dm2: '%s'" % dm2) + return e2/self.ncells
+ +
[docs] def get_ccsd_corr_energy(self, full_wf=False): + """Get projected correlation energy from partitioned CCSD WF. + + This is the projected (T1, T2) energy expression, instead of the + projected (C1, C2) expression used in PRX (the differences are very small). + + For testing only, UHF and MPI not implemented""" + t0 = timer() + t1 = self.get_global_t1() + + # E(singles) + fock = self.get_fock_for_energy(with_exxdiv=False) + fov = dot(self.mo_coeff_occ.T, fock, self.mo_coeff_vir) + e_singles = 2*np.sum(fov*t1) + + # E(doubles) + if full_wf: + c2 = (self.get_global_t2() + einsum('ia,jb->ijab', t1, t1)) + mos = (self.mo_coeff_occ, self.mo_coeff_vir, self.mo_coeff_vir, self.mo_coeff_occ) + eris = self.get_eris_array(mos) + e_doubles = (2*einsum('ijab,iabj', c2, eris) + - einsum('ijab,ibaj', c2, eris)) + else: + e_doubles = 0.0 + for x in self.get_fragments(contributes=True, sym_parent=None, mpi_rank=mpi.rank): + pwf = x.results.pwf.as_ccsd() + ro = x.get_overlap('mo-occ|cluster-occ') + rv = x.get_overlap('mo-vir|cluster-vir') + + t1x = dot(ro.T, t1, rv) # N(frag) * N^2 + c2x = pwf.t2 + einsum('ia,jb->ijab', pwf.t1, t1x) + + noccx = x.cluster.nocc_active + nvirx = x.cluster.nvir_active + + eris = x.hamil.get_eris_bare("ovvo") + + px = x.get_overlap('frag|cluster-occ') + eris = einsum('xi,iabj->xabj', px, eris) + wx = x.symmetry_factor * x.sym_factor + e_doubles += wx*(2*einsum('ijab,iabj', c2x, eris) + - einsum('ijab,ibaj', c2x, eris)) + if mpi: + e_doubles = mpi.world.allreduce(e_doubles) + + self.log.timing("Time for E(CCSD)= %s", time_string(timer()-t0)) + e_corr = (e_singles + e_doubles) + return e_corr / self.ncells
+ + # Total energy + + @property + def e_tot(self): + """Total energy.""" + return self.e_mf + self.e_corr + +
[docs] def get_wf_energy(self, *args, **kwargs): + e_corr = self.get_wf_corr_energy(*args, **kwargs) + return self.e_mf + e_corr
+ +
[docs] def get_proj_energy(self, *args, **kwargs): + """TODO: deprecate in favor of get_wf_energy.""" + return self.get_wf_energy(*args, **kwargs)
+ +
[docs] def get_dm_energy(self, *args, **kwargs): + e_corr = self.get_dm_corr_energy(*args, **kwargs) + return self.e_mf + e_corr
+ +
[docs] def get_ccsd_energy(self, full_wf=False): + return self.e_mf + self.get_ccsd_corr_energy(full_wf=full_wf)
+ + # --- Energy corrections + +
[docs] @mpi.with_allreduce() + @log_method() + def get_fbc_energy(self, occupied=True, virtual=True): + """Get finite-bath correction (FBC) energy. + + This correction consists of two independent contributions, one due to the finite occupied, + and one due to the finite virtual space. + + The virtual correction for a given fragment x is calculated as + "E(MP2)[occ=D,vir=F] - E(MP2)[occ=D,vir=C]", where D is the DMET cluster space, + F is the full space, and C is the full cluster space. For the occupied correction, + occ and vir spaces are swapped. Fragments which do not have a BNO bath are skipped. + + Parameters + ---------- + occupied: bool, optional + If True, the FBC energy from the occupied space is included. Default: True. + virtual: bool, optional + If True, the FBC energy from the virtual space is included. Default: True. + + Returns + ------- + e_fbc: float + Finite bath correction (FBC) energy. + """ + if not (occupied or virtual): + raise ValueError + + e_fbc = 0.0 + # Only loop over fragments of own MPI rank + for fx in self.get_fragments(contributes=True, sym_parent=None, flags=dict(is_envelop=True), mpi_rank=mpi.rank): + ex = 0 + if occupied: + get_fbc = getattr(fx._bath_factory_occ, 'get_finite_bath_correction', False) + if get_fbc: + ex += get_fbc(fx.cluster.c_active_occ, fx.cluster.c_frozen_occ) + else: + self.log.warning("%s does not have occupied BNOs - skipping fragment for FBC energy.", fx) + if virtual: + get_fbc = getattr(fx._bath_factory_vir, 'get_finite_bath_correction', False) + if get_fbc: + ex += get_fbc(fx.cluster.c_active_vir, fx.cluster.c_frozen_vir) + else: + self.log.warning("%s does not have virtual BNOs - skipping fragment for FBC energy.", fx) + self.log.debug("FBC from %-30s dE= %s", fx, energy_string(ex)) + e_fbc += fx.symmetry_factor * ex + e_fbc /= self.ncells + self.log.debug("E(FBC)= %s", energy_string(e_fbc)) + return e_fbc
+ +
[docs] @log_method() + def get_intercluster_mp2_energy(self, *args, **kwargs): + return get_intercluster_mp2_energy_rhf(self, *args, **kwargs)
+ + # --- Deprecated + + @deprecated(replacement='_get_atom_projectors') + def _get_atomic_coeffs(self, atoms=None, projection='sao'): + if atoms is None: + atoms = list(range(self.mol.natm)) + natom = len(atoms) + projection = projection.lower() + if projection == 'sao': + frag = SAO_Fragmentation(self) + elif projection.replace('+', '').replace('/', '') == 'iaopao': + frag = IAOPAO_Fragmentation(self) + else: + raise ValueError("Invalid projection: %s" % projection) + frag.kernel() + c_atom = [] + for atom in atoms: + name, indices = frag.get_atomic_fragment_indices(atom) + c_atom.append(frag.get_frag_coeff(indices)) + return c_atom + +
[docs] @deprecated(replacement='get_corrfunc_mf') + def get_atomic_ssz_mf(self, dm1=None, atoms=None, projection='sao'): + return self.get_corrfunc_mf('Sz,Sz', dm1=dm1, atoms=atoms, projection=projection)
+ +
[docs] @deprecated(replacement='get_corrfunc') + def get_atomic_ssz(self, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None): + return self.get_corrfunc('Sz,Sz', dm1=dm1, dm2=dm2, atoms=atoms, projection=projection, dm2_with_dm1=dm2_with_dm1)
+ + def _get_dm_energy_old(self, global_dm1=True, global_dm2=False): + """Calculate total energy from reduced density-matrices. + + RHF ONLY! + + Parameters + ---------- + global_dm1 : bool + Use 1DM calculated from global amplitutes if True, otherwise use in cluster approximation. Default: True + global_dm2 : bool + Use 2DM calculated from global amplitutes if True, otherwise use in cluster approximation. Default: False + + Returns + ------- + e_tot : float + """ + return self.e_mf + self._get_dm_corr_energy_old(global_dm1=global_dm1, global_dm2=global_dm2) + + def _get_dm_corr_energy_old(self, global_dm1=True, global_dm2=False): + """Calculate correlation energy from reduced density-matrices. + + RHF ONLY! + + Parameters + ---------- + global_dm1 : bool + Use 1DM calculated from global amplitutes if True, otherwise use in cluster approximation. Default: True + global_dm2 : bool + Use 2DM calculated from global amplitutes if True, otherwise use in cluster approximation. Default: False + + Returns + ------- + e_corr : float + """ + t_as_lambda = self.opts.t_as_lambda + + if global_dm1: + dm1 = self._make_rdm1_ccsd_global_wf(t_as_lambda=t_as_lambda, ao_basis=True, with_mf=False) + else: + dm1 = self._make_rdm1_ccsd(t_as_lambda=t_as_lambda, ao_basis=True, with_mf=False) + + # Core Hamiltonian + Non Cumulant 2DM contribution + e1 = np.sum(self.get_fock_for_energy(with_exxdiv=False) * dm1) + + # Cumulant 2DM contribution + if global_dm2: + # Calculate global 2RDM and contract with ERIs + rdm2 = self._make_rdm2_ccsd_global_wf(t_as_lambda=t_as_lambda, with_dm1=False) + eris = self.get_eris_array(self.mo_coeff) + e2 = einsum('pqrs,pqrs', eris, rdm2)/2 + else: + # Fragment Local 2DM cumulant contribution + e2 = self.get_dm_corr_energy_e2(t_as_lambda=t_as_lambda) * self.ncells + e_corr = (e1 + e2) / self.ncells + return e_corr + + # --- Debugging + + def _debug_get_wf(self, kind): + if kind == 'random': + return + if kind == 'exact': + if self.solver == 'CCSD': + import pyscf + import pyscf.cc + from vayesta.core.types import WaveFunction + cc = pyscf.cc.CCSD(self.mf) + cc.kernel() + if self.opts.solver_options['solve_lambda']: + cc.solve_lambda() + wf = WaveFunction.from_pyscf(cc) + else: + raise NotImplementedError + else: + wf = self.opts._debug_wf + self._debug_wf = wf
+ + # -------------------------------------------------------------------------------------------- # + + + # TODO: Reimplement PMO + #def make_atom_fragment(self, atoms, name=None, check_atoms=True, **kwargs): + # """ + # Parameters + # --------- + # atoms : list of int/str or int/str + # Atom labels of atoms in fragment. + # name : str + # Name of fragment. + # """ + # # Atoms may be a single atom index/label + # #if not isinstance(atoms, (tuple, list, np.ndarray)): + # if np.isscalar(atoms): + # atoms = [atoms] + + # # Check if atoms are valid labels of molecule + # atom_labels_mol = [self.mol.atom_symbol(atomid) for atomid in range(self.mol.natm)] + # if isinstance(atoms[0], str) and check_atoms: + # for atom in atoms: + # if atom not in atom_labels_mol: + # raise ValueError("Atom with label %s not in molecule." % atom) + + # # Get atom indices/labels + # if isinstance(atoms[0], (int, np.integer)): + # atom_indices = atoms + # atom_labels = [self.mol.atom_symbol(i) for i in atoms] + # else: + # atom_indices = np.nonzero(np.isin(atom_labels_mol, atoms))[0] + # atom_labels = atoms + # assert len(atom_indices) == len(atom_labels) + + # # Generate cluster name if not given + # if name is None: + # name = ",".join(atom_labels) + + # # Indices refers to AOs or IAOs, respectively + + # # Non-orthogonal AOs + # if self.opts.fragment_type == "AO": + # # Base atom for each AO + # ao_atoms = np.asarray([ao[1] for ao in self.mol.ao_labels(None)]) + # indices = np.nonzero(np.isin(ao_atoms, atoms))[0] + # C_local, C_env = self.make_local_ao_orbitals(indices) + + # # Lowdin orthonalized AOs + # elif self.opts.fragment_type == "LAO": + # lao_atoms = [lao[1] for lao in self.lao_labels] + # indices = np.nonzero(np.isin(lao_atoms, atom_labels))[0] + # C_local, C_env = self.make_local_lao_orbitals(indices) + + # # Orthogonal intrinsic AOs + # elif self.opts.fragment_type == "IAO": + # iao_atoms = [iao[0] for iao in self.iao_labels] + # iao_indices = np.nonzero(np.isin(iao_atoms, atom_indices))[0] + # C_local, C_env = self.make_local_iao_orbitals(iao_indices) + + # # Non-orthogonal intrinsic AOs + # elif self.opts.fragment_type == "NonOrth-IAO": + # ao_atoms = np.asarray([ao[1] for ao in self.mol.ao_labels(None)]) + # indices = np.nonzero(np.isin(ao_atoms, atom_labels))[0] + # C_local, C_env = self.make_local_nonorth_iao_orbitals(indices, minao=self.opts.iao_minao) + + # # Projected molecular orbitals + # # (AVAS paper) + # elif self.opts.fragment_type == "PMO": + # #ao_atoms = np.asarray([ao[1] for ao in self.mol.ao_labels(None)]) + # #indices = np.nonzero(np.isin(ao_atoms, atoms))[0] + + # # Use atom labels as AO labels + # self.log.debug("Making occupied projector.") + # Po = self.get_ao_projector(atom_labels, basis=kwargs.pop("basis_proj_occ", None)) + # self.log.debug("Making virtual projector.") + # Pv = self.get_ao_projector(atom_labels, basis=kwargs.pop("basis_proj_vir", None)) + # self.log.debug("Done.") + + # o = (self.mo_occ > 0) + # v = (self.mo_occ == 0) + # C = self.mo_coeff + # So = np.linalg.multi_dot((C[:,o].T, Po, C[:,o])) + # Sv = np.linalg.multi_dot((C[:,v].T, Pv, C[:,v])) + # eo, Vo = np.linalg.eigh(So) + # ev, Vv = np.linalg.eigh(Sv) + # rev = np.s_[::-1] + # eo, Vo = eo[rev], Vo[:,rev] + # ev, Vv = ev[rev], Vv[:,rev] + # self.log.debug("Non-zero occupied eigenvalues:\n%r", eo[eo>1e-10]) + # self.log.debug("Non-zero virtual eigenvalues:\n%r", ev[ev>1e-10]) + # #tol = 1e-8 + # tol = 0.1 + # lo = eo > tol + # lv = ev > tol + # Co = np.dot(C[:,o], Vo) + # Cv = np.dot(C[:,v], Vv) + # C_local = np.hstack((Co[:,lo], Cv[:,lv])) + # C_env = np.hstack((Co[:,~lo], Cv[:,~lv])) + # self.log.debug("Number of local orbitals: %d", C_local.shape[-1]) + # self.log.debug("Number of environment orbitals: %d", C_env.shape[-1]) + + # frag = self.make_fragment(name, C_local, C_env, atoms=atom_indices, **kwargs) + + # # TEMP + # #ao_indices = get_ao_indices_at_atoms(self.mol, atomids) + # ao_indices = helper.atom_labels_to_ao_indices(self.mol, atom_labels) + # frag.ao_indices = ao_indices + + # return frag + + #def collect_results(self, *attributes): + # """Use MPI to collect results from all fragments.""" + + # #self.log.debug("Collecting attributes %r from all clusters", (attributes,)) + # fragments = self.fragments + + # if mpi: + # def reduce_fragment(attr, op=mpi.MPI.SUM, root=0): + # res = mpi.world.reduce(np.asarray([getattr(f, attr) for f in fragments]), op=op, root=root) + # return res + # else: + # def reduce_fragment(attr): + # res = np.asarray([getattr(f, attr) for f in fragments]) + # return res + + # results = {} + # for attr in attributes: + # results[attr] = reduce_fragment(attr) + + # return results + + +REWF = EWF +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/ewf/fragment.html b/_modules/vayesta/ewf/fragment.html new file mode 100644 index 000000000..bfbcbbc8c --- /dev/null +++ b/_modules/vayesta/ewf/fragment.html @@ -0,0 +1,709 @@ + + + + + + vayesta.ewf.fragment — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.ewf.fragment

+# Standard libaries
+import dataclasses
+import typing
+from typing import Optional, List
+
+# External libaries
+import numpy as np
+
+# Internal libaries
+import pyscf
+import pyscf.cc
+
+# Local modules
+import vayesta
+from vayesta.core.util import deprecated, dot, einsum, energy_string, getattr_recursive, hstack, log_method, log_time
+from vayesta.core.qemb import Fragment as BaseFragment
+from vayesta.core.fragmentation import IAO_Fragmentation
+from vayesta.core.types import RFCI_WaveFunction, RCCSDTQ_WaveFunction, UCCSDTQ_WaveFunction
+from vayesta.core.bath import DMET_Bath
+from vayesta.mpi import mpi
+
+from vayesta.ewf import ewf
+
+
+# Get MPI rank of fragment
+get_fragment_mpi_rank = lambda *args : args[0].mpi_rank
+
+
+
[docs]@dataclasses.dataclass +class Options(BaseFragment.Options): + # Inherited from Embedding + # ------------------------ + t_as_lambda: bool = None # If True, use T-amplitudes inplace of Lambda-amplitudes + bsse_correction: bool = None + bsse_rmax: float = None + sc_mode: int = None + nelectron_target: float = None # If set, adjust bath chemical potential until electron number in fragment equals nelectron_target + nelectron_target_atol: float = 1e-6 + nelectron_target_rtol: float = 1e-6 + # Calculation modes + calc_e_wf_corr: bool = None + calc_e_dm_corr: bool = None + store_wf_type: str = None # If set, fragment WFs will be converted to the respective type, before storing them + # Fragment specific + # ----------------- + wf_factor: Optional[int] = None + # TODO: move these: + # CAS methods + c_cas_occ: np.ndarray = None + c_cas_vir: np.ndarray = None + # --- Solver options + # "TCCSD-solver": + tcc_fci_opts: dict = dataclasses.field(default_factory=dict)
+ # --- Couple embedding problems (currently only CCSD and MPI) + # coupled_iterations: bool = None # Now accessible through solver=coupledCCSD setting. + +
[docs]class Fragment(BaseFragment): + + Options = Options + +
[docs] @dataclasses.dataclass + class Flags(BaseFragment.Flags): + # Tailoring and external correction of CCSD + external_corrections: Optional[List[typing.Any]] = dataclasses.field(default_factory=list) + # Whether to perform additional checks on external corrections + test_extcorr: bool = False
+ + +
[docs] @dataclasses.dataclass + class Results(BaseFragment.Results): + e_corr_dm2cumulant: float = None + n_active: int = None + ip_energy: np.ndarray = None + ea_energy: np.ndarray = None + + @property + def dm1(self): + """Cluster 1DM""" + return self.wf.make_rdm1() + + @property + def dm2(self): + """Cluster 2DM""" + return self.wf.make_rdm2()
+ + def __init__(self, *args, **kwargs): + + """ + Parameters + ---------- + base : EWF + Base EWF object. + fid : int + Unique ID of fragment. + name : + Name of fragment. + """ + super().__init__(*args, **kwargs) + # For self-consistent mode + self.solver_results = None + +
[docs] def set_cas(self, iaos=None, c_occ=None, c_vir=None, minao='auto', dmet_threshold=None): + """Set complete active space for tailored CCSD""" + if dmet_threshold is None: + dmet_threshold = 2*self.opts.bath_options['dmet_threshold'] + if iaos is not None: + # Create new IAO fragmentation + frag = IAO_Fragmentation(self.base, minao=minao) + frag.kernel() + # Get IAO and environment coefficients from fragmentation + indices = frag.get_orbital_fragment_indices(iaos)[1] + c_iao = frag.get_frag_coeff(indices) + c_env = frag.get_env_coeff(indices) + bath = DMET_Bath(self, dmet_threshold=dmet_threshold) + c_dmet = bath.make_dmet_bath(c_env)[0] + c_iao_occ, c_iao_vir = self.diagonalize_cluster_dm(c_iao, c_dmet, tol=2*dmet_threshold) + else: + c_iao_occ = c_iao_vir = None + + c_cas_occ = hstack(c_occ, c_iao_occ) + c_cas_vir = hstack(c_vir, c_iao_vir) + self.opts.c_cas_occ = c_cas_occ + self.opts.c_cas_vir = c_cas_vir + return c_cas_occ, c_cas_vir
+ +
[docs] @deprecated(replacement='add_external_corrections') + def tailor_with_fragments(self, fragments, projectors=1): + return self.add_external_corrections(fragments, projectors=projectors)
+ +
[docs] def add_external_corrections(self, fragments, correction_type='tailor', projectors=1, test_extcorr=False, low_level_coul=True): + """Add tailoring or external correction from other fragment solutions to CCSD solver. + + Parameters + ---------- + fragments: list + List of solved or auxiliary fragments, used for the correction. + correction_type: str, optional + Type of correction: + 'tailor': replace CCSD T1 and T2 amplitudes with FCI amplitudes. + 'delta-tailor': Add the difference of FCI and CCSD T1 and T2 amplitudes + 'external': externally correct CCSD T1 and T2 amplitudes from FCI T3 and T4 amplitudes. + Default: 'tailor'. + projectors: int, optional + Maximum number of projections applied to the occupied dimensions of the amplitude corrections. + Default: 1. + test_extcorr: bool, optional + Whether to perform additional checks on the external corrections. + low_level_coul: bool, optional + This is an option specific to the 'external' correction. + If True, then the T3V term is contracted with integrals spanning the 'low-level' (i.e. CCSD) solver, i.e. the cluster being constrained. + If False, then the T3V term is contracted with the integrals in the 'high-level' (i.e. FCI) solver, i.e. the cluster providing the constraints. + In general, there should be a slight speed increase, and slight loss of accuracy for the low_level_coul=False option, but in practice, we find only + minor differences. + Default: True + """ + if correction_type not in ('tailor', 'delta-tailor', 'external'): + raise ValueError + if self.solver == "CCSD": + # Automatically update this cluster to use external correction solver. + self.solver = "extCCSD" + self.check_solver(self.solver) + if self.solver != 'extCCSD': + raise RuntimeError + if (not low_level_coul) and correction_type != 'external': + raise ValueError("low_level_coul optional argument only meaningful with 'external' correction of fragments.") + if np.any([(getattr_recursive(f, 'results.wf', None) is None and not f.opts.auxiliary) for f in fragments]): + raise ValueError("Fragments for external correction need to be already solved or defined as auxiliary fragments.") + self.flags.external_corrections.extend( + [(f.id, correction_type, projectors, low_level_coul) for f in fragments]) + self.flags.test_extcorr = test_extcorr
+ +
[docs] def clear_external_corrections(self): + """Remove all tailoring or external correction which were added via add_external_corrections.""" + self.flags.external_corrections = [] + self.flags.test_extcorr = False
+ +
[docs] def get_init_guess(self, init_guess, solver, cluster): + # FIXME + return {}
+ # --- Project initial guess and integrals from previous cluster calculation with smaller eta: + # Use initial guess from previous calculations + # For self-consistent calculations, we can restart calculation: + #if init_guess is None and 'ccsd' in solver.lower(): + # if self.base.opts.sc_mode and self.base.iteration > 1: + # self.log.debugv("Restarting using T1,T2 from previous iteration") + # init_guess = {'t1' : self.results.t1, 't2' : self.results.t2} + # elif self.base.opts.project_init_guess and self.results.t2 is not None: + # self.log.debugv("Restarting using projected previous T1,T2") + # # Projectors for occupied and virtual orbitals + # p_occ = dot(self.c_active_occ.T, self.base.get_ovlp(), cluster.c_active_occ) + # p_vir = dot(self.c_active_vir.T, self.base.get_ovlp(), cluster.c_active_vir) + # #t1, t2 = init_guess.pop('t1'), init_guess.pop('t2') + # t1, t2 = helper.transform_amplitudes(self.results.t1, self.results.t2, p_occ, p_vir) + # init_guess = {'t1' : t1, 't2' : t2} + #if init_guess is None: init_guess = {} + #return init_guess + + #def kernel(self, bno_threshold=None, bno_threshold_occ=None, bno_threshold_vir=None, solver=None, init_guess=None, eris=None): + #"""Run solver for a single BNO threshold. + + #Parameters + #---------- + #bno_threshold : float, optional + # Bath natural orbital (BNO) threshold. + #solver : {'MP2', 'CISD', 'CCSD', 'FCI'}, optional + # Correlated solver. + + #Returns + #------- + #results : self.Results + #""" + #if bno_threshold is None: + # bno_threshold = self.opts.bno_threshold + #if bno_threshold_occ is None: + # bno_threshold_occ = self.opts.bno_threshold_occ + #if bno_threshold_vir is None: + # bno_threshold_vir = self.opts.bno_threshold_vir + + #bno_threshold = BNO_Threshold(self.opts.bno_truncation, bno_threshold) + + #if bno_threshold_occ is not None: + # bno_threshold_occ = BNO_Threshold(self.opts.bno_truncation, bno_threshold_occ) + #if bno_threshold_vir is not None: + # bno_threshold_vir = BNO_Threshold(self.opts.bno_truncation, bno_threshold_vir) + + #if solver is None: + # solver = self.solver + #if self.bath is None: + # self.make_bath() + + #cluster = self.make_cluster(self.bath, bno_threshold=bno_threshold, + # bno_threshold_occ=bno_threshold_occ, bno_threshold_vir=bno_threshold_vir) + #cluster.log_sizes(self.log.info, header="Orbitals for %s with %s" % (self, bno_threshold)) + + #if mpi: + # self.base.communicate_clusters() + +
[docs] def kernel(self, solver=None, init_guess=None): + + solver = solver or self.solver + self.check_solver(solver) + if self.cluster is None: + raise RuntimeError + cluster = self.cluster + + if solver == 'HF': + return None + + init_guess = self.get_init_guess(init_guess, solver, cluster) + + # Create solver object + cluster_solver = self.get_solver(solver) + + # --- Chemical potential + cpt_frag = self.base.opts.global_frag_chempot + if self.opts.nelectron_target is not None: + cluster_solver.optimize_cpt(self.opts.nelectron_target, c_frag=self.c_proj, atol=self.opts.nelectron_target_atol, + rtol=self.opts.nelectron_target_rtol) + elif cpt_frag: + # Add chemical potential to fragment space + r = self.get_overlap('cluster|frag') + if self.base.is_rhf: + p_frag = np.dot(r, r.T) + cluster_solver.v_ext = cpt_frag * p_frag + else: + p_frag = (np.dot(r[0], r[0].T), np.dot(r[1], r[1].T)) + cluster_solver.v_ext = (cpt_frag * p_frag[0], cpt_frag * p_frag[1]) + + # --- Coupled fragments. + # TODO rework this functionality to combine with external corrections/tailoring. + if solver == 'coupledCCSD': + if not mpi: + raise RuntimeError("coupled_iterations requires MPI.") + if len(self.base.fragments) != len(mpi): + raise RuntimeError("coupled_iterations requires as many MPI processes as there are fragments.") + cluster_solver.set_coupled_fragments(self.base.fragments) + + # Normal solver + if not self.base.opts._debug_wf: + with log_time(self.log.info, ("Time for %s solver:" % solver) + " %s"): + cluster_solver.kernel() + # Special debug "solver" + else: + if self.base.opts._debug_wf == 'random': + cluster_solver._debug_random_wf() + else: + cluster_solver._debug_exact_wf(self.base._debug_wf) + + if solver.lower() == 'dump': + return + + wf = cluster_solver.wf + # Multiply WF by factor [optional] + if self.opts.wf_factor is not None: + wf.multiply(self.opts.wf_factor) + # Convert WF to different type [optional] + if self.opts.store_wf_type is not None: + wf = getattr(wf, 'as_%s' % self.opts.store_wf_type.lower())() + # ---Make T-projected WF + pwf = wf + # Projection of FCI wave function is not implemented - convert to CISD + if isinstance(wf, RFCI_WaveFunction): + pwf = wf.as_cisd() + # Projection of CCSDTQ wave function is not implemented - convert to CCSD + elif isinstance(wf, (RCCSDTQ_WaveFunction, UCCSDTQ_WaveFunction)): + pwf = wf.as_ccsd() + proj = self.get_overlap('proj|cluster-occ') + pwf = pwf.project(proj, inplace=False) + + # --- Add to results data class + self._results = results = self.Results(fid=self.id, n_active=cluster.norb_active, + converged=cluster_solver.converged, wf=wf, pwf=pwf) + + self.hamil = cluster_solver.hamil + + # --- Correlation energy contributions + if self.opts.calc_e_wf_corr: + ci = wf.as_cisd(c0=1.0) + ci = ci.project(proj) + es, ed, results.e_corr = self.get_fragment_energy(ci.c1, ci.c2, hamil=self.hamil) + self.log.debug("E(S)= %s E(D)= %s E(tot)= %s", energy_string(es), energy_string(ed), + energy_string(results.e_corr)) + if self.opts.calc_e_dm_corr: + results.e_corr_dm2cumulant = self.make_fragment_dm2cumulant_energy(hamil=self.hamil) + return results
+ +
[docs] def get_solver_options(self, solver): + # TODO: fix this mess... + # Use those values from solver_options, which are not None + # (conv_tol, max_cycle, solve_lambda,...) + solver_opts = {key: val for (key, val) in self.opts.solver_options.items() if val is not None} + pass_through = [] + if 'CCSD' in solver.upper(): + pass_through += ['sc_mode', 'dm_with_frozen'] + for attr in pass_through: + self.log.debugv("Passing fragment option %s to solver.", attr) + solver_opts[attr] = getattr(self.opts, attr) + + if solver.upper() == 'TCCSD': + solver_opts['tcc'] = True + # Set CAS orbitals + if self.opts.c_cas_occ is None: + self.log.warning("Occupied CAS orbitals not set. Setting to occupied DMET cluster orbitals.") + self.opts.c_cas_occ = self._dmet_bath.c_cluster_occ + if self.opts.c_cas_vir is None: + self.log.warning("Virtual CAS orbitals not set. Setting to virtual DMET cluster orbitals.") + self.opts.c_cas_vir = self._dmet_bath.c_cluster_vir + solver_opts['c_cas_occ'] = self.opts.c_cas_occ + solver_opts['c_cas_vir'] = self.opts.c_cas_vir + solver_opts['tcc_fci_opts'] = self.opts.tcc_fci_opts + elif solver.upper() == 'DUMP': + solver_opts['filename'] = self.opts.solver_options['dumpfile'] + solver_opts['external_corrections'] = self.flags.external_corrections + solver_opts['test_extcorr'] = self.flags.test_extcorr + return solver_opts
+ + # --- Expectation values + # ---------------------- + + # --- Energies + +
[docs] def get_fragment_energy(self, c1, c2, hamil=None, fock=None, c2ba_order='ba', axis1='fragment'): + """Calculate fragment correlation energy contribution from projected C1, C2. + + Parameters + ---------- + c1 : (n(occ-CO), n(vir-CO)) array + Fragment projected C1-amplitudes. + c2 : (n(occ-CO), n(occ-CO), n(vir-CO), n(vir-CO)) array + Fragment projected C2-amplitudes. + hamil : ClusterHamiltonian object. + Object representing cluster hamiltonian, possibly including cached ERIs. + fock : (n(AO), n(AO)) array, optional + Fock matrix in AO representation. If None, self.base.get_fock_for_energy() + is used. Default: None. + + Returns + ------- + e_singles : float + Fragment correlation energy contribution from single excitations. + e_doubles : float + Fragment correlation energy contribution from double excitations. + e_corr : float + Total fragment correlation energy contribution. + """ + if axis1 == 'fragment': + px = self.get_overlap('proj|cluster-occ') + + # --- Singles energy (zero for HF-reference) + if c1 is not None: + if fock is None: + fock = self.base.get_fock_for_energy() + fov = dot(self.cluster.c_active_occ.T, fock, self.cluster.c_active_vir) + if axis1 == 'fragment': + e_singles = 2*einsum('ia,xi,xa->', fov, px, c1) + else: + e_singles = 2*np.sum(fov*c1) + else: + e_singles = 0 + # --- Doubles energy + if hamil is None: + hamil = self.hamil + # This automatically either slices a stored ERI tensor or calculates it on the fly. + g_ovvo = hamil.get_eris_bare(block="ovvo") + + if axis1 == 'fragment': + e_doubles = (2*einsum('xi,xjab,iabj', px, c2, g_ovvo) + - einsum('xi,xjab,ibaj', px, c2, g_ovvo)) + else: + e_doubles = (2*einsum('ijab,iabj', c2, g_ovvo) + - einsum('ijab,ibaj', c2, g_ovvo)) + + e_singles = (self.sym_factor * e_singles) + e_doubles = (self.sym_factor * e_doubles) + e_corr = (e_singles + e_doubles) + return e_singles, e_doubles, e_corr
+ + + # --- Density-matrices + + def _ccsd_amplitudes_for_dm(self, t_as_lambda=False, sym_t2=True): + wf = self.results.wf.as_ccsd() + t1, t2 = wf.t1, wf.t2 + pwf = self.results.pwf.restore(sym=sym_t2).as_ccsd() + t1x, t2x = pwf.t1, pwf.t2 + # Lambda amplitudes + if t_as_lambda: + l1, l2 = t1, t2 + l1x, l2x = t1x, t2x + else: + l1, l2 = wf.l1, wf.l2 + l1x, l2x = pwf.l1, pwf.l2 + return t1, t2, l1, l2, t1x, t2x, l1x, l2x + + def _get_projected_gamma1_intermediates(self, t_as_lambda=False, sym_t2=True): + """Intermediates for 1-DM, projected in Lambda-amplitudes and linear T-term.""" + t1, t2, l1, l2, t1x, t2x, l1x, l2x = self._ccsd_amplitudes_for_dm(t_as_lambda=t_as_lambda, sym_t2=sym_t2) + doo, dov, dvo, dvv = pyscf.cc.ccsd_rdm._gamma1_intermediates(None, t1, t2, l1x, l2x) + # Correction for term without Lambda amplitude: + dvo += (t1x - t1).T + d1 = (doo, dov, dvo, dvv) + return d1 + + def _get_projected_gamma2_intermediates(self, t_as_lambda=False, sym_t2=True): + """Intermediates for 2-DM, projected in Lambda-amplitudes and linear T-term.""" + t1, t2, l1, l2, t1x, t2x, l1x, l2x = self._ccsd_amplitudes_for_dm(t_as_lambda=t_as_lambda, sym_t2=sym_t2) + cc = self.mf # Only attributes stdout, verbose, and max_memory are needed, just use mean-field object + dovov, *d2rest = pyscf.cc.ccsd_rdm._gamma2_intermediates(cc, t1, t2, l1x, l2x) + # Correct D2[ovov] part (first element of d2 tuple) + dtau = ((t2x-t2) + einsum('ia,jb->ijab', (t1x-t1), t1)) + dovov += dtau.transpose(0,2,1,3) + dovov -= dtau.transpose(0,3,1,2)/2 + d2 = (dovov, *d2rest) + return d2 + +
[docs] def make_fragment_dm1(self, t_as_lambda=False, sym_t2=True): + """Currently CCSD only. + + Without mean-field contribution!""" + d1 = self._get_projected_gamma1_intermediates(t_as_lambda=t_as_lambda, sym_t2=sym_t2) + dm1 = pyscf.cc.ccsd_rdm._make_rdm1(None, d1, with_frozen=False, with_mf=False) + return dm1
+ +
[docs] def make_fragment_dm2cumulant(self, t_as_lambda=False, sym_t2=True, sym_dm2=True, full_shape=True, + approx_cumulant=True): + """Currently MP2/CCSD only""" + + if self.solver == 'MP2': + if approx_cumulant not in (1, True): + raise NotImplementedError + t2x = self.results.pwf.restore(sym=sym_t2).as_ccsd().t2 + dovov = 2*(2*t2x - t2x.transpose(0,1,3,2)).transpose(0,2,1,3) + if not full_shape: + return dovov + nocc, nvir = dovov.shape[:2] + norb = nocc+nvir + dm2 = np.zeros(4*[norb]) + occ, vir = np.s_[:nocc], np.s_[nocc:] + dm2[occ,vir,occ,vir] = dovov + dm2[vir,occ,vir,occ] = dovov.transpose(1,0,3,2) + return dm2 + + cc = d1 = None + d2 = self._get_projected_gamma2_intermediates(t_as_lambda=t_as_lambda, sym_t2=sym_t2) + dm2 = pyscf.cc.ccsd_rdm._make_rdm2(cc, d1, d2, with_dm1=False, with_frozen=False) + if (approx_cumulant == 2): + raise NotImplementedError + elif (approx_cumulant in (1, True)): + pass + elif not approx_cumulant: + # Remove dm1(cc)^2 + dm1x = self.make_fragment_dm1(t_as_lambda=t_as_lambda, sym_t2=sym_t2) + dm1 = self.results.wf.make_rdm1(with_mf=False) + dm2 -= (einsum('ij,kl->ijkl', dm1, dm1x)/2 + einsum('ij,kl->ijkl', dm1x, dm1)/2 + - einsum('ij,kl->iklj', dm1, dm1x)/4 - einsum('ij,kl->iklj', dm1x, dm1)/4) + + if (sym_dm2 and not sym_t2): + dm2 = (dm2 + dm2.transpose(1,0,3,2) + dm2.transpose(2,3,0,1) + dm2.transpose(3,2,1,0))/4 + return dm2
+ + #def make_partial_dm1_energy(self, t_as_lambda=False): + # dm1 = self.make_partial_dm1(t_as_lambda=t_as_lambda) + # c_act = self.cluster.c_active + # fock = np.linalg.multi_dot((c_act.T, self.base.get_fock(), c_act)) + # e_dm1 = einsum('ij,ji->', fock, dm1) + # return e_dm1 + +
[docs] @log_method() + def make_fragment_dm2cumulant_energy(self, hamil=None, t_as_lambda=False, sym_t2=True, approx_cumulant=True): + if hamil is None: + hamil = self.hamil + + # This is a refactor of original functionality with three forks. + # - MP2 solver so dm2 cumulant is just ovov, and we just want to contract this. + # - CCSD solver so want to use approximate cumulant and can use optimal contraction of different ERI blocks + # making use of permutational symmetries. + # - All other solvers where we just use a dense eri contraction and may or may not use the approximate + # cumulant. + # With the new hamiltonian object we can always use the optimal contraction for the approximate cumulant, + # regardless of solver, and we support `approx_cumulant=False` for CCSD. + + if self.solver == "MP2": + # This is just ovov shape in this case. TODO neater way to handle this? + dm2 = self.make_fragment_dm2cumulant(t_as_lambda=t_as_lambda, sym_t2=sym_t2, + approx_cumulant=approx_cumulant, + full_shape=False) + return 2 * einsum('ijkl,ijkl->', hamil.get_eris_bare("ovov"), dm2)/2 + elif approx_cumulant: + # Working hypothesis: this branch will effectively always uses `approx_cumulant=True`. + eris = hamil.get_dummy_eri_object(force_bare=True, with_vext=False) + d2 = self._get_projected_gamma2_intermediates(t_as_lambda=t_as_lambda, sym_t2=sym_t2) + return vayesta.core.ao2mo.helper.contract_dm2intermeds_eris_rhf(d2, eris)/2 + else: + dm2 = self.make_fragment_dm2cumulant(t_as_lambda=t_as_lambda, sym_t2=sym_t2, + approx_cumulant=approx_cumulant, + full_shape=True) + e_dm2 = einsum('ijkl,ijkl->', hamil.get_eris_bare(), dm2)/2 + return e_dm2
+ + # --- Other + # --------- + +
[docs] def get_fragment_bsse(self, rmax=None, nimages=5, unit='A'): + self.log.info("Counterpoise Calculation") + self.log.info("************************") + if rmax is None: + rmax = self.opts.bsse_rmax + + # Atomic calculation with atomic basis functions: + #mol = self.mol.copy() + #atom = mol.atom[self.atoms] + #self.log.debugv("Keeping atoms %r", atom) + #mol.atom = atom + #mol.a = None + #mol.build(False, False) + + natom0, e_mf0, e_cm0, dm = self.counterpoise_calculation(rmax=0.0, nimages=0) + assert natom0 == len(self.atoms) + self.log.debugv("Counterpoise: E(atom)= % 16.8f Ha", e_cm0) + + #natom_list = [] + #e_mf_list = [] + #e_cm_list = [] + r_values = np.hstack((np.arange(1.0, int(rmax)+1, 1.0), rmax)) + #for r in r_values: + r = rmax + natom, e_mf, e_cm, dm = self.counterpoise_calculation(rmax=r, dm0=dm) + self.log.debugv("Counterpoise: n(atom)= %3d E(mf)= %16.8f Ha E(%s)= % 16.8f Ha", natom, e_mf, self.solver, e_cm) + + e_bsse = self.sym_factor*(e_cm - e_cm0) + self.log.debugv("Counterpoise: E(BSSE)= % 16.8f Ha", e_bsse) + return e_bsse
+ +
[docs] def counterpoise_calculation(self, rmax, dm0=None, nimages=5, unit='A'): + mol = self.make_counterpoise_mol(rmax, nimages=nimages, unit=unit, output='pyscf-cp.txt') + # Mean-field + #mf = type(self.mf)(mol) + mf = pyscf.scf.RHF(mol) + mf.conv_tol = self.mf.conv_tol + #if self.mf.with_df is not None: + # self.log.debugv("Setting GDF") + # self.log.debugv("%s", type(self.mf.with_df)) + # # ONLY GDF SO FAR! + # TODO: generalize + if self.base.kdf is not None: + auxbasis = self.base.kdf.auxbasis + elif self.mf.with_df is not None: + auxbasis = self.mf.with_df.auxbasis + else: + auxbasis=None + if auxbasis: + mf = mf.density_fit(auxbasis=auxbasis) + # TODO: + #use dm0 as starting point + mf.kernel() + dm0 = mf.make_rdm1() + # Embedded calculation with same options + ecc = ewf.EWF(mf, solver=self.solver, bno_threshold=self.bno_threshold, options=self.base.opts) + ecc.make_atom_cluster(self.atoms, options=self.opts) + ecc.kernel() + + return mol.natm, mf.e_tot, ecc.e_tot, dm0
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/ewf/helper.html b/_modules/vayesta/ewf/helper.html new file mode 100644 index 000000000..c7e6d7229 --- /dev/null +++ b/_modules/vayesta/ewf/helper.html @@ -0,0 +1,151 @@ + + + + + + vayesta.ewf.helper — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.ewf.helper

+import logging
+
+import numpy as np
+
+from vayesta.core.util import einsum
+
+log = logging.getLogger(__name__)
+
+
+
[docs]def orthogonalize_mo(c, s, tol=1e-6): + """Orthogonalize MOs, such that C^T S C = I (identity matrix). + + Parameters + ---------- + c : ndarray + MO orbital coefficients. + s : ndarray + AO overlap matrix. + tol : float, optional + Tolerance. + + Returns + ------- + c_out : ndarray + Orthogonalized MO coefficients. + """ + assert np.all(c.imag == 0) + assert np.allclose(s, s.T) + l = np.linalg.cholesky(s) + c2 = np.dot(l.T, c) + #chi = np.linalg.multi_dot((c.T, s, c)) + chi = np.dot(c2.T, c2) + chi = (chi + chi.T)/2 + e, v = np.linalg.eigh(chi) + assert np.all(e > 0) + r = einsum("ai,i,bi->ab", v, 1/np.sqrt(e), v) + c_out = np.dot(c, r) + chi_out = np.linalg.multi_dot((c_out.T, s, c_out)) + # Check orthogonality within tol + nonorth = abs(chi_out - np.eye(chi_out.shape[-1])).max() + if tol is not None and nonorth > tol: + log.error("Orbital non-orthogonality= %.1e", nonorth) + + return c_out
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/ewf/uewf.html b/_modules/vayesta/ewf/uewf.html new file mode 100644 index 000000000..f33f317cd --- /dev/null +++ b/_modules/vayesta/ewf/uewf.html @@ -0,0 +1,398 @@ + + + + + + vayesta.ewf.uewf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.ewf.uewf

+import numpy as np
+
+from vayesta.core.qemb import UEmbedding
+from vayesta.core.util import cache, deprecated, dot, einsum, log_method
+
+from vayesta.ewf import REWF
+from vayesta.ewf.ufragment import Fragment
+from vayesta.misc import corrfunc
+from vayesta.mpi import mpi
+
+# Amplitudes
+from vayesta.ewf.amplitudes import get_global_t1_uhf
+from vayesta.ewf.amplitudes import get_global_t2_uhf
+# Density-matrices
+from vayesta.ewf.urdm import make_rdm1_ccsd
+from vayesta.ewf.urdm import make_rdm1_ccsd_global_wf
+from vayesta.ewf.urdm import make_rdm2_ccsd_global_wf
+from vayesta.ewf.urdm import make_rdm2_ccsd_proj_lambda
+from vayesta.ewf.icmp2 import get_intercluster_mp2_energy_uhf
+
+
+
[docs]class UEWF(REWF, UEmbedding): + + Fragment = Fragment + + # --- CC Amplitudes + # ----------------- + + # T-amplitudes + get_global_t1 = get_global_t1_uhf + get_global_t2 = get_global_t2_uhf + +
[docs] def t1_diagnostic(self, warn_tol=0.02): + # Per cluster + for f in self.get_fragments(active=True, mpi_rank=mpi.rank): + t1 = f.results.wf.t1 + if t1 is None: + self.log.error("No T1 amplitudes found for %s.", f) + continue + nelec = t1[0].shape[0] + t1[1].shape[0] + t1diag = (np.linalg.norm(t1[0]) / np.sqrt(nelec), + np.linalg.norm(t1[1]) / np.sqrt(nelec)) + if max(t1diag) > warn_tol: + self.log.warning("T1 diagnostic for %-20s alpha= %.5f beta= %.5f", str(f)+':', *t1diag) + else: + self.log.info("T1 diagnostic for %-20s alpha= %.5f beta= %.5f", str(f)+':', *t1diag) + # Global + t1 = self.get_global_t1(mpi_target=0) + if mpi.is_master: + nelec = t1[0].shape[0] + t1[1].shape[0] + t1diag = (np.linalg.norm(t1[0]) / np.sqrt(nelec), + np.linalg.norm(t1[1]) / np.sqrt(nelec)) + if max(t1diag) > warn_tol: + self.log.warning("Global T1 diagnostic: alpha= %.5f beta= %.5f", *t1diag) + else: + self.log.info("Global T1 diagnostic: alpha= %.5f beta= %.5f", *t1diag)
+ +
[docs] def d1_diagnostic(self): + """Global wave function diagnostic.""" + t1a, t1b = self.get_global_t1() + f = lambda x: np.sqrt(np.sort(np.abs(x[0])))[-1] + d1ao = f(np.linalg.eigh(np.dot(t1a, t1a.T))) + d1av = f(np.linalg.eigh(np.dot(t1a.T, t1a))) + d1bo = f(np.linalg.eigh(np.dot(t1b, t1b.T))) + d1bv = f(np.linalg.eigh(np.dot(t1b.T, t1b))) + d1norm = max((d1ao, d1av, d1bo, d1bv)) + return d1norm
+ + # --- Density-matrices + # -------------------- + + # DM1 + + @log_method() + def _make_rdm1_mp2(self, *args, **kwargs): + return make_rdm1_ccsd(self, *args, mp2=True, **kwargs) + + @log_method() + def _make_rdm1_ccsd(self, *args, **kwargs): + return make_rdm1_ccsd(self, *args, mp2=False, **kwargs) + + @log_method() + def _make_rdm1_ccsd_global_wf(self, *args, ao_basis=False, with_mf=True, **kwargs): + dm1a, dm1b = self._make_rdm1_ccsd_global_wf_cached(*args, **kwargs) + if with_mf: + dm1a[np.diag_indices(self.nocc[0])] += 1 + dm1b[np.diag_indices(self.nocc[1])] += 1 + if ao_basis: + dm1a = dot(self.mo_coeff[0], dm1a, self.mo_coeff[0].T) + dm1b = dot(self.mo_coeff[1], dm1b, self.mo_coeff[1].T) + return (dm1a, dm1b) + + @cache(copy=True) + def _make_rdm1_ccsd_global_wf_cached(self, *args, **kwargs): + return make_rdm1_ccsd_global_wf(self, *args, **kwargs) + + @log_method() + def _make_rdm1_ccsd_proj_lambda(self, *args, **kwargs): + raise NotImplementedError() + + # DM2 + + @log_method() + def _make_rdm2_ccsd_global_wf(self, *args, **kwargs): + return make_rdm2_ccsd_global_wf(self, *args, **kwargs) + + @log_method() + def _make_rdm2_ccsd_proj_lambda(self, *args, **kwargs): + return make_rdm2_ccsd_proj_lambda(self, *args, **kwargs) + +
[docs] @log_method() + def get_intercluster_mp2_energy(self, *args, **kwargs): + return get_intercluster_mp2_energy_uhf(self, *args, **kwargs)
+ + # --- Other expectation values + +
[docs] @deprecated(replacement='get_corrfunc_mf') + def get_atomic_ssz_mf(self, dm1=None, atoms=None, projection='sao'): + """TODO: update similar to restricted code + dm1 in MO basis""" + if dm1 is None: + dm1a = np.zeros((self.nmo[0], self.nmo[0])) + dm1b = np.zeros((self.nmo[1], self.nmo[1])) + dm1a[np.diag_indices(self.nocc[0])] = 1 + dm1b[np.diag_indices(self.nocc[1])] = 1 + dm1 = (dm1a, dm1b) + c_atom = self._get_atomic_coeffs(atoms=atoms, projection=projection) + natom = len(c_atom) + ovlp = self.get_ovlp() + # Get projectors + proj = [] + for a in range(natom): + ra = dot(self.mo_coeff[0].T, ovlp, c_atom[a][0]) + rb = dot(self.mo_coeff[1].T, ovlp, c_atom[a][1]) + pa = np.dot(ra, ra.T) + pb = np.dot(rb, rb.T) + proj.append((pa, pb)) + ssz = np.zeros((natom, natom)) + for a in range(natom): + for b in range(natom): + ssz[a,b] = corrfunc.spinspin_z_unrestricted(dm1, None, proj1=proj[a], proj2=proj[b]) + return ssz
+ +
[docs] @log_method() + @deprecated(replacement='get_corrfunc') + def get_atomic_ssz(self, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None): + """Get expectation values <P(A) S_z^2 P(B)>, where P(X) are projectors onto atoms. + + TODO: MPI""" + # --- Setup + if dm2_with_dm1 is None: + dm2_with_dm1 = False + if dm2 is not None: + # Determine if DM2 contains DM1 by calculating norm + norm_aa = einsum('iikk->', dm2[0]) + norm_ab = einsum('iikk->', dm2[1]) + norm_bb = einsum('iikk->', dm2[2]) + norm = norm_aa + norm_bb + 2*norm_ab + ne2 = self.mol.nelectron*(self.mol.nelectron-1) + dm2_with_dm1 = (norm > ne2/2) + if atoms is None: + atoms = list(range(self.mol.natm)) + natom = len(atoms) + c_atom = self._get_atomic_coeffs(atoms=atoms, projection=projection) + ovlp = self.get_ovlp() + + proj = [] + for a in range(natom): + rxa = dot(self.mo_coeff[0].T, ovlp, c_atom[a][0]) + rxb = dot(self.mo_coeff[1].T, ovlp, c_atom[a][1]) + pxa = np.dot(rxa, rxa.T) + pxb = np.dot(rxb, rxb.T) + proj.append((pxa, pxb)) + # Fragment dependent projection operator: + if dm2 is None: + proj_x = [] + for x in self.get_fragments(contributes=True): + tmpa = np.dot(x.cluster.c_active[0].T, ovlp) + tmpb = np.dot(x.cluster.c_active[1].T, ovlp) + proj_x.append([]) + for a in range(natom): + rxa = np.dot(tmpa, c_atom[a][0]) + rxb = np.dot(tmpb, c_atom[a][1]) + pxa = np.dot(rxa, rxa.T) + pxb = np.dot(rxb, rxb.T) + proj_x[-1].append((pxa, pxb)) + + ssz = np.zeros((natom, natom)) + # 1-DM contribution: + if dm1 is None: + dm1 = self.make_rdm1() + dm1a, dm1b = dm1 + for a in range(natom): + tmpa = np.dot(proj[a][0], dm1a) + tmpb = np.dot(proj[a][1], dm1b) + for b in range(natom): + ssz[a,b] = (np.sum(tmpa*proj[b][0]) + + np.sum(tmpb*proj[b][1]))/4 + + occa = np.s_[:self.nocc[0]] + occb = np.s_[:self.nocc[1]] + occdiaga = np.diag_indices(self.nocc[0]) + occdiagb = np.diag_indices(self.nocc[1]) + # Non-cumulant DM2 contribution: + if not dm2_with_dm1: + ddm1a, ddm1b = dm1a.copy(), dm1b.copy() + ddm1a[occdiaga] -= 0.5 + ddm1b[occdiagb] -= 0.5 + # Traces of projector*DM(HF) + trpa = [np.trace(p[0][occa,occa]) for p in proj] + trpb = [np.trace(p[1][occb,occb]) for p in proj] + # Traces of projector*[DM(CC) + DM(HF)/2] + trda = [np.sum(p[0] * ddm1a) for p in proj] + trdb = [np.sum(p[1] * ddm1b) for p in proj] + for a in range(natom): + tmpa = np.dot(proj[a][0], ddm1a) + tmpb = np.dot(proj[a][1], ddm1b) + for b in range(natom): + ssz[a,b] -= (np.sum(tmpa[occa] * proj[b][0][occa]) + + np.sum(tmpb[occb] * proj[b][1][occb]))/2 + # Note that this contribution cancel to 0 in RHF, + # since trpa == trpb and trda == trdb: + ssz[a,b] += ((trpa[a]*trda[b] + trpa[b]*trda[a]) # alpha-alpha + - (trpa[a]*trdb[b] + trpb[b]*trda[a]) # alpha-beta + - (trpb[a]*trda[b] + trpa[b]*trdb[a]) # beta-alpha + + (trpb[a]*trdb[b] + trpb[b]*trdb[a]))/4 # beta-beta + + if dm2 is not None: + dm2aa, dm2ab, dm2bb = dm2 + for a in range(natom): + pa = proj[a] + tmpa = (np.tensordot(pa[0], dm2aa) - np.tensordot(dm2ab, pa[1])) + tmpb = (np.tensordot(pa[1], dm2bb) - np.tensordot(pa[0], dm2ab)) + for b in range(natom): + pb = proj[b] + ssz[a,b] += (np.sum(tmpa*pb[0]) + np.sum(tmpb*pb[1]))/4 + else: + # Cumulant DM2 contribution: + for ix, x in enumerate(self.get_fragments(contributes=True)): + dm2aa, dm2ab, dm2bb = x.make_fragment_dm2cumulant() + for a in range(natom): + pa = proj_x[ix][a] + tmpa = (np.tensordot(pa[0], dm2aa) - np.tensordot(dm2ab, pa[1])) + tmpb = (np.tensordot(pa[1], dm2bb) - np.tensordot(pa[0], dm2ab)) + for b in range(natom): + pb = proj_x[ix][b] + ssz[a,b] += (np.sum(tmpa*pb[0]) + np.sum(tmpb*pb[1]))/4 + return ssz
+ + def _get_dm_corr_energy_old(self, global_dm1=True, global_dm2=False, t_as_lambda=None): + """Calculate correlation energy from reduced density-matrices. + + Parameters + ---------- + global_dm1 : bool + Use 1DM calculated from global amplitutes if True, otherwise use in cluster approximation. Default: True. + global_dm2 : bool + Use 2DM calculated from global amplitutes if True, otherwise use in cluster approximation. Default: False. + + Returns + ------- + e_corr : float + Correlation energy. + """ + if t_as_lambda is None: + t_as_lambda = self.opts.t_as_lambda + if global_dm1: + dm1a, dm1b = self._make_rdm1_ccsd_global_wf(t_as_lambda=t_as_lambda, with_mf=False) + else: + dm1a, dm1b = self._make_rdm1_ccsd(t_as_lambda=t_as_lambda, with_mf=False) + + # --- Core Hamiltonian + Non-cumulant 2DM contribution + fa, fb = self.get_fock_for_energy(with_exxdiv=False) + e1 = (einsum('pi,pq,qj,ij->', self.mo_coeff[0], fa, self.mo_coeff[0], dm1a) + + einsum('pi,pq,qj,ij->', self.mo_coeff[1], fb, self.mo_coeff[1], dm1b))/self.ncells + + # --- Cumulant 2-DM contribution + # Use global 2-DM + if global_dm2: + dm2aa, dm2ab, dm2bb = self._make_rdm2_ccsd_global_wf(t_as_lambda=t_as_lambda, with_dm1=False) + eriaa = self.get_eris_array(self.mo_coeff[0]) + e2 = einsum('pqrs,pqrs', eriaa, dm2aa) / 2 + eriab = self.get_eris_array(2*[self.mo_coeff[0]] + 2*[self.mo_coeff[1]]) + e2 += einsum('pqrs,pqrs', eriab, dm2ab) + eribb = self.get_eris_array(self.mo_coeff[1]) + e2 += einsum('pqrs,pqrs', eribb, dm2bb) / 2 + # Use fragment-local 2-DM + else: + e2 = self.get_dm_corr_energy_e2(t_as_lambda=t_as_lambda) + e_corr = (e1 + e2) + return e_corr
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/ewf/ufragment.html b/_modules/vayesta/ewf/ufragment.html new file mode 100644 index 000000000..98508325b --- /dev/null +++ b/_modules/vayesta/ewf/ufragment.html @@ -0,0 +1,295 @@ + + + + + + vayesta.ewf.ufragment — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.ewf.ufragment

+import numpy as np
+
+import pyscf
+import pyscf.cc
+
+import vayesta.core.ao2mo
+from vayesta.core.util import dot, einsum, log_method, with_doc
+from vayesta.core.qemb import UFragment as BaseFragment
+from vayesta.ewf.fragment import Fragment as RFragment
+
+
+
[docs]class Fragment(RFragment, BaseFragment): + +
[docs] def set_cas(self, *args, **kwargs): + raise NotImplementedError()
+ +
[docs] def get_fragment_energy(self, c1, c2, hamil=None, fock=None, axis1='fragment', c2ba_order='ba'): + """Calculate fragment correlation energy contribution from projected C1, C2. + + Parameters + ---------- + c1: (n(occ-CO), n(vir-CO)) array + Fragment projected C1-amplitudes. + c2: (n(occ-CO), n(occ-CO), n(vir-CO), n(vir-CO)) array + Fragment projected C2-amplitudes. + hamil : ClusterHamiltonian object. + Object representing cluster hamiltonian, possibly including cached ERIs. + fock: (n(AO), n(AO)) array, optional + Fock matrix in AO representation. If None, self.base.get_fock_for_energy() + is used. Default: None. + + Returns + ------- + e_singles: float + Fragment correlation energy contribution from single excitations. + e_doubles: float + Fragment correlation energy contribution from double excitations. + e_corr: float + Total fragment correlation energy contribution. + """ + nocc = (c2[0].shape[1], c2[-1].shape[1]) + nvir = (c2[0].shape[2], c2[-1].shape[2]) + self.log.debugv("nocc= %d, %d nvir= %d, %d", *nocc, *nvir) + oa, ob = np.s_[:nocc[0]], np.s_[:nocc[1]] + va, vb = np.s_[nocc[0]:], np.s_[nocc[1]:] + if axis1 == 'fragment': + pxa, pxb = self.get_overlap('proj|cluster-occ') + + # --- Singles energy (zero for HF-reference) + if c1 is not None: + #if hasattr(eris, 'fock'): + # fa = eris.fock[0][oa,va] + # fb = eris.fock[1][ob,vb] + #else: + # fock = self.base.get_fock() + # fa = dot(self.c_active_occ[0].T, fock[0], self.c_active_vir[0]) + # fb = dot(self.c_active_occ[1].T, fock[1], self.c_active_vir[1]) + if fock is None: + fock = self.base.get_fock_for_energy() + fova = dot(self.cluster.c_active_occ[0].T, fock[0], self.cluster.c_active_vir[0]) + fovb = dot(self.cluster.c_active_occ[1].T, fock[1], self.cluster.c_active_vir[1]) + assert (len(c1) == 2) + ca, cb = c1 + if axis1 == 'fragment': + e_singles = (einsum('ia,xi,xa->', fova, pxa, ca) + + einsum('ia,xi,xa->', fovb, pxb, cb)) + else: + e_singles = np.sum(fova*ca) + np.sum(fovb*cb) + else: + e_singles = 0 + # Doubles energy + # TODO: loop to reduce memory? + if hamil is None: + hamil = self.hamil + gaa = hamil.get_eris_bare(block="ovov") + gab = hamil.get_eris_bare(block="ovOV") + gbb = hamil.get_eris_bare(block="OVOV") + + if axis1 == 'fragment': + assert len(c2) == 4 + caa, cab, cba, cbb = c2 + if c2ba_order == 'ab': + cba = cba.transpose(1,0,3,2) + e_doubles = (einsum('xi,xjab,iajb', pxa, caa, gaa)/4 + - einsum('xi,xjab,ibja', pxa, caa, gaa)/4 + + einsum('xi,xjab,iajb', pxb, cbb, gbb)/4 + - einsum('xi,xjab,ibja', pxb, cbb, gbb)/4 + + einsum('xi,xjab,iajb', pxa, cab, gab)/2 + + einsum('xi,xjab,jbia', pxb, cba, gab)/2) + else: + assert len(c2) == 3 + caa, cab, cbb = c2 + e_doubles = (einsum('ijab,iajb', caa, gaa)/4 + - einsum('ijab,ibja', caa, gaa)/4 + + einsum('ijab,iajb', cbb, gbb)/4 + - einsum('ijab,ibja', cbb, gbb)/4 + + einsum('ijab,iajb', cab, gab)) + + e_singles = (self.sym_factor * e_singles) + e_doubles = (self.sym_factor * e_doubles) + e_corr = (e_singles + e_doubles) + return e_singles, e_doubles, e_corr
+ + @with_doc(RFragment._get_projected_gamma1_intermediates) + def _get_projected_gamma1_intermediates(self, t_as_lambda=None, sym_t2=True): + raise NotImplementedError + + @with_doc(RFragment._get_projected_gamma2_intermediates) + def _get_projected_gamma2_intermediates(self, t_as_lambda=None, sym_t2=True): + t1, t2, l1, l2, t1x, t2x, l1x, l2x = self._ccsd_amplitudes_for_dm(t_as_lambda=t_as_lambda, sym_t2=sym_t2) + # Only incore for UCCSD: + #d2 = pyscf.cc.uccsd_rdm._gamma2_intermediates(None, t1, t2, l1x, l2x) + d2ovov, *d2 = pyscf.cc.uccsd_rdm._gamma2_intermediates(None, t1, t2, l1x, l2x) + # Correction of unprojected terms (which do not involve L1/L2): + # dovov: + dtau = (t2x[0]-t2[0] + einsum('ia,jb->ijab', t1x[0]-t1[0], 2*t1[0]))/4 + d2ovov[0][:] += dtau.transpose(0,2,1,3) + d2ovov[0][:] -= dtau.transpose(0,3,1,2) + # dovOV (symmetrize between t1x[0] and t1x[1]; t2x[1] should already be symmetrized): + dtau = ((t2x[1]-t2[1]) + einsum('ia,jb->ijab', t1x[0]-t1[0], t1[1]/2) + + einsum('ia,jb->ijab', t1[0]/2, t1x[1]-t1[1]))/2 + d2ovov[1][:] += dtau.transpose(0,2,1,3) + # dOVOV: + dtau = (t2x[2]-t2[2] + einsum('ia,jb->ijab', t1x[1]-t1[1], 2*t1[1]))/4 + d2ovov[3][:] += dtau.transpose(0,2,1,3) + d2ovov[3][:] -= dtau.transpose(0,3,1,2) + d2 = (d2ovov, *d2) + return d2 + +
[docs] def make_fragment_dm2cumulant(self, t_as_lambda=None, sym_t2=True, approx_cumulant=True, full_shape=True): + if int(approx_cumulant) != 1: + raise NotImplementedError + + if self.solver == 'MP2': + t2xaa, t2xab, t2xbb = self.results.pwf.restore(sym=sym_t2).as_ccsd().t2 + dovov = t2xaa.transpose(0,2,1,3) + dovOV = t2xab.transpose(0,2,1,3) + dOVOV = t2xbb.transpose(0,2,1,3) + if not full_shape: + return (dovov, dovOV, dOVOV) + nocca, nvira, noccb, nvirb = dovOV.shape + norba = nocca + nvira + norbb = noccb + nvirb + oa, va = np.s_[:nocca], np.s_[nocca:] + ob, vb = np.s_[:noccb], np.s_[noccb:] + dm2aa = np.zeros(4*[norba]) + dm2ab = np.zeros(2*[norba] + 2*[norbb]) + dm2bb = np.zeros(4*[norbb]) + dm2aa[oa,va,oa,va] = dovov + dm2aa[va,oa,va,oa] = dovov.transpose(1,0,3,2) + dm2ab[oa,va,ob,vb] = dovOV + dm2ab[va,oa,vb,ob] = dovOV.transpose(1,0,3,2) + dm2bb[ob,vb,ob,vb] = dOVOV + dm2bb[vb,ob,vb,ob] = dOVOV.transpose(1,0,3,2) + return (dm2aa, dm2ab, dm2bb) + + cc = d1 = None + d2 = self._get_projected_gamma2_intermediates(t_as_lambda=t_as_lambda, sym_t2=sym_t2) + dm2 = pyscf.cc.uccsd_rdm._make_rdm2(cc, d1, d2, with_dm1=False, with_frozen=False) + return dm2
+ +
[docs] @log_method() + def make_fragment_dm2cumulant_energy(self, hamil=None, t_as_lambda=None, sym_t2=True, approx_cumulant=True): + if hamil is None: + hamil = self.hamil + if self.solver == "MP2": + dm2 = self.make_fragment_dm2cumulant(t_as_lambda=t_as_lambda, sym_t2=sym_t2, + approx_cumulant=approx_cumulant, full_shape=False) + dm2aa, dm2ab, dm2bb = dm2 + gaa = hamil.get_eris_bare(block="ovov") + gab = hamil.get_eris_bare(block="ovOV") + gbb = hamil.get_eris_bare(block="OVOV") + return 2.0 * (einsum('ijkl,ijkl->', gaa, dm2aa) + + einsum('ijkl,ijkl->', gab, dm2ab) * 2 + + einsum('ijkl,ijkl->', gbb, dm2bb)) / 2 + elif approx_cumulant: + # Working hypothesis: this branch will effectively always uses `approx_cumulant=True`. + eris = hamil.get_dummy_eri_object(force_bare=True, with_vext=False) + d2 = self._get_projected_gamma2_intermediates(t_as_lambda=t_as_lambda, sym_t2=sym_t2) + return vayesta.core.ao2mo.helper.contract_dm2intermeds_eris_uhf(d2, eris)/2 + else: + dm2 = self.make_fragment_dm2cumulant(t_as_lambda=t_as_lambda, sym_t2=sym_t2, + approx_cumulant=approx_cumulant, full_shape=True) + dm2aa, dm2ab, dm2bb = dm2 + gaa, gab, gbb = hamil.get_eris_bare() + return (einsum('ijkl,ijkl->', gaa, dm2aa) + + einsum('ijkl,ijkl->', gab, dm2ab)*2 + + einsum('ijkl,ijkl->', gbb, dm2bb))/2
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/lattmod.html b/_modules/vayesta/lattmod.html new file mode 100644 index 000000000..288693970 --- /dev/null +++ b/_modules/vayesta/lattmod.html @@ -0,0 +1,118 @@ + + + + + + vayesta.lattmod — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.lattmod

+"""Lattice model module"""
+
+from vayesta.lattmod.latt import Hubbard1D
+from vayesta.lattmod.latt import Hubbard2D
+from vayesta.lattmod.latt import LatticeRHF
+from vayesta.lattmod.latt import LatticeUHF
+
+
[docs]def LatticeMF(mol, *args, **kwargs): + """Use RHF by default, unless spin is not zero.""" + if mol.spin == 0: + return LatticeRHF(mol, *args, **kwargs) + return LatticeUHF(mol, *args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/lattmod/bethe.html b/_modules/vayesta/lattmod/bethe.html new file mode 100644 index 000000000..099df237b --- /dev/null +++ b/_modules/vayesta/lattmod/bethe.html @@ -0,0 +1,178 @@ + + + + + + vayesta.lattmod.bethe — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.lattmod.bethe

+import numpy as np
+import scipy
+import scipy.integrate
+
+
+
[docs]def hubbard1d_bethe_energy(t, u, interval=(1e-14, 30.75*np.pi), **kwargs): + """Exact total energy per site for the 1D Hubbard model in the thermodynamic limit. + + from DOI: 10.1103/PhysRevB.77.045133.""" + + kwargs['limit'] = kwargs.get('limit', 100) + + def func(x): + j0 = scipy.special.jv(0, x) + j1 = scipy.special.jv(1, x) + eu = np.exp((x*u)/(2*t)) + f = j0*j1/(x*(1 + eu)) + return f + + e, *res = scipy.integrate.quad(func, *interval, **kwargs) + e = -4*t*e + + return e
+ +
[docs]def hubbard1d_bethe_docc(t, u, interval=(1e-14, 30.75*np.pi), **kwargs): + """Exact on-site double occupancy for the 1D Hubbard model in the thermodynamic limit.""" + + kwargs['limit'] = kwargs.get('limit', 100) + + def func(x): + j0 = scipy.special.jv(0, x) + j1 = scipy.special.jv(1, x) + eu = np.exp((x*u)/(2*t)) + #f = j0*j1/x * (-eu)/(1+eu)**2 * x/(2*t) + # Avoid float overflow: + emu = np.exp(-(x*u)/(2*t)) + f = j0*j1/x * (-1)/(2+emu+eu) * x/(2*t) + return f + + e, *res = scipy.integrate.quad(func, *interval, **kwargs) + e = -4*t*e + + return e
+ + +
[docs]def hubbard1d_bethe_docc_numdiff(t, u, du=1e-10, order=2, **kwargs): + """Exact on-site double occupancy for the 1D Hubbard model in the thermodynamic limit. + + Calculated from the numerical differentiation of the exact Bethe ansatz energy.""" + + if order == 1: + em1 = hubbard1d_bethe_energy(t, u-du, **kwargs) + ep1 = hubbard1d_bethe_energy(t, u+du, **kwargs) + docc = (1/2*ep1 - 1/2*em1) / du + elif order == 2: + em2 = hubbard1d_bethe_energy(t, u-2*du, **kwargs) + em1 = hubbard1d_bethe_energy(t, u- du, **kwargs) + ep1 = hubbard1d_bethe_energy(t, u+ du, **kwargs) + ep2 = hubbard1d_bethe_energy(t, u+2*du, **kwargs) + docc = (1/12*em2 - 2/3*em1 + 2/3*ep1 - 1/12*ep2) / du + else: + raise NotImplementedError() + + return docc
+ +if __name__ == '__main__': + t = 1.0 + for u in range(0, 13): + e = hubbard1d_bethe_energy(t, u) + d = hubbard1d_bethe_docc(t, u) + print("U= %6.3f: Energy= %.8f Double occupancy= %.8f" % (u, e, d)) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/lattmod/latt.html b/_modules/vayesta/lattmod/latt.html new file mode 100644 index 000000000..ce0394211 --- /dev/null +++ b/_modules/vayesta/lattmod/latt.html @@ -0,0 +1,526 @@ + + + + + + vayesta.lattmod.latt — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.lattmod.latt

+import logging
+
+import numpy as np
+
+import pyscf
+import pyscf.pbc
+import pyscf.pbc.gto
+import pyscf.scf
+import pyscf.lib
+from pyscf.lib.parameters import BOHR
+
+from vayesta.core.util import einsum
+
+log = logging.getLogger(__name__)
+
+
[docs]class LatticeMole(pyscf.pbc.gto.Cell): + """For PySCF compatibility + + Needs to implement: + a + copy() + build() + intor_cross() + intor_symmetric() + pbc_intor() + basis + + ? + atom_coord + unit + """ + + def __init__(self, nsite, nelectron=None, spin=0, order=None, incore_anyway=True, verbose=0, output=None): + """ + Parameters + ---------- + order: + Ordering of lattice sites. + """ + super().__init__(verbose=verbose, output=output) + self.nsite = nsite + if nelectron is None: nelectron = nsite + self.nelectron = nelectron + self.spin = spin + self._basis = {self.atom_symbol(i) : None for i in range(self.nsite)} + self._built = True + self.incore_anyway = incore_anyway + self.order = order + + def __getattr__(self, attr): + raise AttributeError("Attribute %s" % attr) + + @property + def natm(self): + return self.nsite + +
[docs] def nao_nr(self): + return self.nsite
+ +
[docs] def ao_labels(self, fmt=True): + if fmt: + return ['%s%d' % (self.atom_pure_symbol(i), i) for i in range(self.nsite)] + elif fmt is None: + return [(i, self.atom_pure_symbol(i) , '', '') for i in range(self.nsite)]
+ +
[docs] def atom_symbol(self, site): + return '%s%d' % (self.atom_pure_symbol(site), site)
+ +
[docs] def atom_pure_symbol(self, site): + return 'S'
+ + #def build(self): + # pass + +
[docs] def search_ao_label(self): + raise NotImplementedError()
+ + +
[docs]class Hubbard(LatticeMole): + """Abstract Hubbard model class.""" + + def __init__(self, nsite, nelectron=None, spin=0, hubbard_t=1.0, hubbard_u=0.0, v_nn=0.0, **kwargs): + super().__init__(nsite, nelectron=nelectron, spin=spin, **kwargs) + self.hubbard_t = hubbard_t + self.hubbard_u = hubbard_u + self.v_nn = v_nn + +
[docs] def aoslice_by_atom(self): + """One basis function per site ("atom").""" + aorange = np.stack(4*[np.arange(self.nsite)], axis=1) + aorange[:,1] += 1 + aorange[:,3] += 1 + return aorange
+ +
[docs] def ao2mo(self, mo_coeffs, compact=False): + if compact: raise NotImplementedError() + if self.v_nn: raise NotImplementedError() + + if isinstance(mo_coeffs, np.ndarray) and np.ndim(mo_coeffs) == 2: + eris = self.hubbard_u*einsum('ai,aj,ak,al->ijkl', mo_coeffs, mo_coeffs, mo_coeffs, mo_coeffs) + else: + eris = self.hubbard_u*einsum('ai,aj,ak,al->ijkl', *mo_coeffs) + eris = eris.reshape(eris.shape[0]*eris.shape[1], eris.shape[2]*eris.shape[3]) + return eris
+ + +
[docs]class Hubbard1D(Hubbard): + """Hubbard model in 1D.""" + + def __init__(self, nsite, nelectron=None, spin=0, hubbard_t=1.0, hubbard_u=0.0, v_nn=0.0, boundary='auto', **kwargs): + super().__init__(nsite, nelectron, spin, hubbard_t, hubbard_u, v_nn=v_nn, **kwargs) + + self.nsites = [nsite] + self.dimension = 1 + if boundary == 'auto': + if (nsite % 4 == 2): + boundary = 'PBC' + elif (nsite % 4 == 0): + boundary = 'APBC' + else: + raise ValueError() + log.debug("Automatically chosen boundary condition: %s", boundary) + self.boundary = boundary + if boundary.upper() == 'PBC': + bfac = 1 + elif boundary.upper() == 'APBC': + bfac = -1 + self.bfac = bfac + h1e = np.zeros((nsite, nsite)) + for i in range(nsite-1): + h1e[i,i+1] = h1e[i+1,i] = -hubbard_t + h1e[nsite-1,0] = h1e[0,nsite-1] = bfac * -hubbard_t + if self.order is not None: + h1e = h1e[self.order][:,self.order] + self.h1e = h1e + +
[docs] def get_eri(self, hubbard_u=None, v_nn=None): + if hubbard_u is None: + hubbard_u = self.hubbard_u + if v_nn is None: + v_nn = self.v_nn + + eri = np.zeros(4*[self.nsite]) + np.fill_diagonal(eri, hubbard_u) + # Nearest-neighbor interaction + if v_nn: + for i in range(self.nsite-1): + eri[i,i,i+1,i+1] = eri[i+1,i+1,i,i] = v_nn + eri[self.nsite-1,self.nsite-1,0,0] = eri[0,0,self.nsite-1,self.nsite-1] = v_nn + if self.order is not None: + # Not tested: + order = self.order + eri = eri[order][:,order][:,:,order][:,:,:,order] + return eri
+ + +
[docs] def lattice_vectors(self): + """Lattice vectors of 1D Hubbard model. + + An arbitrary value of 1 A is assumed between sites. The lattice vectors, however, are saved in units of Bohr. + """ + rvecs = np.eye(3) + rvecs[0,0] = self.nsite + return rvecs / BOHR
+ +
[docs] def atom_coords(self): + coords = np.zeros((self.nsite, 3)) + coords[:,0] = np.arange(self.nsite) + if self.order is not None: + coords = coords[self.order] + return coords / BOHR
+ +
[docs] def get_index(self, i): + bfac = self.bfac + fac = 1 + if i % self.nsites[0] != i: + fac *= bfac[0] * (i // self.nsites[0]) + idx = i + return idx, fac
+ +
[docs]class Hubbard2D(Hubbard): + + def __init__(self, nsites, nelectron=None, spin=0, hubbard_t=1.0, hubbard_u=0.0, boundary='auto', + tiles=(1, 1), order=None, **kwargs): + nsite = nsites[0]*nsites[1] + if order is None and tiles != (1, 1): + order = self.get_tiles_order(nsites, tiles) + super().__init__(nsite, nelectron, spin, hubbard_t, hubbard_u, order=order, **kwargs) + + self.nsites = nsites + self.dimension = 2 + + if isinstance(boundary, str) and boundary.lower() == 'auto': + if nelectron == nsite: + if self.nsites[0] % 4 == 0 and self.nsites[1] % 4 == 0: + boundary = ('PBC', 'APBC') + elif self.nsites[0] % 4 == 0 and self.nsites[1] % 4 == 2: + boundary = ('APBC', 'APBC') + # Also possible: + #boundary = ('APBC', 'PBC') + elif self.nsites[0] % 4 == 2 and self.nsites[1] % 4 == 0: + boundary = ('APBC', 'APBC') + # Also possible: + #boundary = ('PBC', 'APBC') + elif self.nsites[0] % 4 == 2 and self.nsites[1] % 4 == 2: + boundary = ('PBC', 'APBC') + else: + raise NotImplementedError("Please specify boundary conditions.") + else: + raise NotImplementedError("Please specify boundary conditions.") + if np.ndim(boundary) == 0: + boundary = (boundary, boundary) + self.boundary = boundary + + bfac = 2*[None] + for i in range(2): + if boundary[i].lower() == 'open': + bfac[i] = 0 + elif boundary[i].lower() in ('periodic', 'pbc'): + bfac[i] = +1 + elif boundary[i].lower() in ('anti-periodic', 'apbc'): + bfac[i] = -1 + else: + raise ValueError('Invalid boundary: %s' % boundary[i]) + log.debugv('boundary phases= %r', bfac) + self.bfac = bfac + h1e = np.zeros((nsite, nsite)) + for i in range(nsites[0]): + for j in range(nsites[1]): + idx, _ = self.get_index(i, j) + idx_l, fac_l = self.get_index(i, j-1) + idx_r, fac_r = self.get_index(i, j+1) + idx_u, fac_u = self.get_index(i-1, j) + idx_d, fac_d = self.get_index(i+1, j) + h1e[idx,idx_l] += fac_l * -hubbard_t + h1e[idx,idx_r] += fac_r * -hubbard_t + h1e[idx,idx_u] += fac_u * -hubbard_t + h1e[idx,idx_d] += fac_d * -hubbard_t + if self.order is not None: + h1e = h1e[self.order][:,self.order] + self.h1e = h1e + +
[docs] def get_index(self, i, j): + bfac = self.bfac + fac = 1 + if i % self.nsites[0] != i: + fac *= bfac[0] + if j % self.nsites[1] != j: + fac *= bfac[1] + idx = (i%self.nsites[0])*self.nsites[1] + (j%self.nsites[1]) + return idx, fac
+ +
[docs] def get_eri(self, hubbard_u=None, v_nn=None): + if hubbard_u is None: + hubbard_u = self.hubbard_u + if v_nn is None: + v_nn = self.v_nn + + eri = np.zeros(4*[self.nsite]) + np.fill_diagonal(eri, hubbard_u) + # Nearest-neighbor interaction + if v_nn: + raise NotImplementedError() + return eri
+ +
[docs] def lattice_vectors(self): + """Lattice vectors of 1D Hubbard model. + + An arbitrary value of 1 A is assumed between sites. The lattice vectors, however, are saved in units of Bohr. + """ + rvecs = np.eye(3) + rvecs[0,0] = self.nsites[0] + rvecs[1,1] = self.nsites[1] + return rvecs / BOHR
+ +
[docs] def atom_coords(self): + """Sites are ordered by default as: + + 6 7 8 + 3 4 5 + 0 1 2 + """ + coords = np.zeros((self.nsite, 3)) + for row in range(self.nsites[1]): + slc = np.s_[row*self.nsites[0]:(row+1)*self.nsites[0]] + coords[slc,0] = np.arange(self.nsites[0]) + coords[slc,1] = row + if self.order is not None: + coords = coords[self.order] + return coords / BOHR
+ +
[docs] @staticmethod + def get_tiles_order(nsites, tiles): + assert(nsites[0] % tiles[0] == 0) + assert(nsites[1] % tiles[1] == 0) + ntiles = [nsites[0] // tiles[0], nsites[1] // tiles[1]] + tsize = tiles[0]*tiles[1] + + def get_xy(site): + tile, pos = divmod(site, tsize) + ty, tx = divmod(tile, ntiles[0]) + py, px = divmod(pos, tiles[0]) + return tx*tiles[0]+px, ty*tiles[1]+py + + nsite = nsites[0]*nsites[1] + order = [] + for site in range(nsite): + x, y = get_xy(site) + idx = y*nsites[0] + x + order.append(idx) + return order
+ + +
[docs]class HubbardDF: + + def __init__(self, mol): + if mol.v_nn: raise NotImplementedError() + self.mol = mol + self.blockdim = self.get_naoaux() + +
[docs] def ao2mo(self, *args, **kwargs): + return self.mol.ao2mo(*args, **kwargs)
+ +
[docs] def get_naoaux(self): + return self.mol.nsite
+ +
[docs] def loop(self, blksize=None): + """Note that blksize is ignored.""" + nsite = self.mol.nsite + j3c = np.zeros((nsite, nsite, nsite)) + np.fill_diagonal(j3c, np.sqrt(self.mol.hubbard_u)) + # Pack (Q|ab) -> (Q|A) + j3c = pyscf.lib.pack_tril(j3c) + yield j3c
+ + +
[docs]class LatticeSCF: + + def __init__(self, mol, *args, **kwargs): + super().__init__(mol, *args, **kwargs) + if self.mol.incore_anyway: + self._eri = mol.get_eri() + else: + self.density_fit() + + @property + def cell(self): + return self.mol + +
[docs] def get_hcore(self, *args, **kwargs): + return self.mol.h1e
+ +
[docs] def get_ovlp(self, mol=None): + return np.eye(self.mol.nsite)
+ +
[docs] def density_fit(self): + self.with_df = HubbardDF(self.mol) + return self
+ +
[docs]class LatticeRHF(LatticeSCF, pyscf.scf.hf.RHF): + +
[docs] def get_init_guess(self, mol=None, key=None): + e, c = np.linalg.eigh(self.get_hcore()) + nocc = self.mol.nelectron // 2 + dm = 2*np.dot(c[:,:nocc], c[:,:nocc].T) + return dm
+ +
[docs] def get_jk(self, mol=None, dm=None, *args, **kwargs): + if mol is None: mol = self.mol + if dm is None: dm = self.make_rdm1() + if self.mol.v_nn is not None and mol.v_nn != 0: + raise NotImplementedError() + j = np.diag(np.diag(dm))*mol.hubbard_u + k = j + return j, k
+ +
[docs] def check_lattice_symmetry(self, dm=None): + if dm is None: dm = self.make_rdm1() + occ = np.diag(dm) + if not np.all(np.isclose(occ[0], occ)): + log.warning("Mean-field not lattice symmetric! Site occupations=\n%r", occ) + else: + log.debugv("Mean-field site occupations=\n%r", occ)
+ + +
[docs]class LatticeUHF(LatticeSCF, pyscf.scf.uhf.UHF): + +
[docs] def get_init_guess(self, mol=None, key=None): + e, c = np.linalg.eigh(self.get_hcore()) + nocc = self.mol.nelec + dma = np.dot(c[:,:nocc[0]], c[:,:nocc[0]].T) + dmb = np.dot(c[:,:nocc[1]], c[:,:nocc[1]].T) + # Create small random offset to break symmetries. + + offset = np.full_like(dma.diagonal(), fill_value=1e-2) + if self.mol.dimension == 1: + for x in range(self.mol.nsites[0]): + ind, fac = self.mol.get_index(x) + offset[ind] *= (-1) ** (x%2) + elif self.mol.dimension == 2: + for x in range(self.mol.nsites[0]): + for y in range(self.mol.nsites[1]): + ind, fac = self.mol.get_index(x,y) + offset[ind] *= (-1) ** (x%2 + y%2) + else: + raise NotImplementedError("LatticeUHF only supports 1- and 2-D Hubbard models.") + dma[np.diag_indices_from(dma)] += offset + return (dma, dmb)
+ +
[docs] def get_jk(self, mol=None, dm=None, *args, **kwargs): + if mol is None: mol = self.mol + if dm is None: dm = self.make_rdm1() + if self.mol.v_nn is not None and mol.v_nn != 0: + raise NotImplementedError() + dma, dmb = dm + ja = np.diag(np.diag(dma))*mol.hubbard_u + jb = np.diag(np.diag(dmb))*mol.hubbard_u + ka, kb = ja, jb + return (ja, jb), (ka, kb)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/libs.html b/_modules/vayesta/libs.html new file mode 100644 index 000000000..08b9f97ab --- /dev/null +++ b/_modules/vayesta/libs.html @@ -0,0 +1,127 @@ + + + + + + vayesta.libs — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.libs

+import logging
+import os.path
+import numpy as np
+
+
+log = logging.getLogger(__name__)
+
+
[docs]def load_library(libname, required=False): + try: + if not libname.startswith('lib'): + libname = 'lib' + libname + path = os.path.dirname(__file__) + return np.ctypeslib.load_library(libname, path) + except OSError as e: + if required: + log.critical("Required library %s not found!", libname) + raise e + log.debug("Library %s not found", libname) + return None
+ +libcore = load_library('core') +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/misc/brueckner.html b/_modules/vayesta/misc/brueckner.html new file mode 100644 index 000000000..7313ad077 --- /dev/null +++ b/_modules/vayesta/misc/brueckner.html @@ -0,0 +1,212 @@ + + + + + + vayesta.misc.brueckner — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.misc.brueckner

+import copy
+import logging
+
+import numpy as np
+import scipy
+import scipy.linalg
+
+log = logging.getLogger(__name__)
+
+
[docs]def update_mo_coeff(mo_coeff, t1, ovlp=None, damping=0.0, diis=None): + nocc, nvir = t1.shape + nmo = mo_coeff.shape[-1] + assert nocc+nvir == nmo + occ = np.s_[:nocc] + vir = np.s_[nocc:] + delta_occ = (1-damping)*np.dot(mo_coeff[:,vir], t1.T) # qa,ai->qi + log.debug("Change of occupied Brueckner orbitals= %.3e", np.linalg.norm(delta_occ)) + bmo_occ = mo_coeff[:,occ] + delta_occ + + # Orthogonalize occupied orbitals + if ovlp is None: + bmo_occ = np.linalg.qr(bmo_occ)[0] + else: + dm_occ = np.dot(bmo_occ, bmo_occ.T) + e, v = scipy.linalg.eigh(dm_occ, b=ovlp, type=2) + bmo_occ = v[:,-nocc:] + # PCDIIS of occupied density + if diis: + dm_occ = np.dot(bmo_occ, bmo_occ.T) + dm_occ = diis.update(dm_occ) + e, v = scipy.linalg.eigh(dm_occ, b=ovlp, type=2) + bmo_occ = v[:,-nocc:] + + # Virtual space + if ovlp is None: + dm_vir = (np.eye(nmo) - np.dot(bmo_occ, bmo_occ.T)) + else: + dm_vir = np.linalg.inv(ovlp) - np.dot(bmo_occ, bmo_occ.T) + e, v = scipy.linalg.eigh(dm_vir, b=ovlp, type=2) + bmo_vir = v[:,-nvir:] + + assert bmo_occ.shape[-1] == nocc + assert bmo_vir.shape[-1] == nvir + if ovlp is None: + ovlp = np.eye(nmo) + bmo = np.hstack((bmo_occ, bmo_vir)) + assert np.allclose(np.linalg.multi_dot((bmo.T, ovlp, bmo))-np.eye(nmo), 0) + return bmo_occ, bmo_vir
+ +
[docs]def update_mf(mf, t1, mo_coeff=None, inplace=False, canonicalize=True, damping=0.0, diis=None): + """Update occupied MOs based on T1 amplitudes, to converge to Brueckner MOs. + + Parameters + ---------- + mf : pyscf.scf.SCF + Mean-field object. + t1 : (n(Occ), n(Vir)) array + T1 amplitudes (i.e. C1 in intermediate normalization). + mo_coeff : (n(AO), n(MO)) array, optional + Molecular orbital coefficients. If None, `mf.mo_coeff` is used. Default: None. + inplace : bool, optional + If True, the mf object is updated inplace and the previous MO coefficients are overwritten. Default: False. + canonicalize : bool or str, optional + Diagonalize the Fock matrix within the new occupied and virtual space, to obtain quasi-canonical orbitals. + Default: False. + + Returns + ------- + mf : pyscf.scf.SCF + Mean-field object with updated mf.mo_coeff and mf.e_tot + """ + + if not inplace: + mf = copy.copy(mf) + + if mo_coeff is None: mo_coeff = mf.mo_coeff + nmo = mo_coeff.shape[-1] + nocc = np.count_nonzero(mf.mo_occ > 0) + nvir = (nmo-nocc) + assert t1.shape == (nocc, nvir) + + ovlp = mf.get_ovlp() + if np.allclose(ovlp, np.eye(ovlp.shape[-1])): ovlp = None + bmo_occ, bmo_vir = update_mo_coeff(mo_coeff, t1, ovlp, damping=damping, diis=diis) + # Diagonalize one-electron Hamiltonian or Fock matrix within occupied and virtual space: + if canonicalize: + if canonicalize == 'hcore': + h1e = mf.get_hcore() + else: + h1e = mf.get_fock() + e, r = np.linalg.eigh(np.linalg.multi_dot((bmo_occ.T, h1e, bmo_occ))) + log.debugv("Occupied BMO energies:\n%r", e.tolist()) + bmo_occ = np.dot(bmo_occ, r) + e, r = np.linalg.eigh(np.linalg.multi_dot((bmo_vir.T, h1e, bmo_vir))) + log.debugv("Virtual BMO energies:\n%r", e.tolist()) + bmo_vir = np.dot(bmo_vir, r) + + bmo = np.hstack((bmo_occ, bmo_vir)) + if ovlp is None: + assert np.allclose(np.dot(bmo.T, bmo), np.eye(nmo)) + else: + assert np.allclose(np.linalg.multi_dot((bmo.T, ovlp, bmo)), np.eye(nmo)) + + mf.mo_coeff = bmo + mf.e_tot = mf.energy_tot() + return mf
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/misc/corrfunc.html b/_modules/vayesta/misc/corrfunc.html new file mode 100644 index 000000000..82a2dc910 --- /dev/null +++ b/_modules/vayesta/misc/corrfunc.html @@ -0,0 +1,315 @@ + + + + + + vayesta.misc.corrfunc — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.misc.corrfunc

+"""Correlation function"""
+
+import numpy as np
+from vayesta.core.util import einsum
+
+
+def _get_proj_per_spin(p):
+    if np.ndim(p[0]) == 2:
+        return p
+    if np.ndim(p[0]) == 1:
+        return p, p
+    raise ValueError()
+
+
[docs]def chargecharge(dm1, dm2, proj1=None, proj2=None, subtract_indep=True): + if dm2 is None: + return chargecharge_mf(dm1, proj1=proj1, proj2=proj2, subtract_indep=subtract_indep) + + if proj2 is None: + proj2 = proj1 + if proj1 is None: + corr = einsum('iijj->', dm2) + np.trace(dm1) + if subtract_indep: + corr -= np.trace(dm1)**2 + return corr + corr = einsum('(ij,ijkl),kl->', proj1, dm2, proj2) + corr += einsum('ij,ik,jk->', dm1, proj1, proj2) + if subtract_indep: + corr -= np.sum(dm1 * proj1) * np.sum(dm1 * proj2) + return corr
+ +# --- Correlated: + +
[docs]def spin_z(dm1, proj=None): + return 0.0
+ +
[docs]def spin_z_unrestricted(dm1, proj=None): + dm1a, dm1b = dm1 + if proj is None: + sz = (np.trace(dm1a) - np.trace(dm1b))/2 + return sz + + pa, pb = _get_proj_per_spin(proj) + sz = (einsum('ij,ij->', dm1a, pa) + - einsum('ij,ij->', dm1b, pb))/2 + return sz
+ +
[docs]def spinspin_z(dm1, dm2, proj1=None, proj2=None): + if dm2 is None: + return spinspin_z_mf(dm1, proj1=proj1, proj2=proj2) + + dm1a = dm1/2 + dm2aa = (dm2 - dm2.transpose(0,3,2,1)) / 6 + dm2ab = (dm2/2 - dm2aa) + if proj2 is None: + proj2 = proj1 + if proj1 is None: + ssz = (einsum('iijj->', dm2aa) - einsum('iijj->', dm2ab))/2 + ssz += np.trace(dm1a)/2 + return ssz + ssz = (einsum('ijkl,ij,kl->', dm2aa, proj1, proj2) + - einsum('ijkl,ij,kl->', dm2ab, proj1, proj2))/2 + ssz += einsum('ij,ik,jk->', dm1a, proj1, proj2)/2 + return ssz
+ +
[docs]def spinspin_z_unrestricted(dm1, dm2, proj1=None, proj2=None): + if dm2 is None: + return spinspin_z_mf_unrestricted(dm1, proj1=proj1, proj2=proj2) + + dm1a, dm1b = dm1 + dm2aa, dm2ab, dm2bb = dm2 + if proj2 is None: + proj2 = proj1 + if proj1 is None: + ssz = (einsum('iijj->', dm2aa)/4 + einsum('iijj->', dm2bb)/4 + - einsum('iijj->', dm2ab)/2) + ssz += (np.trace(dma) + np.trace(dmb))/4 + return ssz + p1a, p1b = _get_proj_per_spin(proj1) + p2a, p2b = _get_proj_per_spin(proj2) + ssz = (einsum('ijkl,ij,kl->', dm2aa, p1a, p2a)/4 + + einsum('ijkl,ij,kl->', dm2bb, p1b, p2b)/4 + - einsum('ijkl,ij,kl->', dm2ab, p1a, p2b)/4 + - einsum('ijkl,ij,kl->', dm2ab, p2a, p1b)/4) + ssz += (einsum('ij,ik,jk->', dm1a, p1a, p2a) + + einsum('ij,ik,jk->', dm1b, p1b, p2b))/4 + return ssz
+ +# --- Mean-field: + +
[docs]def chargecharge_mf(dm1, proj1=None, proj2=None, subtract_indep=True): + if proj2 is None: + proj2 = proj1 + if proj1 is None: + if subtract_indep: + return 0 + else: + return np.trace(dm1)**2 + if subtract_indep: + corr = 0 + else: + corr = np.sum(dm1*proj1) * np.sum(dm1*proj2) + corr -= einsum('(ik,ij),(kl,lj)->', proj1, dm1, dm1, proj2)/2 + corr += einsum('ij,ik,jk->', dm1, proj1, proj2) + return corr
+ +
[docs]def spinspin_z_mf(dm1, proj1=None, proj2=None): + # TEMP: + dm1 = (dm1/2, dm1/2) + return spinspin_z_mf_unrestricted(dm1=dm1, proj1=proj1, proj2=proj2)
+ + #if proj2 is None: + # proj2 = proj1 + #if proj1 is None: + # ssz = np.trace(dm1)/4 - einsum('ij,ij->', dm1, dm1)/8 + # return ssz + + # TODO: + #ssz = (einsum('ij,kl,ij,kl->', dma, dma, p1a, p2a) + # - einsum('il,jk,ij,kl->', dma, dma, p1a, p2a) + # + einsum('ij,kl,ij,kl->', dmb, dmb, p1b, p2b) + # - einsum('il,jk,ij,kl->', dmb, dmb, p1b, p2b) + # - einsum('ij,kl,ij,kl->', dma, dmb, p1a, p2b) + # - einsum('ij,kl,ij,kl->', dmb, dma, p1b, p2a))/4 + #ssz += (einsum('ij,ik,jk->', dma, p1a, p2a) + # + einsum('ij,ik,jk->', dmb, p1b, p2b))/4 + #return ssz + +
[docs]def spinspin_z_mf_unrestricted(dm1, proj1=None, proj2=None): + dma, dmb = dm1 + if proj2 is None: + proj2 = proj1 + if proj1 is None: + ssz = (einsum('ii,jj->', dma, dma)/4 + - einsum('ij,ij->', dma, dma)/4 + + einsum('ii,jj->', dmb, dmb)/4 + - einsum('ij,ij->', dmb, dmb)/4 + - einsum('ii,jj->', dma, dmb)/2) + ssz += (np.trace(dma) + np.trace(dmb))/4 + return ssz + + p1a, p1b = (proj1, proj1) if np.ndim(proj1[0]) == 1 else proj1 + p2a, p2b = (proj2, proj2) if np.ndim(proj2[0]) == 1 else proj2 + + ssz = (einsum('(ij,ij),(kl,kl)->', p1a, dma, dma, p2a) + - einsum('(ij,il),(jk,kl)->', p1a, dma, dma, p2a) + + einsum('(ij,ij),(kl,kl)->', p1b, dmb, dmb, p2b) + - einsum('(ij,il),(jk,kl)->', p1b, dmb, dmb, p2b) + - einsum('(ij,ij),(kl,kl)->', p1a, dma, dmb, p2b) + - einsum('(ij,ij),(kl,kl)->', p1b, dmb, dma, p2a))/4 + ssz += (einsum('ij,ik,jk->', dma, p1a, p2a) + + einsum('ij,ik,jk->', dmb, p1b, p2b))/4 + return ssz
+ + +if __name__ == '__main__': + import pyscf + import pyscf.gto + import pyscf.scf + + mol = pyscf.gto.Mole() + mol.atom = """ + O 0.0000 0.0000 0.1173 + H 0.0000 0.7572 -0.4692 + H 0.0000 -0.7572 -0.4692 + """ + mol.basis = 'cc-pVDZ' + mol.build() + nmo = mol.nao + nocc = mol.nelectron//2 + + # RHF + rhf = pyscf.scf.RHF(mol) + rhf.kernel() + dm1 = np.zeros((nmo, nmo)) + dm1[np.diag_indices(nocc)] = 2 + sz = spin_z(dm1) + print(sz) + + + ssz = spinspin_z_rhf(dm1) + print(ssz) + 1/0 + #print('RHF: <S_z>= %.8f <S_z S_z>= %.8f' % (sz, ssz)) + + + # UHF + mol.charge = mol.spin = 1 + mol.build() + nmo = mol.nao + nocca, noccb = mol.nelec + print(mol.nelec) + + uhf = pyscf.scf.UHF(mol) + uhf.kernel() + + dm1a = np.zeros((nmo, nmo)) + dm1b = np.zeros((nmo, nmo)) + dm1a[np.diag_indices(nocca)] = 1 + dm1b[np.diag_indices(noccb)] = 1 + dm1 = (dm1a, dm1b) + + sz = spin_z_uhf(dm1) + print(sz) + sz = spin_z_unrestricted(dm1) + print(sz) + #ssz = spinspin_z_uhf(uhf) + #print('UHF: <S_z>= %.8f <S_z S_z>= %.8f' % (sz, ssz)) + #ssz = spinspin_z_unrestricted(uhf) + #print('UHF: <S_z>= %.8f <S_z S_z>= %.8f' % (sz, ssz)) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/misc/counterpoise.html b/_modules/vayesta/misc/counterpoise.html new file mode 100644 index 000000000..2c72f25f6 --- /dev/null +++ b/_modules/vayesta/misc/counterpoise.html @@ -0,0 +1,233 @@ + + + + + + vayesta.misc.counterpoise — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.misc.counterpoise

+import logging
+
+import numpy as np
+
+import pyscf
+#import pyscf.scf
+import pyscf.lib
+
+log = logging.getLogger(__name__)
+
+
+# TODO
+#def get_cp_energy(emb, rmax, nimages=1, unit='A'):
+#    """Get counterpoise correction for a given embedding problem."""
+#    mol = emb.kcell or emb.mol
+#
+#    # TODO: non-HF
+#    if emb.spinsym == 'restricted':
+#        mfcls = pyscf.scf.RHF
+#    elif emb.spinsym == 'unrestricted':
+#        mfcls = pyscf.scf.UHF
+#
+#    for atom in range(mol.natm):
+#        # Pure atom
+#        mol_cp = make_cp_mol(mol, atom, False)
+#        mf_cp = mfcls(mol_cp)
+#        mf_cp.kernel()
+
+
+
[docs]def make_cp_mol(mol, atom, rmax, nimages=1, unit='A', **kwargs): + """Make molecule object for counterposise calculation. + + WARNING: This has only been tested for periodic systems so far! + + Parameters + ---------- + mol : pyscf.gto.Mole or pyscf.pbc.gto.Cell object + PySCF molecule or cell object. + atom : int + Atom index for which the counterpoise correction should be calculated. + TODO: allow list of atoms. + rmax : float + All atom centers within range `rmax` are added as ghost-atoms in the counterpoise correction. + nimages : int, optional + Number of neighboring unit cell in each spatial direction. Has no effect in open boundary + calculations. Default: 1. + unit : ['A', 'B', 'a1', 'a2', 'a3'] + Unit for `rmax`, either Angstrom (`A`), Bohr (`B`), or a lattice vector ('a1', 'a2', 'a3'). + **kwargs : + Additional keyword arguments for returned PySCF Mole/Cell object. + + Returns + ------- + mol_cp : pyscf.gto.Mole or pyscf.pbc.gto.Cell + Mole or Cell object with periodic boundary conditions removed + and with ghost atoms added depending on `rmax` and `nimages`. + """ + # Add physical atom + atoms = [(mol.atom_symbol(atom), mol.atom_coord(atom, unit='ANG'))] + log.debugv("Counterpoise: adding atom %6s at %8.5f %8.5f %8.5f A", atoms[0][0], *(atoms[0][1])) + + # If rmax > 0: Atomic calculation with additional basis functions + # else: Atom only + if rmax: + dim = getattr(mol, 'dimension', 0) + images = np.zeros(3, dtype=int) + if dim == 0: + pass # Open boundary conditions - do not create images + elif dim == 1: + images[0] = nimages + elif dim == 2: + images[:2] = nimages + elif dim == 3: + images[:] = nimages + log.debugv('Counterpoise images= %r', images) + center = mol.atom_coord(atom, unit='ANG') + log.debugv('Counterpoise center= %r %s', center, unit) + # Lattice vectors in Angstrom + if hasattr(mol, 'lattice_vectors'): + amat = pyscf.lib.param.BOHR * mol.lattice_vectors() + log.debugv('Latt. vec.= %r', amat) + log.debugv('mol.unit= %r', mol.unit) + log.debugv('amat= %r', amat) + # Convert rmax to Angstrom + log.debugv('rmax= %.8f %s', rmax, unit) + if unit == 'A': + pass + elif unit == 'B': + rmax *= pyscf.lib.param.BOHR + elif unit.startswith('a'): + rmax *= np.linalg.norm(amat[int(unit[1])]) + else: + raise ValueError("Unknown unit: %r" % unit) + log.debugv('rmax= %.8f A', rmax) + + # Add ghost atoms. Note that rx = ry = rz = 0 for open boundary conditions + for rx in range(-images[0], images[0]+1): + for ry in range(-images[1], images[1]+1): + for rz in range(-images[2], images[2]+1): + for atm in range(mol.natm): + symb = mol.atom_symbol(atm) + coord = mol.atom_coord(atm, unit='ANG') + # This is a fragment atom - already included above as real atom + if (abs(rx)+abs(ry)+abs(rz) == 0) and (atm == atom): + assert (symb == atoms[0][0]) + assert np.allclose(coord, atoms[0][1]) + continue + # This is either a non-fragment atom in the unit cell (rx = ry = rz = 0) or in a neighbor cell + if abs(rx)+abs(ry)+abs(rz) > 0: + coord += (rx*amat[0] + ry*amat[1] + rz*amat[2]) + if not symb.lower().startswith('ghost'): + symb = 'Ghost-' + symb + distance = np.linalg.norm(coord - center) + if (not rmax) or (distance <= rmax): + log.debugv("Counterpoise: adding atom %6s at %8.5f %8.5f %8.5f with distance %8.5f A", symb, *coord, distance) + atoms.append((symb, coord)) + log.info("Counterpoise with rmax %.3f A -> %3d ghost atoms", rmax, (len(atoms)-1)) + mol_cp = mol.copy() + mol_cp.atom = atoms + mol_cp.unit = 'ANG' + mol_cp.a = None + mol_cp.dimension = 0 + for key, val in kwargs.items(): + log.debugv("Counterpoise: setting attribute %s to %r", key, val) + setattr(mol_cp, key, val) + mol_cp.build(False, False) + return mol_cp
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/misc/cptbisect.html b/_modules/vayesta/misc/cptbisect.html new file mode 100644 index 000000000..d5b460e8f --- /dev/null +++ b/_modules/vayesta/misc/cptbisect.html @@ -0,0 +1,187 @@ + + + + + + vayesta.misc.cptbisect — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.misc.cptbisect

+import numpy as np
+import scipy
+
+import vayesta
+
+
+
[docs]class ChempotBisection: + + def __init__(self, func, cpt_init=0.0, tol=1e-8, maxiter=30, robust=False, log=None): + self.func = func + self.cpt = cpt_init + self.converged = False + # Options + self.tol = tol + self.maxiter = maxiter + self.robust = robust + self.log = (log or vayesta.log) + +
[docs] def kernel(self, *args, **kwargs): + + cpt1 = self.cpt + err1 = self.func(cpt1, *args, **kwargs) + if abs(err1) <= self.tol: + self.converged = True + return cpt1 + + # Linear extrapolation for bounds + cpt2 = cpt1 + np.sign(err1)*1e-3 + err2 = self.func(cpt2, *args, **kwargs) + m = (err2-err1) / (cpt2-cpt1) + self.log.debug("cpt1= %.8f err1= %.3e", cpt1, err1) + self.log.debug("cpt2= %.8f err2= %.3e", cpt2, err2) + self.log.debug("gradient m= %.3e", m) + # In some cases the system becomes difficult to converge if a chemical potential is applied. + # With robust=True the optimization becomes more stable + if self.robust: + base, exp0 = 1.3, 0 + else: + base, exp0 = 2, 1 + for exp in range(exp0, 4): + cpt3 = cpt1 - (base**exp)*err1/m + err3 = self.func(cpt3, *args, **kwargs) + self.log.debug("cpt3= %.8f err3= %.3e", cpt3, err3) + if (err1 * err3) <= 0: + self.log.debug('Chemical potential in [%.8f, %.8f] (errors=[%.3e, %.3e])' % (cpt1, cpt3, err1, err3)) + break + self.log.info('Chemical potential not in [%.8f, %.8f] (errors=[%.3e, %.3e])' % (cpt1, cpt3, err1, err3)) + else: + raise ValueError('Chemical potential not in [%.8f, %.8f] (errors=[%.3e, %.3e])' % (cpt1, cpt3, err1, err3)) + lower = min(cpt1, cpt3) + upper = max(cpt1, cpt3) + + it = 1 + def iteration(cpt, *args, **kwargs): + nonlocal it + if (cpt == cpt1): + err = err1 + elif (cpt == cpt3): + err = err3 + else: + err = self.func(cpt, *args, **kwargs) + self.log.info('Chemical potential iteration= %3d cpt= %+12.8f err= %.3e', it, cpt, err) + self.cpt = cpt + it += 1 + if abs(err) <= self.tol: + raise StopIteration + return err + try: + res = scipy.optimize.brentq(iteration, lower, upper) + except StopIteration: + self.converged = True + return self.cpt
+ + +if __name__ == '__main__': + + def func(cpt): + return 0.1*cpt + 1 + + bisect = ChempotBisection(func) + cpt = bisect.kernel() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/misc/cubefile.html b/_modules/vayesta/misc/cubefile.html new file mode 100644 index 000000000..33e0f9a1f --- /dev/null +++ b/_modules/vayesta/misc/cubefile.html @@ -0,0 +1,412 @@ + + + + + + vayesta.misc.cubefile — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.misc.cubefile

+"""Modified from PySCF - at the moment only for PBC systems"""
+import logging
+import os
+import os.path
+
+import numpy as np
+import pickle
+
+import pyscf
+import pyscf.lib
+import pyscf.gto
+from pyscf.dft import numint
+
+import vayesta
+
+log = logging.getLogger(__name__)
+
+
+
[docs]class CubeFile: + + def __init__(self, cell, filename=None, gridsize=(100, 100, 100), resolution=None, + title=None, comment=None, fmt="%13.5E", + crop=None): + """Initialize a cube file object. Data can be added using the `add_orbital` and `add_density` methods. + + This class can also be used as a context manager: + + >>> with CubeFile(cell, "mycubefile.cube") as f: + >>> f.add_orbital(hf.mo_coeff[:,0]) + >>> f.add_orbital(hf.mo_coeff[:,5:10]) + >>> f.add_density(hf.make_rdm1()) + + Parameters + ---------- + cell : pbc.gto.Cell object + filename : str + Filename for cube file. Should include ".cube" extension. + nx, ny, nz : int, optional + Number of grid points in x, y, and z direction. If specified, + they take precedence over `resolution` parameter. Default: None. + resolution : float, optional + Resolution in units of 1/Bohr for automatic choice of `nx`,`ny`, and `nz`. Default: 15.0. + title : str, optional + First comment line in cube-file. + comment : str, optional + Second comment line in cube-file. + origin : array(3), optional + Origin in x, y, z coordinates. + fmt : str, optional + Float formatter for voxel data. According to the cube-file standard this is required to + be "%13.5E", but some applications may support a different format. Default: "%13.5E" + crop : dict, optional + By default, the coordinate grid will span the entire unit cell. `crop` can be set + to crop the unit cell. `crop` should be a dictionary with possible keys + ["a0", "a1", "b0", "b1", "c0", "c1"], where "a0" crops the first lattice vector at the + start, "a1" crops the first lattice vector at the end, "b0" crops the second lattice vector + at the start etc. The corresponding values is the distance which should be cropped in + units of Bohr. + EXPERIMENTAL FEATURE - NOT FULLY TESTED. + """ + + self.cell = cell + self.filename = filename + # Make user aware of different behavior of resolution, compared to pyscf.tools.cubegen + if resolution is not None and resolution < 1: + log.warning(cell, "Warning: resolution is below 1/Bohr. Recommended values are 5/Bohr or higher.") + + self.a, self.origin = self.get_box_and_origin() + if crop is not None: + a = self.a.copy() + norm = np.linalg.norm(self.a, axis=1) + a[0] -= (crop.get('a0', 0) + crop.get('a1', 0)) * self.a[0]/norm[0] + a[1] -= (crop.get('b0', 0) + crop.get('b1', 0)) * self.a[1]/norm[1] + a[2] -= (crop.get('c0', 0) + crop.get('c1', 0)) * self.a[2]/norm[2] + self.origin += crop.get('a0', 0)*self.a[0]/norm[0] + self.origin += crop.get('b0', 0)*self.a[1]/norm[1] + self.origin += crop.get('c0', 0)*self.a[2]/norm[2] + self.a = a + # Use resolution if provided, else gridsize + if resolution is not None: + self.nx = min(np.ceil(abs(self.a[0,0]) * resolution).astype(int), 192) + self.ny = min(np.ceil(abs(self.a[1,1]) * resolution).astype(int), 192) + self.nz = min(np.ceil(abs(self.a[2,2]) * resolution).astype(int), 192) + else: + self.nx, self.ny, self.nz = gridsize + self.title = title or "<title>" + self.comment = comment or ("Generated with Vayesta v%s" % vayesta.__version__) + self.fmt = fmt + self.coords = self.get_coords() + + self.fields = [] + + @property + def has_pbc(self): + return hasattr(self.cell, 'lattice_vectors') + +
[docs] def get_box_and_origin(self): + if self.has_pbc: + box = self.cell.lattice_vectors().copy() + origin = np.zeros(3) + else: + coord = self.cell.atom_coords() + margin = 3.0 + extent = np.max(coord, axis=0) - np.min(coord, axis=0) + 2*margin + box = np.diag(extent) + origin = np.asarray(np.min(coord, axis=0) - margin) + return box, origin
+ +
[docs] def get_coords(self): + xs = np.arange(self.nx) / (self.nx-1) + ys = np.arange(self.ny) / (self.ny-1) + zs = np.arange(self.nz) / (self.nz-1) + coords = pyscf.lib.cartesian_prod([xs, ys, zs]) + coords = np.dot(coords, self.a) + coords = np.asarray(coords, order='C') + self.origin + return coords
+ + @property + def ncoords(self): + """Number of grod points.""" + return self.nx*self.ny*self.nz + + @property + def nfields(self): + """Number of datasets (orbitals + density matrices).""" + return len(self.fields) + +
[docs] def save_state(self, filename): + cell, self.cell = self.cell, None # Do not pickle cell + pickle.dump(self, open(filename, 'wb')) + self.cell = cell # Restore self.cell
+ +
[docs] @classmethod + def load_state(cls, filename, cell=None): + self = pickle.load(open(filename, 'rb')) + self.cell = cell + return self
+ + # Context manager support + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.write() + +
[docs] def add_orbital(self, coeff, dset_idx=None): + """Add one or more orbitals to the cube file. + + Arguments + --------- + coeff : (N) or (N,M) array + AO coefficients of orbitals. Supports adding a single orbitals, + where `coeff` is a one-dimensional array, or multiple orbitals, + in which case the second dimension of `coeff` labels the orbitals. + dset_idx : int, optional + Dataset index of orbital(s). In the application, the orbitals will + be labelled as 'Orbital <dset_idx>' or similar. If set to `None`, + the smallest unused, positive integer will be used. Default: None. + """ + coeff = np.array(coeff) # Force copy + if coeff.ndim == 1: coeff = coeff[:,np.newaxis] + assert (coeff.ndim == 2) + for i, c in enumerate(coeff.T): + idx = dset_idx+i if dset_idx is not None else None + self.fields.append((c, 'orbital', idx))
+ +
[docs] def add_density(self, dm, dset_idx=None): + """Add one or more densities to the cube file. + + Arguments + --------- + dm : (N,N) or (M,N,N) array + Density-matrix in AO-representation. Supports adding a single density-matrix, + where `dm` is a two-dimensional array, or multiple density-matrices, + in which case the first dimension of `dm` labels the matrices. + dset_idx : int, optional + Dataset index of density-matrix. In the application, the density-matrix will + be labelled as 'Orbital <dset_idx>' or similar. If set to `None`, + the smallest unused, positive integer will be used. Default: None. + """ + dm = np.array(dm) # Force copy + if dm.ndim == 2: dm = dm[np.newaxis] + assert (dm.ndim == 3) + for i, d in enumerate(dm): + idx = dset_idx+i if dset_idx is not None else None + self.fields.append((d, 'density', idx))
+ +
[docs] def add_mep(self, dm, dset_idx=None): + # TODO + raise NotImplementedError()
+ +
[docs] def write(self, filename=None): + filename = (filename or self.filename) + # Create directories if necessary + directory = os.path.dirname(filename) + if directory: + os.makedirs(directory, exist_ok=True) + # Get dataset IDs + dset_ids = [] + for (field, ftype, fid) in self.fields: + if fid is None: + if dset_ids: + fid = np.max(dset_ids)+1 + else: + fid = 1 + dset_ids.append(fid) + + self.write_header(filename, dset_ids=dset_ids) + self.write_fields(filename)
+ +
[docs] def write_header(self, filename, dset_ids=None): + """Write header of cube-file.""" + if self.nfields > 1 and dset_ids is None: + dset_ids = range(1, self.nfields+1) + with open(filename, 'w') as f: + f.write('%s\n' % self.title) + f.write('%s\n' % self.comment) + if self.nfields > 1: + f.write('%5d' % -self.cell.natm) + else: + f.write('%5d' % self.cell.natm) + f.write('%12.6f%12.6f%12.6f' % tuple(self.origin)) + if self.nfields > 1: + f.write('%5d' % self.nfields) + f.write('\n') + # Lattice vectors + f.write('%5d%12.6f%12.6f%12.6f\n' % (self.nx, *(self.a[0]/(self.nx-1)))) + f.write('%5d%12.6f%12.6f%12.6f\n' % (self.ny, *(self.a[1]/(self.ny-1)))) + f.write('%5d%12.6f%12.6f%12.6f\n' % (self.nz, *(self.a[2]/(self.nz-1)))) + # Atoms + for atm in range(self.cell.natm): + sym = self.cell.atom_symbol(atm) + f.write('%5d%12.6f' % (pyscf.gto.charge(sym), 0.0)) + f.write('%12.6f%12.6f%12.6f\n' % tuple(self.cell.atom_coords()[atm])) + # Data set indices + if self.nfields > 1: + f.write('%5d' % self.nfields) + for i in range(self.nfields): + f.write('%5d' % dset_ids[i]) + f.write('\n')
+ +
[docs] def write_fields(self, filename): + """Write voxel data of registered fields in `self.fields` to cube-file.""" + blksize = min(self.ncoords, 8000) + with open(filename, 'a') as f: + # Loop over x,y,z coordinates first, then fields! + for blk0, blk1 in pyscf.lib.prange(0, self.ncoords, blksize): + data = np.zeros((blk1-blk0, self.nfields)) + blk = np.s_[blk0:blk1] + intor = 'PBCGTOval' if self.has_pbc else 'GTOval' + ao = self.cell.eval_gto(intor, self.coords[blk]) + for i, (field, ftype, _) in enumerate(self.fields): + if ftype == 'orbital': + data[:,i] = np.dot(ao, field) + elif ftype == 'density': + data[:,i] = numint.eval_rho(self.cell, ao, field) + else: + raise ValueError('Unknown field type: %s' % ftype) + data = data.flatten() + for d0, d1 in pyscf.lib.prange(0, len(data), 6): + f.write(((d1-d0)*self.fmt + '\n') % tuple(data[d0:d1]))
+ +if __name__ == '__main__': + + def make_graphene(a, c, atoms=["C", "C"], supercell=None): + amat = np.asarray([ + [a, 0, 0], + [a/2, a*np.sqrt(3.0)/2, 0], + [0, 0, c]]) + coords_internal = np.asarray([ + [2.0, 2.0, 3.0], + [4.0, 4.0, 3.0]])/6 + coords = np.dot(coords_internal, amat) + + if supercell is None: + atom = [(atoms[0], coords[0]), (atoms[1], coords[1])] + else: + atom = [] + ncopy = supercell + nr = 0 + for x in range(ncopy[0]): + for y in range(ncopy[1]): + for z in range(ncopy[2]): + shift = x*amat[0] + y*amat[1] + z*amat[2] + atom.append((atoms[0]+str(nr), coords[0]+shift)) + atom.append((atoms[1]+str(nr), coords[1]+shift)) + nr += 1 + amat = np.einsum('i,ij->ij', ncopy, amat) + return amat, atom + + + from pyscf import pbc + cell = pbc.gto.Cell( + basis = 'gth-dzv', + pseudo = 'gth-pade', + dimension = 2, + verbose=10) + cell.a, cell.atom = make_graphene(2.46, 10.0, supercell=(2,2,1)) + hf = pbc.scf.HF(cell) + hf = hf.density_fit() + hf.kernel() + + with CubeFile(cell, "graphene.cube", crop={"c0" : 5.0, "c1" : 5.0}) as f: + f.add_orbital(hf.mo_coeff[:,0]) + f.add_orbital(hf.mo_coeff[:,6:10]) + f.add_density([hf.make_rdm1(), np.linalg.inv(hf.get_ovlp())-hf.make_rdm1()]) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/misc/gto_helper.html b/_modules/vayesta/misc/gto_helper.html new file mode 100644 index 000000000..657eed9cb --- /dev/null +++ b/_modules/vayesta/misc/gto_helper.html @@ -0,0 +1,252 @@ + + + + + + vayesta.misc.gto_helper — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.misc.gto_helper

+import numpy as np
+
+import itertools
+
+
+
[docs]def loop_neighbor_cells(lattice_vectors=None, dimension=3): + if (dimension == 0): + yield np.zeros(3) + return + dxs = (-1, 0, 1) + dys = dzs = (0,) + if dimension > 1: + dys = (-1, 0, 1) + if dimension > 2: + dzs = (-1, 0, 1) + for dr in itertools.product(dxs, dys, dzs): + if lattice_vectors is None: + yield np.asarray(dr) + yield np.dot(dr, lattice_vectors)
+ +
[docs]def get_atom_distances(mol, point, dimension=None): + """Get array containing the distances of all atoms to the specified point. + + Parameters + ---------- + mol: PySCF Mole or Cell object + point: Array(3) + + Returns + ------- + Distances: Array(n(atom)) + """ + coords = mol.atom_coords() + if hasattr(mol, 'lattice_vectors'): + latvec = mol.lattice_vectors() + dim = dimension if dimension is not None else mol.dimension + else: + latvec = None + dim = 0 + + distances = [] + for atm, r0 in enumerate(coords): + dists = [np.linalg.norm(point - (r0+dr)) for dr in loop_neighbor_cells(latvec, dim)] + distances.append(np.amin(dists)) + return np.asarray(distances)
+ +
[docs]def get_atom_shells(mol, point, dimension=None, decimals=5): + distances = get_atom_distances(mol, point, dimension=dimension) + drounded = distances.round(decimals) + sort = np.argsort(distances, kind='stable') + d_uniq, inv = np.unique(drounded[sort], return_inverse=True) + shells = inv[np.argsort(sort)] + return shells, distances
+ +
[docs]def make_counterpoise_fragments(mol, fragments, full_basis=True, add_rest_fragment=True, dump_input=True): + '''Make mol objects for counterpoise calculations. + + Parameters + ---------- + fragments : iterable + full_basis : bool, optional + add_rest_fragment : bool, optional + + Returns + ------- + fmols : list + ''' + GHOST_PREFIX = "GHOST-" + atom = mol.format_atom(mol.atom, unit=1.0) + atom_symbols = [mol.atom_symbol(atm_id) for atm_id in range(mol.natm)] + + def make_frag_mol(frag): + f_mask = numpy.isin(atom_symbols, frag) + if sum(f_mask) == 0: + raise ValueError("No atoms found for fragment: %r", frag) + fmol = mol.copy() + fatom = [] + for atm_id, atm in enumerate(atom): + sym = atm[0] + # Atom is in fragment + if f_mask[atm_id]: + fatom.append(atm) + # Atom is NOT in fragment [only append if full basis == True] + elif full_basis: + sym_new = GHOST_PREFIX + sym + fatom.append([sym_new, atm[1]]) + # Change basis dictionary + if isinstance(fmol.basis, dict) and (sym in fmol.basis.keys()): + fmol.basis[sym_new] = fmol.basis[sym] + del fmol.basis[sym] + # Remove from basis [not necessary, since atom is not present anymore, but cleaner]: + elif isinstance(fmol.basis, dict) and (sym in fmol.basis.keys()): + del fmol.basis[sym] + + # Rebuild fragment mol object + fmol.atom = fatom + fmol._built = False + fmol.build(dump_input, False) + return fmol + + fmols = [] + for frag in fragments: + fmol = make_frag_mol(frag) + fmols.append(fmol) + + # Add fragment containing all atoms not part of any specified fragments + if add_rest_fragment: + rest_mask = numpy.full((mol.natm,), True) + # Set all atoms to False that are part of a fragment + for frag in fragments: + rest_mask = numpy.logical_and(numpy.isin(atom_symbols, frag, invert=True), rest_mask) + if numpy.any(rest_mask): + rest_frag = numpy.asarray(atom_symbols)[rest_mask] + fmol = make_frag_mol(rest_frag) + fmols.append(fmol) + + # TODO: Check that no atom is part of more than one fragments + + return fmols
+ +if __name__ == '__main__': + + import pyscf + import pyscf.pbc + import pyscf.pbc.gto + import pyscf.pbc.tools + from vayesta.misc import solids + + cell = pyscf.pbc.gto.Cell() + cell.a, cell.atom = solids.graphene() + cell.dimension = 2 + cell.build() + cell = pyscf.pbc.tools.super_cell(cell, (2, 2, 1)) + + point = cell.atom_coord(0) + shells, dists = get_atom_shells(cell, point) + print("Periodic boundary conditions:") + for i in range(cell.natm): + print('atom= %2d distance= %12.8f shell= %2d' % (i, dists[i], shells[i])) + #uniq, idx, counts = np.unique(shells, return_index=True, return_counts=True) + + mol = cell.to_mol() + shells, dists = get_atom_shells(mol, point) + print("Open boundary conditions:") + for i in range(mol.natm): + print('atom= %2d distance= %12.8f shell= %2d' % (i, dists[i], shells[i])) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/misc/molecules/molecules.html b/_modules/vayesta/misc/molecules/molecules.html new file mode 100644 index 000000000..f8cd6c8f6 --- /dev/null +++ b/_modules/vayesta/misc/molecules/molecules.html @@ -0,0 +1,328 @@ + + + + + + vayesta.misc.molecules.molecules — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.misc.molecules.molecules

+import os.path
+import numpy as np
+
+def _load_datafile(filename, scale=1):
+    datafile = os.path.join(os.path.dirname(__file__), os.path.join("data", filename))
+    data = np.loadtxt(datafile, dtype=[("atoms", object), ("coords", np.float64, (3,))])
+    atoms = data["atoms"]
+    coords = scale*data["coords"]
+    atom = [[atoms[i], coords[i]] for i in range(len(atoms))]
+    return atom
+
+
[docs]def water(atoms=['O', 'H'], origin=(0, 0, 0), scale=1): + origin = np.asarray(origin) + atom = [[atoms[0], scale*np.asarray([0.0000, 0.0000, 0.1173]) - origin], + [atoms[1], scale*np.asarray([0.0000, 0.7572, -0.4692]) - origin], + [atoms[1], scale*np.asarray([0.0000, -0.7572, -0.4692]) - origin]] + return atom
+ +
[docs]def alkane(n, atoms=['C', 'H'], cc_bond=1.54, ch_bond=1.09, scale=1.0, numbering=False): + """Alkane with idealized tetrahedral (sp3) coordination.""" + + assert numbering in (False, 'atom', 'unit') + + index = 0 + def get_symbol(symbol): + nonlocal index + if not numbering: + return symbol + if numbering == 'atom': + out = '%s%d' % (symbol, index) + index += 1 + return out + return '%s%d' % (symbol, index) + + dk = 1 if (numbering == 'atom') else 0 + + phi = np.arccos(-1.0/3) + cph = 1/np.sqrt(3.0) + sph = np.sin(phi/2.0) + dcy = scale*cc_bond * cph + dcz = scale*cc_bond * sph + dchs = scale*ch_bond * sph + dchc = scale*ch_bond * cph + x = 0.0 + + atom = [] + for i in range(n): + # Carbon atoms + sign = (-1)**i + y = sign * dcy/2 + z = i*dcz + atom.append([get_symbol(atoms[0]), [x, y, z]]) + # Hydrogen atoms on side + dy = sign * dchc + atom.append([get_symbol(atoms[1]), [x+dchs, y+dy, z]]) + atom.append([get_symbol(atoms[1]), [x-dchs, y+dy, z]]) + # Terminal hydrogen atom 1 + if (i == 0): + atom.append([get_symbol(atoms[1]), [0.0, y-dchc, z-dchs]]) + # Terminal hydrogen atom 2 + # Do not use elif, since for n=1 (Methane), we need to add both terminal hydrogen atoms: + if (i == n-1): + atom.append([get_symbol(atoms[1]), [0.0, y-sign*dchc, z+dchs]]) + if numbering == 'unit': + index += 1 + + return atom
+ +
[docs]def alkene(ncarbon, cc_bond=1.33, ch_bond=1.09): + """Alkene with idealized trigonal planar (sp2) coordination.""" + + if (ncarbon < 2): + raise ValueError + if (ncarbon % 2 == 1): + raise NotImplementedError + + cos30 = np.sqrt(3)/2 + sin30 = 1/2 + + r0 = x0, y0, z0 = (0, 0, 0) + atom = [('H', (x0-ch_bond*cos30, y0+ch_bond*sin30, z0))] + for nc in range(ncarbon): + sign = (-1)**nc + atom += [('C', r0)] + atom += [('H', (x0, y0-sign*ch_bond, z0))] + if nc == (ncarbon-1): + break + r0 = x0, y0, z0 = (x0+cc_bond*cos30, y0+sign*cc_bond*sin30, 0) + atom += [('H', (x0+ch_bond*cos30, y0+sign*ch_bond*sin30, z0))] + + return atom
+ +
[docs]def arene(n, atoms=['C', 'H'], cc_bond=1.39, ch_bond=1.09, unit=1.0): + """Bond length for benzene.""" + r1 = unit*cc_bond/(2*np.sin(np.pi/n)) + r2 = unit*(r1 + ch_bond) + atom = [] + for i in range(n): + phi = 2*i*np.pi/n + atomidx = (2*i) % len(atoms) + atom.append((atoms[atomidx], (r1*np.cos(phi), r1*np.sin(phi), 0.0))) + atom.append((atoms[atomidx+1], (r2*np.cos(phi), r2*np.sin(phi), 0.0))) + return atom
+ +
[docs]def no2(): + atom = [ + ('N', (0.0000, 0.0000, 0.0000)), + ('O', (0.0000, 1.0989, 0.4653)), + ('O', (0.0000, -1.0989, 0.4653)), + ] + return atom
+ +
[docs]def ethanol(oh_bond=None, scale=1): + atom = _load_datafile('ethanol.dat', scale=scale) + if oh_bond is not None: + pos_o = atom[2][1] + pos_h = atom[3][1] + voh = (pos_h - pos_o) + voh = voh / np.linalg.norm(voh) + pos_h = pos_o + oh_bond*voh + atom[3][1] = pos_h + return atom
+ +
[docs]def ketene(cc_bond=None): + atom = _load_datafile('ketene.dat') + if cc_bond is not None: + pos_c1 = atom[0][1] + pos_c2 = atom[1][1] + vcc = (pos_c2 - pos_c1) + vcc = vcc / np.linalg.norm(vcc) + new_c2 = pos_c1 + cc_bond * vcc + new_o = atom[2][1] + (new_c2 - pos_c2) + atom[1][1] = new_c2 + atom[2][1] = new_o + return atom
+ +
[docs]def ring(atom, natom, bond_length=None, radius=None, z=0.0, numbering=None): + if radius is None: + r = bond_length/(2*np.sin(np.pi/natom)) + else: + r = radius + atoms = [] + if isinstance(atom, str): + atom = [atom] + for i in range(natom): + theta = i * (2*np.pi/natom) + atom_i = atom[i%len(atom)] + if numbering is not None: + atom_i += str(int(numbering) + i) + atoms.append([atom_i, np.asarray([r*np.cos(theta), r*np.sin(theta), z])]) + return atoms
+ +
[docs]def chain(atom, natom, bond_length, numbering=None): + '''Open boundary condition version of 1D ring''' + atoms = [] + if isinstance(atom, str): + atom = [atom] + for i in range(natom): + atom_i = atom[i%len(atom)] + if numbering is not None: + atom_i += str(int(numbering) + i) + atoms.append([atom_i, np.asarray([i*bond_length, 0.0, 0.0])]) + return atoms
+ +# --- From datafiles: + +
[docs]def acetic_acid(): + atom = _load_datafile('acetic.dat') + return atom
+ +
[docs]def ferrocene_b3lyp(): + atom = _load_datafile('ferrocene.dat') + return atom
+ +
[docs]def ferrocene(atoms=['Fe', 'C', 'H'], conformation='eclipsed', dFeCp=1.648, dCC=1.427, dCH=1.079, aCpH=0.52, numbering=None): + """From https://pubs.acs.org/doi/pdf/10.1021/ct700152c""" + if conformation != 'eclipsed': + raise NotImplementedError + + rHH = dCC/(2*np.sin(np.pi/5)) + dCH*np.cos(aCpH*np.pi/180) + zH = dCH*np.sin(aCpH*np.pi/180) + + atom = [(atoms[0] + ('1' if numbering else ''), np.asarray((0, 0, 0)))] + atom += ring(atoms[1], 5, dCC, z=dFeCp, numbering=2 if numbering else None) + atom += ring(atoms[2], 5, radius=rHH, z=dFeCp-zH, numbering=7 if numbering else None) + atom += ring(atoms[1], 5, dCC, z=-dFeCp, numbering=12 if numbering else None) + atom += ring(atoms[2], 5, radius=rHH, z=-dFeCp+zH, numbering=17 if numbering else None) + + return atom
+ +
[docs]def propyl(): + atom = _load_datafile('propyl.dat') + return atom
+ +
[docs]def phenyl(): + atom = _load_datafile('phenyl.dat') + return atom
+ +
[docs]def propanol(): + atom = _load_datafile('propanol.dat') + return atom
+ +
[docs]def chloroethanol(): + atom = _load_datafile('chloroethanol.dat') + return atom
+ +
[docs]def neopentane(): + """Structure from B3LYP//aug-cc-pVTZ.""" + atom = _load_datafile('neopentane.dat') + return atom
+ +
[docs]def boronene(): + atom = _load_datafile('boronene.dat') + return atom
+ +
[docs]def coronene(): + atom = _load_datafile('coronene.dat') + return atom
+ +
[docs]def glycine(): + atom = _load_datafile('glycine.dat') + return atom
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/misc/pcdiis.html b/_modules/vayesta/misc/pcdiis.html new file mode 100644 index 000000000..8693c6494 --- /dev/null +++ b/_modules/vayesta/misc/pcdiis.html @@ -0,0 +1,144 @@ + + + + + + vayesta.misc.pcdiis — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.misc.pcdiis

+import numpy as np
+
+import pyscf
+import pyscf.lib
+
+
+
[docs]class PCDIIS(pyscf.lib.diis.DIIS): + """https://doi.org/10.1021/acs.jctc.7b00892""" + + def __init__(self, pref, *args, **kwargs): + self.pref = pref + super().__init__(*args, **kwargs) + + +
[docs] def update(self, x): + y = np.dot(x, self.pref) + y_new = super().update(y) + yy_inv = np.linalg.inv(np.dot(y_new.T.conj(), y_new)) + x_new = np.linalg.multi_dot((y_new, yy_inv, y_new.T.conj())) + return x_new
+ + +if __name__ == '__main__': + import pyscf.gto + import pyscf.scf + + mol = pyscf.gto.Mole(atom='H 0 0 0 ; F 0 0 1', basis='cc-pVDZ') + mol.build() + hf = pyscf.scf.RHF(mol) + hf.kernel() + + nocc = np.count_nonzero(hf.mo_occ > 0) + c = hf.mo_coeff[:,:nocc] + diis = PCDIIS(c) + dm0 = hf.make_rdm1() + dm1 = diis.update(dm0) + # Missing overlap matrix? + assert np.allclose(dm0, dm1) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/misc/solids/solids.html b/_modules/vayesta/misc/solids/solids.html new file mode 100644 index 000000000..f2337ddff --- /dev/null +++ b/_modules/vayesta/misc/solids/solids.html @@ -0,0 +1,325 @@ + + + + + + vayesta.misc.solids.solids — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.misc.solids.solids

+import numpy as np
+
+SQRT2 = np.sqrt(2)
+
+
[docs]def bcc(atoms, a): + """Body-centered cubic. + Li: 3.51 A + """ + amat = a*np.eye(a) + coords = a * np.asarray([[0, 0, 0], [1, 1, 1]])/2 + atom = _make_atom(atoms, coords) + return amat, atom
+ +
[docs]def diamond(atoms=['C', 'C'], a=3.57): + """Silicon: a=5.431 A""" + amat = a * np.asarray([ + [0.5, 0.5, 0.0], + [0.0, 0.5, 0.5], + [0.5, 0.0, 0.5]]) + coords = a * np.asarray([[0, 0, 0], [1, 1, 1]])/4 + atom = _make_atom(atoms, coords) + return amat, atom
+ +
[docs]def graphene(atoms=['C', 'C'], a=2.46, c=20.0): + """ + hBN: a=2.5A + hBeO: a=2.68A (VASP)""" + amat = np.asarray([ + [a, 0, 0], + [a/2, a*np.sqrt(3.0)/2, 0], + [0, 0, c]]) + coords_internal = np.asarray([ + [2.0, 2.0, 3.0], + [4.0, 4.0, 3.0]])/6 + coords = np.dot(coords_internal, amat) + atom = _make_atom(atoms, coords) + return amat, atom
+ +
[docs]def graphite(atoms=['C', 'C', 'C', 'C'], a=2.461, c=6.708): + """a = 2.461 A , c = 6.708 A""" + amat = np.asarray([ + [a/2, -a*np.sqrt(3.0)/2, 0], + [a/2, +a*np.sqrt(3.0)/2, 0], + [0, 0, c]]) + coords_internal = np.asarray([ + [0, 0, 1.0/4], + [2.0/3, 1.0/3, 1.0/4], + [0, 0, 3.0/4], + [1.0/3, 2.0/3, 3.0/4]]) + coords = np.dot(coords_internal, amat) + atom = _make_atom(atoms, coords) + return amat, atom
+ +
[docs]def rocksalt(atoms=['Na', 'Cl'], a=5.6402, unitcell='primitive'): + """ + LiH: a=4.0834 + LiF: a=4.0351 + """ + if unitcell == 'primitive': + amat = a * np.asarray([ + [0.5, 0.5, 0.0], + [0.0, 0.5, 0.5], + [0.5, 0.0, 0.5]]) + internal = np.asarray([ + [0.0, 0.0, 0.0], + [0.5, 0.5, 0.5]]) + coords = np.dot(internal, amat) + atom = _make_atom(atoms, coords) + return amat, atom + + if unitcell == 'primitive-af1': + # wrong: + #amat = a * np.asarray([ + # [1/SQRT2, 0, 0], + # [0, 1/SQRT2, 0], + # [0, 0, 1]]) + #internal = np.asarray([ + # [0.0, 0.0, 0.0], + # [0.5, 0.5, 0.0], + # [0.0, 0.0, 0.5], + # [0.5, 0.5, 0.5]]) + # arXiv:2207.12064v1: + amat = a * np.asarray([ + [0.5, 0, 0.5], + [0.5, 0, -0.5], + [0, 1, 0.0]]) + coords = a/2 * np.asarray([ + [0, 0, 0], + [1, 0, 0], + [1, 1, 0], + [0, 1, 0]]) + atom = _make_atom(2*atoms, coords) + return amat, atom + + if unitcell == 'primitive-af2': + amat = a * np.asarray([ + [1.00, 0.50, 0.50], + [0.50, 1.00, 0.50], + [0.50, 0.50, 1.00]]) + internal = np.asarray([ + [0.00, 0.00, 0.00], + [0.25, 0.25, 0.25], + [0.50, 0.50, 0.50], + [0.75, 0.75, 0.75]]) + coords = np.dot(internal, amat) + atom = _make_atom(2*atoms, coords) + return amat, atom + + if unitcell == 'cubic': + amat = a*np.eye(3) + internal = np.asarray([ + # Atom 1: + [0, 0, 0], + [0, 1/2, 1/2], + [1/2, 0, 1/2], + [1/2, 1/2, 0], + # Atom 2: + [0, 0, 1/2], + [0, 1/2, 0], + [1/2, 0, 0], + [1/2, 1/2, 1/2]]) + coords = np.dot(internal, amat) + atom = _make_atom(4*[atoms[0]]+4*[atoms[1]], coords) + return amat, atom + raise ValueError
+ +
[docs]def perovskite(atoms=['Sr', 'Ti', 'O'], a=3.905): + if len(atoms) == 3: + atoms = [atoms[0], atoms[1]] + 3*[atoms[2]] + amat = a * np.eye(3) + coords = a*np.asarray([ + [0, 0, 0], + [1/2, 1/2, 1/2], + [0, 1/2, 1/2], + [1/2, 0, 1/2], + [1/2, 1/2, 0] + ]) + atom = _make_atom(atoms, coords) + return amat, atom
+ +
[docs]def perovskite_tetragonal(atoms=['Sr', 'Ti', 'O'], a=5.507, c=7.796, u=0.241): + """This is the crystallographic ('quadruple') cell, not the primitive ('double') cell. + + Lattice constants from PHYSICAL REVIEW MATERIALS 2, 013807 (2018). + DOI:10.1103/PhysRevMaterials.2.013807 + + becomes cubic with parameters: + a = 5.522 A, c = 2a0 = 7.810 A , u = 0.25 + (see DOI: 10.1103/PhysRevB.83.134108) + """ + if a is None: + a = c/np.sqrt(2) + if c is None: + c = np.sqrt(2)*a + + if len(atoms) == 3: + atoms = [atoms[0], atoms[1]] + 3*[atoms[2]] + if len(atoms) == 5: + atoms = 4*atoms + + amat = a * np.eye(3) + amat[2,2] = c + + #coords_internal = a*np.asarray([ + # [0 , 0.5 , 0.25], # Sr + # [0.5 , 0 , 0.75], # Sr + # [0.5 , 0 , 0.25], # Sr + # [0 , 0.5 , 0.75], # Sr + # [0 , 0 , 0], # Ti + # [0.5 , 0.5 , 0.5], # Ti + # [0 , 0 , 0.5], # Ti + # [0.5 , 0.5 , 0], # Ti + # [0 , 0 , 0.25], # O (4a) + # [0.5 , 0.5 , 0.75], # O (4a) + # [0 , 0 , 0.75], # O (4a) + # [0.5 , 0.5 , 0.25], # O (4a) + # [u , 0.5+u , 0], # O + # [0.5+u , u , 0.5], # O + # [-u , 0.5-u , 0], # O + # [0.5-u , -u , 0.5], # O + # [0.5-u , u , 0], # O + # [-u , 0.5+u , 0.5], # O + # [0.5+u , -u , 0], # O + # [u , 0.5-u , 0.5], # O + # ]) + # Order? + coords_internal = np.asarray([ + [0 , 0.5 , 0.25], # Sr + [0 , 0 , 0], # Ti + [0 , 0 , 0.25], # O (4a) + [u , 0.5+u , 0], # O + [0.5+u , u , 0.5], # O + [0.5 , 0 , 0.75], # Sr + [0.5 , 0.5 , 0.5], # Ti + [0.5 , 0.5 , 0.75], # O (4a) + [-u , 0.5-u , 0], # O + [0.5-u , -u , 0.5], # O + [0.5 , 0 , 0.25], # Sr + [0 , 0 , 0.5], # Ti + [0 , 0 , 0.75], # O (4a) + [0.5-u , u , 0], # O + [-u , 0.5+u , 0.5], # O + [0 , 0.5 , 0.75], # Sr + [0.5 , 0.5 , 0], # Ti + [0.5 , 0.5 , 0.25], # O (4a) + [0.5+u , -u , 0], # O + [u , 0.5-u , 0.5], # O + ]) + coords = np.dot(coords_internal, amat) + + atom = _make_atom(atoms, coords) + return amat, atom
+ +def _make_atom(atoms, coords): + atom = [] + for i in range(len(atoms)): + if atoms[i] is not None: + atom.append([atoms[i], coords[i]]) + return atom +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/mpi.html b/_modules/vayesta/mpi.html new file mode 100644 index 000000000..d8d246bea --- /dev/null +++ b/_modules/vayesta/mpi.html @@ -0,0 +1,118 @@ + + + + + + vayesta.mpi — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.mpi

+from vayesta.mpi.interface import MPI_Interface
+from vayesta.mpi.rma import RMA_Dict
+
+mpi = None
+
+
[docs]def init_mpi(use_mpi, required=True): + global mpi + if use_mpi: + mpi = MPI_Interface('mpi4py', required=required) + else: + mpi = MPI_Interface(None) + return mpi
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/mpi/interface.html b/_modules/vayesta/mpi/interface.html new file mode 100644 index 000000000..bf2b48933 --- /dev/null +++ b/_modules/vayesta/mpi/interface.html @@ -0,0 +1,322 @@ + + + + + + vayesta.mpi.interface — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.mpi.interface

+from collections import namedtuple
+import logging
+import functools
+from timeit import default_timer
+import numpy as np
+import vayesta
+from vayesta.core.util import log_time, memory_string
+from vayesta.mpi.rma import RMA_Dict
+from vayesta.mpi.scf import scf_with_mpi
+from vayesta.mpi.scf import gdf_with_mpi
+
+
+NdArrayMetadata = namedtuple('NdArrayMetadata', ['shape', 'dtype'])
+
+
[docs]class MPI_Interface: + + def __init__(self, mpi, required=False, log=None): + self.log = log or logging.getLogger(__name__) + if mpi == 'mpi4py': + mpi = self._import_mpi4py(required=required) + if mpi: + self.MPI = mpi + self.world = mpi.COMM_WORLD + self.rank = self.world.Get_rank() + self.size = self.world.Get_size() + self.timer = mpi.Wtime + else: + self.MPI = None + self.world = None + self.rank = 0 + self.size = 1 + self.timer = default_timer + self._tag = -1 + + def _import_mpi4py(self, required=True): + try: + import mpi4py + mpi4py.rc.threads = False + from mpi4py import MPI as mpi + return mpi + except (ModuleNotFoundError, ImportError) as e: + if required: + self.log.critical("mpi4py not found.") + raise e + self.log.debug("mpi4py not found.") + return None + + def __len__(self): + return self.size + + def __bool__(self): + return self.enabled + + @property + def enabled(self): + return (self.size > 1) + + @property + def disabled(self): + return not self.enabled + + @property + def is_master(self): + return (self.rank == 0) + +
[docs] def get_new_tag(self): + self._tag += 1 + return self._tag
+ +
[docs] def nreduce(self, *args, target=None, logfunc=None, **kwargs): + """(All)reduce multiple arguments. + + TODO: + * Use Allreduce/Reduce for NumPy types + * combine multiple *args of same dtype into a single array, + to reduce communication overhead. + """ + if logfunc is None: + logfunc = vayesta.log.timingv + if target is None: + with log_time(logfunc, "Time for MPI allreduce: %s"): + res = [self.world.allreduce(x, **kwargs) for x in args] + else: + with log_time(logfunc, "Time for MPI reduce: %s"): + res = [self.world.reduce(x, root=target, **kwargs) for x in args] + if len(res) == 1: + return res[0] + return tuple(res)
+ +
[docs] def bcast(self, obj, root=0): + """Common function to broadcast NumPy arrays or general objects. + + Parameters + ---------- + obj: ndarray or Any + Array or object to be broadcasted. + root: int + Root MPI process. + + Returns + ------- + obj: ndarray or Any + Broadcasted array or object. + """ + # --- First bcast using the pickle interface + # if obj is a NumPy array, only broadcast the shape and dtype information, + # within a NdArrayMetadata object. Otherwise, broadcast the object itself. + if self.rank == root: + if isinstance(obj, np.ndarray): + data = NdArrayMetadata(obj.shape, obj.dtype) + else: + data = obj + else: + data = None + data = self.world.bcast(data, root=root) + # If the object itself was broadcasted, we can return here: + if not isinstance(data, NdArrayMetadata): + return data + + # --- Second Bcast using buffer interface + if self.rank == root: + obj = np.ascontiguousarray(obj) + else: + obj = np.empty(data.shape, dtype=data.dtype) + self.log.debug("Broadcasting array: size= %d memory= %s", obj.size, memory_string(obj.nbytes)) + self.world.Bcast(obj, root=root) + return obj
+ + # --- Function wrapper at embedding level + # --------------------------------------- + +
[docs] def with_reduce(self, **mpi_kwargs): + def decorator(func): + # No MPI: + if self.disabled: + return func + @functools.wraps(func) + def wrapper(*args, **kwargs): + res = func(*args, **kwargs) + res = self.world.reduce(res, **mpi_kwargs) + return res + return wrapper + return decorator
+ +
[docs] def with_allreduce(self, **mpi_kwargs): + def decorator(func): + # No MPI: + if self.disabled: + return func + @functools.wraps(func) + def wrapper(*args, **kwargs): + res = func(*args, **kwargs) + res = self.world.allreduce(res, **mpi_kwargs) + return res + return wrapper + return decorator
+ +
[docs] def only_master(self): + def decorator(func): + # No MPI: + if self.disabled: + return func + @functools.wraps(func) + def wrapper(*args, **kwargs): + if not self.is_master: + return None + return func(*args, **kwargs) + return wrapper + return decorator
+ + # --- Function wrapper at fragment level + # -------------------------------------- + +
[docs] def with_send(self, source, dest=0, tag=None, **mpi_kwargs): + def decorator(func): + # No MPI: + if self.disabled: + return func + # With MPI: + tag2 = self.get_new_tag() if tag is None else tag + @functools.wraps(func) + def wrapper(*args, **kwargs): + if callable(source): + src = source(*args) + else: + src = source + if self.rank == src: + res = func(*args, **kwargs) + if (self.rank != dest): + self.log.debugv("MPI[%d]<send>: func=%s dest=%d", self.rank, func.__name__, dest) + self.world.send(res, dest=dest, tag=tag2, **mpi_kwargs) + self.log.debugv("MPI[%d]<send>: done", self.rank) + return res + elif self.rank == dest: + self.log.debugv("MPI[%d] <recv>: func=%s source=%d", self.rank, func.__name__, src) + res = self.world.recv(source=src, tag=tag2, **mpi_kwargs) + self.log.debugv("MPI[%d] <recv>: type= %r done!", self.rank, type(res)) + return res + else: + self.log.debugv("MPI[%d] <do nothing> func=%s source=%d ", self.rank, func.__name__, src) + return None + return wrapper + return decorator
+ +
[docs] def create_rma_dict(self, dictionary): + return RMA_Dict.from_dict(self, dictionary)
+ + # --- PySCF decorators + # -------------------- + +
[docs] def scf(self, mf, mpi_rank=0, log=None): + return scf_with_mpi(self, mf, mpi_rank=mpi_rank, log=log)
+ +
[docs] def gdf(self, df, mpi_rank=0, log=None): + return gdf_with_mpi(self, df, mpi_rank=mpi_rank, log=log)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/mpi/rma.html b/_modules/vayesta/mpi/rma.html new file mode 100644 index 000000000..60ada2e34 --- /dev/null +++ b/_modules/vayesta/mpi/rma.html @@ -0,0 +1,330 @@ + + + + + + vayesta.mpi.rma — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.mpi.rma

+import logging
+from contextlib import contextmanager
+
+import numpy as np
+
+log = logging.getLogger(__name__)
+
+
+
[docs]class RMA_Dict: + + def __init__(self, mpi): + self.mpi = mpi + self._writable = False + self.local_data = {} + self._elements = {} + +
[docs] @classmethod + def from_dict(cls, mpi, dictionary): + rma_dict = RMA_Dict(mpi) + with rma_dict.writable(): + for key, val in dictionary.items(): + rma_dict[key] = val + return rma_dict
+ +
[docs] class RMA_DictElement: + + def __init__(self, collection, location, data=None, shape=None, dtype=None): + self.collection = collection + self.location = location + self.shape = shape + self.dtype = dtype + + # Allocate RMA Window and put data + self.win = None + if self.dtype != type(None): + if (self.mpi.rank == self.location): + self.local_init(data) + else: + self.remote_init() + +
[docs] def local_init(self, data): + #if data is not None: + # winsize = (data.size * data.dtype.itemsize) + #else: + # winsize = 0 + #self.win = self.mpi.MPI.Win.Allocate(winsize, comm=self.mpi.world) + #self.win = self.mpi.MPI.Win.Create(data, comm=self.mpi.world) + #if data is None: + # return + + winsize = (data.size * data.dtype.itemsize) + self.win = self.mpi.MPI.Win.Allocate(winsize, comm=self.mpi.world) + assert (self.shape == data.shape) + assert (self.dtype == data.dtype) + self.rma_lock() + self.rma_put(data) + self.rma_unlock()
+ +
[docs] def remote_init(self): + #if self.dtype == type(None): + # return + self.win = self.mpi.MPI.Win.Allocate(0, comm=self.mpi.world)
+ #self.win = self.mpi.MPI.Win.Create(None, comm=self.mpi.world) + #buf = np.empty(self.shape, dtype=self.dtype) + #self.win = self.mpi.MPI.Win.Create(buf, comm=self.mpi.world) + + @property + def size(self): + if self.shape is None: + return 0 + return np.product(self.shape) + + #@property + #def itemsize(self): + # if self.dtype is type(None): + # return 0 + # return self.dtype.itemsize + + #@property + #def winsize(self): + # return self.size * self.itemsize + +
[docs] def get(self, shared_lock=True): + if self.dtype == type(None): + return None + buf = np.empty(self.shape, dtype=self.dtype) + self.rma_lock(shared_lock=shared_lock) + self.rma_get(buf) + self.rma_unlock() + return buf
+ + @property + def mpi(self): + return self.collection.mpi + +
[docs] def rma_lock(self, shared_lock=False, **kwargs): + if shared_lock: + return self.win.Lock(self.location, lock_type=self.mpi.MPI.LOCK_SHARED, **kwargs) + return self.win.Lock(self.location)
+ +
[docs] def rma_unlock(self, **kwargs): + return self.win.Unlock(self.location, **kwargs)
+ +
[docs] def rma_put(self, data, **kwargs): + return self.win.Put(data, target_rank=self.location, **kwargs)
+ +
[docs] def rma_get(self, buf, **kwargs): + return self.win.Get(buf, target_rank=self.location, **kwargs)
+ +
[docs] def free(self): + return self.win.Free()
+ + @property + def readable(self): + return not self._writable + + def __getitem__(self, key): + if not self.readable: + raise AttributeError("Cannot read from ArrayCollection from inside with-statement.") + # Is local access without going via MPI.Get safe? + #if key in self.local_data: + # return self.local_data[key] + if self.mpi.disabled: + return self._elements[key] + element = self._elements[key] + log.debugv("RMA: origin= %d, target= %d, key= %r, shape= %r, dtype= %r", self.mpi.rank, element.location, key, element.shape, element.dtype) + return element.get() + + def __setitem__(self, key, value): + if not self._writable: + raise AttributeError("Cannot write to ArrayCollection outside of with-statement.") + if not isinstance(value, (np.ndarray, type(None))): + #value = np.asarray(value) + raise ValueError("Invalid type= %r" % type(value)) + if self.mpi.disabled: + self._elements[key] = value + return + self.local_data[key] = value + + def __delitem__(self, key): + if not self._writable: + raise AttributeError("Cannot write to ArrayCollection outside of with-statement.") + del self._elements[key] + + def __enter__(self): + self._writable = True + return self + + def __exit__(self, type, value, traceback): + self._writable = False + self.synchronize() + +
[docs] def clear(self): + if self.mpi.enabled: + for item in self.values(): + item.free() + self._elements.clear()
+ +
[docs] @contextmanager + def writable(self): + try: + yield self.__enter__() + finally: + self.__exit__(None, None, None)
+ + def _get_metadata(self): + """Get shapes and datatypes of local data.""" + #return {key: (getattr(val, 'shape', None), getattr(val, 'dtype', type(None))) for key, val in self.local_data.items()} + mdata = {} + for key, val in self.local_data.items(): + shape = getattr(val, 'shape', None) + dtype = getattr(val, 'dtype', type(None)) + mdata[key] = (shape, dtype) + return mdata + + def __contains__(self, key): + return key in self.keys() + + def __len__(self): + return len(self.keys()) + +
[docs] def keys(self): + if not self.readable: + raise RuntimeError("Cannot access keys inside of with-statement.""") + return self._elements.keys()
+ +
[docs] def values(self): + if not self.readable: + raise RuntimeError("Cannot access values inside of with-statement.""") + return self._elements.values()
+ +
[docs] def get_location(self, key): + return self._elements[key].location
+ +
[docs] def get_shape(self, key): + return self._elements[key].shape
+ +
[docs] def get_dtype(self, key): + return self._elements[key].dtype
+ +
[docs] def synchronize(self): + """Synchronize keys and metadata over all MPI ranks.""" + if self.mpi.disabled: + return + self.mpi.world.Barrier() + mdata = self._get_metadata() + allmdata = self.mpi.world.allgather(mdata) + assert (len(allmdata) == len(self.mpi)) + elements = {} + for rank, d in enumerate(allmdata): + for key, mdata in d.items(): + #print("Rank %d has key: %r" % (rank, key)) + if key in elements: + raise AttributeError("Key '%s' used multiple times. Keys need to be unique." % key) + shape, dtype = mdata + if rank == self.mpi.rank: + data = self.local_data[key] + elements[key] = self.RMA_DictElement(self, location=rank, data=data, shape=shape, dtype=dtype) + else: + elements[key] = self.RMA_DictElement(self, location=rank, shape=shape, dtype=dtype) + self._elements.update(elements) + self.mpi.world.Barrier() + self.local_data = {}
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/mpi/scf.html b/_modules/vayesta/mpi/scf.html new file mode 100644 index 000000000..3880c488f --- /dev/null +++ b/_modules/vayesta/mpi/scf.html @@ -0,0 +1,192 @@ + + + + + + vayesta.mpi.scf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.mpi.scf

+import functools
+import logging
+import pyscf
+import pyscf.df
+import pyscf.pbc
+import pyscf.pbc.df
+from vayesta.core.util import log_time
+
+
+
[docs]def scf_with_mpi(mpi, mf, mpi_rank=0, log=None): + """Use to run SCF only on the master node and broadcast result afterwards.""" + + if not mpi: + return mf + + kernel_orig = mf.kernel + log = log or mpi.log or logging.getLogger(__name__) + + def mpi_kernel(self, *args, **kwargs): + df = getattr(self, 'with_df', None) + if mpi.rank == mpi_rank: + log.info("MPI rank= %3d is running SCF", mpi.rank) + with log_time(log.timing, "Time for SCF: %s"): + res = kernel_orig(*args, **kwargs) + log.info("MPI rank= %3d finished SCF", mpi.rank) + else: + res = None + # Generate auxiliary cell, compensation basis etc,..., but not 3c integrals: + if df is not None: + # Molecules + if getattr(df, 'auxmol', False) is None: + df.auxmol = pyscf.df.addons.make_auxmol(df.mol, df.auxbasis) + # Solids + elif getattr(df, 'auxcell', False) is None: + df.build(with_j3c=False) + log.info("MPI rank= %3d is waiting for SCF results", mpi.rank) + mpi.world.barrier() + + # Broadcast results + bcast = functools.partial(mpi.bcast, root=mpi_rank) + with log_time(log.timing, "Time for MPI broadcast of SCF results: %s"): + res = bcast(res) + if df is not None: + df._cderi = bcast(df._cderi) + self.converged = bcast(self.converged) + self.e_tot = bcast(self.e_tot) + self.mo_energy = bcast(self.mo_energy) + self.mo_occ = bcast(self.mo_occ) + self.mo_coeff = bcast(self.mo_coeff) + return res + + mf.kernel = mpi_kernel.__get__(mf) + mf.with_mpi = True + + return mf
+ + +
[docs]def gdf_with_mpi(mpi, df, mpi_rank=0, log=None): + + log = log or mpi.log or logging.getLogger(__name__) + + if not isinstance(df._cderi_to_save, str): + raise NotImplementedError + + build_orig = df.build + + pbc = isinstance(df, pyscf.pbc.df.GDF) + + cderi_file = getattr(df._cderi_to_save, 'name', df._cderi_to_save) + df._cderi_to_save = mpi.world.bcast(cderi_file, root=mpi_rank) + log.debug("df._cderi_to_save= %s", df._cderi_to_save) + + def mpi_build(self, *args, **kwargs): + if mpi.rank == mpi_rank: + res = build_orig(*args, **kwargs) + else: + res = build_orig(*args, with_j3c=False, **kwargs) if pbc else None + df._cderi = df._cderi_to_save + mpi.world.barrier() + return res + + df.build = mpi_build.__get__(df) + df.with_mpi = True + + return df
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/rpa.html b/_modules/vayesta/rpa.html new file mode 100644 index 000000000..124e446a7 --- /dev/null +++ b/_modules/vayesta/rpa.html @@ -0,0 +1,124 @@ + + + + + + vayesta.rpa — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.rpa

+"""Random Phase Approximation (RPA)
+Author: Charles Scott
+email:  cjcargillscott@gmail.com
+"""
+
+from vayesta.rpa.rirpa import ssRIRPA
+from vayesta.rpa.rpa import RPA
+from vayesta.rpa.ssrpa import ssRRPA
+from vayesta.rpa.ssurpa import ssURPA
+
+import pyscf.scf
+
+
+
[docs]def ssRPA(mf, *args, **kwargs): + """Determine restricted or unrestricted by inspection of mean-field object""" + if isinstance(mf, pyscf.scf.uhf.UHF): + return ssURPA(mf, *args, **kwargs) + return ssRRPA(mf, *args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/rpa/rirpa.html b/_modules/vayesta/rpa/rirpa.html new file mode 100644 index 000000000..edfd6dabf --- /dev/null +++ b/_modules/vayesta/rpa/rirpa.html @@ -0,0 +1,116 @@ + + + + + + vayesta.rpa.rirpa — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.rpa.rirpa

+from vayesta.rpa.rirpa.RIRPA import ssRIRRPA
+from vayesta.rpa.rirpa.RIURPA import ssRIURPA
+import pyscf.scf
+
+
+
[docs]def ssRIRPA(mf, *args, **kwargs): + if isinstance(mf, pyscf.scf.uhf.UHF): + return ssRIURPA(mf, *args, **kwargs) + return ssRIRRPA(mf, *args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/rpa/rirpa/NI_eval.html b/_modules/vayesta/rpa/rirpa/NI_eval.html new file mode 100644 index 000000000..af0b275b3 --- /dev/null +++ b/_modules/vayesta/rpa/rirpa/NI_eval.html @@ -0,0 +1,570 @@ + + + + + + vayesta.rpa.rirpa.NI_eval — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.rpa.rirpa.NI_eval

+import numpy as np
+import scipy.integrate
+import scipy.optimize
+
+
+
[docs]class NIException(BaseException): + pass
+ + +
[docs]class NumericalIntegratorBase: + """Abstract base class for numerical integration over semi-infinite and infinite limits. + Subclasses implementing a specific quadrature need to define + + Subclasses implementing specific evaluations need to define: + .eval_contrib + .eval_diag_contrib + .eval_diag_deriv_contrib + .eval_diag_deriv2_contrib + .eval_diag_exact + A new .__init__ assigning any required attributes and a .fix_params may also be required, depending upon the + particular form of the integral to be approximated. + Might be able to write this as a factory class, but this'll do for now. + """ + + def __init__(self, out_shape, diag_shape, npoints, log): + self.log = log + self.out_shape = out_shape + self.diag_shape = diag_shape + self.npoints = npoints + + @property + def npoints(self): + return self._npoints + + @npoints.setter + def npoints(self, value): + self._npoints = value + +
[docs] def get_quad(self, a): + """Generate the appropriate Clenshaw-Curtis quadrature points and weights.""" + return NotImplementedError
+ +
[docs] def eval_contrib(self, freq): + """Evaluate contribution to numerical integral of result at given frequency point.""" + raise NotImplementedError
+ +
[docs] def eval_diag_contrib(self, freq): + """Evaluate contribution to integral of diagonal approximation at given frequency point.""" + raise NotImplementedError
+ +
[docs] def eval_diag_deriv_contrib(self, freq): + """Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, + w.r.t that frequency point.""" + raise NotImplementedError
+ +
[docs] def eval_diag_deriv2_contrib(self, freq): + """Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, + w.r.t that frequency point.""" + raise NotImplementedError
+ +
[docs] def eval_diag_exact(self): + """Provides an exact evaluation of the integral for the diagonal approximation.""" + raise NotImplementedError
+ + def _NI_eval(self, a, res_shape, evaluator): + """Base function to perform numerical integration with provided quadrature grid.""" + quadrature = self.get_quad(a) + integral = np.zeros(res_shape) + for point, weight in zip(*quadrature): + contrib = evaluator(point) + assert contrib.shape == res_shape + integral += weight * contrib + + return integral + + def _NI_eval_w_error(self, *args): + raise NotImplementedError( + "Error estimation only available with naturally nested quadratures (current just Clenshaw-Curtis)." + ) + + def _NI_eval_deriv(self, a, res_shape, evaluator): + """Base function to perform numerical integration with provided quadrature grid.""" + quadrature = self.get_quad(a) + integral = np.zeros(res_shape) + for point, weight in zip(*quadrature): + contrib = evaluator(point, weight, a) + assert contrib.shape == res_shape + integral += contrib + return integral + +
[docs] def eval_NI_approx(self, a): + """Evaluate the NI approximation of the integral with a provided quadrature.""" + return self._NI_eval(a, self.out_shape, self.eval_contrib), None
+ +
[docs] def eval_diag_NI_approx(self, a): + """Evaluate the NI approximation to the diagonal approximation of the integral.""" + return self._NI_eval(a, self.diag_shape, self.eval_diag_contrib)
+ +
[docs] def eval_diag_NI_approx_grad(self, a): + """Evaluate the gradient w.r.t a of NI diagonal expression. + Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary + parameter `a', so we can use the same expressions for the derivatives.""" + + def get_grad_contrib(freq, weight, a): + contrib = self.eval_diag_contrib(freq) + deriv = self.eval_diag_deriv_contrib(freq) + return (weight / a) * contrib + weight * (freq / a) * deriv + + return self._NI_eval_deriv(a, self.diag_shape, get_grad_contrib)
+ +
[docs] def eval_diag_NI_approx_deriv2(self, a): + """Evaluate the second derivative w.r.t a of NI diagonal expression. + Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary + parameter `a', so we can use the same expressions for the derivatives.""" + + def get_deriv2_contrib(freq, weight, a): + deriv = self.eval_diag_deriv_contrib(freq) + deriv2 = self.eval_diag_deriv2_contrib(freq) + return ( + 2 * (weight / a) * (freq / a) * deriv + + weight * (freq / a) ** 2 * deriv2 + ) + + return self._NI_eval_deriv(a, self.diag_shape, get_deriv2_contrib)
+ +
[docs] def test_diag_derivs(self, a, delta=1e-6): + freq = np.random.rand() * a + self.log.info( + "Testing gradients w.r.t variation of omega at random frequency point=%8.6e:", + freq, + ) + grad_1 = self.eval_diag_deriv_contrib(freq) + deriv2_1 = self.eval_diag_deriv2_contrib(freq) + grad_2 = ( + self.eval_diag_contrib(freq + delta / 2) + - self.eval_diag_contrib(freq - delta / 2) + ) / delta + deriv2_2 = ( + self.eval_diag_deriv_contrib(freq + delta / 2) + - self.eval_diag_deriv_contrib(freq - delta / 2) + ) / delta + self.log.info("Max Grad Error=%6.4e", abs(grad_1 - grad_2).max()) + self.log.info("Max Deriv2 Error=%6.4e", abs(deriv2_1 - deriv2_2).max()) + + self.log.info("Testing ensemble gradients w.r.t variation of a:") + grad_1 = self.eval_diag_NI_approx_grad(a) + deriv2_1 = self.eval_diag_NI_approx_deriv2(a) + grad_2 = ( + self.eval_diag_NI_approx(a + delta / 2) + - self.eval_diag_NI_approx(a - delta / 2) + ) / delta + deriv2_2 = ( + self.eval_diag_NI_approx_grad(a + delta / 2) + - self.eval_diag_NI_approx_grad(a - delta / 2) + ) / delta + self.log.info("Max Grad Error=%6.4e", abs(grad_1 - grad_2).max()) + self.log.info("Max Deriv2 Error=%6.4e", abs(deriv2_1 - deriv2_2).max())
+ +
[docs] def opt_quadrature_diag(self, ainit=None): + """Optimise the quadrature to exactly integrate a diagonal approximation to the integral""" + + def get_val(a): + val = (self.eval_diag_NI_approx(a) - self.eval_diag_exact()).sum() + return val + + def get_grad(a): + return self.eval_diag_NI_approx_grad(a).sum() + + def get_deriv2(a): + return self.eval_diag_NI_approx_deriv2(a).sum() + + def find_good_start(ainit=1e-6, scale_fac=10.0, maxval=1e8, relevance_factor=5): + """Using a quick exponential search, find the lowest value of the penalty function and from this obtain + good guesses for the optimum and a good bound on either side. + Note that the size of resulting bracket will be proportional to both the optimal value and the scaling + factor.""" + max_exp = int(np.log(maxval / ainit) / np.log(scale_fac)) + vals = np.array([ainit * scale_fac**x for x in range(max_exp)]) + fvals = np.array([abs(get_val(x)) for x in vals]) + optarg = fvals.argmin() + optval = fvals[optarg] + # Now find the values which are within reach of lowest value + relevant = np.where(fvals < relevance_factor * optval)[0] + + minarg = min(relevant[0], optarg - 1) + maxarg = min(relevant[-1], optarg + 1) + return [ainit * scale_fac**x for x in (optarg, minarg, maxarg)] + + solve = 1 + ainit, mini, maxi = find_good_start() + try: + solve, res = scipy.optimize.newton( + get_val, + x0=ainit, + fprime=get_grad, + tol=1e-8, + maxiter=30, + fprime2=get_deriv2, + full_output=True, + ) + except (RuntimeError, NIException): + opt_min = True + else: + # Did we find a root? + opt_min = not res.converged + if opt_min: + res = scipy.optimize.minimize_scalar( + lambda freq: abs(get_val(freq)), bounds=(mini, maxi), method="bounded" + ) + if not res.success: + raise NIException("Could not optimise `a' value.") + solve = res.x + self.log.info( + "Used minimisation to optimise quadrature grid: a= %.2e penalty value= %.2e " + "(smaller is better)", + solve, + res.fun, + ) + return solve
+ +
[docs] def fix_params(self): + """If required set parameters within ansatz; defined to ensure hook for functionality in future, will + not always be needed.""" + pass
+ +
[docs] def get_offset(self): + return np.zeros(self.out_shape)
+ +
[docs] def kernel(self, a=None, opt_quad=True): + """Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, + optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full + expression.""" + self.fix_params() + if opt_quad: + a = self.opt_quadrature_diag(a) + else: + if a is None: + raise ValueError( + "A value for the quadrature scaling parameter a must be provided if optimisation is not" + "permitted." + ) + integral, errors = self.eval_NI_approx(a) + return integral + self.get_offset(), errors
+ +
[docs] def kernel_adaptive(self): + self.fix_params() + integral, err, info = scipy.integrate.quad_vec( + self.eval_contrib, + a=0.0, + b=np.inf, + norm="max", + epsabs=1e-4, + epsrel=1e-200, + full_output=True, + ) + if not info.success: + raise NIException( + "Adaptive gaussian quadrature could not compute integral." + ) + else: + self.log.info( + "Successfully computed integral via adaptive quadrature using %d evaluations with estimated error of %6.4e", + info.neval, + err, + ) + return integral + self.get_offset(), err
+ +
[docs] def l2_scan(self, freqs): + return [np.linalg.norm(self.eval_contrib(x)) for x in freqs]
+ +
[docs] def max_scan(self, freqs): + return [abs(self.eval_contrib(x)).max() for x in freqs]
+ +
[docs] def get_quad_vals(self, a, l2norm=True): + quadrature = self.get_quad(a) + getnorm = np.linalg.norm if l2norm else lambda x: abs(x).max() + points = [x[0] for x in quadrature] + vals = [getnorm(self.eval_contrib(p)) for p in points] + return points, vals
+ + +
[docs]class NumericalIntegratorClenCur(NumericalIntegratorBase): + @property + def npoints(self): + return self._npoints + + @npoints.setter + def npoints(self, value): + if value % 4 != 0: + value += 4 - value % 4 + self.log.warning( + "Npoints increased to next multiple of 4 (%d) to allow error estimation.", + value, + ) + self._npoints = value + + def _NI_eval_w_error(self, a, res_shape, evaluator): + """Base function to perform numerical integration with provided quadrature grid. + Since Clenshaw-Curtis quadrature is naturally nested, we can generate an error estimate straightforwardly.""" + quadrature = self.get_quad(a) + integral = np.zeros(res_shape) + integral_half = np.zeros(res_shape) + integral_quarter = np.zeros(res_shape) + + for i, (point, weight) in enumerate(zip(*quadrature)): + contrib = evaluator(point) + assert contrib.shape == res_shape + integral += weight * contrib + if i % 2 == 0: + integral_half += 2 * weight * contrib + if i % 4 == 0: + integral_quarter += 4 * weight * contrib + + a = scipy.linalg.norm(integral_quarter - integral) + b = scipy.linalg.norm(integral_half - integral) + error = self.calculate_error(a, b) + self.log.info( + "Numerical Integration performed with estimated L2 norm error %6.4e.", error + ) + return integral, error + +
[docs] def calculate_error(self, a, b): + """Calculate error by solving cubic equation to model convergence as \alpha e^{-\beta n_p}. + This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so + generally overestimates the resulting error, which suits us well. + This also overestimates the error since it doesn't account for the effect of quadrature grid optimisation, which + leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter. + + This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104. + + To understand the general behaviour of this approach, we can instead consider the simpler approximation that + the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of + the error resulting from our most accurate estimate as + error = b ** 3 / a ** 2 + with the error in this approximation given by + error_error = b ** 2 / a ** 2. + """ + if a - b < 1e-10: + self.log.info("RIRPA error numerically zero.") + return 0.0 + # This is Eq. 103 from https://arxiv.org/abs/2301.09107 + roots = np.roots([1, 0, a / (a - b), -b / (a - b)]) + # From physical considerations require real root between zero and one, since this is value of e^{-\beta n_p}. + # If there are multiple (if this is even possible) we take the largest. + real_roots = roots[abs(roots.imag) < 1e-10].real + if len(real_roots) > 1: + self.log.warning( + "Nested quadrature error estimation gives %d real roots. Taking smallest positive root.", + len(real_roots), + ) + else: + self.log.debug( + "Nested quadrature error estimation gives %d real root.", + len(real_roots), + ) + + if not (any((real_roots > 0) & (real_roots < 1))): + self.log.critical( + "No real root found between 0 and 1 in NI error estimation; returning nan." + ) + return np.nan + else: + # This defines the values of e^{-\beta n_p}, where we seek the value of \alpha e^{-4 \beta n_p} + wanted_root = real_roots[real_roots > 0.0].min() + # We could go via the steps + # exp_beta_4n = wanted_root ** 4 + # alpha = a * (exp_beta_n + exp_beta_4n**(1/4))**(-1) + # But instead go straight for + error = b / (1 + wanted_root ** (-2.0)) + return error
+ +
[docs] def eval_NI_approx(self, a): + """Evaluate the NI approximation of the integral with a provided quadrature.""" + return self._NI_eval_w_error(a, self.out_shape, self.eval_contrib)
+ + +
[docs]class NumericalIntegratorClenCurInfinite(NumericalIntegratorClenCur): + def __init__(self, out_shape, diag_shape, npoints, log, even): + super().__init__(out_shape, diag_shape, npoints, log) + self.even = even + +
[docs] def get_quad(self, a): + # Don't care about negative values, since grid should be symmetric about x=0. + return gen_ClenCur_quad_inf(a, self.npoints, self.even)
+ + +
[docs]class NumericalIntegratorClenCurSemiInfinite(NumericalIntegratorClenCur): + def __init__(self, out_shape, diag_shape, npoints, log): + super().__init__(out_shape, diag_shape, npoints, log) + +
[docs] def get_quad(self, a): + if a < 0: + raise NIException("Negative quadrature scaling factor not permitted.") + return gen_ClenCur_quad_semiinf(a, self.npoints)
+ + +
[docs]class NumericalIntegratorGaussianSemiInfinite(NumericalIntegratorBase): + def __init__(self, out_shape, diag_shape, npoints, log): + super().__init__(out_shape, diag_shape, npoints, log) + + @property + def npoints(self): + return len(self._points) + + @npoints.setter + def npoints(self, value): + """For Gaussian quadrature recalculating the points and weights every time won't be performant; + instead lets cache them each time npoints is changed.""" + if value > 100: + self.log.warning( + "Gauss-Laguerre quadrature with degree over 100 may be problematic due to numerical " + "ill-conditioning in the quadrature construction. Watch out for floating-point overflows!" + ) + self._points, self._weights = np.polynomial.laguerre.laggauss(value) + self._weights = np.array( + [w * np.exp(p) for (p, w) in zip(self._points, self._weights)] + ) + +
[docs] def get_quad(self, a): + if a < 0: + raise NIException("Negative quadrature scaling factor not permitted.") + return a * self._points, a * self._weights
+ + +
[docs]def gen_ClenCur_quad_inf(a, npoints, even=False): + """Generate quadrature points and weights for Clenshaw-Curtis quadrature over infinite range (-inf to +inf)""" + symfac = 1.0 + even + # If even we only want points up to t <= pi/2 + tvals = [(j / npoints) * (np.pi / symfac) for j in range(1, npoints + 1)] + + points = [a / np.tan(t) for t in tvals] + weights = [a * np.pi * symfac / (2 * npoints * (np.sin(t) ** 2)) for t in tvals] + if even: + weights[-1] /= 2 + return points, weights
+ + +
[docs]def gen_ClenCur_quad_semiinf(a, npoints): + """Generate quadrature points and weights for Clenshaw-Curtis quadrature over semiinfinite range (0 to +inf)""" + tvals = [(np.pi * j / (npoints + 1)) for j in range(1, npoints + 1)] + points = [a / (np.tan(t / 2) ** 2) for t in tvals] + jsums = [ + sum( + [np.sin(j * t) * (1 - np.cos(j * np.pi)) / j for j in range(1, npoints + 1)] + ) + for t in tvals + ] + weights = [ + a * (4 * np.sin(t) / ((npoints + 1) * (1 - np.cos(t)) ** 2)) * s + for (t, s) in zip(tvals, jsums) + ] + return points, weights
+ + +
[docs]class NICheckInf(NumericalIntegratorClenCurInfinite): + def __init__(self, exponent, npoints): + super().__init__((), (), npoints, even=True) + self.exponent = exponent + +
[docs] def eval_contrib(self, freq): + # return np.array(np.exp(-freq*self.exponent)) + return np.array((freq + 0.1) ** (-self.exponent))
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/rpa/rirpa/RIRPA.html b/_modules/vayesta/rpa/rirpa/RIRPA.html new file mode 100644 index 000000000..ec1b7c633 --- /dev/null +++ b/_modules/vayesta/rpa/rirpa/RIRPA.html @@ -0,0 +1,946 @@ + + + + + + vayesta.rpa.rirpa.RIRPA — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.rpa.rirpa.RIRPA

+import logging
+
+import numpy as np
+
+import pyscf.lib
+from vayesta.core.util import dot, einsum, time_string, timer
+from vayesta.rpa.rirpa import momzero_NI, energy_NI
+
+
+
[docs]class ssRIRPA: + """Approach based on equations expressed succinctly in the appendix of + Furche, F. (2001). PRB, 64(19), 195120. https://doi.org/10.1103/PhysRevB.64.195120 + WARNING: Should only be used with canonical mean-field orbital coefficients in mf.mo_coeff and RHF. + + Parameters + ---------- + dfmf : pyscf.scf.SCF + PySCF density-fitted mean-field object. + rixc : tuple of tuples or arrays, optional + low-rank decomposition of exchange-correlation kernel. First tuple separates two different spin channels, and + the second the left- and right-sides of an asymmetric decomposition. Default value is None. + log : logging object, optional + Default value is None. + err_tol : float, optional + Threshold defining estimated error at which to print various accuracy warnings. + Default value is 1e-6. + svd_tol : float, optional + Threshold defining negligible singular values when compressing various decompositions. + Default value is 1e-12. + Lpq : np.ndarray, optional + CDERIs in mo basis of provided mean field. + Default value is None. + compress : int, optional + How thoroughly to attempt compression of the low-rank representations of various matrices. + Thresholds are: + - above 0: Compress representation of (A+B)(A-B) once constructed, prior to main calculation. + - above 3: Compress representations of A+B and A-B separately prior to constructing (A+B)(A-B) or (A+B)^{-1} + - above 5: Compress representation of (A+B)^{-1} prior to contracting. This is basically never worthwhile. + Note that in all cases these compressions will have computational cost O(N_{aux}^2 ov), the same as our later + computations, and so a tradeoff must be made between reducing the N_{aux} in later calculations vs the cost + of compression. Default value is 0. + """ + + def __init__( + self, + dfmf, + rixc=None, + log=None, + err_tol=1e-6, + svd_tol=1e-12, + Lpq=None, + compress=0, + ): + self.mf = dfmf + self.rixc = rixc + self.log = log or logging.getLogger(__name__) + self.err_tol = err_tol + self.svd_tol = svd_tol + self.e_corr_ss = None + self.Lpq = Lpq + # Determine how many times to attempt compression of low-rank expressions for various matrices. + self.compress = compress + + @property + def nocc(self): + return sum(self.mf.mo_occ > 0) + + @property + def nvir(self): + return len(self.mf.mo_occ) - self.nocc + + @property + def naux_eri(self): + return self.mf.with_df.get_naoaux() + + @property + def ov(self): + return self.nocc * self.nvir + + @property + def ov_tot(self): + return 2 * self.ov + + @property + def mo_coeff(self): + """Occupied MO coefficients.""" + return self.mf.mo_coeff + + @property + def mo_coeff_occ(self): + """Occupied MO coefficients.""" + return self.mo_coeff[:, : self.nocc] + + @property + def mo_coeff_vir(self): + """Virtual MO coefficients.""" + return self.mo_coeff[:, self.nocc :] + + @property + def mo_energy(self): + return self.mf.mo_energy + + @property + def mo_energy_occ(self): + return self.mo_energy[: self.nocc] + + @property + def mo_energy_vir(self): + return self.mo_energy[self.nocc :] + + @property + def e_corr(self): + try: + return self.e_corr_ss + except AttributeError as e: + self.log.critical("Can only access rpa.e_corr after running rpa.kernel.") + + @property + def e_tot(self): + return self.mf.e_tot + self.e_corr + + @property + def D(self): + eps = np.zeros((self.nocc, self.nvir)) + eps = eps + self.mo_energy_vir + eps = (eps.T - self.mo_energy_occ).T + eps = eps.reshape((self.ov,)) + D = np.concatenate([eps, eps]) + return D + +
[docs] def kernel_moms(self, max_moment, target_rot=None, **kwargs): + """Calculates all density-density moments up to and including `max_moment' with one index projected into + `target_rot' space. + For details of numerical integration approach see https://arxiv.org/abs/2301.09107. + + Runtime: O(n_{points} ((n_{target} + n_{aux}) n_{aux} ov + n_{aux}^3) + + Parameters + ---------- + max_moment: int + Maximum moment of the dd response to return. + target_rot: array_like, of size (n_{target}, o_a v_a + o_b v_b) + Projector for one index of the moment. + npoints: int, optional. + Integer number of points to use in numerical integrations; will be increased to next highest multiple of + 4 for error estimation purposes. Default: 48 (excessive). + integral_deduct: str, optional. + What terms to deduct from numerical integration. + Options are "HO" (default), "D", and None, corresponding to deducting both the mean-field contribution + and additional higher-order terms, just the mean-field contribution, or nothing. + For discussion of the specific approaches see Appendix A of https://arxiv.org/abs/2301.09107. + ainit: float, optional. + Value of grid scaling to initialise optimisation from. If `opt_quad' is False, this value of a is used. + Default: 10.0 + opt_quad: bool, optional. + Whether to optimise the grid spacing `a'. Default: True + adaptive_quad: bool, optional. + Whether to use scipy adaptive quadrature for calculation. Requires prohibitively more evaluations but can + provide validation of usual approach. Default: False + alpha: float, optional. + Value or electron interaction scaling in adiabatic connection. Default: 1.0 + ri_decomps: iterable of three tuples of array_like or None, optional. + Low-rank RI expressions (S_L,S_R) for (A-B)(A+B), A+B and A-B, such that the non-diagonal contribution + to each is given by S_L S_R^T. If `None' these will be contructed at O(N^4) cost. Default: None + analytic_lower_bound: bool, optional. + Whether to compute analytic lower bound on the error of the computed zeroth dd moment. Computation + requires O(N^4) operation, and given limited utility of lower bound this is optional. + Default: False. + Returns + ------- + moments: array_like, shape (max_moment + 1, n_{tar}, o_a v_a + o_b v_b) + Array storing the i^th dd moment in the space defined by `target_rot' in moments[i]. + err0: tuple. + Bounds on the error, in form (upper_bound, lower_bound). If `analytic_lower_bound'=False lower bound + will be None. + """ + t_start = timer() + + if target_rot is None: + self.log.warning( + "Warning; generating full moment rather than local component. Will scale as O(N^5)." + ) + target_rot = np.eye(self.ov_tot) + + ri_decomps = self.get_compressed_MP() + ri_mp, ri_apb, ri_amb = ri_decomps + # First need to calculate zeroth moment. + moments = np.zeros((max_moment + 1,) + target_rot.shape) + moments[0], err0 = self._kernel_mom0( + target_rot, ri_decomps=ri_decomps, **kwargs + ) + + t_start_higher = timer() + if max_moment > 0: + # Grab mean. + D = self.D + moments[1] = einsum("pq,q->pq", target_rot, D) + dot( + target_rot, ri_amb[0].T, ri_amb[1] + ) + + if max_moment > 1: + for i in range(2, max_moment + 1): + moments[i] = einsum("pq,q->pq", moments[i - 2], D**2) + dot( + moments[i - 2], ri_mp[1].T, ri_mp[0] + ) + if max_moment > 0: + self.log.info( + "RIRPA Higher Moments wall time: %s", + time_string(timer() - t_start_higher), + ) + self.log.info( + "Overall RIRPA Moments wall time: %s", time_string(timer() - t_start) + ) + return moments, err0
+ + def _kernel_mom0( + self, + target_rot=None, + npoints=48, + ainit=10, + integral_deduct="HO", + opt_quad=True, + adaptive_quad=False, + alpha=1.0, + ri_decomps=None, + return_niworker=False, + analytic_lower_bound=False, + ): + """ + Most inputs documented in `kernel_moms'. + + Parameters + ---------- + return_niworker: bool, optional. + Whether to return the objects responsible for the work of numerical integration, rather than performing + computation and returning results. Used to allow plotting of integrands. + If this is True the function instead returns `ni_worker_integrand', `ni_worker_offset', that is the + lower-level objects responsible for each numerical integrations; `ni_worker_offset' is None unless + `integral_deduct'="HO". + Default: False. + + Returns + ------- + mom0: array_like, shape (n_{tar}, o_a v_a + o_b v_b) + Zeroth moment estimate. + errs: tuple of floats. + Error estimate in zeroth moment computation. + """ + t_start = timer() + if target_rot is None: + self.log.warning( + "Warning; generating full moment rather than local component. Will scale as O(N^5)." + ) + target_rot = np.eye(self.ov_tot) + if ri_decomps is None: + ri_mp, ri_apb, ri_amb = self.get_compressed_MP(alpha) + else: + ri_mp, ri_apb, ri_amb = ri_decomps + + # We our integral as + # integral = (MP)^{1/2} - (moment_offset) P - integral_offset + # and so + # eta0 = (integral + integral_offset) P^{-1} + moment_offset + offset_niworker = None + inputs = (self.D, ri_mp[0], ri_mp[1], target_rot, npoints, self.log) + if integral_deduct == "D": + # Evaluate (MP)^{1/2} - D, + niworker = momzero_NI.MomzeroDeductD(*inputs) + integral_offset = einsum("lp,p->lp", target_rot, self.D) + moment_offset = np.zeros_like(target_rot) + elif integral_deduct is None: + # Explicitly evaluate (MP)^{1/2}, with no offsets. + niworker = momzero_NI.MomzeroDeductNone(*inputs) + integral_offset = np.zeros_like(target_rot) + moment_offset = np.zeros_like(target_rot) + elif integral_deduct == "HO": + niworker = momzero_NI.MomzeroDeductHigherOrder(*inputs) + offset_niworker = momzero_NI.MomzeroOffsetCalcGaussLag(*inputs) + estval, offset_err = offset_niworker.kernel() + # This computes the required value analytically, but at N^5 cost. Just keeping around for debugging. + # mat = np.zeros(self.D.shape * 2) + # mat = mat + self.D + # mat = (mat.T + self.D).T + # estval2 = einsum("rp,pq,np,nq->rq", target_rot, mat ** (-1), ri_mp[0], ri_mp[1]) + # self.log.info("Error in numerical Offset Approximation=%6.4e",abs(estval - estval2).max()) + integral_offset = einsum("lp,p->lp", target_rot, self.D) + estval + moment_offset = np.zeros_like(target_rot) + else: + raise ValueError("Unknown integral offset specification.`") + + if return_niworker: + return niworker, offset_niworker + + # niworker.test_diag_derivs(4.0) + if adaptive_quad: + # Can also make use of scipy adaptive quadrature routines; this is more expensive but a good sense-check. + integral, upper_bound = 2 * niworker.kernel_adaptive() + else: + integral, upper_bound = niworker.kernel(a=ainit, opt_quad=opt_quad) + # Need to construct RI representation of P^{-1} + ri_apb_inv = construct_inverse_RI(self.D, ri_apb) + if self.compress > 5: + ri_apb_inv = self.compress_low_rank(*ri_apb_inv, name="(A+B)^-1") + mom0 = einsum("pq,q->pq", integral + integral_offset, self.D ** (-1)) - np.dot( + np.dot(integral + integral_offset, ri_apb_inv[0].T), ri_apb_inv[1] + ) + # Also need to convert error estimate of the integral into one for the actual evaluated quantity. + # Use Cauchy-Schwartz to both obtain an upper bound on resulting mom0 error, and efficiently obtain upper bound + # on norm of low-rank portion of P^{-1}. + if upper_bound is not None: + pinv_norm = np.linalg.norm(self.D ** (-2)) + np.linalg.norm( + ri_apb_inv[0] + ) * np.linalg.norm(ri_apb_inv[1]) + mom0_ub = upper_bound * pinv_norm + self.check_errors(mom0_ub, target_rot.size) + else: + mom0_ub = None + + mom_lb = ( + self.test_eta0_error(mom0 + moment_offset, target_rot, ri_apb, ri_amb) + if analytic_lower_bound + else None + ) + + self.log.info( + "RIRPA Zeroth Moment wall time: %s", time_string(timer() - t_start) + ) + + return mom0 + moment_offset, (mom0_ub, mom_lb) + +
[docs] def test_eta0_error(self, mom0, target_rot, ri_apb, ri_amb): + """Test how well our obtained zeroth moment obeys relation used to derive it, namely + A-B = eta0 (A+B) eta0 + From this we can estimate the error in eta0 using Cauchy-Schwartz. + For details see Appendix B of https://arxiv.org/abs/2301.09107, Eq. 96-99. + """ + amb = np.diag(self.D) + dot(ri_amb[0].T, ri_amb[1]) + apb = np.diag(self.D) + dot(ri_apb[0].T, ri_apb[1]) + amb_exact = dot(target_rot, amb, target_rot.T) + + error = amb_exact - dot(mom0, apb, mom0.T) + self.error = error + e_norm = np.linalg.norm(error) + p_norm = np.linalg.norm(self.D) + np.linalg.norm(ri_apb[0]) * np.linalg.norm( + ri_apb[1] + ) + peta_norm = np.linalg.norm( + einsum("p,qp->pq", self.D, mom0) + dot(ri_apb[0].T, dot(ri_apb[1], mom0.T)) + ) + # Now to estimate resulting error estimate in eta0. + try: + poly = np.polynomial.Polynomial( + [e_norm / p_norm, -2 * peta_norm / p_norm, 1] + ) + roots = poly.roots() + except np.linalg.LinAlgError: + self.log.warning( + "Could not obtain eta0 error lower bound; this is usually due to vanishing norms: %e, " + "%e, %e.", + e_norm, + p_norm, + peta_norm, + ) + return 0.0 + else: + self.log.info( + "Proportional error in eta0 relation=%6.4e", + e_norm / np.linalg.norm(amb_exact), + ) + self.log.info("Resulting error bounds: %6.4e to %6.4e", *roots) + return roots.min()
+ +
[docs] def kernel_trMPrt(self, npoints=48, ainit=10): + """Evaluate Tr((MP)^(1/2)).""" + ri_mp, ri_apb, ri_amb = self.get_compressed_MP() + inputs = (self.D, ri_mp[0], ri_mp[1], npoints, self.log) + + niworker = energy_NI.NITrRootMP(*inputs) + integral, err = niworker.kernel(a=ainit, opt_quad=True) + # Compute offset; possible analytically in N^3 for diagonal. + offset = sum(self.D) + 0.5 * einsum( + "p,np,np->", self.D ** (-1), ri_mp[0], ri_mp[1] + ) + return integral[0] + offset, err
+ +
[docs] def kernel_energy(self, npoints=48, ainit=10, correction="linear"): + + t_start = timer() + e1, err = self.kernel_trMPrt(npoints, ainit) + e2 = 0.0 + ri_apb_eri = self.get_apb_eri_ri() + # Note that eri contribution to A and B is equal, so can get trace over one by dividing by two + e3 = sum(self.D) + einsum("np,np->", ri_apb_eri, ri_apb_eri) / 2 + err /= 2 + if self.rixc is not None and correction is not None: + if correction.lower() == "linear": + ri_a_xc, ri_b_xc = self.get_ab_xc_ri() + eta0_xc, errs = self.kernel_moms( + 0, target_rot=ri_b_xc[0], npoints=npoints, ainit=ainit + ) + eta0_xc = eta0_xc[0] + err = tuple( + [ + (err**2 + x / 2**2) ** 0.5 if x is not None else None + for x in errs + ] + ) + val = np.dot(eta0_xc, ri_b_xc[1].T).trace() / 2 + self.log.info("Approximated correlation energy contribution: %e", val) + e2 -= val + e3 += ( + einsum("np,np->", ri_a_xc[0], ri_a_xc[1]) + - einsum("np,np->", ri_b_xc[0], ri_b_xc[1]) / 2 + ) + elif correction.lower() == "xc_ac": + pass + self.e_corr_ss = 0.5 * (e1 + e2 - e3) + self.log.info( + "Total RIRPA Energy Calculation wall time: %s", + time_string(timer() - t_start), + ) + return self.e_corr_ss, err
+ +
[docs] def direct_AC_integration( + self, + local_rot=None, + fragment_projectors=None, + deg=5, + npoints=48, + cluster_constrain=False, + ): + """Perform direct integration of the adiabatic connection for RPA correlation energy. + This will be preferable when the xc kernel is comparable or larger in magnitude to the coulomb kernel, as it + only requires evaluation of the moment and not its inverse. + local_rot describes the rotation of the ov-excitations to the space of local excitations within a cluster, while + fragment_projectors gives the projector within this local excitation space to the actual fragment.""" + # Get the coulomb integrals. + ri_eri = self.get_apb_eri_ri() / np.sqrt(2) + + def get_eta_alpha(alpha, target_rot): + newrirpa = self.__class__(self.mf, rixc=self.rixc, log=self.log) + moms, errs = newrirpa.kernel_moms( + 0, target_rot=target_rot, npoints=npoints, alpha=alpha + ) + return moms[0] + + def run_ac_inter(func, deg=5): + points, weights = np.polynomial.legendre.leggauss(deg) + # Shift and reweight to interval of [0,1]. + points += 1 + points /= 2 + weights /= 2 + return sum([w * func(p) for w, p in zip(weights, points)]) + + naux_eri = ri_eri.shape[0] + if local_rot is None or fragment_projectors is None: + lrot = ri_eri + rrot = ri_eri + else: + + if cluster_constrain: + lrot = np.concatenate(local_rot, axis=0) + nloc_cum = np.cumsum([x.shape[0] for x in local_rot]) + + rrot = np.zeros_like(lrot) + + def get_contrib(rot, proj): + lloc = dot(rot, ri_eri.T) + return dot( + lloc, lloc[: proj.shape[0]].T, proj, rot[: proj.shape[0]] + ) + + # return dot(rot[:proj.shape[0]].T, proj, lloc[:proj.shape[0]], lloc.T) + else: + + lrot = np.concatenate( + [ + dot(x[: p.shape[0]], ri_eri.T, ri_eri) + for x, p in zip(local_rot, fragment_projectors) + ], + axis=0, + ) + nloc_cum = np.cumsum([x.shape[0] for x in fragment_projectors]) + + rrot = np.zeros_like(lrot) + + def get_contrib(rot, proj): + return dot(proj, rot[: proj.shape[0]]) + + rrot[: nloc_cum[0]] = get_contrib(local_rot[0], fragment_projectors[0]) + # rrot[nloc_cum[-1]:] = get_contrib(local_rot[-1], fragment_projectors[-1]) + if len(nloc_cum) > 1: + for i, (r, p) in enumerate(zip(local_rot[1:], fragment_projectors[1:])): + rrot[nloc_cum[i] : nloc_cum[i + 1]] = get_contrib(r, p) + lrot = np.concatenate([ri_eri, lrot], axis=0) + rrot = np.concatenate([ri_eri, rrot], axis=0) + + def get_contrib(alpha): + eta0 = get_eta_alpha(alpha, target_rot=lrot) + return np.array( + [ + einsum("np,np->", (eta0 - lrot)[:naux_eri], rrot[:naux_eri]), + einsum("np,np->", (eta0 - lrot)[naux_eri:], rrot[naux_eri:]), + ] + ) + + integral = run_ac_inter(get_contrib, deg=deg) / 2 + return integral, get_contrib
+ +
[docs] def get_gap(self, calc_xy=False, tol_eig=1e-2, max_space=12, nroots=1, **kwargs): + """Calculate the RPA gap using a Davidson solver. First checks that A+B and A-B are PSD by calculating their + lowest eigenvalues. For a fixed number of eigenvalues in each case this scales as O(N^3), so shouldn't be + prohibitively expensive. + """ + ri_mp, ri_apb, ri_amb = self.get_compressed_MP() + + min_d = self.D.min() + + mininds = np.where((self.D - min_d) < tol_eig)[0] + nmin = len(mininds) + if max_space < nmin: + self.log.info( + "Expanded Davidson space size to %d to span degenerate lowest mean-field eigenvalues.", + nmin, + ) + max_space = nmin + + def get_unit_vec(pos): + x = np.zeros_like(self.D) + x[pos] = 1.0 + return x + + c0 = [get_unit_vec(pos) for pos in mininds] + + def get_lowest_eigenvals(diag, ri_l, ri_r, x0, nroots=1, nosym=False): + def hop(x): + return einsum("p,p->p", diag, x) + einsum("np,nq,q->p", ri_l, ri_r, x) + + mdiag = diag + einsum("np,np->p", ri_l, ri_r) + + def precond(x, e, *args): + return x / (mdiag - e + 1e-4) + + if nosym: + # Ensure left isn't in our kwargs. + kwargs.pop("left", None) + e, c_l, c_r = pyscf.lib.eig( + hop, + x0, + precond, + max_space=max_space, + nroots=nroots, + left=True, + **kwargs + ) + return e, np.array(c_l), np.array(c_r) + else: + e, c = pyscf.lib.davidson( + hop, x0, precond, max_space=max_space, nroots=nroots, **kwargs + ) + return e, np.array(c) + + # Since A+B and A-B are symmetric can get eigenvalues straightforwardly. + e_apb, c = get_lowest_eigenvals(self.D, *ri_apb, c0) + if e_apb < 0.0: + self.log.critical("Lowest eigenvalue of A+B is negative!") + raise RuntimeError("RPA approximation broken down!") + e_amb, c = get_lowest_eigenvals(self.D, *ri_amb, c0) + if e_amb < 0.0: + self.log.critical("Lowest eigenvalue of A-B is negative!") + raise RuntimeError("RPA approximation broken down!") + # MP is asymmetric, so need to take care to obtain actual eigenvalues. + # Use Davidson to obtain accurate right eigenvectors... + e_mp_r, c_l_approx, c_r = get_lowest_eigenvals( + self.D**2, *ri_mp, c0, nroots=nroots, nosym=True + ) + + if not calc_xy: + return e_mp_r ** (0.5) + + # Then solve for accurate left eigenvectors, starting from subspace approximation from right eigenvectors. Take + # the real component since all solutions should be real. + e_mp_l, c_r_approx, c_l = get_lowest_eigenvals( + self.D**2, ri_mp[1], ri_mp[0], c_l_approx.real, nroots=nroots, nosym=True + ) + # We use c_r and c_l2, since these are likely the most accurate. + # Enforce correct RPA orthonormality. + ovlp = np.dot(c_l, c_r.T) + + if nroots > 1: + c_l = np.dot(np.linalg.inv(ovlp), c_l) + # Now diagonalise in corresponding subspace to get eigenvalues. + subspace = einsum("np,p,mp->nm", c_l, self.D**2, c_r) + einsum( + "np,yp,yq,mq->nm", c_l, *ri_mp, c_r + ) + e, c_sub = np.linalg.eig(subspace) + # Now fold these eigenvectors into our definitions, + xpy = np.dot(c_sub.T, c_r) + xmy = np.dot(np.linalg.inv(c_sub), c_l) + + sorted_args = e.argsort() + xpy = xpy[sorted_args] + xmy = xmy[sorted_args] + e = e[sorted_args] + else: + xpy = c_r / (ovlp ** (0.5)) + xmy = c_l / (ovlp ** (0.5)) + e = einsum("p,p,p->", xmy, self.D**2, xpy) + einsum( + "p,yp,yq,q->", xmy, *ri_mp, xpy + ) + + return e ** (0.5), xpy, xmy
+ +
[docs] def get_compressed_MP(self, alpha=1.0): + # AB corresponds to scaling RI components at this point. + ri_apb, ri_amb = self.construct_RI_AB() + if self.compress > 3: + ri_apb = self.compress_low_rank(*ri_apb, name="A+B") + ri_amb = self.compress_low_rank(*ri_amb, name="A-B") + ri_apb = [x * alpha ** (0.5) for x in ri_apb] + ri_amb = [x * alpha ** (0.5) for x in ri_amb] + + ri_mp = construct_product_RI(self.D, ri_amb, ri_apb) + if self.compress > 0: + ri_mp = self.compress_low_rank(*ri_mp, name="(A-B)(A+B)") + return ri_mp, ri_apb, ri_amb
+ +
[docs] def check_errors(self, error, nelements): + if error / nelements > self.err_tol: + self.log.warning( + "Estimated error per element exceeded tolerance %6.4e. Please increase number of points.", + error / nelements, + )
+ +
[docs] def construct_RI_AB(self): + """Construct the RI expressions for the deviation of A+B and A-B from D.""" + ri_apb_eri = self.get_apb_eri_ri() + # Use empty AmB contrib initially; this is the dRPA contrib. + ri_amb_eri = np.zeros((0, self.ov * 2)) + if self.rixc is not None: + ri_a_xc, ri_b_xc = self.get_ab_xc_ri() + + ri_apb_xc = [ + np.concatenate([ri_a_xc[0], ri_b_xc[0]], axis=0), + np.concatenate([ri_a_xc[1], ri_b_xc[1]], axis=0), + ] + ri_amb_xc = [ + np.concatenate([ri_a_xc[0], ri_b_xc[0]], axis=0), + np.concatenate([ri_a_xc[1], -ri_b_xc[1]], axis=0), + ] + else: + ri_apb_xc = [np.zeros((0, self.ov * 2))] * 2 + ri_amb_xc = [np.zeros((0, self.ov * 2))] * 2 + + ri_apb = [np.concatenate([ri_apb_eri, x], axis=0) for x in ri_apb_xc] + ri_amb = [np.concatenate([ri_amb_eri, x], axis=0) for x in ri_amb_xc] + + return ri_apb, ri_amb
+ +
[docs] def compress_low_rank(self, ri_l, ri_r, name=None): + return compress_low_rank(ri_l, ri_r, tol=self.svd_tol, log=self.log, name=name)
+ +
[docs] def get_apb_eri_ri(self): + # Coulomb integrals only contribute to A+B. + # This needs to be optimised, but will do for now. + if self.Lpq is None: + v = self.get_3c_integrals() # pyscf.lib.unpack_tril(self.mf._cderi) + Lov = einsum( + "npq,pi,qa->nia", v, self.mo_coeff_occ, self.mo_coeff_vir + ).reshape((self.naux_eri, self.ov)) + else: + Lov = self.Lpq[:, : self.nocc, self.nocc :].reshape( + (self.naux_eri, self.ov) + ) + + ri_apb_eri = np.zeros((self.naux_eri, self.ov_tot)) + + # Need to include factor of two since eris appear in both A and B. + ri_apb_eri[:, : self.ov] = ri_apb_eri[:, self.ov : 2 * self.ov] = ( + np.sqrt(2) * Lov + ) + return ri_apb_eri
+ +
[docs] def get_ab_xc_ri(self): + # Have low-rank representation for interactions over and above coulomb interaction. + # Note that this is usually asymmetric, as correction is non-PSD. + ri_a_aa = [ + einsum("npq,pi,qa->nia", x, self.mo_coeff_occ, self.mo_coeff_vir).reshape( + (-1, self.ov) + ) + for x in self.rixc[0] + ] + ri_a_bb = [ + einsum("npq,pi,qa->nia", x, self.mo_coeff_occ, self.mo_coeff_vir).reshape( + (-1, self.ov) + ) + for x in self.rixc[1] + ] + + ri_b_aa = [ + ri_a_aa[0], + einsum( + "npq,qi,pa->nia", self.rixc[0][1], self.mo_coeff_occ, self.mo_coeff_vir + ).reshape((-1, self.ov)), + ] + ri_b_bb = [ + ri_a_bb[0], + einsum( + "npq,qi,pa->nia", self.rixc[1][1], self.mo_coeff_occ, self.mo_coeff_vir + ).reshape((-1, self.ov)), + ] + + ri_a_xc = [np.concatenate([x, y], axis=1) for x, y in zip(ri_a_aa, ri_a_bb)] + ri_b_xc = [np.concatenate([x, y], axis=1) for x, y in zip(ri_b_aa, ri_b_bb)] + return ri_a_xc, ri_b_xc
+ +
[docs] def get_3c_integrals(self): + return pyscf.lib.unpack_tril(next(self.mf.with_df.loop(blksize=self.naux_eri)))
+ +
[docs] def test_spectral_rep(self, freqs): + from vayesta.rpa import ssRPA + import scipy + + xc_kernel = None + if self.rixc is not None: + xc_kernel = [ + einsum("npq,nrs->pqrs", *self.rixc[0]), + einsum("npq,nrs->pqrs", self.rixc[0][0], self.rixc[0][1]), + einsum("npq,nrs->pqrs", *self.rixc[1]), + ] + fullrpa = ssRPA(self.mf) + fullrpa.kernel(xc_kernel=xc_kernel) + target_rot = np.eye(self.ov_tot) + ri_apb, ri_amb = self.construct_RI_AB() + ri_mp = construct_product_RI(self.D, ri_amb, ri_apb) + inputs = (self.D, ri_mp[0], ri_mp[1], target_rot, 48, self.log) + niworker = momzero_NI.MomzeroDeductHigherOrder(*inputs) + naux = ri_mp[0].shape[0] + + def get_qval(freq): + q = niworker.get_Q(freq) + return q.trace() + + def get_log_qval(freq): + q = niworker.get_Q(freq) + return scipy.linalg.logm(np.eye(naux) + q).trace() + + log_qvals = [get_log_qval(x) for x in freqs] + + def get_log_specvals(freq): + return sum( + np.log(fullrpa.freqs_ss**2 + freq**2) + - np.log(self.D**2 + freq**2) + ) + + log_specvals = [get_log_specvals(x) for x in freqs] + + return log_qvals, log_specvals, get_log_qval, get_log_specvals
+ + +
[docs]def construct_product_RI(D, ri_1, ri_2): + """Given two matrices expressed as low-rank modifications, cderi_1 and cderi_2, of some full-rank matrix D, + construct the RI expression for the deviation of their product from D**2. + The rank of the resulting deviation is at most the sum of the ranks of the original modifications.""" + # Construction of this matrix is the computationally limiting step of this construction (O(N^4)) in our usual use, + # but we only need to perform it once per calculation since it's frequency-independent. + if type(ri_1) == np.ndarray: + ri_1_L = ri_1_R = ri_1 + else: + (ri_1_L, ri_1_R) = ri_1 + + if type(ri_2) == np.ndarray: + ri_2_L = ri_2_R = ri_2 + else: + (ri_2_L, ri_2_R) = ri_2 + + U = np.dot(ri_1_R, ri_2_L.T) + + ri_L = np.concatenate( + [ri_1_L, einsum("p,np->np", D, ri_2_L) + np.dot(U.T, ri_1_L) / 2], axis=0 + ) + ri_R = np.concatenate( + [einsum("p,np->np", D, ri_1_R) + np.dot(U, ri_2_R) / 2, ri_2_R], axis=0 + ) + return ri_L, ri_R
+ + +
[docs]def construct_inverse_RI(D, ri): + if type(ri) == np.ndarray and len(ri.shape) == 2: + ri_L = ri_R = ri + else: + (ri_L, ri_R) = ri + + naux = ri_R.shape[0] + # This construction scales as O(N^4). + U = einsum("np,p,mp->nm", ri_R, D ** (-1), ri_L) + # This inversion and square root should only scale as O(N^3). + U = np.linalg.inv(np.eye(naux) + U) + # Want to split matrix between left and right fairly evenly; could just associate to one side or the other. + u, s, v = np.linalg.svd(U) + urt_l = einsum("nm,m->nm", u, s ** (0.5)) + urt_r = einsum("n,nm->nm", s ** (0.5), v) + # Evaluate the resulting RI + return einsum("p,np,nm->mp", D ** (-1), ri_L, urt_l), einsum( + "p,np,nm->mp", D ** (-1), ri_R, urt_r.T + )
+ + +
[docs]def compress_low_rank(ri_l, ri_r, tol=1e-12, log=None, name=None): + naux_init = ri_l.shape[0] + u, s, v = np.linalg.svd(ri_l, full_matrices=False) + nwant = sum(s > tol) + rot = u[:, :nwant] + ri_l = dot(rot.T, ri_l) + ri_r = dot(rot.T, ri_r) + u, s, v = np.linalg.svd(ri_r, full_matrices=False) + nwant = sum(s > tol) + rot = u[:, :nwant] + ri_l = dot(rot.T, ri_l) + ri_r = dot(rot.T, ri_r) + if nwant < naux_init and log is not None: + if name is None: + log.info( + "Compressed low-rank representation from rank %d to %d.", + naux_init, + nwant, + ) + else: + log.info( + "Compressed low-rank representation of %s from rank %d to %d.", + name, + naux_init, + nwant, + ) + return ri_l, ri_r
+ + +ssRIRRPA = ssRIRPA +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/rpa/rirpa/RIURPA.html b/_modules/vayesta/rpa/rirpa/RIURPA.html new file mode 100644 index 000000000..4ebee06aa --- /dev/null +++ b/_modules/vayesta/rpa/rirpa/RIURPA.html @@ -0,0 +1,289 @@ + + + + + + vayesta.rpa.rirpa.RIURPA — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.rpa.rirpa.RIURPA

+import numpy as np
+from vayesta.core.util import einsum
+
+from vayesta.rpa.rirpa.RIRPA import ssRIRRPA
+
+
+
[docs]class ssRIURPA(ssRIRRPA): + @property + def mo_occ(self): + return self.mf.mo_occ + + @property + def nmo(self): + """Total number of molecular orbitals (MOs).""" + return (self.mo_coeff[0].shape[-1], self.mo_coeff[1].shape[-1]) + + @property + def nocc(self): + """Number of occupied MOs.""" + return ( + np.count_nonzero(self.mo_occ[0] > 0), + np.count_nonzero(self.mo_occ[1] > 0), + ) + + @property + def nvir(self): + """Number of virtual MOs.""" + return ( + np.count_nonzero(self.mo_occ[0] == 0), + np.count_nonzero(self.mo_occ[1] == 0), + ) + + @property + def naux_eri(self): + return self.mf.with_df.get_naoaux() + + @property + def mo_coeff(self): + """Occupied MO coefficients.""" + return self.mf.mo_coeff + + @property + def mo_coeff_occ(self): + """Occupied MO coefficients.""" + return ( + self.mo_coeff[0][:, : self.nocc[0]], + self.mo_coeff[1][:, : self.nocc[1]], + ) + + @property + def mo_coeff_vir(self): + """Virtual MO coefficients.""" + return ( + self.mo_coeff[0][:, self.nocc[0] :], + self.mo_coeff[1][:, self.nocc[1] :], + ) + + @property + def mo_energy(self): + return self.mf.mo_energy + + @property + def mo_energy_occ(self): + return self.mo_energy[0][: self.nocc[0]], self.mo_energy[1][: self.nocc[1]] + + @property + def mo_energy_vir(self): + return self.mo_energy[0][self.nocc[0] :], self.mo_energy[1][self.nocc[1] :] + + @property + def ov(self): + return self.nocc[0] * self.nvir[0], self.nocc[1] * self.nvir[1] + + @property + def ov_tot(self): + return sum(self.ov) + + @property + def D(self): + epsa = np.zeros((self.nocc[0], self.nvir[0])) + epsb = np.zeros((self.nocc[1], self.nvir[1])) + epsa = epsa + self.mo_energy_vir[0] + epsa = (epsa.T - self.mo_energy_occ[0]).T + epsa = epsa.reshape((self.ov[0],)) + + epsb = epsb + self.mo_energy_vir[1] + epsb = (epsb.T - self.mo_energy_occ[1]).T + epsb = epsb.reshape((self.ov[1],)) + + D = np.concatenate([epsa, epsb]) + return D + +
[docs] def construct_RI_AB(self): + """Construct the RI expressions for the deviation of A+B and A-B from D.""" + ri_apb_eri = self.get_apb_eri_ri() + # Use empty AmB contrib initially; this is the dRPA contrib. + ri_amb_eri = np.zeros((0, self.ov_tot)) + if self.rixc is not None: + ri_a_xc, ri_b_xc = self.get_ab_xc_ri() + + ri_apb_xc = [ + np.concatenate([ri_a_xc[0], ri_b_xc[0]], axis=0), + np.concatenate([ri_a_xc[1], ri_b_xc[1]], axis=0), + ] + ri_amb_xc = [ + np.concatenate([ri_a_xc[0], ri_b_xc[0]], axis=0), + np.concatenate([ri_a_xc[1], -ri_b_xc[1]], axis=0), + ] + else: + ri_apb_xc = [np.zeros((0, self.ov_tot))] * 2 + ri_amb_xc = [np.zeros((0, self.ov_tot))] * 2 + + ri_apb = [np.concatenate([ri_apb_eri, x], axis=0) for x in ri_apb_xc] + ri_amb = [np.concatenate([ri_amb_eri, x], axis=0) for x in ri_amb_xc] + + return ri_apb, ri_amb
+ +
[docs] def get_apb_eri_ri(self): + # Coulomb integrals only contribute to A+B. + # This needs to be optimised, but will do for now. + if self.Lpq is None: + v = self.get_3c_integrals() + Lov_a = einsum( + "npq,pi,qa->nia", v, self.mo_coeff_occ[0], self.mo_coeff_vir[0] + ).reshape((self.naux_eri, self.ov[0])) + Lov_b = einsum( + "npq,pi,qa->nia", v, self.mo_coeff_occ[1], self.mo_coeff_vir[1] + ).reshape((self.naux_eri, self.ov[1])) + else: + Lov_a = self.Lpq[0][:, : self.nocc[0], self.nocc[0] :].reshape( + (self.naux_eri, self.ov[0]) + ) + Lov_b = self.Lpq[1][:, : self.nocc[1], self.nocc[1] :].reshape( + (self.naux_eri, self.ov[1]) + ) + + ri_apb_eri = np.zeros((self.naux_eri, sum(self.ov))) + + # Need to include factor of two since eris appear in both A and B. + ri_apb_eri[:, : self.ov[0]] = np.sqrt(2) * Lov_a + ri_apb_eri[:, self.ov[0] : self.ov_tot] = np.sqrt(2) * Lov_b + return ri_apb_eri
+ +
[docs] def get_ab_xc_ri(self): + # Have low-rank representation for interactions over and above coulomb interaction. + # Note that this is usually asymmetric, as correction is non-PSD. + ri_a_aa = [ + einsum( + "npq,pi,qa->nia", x, self.mo_coeff_occ[0], self.mo_coeff_vir[0] + ).reshape((-1, self.ov[0])) + for x in self.rixc[0] + ] + ri_a_bb = [ + einsum( + "npq,pi,qa->nia", x, self.mo_coeff_occ[1], self.mo_coeff_vir[1] + ).reshape((-1, self.ov[1])) + for x in self.rixc[1] + ] + + ri_b_aa = [ + ri_a_aa[0], + einsum( + "npq,qi,pa->nia", + self.rixc[0][1], + self.mo_coeff_occ[0], + self.mo_coeff_vir[0], + ).reshape((-1, self.ov[0])), + ] + ri_b_bb = [ + ri_a_bb[0], + einsum( + "npq,qi,pa->nia", + self.rixc[1][1], + self.mo_coeff_occ[1], + self.mo_coeff_vir[1], + ).reshape((-1, self.ov[1])), + ] + + ri_a_xc = [np.concatenate([x, y], axis=1) for x, y in zip(ri_a_aa, ri_a_bb)] + ri_b_xc = [np.concatenate([x, y], axis=1) for x, y in zip(ri_b_aa, ri_b_bb)] + return ri_a_xc, ri_b_xc
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/rpa/rirpa/energy_NI.html b/_modules/vayesta/rpa/rirpa/energy_NI.html new file mode 100644 index 000000000..5b0360d2b --- /dev/null +++ b/_modules/vayesta/rpa/rirpa/energy_NI.html @@ -0,0 +1,217 @@ + + + + + + vayesta.rpa.rirpa.energy_NI — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.rpa.rirpa.energy_NI

+"""Functionality to calculate zeroth moment via numerical integration """
+
+import numpy as np
+
+from vayesta.core.util import dot, einsum
+from vayesta.rpa.rirpa.NI_eval import (
+    NumericalIntegratorClenCurInfinite,
+    NIException
+)
+
+from vayesta.rpa.rirpa.momzero_NI import diag_sqrt_contrib, diag_sqrt_grad, diag_sqrt_deriv2
+
+
+
[docs]class NIError(Exception): + pass
+ + +
[docs]class NITrRootMP(NumericalIntegratorClenCurInfinite): + def __init__(self, D, S_L, S_R, npoints, log): + self.D = D + self.S_L = S_L + self.S_R = S_R + out_shape = (1,) + diag_shape = (1,) + super().__init__(out_shape, diag_shape, npoints, log, True) + self.diagmat1 = self.D**2 + einsum("np,np->p", self.S_L, self.S_R) + self.diagmat2 = self.D**2 + self.diagRI = einsum("np,np->p", self.S_L, self.S_R) + + @property + def n_aux(self): + assert self.S_L.shape == self.S_R.shape + return self.S_L.shape[0] + +
[docs] def get_F(self, freq): + return (self.D**2 + freq**2) ** (-1)
+ +
[docs] def get_Q(self, freq): + """Efficiently construct Q = S_R (D^{-1} G) S_L^T + This is generally the limiting + """ + S_L = einsum("np,p->np", self.S_L, self.get_F(freq)) + return dot(self.S_R, S_L.T)
+ + @property + def diagmat1(self): + return self._diagmat1 + + @diagmat1.setter + def diagmat1(self, val): + if val is not None and any(val < 0.0): + raise NIException( + "Error in numerical integration; diagonal approximation is non-PSD" + ) + self._diagmat1 = val + + @property + def diagmat2(self): + return self._diagmat2 + + @diagmat2.setter + def diagmat2(self, val): + if val is not None and any(val < 0.0): + raise NIException( + "Error in numerical integration; diagonal approximation is non-PSD" + ) + self._diagmat2 = val + +
[docs] def eval_diag_contrib(self, freq): + Dval = diag_sqrt_contrib(self.diagmat1, freq) + if not (self.diagmat2 is None): + Dval -= diag_sqrt_contrib(self.diagmat2, freq) + F = self.get_F(freq) + HOval = (freq**2) * (F**2) + HOval = np.multiply(HOval, self.diagRI) / np.pi + return np.array([sum(Dval - HOval)])
+ +
[docs] def eval_diag_deriv_contrib(self, freq): + Dval = diag_sqrt_grad(self.diagmat1, freq) + if not (self.diagmat2 is None): + Dval -= diag_sqrt_grad(self.diagmat2, freq) + F = self.get_F(freq) + HOval = (2 * freq * (F**2)) - (4 * (freq**3) * (F**3)) + HOval = np.multiply(HOval, self.diagRI) / np.pi + return np.array([sum(Dval - HOval)])
+ +
[docs] def eval_diag_deriv2_contrib(self, freq): + Dval = diag_sqrt_deriv2(self.diagmat1, freq) + if not (self.diagmat2 is None): + Dval -= diag_sqrt_deriv2(self.diagmat2, freq) + F = self.get_F(freq) + HOval = 2 * F**2 - 20 * freq**2 * F**3 + 24 * freq**4 * F**4 + HOval = np.multiply(HOval, self.diagRI) / np.pi + return np.array([sum(Dval - HOval)])
+ +
[docs] def eval_diag_exact(self): + Dval = self.diagmat1 ** (0.5) + if not (self.diagmat2 is None): + Dval -= self.diagmat2 ** (0.5) + HOval = 0.5 * np.multiply(self.D ** (-1), self.diagRI) + return np.array([sum(Dval - HOval)])
+ +
[docs] def eval_contrib(self, freq): + Q = self.get_Q(freq) + F = self.get_F(freq) + val_aux = np.linalg.inv(np.eye(self.n_aux) + Q) - np.eye(self.n_aux) + res = einsum("p,np,nm,mp,p->", F, self.S_L, val_aux, self.S_R, F) + res = (freq**2) * res / np.pi + return np.array([res])
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/rpa/rirpa/momzero_NI.html b/_modules/vayesta/rpa/rirpa/momzero_NI.html new file mode 100644 index 000000000..495564931 --- /dev/null +++ b/_modules/vayesta/rpa/rirpa/momzero_NI.html @@ -0,0 +1,348 @@ + + + + + + vayesta.rpa.rirpa.momzero_NI — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.rpa.rirpa.momzero_NI

+"""Functionality to calculate zeroth moment via numerical integration """
+
+import numpy as np
+
+from vayesta.core.util import dot, einsum
+from vayesta.rpa.rirpa.NI_eval import (
+    NumericalIntegratorClenCurInfinite,
+    NumericalIntegratorClenCurSemiInfinite,
+    NumericalIntegratorGaussianSemiInfinite,
+    NumericalIntegratorBase,
+    NIException,
+)
+
+
+
[docs]class NIMomZero(NumericalIntegratorClenCurInfinite): + def __init__(self, D, S_L, S_R, target_rot, npoints, log): + self.D = D + self.S_L = S_L + self.S_R = S_R + self.target_rot = target_rot + out_shape = self.target_rot.shape + diag_shape = self.D.shape + self.diagmat1 = self.diagmat2 = None + super().__init__(out_shape, diag_shape, npoints, log, True) + + @property + def n_aux(self): + assert self.S_L.shape == self.S_R.shape + return self.S_L.shape[0] + +
[docs] def get_F(self, freq): + return (self.D**2 + freq**2) ** (-1)
+ +
[docs] def get_Q(self, freq): + """Efficiently construct Q = S_R (D^{-1} G) S_L^T + This is generally the limiting + """ + S_L = einsum("np,p->np", self.S_L, self.get_F(freq)) + return dot(self.S_R, S_L.T)
+ + @property + def diagmat1(self): + return self._diagmat1 + + @diagmat1.setter + def diagmat1(self, val): + if val is not None and any(val < 0.0): + raise NIException( + "Error in numerical integration; diagonal approximation is non-PSD" + ) + self._diagmat1 = val + + @property + def diagmat2(self): + return self._diagmat2 + + @diagmat2.setter + def diagmat2(self, val): + if val is not None and any(val < 0.0): + raise NIException( + "Error in numerical integration; diagonal approximation is non-PSD" + ) + self._diagmat2 = val
+ + +
[docs]class MomzeroDeductNone(NIMomZero): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.diagmat1 = self.D**2 + einsum("np,np->p", self.S_L, self.S_R) + +
[docs] def eval_diag_contrib(self, freq): + val = diag_sqrt_contrib(self.diagmat1, freq) + if not (self.diagmat2 is None): + val -= diag_sqrt_contrib(self.diagmat2, freq) + return val
+ +
[docs] def eval_diag_deriv_contrib(self, freq): + val = diag_sqrt_grad(self.diagmat1, freq) + if not (self.diagmat2 is None): + val -= diag_sqrt_grad(self.diagmat2, freq) + return val
+ +
[docs] def eval_diag_deriv2_contrib(self, freq): + val = diag_sqrt_deriv2(self.diagmat1, freq) + if not (self.diagmat2 is None): + val -= diag_sqrt_deriv2(self.diagmat2, freq) + return val
+ +
[docs] def eval_diag_exact(self): + val = self.diagmat1 ** (0.5) + if not (self.diagmat2 is None): + val -= self.diagmat2 ** (0.5) + return val
+ +
[docs] def eval_contrib(self, freq): + if not (self.diagmat2 is None): + raise ValueError( + "Diagonal deducted quantity specified without being included in full contribution " + "evaluation; please update overwrite .eval_contrib() for subclass." + ) + F = self.get_F(freq) + Q = self.get_Q(freq) + + rrot = F + lrot = einsum("lq,q->lq", self.target_rot, rrot) + val_aux = np.linalg.inv(np.eye(self.n_aux) + Q) + lres = np.dot(lrot, self.S_L.T) + res = dot(dot(lres, val_aux), einsum("np,p->np", self.S_R, rrot)) + return (self.target_rot + (freq**2) * (res - lrot)) / np.pi
+ + +
[docs]class MomzeroDeductD(MomzeroDeductNone): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.diagmat2 = self.D**2 + +
[docs] def eval_contrib(self, freq): + Q = self.get_Q(freq) + F = self.get_F(freq) + + rrot = F + lrot = einsum("lq,q->lq", self.target_rot, F) + val_aux = np.linalg.inv(np.eye(self.n_aux) + Q) + res = dot( + dot(dot(lrot, self.S_L.T), val_aux), einsum("np,p->np", self.S_R, rrot) + ) + res = (freq**2) * res / np.pi + return res
+ + +
[docs]class MomzeroDeductHigherOrder(MomzeroDeductD): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.diagRI = einsum("np,np->p", self.S_L, self.S_R) + + # Just calculate diagonals via expression for D-deducted quantity, minus diagonal approximation for higher-order + # terms. +
[docs] def eval_diag_contrib(self, freq): + Dval = super().eval_diag_contrib(freq) + F = self.get_F(freq) + HOval = (freq**2) * (F**2) + HOval = np.multiply(HOval, self.diagRI) / np.pi + return Dval - HOval
+ +
[docs] def eval_diag_deriv_contrib(self, freq): + Dval = super().eval_diag_deriv_contrib(freq) + F = self.get_F(freq) + HOval = (2 * freq * (F**2)) - (4 * (freq**3) * (F**3)) + HOval = np.multiply(HOval, self.diagRI) / np.pi + return Dval - HOval
+ +
[docs] def eval_diag_deriv2_contrib(self, freq): + Dval = super().eval_diag_deriv2_contrib(freq) + F = self.get_F(freq) + HOval = 2 * F**2 - 20 * freq**2 * F**3 + 24 * freq**4 * F**4 + HOval = np.multiply(HOval, self.diagRI) / np.pi + return Dval - HOval
+ +
[docs] def eval_diag_exact(self): + Dval = super().eval_diag_exact() + HOval = 0.5 * np.multiply(self.D ** (-1), self.diagRI) + return Dval - HOval
+ +
[docs] def eval_contrib(self, freq): + Q = self.get_Q(freq) + F = self.get_F(freq) + + rrot = F + lrot = einsum("lq,q->lq", self.target_rot, F) + val_aux = np.linalg.inv(np.eye(self.n_aux) + Q) - np.eye(self.n_aux) + res = dot( + dot(dot(lrot, self.S_L.T), val_aux), einsum("np,p->np", self.S_R, rrot) + ) + res = (freq**2) * res / np.pi + return res
+ + +
[docs]class BaseMomzeroOffset(NumericalIntegratorBase): + """NB this is an abstract class!""" + + def __init__(self, D, S_L, S_R, target_rot, npoints, log): + self.D = D + self.S_L = S_L + self.S_R = S_R + self.target_rot = target_rot + out_shape = self.target_rot.shape + diag_shape = self.D.shape + super().__init__(out_shape, diag_shape, npoints, log) + self.diagRI = einsum("np,np->p", self.S_L, self.S_R) + +
[docs] def get_offset(self): + return np.zeros(self.out_shape)
+ +
[docs] def eval_contrib(self, freq): + # This should be real currently, so can safely do this. + expval = np.exp(-freq * self.D) + lrot = einsum("lp,p->lp", self.target_rot, expval) + rrot = expval + res = dot(dot(lrot, self.S_L.T), einsum("np,p->np", self.S_R, rrot)) + return res
+ +
[docs] def eval_diag_contrib(self, freq): + expval = np.exp(-2 * freq * self.D) + return np.multiply(expval, self.diagRI)
+ +
[docs] def eval_diag_deriv_contrib(self, freq): + expval = -2 * (np.multiply(self.D, np.exp(-2 * freq * self.D))) + return np.multiply(expval, self.diagRI)
+ +
[docs] def eval_diag_deriv2_contrib(self, freq): + expval = 4 * (np.multiply(self.D**2, np.exp(-2 * freq * self.D))) + return np.multiply(expval, self.diagRI)
+ +
[docs] def eval_diag_exact(self): + return 0.5 * np.multiply(self.D ** (-1), self.diagRI)
+ + +
[docs]class MomzeroOffsetCalcGaussLag( + BaseMomzeroOffset, NumericalIntegratorGaussianSemiInfinite +): + pass
+ + +
[docs]class MomzeroOffsetCalcCC(BaseMomzeroOffset, NumericalIntegratorClenCurSemiInfinite): + pass
+ + +
[docs]def diag_sqrt_contrib(D, freq): + M = (D + freq**2) ** (-1) + return (np.full_like(D, fill_value=1.0) - (freq**2) * M) / np.pi
+ + +
[docs]def diag_sqrt_grad(D, freq): + M = (D + freq**2) ** (-1) + return (2 * ((freq**3) * M**2 - freq * M)) / np.pi
+ + +
[docs]def diag_sqrt_deriv2(D, freq): + M = (D + freq**2) ** (-1) + return (-2 * M + 10 * (freq**2) * (M**2) - 8 * (freq**4) * (M**3)) / np.pi
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/rpa/rpa.html b/_modules/vayesta/rpa/rpa.html new file mode 100644 index 000000000..48a6f357a --- /dev/null +++ b/_modules/vayesta/rpa/rpa.html @@ -0,0 +1,306 @@ + + + + + + vayesta.rpa.rpa — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.rpa.rpa

+"""Straightforward N^6 implementation for RPA in a finite basis set with arbitrary interaction kernel, based upon the
+standard Hermitian reformulation used in TDHF approaches.
+Note that we only use the spin-block formulation of all matrices, rather than full spin-adaptation, which means our
+final diagonalisation is 2^3=8 times more expensive than hypothetically possible. However, this code is only for
+comparison."""
+
+import logging
+from timeit import default_timer as timer
+
+import numpy as np
+import scipy.linalg
+
+from pyscf import ao2mo
+from vayesta.core.util import time_string
+
+
+
[docs]class RPA: + """Approach based on equations expressed succinctly in the appendix of + Furche, F. (2001). PRB, 64(19), 195120. https://doi.org/10.1103/PhysRevB.64.195120 + WARNING: Should only be used with canonical mean-field orbital coefficients in mf.mo_coeff and RHF. + """ + + def __init__(self, mf, log=None): + self.mf = mf + self.log = log or logging.getLogger(__name__) + + @property + def nocc(self): + return sum(self.mf.mo_occ > 0) + + @property + def nvir(self): + return len(self.mf.mo_occ) - self.nocc + + @property + def ov(self): + return self.nocc * self.nvir + + @property + def e_corr(self): + try: + return self.e_corr_ss + self.e_corr_sf + except AttributeError as e: + self.log.critical("Can only access rpa.e_corr after running rpa.kernel.") + + @property + def e_tot(self): + return self.mf.e_tot + self.e_corr + +
[docs] def kernel(self, xc_kernel="rpax"): + """Solve for RPA response; solve same-spin (ss) and spin-flip (sf) separately. + If doing dRPA spin-flip is trivial, so for large calculations use dRPA specific + """ + t_start = timer() + + ApB_ss, AmB_ss, ApB_sf, AmB_sf = self._build_arrays(xc_kernel) + + def solve_RPA_problem(ApB, AmB): + AmB_rt = scipy.linalg.sqrtm(AmB) + M = np.linalg.multi_dot([AmB_rt, ApB, AmB_rt]) + e, c = np.linalg.eigh(M) + freqs = e**0.5 + assert all(e > 1e-12) + ecorr_contrib = 0.5 * (sum(freqs) - 0.5 * (ApB.trace() + AmB.trace())) + XpY = np.einsum("n,pn->pn", freqs ** (-0.5), np.dot(AmB_rt, c)) + XmY = np.einsum( + "n,pn->pn", freqs ** (0.5), np.dot(np.linalg.inv(AmB_rt), c) + ) + return ( + freqs, + ecorr_contrib, + (XpY[: self.ov], XpY[self.ov :]), + (XmY[: self.ov], XmY[self.ov :]), + ) + + t0 = timer() + self.freqs_ss, self.e_corr_ss, self.XpY_ss, self.XmY_ss = solve_RPA_problem( + ApB_ss, AmB_ss + ) + self.freqs_sf, self.e_corr_sf, self.XpY_sf, self.XmY_sf = solve_RPA_problem( + ApB_sf, AmB_sf + ) + self.log.timing("Time to solve RPA problems: %s", time_string(timer() - t0)) + + if xc_kernel == "rpax": + # Additional factor of 0.5. + self.e_corr_ss *= 0.5 + self.e_corr_sf *= 0.5 + + self.log.info("Total RPA wall time: %s", time_string(timer() - t_start)) + + return self.e_corr
+ + def _build_arrays(self, xc_kernel="rpax"): + t0 = timer() + # Only have diagonal components in canonical basis. + eps = np.zeros((self.nocc, self.nvir)) + eps = eps + self.mf.mo_energy[self.nocc :] + eps = (eps.T - self.mf.mo_energy[: self.nocc]).T + eps = eps.reshape((self.ov,)) + # Get interaction kernel + (k_pss, k_mss, k_psf, k_msf) = self.get_interaction_kernel(xc_kernel) + + def combine_spin_components(k1, k2): + res = np.zeros((2 * self.ov, 2 * self.ov)) + res[: self.ov, : self.ov] = res[self.ov :, self.ov :] = k1 + res[: self.ov, self.ov :] = res[self.ov :, : self.ov] = k2 + return res + + ApB_ss = combine_spin_components(*k_pss) + AmB_ss = combine_spin_components(*k_mss) + ApB_sf = combine_spin_components(*k_psf) + AmB_sf = combine_spin_components(*k_msf) + + # Construct full irreducible polarisability, then add in to diagonal. + fulleps = np.concatenate([eps, eps]) + ix_diag = np.diag_indices(2 * self.ov) + ApB_ss[ix_diag] += fulleps + ApB_sf[ix_diag] += fulleps + AmB_ss[ix_diag] += fulleps + AmB_sf[ix_diag] += fulleps + self.log.timing("Time to build RPA arrays: %s", time_string(timer() - t0)) + + return ApB_ss, AmB_ss, ApB_sf, AmB_sf + +
[docs] def get_interaction_kernel(self, xc_kernel="rpax", tda=False): + """Construct the required components of the interaction kernel, separated into same-spin and spin-flip + components, as well as spin contributions for A+B and A-B. + The results is a length-4 tuple, giving the spin components of respectively + (ss K_(A+B), ss K_(A-B), sf K_(A+B), sf K_(A-B)). + In RHF both contributions both only have two distinct spin components, so there are a total of + 8 distinct spatial kernels for a general interaction. + For spin contributions we use the orderings + -(aaaa, aabb) for ss contributions. + -(abab, abba) for st contributions (ie, whether the particle states have the + same spin in both pairs or not). Sorry for clunky description... + + If TDA is specified all appropriate couplings will be zeroed. + """ + if xc_kernel is None or xc_kernel.lower() == "drpa": + self.log.info("RPA using coulomb interaction kernel.") + eris = self.ao2mo() + + v = eris[: self.nocc, self.nocc :, : self.nocc, self.nocc :].reshape( + (self.ov, self.ov) + ) + # Only nonzero contribution is between same-spin excitations due to coulomb interaction. + kernel = ( + (2 * v, 2 * v), + (np.zeros_like(v), np.zeros_like(v)), + (np.zeros_like(v), np.zeros_like(v)), + (np.zeros_like(v), np.zeros_like(v)), + ) + + elif xc_kernel.lower() == "rpax": + self.log.info("RPA using coulomb-exchange interaction kernel.") + eris = self.ao2mo() + v = eris[: self.nocc, self.nocc :, : self.nocc, self.nocc :] + ka = np.einsum( + "ijab->iajb", eris[: self.nocc, : self.nocc, self.nocc :, self.nocc :] + ).reshape((self.ov, self.ov)) + kb = np.einsum("ibja->iajb", v).reshape((self.ov, self.ov)) + v = v.reshape((self.ov, self.ov)) + kernel = ( + (2 * v - ka - kb, 2 * v), + (kb - ka, np.zeros_like(v)), + (-ka, -kb), + ( + -ka, + kb, + ), + ) + + else: + self.log.info("RPA using provided arbitrary exchange-correlation kernel.") + assert len(xc_kernel) == 4 + kernel = xc_kernel + + return kernel
+ + @property + def mo_coeff(self): + return self.mf.mo_coeff + + @property + def nao(self): + return self.mf.mol.nao + +
[docs] def ao2mo(self): + """Get the ERIs in MO basis""" + + t0 = timer() + self.log.info("ERIs will be four centered") + mo_coeff = self.mo_coeff + self.eri = ao2mo.incore.full(self.mf._eri, mo_coeff, compact=False) + self.eri = self.eri.reshape((self.nao,) * 4) + self.log.timing("Time for AO->MO: %s", time_string(timer() - t0)) + + return self.eri
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/rpa/ssrpa.html b/_modules/vayesta/rpa/ssrpa.html new file mode 100644 index 000000000..1dc3f5d32 --- /dev/null +++ b/_modules/vayesta/rpa/ssrpa.html @@ -0,0 +1,474 @@ + + + + + + vayesta.rpa.ssrpa — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.rpa.ssrpa

+"""Straightforward N^6 implementation for dRPA in a basis set, based upon the standard Hermitian reformulation
+used in TDHF approaches."""
+
+import logging
+from timeit import default_timer as timer
+
+import numpy as np
+import scipy.linalg
+import scipy
+
+import pyscf.ao2mo
+from vayesta.core.util import dot, einsum, time_string
+
+
+
[docs]class ssRPA: + """Approach based on equations expressed succinctly in the appendix of + Furche, F. (2001). PRB, 64(19), 195120. https://doi.org/10.1103/PhysRevB.64.195120 + WARNING: Should only be used with canonical mean-field orbital coefficients in mf.mo_coeff and RHF. + """ + + def __init__(self, mf, log=None, ov_rot=None): + self.mf = mf + self.log = log or logging.getLogger(__name__) + self.ov_rot = ov_rot + + @property + def nocc(self): + return sum(self.mf.mo_occ > 0) + + @property + def nvir(self): + return len(self.mf.mo_occ) - self.nocc + + @property + def ov(self): + return self.ova + self.ovb + + @property + def ova(self): + return self.nocc * self.nvir + + @property + def ovb(self): + return self.ova + + @property + def mo_coeff(self): + """MO coefficients.""" + return self.mf.mo_coeff + + @property + def mo_coeff_occ(self): + """Occupied MO coefficients.""" + return self.mo_coeff[:, : self.nocc] + + @property + def mo_coeff_vir(self): + """Virtual MO coefficients.""" + return self.mo_coeff[:, self.nocc :] + + @property + def e_corr(self): + try: + return self.e_corr_ss + except AttributeError as e: + self.log.critical("Can only access rpa.e_corr after running rpa.kernel.") + + @property + def e_tot(self): + return self.mf.e_tot + self.e_corr + +
[docs] def kernel(self, xc_kernel=None, alpha=1.0): + """Solve same-spin component of dRPA response. + At level of dRPA this is the only contribution to correlation energy; introduction of exchange will lead to + spin-flip contributions. + """ + t_start = timer() + + M, AmB, ApB, eps, v = self._gen_arrays(xc_kernel, alpha) + + t0 = timer() + + e, c = np.linalg.eigh(M) + self.freqs_ss = e ** (0.5) + assert all(e > 1e-12) + + if xc_kernel is None: + XpY = np.einsum("n,p,pn->pn", self.freqs_ss ** (-0.5), AmB ** (0.5), c) + XmY = np.einsum("n,p,pn->pn", self.freqs_ss ** (0.5), AmB ** (-0.5), c) + else: + e2, c2 = np.linalg.eigh(AmB) + assert all(e2 > 1e-12) + AmBrt = einsum("pn,n,qn->pq", c2, e2 ** (0.5), c2) + AmBrtinv = einsum("pn,n,qn->pq", c2, e2 ** (-0.5), c2) + XpY = np.einsum("n,pq,qn->pn", self.freqs_ss ** (-0.5), AmBrt, c) + XmY = np.einsum("n,pq,qn->pn", self.freqs_ss ** (0.5), AmBrtinv, c) + self.XpY_ss = (XpY[: self.ova], XpY[self.ova :]) + self.XmY_ss = (XmY[: self.ova], XmY[self.ova :]) + + self.freqs_sf = None + self.log.timing("Time to solve RPA problem: %s", time_string(timer() - t0)) + + if xc_kernel is None: + self.e_corr_ss = (sum(self.freqs_ss) - sum(eps[0] + eps[1]) - v.trace()) / 2 + else: + self.e_corr_ss = self.calc_energy_correction(xc_kernel=xc_kernel, version=3) + + self.log.info("Total RPA wall time: %s", time_string(timer() - t_start)) + + return self.e_corr_ss
+ +
[docs] def calc_energy_correction(self, xc_kernel, version=3): + if xc_kernel is None: + raise ValueError( + "Without an xc-kernel the plasmon formula energy is exact." + ) + t0 = timer() + M, AmB, ApB, eps, fullv = self._gen_arrays(xc_kernel) + ApB_xc, AmB_xc = self.get_xc_contribs( + xc_kernel, self.mo_coeff_occ, self.mo_coeff_vir + ) + A_xc = (ApB_xc + AmB_xc) / 2 + B_xc = (ApB_xc - AmB_xc) / 2 + full_mom0 = self.gen_moms(0, xc_kernel)[0] + + def get_eta_alpha(alpha): + newrpa = self.__class__(self.mf, self.log) + newrpa.kernel(xc_kernel=xc_kernel, alpha=alpha) + mom0 = newrpa.gen_moms(0, xc_kernel=xc_kernel)[0] + return mom0 + + def run_ac_inter(func, deg=5): + points, weights = np.polynomial.legendre.leggauss(deg) + points += 1 + points /= 2 + weights /= 2 + return sum([w * func(p) for w, p in zip(weights, points)]) + + if version == 0: + e_plasmon = ( + 0.5 * (np.dot(full_mom0, ApB) - (0.5 * (ApB + AmB) - A_xc)).trace() + ) + + # Full integration of the adiabatic connection. + def get_val_alpha(alpha): + eta0 = get_eta_alpha(alpha) + return ( + einsum("pq,qp", A_xc + B_xc, eta0) + + einsum("pq,qp", A_xc - B_xc, np.linalg.inv(eta0)) + ) / 4 + + e = e_plasmon - run_ac_inter(get_val_alpha) + e = (e, get_val_alpha) + elif version == 1: + e_plasmon = ( + 0.5 * (np.dot(full_mom0, ApB) - (0.5 * (ApB + AmB) - A_xc)).trace() + ) + + # Integration of adiabatic connection, but with approximation of the inverse eta0` + def get_val_alpha(alpha): + eta0 = get_eta_alpha(alpha) + return ( + A_xc.trace() + einsum("pq,qp", B_xc, eta0 - np.eye(self.ov)) + ) / 2 + + e = e_plasmon - run_ac_inter(get_val_alpha) + e = (e, get_val_alpha) + elif version == 2: + # Linear approximation of all quantities in adiabatic connection. + e = 0.5 * (np.dot(full_mom0, ApB) - (0.5 * (ApB + AmB) - A_xc)).trace() + e -= ( + einsum("pq,qp->", A_xc + B_xc, full_mom0 + np.eye(self.ov)) + + einsum( + "pq,qp->", A_xc - B_xc, np.linalg.inv(full_mom0) + np.eye(self.ov) + ) + ) / 8 + elif version == 3: + # Linear approximation in AC and approx of inverse. + e = ( + 0.5 + * ( + np.dot(full_mom0, ApB - B_xc / 2) - (0.5 * (ApB + AmB) - B_xc / 2) + ).trace() + ) + elif version == 4: + + def get_val_alpha(alpha): + eta0 = get_eta_alpha(alpha) + return einsum("pq,qp->", eta0 - np.eye(self.ov), fullv) + + e = 0.5 * run_ac_inter(get_val_alpha) + e = (e, get_val_alpha) + elif version == 5: + e = einsum("pq,qp->", full_mom0 - np.eye(self.ov), fullv) / 4 + else: + raise ValueError("Unknown energy approach {:s} requested.".format(version)) + + self.log.timing("Time to calculate RPA energy: %s", time_string(timer() - t0)) + + return e
+ + def _gen_arrays(self, xc_kernel=None, alpha=1.0): + t0 = timer() + # Only have diagonal components in canonical basis. + eps = np.zeros((self.nocc, self.nvir)) + eps = eps + self.mf.mo_energy[self.nocc :] + eps = (eps.T - self.mf.mo_energy[: self.nocc]).T + eps = eps.reshape((self.ova,)) + + if self.ov_rot is not None: + eps = einsum("pn,n,qn->pq", self.ov_rot, eps, self.ov_rot) + # want to ensure diagonalise eps in our new basis; nb this also rotates the existing rotation for + # consistency. + eps, c = scipy.linalg.eigh(eps) + self.ov_rot = dot(c.T, self.ov_rot) + + AmB = np.concatenate([eps, eps]) + + fullv = self.get_k() + ApB = 2 * fullv * alpha + if self.ov_rot is not None: + fullrot = scipy.linalg.block_diagonal(self.ov_rot, self.ov_rot) + ApB = dot(fullrot, ApB, fullrot.T) + + # At this point AmB is just epsilon so add in. + ApB[np.diag_indices_from(ApB)] += AmB + + if xc_kernel is None: + M = np.einsum("p,pq,q->pq", AmB ** (0.5), ApB, AmB ** (0.5)) + else: + # Grab A and B contributions for XC kernel. + ApB_xc, AmB_xc = self.get_xc_contribs( + xc_kernel, self.mo_coeff_occ, self.mo_coeff_vir, alpha + ) + ApB = ApB + ApB_xc + AmB = np.diag(AmB) + AmB_xc + del ApB_xc, AmB_xc + AmBrt = scipy.linalg.sqrtm(AmB) + M = dot(AmBrt, ApB, AmBrt) + + self.log.timing("Time to build RPA arrays: %s", time_string(timer() - t0)) + return M, AmB, ApB, (eps, eps), fullv + +
[docs] def get_k(self): + eris = self.ao2mo() + # Get coulomb interaction in occupied-virtual space. + v = eris[: self.nocc, self.nocc :, : self.nocc, self.nocc :].reshape( + (self.ova, self.ova) + ) + fullv = np.zeros((self.ov, self.ov)) + fullv[: self.ova, : self.ova] = fullv[self.ova :, self.ova :] = fullv[ + : self.ova, self.ova : + ] = fullv[self.ova :, : self.ova] = v + return fullv
+ +
[docs] def get_xc_contribs(self, xc_kernel, c_o, c_v, alpha=1.0): + if not isinstance(xc_kernel[0], np.ndarray): + xc_kernel = [ + einsum("npq,nrs->pqrs", *xc_kernel[0]), + einsum("npq,nrs->pqrs", xc_kernel[0][0], xc_kernel[0][1]), + einsum("npq,nrs->pqrs", *xc_kernel[1]), + ] + c_o_a, c_o_b = c_o if isinstance(c_o, tuple) else (c_o, c_o) + c_v_a, c_v_b = c_v if isinstance(c_v, tuple) else (c_v, c_v) + + ApB = np.zeros((self.ov, self.ov)) + AmB = np.zeros_like(ApB) + + V_A_aa = einsum( + "pqrs,pi,qa,rj,sb->iajb", xc_kernel[0], c_o_a, c_v_a, c_o_a, c_v_a + ).reshape((self.ova, self.ova)) + ApB[: self.ova, : self.ova] += V_A_aa + AmB[: self.ova, : self.ova] += V_A_aa + del V_A_aa + V_B_aa = einsum( + "pqsr,pi,qa,rj,sb->iajb", xc_kernel[0], c_o_a, c_v_a, c_o_a, c_v_a + ).reshape((self.ova, self.ova)) + ApB[: self.ova, : self.ova] += V_B_aa + AmB[: self.ova, : self.ova] -= V_B_aa + del V_B_aa + V_A_ab = einsum( + "pqrs,pi,qa,rj,sb->iajb", xc_kernel[1], c_o_a, c_v_a, c_o_b, c_v_b + ).reshape((self.ova, self.ovb)) + ApB[: self.ova, self.ova :] += V_A_ab + ApB[self.ova :, : self.ova] += V_A_ab.T + AmB[: self.ova, self.ova :] += V_A_ab + AmB[self.ova :, : self.ova] += V_A_ab.T + del V_A_ab + V_B_ab = einsum( + "pqsr,pi,qa,rj,sb->iajb", xc_kernel[1], c_o_a, c_v_a, c_o_b, c_v_b + ).reshape((self.ova, self.ovb)) + ApB[: self.ova, self.ova :] += V_B_ab + ApB[self.ova :, : self.ova] += V_B_ab.T + AmB[: self.ova, self.ova :] -= V_B_ab + AmB[self.ova :, : self.ova] -= V_B_ab.T + del V_B_ab + V_A_bb = einsum( + "pqrs,pi,qa,rj,sb->iajb", xc_kernel[2], c_o_b, c_v_b, c_o_b, c_v_b + ).reshape((self.ovb, self.ovb)) + ApB[self.ova :, self.ova :] += V_A_bb + AmB[self.ova :, self.ova :] += V_A_bb + del V_A_bb + V_B_bb = einsum( + "pqsr,pi,qa,rj,sb->iajb", xc_kernel[2], c_o_b, c_v_b, c_o_b, c_v_b + ).reshape((self.ovb, self.ovb)) + ApB[self.ova :, self.ova :] += V_B_bb + AmB[self.ova :, self.ova :] -= V_B_bb + del V_B_bb + + if self.ov_rot is not None: + if isinstance(self.ov_rot, tuple): + fullrot = scipy.linalg.block_diag(self.ov_rot[0], self.ov_rot[1]) + else: + fullrot = scipy.linalg.block_diag(self.ov_rot, self.ov_rot) + + ApB = dot(fullrot, ApB, fullrot.T) + AmB = dot(fullrot, AmB, fullrot.T) + + return ApB * alpha, AmB * alpha
+ +
[docs] def gen_moms(self, max_mom, xc_kernel=None): + res = np.zeros((max_mom + 1, self.ov, self.ov)) + for x in range(max_mom + 1): + # Have different spin components in general; these are alpha-alpha, alpha-beta and beta-beta. + res[x, : self.ova, : self.ova] = np.einsum( + "pn,n,qn->pq", self.XpY_ss[0], self.freqs_ss**x, self.XpY_ss[0] + ) + res[x, self.ova :, self.ova :] = np.einsum( + "pn,n,qn->pq", self.XpY_ss[1], self.freqs_ss**x, self.XpY_ss[1] + ) + res[x, : self.ova, self.ova :] = np.einsum( + "pn,n,qn->pq", self.XpY_ss[0], self.freqs_ss**x, self.XpY_ss[1] + ) + res[x, self.ova :, : self.ova] = res[x][: self.ova, self.ova :].T + + return res
+ + @property + def mo_coeff(self): + return self.mf.mo_coeff + + @property + def nao(self): + return self.mf.mol.nao + +
[docs] def ao2mo(self, mo_coeff=None, compact=False): + """Get the ERIs in MO basis""" + mo_coeff = self.mo_coeff if mo_coeff is None else mo_coeff + + t0 = timer() + if hasattr(self.mf, "with_df") and self.mf.with_df is not None: + eris = self.mf.with_df.ao2mo(mo_coeff, compact=compact) + elif self.mf._eri is not None: + eris = pyscf.ao2mo.kernel(self.mf._eri, mo_coeff, compact=compact) + else: + eris = self.mol.ao2mo(mo_coeff, compact=compact) + if not compact: + if isinstance(mo_coeff, np.ndarray) and mo_coeff.ndim == 2: + shape = 4 * [mo_coeff.shape[-1]] + else: + shape = [mo.shape[-1] for mo in mo_coeff] + eris = eris.reshape(shape) + self.log.timing("Time for AO->MO of ERIs: %s", time_string(timer() - t0)) + return eris
+ + +ssRRPA = ssRPA +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/rpa/ssurpa.html b/_modules/vayesta/rpa/ssurpa.html new file mode 100644 index 000000000..188844b62 --- /dev/null +++ b/_modules/vayesta/rpa/ssurpa.html @@ -0,0 +1,244 @@ + + + + + + vayesta.rpa.ssurpa — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.rpa.ssurpa

+from vayesta.rpa.ssrpa import ssRPA
+import numpy as np
+import scipy.linalg
+
+from timeit import default_timer as timer
+from vayesta.core.util import dot, time_string
+
+
+
[docs]class ssURPA(ssRPA): + @property + def norb(self): + return self.mf.mo_coeff[0].shape[1] + + @property + def nocc(self): + return self.mf.nelec + + @property + def nvir(self): + return tuple([self.norb - x for x in self.nocc]) + + @property + def ova(self): + oa, ob = self.nocc + va, vb = self.nvir + return oa * va + + @property + def ovb(self): + oa, ob = self.nocc + va, vb = self.nvir + return ob * vb + + @property + def mo_coeff_occ(self): + """Occupied MO coefficients.""" + na, nb = self.nocc + return self.mo_coeff[0][:, :na], self.mo_coeff[1][:, :nb] + + @property + def mo_coeff_vir(self): + """Virtual MO coefficients.""" + na, nb = self.nocc + return self.mo_coeff[0][:, na:], self.mo_coeff[1][:, nb:] + + def _gen_arrays(self, xc_kernel=None, alpha=1.0): + t0 = timer() + + nocc_a, nocc_b = self.nocc + nvir_a, nvir_b = self.nvir + # Only have diagonal components in canonical basis. + epsa = np.zeros((nocc_a, nvir_a)) + epsa = epsa + self.mf.mo_energy[0][nocc_a:] + epsa = (epsa.T - self.mf.mo_energy[0][:nocc_a]).T + epsa = epsa.reshape((self.ova,)) + + epsb = np.zeros((nocc_a, nvir_a)) + epsb = epsb + self.mf.mo_energy[1][nocc_b:] + epsb = (epsb.T - self.mf.mo_energy[1][:nocc_b]).T + epsb = epsb.reshape((self.ovb,)) + + if self.ov_rot is not None: + epsa = einsum("pn,n,qn->pq", self.ov_rot[0], epsa, self.ov_rot[0]) + try: + epsa, ca = scipy.linalg.eigh(epsa) + except Exception as e: + print(epsa) + raise e + epsb = einsum("pn,n,qn->pq", self.ov_rot[1], epsb, self.ov_rot[1]) + try: + epsb, cb = scipy.linalg.eigh(epsb) + except Exception as e: + print(epsb) + raise e + self.ov_rot = (dot(ca.T, self.ov_rot[0]), dot(cb.T, self.ov_rot[1])) + + AmB = np.concatenate([epsa, epsb]) + fullv = self.get_k() + ApB = 2 * fullv * alpha + if self.ov_rot is not None: + fullrot = scipy.linalg.block_diagonal(self.ov_rot[0], self.ov_rot[1]) + ApB = dot(fullrot, ApB, fullrot.T) + + # At this point AmB is just epsilon so add in. + ApB[np.diag_indices_from(ApB)] += AmB + + if xc_kernel is None: + M = np.einsum("p,pq,q->pq", AmB ** (0.5), ApB, AmB ** (0.5)) + else: + # Grab A and B contributions for XC kernel. + ApB_xc, AmB_xc = self.get_xc_contribs( + xc_kernel, self.mo_coeff_occ, self.mo_coeff_vir, alpha + ) + ApB = ApB + ApB_xc + AmB = np.diag(AmB) + AmB_xc + del ApB_xc, AmB_xc + AmBrt = scipy.linalg.sqrtm(AmB) + M = dot(AmBrt, ApB, AmBrt) + + self.log.timing("Time to build RPA arrays: %s", time_string(timer() - t0)) + return M, AmB, ApB, (epsa, epsb), fullv + +
[docs] def get_k(self): + vaa, vab, vbb = self.ao2mo() + + nocc_a, nocc_b = self.nocc + nvir_a, nvir_b = self.nvir + # Get coulomb interaction in occupied-virtual space. + vaa = vaa[:nocc_a, nocc_a:, :nocc_a, nocc_a:].reshape((self.ova, self.ova)) + vab = vab[:nocc_a, nocc_a:, :nocc_b, nocc_b:].reshape((self.ova, self.ovb)) + vbb = vbb[:nocc_b, nocc_b:, :nocc_b, nocc_b:].reshape((self.ovb, self.ovb)) + + fullv = np.zeros((self.ov, self.ov)) + fullv[: self.ova, : self.ova] = vaa + fullv[: self.ova, self.ova :] = vab + fullv[self.ova :, : self.ova] = vab.T + fullv[self.ova :, self.ova :] = vbb + return fullv
+ +
[docs] def ao2mo(self, mo_coeff=None): + """Get the ERIs in MO basis""" + mo_coeff = self.mo_coeff if mo_coeff is None else mo_coeff + # Just in case have spin dependent integrals... + if isinstance(self.mf._eri, tuple): + eris_aa = pyscf.ao2mo.kernel(self.mf._eri[0], mo_coeff[0], compact=False) + eris_bb = pyscf.ao2mo.kernel(self.mf._eri[2], mo_coeff[1], compact=False) + eris_ab = pyscf.ao2mo.kernel(self.mf._eri[1], (mo_coeff[0], mo_coeff[0], mo_coeff[1], mo_coeff[1]), + compact=False) + else: + # Call three-times to spin-restricted embedding + self.log.debugv("Making (aa|aa) ERIs...") + eris_aa = super().ao2mo(mo_coeff[0]) + self.log.debugv("Making (bb|bb) ERIs...") + eris_bb = super().ao2mo(mo_coeff[1]) + self.log.debugv("Making (aa|bb) ERIs...") + eris_ab = super().ao2mo((mo_coeff[0], mo_coeff[0], mo_coeff[1], mo_coeff[1])) + return (eris_aa, eris_ab, eris_bb)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver.html b/_modules/vayesta/solver.html new file mode 100644 index 000000000..c79df3918 --- /dev/null +++ b/_modules/vayesta/solver.html @@ -0,0 +1,228 @@ + + + + + + vayesta.solver — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver

+from vayesta.solver.ccsd import RCCSD_Solver, UCCSD_Solver
+from vayesta.solver.cisd import RCISD_Solver, UCISD_Solver
+from vayesta.solver.coupled_ccsd import coupledRCCSD_Solver
+from vayesta.solver.dump import DumpSolver
+from vayesta.solver.ebcc import REBCC_Solver, UEBCC_Solver, EB_REBCC_Solver, EB_UEBCC_Solver
+from vayesta.solver.ebfci import EB_EBFCI_Solver, EB_UEBFCI_Solver
+from vayesta.solver.ext_ccsd import extRCCSD_Solver, extUCCSD_Solver
+from vayesta.solver.fci import FCI_Solver, UFCI_Solver
+from vayesta.solver.hamiltonian import is_ham, is_uhf_ham, is_eb_ham, ClusterHamiltonian
+from vayesta.solver.mp2 import RMP2_Solver, UMP2_Solver
+from vayesta.solver.tccsd import TRCCSD_Solver
+
+
+
[docs]def get_solver_class(ham, solver): + assert (is_ham(ham)) + uhf = is_uhf_ham(ham) + eb = is_eb_ham(ham) + return _get_solver_class(uhf, eb, solver, ham.log)
+ + +
[docs]def check_solver_config(is_uhf, is_eb, solver, log): + _get_solver_class(is_uhf, is_eb, solver, log)
+ + +def _get_solver_class(is_uhf, is_eb, solver, log): + try: + solver_cls = _get_solver_class_internal(is_uhf, is_eb, solver) + return solver_cls + except ValueError as e: + spinmessage = "unrestricted" if is_uhf else "restricted" + bosmessage = "coupled electron-boson" if is_eb else "purely electronic" + + fullmessage = f"Error; solver {solver} not available for {spinmessage} {bosmessage} systems" + log.critical(fullmessage) + raise ValueError(fullmessage) + + +def _get_solver_class_internal(is_uhf, is_eb, solver): + solver = solver.upper() + # First check if we have a CC approach as implemented in pyscf. + if solver == "CCSD" and not is_eb: + # Use pyscf solvers. + if is_uhf: + return UCCSD_Solver + else: + return RCCSD_Solver + if solver == "TCCSD": + if is_uhf or is_eb: + raise ValueError("TCCSD is not implemented for unrestricted or electron-boson calculations!") + return TRCCSD_Solver + if solver == "EXTCCSD": + if is_eb: + raise ValueError("extCCSD is not implemented for electron-boson calculations!") + if is_uhf: + return extUCCSD_Solver + return extRCCSD_Solver + if solver == "COUPLEDCCSD": + if is_eb: + raise ValueError("coupledCCSD is not implemented for electron-boson calculations!") + if is_uhf: + raise ValueError("coupledCCSD is not implemented for unrestricted calculations!") + return coupledRCCSD_Solver + + # Now consider general CC ansatzes; these are solved via EBCC. + if "CC" in solver: + if is_uhf: + if is_eb: + solverclass = EB_UEBCC_Solver + else: + solverclass = UEBCC_Solver + else: + if is_eb: + solverclass = EB_REBCC_Solver + else: + solverclass = REBCC_Solver + if solver == "EBCC": + # Default to `opts.ansatz`. + return solverclass + if solver[:2] == "EB": + solver = solver[2:] + if solver == "CCSD" and is_eb: + # Need to specify CC level for coupled electron-boson model; throw an error rather than assume. + raise ValueError( + "Please specify a coupled electron-boson CC ansatz as a solver, for example CCSD-S-1-1," + "rather than CCSD") + + def get_right_CC(*args, **kwargs): + + if kwargs.get("ansatz", None) is not None: + raise ValueError( + "Desired CC ansatz specified differently in solver and solver_options.ansatz." + "Please use only specify via one approach, or ensure they agree.") + kwargs["ansatz"] = solver + return solverclass(*args, **kwargs) + + return get_right_CC + if solver == "FCI": + if is_uhf: + if is_eb: + return EB_UEBFCI_Solver + else: + return UFCI_Solver + else: + if is_eb: + return EB_EBFCI_Solver + else: + return FCI_Solver + if is_eb: + raise ValueError("%s solver is not implemented for coupled electron-boson systems!", solver) + if solver == "MP2": + if is_uhf: + return UMP2_Solver + else: + return RMP2_Solver + if solver == "CISD": + if is_uhf: + return UCISD_Solver + else: + return RCISD_Solver + if solver == "DUMP": + return DumpSolver + raise ValueError("Unknown solver: %s" % solver) +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/ccsd.html b/_modules/vayesta/solver/ccsd.html new file mode 100644 index 000000000..0726e018a --- /dev/null +++ b/_modules/vayesta/solver/ccsd.html @@ -0,0 +1,294 @@ + + + + + + vayesta.solver.ccsd — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.ccsd

+import dataclasses
+
+import numpy as np
+import pyscf.cc
+
+from vayesta.core.types import CCSD_WaveFunction
+from vayesta.core.util import dot, log_method, einsum
+from vayesta.solver._uccsd_eris import uao2mo
+from vayesta.solver.cisd import CISD_Solver
+from vayesta.solver.solver import ClusterSolver, UClusterSolver
+
+
+
[docs]class RCCSD_Solver(ClusterSolver): +
[docs] @dataclasses.dataclass + class Options(ClusterSolver.Options): + # Convergence + max_cycle: int = 100 # Max number of iterations + conv_tol: float = None # Convergence energy tolerance + conv_tol_normt: float = None # Convergence amplitude tolerance + diis_space: int = None # DIIS space size + diis_start_cycle: int = None # The step to start DIIS, default is 0 + iterative_damping: float = None # self-consistent damping parameter + level_shift: float = None # Level shift for virtual orbitals to stabilize ccsd iterations + init_guess: str = 'MP2' # ['MP2', 'CISD'] + solve_lambda: bool = True # If false, use Lambda=T approximation + # Self-consistent mode + sc_mode: int = None
+ +
[docs] def kernel(self, t1=None, t2=None, l1=None, l2=None, coupled_fragments=None, t_diagnostic=True): + mf_clus, frozen = self.hamil.to_pyscf_mf(allow_dummy_orbs=True, allow_df=True) + solver_cls = self.get_solver_class(mf_clus) + self.log.debugv("PySCF solver class= %r" % solver_cls) + mycc = solver_cls(mf_clus, frozen=frozen) + + if self.opts.max_cycle is not None: + mycc.max_cycle = self.opts.max_cycle + if self.opts.diis_space is not None: + mycc.diis_space = self.opts.diis_space + if self.opts.diis_start_cycle is not None: + mycc.diis_start_cycle = self.opts.diis_start_cycle + if self.opts.iterative_damping is not None: + mycc.iterative_damping = self.opts.iterative_damping + if self.opts.level_shift is not None: + mycc.level_shift = self.opts.level_shift + if self.opts.conv_tol is not None: + mycc.conv_tol = self.opts.conv_tol + if self.opts.conv_tol_normt is not None: + mycc.conv_tol_normt = self.opts.conv_tol_normt + mycc.callback = self.get_callback() + + if t1 is None and t2 is None: + t1, t2 = self.generate_init_guess() + + self.log.info("Solving CCSD-equations %s initial guess...", "with" if (t2 is not None) else "without") + + mycc.kernel(t1=t1, t2=t2) + self.converged = mycc.converged + + if t_diagnostic: + self.t_diagnostic(mycc) + + self.print_extra_info(mycc) + + if self.opts.solve_lambda: + l1, l2 = mycc.solve_lambda(l1=l1, l2=l2) + self.converged = self.converged and mycc.converged_lambda + else: + self.log.info("Using Lambda=T approximation for Lambda-amplitudes.") + l1, l2 = mycc.t1, mycc.t2 + + self.wf = CCSD_WaveFunction(self.hamil.mo, mycc.t1, mycc.t2, l1=l1, l2=l2)
+ +
[docs] def get_solver_class(self, mf): + if hasattr(mf, "with_df") and mf.with_df is not None: + return pyscf.cc.dfccsd.RCCSD + return pyscf.cc.ccsd.RCCSD
+ +
[docs] def generate_init_guess(self, eris=None): + if self.opts.init_guess in ('default', 'MP2'): + # CCSD will build MP2 amplitudes + return None, None + if self.opts.init_guess == 'CISD': + cisd = CISD_Solver(self.hamil) + cisd.kernel() + wf = cisd.wf.as_ccsd() + return wf.t1, wf.t2 + raise ValueError("init_guess= %r" % self.opts.init_guess)
+ +
[docs] @log_method() + def t_diagnostic(self, solver): + self.log.info("T-Diagnostic") + self.log.info("------------") + try: + dg_t1 = solver.get_t1_diagnostic() + dg_d1 = solver.get_d1_diagnostic() + dg_d2 = solver.get_d2_diagnostic() + dg_t1_msg = "good" if dg_t1 <= 0.02 else "inadequate!" + dg_d1_msg = "good" if dg_d1 <= 0.02 else ("fair" if dg_d1 <= 0.05 else "inadequate!") + dg_d2_msg = "good" if dg_d2 <= 0.15 else ("fair" if dg_d2 <= 0.18 else "inadequate!") + fmt = 3 * " %2s= %.3f (%s)" + self.log.info(fmt, "T1", dg_t1, dg_t1_msg, "D1", dg_d1, dg_d1_msg, "D2", dg_d2, dg_d2_msg) + # good: MP2~CCSD~CCSD(T) / fair: use MP2/CCSD with caution + self.log.info(" (T1<0.02: good / D1<0.02: good, D1<0.05: fair / D2<0.15: good, D2<0.18: fair)") + if dg_t1 > 0.02 or dg_d1 > 0.05 or dg_d2 > 0.18: + self.log.info(" at least one diagnostic indicates that CCSD is not adequate!") + except Exception as e: + self.log.error("Exception in T-diagnostic: %s", e)
+ +
[docs] def get_callback(self): + return None
+ +
[docs] def print_extra_info(self, mycc): + pass
+ + def _debug_exact_wf(self, wf): + mo = self.hamil.mo + # Project onto cluster: + ovlp = self.hamil._fragment.base.get_ovlp() + ro = dot(wf.mo.coeff_occ.T, ovlp, mo.coeff_occ) + rv = dot(wf.mo.coeff_vir.T, ovlp, mo.coeff_vir) + t1 = dot(ro.T, wf.t1, rv) + t2 = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', ro, ro, wf.t2, rv, rv) + if wf.l1 is not None: + l1 = dot(ro.T, wf.l1, rv) + l2 = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', ro, ro, wf.l2, rv, rv) + else: + l1 = l2 = None + self.wf = CCSD_WaveFunction(mo, t1, t2, l1=l1, l2=l2) + self.converged = True + + def _debug_random_wf(self): + mo = self.hamil.mo + t1 = np.random.rand(mo.nocc, mo.nvir) + l1 = np.random.rand(mo.nocc, mo.nvir) + t2 = np.random.rand(mo.nocc, mo.nocc, mo.nvir, mo.nvir) + l2 = np.random.rand(mo.nocc, mo.nocc, mo.nvir, mo.nvir) + self.wf = CCSD_WaveFunction(mo, t1, t2, l1=l1, l2=l2) + self.converged = True
+ + +
[docs]class UCCSD_Solver(UClusterSolver, RCCSD_Solver): +
[docs] @dataclasses.dataclass + class Options(RCCSD_Solver.Options): + pass
+ +
[docs] def get_solver_class(self, mf): + return UCCSD
+ +
[docs] def t_diagnostic(self, solver): + """T diagnostic not implemented for UCCSD in PySCF.""" + self.log.info("T diagnostic not implemented for UCCSD in PySCF.")
+ + def _debug_exact_wf(self, wf): + mo = self.hamil.mo + # Project onto cluster: + ovlp = self.hamil._fragment.base.get_ovlp() + roa = dot(wf.mo.coeff_occ[0].T, ovlp, mo.coeff_occ[0]) + rob = dot(wf.mo.coeff_occ[1].T, ovlp, mo.coeff_occ[1]) + rva = dot(wf.mo.coeff_vir[0].T, ovlp, mo.coeff_vir[0]) + rvb = dot(wf.mo.coeff_vir[1].T, ovlp, mo.coeff_vir[1]) + t1a = dot(roa.T, wf.t1a, rva) + t1b = dot(rob.T, wf.t1b, rvb) + t2aa = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', roa, roa, wf.t2aa, rva, rva) + t2ab = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', roa, rob, wf.t2ab, rva, rvb) + t2bb = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', rob, rob, wf.t2bb, rvb, rvb) + t1 = (t1a, t1b) + t2 = (t2aa, t2ab, t2bb) + if wf.l1 is not None: + l1a = dot(roa.T, wf.l1a, rva) + l1b = dot(rob.T, wf.l1b, rvb) + l2aa = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', roa, roa, wf.l2aa, rva, rva) + l2ab = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', roa, rob, wf.l2ab, rva, rvb) + l2bb = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', rob, rob, wf.l2bb, rvb, rvb) + l1 = (l1a, l1b) + l2 = (l2aa, l2ab, l2bb) + else: + l1 = l2 = None + self.wf = CCSD_WaveFunction(mo, t1, t2, l1=l1, l2=l2) + self.converged = True + + def _debug_random_wf(self): + raise NotImplementedError
+ + +# Subclass pyscf UCCSD to enable support of spin-dependent ERIs. +
[docs]class UCCSD(pyscf.cc.uccsd.UCCSD): + ao2mo = uao2mo
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/ccsdtq.html b/_modules/vayesta/solver/ccsdtq.html new file mode 100644 index 000000000..3dc8a8cf9 --- /dev/null +++ b/_modules/vayesta/solver/ccsdtq.html @@ -0,0 +1,427 @@ + + + + + + vayesta.solver.ccsdtq — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.ccsdtq

+import numpy as np
+
+from vayesta.core.util import einsum
+
+
+
[docs]def t2_residual_rhf_t3v(solver, fragment, t3, v): + govov, gvvov, gooov, govoo = v + nocc, nvir = govov.shape[:2] + dt2 = np.zeros((nocc, nocc, nvir, nvir)) + + # First term: 1/2 P_ab [t_ijmaef v_efbm] + dt2 += einsum('bemf, jimeaf -> ijab', gvvov - gvvov.transpose(0, 3, 2, 1), t3) / 2 + dt2 += einsum('bemf, ijmaef -> ijab', gvvov, t3) + # Second term: -1/2 P_ij [t_imnabe v_jemn] + dt2 -= einsum('mjne, minbae -> ijab', gooov - govoo.transpose(0, 3, 2, 1), t3) / 2 + dt2 -= einsum('mjne, imnabe -> ijab', gooov, t3) + # Permutation + dt2 += dt2.transpose(1, 0, 3, 2) + + return dt2
+ + +
[docs]def t_residual_rhf(solver, fragment, t1, t2, t3, t4, f, v, include_t3v=False): + t4_abaa, t4_abab = t4 + fov = f + govov, gvvov, gooov, govoo = v + nocc, nvir = t1.shape + + dt1 = np.zeros_like(t1) + dt2 = np.zeros_like(t2) + + # Construct physical antisymmetrized integrals for some contractions + # Note that some contractions are with physical and some chemical integrals (govov) + antiphys_g = (govov - govov.transpose(0, 3, 2, 1)).transpose(0, 2, 1, 3) + spinned_antiphys_g = (2.0 * govov - govov.transpose(0, 3, 2, 1)).transpose(0, 2, 1, 3) + + # --- T1 update + # --- T3 * V + dt1 -= einsum('ijab, jiupab -> up', spinned_antiphys_g, t3) + + # --- T2 update + # --- T3 * F + if np.allclose(fov, np.zeros_like(fov)): + solver.log.info("fov block zero: No T3 * f contribution.") + # (Fa) (Taba) contraction + dt2 += einsum('me, ijmabe -> ijab', fov, t3) + # (Fb) (Tabb) contraction + dt2 += einsum('me, jimbae -> ijab', fov, t3) + solver.log.info("(T3 * F) -> T2 update norm from fragment {}: {}".format(fragment.id, np.linalg.norm(dt2))) + + # --- T4 * V + # (Vaa) (Tabaa) contraction + t4v = einsum('mnef, ijmnabef -> ijab', antiphys_g, t4_abaa) / 4 + t4v += t4v.transpose(1, 0, 3, 2) + # (Vab) (Tabab) contraction + t4v += einsum('menf, ijmnabef -> ijab', govov, t4_abab) + dt2 += t4v + + # --- (T1 T3) * V + # Note: Approximate T1 by the CCSDTQ T1 amplitudes of this fragment. + # TODO: Relax this approximation via the callback? + t1t3v = np.zeros_like(dt2) + X_ = einsum('mnef, me -> nf', spinned_antiphys_g, t1) + t1t3v += einsum('nf, nijfab -> ijab', X_, t3) + + X_ = einsum('mnef, njiebf -> ijmb', antiphys_g, t3) / 2 + X_ += einsum('menf, jinfeb -> ijmb', govov, t3) + t1t3v += einsum('ijmb, ma -> ijab', X_, t1) + + X_ = einsum('mnef, mjnfba -> ejab', antiphys_g, t3) / 2 + X_ += einsum('menf, nmjbaf -> ejab', govov, t3) + t1t3v += einsum('ejab, ie -> ijab', X_, t1) + # apply permutation + t1t3v += t1t3v.transpose(1, 0, 3, 2) + dt2 += t1t3v + solver.log.info("T1 norm in ext corr from fragment {}: {}".format(fragment.id, np.linalg.norm(t1))) + + # --- T3 * V + if include_t3v: + # Option to leave out this term, and instead perform T3 * V with the + # integrals in the parent cluster later. + # This will give a different result since the V operators + # will span a different space. Instead, here we just contract T3 with integrals + # in cluster y (FCI), rather than cluster x (CCSD) + dt2 += t2_residual_rhf_t3v(solver, fragment, t3, v) + + return dt1, dt2
+ + +
[docs]def t2_residual_uhf_t3v(solver, fragment, t3, v): + t3_aaaaaa, t3_abaaba, t3_babbab, t3_bbbbbb = t3 + v_ooov, v_ovov, v_ovvv, v_vvov, v_ovoo = v + v_aaaa_ooov, v_aabb_ooov, v_bbbb_ooov = v_ooov + v_aaaa_ovov, v_aabb_ovov, v_bbbb_ovov = v_ovov + v_aaaa_ovvv, v_aabb_ovvv, v_bbbb_ovvv = v_ovvv + v_aaaa_vvov, v_aabb_vvov, v_bbbb_vvov = v_vvov + v_aaaa_ovoo, v_aabb_ovoo, v_bbbb_ovoo = v_ovoo + nocc = (t3_abaaba.shape[0], t3_abaaba.shape[1]) + nvir = (t3_abaaba.shape[3], t3_abaaba.shape[4]) + + x0 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x0 += einsum("jlkc,iklacb->ijab", v_aabb_ooov, t3_abaaba) + x1 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x1 += einsum("jlkc,iklabc->ijab", v_aaaa_ooov, t3_aaaaaa) * -1.0 + x2 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x2 += einsum("ijba->ijab", x0) * -1.0 + x2 += einsum("ijba->ijab", x1) * -1.0 + dt2_aaaa = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + dt2_aaaa += einsum("ijab->ijab", x2) * -1.0 + dt2_aaaa += einsum("jiab->ijab", x2) + + x3 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x3 += einsum("bdkc,ikjacd->ijab", v_aabb_vvov, t3_abaaba) + x4 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x4 += einsum("kcbd,ijkacd->ijab", v_aaaa_ovvv, t3_aaaaaa) + x5 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x5 += einsum("ijab->ijab", x3) + x5 += einsum("ijab->ijab", x4) * -1.0 + dt2_aaaa += einsum("ijab->ijab", x5) + dt2_aaaa += einsum("ijba->ijab", x5) * -1.0 + + x0 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x0 += einsum("jklc,iklabc->ijab", v_bbbb_ooov, t3_bbbbbb) + x1 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x1 += einsum("lcjk,ilkacb->ijab", v_aabb_ovoo, t3_babbab) + x2 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x2 += einsum("ijba->ijab", x0) * -1.0 + x2 += einsum("ijba->ijab", x1) * -1.0 + dt2_bbbb = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + dt2_bbbb += einsum("ijab->ijab", x2) * -1.0 + dt2_bbbb += einsum("jiab->ijab", x2) + + x3 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x3 += einsum("kdbc,ijkacd->ijab", v_bbbb_ovvv, t3_bbbbbb) * -1.0 + x4 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x4 += einsum("kdbc,ikjadc->ijab", v_aabb_ovvv, t3_babbab) + x5 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x5 += einsum("ijab->ijab", x3) + x5 += einsum("ijab->ijab", x4) * -1.0 + dt2_bbbb += einsum("ijab->ijab", x5) * -1.0 + dt2_bbbb += einsum("ijba->ijab", x5) + + dt2_abab = np.zeros((nocc[0], nocc[1], nvir[0], nvir[1]), dtype=np.float64) + dt2_abab += einsum("ilkc,jlkbac->ijab", v_aabb_ooov, t3_babbab) * -1.0 + dt2_abab += einsum("ldjk,iklabd->ijab", v_aabb_ovoo, t3_abaaba) * -1.0 + dt2_abab += einsum("ilmd,ljmabd->ijab", v_aaaa_ooov, t3_abaaba) * -1.0 + dt2_abab += einsum("ldbc,ijlacd->ijab", v_aabb_ovvv, t3_abaaba) + dt2_abab += einsum("adkc,jikbdc->ijab", v_aabb_vvov, t3_babbab) + dt2_abab += einsum("jnkc,kinbac->ijab", v_bbbb_ooov, t3_babbab) + dt2_abab += einsum("ldae,ijldbe->ijab", v_aaaa_ovvv, t3_abaaba) * -1.0 + dt2_abab += einsum("kcbf,jikcaf->ijab", v_bbbb_ovvv, t3_babbab) * -1.0 + + dt2 = (dt2_aaaa, dt2_abab, dt2_bbbb) + + return dt2
+ + +
[docs]def t_residual_uhf(solver, fragment, t1, t2, t3, t4, f, v, include_t3v=False): + t1_aa, t1_bb = t1 + t2_aaaa, t2_abab, t2_bbbb = t2 + t3_aaaaaa, t3_abaaba, t3_babbab, t3_bbbbbb = t3 + t4_aaaaaaaa, t4_aaabaaab, t4_abababab, t4_abbbabbb, t4_bbbbbbbb = t4 + f_aa_ov, f_bb_ov = f + v_ooov, v_ovov, v_ovvv, v_vvov, v_ovoo = v + v_aaaa_ooov, v_aabb_ooov, v_bbbb_ooov = v_ooov + v_aaaa_ovov, v_aabb_ovov, v_bbbb_ovov = v_ovov + v_aaaa_ovvv, v_aabb_ovvv, v_bbbb_ovvv = v_ovvv + v_aaaa_vvov, v_aabb_vvov, v_bbbb_vvov = v_vvov + v_aaaa_ovoo, v_aabb_ovoo, v_bbbb_ovoo = v_ovoo + nocc = (t1_aa.shape[0], t1_bb.shape[0]) + nvir = (t1_aa.shape[1], t1_bb.shape[1]) + + dt1_aa = np.zeros((nocc[0], nvir[0]), dtype=np.float64) + dt1_aa += einsum("jbkc,ijkabc->ia", v_aaaa_ovov, t3_aaaaaa) * 0.5 + dt1_aa += einsum("ldme,limdae->ia", v_bbbb_ovov, t3_babbab) * 0.5 + dt1_aa += einsum("jbmd,imjadb->ia", v_aabb_ovov, t3_abaaba) + dt1_bb = np.zeros((nocc[1], nvir[1]), dtype=np.float64) + dt1_bb += einsum("jbkc,jikbac->ia", v_aaaa_ovov, t3_abaaba) * 0.5 + dt1_bb += einsum("ldme,ilmade->ia", v_bbbb_ovov, t3_bbbbbb) * 0.5 + dt1_bb += einsum("kcmd,ikmacd->ia", v_aabb_ovov, t3_babbab) + + dt2_aaaa = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + dt2_aaaa += einsum("ldkc,ijlkabdc->ijab", v_aabb_ovov, t4_aaabaaab) + dt2_aaaa += einsum("kcme,ikjmacbe->ijab", v_bbbb_ovov, t4_abababab) * 0.5 + dt2_aaaa += einsum("lfnd,ijlnabdf->ijab", v_aaaa_ovov, t4_aaaaaaaa) * -0.5 + x0 = np.zeros((nocc[1], nvir[1], nocc[0], nocc[0]), dtype=np.float64) + x0 += einsum("jb,kbia->iajk", t1_aa, v_aabb_ovov) + x1 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x1 += einsum("kcil,jklacb->ijab", x0, t3_abaaba) + x2 = np.zeros((nocc[0], nocc[0], nocc[0], nvir[0]), dtype=np.float64) + x2 += einsum("ib,jakb->ijka", t1_aa, v_aaaa_ovov) + x3 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x3 += einsum("iklc,jklabc->ijab", x2, t3_aaaaaa) * -1.0 + x4 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x4 += einsum("ijba->ijab", x1) * -1.0 + x4 += einsum("ijba->ijab", x3) * -1.0 + dt2_aaaa += einsum("ijab->ijab", x4) + dt2_aaaa += einsum("jiab->ijab", x4) * -1.0 + x5 = np.zeros((nocc[0], nocc[0], nocc[0], nvir[0]), dtype=np.float64) + x5 += einsum("kclb,iljabc->ijka", v_aabb_ovov, t3_abaaba) + x6 = np.zeros((nocc[0], nocc[0], nocc[0], nvir[0]), dtype=np.float64) + x6 += einsum("kclb,ijlabc->ijka", v_aaaa_ovov, t3_aaaaaa) * -1.0 + x7 = np.zeros((nocc[0], nocc[0], nocc[0], nvir[0]), dtype=np.float64) + x7 += einsum("ijka->ijka", x5) + x7 += einsum("ijka->ijka", x6) + x8 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x8 += einsum("ka,ijkb->ijab", t1_aa, x7) + dt2_aaaa += einsum("ijab->ijab", x8) + dt2_aaaa += einsum("ijba->ijab", x8) * -1.0 + x9 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x9 += einsum("ibja->ijab", v_aaaa_ovov) + x9 += einsum("iajb->ijab", v_aaaa_ovov) * -1.0 + x10 = np.zeros((nocc[0], nvir[0]), dtype=np.float64) + x10 += einsum("ia->ia", f_aa_ov) + x10 += einsum("jb,iajb->ia", t1_bb, v_aabb_ovov) + x10 += einsum("kc,kica->ia", t1_aa, x9) * -1.0 + dt2_aaaa += einsum("ld,ijlabd->ijab", x10, t3_aaaaaa) + x11 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x11 += einsum("ibja->ijab", v_bbbb_ovov) + x11 += einsum("iajb->ijab", v_bbbb_ovov) * -1.0 + x12 = np.zeros((nocc[1], nvir[1]), dtype=np.float64) + x12 += einsum("ia->ia", f_bb_ov) + x12 += einsum("jb,jbia->ia", t1_aa, v_aabb_ovov) + x12 += einsum("kc,kica->ia", t1_bb, x11) * -1.0 + dt2_aaaa += einsum("kc,ikjacb->ijab", x12, t3_abaaba) + dt2_bbbb = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + dt2_bbbb += einsum("kcld,ijklabcd->ijab", v_bbbb_ovov, t4_bbbbbbbb) * 0.5 + dt2_bbbb += einsum("melc,mijleabc->ijab", v_aabb_ovov, t4_abbbabbb) + dt2_bbbb += einsum("menf,minjeafb->ijab", v_aaaa_ovov, t4_abababab) * 0.5 + x0 = np.zeros((nocc[1], nocc[1], nocc[1], nvir[1]), dtype=np.float64) + x0 += einsum("ib,jakb->ijka", t1_bb, v_bbbb_ovov) + x1 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x1 += einsum("iklc,jklabc->ijab", x0, t3_bbbbbb) * -1.0 + x2 = np.zeros((nocc[1], nocc[1], nocc[0], nvir[0]), dtype=np.float64) + x2 += einsum("ib,kajb->ijka", t1_bb, v_aabb_ovov) + x3 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x3 += einsum("iklc,jlkacb->ijab", x2, t3_babbab) + x4 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x4 += einsum("ijba->ijab", x1) * -1.0 + x4 += einsum("ijba->ijab", x3) * -1.0 + dt2_bbbb += einsum("ijab->ijab", x4) + dt2_bbbb += einsum("jiab->ijab", x4) * -1.0 + x5 = np.zeros((nocc[1], nocc[1], nocc[1], nvir[1]), dtype=np.float64) + x5 += einsum("kclb,ijlabc->ijka", v_bbbb_ovov, t3_bbbbbb) * -1.0 + x6 = np.zeros((nocc[1], nocc[1], nocc[1], nvir[1]), dtype=np.float64) + x6 += einsum("lckb,iljacb->ijka", v_aabb_ovov, t3_babbab) + x7 = np.zeros((nocc[1], nocc[1], nocc[1], nvir[1]), dtype=np.float64) + x7 += einsum("ijka->ijka", x5) + x7 += einsum("ijka->ijka", x6) + x8 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x8 += einsum("ka,ijkb->ijab", t1_bb, x7) + dt2_bbbb += einsum("ijab->ijab", x8) + dt2_bbbb += einsum("ijba->ijab", x8) * -1.0 + x9 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x9 += einsum("ibja->ijab", v_bbbb_ovov) + x9 += einsum("iajb->ijab", v_bbbb_ovov) * -1.0 + x10 = np.zeros((nocc[1], nvir[1]), dtype=np.float64) + x10 += einsum("ia->ia", f_bb_ov) + x10 += einsum("jb,jbia->ia", t1_aa, v_aabb_ovov) + x10 += einsum("kc,kica->ia", t1_bb, x9) * -1.0 + dt2_bbbb += einsum("lc,ijlabc->ijab", x10, t3_bbbbbb) + x11 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x11 += einsum("ibja->ijab", v_aaaa_ovov) + x11 += einsum("iajb->ijab", v_aaaa_ovov) * -1.0 + x12 = np.zeros((nocc[0], nvir[0]), dtype=np.float64) + x12 += einsum("ia->ia", f_aa_ov) + x12 += einsum("jb,iajb->ia", t1_bb, v_aabb_ovov) + x12 += einsum("kc,kica->ia", t1_aa, x11) * -1.0 + dt2_bbbb += einsum("me,imjaeb->ijab", x12, t3_babbab) + dt2_abab = np.zeros((nocc[0], nocc[1], nvir[0], nvir[1]), dtype=np.float64) + dt2_abab += einsum("kcld,ikljacdb->ijab", v_aaaa_ovov, t4_aaabaaab) * 0.5 + dt2_abab += einsum("ldme,ijlmabde->ijab", v_aabb_ovov, t4_abababab) + dt2_abab += einsum("mfne,ijmnabef->ijab", v_bbbb_ovov, t4_abbbabbb) * -0.5 + x0 = np.zeros((nocc[0], nocc[0], nocc[0], nvir[0]), dtype=np.float64) + x0 += einsum("ib,jakb->ijka", t1_aa, v_aaaa_ovov) + dt2_abab += einsum("ikld,kjlabd->ijab", x0, t3_abaaba) + x1 = np.zeros((nocc[1], nocc[1], nocc[0], nvir[0]), dtype=np.float64) + x1 += einsum("ib,kajb->ijka", t1_bb, v_aabb_ovov) + dt2_abab += einsum("jmld,imlabd->ijab", x1, t3_abaaba) * -1.0 + x2 = np.zeros((nocc[1], nvir[1], nocc[0], nocc[0]), dtype=np.float64) + x2 += einsum("jb,kbia->iajk", t1_aa, v_aabb_ovov) + dt2_abab += einsum("meil,jlmbae->ijab", x2, t3_babbab) * -1.0 + x3 = np.zeros((nocc[1], nocc[1], nocc[1], nvir[1]), dtype=np.float64) + x3 += einsum("ib,jakb->ijka", t1_bb, v_bbbb_ovov) + dt2_abab += einsum("jmne,minbae->ijab", x3, t3_babbab) + x4 = np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]), dtype=np.float64) + x4 += einsum("ibja->ijab", v_bbbb_ovov) + x4 += einsum("iajb->ijab", v_bbbb_ovov) * -1.0 + x5 = np.zeros((nocc[1], nvir[1]), dtype=np.float64) + x5 += einsum("ia->ia", f_bb_ov) + x5 += einsum("jb,jbia->ia", t1_aa, v_aabb_ovov) + x5 += einsum("kc,kica->ia", t1_bb, x4) * -1.0 + dt2_abab += einsum("me,jimbae->ijab", x5, t3_babbab) + x6 = np.zeros((nocc[0], nocc[0], nvir[0], nvir[0]), dtype=np.float64) + x6 += einsum("ibja->ijab", v_aaaa_ovov) + x6 += einsum("iajb->ijab", v_aaaa_ovov) * -1.0 + x7 = np.zeros((nocc[0], nvir[0]), dtype=np.float64) + x7 += einsum("ia->ia", f_aa_ov) + x7 += einsum("jb,iajb->ia", t1_bb, v_aabb_ovov) + x7 += einsum("kc,kica->ia", t1_aa, x6) * -1.0 + dt2_abab += einsum("ld,ijlabd->ijab", x7, t3_abaaba) + x8 = np.zeros((nocc[1], nvir[1], nocc[0], nocc[0]), dtype=np.float64) + x8 += einsum("kclb,ijlacb->iajk", v_aabb_ovov, t3_babbab) + x8 += einsum("kcmd,jimcad->iajk", v_aaaa_ovov, t3_abaaba) + dt2_abab += einsum("la,jbil->ijab", t1_aa, x8) * -1.0 + x9 = np.zeros((nocc[1], nocc[1], nocc[0], nvir[0]), dtype=np.float64) + x9 += einsum("jclb,iklbac->ijka", v_bbbb_ovov, t3_babbab) * -1.0 + x9 += einsum("mdjc,kimacd->ijka", v_aabb_ovov, t3_abaaba) + dt2_abab += einsum("mb,jmia->ijab", t1_bb, x9) * -1.0 + + if include_t3v: + dt2_t3v = t2_residual_uhf_t3v(solver, fragment, t3, v) + dt2_aaaa += dt2_t3v[0] + dt2_abab += dt2_t3v[1] + dt2_bbbb += dt2_t3v[2] + + dt1 = (dt1_aa, dt1_bb) + dt2 = (dt2_aaaa, dt2_abab, dt2_bbbb) + + return dt1, dt2
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/cisd.html b/_modules/vayesta/solver/cisd.html new file mode 100644 index 000000000..2055c5953 --- /dev/null +++ b/_modules/vayesta/solver/cisd.html @@ -0,0 +1,157 @@ + + + + + + vayesta.solver.cisd — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.cisd

+import dataclasses
+
+from pyscf import ci
+
+from vayesta.core.types import CISD_WaveFunction
+from vayesta.solver._uccsd_eris import uao2mo
+from vayesta.solver.hamiltonian import is_uhf_ham, is_eb_ham
+from vayesta.solver.solver import ClusterSolver, UClusterSolver
+
+
+
[docs]def CISD_Solver(hamil, *args, **kwargs): + if is_eb_ham(hamil): + raise NotImplementedError("Coupled electron-boson CISD solver not implemented.") + if is_uhf_ham(hamil): + return UCISD_Solver(hamil, *args, **kwargs) + else: + return RCISD_Solver(hamil, *args, **kwargs)
+ + +
[docs]class RCISD_Solver(ClusterSolver): +
[docs] @dataclasses.dataclass + class Options(ClusterSolver.Options): + conv_tol: float = None # Convergence tolerance. If None, use PySCF default
+ +
[docs] def kernel(self, *args, **kwargs): + mf_clus, frozen = self.hamil.to_pyscf_mf(allow_dummy_orbs=True) + solver_class = self.get_solver_class() + mycisd = solver_class(mf_clus, frozen=frozen) + if self.opts.conv_tol: + mycisd.conv_tol = self.opts.conv_tol + ecisd, civec = mycisd.kernel() + c0, c1, c2 = mycisd.cisdvec_to_amplitudes(civec) + self.wf = CISD_WaveFunction(self.hamil.mo, c0, c1, c2) + self.converged = True
+ +
[docs] def get_solver_class(self): + return ci.RCISD
+ + +
[docs]class UCISD_Solver(UClusterSolver, RCISD_Solver): +
[docs] @dataclasses.dataclass + class Options(RCISD_Solver.Options): + pass
+ +
[docs] def get_solver_class(self): + return UCISD
+ + +
[docs]class UCISD(ci.ucisd.UCISD): + ao2mo = uao2mo
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/coupled_ccsd.html b/_modules/vayesta/solver/coupled_ccsd.html new file mode 100644 index 000000000..c0472474c --- /dev/null +++ b/_modules/vayesta/solver/coupled_ccsd.html @@ -0,0 +1,127 @@ + + + + + + vayesta.solver.coupled_ccsd — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.coupled_ccsd

+import dataclasses
+from typing import Optional, List
+
+from vayesta.solver.coupling import couple_ccsd_iterations
+from vayesta.solver.ccsd import RCCSD_Solver
+
+
+
[docs]class coupledRCCSD_Solver(RCCSD_Solver): +
[docs] @dataclasses.dataclass + class Options(RCCSD_Solver.Options): + # Couple CCSD in other fragments + fragments: Optional[List] = None
+ +
[docs] def set_coupled_fragments(self, fragments): + self.opts.fragments = fragments
+ +
[docs] def get_callback(self): + if self.opts.fragments is None: + raise ValueError("Please specify fragments to couple CCSD calculation with.") + return couple_ccsd_iterations(self, self.opts.fragments)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/coupling.html b/_modules/vayesta/solver/coupling.html new file mode 100644 index 000000000..28fcf6312 --- /dev/null +++ b/_modules/vayesta/solver/coupling.html @@ -0,0 +1,793 @@ + + + + + + vayesta.solver.coupling — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.coupling

+import numpy as np
+import pyscf
+
+from vayesta.core import spinalg
+from vayesta.core.util import einsum, dot
+from vayesta.mpi import mpi, RMA_Dict
+from vayesta.solver import ccsdtq
+
+
+
[docs]def transform_amplitude(t, u_occ, u_vir, u_occ2=None, u_vir2=None, inverse=False): + """u: (old basis|new basis)""" + if u_occ2 is None: + u_occ2 = u_occ + if u_vir2 is None: + u_vir2 = u_vir + if inverse: + u_occ = spinalg.T(u_occ) + u_occ2 = spinalg.T(u_occ2) + u_vir = spinalg.T(u_vir) + u_vir2 = spinalg.T(u_vir2) + + ndim = t[0].ndim + 1 + # Restricted T1: + if ndim == 2: + return einsum('ia,ix,ay->xy', t, u_occ, u_vir) + # Restricted T2: + if ndim == 4: + return einsum('ijab,ix,jy,az,bw->xyzw', t, u_occ, u_occ2, u_vir, u_vir2) + # Unrestricted T1: + if ndim == 3: + ta = transform_amplitude(t[0], u_occ[0], u_vir[0]) + tb = transform_amplitude(t[1], u_occ[1], u_vir[1]) + return (ta, tb) + # Unrestricted T2: + if ndim == 5: + taa = transform_amplitude(t[0], u_occ[0], u_vir[0]) + tab = transform_amplitude(t[1], u_occ[0], u_vir[0], u_occ[1], u_vir[1]) + tbb = transform_amplitude(t[2], u_occ[1], u_vir[1]) + return (taa, tab, tbb) + raise NotImplementedError("Transformation of amplitudes with ndim=%d" % (np.ndim(t[0]) + 1))
+ + +
[docs]def get_amplitude_norm(t1, t2): + # Restricted: + if np.ndim(t1[0]) == 1: + t1norm = np.linalg.norm(t1) + t2norm = np.linalg.norm(t2) + # Unrestricted + elif np.ndim(t1[0]) == 2: + t1norm = (np.linalg.norm(t1[0]) + np.linalg.norm(t1[1])) / 2 + t2norm = (np.linalg.norm(t2[0]) + 2 * np.linalg.norm(t2[1]) + np.linalg.norm(t2[2])) / 2 + return t1norm, t2norm
+ + +
[docs]def project_t2(t2, proj, projectors): + ndim = t2[0].ndim + 1 + if ndim == 4: + return project_t2_rspin(t2, proj, projectors) + if ndim == 5: + return project_t2_uspin(t2, proj, projectors) + raise ValueError
+ + +
[docs]def project_t2_rspin(t2, proj, projectors): + if projectors == 0: + return t2 + if projectors == 1: + t2 = einsum('xi,i...->x...', proj, t2) + return (t2 + t2.transpose(1, 0, 3, 2)) / 2 + if projectors == 2: + return einsum('xi,yj,ij...->xy...', proj, proj, t2) + raise ValueError
+ + +
[docs]def project_t2_uspin(t2, proj, projectors): + if projectors == 0: + return t2 + t2aa = project_t2_rspin(t2[0], proj[0], projectors=projectors) + t2bb = project_t2_rspin(t2[2], proj[1], projectors=projectors) + if projectors == 1: + # Average between projecting alpha and beta: + t2ab = (einsum('xi,ij...->xj...', proj[0], t2[1]) + + einsum('xj,ij...->ix...', proj[1], t2[1])) / 2 + elif projectors == 2: + t2ab = einsum('xi,yj,ij...->xy...', proj[0], proj[1], t2[1]) + else: + raise ValueError + # assert np.allclose(t2ab, -t2ab.transpose(0,1,3,2)) + return (t2aa, t2ab, t2bb)
+ + +
[docs]def couple_ccsd_iterations(solver, fragments): + """ + + Requires MPI. + """ + # Make projector P(y): + # P(y) = C(x).T S F(y) F(y).T S C(y) + # where + # C(x): Cluster orbitals of fragment x + # S: AO-overlap + # F(x): Fragment orbitals of fragment x + + ovlp = solver.base.get_ovlp() + c_occ_x = np.asarray(solver.cluster.c_active_occ, order='C') + c_vir_x = np.asarray(solver.cluster.c_active_vir, order='C') + p_occ = {} + r_occ = {} + r_vir = {} + rma = RMA_Dict.from_dict(mpi, { + (solver.fragment.id, 'c_active_occ'): c_occ_x, + (solver.fragment.id, 'c_active_vir'): c_vir_x}) + for y in fragments: + fy = y.c_proj + c_occ_y = rma[(y.id, 'c_active_occ')] + c_vir_y = rma[(y.id, 'c_active_vir')] + p_occ[y.id] = einsum('ai,ab,by,cy,cd,dj->ij', c_occ_x, ovlp, fy, fy, ovlp, c_occ_y) + r_occ[y.id] = einsum('ai,ab,bj->ij', c_occ_x, ovlp, c_occ_y) + r_vir[y.id] = einsum('ai,ab,bj->ij', c_vir_x, ovlp, c_vir_y) + rma.clear() + + def tailorfunc(kwargs): + cc = kwargs['mycc'] + t1, t2 = kwargs['t1new'], kwargs['t2new'] + cc.force_iter = True + cc.force_exit = bool(mpi.world.allreduce(int(cc.conv_flag), op=mpi.MPI.PROD)) + conv = mpi.world.gather(int(cc.conv_flag), root=0) + + rma = RMA_Dict.from_dict(mpi, {(mpi.rank, 't1'): t1, (mpi.rank, 't2'): t2}) + + t1_out = np.zeros_like(t1) + t2_out = np.zeros_like(t2) + for y in fragments: + t1y, t2y = rma[(y.id, 't1')], rma[(y.id, 't2')] + po = p_occ[y.id] + ro = r_occ[y.id] + rv = r_vir[y.id] + # print(solver.fragment.id, y.id, py.shape, t1_out.shape, t1y.shape) + t1_out += einsum('Ii,ia,Aa->IA', po, t1y, rv) + t2_out += einsum('Ii,Jj,ijab,Aa,Bb->IJAB', po, ro, t2y, rv, rv) + solver.log.info("Tailoring: |dT1|= %.3e |dT2|= %.3e", np.linalg.norm(t1_out - t1), np.linalg.norm(t2_out - t2)) + rma.clear() + t1[:] = t1_out + t2[:] = t2_out + + return tailorfunc
+ + +
[docs]def tailor_with_fragments(solver, fragments, project=False, tailor_t1=True, tailor_t2=True, ovlp_tol=1e-6): + """Tailor current CCSD calculation with amplitudes of other fragments. + + This assumes orthogonal fragment spaces. + + Parameters + ---------- + project: int, optional + Level of external correction of T2 amplitudes: + 1: Both occupied indices are projected to each other fragment X. + 2: Both occupied indices are projected to each other fragment X + and combinations of other fragments X,Y. + 3: Only the first occupied indices is projected to each other fragment X. + coupled_fragments: list, optional + List of fragments, which are used for the external correction. + Each fragment x must have the following attributes defined: + `c_active_occ` : Active occupied MO orbitals of fragment x + `c_active_vir` : Active virtual MO orbitals of fragment x + `results.t1` : T1 amplitudes of fragment x + `results.t2` : T2 amplitudes of fragment x + + Returns + ------- + tailor_func : function(cc, t1, t2) -> t1, t2 + Tailoring function for CCSD. + """ + fragment = solver.hamil._fragment + cluster = solver.hamil.cluster + base = fragment.base + ovlp = base.get_ovlp() # AO overlap matrix + cx_occ = cluster.c_active_occ # Occupied active orbitals of current cluster + cx_vir = cluster.c_active_vir # Virtual active orbitals of current cluster + cxs_occ = spinalg.dot(spinalg.T(cx_occ), ovlp) + cxs_vir = spinalg.dot(spinalg.T(cx_vir), ovlp) + project = int(project) + nxy_occ = fragment.base.get_fragment_overlap_norm(fragments=([fragment], fragments), virtual=False, norm=None)[0] + nxy_vir = fragment.base.get_fragment_overlap_norm(fragments=([fragment], fragments), occupied=False, norm=None)[0] + + spinsym = base.spinsym + + def tailor_func(kwargs): + """Add external correction to T1 and T2 amplitudes.""" + t1, t2 = kwargs['t1new'], kwargs['t2new'] + # Collect all changes to the amplitudes in dt1 and dt2: + if tailor_t1: + dt1 = spinalg.zeros_like(t1) + if tailor_t2: + dt2 = spinalg.zeros_like(t2) + + # Loop over all *other* fragments/cluster X + for y, fy in enumerate(fragments): + assert (fy is not fragment) + + # Rotation & projections from cluster X active space to current fragment active space + rxy_occ = spinalg.dot(cxs_occ, fy.cluster.c_active_occ) + rxy_vir = spinalg.dot(cxs_vir, fy.cluster.c_active_vir) + # Skip fragment if there is no overlap + if spinsym == 'restricted': + maxovlp = min(abs(rxy_occ).max(), abs(rxy_vir).max()) + elif spinsym == 'unrestricted': + maxovlp = min(max(abs(rxy_occ[0]).max(), abs(rxy_occ[1]).max()), + max(abs(rxy_vir[0]).max(), abs(rxy_vir[1]).max())) + if maxovlp < ovlp_tol: + solver.log.debug("Skipping tailoring fragment %s due to small overlap= %.1e", fy, maxovlp) + continue + + wfy = fy.results.wf.as_ccsd() + # Transform to x-amplitudes to y-space, instead of y-amplitudes to x-space: + # x may be CCSD and y FCI, such that x-space >> y-space + if tailor_t1: + t1x = transform_amplitude(t1, rxy_occ, rxy_vir) + dt1y = spinalg.subtract(wfy.t1, t1x) + if tailor_t2: + t2x = transform_amplitude(t2, rxy_occ, rxy_vir) + dt2y = spinalg.subtract(wfy.t2, t2x) + + # Project first one/two occupied index/indices onto fragment(y) space: + if project: + proj = fy.get_overlap('frag|cluster-occ') + proj = spinalg.dot(spinalg.T(proj), proj) + if tailor_t1: + dt1y = spinalg.dot(proj, dt1y) + if tailor_t2: + dt2y = project_t2(dt2y, proj, projectors=project) + + # Transform back to x-space and add: + if tailor_t1: + dt1 = spinalg.add(dt1, transform_amplitude(dt1y, rxy_occ, rxy_vir, inverse=True)) + if tailor_t2: + dt2 = spinalg.add(dt2, transform_amplitude(dt2y, rxy_occ, rxy_vir, inverse=True)) + + solver.log.debug("Tailoring with fragment %3d (%s): S(occ)= %.3e S(vir)= %.3e dT1= %.3e dT2= %.3e", + fy.id, fy.solver, nxy_occ[y], nxy_vir[y], *get_amplitude_norm(dt1y, dt2y)) + + # Add correction: + if tailor_t1: + if spinsym == 'restricted': + t1[:] += dt1 + elif spinsym == 'unrestricted': + t1[0][:] += dt1[0] + t1[1][:] += dt1[1] + if tailor_t2: + if spinsym == 'restricted': + t2[:] += dt2 + elif spinsym == 'unrestricted': + t2[0][:] += dt2[0] + t2[1][:] += dt2[1] + t2[2][:] += dt2[2] + solver.log.debug("Tailoring total: dT1= %.3e dT2= %.3e", *get_amplitude_norm(dt1, dt2)) + + return tailor_func
+ + +def _integrals_for_extcorr(fragment, fock): + cluster = fragment.cluster + emb = fragment.base + eris = fragment.hamil.get_eris_screened() + + if emb.spinsym == 'restricted': + occ = np.s_[:cluster.nocc_active] + vir = np.s_[cluster.nocc_active:] + govov = eris[occ, vir, occ, vir] # chemical notation + gvvov = eris[vir, vir, occ, vir] + gooov = eris[occ, occ, occ, vir] + govoo = eris[occ, vir, occ, occ] + fov = dot(cluster.c_active_occ.T, fock, cluster.c_active_vir) + return fov, (govov, gvvov, gooov, govoo) + + elif emb.spinsym == 'unrestricted': + oa = np.s_[:cluster.nocc_active[0]] + ob = np.s_[:cluster.nocc_active[1]] + va = np.s_[cluster.nocc_active[0]:] + vb = np.s_[cluster.nocc_active[1]:] + fova = dot(cluster.c_active_occ[0].T, fock[0], cluster.c_active_vir[0]) + fovb = dot(cluster.c_active_occ[1].T, fock[1], cluster.c_active_vir[1]) + fov = (fova, fovb) + gooov = (eris[0][oa, oa, oa, va], eris[1][oa, oa, ob, vb], eris[2][ob, ob, ob, vb]) + govov = (eris[0][oa, va, oa, va], eris[1][oa, va, ob, vb], eris[2][ob, vb, ob, vb]) + govvv = (eris[0][oa, va, va, va], eris[1][oa, va, vb, vb], eris[2][ob, vb, vb, vb]) + gvvov = (None, eris[1][va, va, ob, vb], None) + govoo = (None, eris[1][oa, va, ob, ob], None) + return fov, (gooov, govov, govvv, gvvov, govoo) + + else: + raise NotImplementedError(emb.spinsym) + + +def _get_delta_t_for_extcorr(fragment, fock, solver, include_t3v=True): + """Make T3 and T4 residual correction to CCSD wave function for given fragment. + Expressions consistent with J. Chem. Phys. 86, 2881 (1987): G. E. Scuseria et al. + and verified same behaviour as implementation in git@github.com:gustavojra/Methods.git + TODO + ---- + o Add Option: Contract T4's down at original solver point to save memory. + o UHF implementation + + Parameters + ---------- + fragment : Fragment + FCI fragment with FCI, CISDTQ or CCSDTQ wave function object in results + fock : numpy.ndarray + Full system for matrix used for CCSD residuals + solver : Solver + Used for logging options + include_t3v : bool + If include_t3v, then these terms are included. If not, they are left out + (to be contracted later with cluster y integrals). + + Returns + ------- + dt1, dt2 : numpy.ndarray + T1 and T2 expressions. + + NOTE: These expressions still need to be contracted with energy denominators + for full amplitude updates. + """ + + wf = fragment.results.wf.as_ccsdtq() + + # --- Make correction to T1 and T2 amplitudes + # J. Chem. Theory Comput. 2021, 17, 182−190 + # also with reference to git@github.com:gustavojra/Methods.git + + if fragment.base.spinsym == 'restricted': + # Get ERIs and Fock matrix for the given fragment + f, v = _integrals_for_extcorr(fragment, fock) + t1, t2, t3 = wf.t1, wf.t2, wf.t3 + t4_abaa, t4_abab = wf.t4 + + dt1, dt2 = ccsdtq.t_residual_rhf(solver, fragment, wf.t1, wf.t2, wf.t3, wf.t4, f, v, include_t3v=include_t3v) + + elif fragment.base.spinsym == 'unrestricted': + # Get ERIs and Fock matrix for the given fragment + f, v = _integrals_for_extcorr(fragment, fock) + + dt1, dt2 = ccsdtq.t_residual_uhf(solver, fragment, wf.t1, wf.t2, wf.t3, wf.t4, f, v, include_t3v=include_t3v) + + else: + raise ValueError + + return dt1, dt2 + + +def _get_delta_t2_from_t3v(govvv_x, gvvov_x, gooov_x, govoo_x, frag_child, rxy_occ, rxy_vir, cxs_occ, projectors): + """Perform the (T3 * V) contraction for the external correction, with the V integrals + in the parent basis (x). This will change the results as the V retains one open index + in the resulting T2 contributions. + + Parameters + ---------- + govvv_x, gvvov_x, gooov_x, govoo_x : ndarray + Integrals over various occ, vir slices in the parent (x) cluster. + govvv_x not required for unrestricted calculations. + frag_child : Fragment + Fragment of the child cluster (y) + rxy_occ, rxy_vir : numpy.ndarray + Projection operator from x cluster to y cluster in the occ (vir) space + cxs_occ : numpy.ndarray + Cluster orbitals of cluster x contracted with overlap + projectors : int + Number of projectors onto the fragment space of y + + Returns + ------- + dt2 : numpy.ndarray + Update to T2 amplitudes in the parent (x) basis + """ + + wf = frag_child.results.wf.as_ccsdtq() + t3 = wf.t3 + + if frag_child.base.spinsym == 'restricted': + + # First term, using (vv|ov): 1/2 P_ab [t_ijmaef v_efbm] + # Three-quarter transform of passed-in integrals from parent (x) to child (y) basis + # Keep first index of vvov integrals in x basis. Transform rest to y basis. + gvvov_ = einsum('abic,bB,iI,cC -> aBIC', gvvov_x, rxy_vir, rxy_occ, rxy_vir) + + # Contract with T3 amplitudes in the y basis + t3v_ = 0.5 * einsum('bemf, jimeaf -> ijab', gvvov_ - gvvov_.transpose(0, 3, 2, 1), t3) + t3v_ += einsum('bemf, ijmaef -> ijab', gvvov_, t3) + # Final is in a mixed basis form, with last index in t3v here in the x basis + # Rotate remaining indices into x basis: another three-quarter transform + t3v_x = einsum('IJAb,iI,jJ,aA -> ijab', t3v_, rxy_occ, rxy_occ, rxy_vir) + + # Second term: -1/2 P_ij [t_imnabe v_jemn] + # ooov three-quarter transform, to IjKA (capital is y (child) basis) + gooov_ = einsum('ijka,iI,kK,aA -> IjKA', gooov_x, rxy_occ, rxy_occ, rxy_vir) + # ovoo three-quarter transform, to IAJk (capital is y (child) basis) + govoo_ = einsum('iajk,iI,aA,jJ -> IAJk', govoo_x, rxy_occ, rxy_vir, rxy_occ) + + # Second index of t3v_ in the parent (x) basis + t3v_ = -0.5 * einsum('mjne, minbae -> ijab', gooov_ - govoo_.transpose(0, 3, 2, 1), t3) + t3v_ -= einsum('mjne, imnabe -> ijab', gooov_, t3) + # Rotate remaining indices into x basis: another three-quarter transform + t3v_x += einsum('IjAB,iI,aA,bB -> ijab', t3v_, rxy_occ, rxy_vir, rxy_vir) + + # Include permutation + dt2 = t3v_x + t3v_x.transpose(1, 0, 3, 2) + + elif frag_child.base.spinsym == 'unrestricted': + gooov_aaaa, gooov_aabb, gooov_bbbb = gooov_x + govoo_aaaa, govoo_aabb, govoo_bbbb = govoo_x + govvv_aaaa, govvv_aabb, govvv_bbbb = govvv_x + gvvov_aaaa, gvvov_aabb, gvvov_bbbb = gvvov_x + + t3_aaa, t3_aba, t3_bab, t3_bbb = t3 + + govvv_aaaa_ = einsum('iabc,iI,aA,cC -> IAbC', govvv_aaaa, rxy_occ[0], rxy_vir[0], rxy_vir[0]) + govvv_aabb_ = einsum('iabc,iI,aA,cC -> IAbC', govvv_aabb, rxy_occ[0], rxy_vir[0], rxy_vir[1]) + govvv_bbbb_ = einsum('iabc,iI,aA,cC -> IAbC', govvv_bbbb, rxy_occ[1], rxy_vir[1], rxy_vir[1]) + + gvvov_aaaa_ = einsum('abic,bB,iI,cC -> aBIC', gvvov_aaaa, rxy_vir[0], rxy_occ[0], rxy_vir[0]) + gvvov_aabb_ = einsum('abic,bB,iI,cC -> aBIC', gvvov_aabb, rxy_vir[0], rxy_occ[1], rxy_vir[1]) + gvvov_bbbb_ = einsum('abic,bB,iI,cC -> aBIC', gvvov_bbbb, rxy_vir[1], rxy_occ[1], rxy_vir[1]) + + gooov_aaaa_ = einsum('ijka,jJ,kK,aA -> iJKA', gooov_aaaa, rxy_occ[0], rxy_occ[0], rxy_vir[0]) + gooov_aabb_ = einsum('ijka,jJ,kK,aA -> iJKA', gooov_aabb, rxy_occ[0], rxy_occ[1], rxy_vir[1]) + gooov_bbbb_ = einsum('ijka,jJ,kK,aA -> iJKA', gooov_bbbb, rxy_occ[1], rxy_occ[1], rxy_vir[1]) + + govoo_aaaa_ = einsum('iajk,iI,aA,kK -> IAjK', govoo_aaaa, rxy_occ[0], rxy_vir[0], rxy_occ[0]) + govoo_aabb_ = einsum('iajk,iI,aA,kK -> IAjK', govoo_aabb, rxy_occ[0], rxy_vir[0], rxy_occ[1]) + govoo_bbbb_ = einsum('iajk,iI,aA,kK -> IAjK', govoo_bbbb, rxy_occ[1], rxy_vir[1], rxy_occ[1]) + + x0 = einsum("Jlkc,iklacb->iJab", gooov_aabb_, t3_aba) + x1 = einsum("Jlkc,iklabc->iJab", gooov_aaaa_, t3_aaa) * -1.0 + x2 = einsum("iJba->iJab", x0) * -1.0 + x2 += einsum("iJba->iJab", x1) * -1.0 + x2 = einsum("iJab,Ii,Aa,Bb->IJAB", x2, rxy_occ[0], rxy_vir[0], rxy_vir[0]) + dt2_aaaa = einsum("ijab->ijab", x2) * -1.0 + dt2_aaaa += einsum("jiab->ijab", x2) + + x0 = einsum("Bdkc,ikjacd->ijaB", gvvov_aabb_, t3_aba) + x1 = einsum("kcBd,ijkacd->ijaB", govvv_aaaa_, t3_aaa) + x2 = einsum("ijaB->ijaB", x0) + x2 += einsum("ijaB->ijaB", x1) * -1.0 + x2 = einsum("ijaB,Ii,Jj,Aa->IJAB", x2, rxy_occ[0], rxy_occ[0], rxy_vir[0]) + dt2_aaaa += einsum("ijab->ijab", x2) + dt2_aaaa += einsum("ijba->ijab", x2) * -1.0 + + x0 = einsum("Jklc,iklabc->iJab", gooov_bbbb_, t3_bbb) + x1 = einsum("lcJk,ilkacb->iJab", govoo_aabb_, t3_bab) + x2 = einsum("iJba->iJab", x0) * -1.0 + x2 += einsum("iJba->iJab", x1) * -1.0 + x2 = einsum("iJab,Ii,Aa,Bb->IJAB", x2, rxy_occ[1], rxy_vir[1], rxy_vir[1]) + dt2_bbbb = einsum("ijab->ijab", x2) * -1.0 + dt2_bbbb += einsum("jiab->ijab", x2) + + x0 = einsum("kdBc,ijkacd->ijaB", govvv_bbbb_, t3_bbb) * -1.0 + x1 = einsum("kdBc,ikjadc->ijaB", govvv_aabb_, t3_bab) + x2 = einsum("ijaB->ijaB", x0) + x2 += einsum("ijaB->ijaB", x1) * -1.0 + x2 = einsum("ijaB,Ii,Jj,Aa->IJAB", x2, rxy_occ[1], rxy_occ[1], rxy_vir[1]) + dt2_bbbb += einsum("ijab->ijab", x2) * -1.0 + dt2_bbbb += einsum("ijba->ijab", x2) + + x0 = einsum("Ilkc,jlkbac->Ijab", gooov_aabb_, t3_bab) * -1.0 + x0 += einsum("Ilmd,ljmabd->Ijab", gooov_aaaa_, t3_aba) * -1.0 + dt2_abab = einsum("Ijab,Jj,Aa,Bb->IJAB", x0, rxy_occ[1], rxy_vir[0], rxy_vir[1]) + + x0 = einsum("Jnkc,kinbac->iJab", gooov_bbbb_, t3_bab) + x0 += einsum("ldJk,iklabd->iJab", govoo_aabb_, t3_aba) * -1.0 + dt2_abab += einsum("iJab,Ii,Aa,Bb->IJAB", x0, rxy_occ[0], rxy_vir[0], rxy_vir[1]) + + x0 = einsum("ldAe,ijldbe->ijAb", govvv_aaaa_, t3_aba) * -1.0 + x0 += einsum("Adkc,jikbdc->ijAb", gvvov_aabb_, t3_bab) + dt2_abab += einsum("ijAb,Ii,Jj,Bb->IJAB", x0, rxy_occ[0], rxy_occ[1], rxy_vir[1]) + + x0 = einsum("ldBc,ijlacd->ijaB", govvv_aabb_, t3_aba) + x0 += einsum("kcBf,jikcaf->ijaB", govvv_bbbb_, t3_bab) * -1.0 + dt2_abab += einsum("ijaB,Ii,Jj,Aa->IJAB", x0, rxy_occ[0], rxy_occ[1], rxy_vir[0]) + + dt2 = (dt2_aaaa, dt2_abab, dt2_bbbb) + + else: + raise ValueError + + # Find the fragment projector of cluster y (child) in the basis of cluster x (parent) + c_frag_xocc = spinalg.dot(spinalg.T(frag_child.c_frag), spinalg.T(cxs_occ)) + proj_y_in_x = spinalg.dot(spinalg.T(c_frag_xocc), c_frag_xocc) + + # Project (t3 v) contribution onto fragment of cluster y + dt2 = project_t2(dt2, proj_y_in_x, projectors=projectors) + + return dt2 + + +def _get_delta_t_for_delta_tailor(fragment): + wf = fragment.results.wf.as_ccsd() + t1, t2 = wf.t1, wf.t2 + # Run CCSD calculation with same Hamiltonian. Don't need lambda amplitudes. + # TODO set up passing through solver_options from tailored CCSD calculation + ccsd = fragment.get_solver("CCSD") + ccsd.opts.solve_lambda = False + ccsd.kernel() + assert ccsd.converged + wf = ccsd.wf + dt1 = spinalg.subtract(t1, wf.t1) + dt2 = spinalg.subtract(t2, wf.t2) + return dt1, dt2 + + +
[docs]def externally_correct(solver, external_corrections, hamil=None): # eris=None): + """Build callback function for CCSD, to add external correction from other fragments. + + TODO: combine with `tailor_with_fragments`? + + Parameters + ---------- + solver : CCSD_Solver + Vayesta CCSD solver. + external_corrections : list of tuple of (int, str, int, bool) + List of external corrections. Each tuple contains the fragment ID, type of correction, + and number of projectors for the given external correction. Final element is boolean giving + the low_level_coul optional argument. + eris : _ChemistsERIs + ERIs for parent CCSD fragment. Used for MO energies in residual contraction, and for + the case of low_level_coul, where the parent Coulomb integral is contracted. + If not passed in, MO energy if needed will be constructed from the diagonal of + get_fock() of embedding base class, and the eris will be also be obtained from the + embedding base class. Optional. + + Returns + ------- + callback : callable + Callback function for PySCF's CCSD solver. + """ + + fx = solver.hamil._fragment + cluster = solver.hamil.cluster + emb = fx.base + nocc = cluster.nocc + nvir = cluster.nvir + ovlp = emb.get_ovlp() # AO overlap matrix + cx_occ = cluster.c_active_occ # Occupied active orbitals of current cluster + cx_vir = cluster.c_active_vir # Virtual active orbitals of current cluster + cxs_occ = spinalg.dot(spinalg.T(cx_occ), ovlp) + cxs_vir = spinalg.dot(spinalg.T(cx_vir), ovlp) + if hamil is None: + # Note that if no MO energies are passed in, we construct them from the + # get_fock function without with_exxdiv=False. For PBC CCSD, this may be different + # behaviour. + mo_energy = einsum('ai,ab,bi->i', cluster.c_active, emb.get_fock(), cluster.c_active) + else: + mo_energy = hamil.get_clus_mf_info(with_exxdiv=False)[2] # Do we want this True or False? + + if (len(external_corrections) > 1) and any([corr[2] == 0 for corr in external_corrections]): + # We are externally correcting from multiple fragments, but not projecting them + # into their fragment spaces. This means we are at risk of double-counting the external + # corrections. + solver.log.warn("Multiple external correcting fragments, but not fragment-projecting the resulting correction!") + solver.log.warn("This will likely lead to double-counting of external correction.") + solver.log.warn("Are you sure you want to do this?!") + + # CCSD uses exxdiv-uncorrected Fock matrix for residuals + fock = emb.get_fock(with_exxdiv=False) + + if any([corr[3] and corr[1] == 'external' for corr in external_corrections]): + # At least one fragment is externally corrected, *and* contracted with + # integrals in the parent (i.e. CCSD) cluster. We can take the integrals from eris + # if passed in. Otherwise, form the required integrals + # for this parent cluster. Note that not all of these are needed. + if hamil is None: + _, govvv_x, gvvov_x, gooov_x, govoo_x = _integrals_for_extcorr(fx, fock) + else: + eri_generator = hamil.get_eris_bare + + if emb.spinsym == 'restricted': + govvv_x = None + gvvov_x = eri_generator("vvov") + gooov_x = eri_generator("ooov") + govoo_x = eri_generator("ovoo") + else: + govvv_x = (eri_generator("ovvv"), eri_generator("ovVV"), eri_generator("OVVV")) + gvvov_x = (eri_generator("vvov"), eri_generator("vvOV"), eri_generator("VVOV")) + gooov_x = (eri_generator("ooov"), eri_generator("ooOV"), eri_generator("OOOV")) + govoo_x = (eri_generator("ovoo"), eri_generator("ovOO"), eri_generator("OVOO")) + + # delta-T1 and delta-T2 amplitudes, to be added to the CCSD amplitudes + if emb.spinsym == 'restricted': + dt1 = np.zeros((nocc, nvir)) + dt2 = np.zeros((nocc, nocc, nvir, nvir)) + elif emb.spinsym == 'unrestricted': + dt1 = (np.zeros((nocc[0], nvir[0])), + np.zeros((nocc[1], nvir[1]))) + dt2 = (np.zeros((nocc[0], nocc[0], nvir[0], nvir[0])), + np.zeros((nocc[0], nocc[1], nvir[0], nvir[1])), + np.zeros((nocc[1], nocc[1], nvir[1], nvir[1]))) + + frag_dir = {f.id: f for f in emb.fragments} + for y, corrtype, projectors, low_level_coul in external_corrections: + + fy = frag_dir[y] # Get fragment y object from its index + assert (y != fx.id) + + if corrtype == 'external': + if low_level_coul: + dt1y, dt2y = _get_delta_t_for_extcorr(fy, fock, solver, include_t3v=False) + else: + dt1y, dt2y = _get_delta_t_for_extcorr(fy, fock, solver, include_t3v=True) + elif corrtype == 'delta-tailor': + dt1y, dt2y = _get_delta_t_for_delta_tailor(fy) + else: + raise ValueError + + # Project T1 and T2 corrections: + if projectors: + # projectors is an integer giving the number of projectors onto + # occupied fragment + proj = fy.get_overlap('frag|cluster-occ') + proj = spinalg.dot(spinalg.T(proj), proj) + dt1y = spinalg.dot(proj, dt1y) + dt2y = project_t2(dt2y, proj, projectors=projectors) + + # Transform back to fragment x space + rxy_occ = spinalg.dot(cxs_occ, fy.cluster.c_active_occ) + rxy_vir = spinalg.dot(cxs_vir, fy.cluster.c_active_vir) + dt1y = transform_amplitude(dt1y, rxy_occ, rxy_vir, inverse=True) + dt2y = transform_amplitude(dt2y, rxy_occ, rxy_vir, inverse=True) + dt1 = spinalg.add(dt1, dt1y) + dt2 = spinalg.add(dt2, dt2y) + + if low_level_coul and corrtype == 'external': + # Include the t3v term, contracting with the integrals from the x cluster + # These have already been fragment projected, and rotated into the x cluster + # in this function. + dt2y_t3v = _get_delta_t2_from_t3v(govvv_x, gvvov_x, gooov_x, govoo_x, fy, + rxy_occ, rxy_vir, cxs_occ, projectors) + dt2 = spinalg.add(dt2, dt2y_t3v) + + solver.log.info("External correction residuals from fragment %3d (%s via %s): dT1= %.3e dT2= %.3e", + fy.id, fy.solver, corrtype, *get_amplitude_norm(dt1y, dt2y)) + + if emb.spinsym == 'restricted': + + if corrtype == 'external': + # Contract with fragment x (CCSD) energy denominators + # Note that this will not work correctly if a level shift used + eia = mo_energy[:nocc, None] - mo_energy[None, nocc:] + eijab = pyscf.lib.direct_sum('ia,jb->ijab', eia, eia) + dt1 /= eia + dt2 /= eijab + + solver.log.info("Total external correction amplitudes from all fragments: dT1= %.3e dT2= %.3e", + *get_amplitude_norm(dt1, dt2)) + + def callback(kwargs): + """Add external correction to T1 and T2 amplitudes.""" + t1, t2 = kwargs['t1new'], kwargs['t2new'] + t1[:] += dt1 + t2[:] += dt2 + + elif emb.spinsym == 'unrestricted': + + if corrtype == "external": + eia_a = mo_energy[0][:nocc[0], None] - mo_energy[0][None, nocc[0]:] + eia_b = mo_energy[1][:nocc[1], None] - mo_energy[1][None, nocc[1]:] + eijab_aa = pyscf.lib.direct_sum('ia,jb->ijab', eia_a, eia_a) + eijab_ab = pyscf.lib.direct_sum('ia,jb->ijab', eia_a, eia_b) + eijab_bb = pyscf.lib.direct_sum('ia,jb->ijab', eia_b, eia_b) + + dt1 = (dt1[0] / eia_a, dt1[1] / eia_b) + dt2 = (dt2[0] / eijab_aa, dt2[1] / eijab_ab, dt2[2] / eijab_bb) + + solver.log.info("Total external correction amplitudes from all fragments: dT1= %.3e dT2= %.3e", \ + *get_amplitude_norm(dt1, dt2)) + + def callback(kwargs): + """Add external correction to T1 and T2 amplitudes.""" + t1, t2 = kwargs['t1new'], kwargs['t2new'] + + t1[0][:] += dt1[0] + t1[1][:] += dt1[1] + t2[0][:] += dt2[0] + t2[1][:] += dt2[1] + t2[2][:] += dt2[2] + + return callback
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/dump.html b/_modules/vayesta/solver/dump.html new file mode 100644 index 000000000..cc43ded6d --- /dev/null +++ b/_modules/vayesta/solver/dump.html @@ -0,0 +1,176 @@ + + + + + + vayesta.solver.dump — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.dump

+import dataclasses
+
+import h5py
+
+from vayesta.core import spinalg
+from vayesta.solver.solver import ClusterSolver
+
+
+
[docs]class DumpSolver(ClusterSolver): +
[docs] @dataclasses.dataclass + class Options(ClusterSolver.Options): + dumpfile: str = None
+ +
[docs] def kernel(self, *args, **kwargs): + fragment = self.hamil._fragment + cluster = self.hamil.cluster + + if isinstance(self.opts.dumpfile, str): + h5file = h5py.File(self.opts.dumpfile, 'a') + else: + h5file = self.opts.dumpfile + with h5file as f: + grp = h5file.create_group('fragment_%d' % fragment.id) + # Attributes + grp.attrs['id'] = fragment.id + grp.attrs['name'] = fragment.name + grp.attrs['norb'] = cluster.norb_active + grp.attrs['nocc'] = cluster.nocc_active + grp.attrs['nvir'] = cluster.nvir_active + c_dmet_cluster_occ = fragment._dmet_bath.c_cluster_occ + c_dmet_cluster_vir = fragment._dmet_bath.c_cluster_vir + c_dmet_cluster = spinalg.hstack_matrices(c_dmet_cluster_occ, c_dmet_cluster_vir) + heff, eris = self.hamil.get_integrals(with_vext=True) + if c_dmet_cluster[0].ndim == 1: + grp.attrs['norb_dmet_cluster'] = c_dmet_cluster.shape[-1] + grp.attrs['nocc_dmet_cluster'] = c_dmet_cluster_occ.shape[-1] + grp.attrs['nvir_dmet_cluster'] = c_dmet_cluster_vir.shape[-1] + # Orbital coefficients + grp.create_dataset('c_frag', data=fragment.c_frag) + grp.create_dataset('c_dmet_cluster', data=c_dmet_cluster) + grp.create_dataset('c_cluster', data=cluster.c_active) + # Integrals + grp.create_dataset('heff', data=heff) + grp.create_dataset('fock', data=self.hamil.get_fock()) + grp.create_dataset('eris', data=eris) + elif c_dmet_cluster[0].ndim == 2: + grp.attrs['norb_dmet_cluster'] = [c_dmet_cluster[s].shape[-1] for s in range(2)] + grp.attrs['nocc_dmet_cluster'] = [c_dmet_cluster_occ[s].shape[-1] for s in range(2)] + grp.attrs['nvir_dmet_cluster'] = [c_dmet_cluster_vir[s].shape[-1] for s in range(2)] + # Orbital coefficients + grp.create_dataset('c_frag_a', data=fragment.c_frag[0]) + grp.create_dataset('c_frag_b', data=fragment.c_frag[1]) + grp.create_dataset('c_dmet_cluster_a', data=c_dmet_cluster[0]) + grp.create_dataset('c_dmet_cluster_b', data=c_dmet_cluster[1]) + grp.create_dataset('c_cluster_a', data=cluster.c_active[0]) + grp.create_dataset('c_cluster_b', data=cluster.c_active[1]) + # Integrals + heffa, heffb = heff + grp.create_dataset('heff_a', data=heffa) + grp.create_dataset('heff_b', data=heffb) + focka, fockb = self.hamil.get_fock() + grp.create_dataset('fock_a', data=focka) + grp.create_dataset('fock_b', data=fockb) + erisaa, erisab, erisbb = eris + grp.create_dataset('eris_aa', data=erisaa) + grp.create_dataset('eris_ab', data=erisab) + grp.create_dataset('eris_bb', data=erisbb) + else: + raise NotImplementedError
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/eb_fci/ebfci.html b/_modules/vayesta/solver/eb_fci/ebfci.html new file mode 100644 index 000000000..2710e079a --- /dev/null +++ b/_modules/vayesta/solver/eb_fci/ebfci.html @@ -0,0 +1,198 @@ + + + + + + vayesta.solver.eb_fci.ebfci — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.eb_fci.ebfci

+import dataclasses
+
+import numpy as np
+
+from vayesta.core.util import OptionsBase
+from vayesta.solver.eb_fci import ebfci_slow, uebfci_slow
+
+
+
[docs]class REBFCI: + """Performs FCI on coupled electron-boson systems. + Input: + -system specification, via hamiltonian object along with bosonic parameters. + Output: + -FCI RDMs. + -FCI response specification. + """ + solver = ebfci_slow + +
[docs] @dataclasses.dataclass + class Options(OptionsBase): + max_boson_occ: int = 2 + conv_tol: float = 1e-12 + max_cycle: int = 100
+ + def __init__(self, hamil, freqs, couplings, **kwargs): + self.hamil = hamil + self.freqs = freqs + self.couplings = couplings + self.opts = self.Options().replace(**kwargs) + + @property + def norb(self): + return self.hamil.ncas[0] + + @property + def nelec(self): + return self.hamil.nelec + + @property + def nbos(self): + return len(self.hamil.bos_freqs) + +
[docs] def kernel(self, eris=None): + # Get MO eris. + h1e, eris = self.get_hamil(eris) + couplings = self.hamil.couplings + bos_freqs = self.hamil.bos_freqs + self.e_fci, self.civec = self.solver.kernel(h1e, eris, couplings, np.diag(bos_freqs), self.norb, self.nelec, + self.nbos, max_occ=self.opts.max_boson_occ, tol=self.opts.conv_tol, + max_cycle=self.opts.max_cycle) + return self.e_fci, self.civec
+ +
[docs] def get_hamil(self, eris=None): + h1e = self.hamil.get_heff(eris) + eris = self.hamil.get_eris_screened() + return h1e, eris
+ +
[docs] def make_rdm1(self): + return self.solver.make_rdm1(self.civec, self.norb, self.nelec)
+ +
[docs] def make_rdm2(self): + dm1, dm2 = self.make_rdm12() + return dm2
+ +
[docs] def make_rdm12(self): + return self.solver.make_rdm12(self.civec, self.norb, self.nelec)
+ +
[docs] def make_rdm_eb(self): + # Note this is always spin-resolved, since bosonic couplings can have spin-dependence. + return self.solver.make_eb_rdm(self.civec, self.norb, self.nelec, self.nbos, self.opts.max_boson_occ)
+ +
[docs] def make_dd_moms(self, max_mom, dm1=None, coeffs=None, civec=None, eris=None): + if civec is None: + civec = self.civec + h1e, eris = self.get_hamil(eris) + + if dm1 is None: + dm1 = self.make_rdm1() + + self.dd_moms = self.solver.calc_dd_resp_mom( + civec, self.e_fci, max_mom, self.norb, self.nelec, self.nbos, h1e, eris, + np.diag(self.freqs), self.couplings, self.opts.max_boson_occ, dm1, + coeffs=coeffs) + return self.dd_moms
+ + +
[docs]class UEBFCI(REBFCI): + solver = uebfci_slow + +
[docs] def make_rdm12(self): + return self.solver.make_rdm12s(self.civec, self.norb, self.nelec)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/eb_fci/ebfci_slow.html b/_modules/vayesta/solver/eb_fci/ebfci_slow.html new file mode 100644 index 000000000..f0ed1cbb9 --- /dev/null +++ b/_modules/vayesta/solver/eb_fci/ebfci_slow.html @@ -0,0 +1,804 @@ + + + + + + vayesta.solver.eb_fci.ebfci_slow — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.eb_fci.ebfci_slow

+"""Module for slow, exact diagonalisation-based coupled electron-boson FCI code.
+Based on the fci_slow.py code within pyscf.
+"""
+
+import numpy
+import numpy as np
+from pyscf import ao2mo
+from pyscf import lib
+from pyscf.fci import cistring
+from pyscf.fci import fci_slow
+from pyscf.fci import rdm
+from pyscf.fci.direct_spin1 import _unpack_nelec
+
+
+
[docs]def contract_all(h1e, g2e, hep, hpp, ci0, norbs, nelec, nbosons, max_occ, + ecore=0.0, adj_zero_pho=False): + # ci1 = contract_1e(h1e, ci0, norbs, nelec, nbosons, max_occ) + contrib1 = contract_2e(g2e, ci0, norbs, nelec, nbosons, max_occ) + incbosons = (nbosons > 0 and max_occ > 0) + + if incbosons: + contrib2 = contract_ep(hep, ci0, norbs, nelec, nbosons, max_occ, + adj_zero_pho=adj_zero_pho) + contrib3 = contract_pp(hpp, ci0, norbs, nelec, nbosons, max_occ) + + cishape = make_shape(norbs, nelec, nbosons, max_occ) + + # print("1+2-body") + # print(contrib1.reshape(cishape)) + # print("electron-phonon coupling") + # print(contrib2.reshape(cishape)) + # print("phonon-phonon coupling") + # print(contrib3.reshape(cishape)) + if incbosons: + return contrib1 + contrib2 + contrib3 + else: + return contrib1
+ + +
[docs]def make_shape(norbs, nelec, nbosons, max_occ): + """Construct the shape of a single FCI vector in the coupled electron-boson space. + """ + neleca, nelecb = _unpack_nelec(nelec) + na = cistring.num_strings(norbs, neleca) + nb = cistring.num_strings(norbs, nelecb) + # print(na,nb,max_occ,nbosons) + return (na, nb) + (max_occ + 1,) * nbosons
+ + +# Contract 1-electron integrals with fcivec. +
[docs]def contract_1e(h1e, fcivec, norb, nelec, nbosons, max_occ): + raise NotImplementedError("1 electron contraction is currently" + "bugged for coupled electron-boson systems." + "This should instead be folded into a two-body operator.") + if isinstance(nelec, (int, numpy.integer)): + nelecb = nelec // 2 + neleca = nelec - nelecb + else: + neleca, nelecb = nelec + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + + ci0 = fcivec.reshape(cishape) + fcinew = numpy.zeros(cishape, dtype=fcivec.dtype) + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + fcinew[str1] += sign * ci0[str0] * h1e[a, i] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + fcinew[:, str1] += sign * ci0[:, str0] * h1e[a, i] + return fcinew.reshape(fcivec.shape)
+ + +# Contract 2-electron integrals with fcivec. +
[docs]def contract_2e(eri, fcivec, norb, nelec, nbosons, max_occ): + if isinstance(nelec, (int, numpy.integer)): + nelecb = nelec // 2 + neleca = nelec - nelecb + else: + neleca, nelecb = nelec + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + ci0 = fcivec.reshape(cishape) + t1 = numpy.zeros((norb, norb) + cishape, dtype=fcivec.dtype) + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + t1[a, i, str1] += sign * ci0[str0] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + t1[a, i, :, str1] += sign * ci0[:, str0] + + # t1 = lib.einsum('bjai,aiAB...->bjAB...', eri.reshape([norb]*4), t1) + t1 = numpy.tensordot(eri.reshape([norb] * 4), t1, 2) + + fcinew = numpy.zeros_like(ci0) + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + fcinew[str1] += sign * t1[a, i, str0] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + fcinew[:, str1] += sign * t1[a, i, :, str0] + return fcinew.reshape(fcivec.shape)
+ + +# Contract electron-phonon portion of the Hamiltonian. +
[docs]def contract_ep(heb, fcivec, norb, nelec, nbosons, max_occ, adj_zero_pho=False): + if isinstance(nelec, (int, numpy.integer)): + nelecb = nelec // 2 + neleca = nelec - nelecb + else: + neleca, nelecb = nelec + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + + ci0 = fcivec.reshape(cishape) + t1a = numpy.zeros((norb, norb) + cishape, dtype=fcivec.dtype) + t1b = numpy.zeros((norb, norb) + cishape, dtype=fcivec.dtype) + + if adj_zero_pho: + zfac = float(neleca + nelecb) / norb + # print("Zfac=",zfac) + adj_val = zfac * ci0 + for i in range(norb): + t1a[i, i] -= adj_val + t1b[i, i] -= adj_val + + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + t1a[a, i, str1] += sign * ci0[str0] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + t1b[a, i, :, str1] += sign * ci0[:, str0] + # Now have contribution to a particular state via given excitation + # channel; just need to apply bosonic (de)excitations. + # Note that while the contribution {a^{+} i p} and {i a^{+} p^{+}} + # are related via the Hermiticity of the Hamiltonian, no other properties + # are guaranteed, so we cannot write this as p + p^{+}. + + # Contract intermediate with the electron-boson coupling. + # If we need to remove zero phonon mode also need factor of -<N> + heb_a, heb_b = heb if type(heb) == tuple else (heb, heb) + # First, bosonic excitations. + tex = numpy.tensordot(heb_a, t1a, 2) + numpy.tensordot(heb_b, t1b, 2) + # tex = numpy.einsum("nai,ai...->n...", g, t1) + # Then bosonic deexcitations. + tdex = numpy.tensordot(heb_a, t1a, ((1, 2), (1, 0))) + numpy.tensordot(heb_b, t1b, ((1, 2), (1, 0))) + # tdex = numpy.einsum("nia,ai...->n...", g, t1) + + # print(norb,nelec, nbosons) + # print(tex.shape,"Ex:",numpy.sum(tex**2)) + # print(tex) + # print(tdex.shape, "Deex:",numpy.sum(tdex**2)) + # print(tdex) + # The leading index tells us which bosonic degree of freedom is coupled + # to in each case. + fcinew = numpy.zeros_like(ci0) + + bos_cre = numpy.sqrt(numpy.arange(1, max_occ + 1)) + + for ibos in range(nbosons): + for iocc in range(0, max_occ): + ex_slice = slices_for_cre(ibos, nbosons, iocc) + norm_slice = slices_for(ibos, nbosons, iocc) + # NB bos_cre[iocc] = sqrt(iocc+1) + fcinew[ex_slice] += tex[ibos][norm_slice] * bos_cre[iocc] + + for iocc in range(1, max_occ + 1): + dex_slice = slices_for_des(ibos, nbosons, iocc) + norm_slice = slices_for(ibos, nbosons, iocc) + # NB bos_cre[iocc] = sqrt(iocc+1) + fcinew[dex_slice] += tdex[ibos][norm_slice] * bos_cre[iocc - 1] + + return fcinew.reshape(fcivec.shape)
+ + +# Contract phonon-phonon portion of the Hamiltonian. + +
[docs]def contract_pp(hpp, fcivec, norb, nelec, nbosons, max_occ): + """Arbitrary phonon-phonon coupling. + """ + cishape = make_shape(norb, nelec, nbosons, max_occ) + ci0 = fcivec.reshape(cishape) + fcinew = numpy.zeros_like(ci0) + + phonon_cre = numpy.sqrt(numpy.arange(1, max_occ + 1)) + # t1 = numpy.zeros((nbosons,)+cishape, dtype=fcivec.dtype) + # for psite_id in range(nbosons): + # for i in range(max_occ): + # slices1 = slices_for_cre(psite_id, nbosons, i) + # slices0 = slices_for (psite_id, nbosons, i) + # t1[(psite_id,)+slices0] += ci0[slices1] * phonon_cre[i] # annihilation + + t1 = apply_bos_annihilation(ci0, nbosons, max_occ) + t1 = lib.dot(hpp, t1.reshape(nbosons, -1)).reshape(t1.shape) + + for psite_id in range(nbosons): + for i in range(max_occ): + slices1 = slices_for_cre(psite_id, nbosons, i) + slices0 = slices_for(psite_id, nbosons, i) + fcinew[slices1] += t1[(psite_id,) + slices0] * phonon_cre[i] # creation + return fcinew.reshape(fcivec.shape)
+ + +
[docs]def apply_bos_annihilation(ci0, nbosons, max_occ): + phonon_cre = numpy.sqrt(numpy.arange(1, max_occ + 1)) + res = numpy.zeros((nbosons,) + ci0.shape, dtype=ci0.dtype) + for psite_id in range(nbosons): + for i in range(max_occ): + slices1 = slices_for_cre(psite_id, nbosons, i) + slices0 = slices_for(psite_id, nbosons, i) + res[(psite_id,) + slices0] += ci0[slices1] * phonon_cre[i] # annihilation + return res
+ + +
[docs]def apply_bos_creation(ci0, nbosons, max_occ): + phonon_cre = numpy.sqrt(numpy.arange(1, max_occ + 1)) + res = numpy.zeros((nbosons,) + ci0.shape, dtype=ci0.dtype) + for psite_id in range(nbosons): + for i in range(max_occ): + slices1 = slices_for_cre(psite_id, nbosons, i) + slices0 = slices_for(psite_id, nbosons, i) + res[(psite_id,) + slices1] += ci0[slices0] * phonon_cre[i] # creation + return res
+ + +
[docs]def contract_pp_for_future(hpp, fcivec, norb, nelec, nbosons, max_occ): + """Our bosons are decoupled; only have diagonal couplings, + ie. to the boson number. + """ + cishape = make_shape(norb, nelec, nbosons, max_occ) + ci0 = fcivec.reshape(cishape) + fcinew = numpy.zeros_like(ci0) + + for ibos in range(nbosons): + for iocc in range(max_occ + 1): + slice1 = slices_for(ibos, nbosons, iocc) + # This may need a sign change? + # Two factors sqrt(iocc) from annihilation then creation. + fcinew[slice1] += ci0[slice1] * iocc * hpp[ibos] + return fcinew.reshape(fcivec.shape)
+ + +
[docs]def slices_for(b_id, nbos, occ): + slices = [slice(None, None, None)] * (2 + nbos) # +2 for electron indices + slices[2 + b_id] = occ + return tuple(slices)
+ + +
[docs]def slices_for_cre(b_id, nbos, occ): + return slices_for(b_id, nbos, occ + 1)
+ + +
[docs]def slices_for_des(b_id, nbos, occ): + return slices_for(b_id, nbos, occ - 1)
+ + +
[docs]def slices_for_occ_reduction(nbos, new_max_occ): + slices = [slice(None, None, None)] * 2 + slices += [slice(0, new_max_occ + 1)] * nbos + return tuple(slices)
+ + +
[docs]def make_hdiag(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ): + neleca, nelecb = _unpack_nelec(nelec) + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + occslista = [tab[:neleca, 0] for tab in link_indexa] + occslistb = [tab[:nelecb, 0] for tab in link_indexb] + + nelec_tot = neleca + nelecb + + # electron part + cishape = make_shape(norb, nelec, nbosons, max_occ) + hdiag = numpy.zeros(cishape) + g2e = ao2mo.restore(1, g2e, norb) + diagj = numpy.einsum('iijj->ij', g2e) + diagk = numpy.einsum('ijji->ij', g2e) + for ia, aocc in enumerate(occslista): + for ib, bocc in enumerate(occslistb): + e1 = h1e[aocc, aocc].sum() + h1e[bocc, bocc].sum() + e2 = diagj[aocc][:, aocc].sum() + diagj[aocc][:, bocc].sum() \ + + diagj[bocc][:, aocc].sum() + diagj[bocc][:, bocc].sum() \ + - diagk[aocc][:, aocc].sum() - diagk[bocc][:, bocc].sum() + hdiag[ia, ib] += e1 + e2 * .5 + + # No electron-phonon part? + + # phonon part + if len(hpp.shape) == 2: + hpp = hpp.diagonal() + for b_id in range(nbosons): + for i in range(max_occ + 1): + slices0 = slices_for(b_id, nbosons, i) + hdiag[slices0] += hpp[b_id] * i + + return hdiag.ravel()
+ + +
[docs]def kernel(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ, + tol=1e-12, max_cycle=100, verbose=0, ecore=0, + returnhop=False, adj_zero_pho=False, + **kwargs): + h2e = fci_slow.absorb_h1e(h1e, g2e, norb, nelec, .5) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + ci0 = numpy.zeros(cishape) + # Add noise for initial guess, remove it if problematic + ci0 += numpy.random.random(ci0.shape) * 1e-10 + ci0.__setitem__((0, 0) + (0,) * nbosons, 1) + + def hop(c): + hc = contract_all(h1e, h2e, hep, hpp, c, norb, + nelec, nbosons, max_occ, adj_zero_pho=adj_zero_pho) + return hc.reshape(-1) + + hdiag = make_hdiag(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ) + precond = lambda x, e, *args: x / (hdiag - e + 1e-4) + if returnhop: + return hop, ci0, hdiag + + e, c = lib.davidson(hop, ci0.reshape(-1), precond, + tol=tol, max_cycle=max_cycle, verbose=verbose, + **kwargs) + return e + ecore, c.reshape(cishape)
+ + +
[docs]def kernel_multiroot(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ, + tol=1e-12, max_cycle=100, verbose=0, ecore=0, nroots=2, + returnhop=False, adj_zero_pho=False, + **kwargs): + if nroots == 1: + return kernel(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ, + tol, max_cycle, verbose, ecore, returnhop, adj_zero_pho, + **kwargs) + h2e = fci_slow.absorb_h1e(h1e, g2e, norb, nelec, .5) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + ci0 = numpy.zeros(cishape) + ci0.__setitem__((0, 0) + (0,) * nbosons, 1) + # Add noise for initial guess, remove it if problematic + ci0[0, :] += numpy.random.random(ci0[0, :].shape) * 1e-6 + ci0[:, 0] += numpy.random.random(ci0[:, 0].shape) * 1e-6 + + def hop(c): + hc = contract_all(h1e, h2e, hep, hpp, c, norb, + nelec, nbosons, max_occ, adj_zero_pho=adj_zero_pho) + return hc.reshape(-1) + + hdiag = make_hdiag(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ) + precond = lambda x, e, *args: x / (hdiag - e + 1e-4) + if returnhop: + return hop, ci0, hdiag + + es, cs = lib.davidson(hop, ci0.reshape(-1), precond, + tol=tol, max_cycle=max_cycle, verbose=verbose, nroots=nroots, max_space=20, + **kwargs) + return es, cs
+ + +# dm_pq = <|p^+ q|> +
[docs]def make_rdm1(fcivec, norb, nelec): + '''1-electron density matrix dm_pq = <|p^+ q|>''' + neleca, nelecb = _unpack_nelec(nelec) + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + na = cistring.num_strings(norb, neleca) + nb = cistring.num_strings(norb, nelecb) + + rdm1 = numpy.zeros((norb, norb)) + ci0 = fcivec.reshape(na, -1) + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + rdm1[a, i] += sign * numpy.dot(ci0[str1], ci0[str0]) + + ci0 = fcivec.reshape(na, nb, -1) + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + rdm1[a, i] += sign * numpy.einsum('ax,ax->', ci0[:, str1], ci0[:, str0]) + return rdm1
+ + +
[docs]def make_rdm12(fcivec, norb, nelec): + '''1-electron and 2-electron density matrices + dm_qp = <|q^+ p|> + dm_{pqrs} = <|p^+ r^+ s q|> + ''' + neleca, nelecb = _unpack_nelec(nelec) + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + na = cistring.num_strings(norb, neleca) + nb = cistring.num_strings(norb, nelecb) + + ci0 = fcivec.reshape(na, nb, -1) + rdm1 = numpy.zeros((norb, norb)) + rdm2 = numpy.zeros((norb, norb, norb, norb)) + + for str0 in range(na): + t1 = numpy.zeros((norb, norb, nb) + ci0.shape[2:]) + for a, i, str1, sign in link_indexa[str0]: + t1[i, a, :] += sign * ci0[str1, :] + + for k, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + t1[i, a, k] += sign * ci0[str0, str1] + + rdm1 += numpy.einsum('mp,ijmp->ij', ci0[str0], t1) + # i^+ j|0> => <0|j^+ i, so swap i and j + #:rdm2 += numpy.einsum('ijmp,klmp->jikl', t1, t1) + tmp = lib.dot(t1.reshape(norb ** 2, -1), t1.reshape(norb ** 2, -1).T) + rdm2 += tmp.reshape((norb,) * 4).transpose(1, 0, 2, 3) + rdm1, rdm2 = rdm.reorder_rdm(rdm1, rdm2, True) + return rdm1, rdm2
+ + +
[docs]def make_rdm12s(fcivec, norb, nelec): + '''1-electron and 2-electron spin-resolved density matrices + dm_qp = <|q^+ p|> + dm_{pqrs} = <|p^+ r^+ s q|> + ''' + neleca, nelecb = _unpack_nelec(nelec) + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + na = cistring.num_strings(norb, neleca) + nb = cistring.num_strings(norb, nelecb) + + ci0 = fcivec.reshape(na, nb, -1) + nspinorb = 2 * norb + rdm1 = numpy.zeros((nspinorb, nspinorb)) + rdm2 = numpy.zeros((nspinorb, nspinorb, nspinorb, nspinorb)) + + # We'll initially calculate <|p^+ q r^+ s|>, where p&q and r&s are + # of the same spin, then use this to obtain the components where + # each individual excitation is not spin-conserving, before using + # this to finally generate the standard form of the 2rdm. + for str0 in range(na): + # Alpha excitation. + t1 = numpy.zeros((nspinorb, nspinorb, nb) + ci0.shape[2:]) + for a, i, str1, sign in link_indexa[str0]: + t1[2 * i, 2 * a, :] += sign * ci0[str1, :] + # Beta excitation. + for k, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + t1[2 * i + 1, 2 * a + 1, k] += sign * ci0[str0, str1] + # Generate our spin-resolved 1rdm contribution. do fast as over the full FCI space. + rdm1 += numpy.tensordot(t1, ci0[str0], 2) + # rdm1 += numpy.einsum('mp,ijmp->ij', ci0[str0], t1) + # t1[i,a] = a^+ i |0> + # i^+ j|0> => <0|j^+ i, so swap i and j + #:rdm2 += numpy.einsum('ijmp,klmp->jikl', t1, t1) + # Calc <0|i^+ a b^+ j |0> + tmp = lib.dot(t1.reshape(nspinorb ** 2, -1), t1.reshape(nspinorb ** 2, -1).T) + rdm2 += tmp.reshape((nspinorb,) * 4).transpose(1, 0, 2, 3) + # Need to fill in components where have two single excitations which are + # spin disallowed, but in combination excitations conserve spin. + # From standard fermionic commutation relations + # <0|b1^+ a1 a2^+ b2|0> = + # - <0|a2^+ a1 b1^+ b2|0> + \delta_{a1a2} <0|b1^+ b2|0> + # Could accelerate with tensordot, but this isn't going to be the limiting code.. + # rdm2[::2, 1::2, 1::2, ::2] = ( + # - rdm2[1::2,1::2,::2,::2].transpose([2,1,0,3]) + # + numpy.tensordot(rdm1[::2,::2], numpy.identity(norb), 0).transpose([0,2,3,1]) + # ) + rdm2[::2, 1::2, 1::2, ::2] = -numpy.einsum("pqrs->rqps", rdm2[1::2, 1::2, ::2, ::2]) + \ + numpy.einsum("pq,rs->prsq", rdm1[::2, ::2], numpy.identity(norb)) + rdm2[1::2, ::2, ::2, 1::2] = -numpy.einsum("pqrs->rqps", rdm2[::2, ::2, 1::2, 1::2]) + \ + numpy.einsum("pq,rs->prsq", rdm1[1::2, 1::2], numpy.identity(norb)) + save = rdm2.copy() + # This should hopefully work with spinorbitals. + rdm1, rdm2 = rdm.reorder_rdm(rdm1, rdm2, True) + return rdm1, rdm2, save
+ + +
[docs]def make_eb_rdm(fcivec, norb, nelec, nbosons, max_occ): + """ + We calculate the value <0|b^+ p^+ q|0> and return this in value P[p,q,b] + :param fcivec: + :param norb: + :param nelec: + :param max_occ: + :return: + """ + if isinstance(nelec, (int, numpy.integer)): + nelecb = nelec // 2 + neleca = nelec - nelecb + else: + neleca, nelecb = nelec + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + + # Just so we get a sensible result in pure fermionic case. + if nbosons == 0: + return numpy.zeros((norb, norb, 0)), numpy.zeros((norb, norb, 0)) + + ci0 = fcivec.reshape(cishape) + t1a = numpy.zeros((norb, norb) + cishape, dtype=fcivec.dtype) + t1b = numpy.zeros_like(t1a) + + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in link_indexa[str0]: + t1a[a, i, str1] += sign * ci0[str0] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in link_indexb[str0]: + t1b[a, i, :, str1] += sign * ci0[:, str0] + bos_cre = numpy.sqrt(numpy.arange(1, max_occ + 1)) + tempa = numpy.zeros((norb, norb, nbosons) + ci0.shape) + tempb = np.zeros_like(tempa) + for ibos in range(nbosons): + # We could tidy this up with nicer slicing and einsum, but it works for now. + for iocc in range(0, max_occ): + ex_slice = (slice(None, None, None),) * 2 + (ibos,) + slices_for_cre(ibos, nbosons, iocc) + norm_slice = (slice(None, None, None),) * 2 + slices_for(ibos, nbosons, iocc) + tempa[ex_slice] += t1a[norm_slice] * bos_cre[iocc] + tempb[ex_slice] += t1b[norm_slice] * bos_cre[iocc] + rdm_fba = numpy.dot(tempa.reshape((norb ** 2 * nbosons, -1)), ci0.reshape(-1)).reshape((norb, norb, nbosons)) + rdm_fbb = numpy.dot(tempb.reshape((norb ** 2 * nbosons, -1)), ci0.reshape(-1)).reshape((norb, norb, nbosons)) + return rdm_fba, rdm_fbb
+ + +
[docs]def calc_dd_resp_mom(ci0, e0, max_mom, norb, nel, nbos, h1e, eri, hbb, heb, max_boson_occ, rdm1, + trace=False, + coeffs=None, **kwargs): + """ + Calculate up to the mth moment of the dd response, dealing with all spin components separately. To replace + preceding function. + :param m: maximum moment order of response to return. + :param hfbas: whether to return the moment in the HF basis. Otherwise returns in the basis in the underlying + orthogonal basis hfbas is specified in (defaults to False). + :return: + """ + # Note that we must stay in the same spin sector in this approach; if we want to get the nonzero components of the + # spin-density response (rather than charge-density) we'll need to use commutation relations to relate to the + # equivalent charge-density response. + hop = kernel(h1e, eri, heb, hbb, norb, nel, nbos, max_boson_occ, returnhop=True, **kwargs)[0] + + if isinstance(nel, (int, numpy.integer)): + nelecb = nel // 2 + neleca = nel - nelecb + else: + neleca, nelecb = nel + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + cishape = make_shape(norb, nel, nbos, max_boson_occ) + + t1a = numpy.zeros((norb, norb) + cishape, dtype=numpy.dtype(numpy.float64)) + t1b = numpy.zeros_like(t1a) + + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + t1a[a, i, str1] += sign * ci0[str0] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + t1b[a, i, :, str1] += sign * ci0[:, str0] + # If we want not in HF basis we can perform transformation at this stage. + t1a = t1a.reshape((norb, norb, -1)) + t1b = t1b.reshape((norb, norb, -1)) + na = nb = norb + if not (coeffs is None): + if type(coeffs) == tuple: + coeffsa, coeffsb = coeffs + else: + coeffsa = coeffsb = coeffs + na, nb = coeffsa.shape[1], coeffsb.shape[1] + t1a = numpy.einsum("ia...,ip,aq->pq...", t1a, coeffsa, coeffsa) + t1b = numpy.einsum("ia...,ip,aq->pq...", t1b, coeffsb, coeffsb) + if trace: + t1a = numpy.einsum("ii...->i...", t1a) + t1b = numpy.einsum("ii...->i...", t1b) + # From this we'll obtain our moments through dot products, thanks to the Hermiticity of our expression. + max_intermed = numpy.ceil(max_mom / 2).astype(int) + aintermeds = {0: t1a} + bintermeds = {0: t1b} + for iinter in range(max_intermed): + aintermeds[iinter + 1] = numpy.zeros_like(t1a) + bintermeds[iinter + 1] = numpy.zeros_like(t1b) + for i in range(na): + if trace: + aintermeds[iinter + 1][i] = hop(aintermeds[iinter][i]).reshape(-1) - \ + e0 * aintermeds[iinter][i] + else: + for a in range(na): + aintermeds[iinter + 1][a, i] = hop(aintermeds[iinter][a, i]).reshape(-1) - \ + e0 * aintermeds[iinter][a, i] + for i in range(nb): + if trace: + bintermeds[iinter + 1][i] = hop(bintermeds[iinter][i]).reshape(-1) - \ + e0 * bintermeds[iinter][i] + else: + for a in range(nb): + bintermeds[iinter + 1][a, i] = hop(bintermeds[iinter][a, i]).reshape(-1) - \ + e0 * bintermeds[iinter][a, i] + + # Need to adjust zeroth moment to remove ground state contributions; in all higher moments this is achieved by + # deducting the reference energy. + # Now take appropriate dot products to get moments. + moments = {} + for imom in range(max_mom + 1): + r_ind = min(imom, max_intermed) + l_ind = imom - r_ind + + aintermed_r = aintermeds[r_ind] + bintermed_r = bintermeds[r_ind] + aintermed_l = aintermeds[l_ind] + bintermed_l = bintermeds[l_ind] + + if trace: + moments[imom] = ( + numpy.dot(aintermed_l, aintermed_r.T), + numpy.dot(aintermed_l, bintermed_r.T), + numpy.dot(bintermed_l, bintermed_r.T) + ) + else: + moments[imom] = ( + numpy.tensordot(aintermed_l, aintermed_r, (2, 2)), + numpy.tensordot(aintermed_l, bintermed_r, (2, 2)), + numpy.tensordot(bintermed_l, bintermed_r, (2, 2)) + ) + # Need to add additional adjustment for zeroth moment, as there is a nonzero ground state + # contribution in this case (the current value is in fact the double occupancy <0|n_{pq} n_{sr}|0>). + if type(rdm1) == tuple: + rdma, rdmb = rdm1 + else: + rdma = rdmb = rdm1 / 2 + if not (coeffs is None): + rdma = coeffsa.T.dot(rdma).dot(coeffsa) + rdmb = coeffsb.T.dot(rdmb).dot(coeffsb) + + moments[0] = list(moments[0]) + if trace: + moments[0][0] = moments[0][0] - numpy.einsum("pp,qq->pq", rdma, rdma) + moments[0][1] = moments[0][1] - numpy.einsum("pp,qq->pq", rdma, rdmb) + moments[0][2] = moments[0][2] - numpy.einsum("pp,qq->pq", rdmb, rdmb) + else: + moments[0][0] = moments[0][0] - numpy.einsum("pq,rs->pqrs", rdma, rdma) + moments[0][1] = moments[0][1] - numpy.einsum("pq,rs->pqrs", rdma, rdmb) + moments[0][2] = moments[0][2] - numpy.einsum("pq,rs->pqrs", rdmb, rdmb) + moments[0] = tuple(moments[0]) + return moments
+ + +
[docs]def run(nelec, h1e, eri, hpp, hep, max_occ, returnhop=False, nroots=1, **kwargs): + """run a calculation using a pyscf mf object. + """ + norb = h1e.shape[1] + nbosons = hpp.shape[0] + if returnhop: + hop0 = kernel(h1e, eri, hep, hpp, norb, nelec, nbosons, max_occ, + returnhop=True, **kwargs) + + # hop1 = fci_slow.kernel(h1e, eri, norb, nelec)#, returnhop=True) + return hop0 # , hop1 + if nroots > 1: + es, cs = kernel_multiroot(h1e, eri, hep, hpp, norb, nelec, nbosons, max_occ, nroots=nroots, + **kwargs) + return es, cs + + else: + res0 = kernel(h1e, eri, hep, hpp, norb, nelec, nbosons, max_occ, + **kwargs) + + return res0
+ + +
[docs]def run_hub_test(returnhop=False, **kwargs): + return run_ep_hubbard(t=1.0, u=1.5, g=0.5, pp=0.1, nsite=2, nelec=2, nphonon=3, + returnhop=returnhop)
+ + +
[docs]def run_ep_hubbard(t, u, g, pp, nsite, nelec, nphonon, returnhop=False, **kwargs): + """Run a calculation using a hubbard model coupled to some phonon modes. + """ + idx = numpy.arange(nsite - 1) + # 1 electron interactions. + h1e = numpy.zeros((nsite, nsite)) + h1e[idx + 1, idx] = h1e[idx, idx + 1] = -t + # Phonon coupling. + hpp = numpy.eye(nsite) * (0.3 + pp) + hpp[idx + 1, idx] = hpp[idx, idx + 1] = pp + # 2 electron interactions. + eri = numpy.zeros((nsite, nsite, nsite, nsite)) + for i in range(nsite): + eri[i, i, i, i] = u + # Electron-phonon coupling. + hep = numpy.zeros((nsite, nsite, nsite)) # (phonon, orb, orb) + # Only have onsite coupling; so only couple . + for i in range(nsite): + hep[i, i, i] = g + res0 = kernel(h1e, eri, hep, hpp, nsite, nelec, nsite, nphonon, + adj_zero_pho=False, returnhop=returnhop, **kwargs) + return res0
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/eb_fci/uebfci_slow.html b/_modules/vayesta/solver/eb_fci/uebfci_slow.html new file mode 100644 index 000000000..0e046fa18 --- /dev/null +++ b/_modules/vayesta/solver/eb_fci/uebfci_slow.html @@ -0,0 +1,805 @@ + + + + + + vayesta.solver.eb_fci.uebfci_slow — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.eb_fci.uebfci_slow

+"""Module for slow, exact diagonalisation-based coupled electron-boson FCI code.
+Based on the fci_slow.py code within pyscf.
+"""
+
+import numpy
+import numpy as np
+from pyscf import ao2mo
+from pyscf import lib
+from pyscf.fci import cistring
+from pyscf.fci import direct_uhf
+from pyscf.fci import rdm
+from pyscf.fci.direct_spin1 import _unpack_nelec
+
+
+
[docs]def contract_all(h1e, g2e, hep, hpp, ci0, norbs, nelec, nbosons, max_occ, + ecore=0.0, adj_zero_pho=False): + # ci1 = contract_1e(h1e, ci0, norbs, nelec, nbosons, max_occ) + contrib1 = contract_2e(g2e, ci0, norbs, nelec, nbosons, max_occ) + incbosons = (nbosons > 0 and max_occ > 0) + + if incbosons: + contrib2 = contract_ep(hep, ci0, norbs, nelec, nbosons, max_occ, + adj_zero_pho=adj_zero_pho) + contrib3 = contract_pp(hpp, ci0, norbs, nelec, nbosons, max_occ) + + return contrib1 + contrib2 + contrib3 + else: + return contrib1
+ + +
[docs]def make_shape(norbs, nelec, nbosons, max_occ): + """Construct the shape of a single FCI vector in the coupled electron-boson space. + """ + neleca, nelecb = _unpack_nelec(nelec) + na = cistring.num_strings(norbs, neleca) + nb = cistring.num_strings(norbs, nelecb) + # print(na,nb,max_occ,nbosons) + return (na, nb) + (max_occ + 1,) * nbosons
+ + +# Contract 1-electron integrals with fcivec. +
[docs]def contract_1e(h1e, fcivec, norb, nelec, nbosons, max_occ): + raise NotImplementedError("1 electron contraction is currently" + "bugged for coupled electron-boson systems." + "This should instead be folded into a two-body operator.") + if isinstance(nelec, (int, numpy.integer)): + nelecb = nelec // 2 + neleca = nelec - nelecb + else: + neleca, nelecb = nelec + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + + ci0 = fcivec.reshape(cishape) + fcinew = numpy.zeros(cishape, dtype=fcivec.dtype) + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + fcinew[str1] += sign * ci0[str0] * h1e[a, i] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + fcinew[:, str1] += sign * ci0[:, str0] * h1e[a, i] + return fcinew.reshape(fcivec.shape)
+ + +# Contract 2-electron integrals with fcivec. +
[docs]def contract_2e(eri, fcivec, norb, nelec, nbosons, max_occ): + if isinstance(nelec, (int, numpy.integer)): + nelecb = nelec // 2 + neleca = nelec - nelecb + else: + neleca, nelecb = nelec + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + + ci0 = fcivec.reshape(cishape) + t1a = numpy.zeros((norb, norb) + cishape, dtype=fcivec.dtype) + t1b = numpy.zeros_like(t1a) + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + t1a[a, i, str1] += sign * ci0[str0] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + t1b[a, i, :, str1] += sign * ci0[:, str0] + + # t1 = lib.einsum('bjai,aiAB...->bjAB...', eri.reshape([norb]*4), t1) + t1a_ = numpy.tensordot(eri[0].reshape([norb] * 4), t1a, 2) + numpy.tensordot(eri[1].reshape([norb] * 4), t1b, 2) + t1b_ = numpy.tensordot(eri[2].reshape([norb] * 4), t1b, 2) + numpy.tensordot(eri[1].reshape([norb] * 4), t1a, + [[0, 1], [0, 1]]) + t1a, t1b = t1a_, t1b_ + + fcinew = numpy.zeros_like(ci0) + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + fcinew[str1] += sign * t1a[a, i, str0] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + fcinew[:, str1] += sign * t1b[a, i, :, str0] + return fcinew.reshape(fcivec.shape)
+ + +# Contract electron-phonon portion of the Hamiltonian. +
[docs]def contract_ep(heb, fcivec, norb, nelec, nbosons, max_occ, adj_zero_pho=False): + if isinstance(nelec, (int, numpy.integer)): + nelecb = nelec // 2 + neleca = nelec - nelecb + else: + neleca, nelecb = nelec + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + + ci0 = fcivec.reshape(cishape) + t1a = numpy.zeros((norb, norb) + cishape, dtype=fcivec.dtype) + t1b = numpy.zeros((norb, norb) + cishape, dtype=fcivec.dtype) + + if adj_zero_pho: + zfac = float(neleca + nelecb) / norb + # print("Zfac=",zfac) + adj_val = zfac * ci0 + for i in range(norb): + t1a[i, i] -= adj_val + t1b[i, i] -= adj_val + + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + t1a[a, i, str1] += sign * ci0[str0] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + t1b[a, i, :, str1] += sign * ci0[:, str0] + # Now have contribution to a particular state via given excitation + # channel; just need to apply bosonic (de)excitations. + # Note that while the contribution {a^{+} i p} and {i a^{+} p^{+}} + # are related via the Hermiticity of the Hamiltonian, no other properties + # are guaranteed, so we cannot write this as p + p^{+}. + + # Contract intermediate with the electron-boson coupling. + # If we need to remove zero phonon mode also need factor of -<N> + heb_a, heb_b = heb if type(heb) == tuple else (heb, heb) + # First, bosonic excitations. + tex = numpy.tensordot(heb_a, t1a, 2) + numpy.tensordot(heb_b, t1b, 2) + # tex = numpy.einsum("nai,ai...->n...", g, t1) + # Then bosonic deexcitations. + tdex = numpy.tensordot(heb_a, t1a, ((1, 2), (1, 0))) + numpy.tensordot(heb_b, t1b, ((1, 2), (1, 0))) + # tdex = numpy.einsum("nia,ai...->n...", g, t1) + + # print(norb,nelec, nbosons) + # print(tex.shape,"Ex:",numpy.sum(tex**2)) + # print(tex) + # print(tdex.shape, "Deex:",numpy.sum(tdex**2)) + # print(tdex) + # The leading index tells us which bosonic degree of freedom is coupled + # to in each case. + fcinew = numpy.zeros_like(ci0) + + bos_cre = numpy.sqrt(numpy.arange(1, max_occ + 1)) + + for ibos in range(nbosons): + for iocc in range(0, max_occ): + ex_slice = slices_for_cre(ibos, nbosons, iocc) + norm_slice = slices_for(ibos, nbosons, iocc) + # NB bos_cre[iocc] = sqrt(iocc+1) + fcinew[ex_slice] += tex[ibos][norm_slice] * bos_cre[iocc] + + for iocc in range(1, max_occ + 1): + dex_slice = slices_for_des(ibos, nbosons, iocc) + norm_slice = slices_for(ibos, nbosons, iocc) + # NB bos_cre[iocc] = sqrt(iocc+1) + fcinew[dex_slice] += tdex[ibos][norm_slice] * bos_cre[iocc - 1] + + return fcinew.reshape(fcivec.shape)
+ + +# Contract phonon-phonon portion of the Hamiltonian. + +
[docs]def contract_pp(hpp, fcivec, norb, nelec, nbosons, max_occ): + """Arbitrary phonon-phonon coupling. + """ + cishape = make_shape(norb, nelec, nbosons, max_occ) + ci0 = fcivec.reshape(cishape) + fcinew = numpy.zeros_like(ci0) + + phonon_cre = numpy.sqrt(numpy.arange(1, max_occ + 1)) + # t1 = numpy.zeros((nbosons,)+cishape, dtype=fcivec.dtype) + # for psite_id in range(nbosons): + # for i in range(max_occ): + # slices1 = slices_for_cre(psite_id, nbosons, i) + # slices0 = slices_for (psite_id, nbosons, i) + # t1[(psite_id,)+slices0] += ci0[slices1] * phonon_cre[i] # annihilation + + t1 = apply_bos_annihilation(ci0, nbosons, max_occ) + + t1 = lib.dot(hpp, t1.reshape(nbosons, -1)).reshape(t1.shape) + + for psite_id in range(nbosons): + for i in range(max_occ): + slices1 = slices_for_cre(psite_id, nbosons, i) + slices0 = slices_for(psite_id, nbosons, i) + fcinew[slices1] += t1[(psite_id,) + slices0] * phonon_cre[i] # creation + return fcinew.reshape(fcivec.shape)
+ + +
[docs]def apply_bos_annihilation(ci0, nbosons, max_occ): + phonon_cre = numpy.sqrt(numpy.arange(1, max_occ + 1)) + res = numpy.zeros((nbosons,) + ci0.shape, dtype=ci0.dtype) + for psite_id in range(nbosons): + for i in range(max_occ): + slices1 = slices_for_cre(psite_id, nbosons, i) + slices0 = slices_for(psite_id, nbosons, i) + res[(psite_id,) + slices0] += ci0[slices1] * phonon_cre[i] # annihilation + return res
+ + +
[docs]def apply_bos_creation(ci0, nbosons, max_occ): + phonon_cre = numpy.sqrt(numpy.arange(1, max_occ + 1)) + res = numpy.zeros((nbosons,) + ci0.shape, dtype=ci0.dtype) + for psite_id in range(nbosons): + for i in range(max_occ): + slices1 = slices_for_cre(psite_id, nbosons, i) + slices0 = slices_for(psite_id, nbosons, i) + res[(psite_id,) + slices1] += ci0[slices0] * phonon_cre[i] # creation + return res
+ + +
[docs]def contract_pp_for_future(hpp, fcivec, norb, nelec, nbosons, max_occ): + """Our bosons are decoupled; only have diagonal couplings, + ie. to the boson number. + """ + cishape = make_shape(norb, nelec, nbosons, max_occ) + ci0 = fcivec.reshape(cishape) + fcinew = numpy.zeros_like(ci0) + + for ibos in range(nbosons): + for iocc in range(max_occ + 1): + slice1 = slices_for(ibos, nbosons, iocc) + # This may need a sign change? + # Two factors sqrt(iocc) from annihilation then creation. + fcinew[slice1] += ci0[slice1] * iocc * hpp[ibos] + return fcinew.reshape(fcivec.shape)
+ + +
[docs]def slices_for(b_id, nbos, occ): + slices = [slice(None, None, None)] * (2 + nbos) # +2 for electron indices + slices[2 + b_id] = occ + return tuple(slices)
+ + +
[docs]def slices_for_cre(b_id, nbos, occ): + return slices_for(b_id, nbos, occ + 1)
+ + +
[docs]def slices_for_des(b_id, nbos, occ): + return slices_for(b_id, nbos, occ - 1)
+ + +
[docs]def slices_for_occ_reduction(nbos, new_max_occ): + slices = [slice(None, None, None)] * 2 + slices += [slice(0, new_max_occ + 1)] * nbos + return tuple(slices)
+ + +
[docs]def make_hdiag(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ): + neleca, nelecb = _unpack_nelec(nelec) + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + occslista = [tab[:neleca, 0] for tab in link_indexa] + occslistb = [tab[:nelecb, 0] for tab in link_indexb] + + nelec_tot = neleca + nelecb + + # electron part + cishape = make_shape(norb, nelec, nbosons, max_occ) + hdiag = numpy.zeros(cishape) + g2e_aa = ao2mo.restore(1, g2e[0], norb) + g2e_ab = ao2mo.restore(1, g2e[1], norb) + g2e_bb = ao2mo.restore(1, g2e[2], norb) + + diagj_aa = numpy.einsum('iijj->ij', g2e_aa) + diagj_ab = numpy.einsum('iijj->ij', g2e_ab) + diagj_bb = numpy.einsum('iijj->ij', g2e_bb) + + diagk_aa = numpy.einsum('ijji->ij', g2e_aa) + diagk_bb = numpy.einsum('ijji->ij', g2e_bb) + + for ia, aocc in enumerate(occslista): + for ib, bocc in enumerate(occslistb): + e1 = h1e[0][aocc, aocc].sum() + h1e[1][bocc, bocc].sum() + e2 = diagj_aa[aocc][:, aocc].sum() + diagj_ab[aocc][:, bocc].sum() \ + + diagj_ab.T[bocc][:, aocc].sum() + diagj_bb[bocc][:, bocc].sum() \ + - diagk_aa[aocc][:, aocc].sum() - diagk_bb[bocc][:, bocc].sum() + hdiag[ia, ib] += e1 + e2 * .5 + + # No electron-phonon part? + + # phonon part + if len(hpp.shape) == 2: + hpp = hpp.diagonal() + for b_id in range(nbosons): + for i in range(max_occ + 1): + slices0 = slices_for(b_id, nbosons, i) + hdiag[slices0] += hpp[b_id] * i + + return hdiag.ravel()
+ + +
[docs]def kernel(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ, + tol=1e-12, max_cycle=100, verbose=0, ecore=0, + returnhop=False, adj_zero_pho=False, + **kwargs): + h2e = tuple([ao2mo.restore(1, x, norb) for x in direct_uhf.absorb_h1e(h1e, g2e, norb, nelec, .5)]) + cishape = make_shape(norb, nelec, nbosons, max_occ) + ci0 = numpy.zeros(cishape) + # Add noise for initial guess, remove it if problematic + ci0 += numpy.random.random(ci0.shape) * 1e-10 + ci0.__setitem__((0, 0) + (0,) * nbosons, 1) + + def hop(c): + hc = contract_all(h1e, h2e, hep, hpp, c, norb, + nelec, nbosons, max_occ, adj_zero_pho=adj_zero_pho) + return hc.reshape(-1) + + hdiag = make_hdiag(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ) + precond = lambda x, e, *args: x / (hdiag - e + 1e-4) + if returnhop: + return hop, ci0, hdiag + + e, c = lib.davidson(hop, ci0.reshape(-1), precond, + tol=tol, max_cycle=max_cycle, verbose=verbose, + **kwargs) + return e + ecore, c.reshape(cishape)
+ + +
[docs]def kernel_multiroot(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ, + tol=1e-12, max_cycle=100, verbose=0, ecore=0, nroots=2, + returnhop=False, adj_zero_pho=False, + **kwargs): + if nroots == 1: + return kernel(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ, + tol, max_cycle, verbose, ecore, returnhop, adj_zero_pho, + **kwargs) + h2e = direct_uhf.absorb_h1e(h1e, g2e, norb, nelec, .5) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + ci0 = numpy.zeros(cishape) + ci0.__setitem__((0, 0) + (0,) * nbosons, 1) + # Add noise for initial guess, remove it if problematic + ci0[0, :] += numpy.random.random(ci0[0, :].shape) * 1e-6 + ci0[:, 0] += numpy.random.random(ci0[:, 0].shape) * 1e-6 + + def hop(c): + hc = contract_all(h1e, h2e, hep, hpp, c, norb, + nelec, nbosons, max_occ, adj_zero_pho=adj_zero_pho) + return hc.reshape(-1) + + hdiag = make_hdiag(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ) + precond = lambda x, e, *args: x / (hdiag - e + 1e-4) + if returnhop: + return hop, ci0, hdiag + + es, cs = lib.davidson(hop, ci0.reshape(-1), precond, + tol=tol, max_cycle=max_cycle, verbose=verbose, nroots=nroots, max_space=20, + **kwargs) + return es, cs
+ + +# dm_pq = <|p^+ q|> +
[docs]def make_rdm1(fcivec, norb, nelec): + '''1-electron density matrix dm_pq = <|p^+ q|>''' + neleca, nelecb = _unpack_nelec(nelec) + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + na = cistring.num_strings(norb, neleca) + nb = cistring.num_strings(norb, nelecb) + + rdm1a = numpy.zeros((norb, norb)) + rdm1b = np.zeros_like(rdm1a) + ci0 = fcivec.reshape(na, -1) + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + rdm1a[a, i] += sign * numpy.dot(ci0[str1], ci0[str0]) + + ci0 = fcivec.reshape(na, nb, -1) + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + rdm1b[a, i] += sign * numpy.einsum('ax,ax->', ci0[:, str1], ci0[:, str0]) + return rdm1a, rdm1b
+ + +
[docs]def make_rdm12(fcivec, norb, nelec): + '''1-electron and 2-electron density matrices + dm_qp = <|q^+ p|> + dm_{pqrs} = <|p^+ r^+ s q|> + ''' + neleca, nelecb = _unpack_nelec(nelec) + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + na = cistring.num_strings(norb, neleca) + nb = cistring.num_strings(norb, nelecb) + + ci0 = fcivec.reshape(na, nb, -1) + rdm1 = numpy.zeros((norb, norb)) + rdm2 = numpy.zeros((norb, norb, norb, norb)) + + for str0 in range(na): + t1 = numpy.zeros((norb, norb, nb) + ci0.shape[2:]) + for a, i, str1, sign in link_indexa[str0]: + t1[i, a, :] += sign * ci0[str1, :] + + for k, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + t1[i, a, k] += sign * ci0[str0, str1] + + rdm1 += numpy.einsum('mp,ijmp->ij', ci0[str0], t1) + # i^+ j|0> => <0|j^+ i, so swap i and j + #:rdm2 += numpy.einsum('ijmp,klmp->jikl', t1, t1) + tmp = lib.dot(t1.reshape(norb ** 2, -1), t1.reshape(norb ** 2, -1).T) + rdm2 += tmp.reshape((norb,) * 4).transpose(1, 0, 2, 3) + rdm1, rdm2 = rdm.reorder_rdm(rdm1, rdm2, True) + return rdm1, rdm2
+ + +
[docs]def make_rdm12s(fcivec, norb, nelec, reorder=True): + '''1-electron and 2-electron spin-resolved density matrices + dm_qp = <|q^+ p|> + dm_{pqrs} = <|p^+ r^+ s q|> + ''' + neleca, nelecb = _unpack_nelec(nelec) + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + na = cistring.num_strings(norb, neleca) + nb = cistring.num_strings(norb, nelecb) + + ci0 = fcivec.reshape(na, nb, -1) + nbos_dof = ci0.shape[2] + + dm1a = numpy.zeros((norb, norb)) + dm1b = numpy.zeros_like(dm1a) + + dm2aa = numpy.zeros((norb, norb, norb, norb)) + dm2ab = numpy.zeros_like(dm2aa) + dm2bb = numpy.zeros_like(dm2aa) + + for str0 in range(na): + # Alpha excitation. + t1a = numpy.zeros((norb, norb, nb, nbos_dof)) + t1b = numpy.zeros_like(t1a) + + for a, i, str1, sign in link_indexa[str0]: + t1a[i, a, :] += sign * ci0[str1, :] + # Beta excitation. + for k, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + t1b[i, a, k] += sign * ci0[str0, str1] + # Generate our spin-resolved 1rdm contribution. do fast as over the full FCI space. + dm1a += numpy.tensordot(t1a, ci0[str0].reshape((nb, nbos_dof)), 2) + dm1b += numpy.tensordot(t1b, ci0[str0].reshape((nb, nbos_dof)), 2) + + # rdm1 += numpy.einsum('mp,ijmp->ij', ci0[str0], t1) + # t1[i,a] = a^+ i |0> + # i^+ j|0> => <0|j^+ i, so swap i and j + #:rdm2 += numpy.einsum('ijmp,klmp->jikl', t1, t1) + # Calc <0|i^+ a b^+ j |0> + t1a = t1a.reshape((norb ** 2, -1)) + t1b = t1b.reshape((norb ** 2, -1)) + + dm2aa += lib.dot(t1a, t1a.T).reshape((norb,) * 4).transpose(1, 0, 2, 3) + dm2ab += lib.dot(t1a, t1b.T).reshape((norb,) * 4).transpose(1, 0, 2, 3) + dm2bb += lib.dot(t1b, t1b.T).reshape((norb,) * 4).transpose(1, 0, 2, 3) + + if reorder: + dm1a, dm2aa = rdm.reorder_rdm(dm1a, dm2aa, inplace=True) + dm1b, dm2bb = rdm.reorder_rdm(dm1b, dm2bb, inplace=True) + return (dm1a, dm1b), (dm2aa, dm2ab, dm2bb)
+ + +
[docs]def make_eb_rdm(fcivec, norb, nelec, nbosons, max_occ): + """ + We calculate the value <0|b^+ p^+ q|0> and return this in value P[p,q,b] + :param fcivec: + :param norb: + :param nelec: + :param max_occ: + :return: + """ + if isinstance(nelec, (int, numpy.integer)): + nelecb = nelec // 2 + neleca = nelec - nelecb + else: + neleca, nelecb = nelec + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + + cishape = make_shape(norb, nelec, nbosons, max_occ) + nspinorb = 2 * norb + + # Just so we get a sensible result in pure fermionic case. + if nbosons == 0: + return numpy.zeros((nspinorb, nspinorb, 0)) + + ci0 = fcivec.reshape(cishape) + t1a = numpy.zeros((norb, norb) + cishape, dtype=fcivec.dtype) + t1b = numpy.zeros_like(t1a) + + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in link_indexa[str0]: + t1a[a, i, str1] += sign * ci0[str0] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in link_indexb[str0]: + t1b[a, i, :, str1] += sign * ci0[:, str0] + bos_cre = numpy.sqrt(numpy.arange(1, max_occ + 1)) + tempa = numpy.zeros((norb, norb, nbosons) + ci0.shape) + tempb = np.zeros_like(tempa) + for ibos in range(nbosons): + # We could tidy this up with nicer slicing and einsum, but it works for now. + for iocc in range(0, max_occ): + ex_slice = (slice(None, None, None),) * 2 + (ibos,) + slices_for_cre(ibos, nbosons, iocc) + norm_slice = (slice(None, None, None),) * 2 + slices_for(ibos, nbosons, iocc) + tempa[ex_slice] += t1a[norm_slice] * bos_cre[iocc] + tempb[ex_slice] += t1b[norm_slice] * bos_cre[iocc] + rdm_fba = numpy.dot(tempa.reshape((norb ** 2 * nbosons, -1)), ci0.reshape(-1)).reshape((norb, norb, nbosons)) + rdm_fbb = numpy.dot(tempb.reshape((norb ** 2 * nbosons, -1)), ci0.reshape(-1)).reshape((norb, norb, nbosons)) + return rdm_fba, rdm_fbb
+ + +
[docs]def calc_dd_resp_mom(ci0, e0, max_mom, norb, nel, nbos, h1e, eri, hbb, heb, max_boson_occ, rdm1, + trace=False, + coeffs=None, **kwargs): + """ + Calculate up to the mth moment of the dd response, dealing with all spin components separately. To replace + preceding function. + :param m: maximum moment order of response to return. + :param hfbas: whether to return the moment in the HF basis. Otherwise returns in the basis in the underlying + orthogonal basis hfbas is specified in (defaults to False). + :return: + """ + # Note that we must stay in the same spin sector in this approach; if we want to get the nonzero components of the + # spin-density response (rather than charge-density) we'll need to use commutation relations to relate to the + # equivalent charge-density response. + hop = kernel(h1e, eri, heb, hbb, norb, nel, nbos, max_boson_occ, returnhop=True, **kwargs)[0] + if isinstance(nel, (int, numpy.integer)): + nelecb = nel // 2 + neleca = nel - nelecb + else: + neleca, nelecb = nel + link_indexa = cistring.gen_linkstr_index(range(norb), neleca) + link_indexb = cistring.gen_linkstr_index(range(norb), nelecb) + cishape = make_shape(norb, nel, nbos, max_boson_occ) + + t1a = numpy.zeros((norb, norb) + cishape, dtype=numpy.dtype(numpy.float64)) + t1b = numpy.zeros_like(t1a) + + for str0, tab in enumerate(link_indexa): + for a, i, str1, sign in tab: + t1a[a, i, str1] += sign * ci0[str0] + for str0, tab in enumerate(link_indexb): + for a, i, str1, sign in tab: + t1b[a, i, :, str1] += sign * ci0[:, str0] + # If we want not in HF basis we can perform transformation at this stage. + t1a = t1a.reshape((norb, norb, -1)) + t1b = t1b.reshape((norb, norb, -1)) + na = nb = norb + if not (coeffs is None): + if type(coeffs) == tuple: + coeffsa, coeffsb = coeffs + else: + coeffsa = coeffsb = coeffs + na, nb = coeffsa.shape[1], coeffsb.shape[1] + t1a = numpy.einsum("ia...,ip,aq->pq...", t1a, coeffsa, coeffsa) + t1b = numpy.einsum("ia...,ip,aq->pq...", t1b, coeffsb, coeffsb) + if trace: + t1a = numpy.einsum("ii...->i...", t1a) + t1b = numpy.einsum("ii...->i...", t1b) + # From this we'll obtain our moments through dot products, thanks to the Hermiticity of our expression. + max_intermed = numpy.ceil(max_mom / 2).astype(int) + aintermeds = {0: t1a} + bintermeds = {0: t1b} + for iinter in range(max_intermed): + aintermeds[iinter + 1] = numpy.zeros_like(t1a) + bintermeds[iinter + 1] = numpy.zeros_like(t1b) + for i in range(na): + if trace: + aintermeds[iinter + 1][i] = hop(aintermeds[iinter][i]).reshape(-1) - \ + e0 * aintermeds[iinter][i] + else: + for a in range(na): + aintermeds[iinter + 1][a, i] = hop(aintermeds[iinter][a, i]).reshape(-1) - \ + e0 * aintermeds[iinter][a, i] + for i in range(nb): + if trace: + bintermeds[iinter + 1][i] = hop(bintermeds[iinter][i]).reshape(-1) - \ + e0 * bintermeds[iinter][i] + else: + for a in range(nb): + bintermeds[iinter + 1][a, i] = hop(bintermeds[iinter][a, i]).reshape(-1) - \ + e0 * bintermeds[iinter][a, i] + + # Need to adjust zeroth moment to remove ground state contributions; in all higher moments this is achieved by + # deducting the reference energy. + # Now take appropriate dot products to get moments. + moments = {} + for imom in range(max_mom + 1): + r_ind = min(imom, max_intermed) + l_ind = imom - r_ind + + aintermed_r = aintermeds[r_ind] + bintermed_r = bintermeds[r_ind] + aintermed_l = aintermeds[l_ind] + bintermed_l = bintermeds[l_ind] + + if trace: + moments[imom] = ( + numpy.dot(aintermed_l, aintermed_r.T), + numpy.dot(aintermed_l, bintermed_r.T), + numpy.dot(bintermed_l, bintermed_r.T) + ) + else: + moments[imom] = ( + numpy.tensordot(aintermed_l, aintermed_r, (2, 2)), + numpy.tensordot(aintermed_l, bintermed_r, (2, 2)), + numpy.tensordot(bintermed_l, bintermed_r, (2, 2)) + ) + # Need to add additional adjustment for zeroth moment, as there is a nonzero ground state + # contribution in this case (the current value is in fact the double occupancy <0|n_{pq} n_{sr}|0>). + if type(rdm1) == tuple: + rdma, rdmb = rdm1 + else: + rdma = rdmb = rdm1 / 2 + if not (coeffs is None): + rdma = coeffsa.T.dot(rdma).dot(coeffsa) + rdmb = coeffsb.T.dot(rdmb).dot(coeffsb) + + moments[0] = list(moments[0]) + if trace: + moments[0][0] = moments[0][0] - numpy.einsum("pp,qq->pq", rdma, rdma) + moments[0][1] = moments[0][1] - numpy.einsum("pp,qq->pq", rdma, rdmb) + moments[0][2] = moments[0][2] - numpy.einsum("pp,qq->pq", rdmb, rdmb) + else: + moments[0][0] = moments[0][0] - numpy.einsum("pq,rs->pqrs", rdma, rdma) + moments[0][1] = moments[0][1] - numpy.einsum("pq,rs->pqrs", rdma, rdmb) + moments[0][2] = moments[0][2] - numpy.einsum("pq,rs->pqrs", rdmb, rdmb) + moments[0] = tuple(moments[0]) + return moments
+ + +
[docs]def run(nelec, h1e, eri, hpp, hep, max_occ, returnhop=False, nroots=1, **kwargs): + """run a calculation using a pyscf mf object. + """ + norb = h1e.shape[1] + nbosons = hpp.shape[0] + if returnhop: + hop0 = kernel(h1e, eri, hep, hpp, norb, nelec, nbosons, max_occ, + returnhop=True, **kwargs) + + # hop1 = fci_slow.kernel(h1e, eri, norb, nelec)#, returnhop=True) + return hop0 # , hop1 + if nroots > 1: + es, cs = kernel_multiroot(h1e, eri, hep, hpp, norb, nelec, nbosons, max_occ, nroots=nroots, + **kwargs) + return es, cs + + else: + res0 = kernel(h1e, eri, hep, hpp, norb, nelec, nbosons, max_occ, + **kwargs) + + return res0
+ + +
[docs]def run_hub_test(returnhop=False, **kwargs): + return run_ep_hubbard(t=1.0, u=1.5, g=0.5, pp=0.1, nsite=2, nelec=2, nphonon=3, + returnhop=returnhop)
+ + +
[docs]def run_ep_hubbard(t, u, g, pp, nsite, nelec, nphonon, returnhop=False, **kwargs): + """Run a calculation using a hubbard model coupled to some phonon modes. + """ + idx = numpy.arange(nsite - 1) + # 1 electron interactions. + h1e = numpy.zeros((nsite, nsite)) + h1e[idx + 1, idx] = h1e[idx, idx + 1] = -t + # Phonon coupling. + hpp = numpy.eye(nsite) * (0.3 + pp) + hpp[idx + 1, idx] = hpp[idx, idx + 1] = pp + # 2 electron interactions. + eri = numpy.zeros((nsite, nsite, nsite, nsite)) + for i in range(nsite): + eri[i, i, i, i] = u + # Electron-phonon coupling. + hep = numpy.zeros((nsite, nsite, nsite)) # (phonon, orb, orb) + # Only have onsite coupling; so only couple . + for i in range(nsite): + hep[i, i, i] = g + res0 = kernel(h1e, eri, hep, hpp, nsite, nelec, nsite, nphonon, + adj_zero_pho=False, returnhop=returnhop, **kwargs) + return res0
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/ebcc.html b/_modules/vayesta/solver/ebcc.html new file mode 100644 index 000000000..5b6406509 --- /dev/null +++ b/_modules/vayesta/solver/ebcc.html @@ -0,0 +1,327 @@ + + + + + + vayesta.solver.ebcc — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.ebcc

+import dataclasses
+
+import numpy as np
+
+from vayesta.core.types import WaveFunction, CCSD_WaveFunction
+from vayesta.core.util import dot, einsum
+from vayesta.solver.solver import ClusterSolver, UClusterSolver
+
+
+
[docs]class REBCC_Solver(ClusterSolver): +
[docs] @dataclasses.dataclass + class Options(ClusterSolver.Options): + ansatz: str = "CCSD" + solve_lambda: bool = False # If false, use Lambda=T approximation + # Convergence + max_cycle: int = 200 # Max number of iterations + conv_tol: float = None # Convergence energy tolerance + conv_tol_normt: float = None # Convergence amplitude tolerance
+ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + try: + import ebcc + except ImportError as e: + raise ImportError("Cannot import ebcc; required to use as a solver.") + + @property + def is_fCCSD(self): + return self.opts.ansatz == "CCSD" + +
[docs] def kernel(self): + import ebcc + # Use pyscf mean-field representation. + mf_clus, frozen = self.hamil.to_pyscf_mf(allow_dummy_orbs=False) + mycc = ebcc.EBCC(mf_clus, log=self.log, ansatz=self.opts.ansatz, + **self.get_nonnull_solver_opts()) + mycc.kernel() + self.converged = mycc.converged + if self.opts.solve_lambda: + mycc.solve_lambda() + self.converged = self.converged and mycc.converged_lambda + # Now just need to wrangle EBCC results into wavefunction format. + self.construct_wavefunction(mycc, self.hamil.mo)
+ +
[docs] def get_nonnull_solver_opts(self): + def add_nonull_opt(d, key, newkey): + val = self.opts.get(key) + if val is not None: + d[newkey] = val + + opts = {} + for key, newkey in zip(["max_cycle", "conv_tol", "conv_tol_normt"], ["max_cycle", "e_tol", "t_tol"]): + add_nonull_opt(opts, key, newkey) + return opts
+ +
[docs] def construct_wavefunction(self, mycc, mo): + if self.is_fCCSD: + # Can use existing functionality + try: + self.wf = CCSD_WaveFunction(mo, mycc.t1, mycc.t2, l1=mycc.l1.T, l2=mycc.l2.transpose(2, 3, 0, 1)) + except TypeError: + self.wf = CCSD_WaveFunction(mo, mycc.t1, mycc.t2) + else: + # Simply alias required quantities for now; this ensures functionality for arbitrary orders of CC via ebcc. + self.wf = WaveFunction(mo) + self.wf.make_rdm1 = mycc.make_rdm1_f + self.wf.make_rdm2 = mycc.make_rdm2_f
+ + def _debug_exact_wf(self, wf): + assert (self.is_fCCSD) + mo = self.hamil.mo + # Project onto cluster: + ovlp = self.hamil._fragment.base.get_ovlp() + ro = dot(wf.mo.coeff_occ.T, ovlp, mo.coeff_occ) + rv = dot(wf.mo.coeff_vir.T, ovlp, mo.coeff_vir) + t1 = dot(ro.T, wf.t1, rv) + t2 = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', ro, ro, wf.t2, rv, rv) + if wf.l1 is not None: + l1 = dot(ro.T, wf.l1, rv) + l2 = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', ro, ro, wf.l2, rv, rv) + else: + l1 = l2 = None + self.wf = CCSD_WaveFunction(mo, t1, t2, l1=l1, l2=l2) + self.converged = True + + def _debug_random_wf(self): + mo = self.hamil.mo + t1 = np.random.rand(mo.nocc, mo.nvir) + l1 = np.random.rand(mo.nocc, mo.nvir) + t2 = np.random.rand(mo.nocc, mo.nocc, mo.nvir, mo.nvir) + l2 = np.random.rand(mo.nocc, mo.nocc, mo.nvir, mo.nvir) + self.wf = CCSD_WaveFunction(mo, t1, t2, l1=l1, l2=l2) + self.converged = True
+ + +
[docs]class UEBCC_Solver(UClusterSolver, REBCC_Solver): +
[docs] @dataclasses.dataclass + class Options(REBCC_Solver.Options, UClusterSolver.Options): + pass
+ + # This should automatically work other than ensuring spin components are in a tuple. +
[docs] def construct_wavefunction(self, mycc, mo): + if self.is_fCCSD: + # Can use existing functionality + def to_spin_tuple1(x): + return x.aa, x.bb + + def to_spin_tuple2(x): + return x.aaaa, x.abab, x.bbbb + + try: + self.wf = CCSD_WaveFunction(mo, + to_spin_tuple1(mycc.t1), + to_spin_tuple2(mycc.t2), + l1=tuple([x.T for x in to_spin_tuple1(mycc.l1)]), + l2=tuple([x.transpose(2, 3, 0, 1) for x in to_spin_tuple2(mycc.l2)]), + ) + except TypeError: + self.wf = CCSD_WaveFunction(mo, + to_spin_tuple1(mycc.t1), + to_spin_tuple2(mycc.t2) + ) + else: + # Simply alias required quantities for now; this ensures functionality for arbitrary orders of CC. + self.wf = WaveFunction(mo) + + def make_rdm1(*args, **kwargs): + dm = mycc.make_rdm1_f(*args, **kwargs) + return (dm.aa, dm.bb) + + self.wf.make_rdm1 = make_rdm1 + + def make_rdm2(*args, **kwargs): + dm = mycc.make_rdm2_f(*args, **kwargs) + return (dm.aaaa, dm.aabb, dm.bbbb) + + self.wf.make_rdm2 = make_rdm2
+ + def _debug_exact_wf(self, wf): + mo = self.cluster.mo + # Project onto cluster: + ovlp = self.hamil._fragment.base.get_ovlp() + roa = dot(wf.mo.coeff_occ[0].T, ovlp, mo.coeff_occ[0]) + rob = dot(wf.mo.coeff_occ[1].T, ovlp, mo.coeff_occ[1]) + rva = dot(wf.mo.coeff_vir[0].T, ovlp, mo.coeff_vir[0]) + rvb = dot(wf.mo.coeff_vir[1].T, ovlp, mo.coeff_vir[1]) + t1a = dot(roa.T, wf.t1a, rva) + t1b = dot(rob.T, wf.t1b, rvb) + t2aa = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', roa, roa, wf.t2aa, rva, rva) + t2ab = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', roa, rob, wf.t2ab, rva, rvb) + t2bb = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', rob, rob, wf.t2bb, rvb, rvb) + t1 = (t1a, t1b) + t2 = (t2aa, t2ab, t2bb) + if wf.l1 is not None: + l1a = dot(roa.T, wf.l1a, rva) + l1b = dot(rob.T, wf.l1b, rvb) + l2aa = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', roa, roa, wf.l2aa, rva, rva) + l2ab = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', roa, rob, wf.l2ab, rva, rvb) + l2bb = einsum('Ii,Jj,IJAB,Aa,Bb->ijab', rob, rob, wf.l2bb, rvb, rvb) + l1 = (l1a, l1b) + l2 = (l2aa, l2ab, l2bb) + else: + l1 = l2 = None + self.wf = CCSD_WaveFunction(mo, t1, t2, l1=l1, l2=l2) + self.converged = True + + def _debug_random_wf(self): + raise NotImplementedError
+ + +
[docs]class EB_REBCC_Solver(REBCC_Solver): +
[docs] @dataclasses.dataclass + class Options(REBCC_Solver.Options): + ansatz: str = "CCSD-S-1-1"
+ + @property + def is_fCCSD(self): + return False + +
[docs] def get_nonnull_solver_opts(self): + opts = super().get_nonnull_solver_opts() + opts["omega"] = self.hamil.bos_freqs + opts["g"] = self.get_couplings() + return opts
+ +
[docs] def get_couplings(self): + # EBCC wants contribution g_{xpq} p^\\dagger q b; need to transpose to get this contribution. + return self.hamil.couplings.transpose(0, 2, 1)
+ +
[docs] def construct_wavefunction(self, mycc, mo): + super().construct_wavefunction(mycc, mo) + + def make_rdmeb(*args, **kwargs): + dm = mycc.make_eb_coup_rdm() + # We just want the bosonic excitation component. + dm = dm[0].transpose(1, 2, 0) + return (dm / 2, dm / 2) + + self.wf.make_rdmeb = make_rdmeb
+ + +
[docs]class EB_UEBCC_Solver(EB_REBCC_Solver, UEBCC_Solver): +
[docs] @dataclasses.dataclass + class Options(UEBCC_Solver.Options, EB_REBCC_Solver.Options): + pass
+ +
[docs] def get_couplings(self): + # EBCC wants contribution g_{xpq} p^\\dagger q b; need to transpose to get this contribution. + return tuple([x.transpose(0, 2, 1) for x in self.hamil.couplings])
+ +
[docs] def construct_wavefunction(self, mycc, mo): + super().construct_wavefunction(mycc, mo) + + def make_rdmeb(*args, **kwargs): + dm = mycc.make_eb_coup_rdm() + # We just want the bosonic excitation component. + dm = (dm.aa[0].transpose(1, 2, 0), dm.bb[0].transpose(1, 2, 0)) + return dm + + self.wf.make_rdmeb = make_rdmeb
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/ebfci.html b/_modules/vayesta/solver/ebfci.html new file mode 100644 index 000000000..dd8b9c1a4 --- /dev/null +++ b/_modules/vayesta/solver/ebfci.html @@ -0,0 +1,145 @@ + + + + + + vayesta.solver.ebfci — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.ebfci

+import dataclasses
+
+import numpy as np
+
+from vayesta.core.types import WaveFunction
+from vayesta.solver.eb_fci import REBFCI, UEBFCI
+from vayesta.solver.solver import ClusterSolver, UClusterSolver
+
+
+
[docs]class EB_EBFCI_Solver(ClusterSolver): +
[docs] @dataclasses.dataclass + class Options(ClusterSolver.Options): + # Convergence + max_cycle: int = 100 # Max number of iterations + conv_tol: float = None # Convergence energy tolerance + # Parameterisation + max_boson_occ: int = 2
+ +
[docs] def get_solver(self, *args, **kwargs): + return REBFCI(*args, **kwargs)
+ +
[docs] def kernel(self): + solver = self.get_solver(self.hamil, self.hamil.bos_freqs, self.hamil.couplings, + max_boson_occ=self.opts.max_boson_occ, conv_tol=self.opts.conv_tol or 1e-12) + e_fci, civec = solver.kernel() + self.wf = WaveFunction(self.hamil.mo) + self.wf.make_rdm1 = lambda *args, **kwargs: solver.make_rdm1(*args, **kwargs) + self.wf.make_rdm2 = lambda *args, **kwargs: solver.make_rdm2(*args, **kwargs) + self.wf.make_rdmeb = lambda *args, **kwargs: np.array(solver.make_rdm_eb(*args, **kwargs)) + \ + np.array( + self.hamil.get_eb_dm_polaritonic_shift(self.wf.make_rdm1())) + self.wf.make_dd_moms = lambda max_mom, *args, **kwargs: solver.make_dd_moms(max_mom, *args, **kwargs)
+ + +
[docs]class EB_UEBFCI_Solver(UClusterSolver, EB_EBFCI_Solver): + +
[docs] def get_solver(self, *args, **kwargs): + return UEBFCI(*args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/ext_ccsd.html b/_modules/vayesta/solver/ext_ccsd.html new file mode 100644 index 000000000..9c87608e0 --- /dev/null +++ b/_modules/vayesta/solver/ext_ccsd.html @@ -0,0 +1,147 @@ + + + + + + vayesta.solver.ext_ccsd — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.ext_ccsd

+import dataclasses
+from typing import Optional, List, Any
+
+import numpy as np
+
+from vayesta.solver.coupling import tailor_with_fragments, externally_correct
+from vayesta.solver.ccsd import RCCSD_Solver, UCCSD_Solver
+
+
+
[docs]class extRCCSD_Solver(RCCSD_Solver): +
[docs] @dataclasses.dataclass + class Options(RCCSD_Solver.Options): + # Tailor/externally correct CCSD with other fragments + external_corrections: Optional[List[Any]] = dataclasses.field(default_factory=list)
+ +
[docs] def get_callback(self): + # Tailoring of T1 and T2 + tailors = [ec for ec in self.opts.external_corrections if (ec[1] == 'tailor')] + externals = [ec for ec in self.opts.external_corrections if (ec[1] in ('external', 'delta-tailor'))] + if tailors and externals: + raise NotImplementedError + if tailors: + tailor_frags = self.hamil._fragment.base.get_fragments(id=[t[0] for t in tailors]) + proj = tailors[0][2] + if np.any([(t[2] != proj) for t in tailors]): + raise NotImplementedError + self.log.info("Tailoring CCSD from %d fragments (projectors= %d)", len(tailor_frags), proj) + return tailor_with_fragments(self, tailor_frags, project=proj) + # External correction of T1 and T2 + if externals: + self.log.info("Externally correct CCSD from %d fragments", len(externals)) + return externally_correct(self, externals, hamil=self.hamil) + # No correction applied; no callback function to apply. + return None
+ + +
[docs]class extUCCSD_Solver(UCCSD_Solver, extRCCSD_Solver): +
[docs] @dataclasses.dataclass + class Options(UCCSD_Solver.Options, extRCCSD_Solver.Options): + pass
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/fci.html b/_modules/vayesta/solver/fci.html new file mode 100644 index 000000000..d621b5f9f --- /dev/null +++ b/_modules/vayesta/solver/fci.html @@ -0,0 +1,220 @@ + + + + + + vayesta.solver.fci — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.fci

+import dataclasses
+
+import numpy as np
+import pyscf.fci
+import pyscf.fci.addons
+
+from vayesta.core.types import FCI_WaveFunction
+from vayesta.core.types.wf.fci import UFCI_WaveFunction_w_dummy
+from vayesta.core.util import log_time
+from vayesta.solver.cisd import RCISD_Solver, UCISD_Solver
+from vayesta.solver.solver import ClusterSolver, UClusterSolver
+
+
+
[docs]class FCI_Solver(ClusterSolver): +
[docs] @dataclasses.dataclass + class Options(ClusterSolver.Options): + threads: int = 1 # Number of threads for multi-threaded FCI + max_cycle: int = 300 + lindep: float = None # Linear dependency tolerance. If None, use PySCF default + conv_tol: float = 1e-12 # Convergence tolerance. If None, use PySCF default + solver_spin: bool = True # Use direct_spin1 if True, or direct_spin0 otherwise + fix_spin: float = 0.0 # If set to a number, the given S^2 value will be enforced + fix_spin_penalty: float = 1.0 # Penalty for fixing spin + davidson_only: bool = True + init_guess: str = 'default' + init_guess_noise: float = 1e-5
+ + cisd_solver = RCISD_Solver + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + solver_cls = self.get_solver_class() + # This just uses mol to initialise various outputting defaults. + solver = solver_cls(self.hamil.orig_mf.mol) + self.log.debugv("type(solver)= %r", type(solver)) + # Set options + if self.opts.init_guess == 'default': + self.opts.init_guess = 'CISD' + if self.opts.threads is not None: + solver.threads = self.opts.threads + if self.opts.conv_tol is not None: + solver.conv_tol = self.opts.conv_tol + if self.opts.lindep is not None: + solver.lindep = self.opts.lindep + if self.opts.max_cycle is not None: + solver.max_cycle = self.opts.max_cycle + if self.opts.davidson_only is not None: + solver.davidson_only = self.opts.davidson_only + if self.opts.fix_spin not in (None, False): + spin = self.opts.fix_spin + self.log.debugv("Fixing spin of FCI solver to S^2= %f", spin) + solver = pyscf.fci.addons.fix_spin_(solver, shift=self.opts.fix_spin_penalty, ss=spin) + self.solver = solver + +
[docs] def get_solver_class(self): + if self.opts.solver_spin: + return pyscf.fci.direct_spin1.FCISolver + return pyscf.fci.direct_spin0.FCISolver
+ +
[docs] def kernel(self, ci=None): + self.hamil.assert_equal_spin_channels() + + if self.opts.init_guess == "CISD": + cisd = self.cisd_solver(self.hamil) + cisd.kernel() + ci = cisd.wf.as_fci().ci + elif self.opts.init_guess in ["mf", "meanfield"]: + ci = None + + if self.opts.init_guess_noise and ci is not None: + ci += self.opts.init_guess_noise * np.random.random(ci.shape) + + heff, eris = self.hamil.get_integrals(with_vext=True) + + with log_time(self.log.timing, "Time for FCI: %s"): + e_fci, self.civec = self.solver.kernel(heff, eris, self.hamil.ncas[0], self.hamil.nelec, ci0=ci) + self.converged = self.solver.converged + self.wf = FCI_WaveFunction(self.hamil.mo, self.civec)
+ + +
[docs]class UFCI_Solver(UClusterSolver, FCI_Solver): +
[docs] @dataclasses.dataclass + class Options(FCI_Solver.Options): + fix_spin: float = None
+ + cisd_solver = UCISD_Solver + +
[docs] def get_solver_class(self): + return pyscf.fci.direct_uhf.FCISolver
+ +
[docs] def kernel(self, ci=None): + + na, nb = self.hamil.ncas + if na == nb: + super().kernel(ci) + return + # Only consider this functionality when it's needed. + if ci is None and self.opts.init_guess == "CISD": + self.log.warning( + "CISD initial guess not implemented for UHF FCI solver with different numbers of alpha and beta orbitals." + "Using meanfield guess.") + # Get dummy meanfield object, with padding, to represent the cluster. + mf, orbs_to_freeze = self.hamil.to_pyscf_mf(allow_dummy_orbs=True, allow_df=False) + # Get padded integrals from this. + heff = mf.get_hcore() + eris = mf._eri + # Run calculation with them. + with log_time(self.log.timing, "Time for FCI: %s"): + e_fci, self.civec = self.solver.kernel(heff, eris, mf.mol.nao, self.hamil.nelec, ci0=ci) + self.converged = self.solver.converged + # Generate wavefunction object with dummy orbitals. + self.wf = UFCI_WaveFunction_w_dummy(self.hamil.mo, self.civec, dummy_orbs=orbs_to_freeze)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/hamiltonian.html b/_modules/vayesta/solver/hamiltonian.html new file mode 100644 index 000000000..da69cbbf7 --- /dev/null +++ b/_modules/vayesta/solver/hamiltonian.html @@ -0,0 +1,811 @@ + + + + + + vayesta.solver.hamiltonian — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.hamiltonian

+import dataclasses
+from typing import Optional
+
+import numpy as np
+import pyscf.lib
+import pyscf.scf
+import scipy.linalg
+
+from vayesta.core.qemb import scrcoulomb
+from vayesta.core.types import Orbitals
+from vayesta.core.util import dot, einsum, OptionsBase, break_into_lines, log_time
+from vayesta.rpa import ssRPA
+
+
+
[docs]def is_ham(ham): + return issubclass(type(ham), RClusterHamiltonian)
+ + +
[docs]def is_uhf_ham(ham): + return issubclass(type(ham), UClusterHamiltonian)
+ + +
[docs]def is_eb_ham(ham): + return issubclass(type(ham), EB_RClusterHamiltonian)
+ + +
[docs]def ClusterHamiltonian(fragment, mf, log=None, **kwargs): + rhf = np.ndim(mf.mo_coeff[0]) == 1 + eb = hasattr(fragment, "bos_freqs") + if rhf: + if eb: + return EB_RClusterHamiltonian(fragment, mf, log=log, **kwargs) + else: + return RClusterHamiltonian(fragment, mf, log=log, **kwargs) + if eb: + return EB_UClusterHamiltonian(fragment, mf, log=log, **kwargs) + return UClusterHamiltonian(fragment, mf, log=log, **kwargs)
+ + +
[docs]class DummyERIs: + def __init__(self, getter, valid_blocks, **kwargs): + self.getter = getter + self.valid_blocks = valid_blocks + for k, v in kwargs.items(): + if k in self.valid_blocks: + raise ValueError("DummyERIs object passed same attribute twice!") + else: + self.__setattr__(k, v) + + def __getattr__(self, key: str): + """Just-in-time attribute getter.""" + if key in self.valid_blocks: + return self.getter(block=key) + else: + raise AttributeError
+ + +
[docs]class RClusterHamiltonian: +
[docs] @dataclasses.dataclass + class Options(OptionsBase): + screening: Optional[str] = None + cache_eris: bool = True
+ + @property + def _scf_class(self): + return pyscf.scf.RHF + + def __init__(self, fragment, mf, log=None, cluster=None, **kwargs): + self.orig_mf = mf + # Do we want to populate all parameters at initialisation, so fragment isn't actually saved here? + self._fragment = fragment + self._cluster = cluster + self.log = (log or fragment.log) + # --- Options: + self.opts = self.Options() + self.opts.update(**kwargs) + self.log.info("Parameters of %s:" % self.__class__.__name__) + self.log.info(break_into_lines(str(self.opts), newline='\n ')) + self.v_ext = None + self._seris = None + self._eris = None + + @property + def cluster(self): + return self._cluster or self._fragment.cluster + + @property + def mo(self): + return Orbitals(self.cluster.c_active, occ=self.cluster.nocc_active) + + @property + def nelec(self): + return (self.cluster.nocc_active, self.cluster.nocc_active) + + @property + def ncas(self): + return (self.cluster.norb_active, self.cluster.norb_active) + + @property + def has_screening(self): + return self._seris is not None + +
[docs] def target_space_projector(self, c=None): + """Projector to the target fragment space within our cluster.""" + return self._fragment.get_fragment_projector(self.cluster.c_active, c)
+ + # Integrals for the cluster calculations. + +
[docs] def get_integrals(self, bare_eris=None, with_vext=True): + heff = self.get_heff(bare_eris, with_vext=with_vext) + # Depending on calculation this may be the same as bare_eris + seris = self.get_eris_screened() + return heff, seris
+ +
[docs] def get_fock(self, with_vext=True, use_seris=True, with_exxdiv=False): + c = self.cluster.c_active + fock = dot(c.T, self._fragment.base.get_fock(with_exxdiv=with_exxdiv), c) + if with_vext and self.v_ext is not None: + fock += self.v_ext + + if self._seris is not None and use_seris: + # Generates the fock matrix if screened ERIs are used in place of bare eris. + occ = np.s_[:self.cluster.nocc_active] + + eris = self.get_eris_bare() + v_act_bare = 2 * einsum('iipq->pq', eris[occ, occ]) - einsum('iqpi->pq', eris[occ, :, :, occ]) + v_act_seris = 2 * einsum('iipq->pq', self._seris[occ, occ]) - \ + einsum('iqpi->pq', self._seris[occ, :, :, occ]) + + fock += v_act_seris - v_act_bare + + return fock
+ +
[docs] def get_heff(self, eris=None, fock=None, with_vext=True, with_exxdiv=False): + if eris is None: + eris = self.get_eris_bare() + if fock is None: + fock = self.get_fock(with_vext=False, use_seris=False, with_exxdiv=with_exxdiv) + occ = np.s_[:self.cluster.nocc_active] + v_act = 2 * einsum('iipq->pq', eris[occ, occ]) - einsum('iqpi->pq', eris[occ, :, :, occ]) + h_eff = fock - v_act + if with_vext and self.v_ext is not None: + h_eff += self.v_ext + return h_eff
+ +
[docs] def get_eris_screened(self, block=None): + # This will only return the bare eris if no screening is expected + if self.opts.screening is None: + return self.get_eris_bare(block) + if self._seris is None: + self.log.critical("ERIs requested before expected screened interactions have been initialised.") + raise RuntimeError("ERIs requested before expected screened interactions have been initialised.") + if block is None: + return self._seris + else: + return self._get_eris_block(self._seris, block)
+ +
[docs] def get_eris_bare(self, block=None): + if block is None: + if self._eris is None: + with log_time(self.log.timing, "Time for AO->MO of ERIs: %s"): + coeff = self.cluster.c_active + eris = self._fragment.base.get_eris_array(coeff) + if self.opts.cache_eris: + self._eris = eris + return eris + else: + return self._eris + else: + assert len(block) == 4 and set(block.lower()).issubset(set("ov")) + if self._eris is None: + # Actually generate the relevant block. + coeffs = [self.cluster.c_active_occ if i == "o" else self.cluster.c_active_vir for i in block.lower()] + return self._fragment.base.get_eris_array(coeffs) + else: + return self._get_eris_block(self._eris, block)
+ + def _get_eris_block(self, eris, block): + assert len(block) == 4 and set(block.lower()).issubset({"o", "v"}) + # Just get slices of cached eri. + occ = slice(self.cluster.nocc_active) + vir = slice(self.cluster.nocc_active, self.cluster.norb_active) + sl = tuple([occ if i == "o" else vir for i in block.lower()]) + return eris[sl] + +
[docs] def get_cderi_bare(self, only_ov=False, compress=False, svd_threshold=1e-12): + + if only_ov: + # We only need the (L|ov) block for MP2: + mo_coeff = (self.cluster.c_active_occ, self.cluster.c_active_vir) + else: + mo_coeff = self.cluster.c_active + + with log_time(self.log.timing, "Time for 2e-integral transformation: %s"): + cderi, cderi_neg = self._fragment.base.get_cderi(mo_coeff) + + if compress: + # SVD and compress the cderi tensor. This scales as O(N_{aux} N_{clus}^4), so this will be worthwhile + # provided the following approach has a lower scaling than this. + def compress_cderi(cd): + naux, n1, n2 = cd.shape + u, s, v = np.linalg.svd(cd.reshape(naux, n1 * n2), full_matrices=False) + want = s > svd_threshold + self.log.debugv("CDERIs auxbas compressed from %d to %d in size", naux, sum(want)) + return einsum("n,nq->nq", s[want], v[want]).reshape(-1, n1, n2) + + cderi = compress_cderi(cderi) + if cderi_neg is not None: + cderi_neg = compress_cderi(cderi_neg) + + return cderi, cderi_neg
+ + # Generate mean-field object representing the cluster. + +
[docs] def to_pyscf_mf(self, allow_dummy_orbs=False, force_bare_eris=False, overwrite_fock=False, allow_df=False): + """ + Generate pyscf.scf object representing this active space Hamiltonian. + This should be able to be passed into a standard post-hf `pyscf` solver without modification. + + Parameters + ---------- + allow_dummy_orbs : bool, optional + Whether the introduction of dummy orbitals into the mean-field, which are then frozen, is permitted. + Default is False + force_bare_eris : bool, optional + Forces resultant mean-field object to use unscreened eris. + Default is False + overwrite_fock : bool, optional + Whether `mf.get_fock` should be set to `self.get_fock`. Mainly for use in UHF. + Default is False + allow_df : bool, optional + Whether the resultant mean-field object should include a `.with_df` object containing the projection of the + CDERIs into the cluster space. + Default is False + + Returns + ------- + clusmf : pyscf.scf.SCF + Representation of cluster as pyscf mean-field. + orbs_to_freeze : list of lists + Which orbitals to freeze, split by spin channel if UHF. + """ + # Using this approach requires dummy orbitals or equal spin channels. + if not allow_dummy_orbs: + self.assert_equal_spin_channels() + nmo = max(self.ncas) + nsm = min(self.ncas) + # Get dummy information on mf state. Note our `AOs` are in fact the rotated MOs. + nao, mo_coeff, mo_energy, mo_occ, ovlp = self.get_clus_mf_info(ao_basis=False, with_vext=True) + # Now, define function to equalise spin channels. + if nsm == nmo: + # No need to pad, these functions don't need to do anything. + def pad_to_match(array, diag_val=0.0): + return array + + orbs_to_freeze = None + dummy_energy = 0.0 + else: + self.log.info("Using %d dummy orbital(s) to pad local Hamiltonian.", nmo - nsm) + # Note that this branch is actually UHF-exclusive. + padchannel = self.ncas.index(nsm) + orbs_to_freeze = [[], []] + orbs_to_freeze[padchannel] = list(range(nsm, nmo)) + + # Pad all indices which are smaller than nmo to this size with zeros. + # Optionally introduce value on diagonal if all indices are padded. + def pad_to_match(array_tup, diag_val=0.0): + def pad(a, diag_val): + topad = np.array(a.shape) < nmo + if any(topad): + sl = tuple([slice(nsm) if x else slice(None) for x in topad]) + new = np.zeros((nmo,) * a.ndim) + new[sl] = a + a = new + if all(topad): + for i in range(nsm, nmo): + a[(i,) * a.ndim] = diag_val + return a + + return [pad(x, diag_val) for x in array_tup] + + # For appropriate one-body quantities (hcore, fock) set diagonal dummy index value to effective virtual + # orbital energy higher than highest actual orbital energy. + dummy_energy = 10.0 + max([x.max() for x in mo_energy]) + + # Set up dummy mol object representing cluster. + clusmol = pyscf.gto.mole.Mole() + # Copy over all output controls from original mol object. + clusmol.verbose = self.orig_mf.mol.verbose + if self.orig_mf.mol.output is not None: + clusmol.output = f"f{self._fragment.id}_{self.orig_mf.mol.output}" + self.log.debugv("Setting solver output file to %s", clusmol.output) + # Set information as required for our cluster. + clusmol.nelec = self.nelec + clusmol.nao = nmo + clusmol.build() + # Then scf object representing mean-field electronic state. + clusmf = self._scf_class(clusmol) + # First set mean-field parameters. + clusmf.mo_coeff = pad_to_match(mo_coeff, 1.0) + clusmf.mo_occ = np.array(pad_to_match(mo_occ, 0.0)) + clusmf.mo_energy = pad_to_match(mo_energy, dummy_energy) + clusmf.get_ovlp = lambda *args, **kwargs: pad_to_match(ovlp, 1.0) + + # Determine if we want to use DF within the cluster to reduce memory costs. + # Only want this if + # -using RHF (UHF would be more complicated). + # -using bare ERIs in cluster. + # -ERIs are PSD. + # -our mean-field has DF. + use_df = allow_df and np.ndim(clusmf.mo_coeff[1]) == 1 and self.opts.screening is None and \ + not (self._fragment.base.pbc_dimension in (1, 2)) and hasattr(self.orig_mf, 'with_df') \ + and self.orig_mf.with_df is not None + clusmol.incore_anyway = not use_df + + if use_df: + # Set up with DF + clusmf = clusmf.density_fit() + # Populate a dummy density fitting object. + cderis = pyscf.lib.pack_tril(self.get_cderi_bare(only_ov=False, compress=True)[0]) + clusmf.with_df._cderi = cderis + # This gives us enough information to generate the local effective interaction. + # This works since it must also be RHF. + heff = self.get_fock(with_vext=True, use_seris=False) - clusmf.get_veff() + else: + # Just set up heff using standard bare eris. + bare_eris = self.get_eris_bare() + heff = pad_to_match(self.get_heff(eris=bare_eris, with_vext=True), dummy_energy) + if force_bare_eris: + clusmf._eri = pad_to_match(bare_eris, 0.0) + else: + clusmf._eri = pad_to_match(self.get_eris_screened()) + + clusmf.get_hcore = lambda *args, **kwargs: heff + if overwrite_fock: + clusmf.get_fock = lambda *args, **kwargs: pad_to_match(self.get_fock(with_vext=True), dummy_energy) + clusmf.get_veff = lambda *args, **kwargs: np.array(clusmf.get_fock(*args, **kwargs)) - np.array( + clusmf.get_hcore()) + + return clusmf, orbs_to_freeze
+ +
[docs] def get_clus_mf_info(self, ao_basis=False, with_vext=True, with_exxdiv=False): + if ao_basis: + nao = self.cluster.c_active.shape[1] + else: + nao = self.ncas + mo_energy = np.diag(self.get_fock(with_vext=with_vext, with_exxdiv=with_exxdiv)) + mo_occ = np.zeros_like(mo_energy) + mo_occ[:self.nelec[0]] = 2.0 + # Determine whether we want our cluster orbitals expressed in the basis of active orbitals, or in the AO basis. + if ao_basis: + mo_coeff = self.cluster.c_active + ovlp = self.orig_mf.get_ovlp() + else: + mo_coeff = np.eye(self.ncas[0]) + ovlp = np.eye(self.ncas[0]) + return nao, mo_coeff, mo_energy, mo_occ, ovlp
+ + # Functionality for use with screened interactions and external corrections. + +
[docs] def add_screening(self, seris_intermed=None): + """Add screened interactions into the Hamiltonian.""" + if self.opts.screening == "mrpa": + assert (seris_intermed is not None) + + # Use bare coulomb interaction from hamiltonian; this could well be cached in future. + bare_eris = self.get_eris_bare() + + self._seris = scrcoulomb.get_screened_eris_full(bare_eris, seris_intermed) + + elif self.opts.screening == "crpa": + raise NotImplementedError() + + else: + raise ValueError("Unknown cluster screening protocol: %s" % self.opts.screening)
+ +
[docs] def calc_loc_erpa(self): + + clusmf = self.to_pyscf_mf(force_bare_eris=True) + clusrpa = ssRPA(clusmf) + M, AmB, ApB, eps, v = clusrpa._gen_arrays() + erpa = clusrpa.kernel() + m0 = clusrpa.gen_moms(0) + + def get_product_projector(): + nocc = self.nelec + nvir = tuple([x - y for x, y in zip(self.ncas, self.nelec)]) + p_occ_frag = self.target_space_projector(self.cluster.c_active_occ) + + if (not isinstance(p_occ_frag, tuple)) and np.ndim(p_occ_frag) == 2: + p_occ_frag = (p_occ_frag, p_occ_frag) + + def get_product_projector(p_o, p_v, no, nv): + return einsum("ij,ab->iajb", p_o, p_v).reshape((no * nv, no * nv)) + + pa = get_product_projector(p_occ_frag[0], np.eye(nvir[0]), nocc[0], nvir[0]) + pb = get_product_projector(p_occ_frag[1], np.eye(nvir[1]), nocc[1], nvir[1]) + return scipy.linalg.block_diag(pa, pb) + + proj = get_product_projector() + eloc = 0.5 * einsum("pq,qr,rp->", proj, m0, ApB) - einsum("pq,qp->", proj, ApB + AmB) + return eloc
+ +
[docs] def assert_equal_spin_channels(self, message=""): + na, nb = self.ncas + if na != nb: + raise NotImplementedError("Active spaces with different number of alpha and beta orbitals are not yet " + "supported with this configuration. %s" % message)
+ +
[docs] def with_new_cluster(self, cluster): + return self.__class__(self._fragment, self.orig_mf, self.log, cluster, **self.opts.asdict())
+ +
[docs] def get_dummy_eri_object(self, force_bare=False, with_vext=True, with_exxdiv=False): + # Avoid enumerating all possible keys. + class ValidRHFKeys: + def __contains__(self, item): + return type(item) == str and len(item) == 4 and set(item).issubset(set("ov")) + + getter = self.get_eris_bare if force_bare else self.get_eris_screened + fock = self.get_fock(with_vext=with_vext, use_seris=not force_bare, with_exxdiv=with_exxdiv) + return DummyERIs(getter, valid_blocks=ValidRHFKeys(), fock=fock, nocc=self.cluster.nocc_active)
+ + +
[docs]class UClusterHamiltonian(RClusterHamiltonian): + @property + def _scf_class(self): + class UHF_spindep(pyscf.scf.uhf.UHF): + def energy_elec(mf, dm=None, h1e=None, vhf=None): + '''Electronic energy of Unrestricted Hartree-Fock + + Note this function has side effects which cause mf.scf_summary updated. + + Returns: + Hartree-Fock electronic energy and the 2-electron part contribution + ''' + if dm is None: dm = mf.make_rdm1() + if h1e is None: + h1e = mf.get_hcore() + if isinstance(dm, np.ndarray) and dm.ndim == 2: + dm = np.array((dm * .5, dm * .5)) + if vhf is None: + vhf = mf.get_veff(mf.mol, dm) + e1 = np.einsum('ij,ji->', h1e[0], dm[0]) + e1 += np.einsum('ij,ji->', h1e[1], dm[1]) + e_coul = (np.einsum('ij,ji->', vhf[0], dm[0]) + + np.einsum('ij,ji->', vhf[1], dm[1])) * .5 + e_elec = (e1 + e_coul).real + mf.scf_summary['e1'] = e1.real + mf.scf_summary['e2'] = e_coul.real + # logger.debug(mf, 'E1 = %s Ecoul = %s', e1, e_coul.real) + return e_elec, e_coul + + return UHF_spindep + + @property + def ncas(self): + return self.cluster.norb_active + + @property + def nelec(self): + return self.cluster.nocc_active + + # Integrals for the cluster calculations. + +
[docs] def get_fock(self, with_vext=True, use_seris=True, with_exxdiv=False): + ca, cb = self.cluster.c_active + fa, fb = self._fragment.base.get_fock(with_exxdiv=with_exxdiv) + fock = (dot(ca.T, fa, ca), dot(cb.T, fb, cb)) + if with_vext and self.v_ext is not None: + fock = ((fock[0] + self.v_ext[0]), + (fock[1] + self.v_ext[1])) + if self._seris is not None and use_seris: + # Generates the fock matrix if screened ERIs are used in place of bare eris. + noa, nob = self.cluster.nocc_active + oa = np.s_[:noa] + ob = np.s_[:nob] + saa, sab, sbb = self._seris + dfa = (einsum('iipq->pq', saa[oa, oa]) + einsum('pqii->pq', sab[:, :, ob, ob]) # Coulomb + - einsum('ipqi->pq', saa[oa, :, :, oa])) # Exchange + dfb = (einsum('iipq->pq', sbb[ob, ob]) + einsum('iipq->pq', sab[oa, oa]) # Coulomb + - einsum('ipqi->pq', sbb[ob, :, :, ob])) # Exchange + gaa, gab, gbb = self.get_eris_bare() + dfa -= (einsum('iipq->pq', gaa[oa, oa]) + einsum('pqii->pq', gab[:, :, ob, ob]) # Coulomb + - einsum('ipqi->pq', gaa[oa, :, :, oa])) # Exchange + dfb -= (einsum('iipq->pq', gbb[ob, ob]) + einsum('iipq->pq', gab[oa, oa]) # Coulomb + - einsum('ipqi->pq', gbb[ob, :, :, ob])) # Exchange + fock = ((fock[0] + dfa), + (fock[1] + dfb)) + + return fock
+ +
[docs] def get_heff(self, eris=None, fock=None, with_vext=True, with_exxdiv=False): + if eris is None: + eris = self.get_eris_bare() + if fock is None: + fock = self.get_fock(with_vext=False, use_seris=False, with_exxdiv=with_exxdiv) + + oa = np.s_[:self.cluster.nocc_active[0]] + ob = np.s_[:self.cluster.nocc_active[1]] + gaa, gab, gbb = eris + va = (einsum('iipq->pq', gaa[oa, oa]) + einsum('pqii->pq', gab[:, :, ob, ob]) # Coulomb + - einsum('ipqi->pq', gaa[oa, :, :, oa])) # Exchange + vb = (einsum('iipq->pq', gbb[ob, ob]) + einsum('iipq->pq', gab[oa, oa]) # Coulomb + - einsum('ipqi->pq', gbb[ob, :, :, ob])) # Exchange + h_eff = (fock[0] - va, fock[1] - vb) + if with_vext and self.v_ext is not None: + h_eff = ((h_eff[0] + self.v_ext[0]), + (h_eff[1] + self.v_ext[1])) + return h_eff
+ +
[docs] def get_eris_bare(self, block=None): + if block is None: + if self._eris is None: + with log_time(self.log.timing, "Time for AO->MO of ERIs: %s"): + eris = self._fragment.base.get_eris_array_uhf(self.cluster.c_active) + if self.opts.cache_eris: + self._eris = eris + return eris + else: + return self._eris + else: + if self._eris is None: + coeffs = [self.cluster.c_active_occ[int(i.upper() == i)] if i.lower() == "o" else + self.cluster.c_active_vir[int(i.upper() == i)] for i in block] + return self._fragment.base.get_eris_array(coeffs) + else: + return self._get_eris_block(self._eris, block)
+ + def _get_eris_block(self, eris, block): + assert len(block) == 4 and set(block.lower()).issubset({"o", "v"}) + sp = [int(i.upper() == i) for i in block] + flip = sum(sp) == 2 and sp[0] == 1 + if flip: # Store ab not ba contribution. + block = block[::-1] + d = {"o": slice(self.cluster.nocc_active[0]), "O": slice(self.cluster.nocc_active[1]), + "v": slice(self.cluster.nocc_active[0], self.cluster.norb_active[0]), + "V": slice(self.cluster.nocc_active[1], self.cluster.norb_active[1]) + } + sl = tuple([d[i] for i in block]) + res = eris[sum(sp) // 2][sl] + if flip: + res = res.transpose(3, 2, 1, 0).conjugate() + return res + +
[docs] def get_cderi_bare(self, only_ov=False, compress=False, svd_threshold=1e-12): + + if only_ov: + # We only need the (L|ov) and (L|OV) blocks: + c_aa = [self.cluster.c_active_occ[0], self.cluster.c_active_vir[0]] + c_bb = [self.cluster.c_active_occ[1], self.cluster.c_active_vir[1]] + else: + c_aa, c_bb = self.cluster.c_active + + with log_time(self.log.timing, "Time for 2e-integral transformation: %s"): + cderi_a, cderi_neg_a = self._fragment.base.get_cderi(c_aa) + cderi_b, cderi_neg_b = self._fragment.base.get_cderi(c_bb) + cderi = (cderi_a, cderi_b) + cderi_neg = (cderi_neg_a, cderi_neg_b) + + if compress: + # SVD and compress the cderi tensor. This scales as O(N_{aux} N_{clus}^4), so this will be worthwhile + # provided the following approach has a lower scaling than this. + def compress_cderi(cd): + naux, n1, n2 = cd.shape + u, s, v = np.linalg.svd(cd.reshape(naux, n1 * n2), full_matrices=False) + want = s > svd_threshold + self.log.debugv("CDERIs auxbas compressed from %d to %d in size", naux, sum(want)) + return einsum("n,nq->nq", s[want], v[want]).reshape(-1, n1, n2) + + cderi = (compress_cderi(cderi[0]), compress_cderi(cderi[0])) + if cderi_neg[0] is not None: + cderi_neg = (compress_cderi(cderi_neg[0]), cderi_neg[1]) + if cderi_neg[1] is not None: + cderi_neg = (cderi_neg[0], compress_cderi(cderi_neg[1])) + + return cderi, cderi_neg
+ + # Generate mean-field object representing the cluster. + +
[docs] def to_pyscf_mf(self, allow_dummy_orbs=True, force_bare_eris=False, overwrite_fock=True, allow_df=False): + # Need to overwrite fock integrals to avoid errors. + return super().to_pyscf_mf(allow_dummy_orbs=allow_dummy_orbs, force_bare_eris=force_bare_eris, + overwrite_fock=True, allow_df=allow_df)
+ +
[docs] def get_clus_mf_info(self, ao_basis=False, with_vext=True, with_exxdiv=False): + if ao_basis: + nao = self.cluster.c_active.shape[1] + else: + nao = self.ncas + fock = self.get_fock(with_vext=with_vext, with_exxdiv=with_exxdiv) + mo_energy = (np.diag(fock[0]), np.diag(fock[1])) + mo_occ = [np.zeros_like(x) for x in mo_energy] + mo_occ[0][:self.nelec[0]] = 1.0 + mo_occ[1][:self.nelec[1]] = 1.0 + if mo_occ[0].shape == mo_occ[1].shape: + mo_occ = np.array(mo_occ) + # Determine whether we want our cluster orbitals expressed in the basis of active orbitals, or in the AO basis. + if ao_basis: + mo_coeff = self.cluster.c_active + ovlp = self.orig_mf.get_ovlp() + else: + mo_coeff = (np.eye(self.ncas[0]), np.eye(self.ncas[1])) + ovlp = (np.eye(self.ncas[0]), np.eye(self.ncas[1])) + return nao, mo_coeff, mo_energy, mo_occ, ovlp
+ +
[docs] def get_dummy_eri_object(self, force_bare=False, with_vext=True, with_exxdiv=False): + # Avoid enumerating all possible keys. + class ValidUHFKeys: + def __contains__(self, item): + return type(item) == str and len(item) == 4 and set(item).issubset(set("ovOV")) + + getter = self.get_eris_bare if force_bare else self.get_eris_screened + fock = self.get_fock(with_vext=with_vext, use_seris=not force_bare, with_exxdiv=with_exxdiv) + return DummyERIs(getter, valid_blocks=ValidUHFKeys(), fock=fock, nocc=self.cluster.nocc_active)
+ + +
[docs]class EB_RClusterHamiltonian(RClusterHamiltonian): +
[docs] @dataclasses.dataclass + class Options(RClusterHamiltonian.Options): + polaritonic_shift: bool = True
+ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.unshifted_couplings = self._fragment.couplings + self.bos_freqs = self._fragment.bos_freqs + if self.opts.polaritonic_shift: + self.set_polaritonic_shift(self.bos_freqs, self.unshifted_couplings) + + @property + def polaritonic_shift(self): + try: + return self._polaritonic_shift + except AttributeError as e: + self.log.critical("Polaritonic shift not yet set.") + raise e + + @property + def couplings(self): + if self.opts.polaritonic_shift: + return self.get_polaritonic_shifted_couplings() + return self.unshifted_couplings[0] + +
[docs] def set_polaritonic_shift(self, freqs, couplings): + no = self.cluster.nocc_active + if isinstance(no, int): + noa = nob = no + else: + noa, nob = no + self._polaritonic_shift = np.multiply(freqs ** (-1), einsum("npp->n", couplings[0][:, :noa, :noa]) + + einsum("npp->n", couplings[1][:, :nob, :nob])) + self.log.info("Applying Polaritonic shift gives energy change of %e", + -sum(np.multiply(self._polaritonic_shift ** 2, freqs)))
+ +
[docs] def get_heff(self, eris=None, fock=None, with_vext=True): + heff = super().get_heff(eris, fock, with_vext) + if self.opts.polaritonic_shift: + fock_shift = self.get_polaritonic_fock_shift(self.unshifted_couplings) + if not np.allclose(fock_shift[0], fock_shift[1]): + self.log.critical("Polaritonic shift breaks cluster spin symmetry; please either use an unrestricted" + "formalism or bosons without polaritonic shift.") + heff = heff + fock_shift[0] + return heff
+ +
[docs] def get_polaritonic_fock_shift(self, couplings): + return tuple([- einsum("npq,n->pq", x + x.transpose(0, 2, 1), self.polaritonic_shift) for x in couplings])
+ +
[docs] def get_polaritonic_shifted_couplings(self): + temp = np.multiply(self.polaritonic_shift, self.bos_freqs) / (2 * self.cluster.nocc_active) + couplings = tuple([x - einsum("pq,n->npq", np.eye(x.shape[1]), temp) for x in self.unshifted_couplings]) + if not np.allclose(couplings[0], couplings[1]): + self.log.critical("Polaritonic shifted bosonic fermion-boson couplings break cluster spin symmetry; please" + "use an unrestricted formalism.") + raise RuntimeError() + return couplings[0]
+ +
[docs] def get_eb_dm_polaritonic_shift(self, dm1): + return (-einsum("n,pq->pqn", self.polaritonic_shift, dm1 / 2),) * 2
+ + +
[docs]class EB_UClusterHamiltonian(UClusterHamiltonian, EB_RClusterHamiltonian): +
[docs] @dataclasses.dataclass + class Options(EB_RClusterHamiltonian.Options): + polaritonic_shift: bool = True
+ + @property + def couplings(self): + if self.opts.polaritonic_shift: + return self.get_polaritonic_shifted_couplings() + return self.unshifted_couplings + +
[docs] def get_heff(self, eris=None, fock=None, with_vext=True): + heff = super().get_heff(eris, fock, with_vext) + + if self.opts.polaritonic_shift: + fock_shift = self.get_polaritonic_fock_shift(self.unshifted_couplings) + heff = tuple([x + y for x, y in zip(heff, fock_shift)]) + return heff
+ +
[docs] def get_polaritonic_shifted_couplings(self): + temp = np.multiply(self.polaritonic_shift, self.bos_freqs) / sum(self.cluster.nocc_active) + return tuple([x - einsum("pq,n->npq", np.eye(x.shape[1]), temp) for x in self.unshifted_couplings])
+ +
[docs] def get_eb_dm_polaritonic_shift(self, dm1): + return tuple([-einsum("n,pq->pqn", self.polaritonic_shift, x) for x in dm1])
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/mp2.html b/_modules/vayesta/solver/mp2.html new file mode 100644 index 000000000..de25323f9 --- /dev/null +++ b/_modules/vayesta/solver/mp2.html @@ -0,0 +1,266 @@ + + + + + + vayesta.solver.mp2 — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.mp2

+import dataclasses
+
+import numpy as np
+
+from vayesta.core.types import MP2_WaveFunction
+from vayesta.core.util import log_time, brange, einsum
+from vayesta.solver.solver import ClusterSolver, UClusterSolver
+
+
+
[docs]class RMP2_Solver(ClusterSolver): +
[docs] @dataclasses.dataclass + class Options(ClusterSolver.Options): + compress_cderi: bool = False
+ +
[docs] def kernel(self, *args, **kwargs): + + nao, mo_coeff, mo_energy, mo_occ, ovlp = self.hamil.get_clus_mf_info(ao_basis=False, with_exxdiv=True) + + eris = cderi = cderi_neg = None + if not self.hamil.has_screening: + try: + cderi, cderi_neg = self.hamil.get_cderi_bare(only_ov=True, compress=self.opts.compress_cderi) + except AttributeError: + cderi = cderi_neg = None + + if cderi is None: + cderi = cderi_neg = None + try: + nocc = sum(mo_occ.T > 0) + except AttributeError: + nocc = np.array((sum(mo_occ[0] > 0), sum(mo_occ[1] > 0))) + eris = self.hamil.get_eris_screened() + eris = self.get_ov_eris(eris, nocc) + with log_time(self.log.timing, "Time for MP2 T-amplitudes: %s"): + t2 = self.make_t2(mo_energy, eris=eris, cderi=cderi, cderi_neg=cderi_neg) + self.wf = MP2_WaveFunction(self.hamil.mo, t2) + self.converged = True
+ +
[docs] def get_ov_eris(self, eris, nocc): + return eris[:nocc, nocc:, :nocc, nocc:]
+ +
[docs] def make_t2(self, mo_energy, eris=None, cderi=None, cderi_neg=None, blksize=None): + """Make T2 amplitudes""" + # (ov|ov) + if eris is not None: + self.log.debugv("Making T2 amplitudes from ERIs") + assert (eris.ndim == 4) + nocc, nvir = eris.shape[:2] + # (L|ov) + elif cderi is not None: + self.log.debugv("Making T2 amplitudes from CD-ERIs") + assert (cderi.ndim == 3) + assert (cderi_neg is None or cderi_neg.ndim == 3) + nocc, nvir = cderi.shape[1:] + else: + raise ValueError() + + t2 = np.empty((nocc, nocc, nvir, nvir)) + eia = (mo_energy[:nocc, None] - mo_energy[None, nocc:]) + if blksize is None: + blksize = int(1e9 / max(nocc * nvir * nvir * 8, 1)) + for blk in brange(0, nocc, blksize): + if eris is not None: + gijab = eris[blk].transpose(0, 2, 1, 3) + else: + gijab = einsum('Lia,Ljb->ijab', cderi[:, blk], cderi) + if cderi_neg is not None: + gijab -= einsum('Lia,Ljb->ijab', cderi_neg[:, blk], cderi_neg) + eijab = (eia[blk][:, None, :, None] + eia[None, :, None, :]) + t2[blk] = (gijab / eijab) + return t2
+ + def _debug_exact_wf(self, wf): + raise NotImplementedError + + def _debug_random_wf(self): + mo = self.hamil.mo + t2 = np.random.rand(mo.nocc, mo.nocc, mo.nvir, mo.nvir) + self.wf = MP2_WaveFunction(mo, t2) + self.converged = True
+ + +
[docs]class UMP2_Solver(UClusterSolver, RMP2_Solver): + +
[docs] def get_ov_eris(self, eris, nocc): + na, nb = nocc + gaa, gab, gbb = eris + return gaa[:na, na:, :na, na:], gab[:na, na:, :nb, nb:], gbb[:nb, nb:, :nb, nb:]
+ +
[docs] def make_t2(self, mo_energy, eris=None, cderi=None, cderi_neg=None, blksize=None, workmem=int(1e9)): + """Make T2 amplitudes""" + # (ov|ov) + if eris is not None: + self.log.debugv("Making T2 amplitudes from ERIs") + assert len(eris) == 3 + assert (eris[0].ndim == 4) + assert (eris[1].ndim == 4) + assert (eris[2].ndim == 4) + nocca, nvira = eris[0].shape[:2] + noccb, nvirb = eris[2].shape[:2] + # (L|ov) + elif cderi is not None: + self.log.debugv("Making T2 amplitudes from CD-ERIs") + assert len(cderi) == 2 + assert (cderi[0].ndim == 3) + assert (cderi[1].ndim == 3) + nocca, nvira = cderi[0].shape[1:] + noccb, nvirb = cderi[1].shape[1:] + else: + raise ValueError() + + t2aa = np.empty((nocca, nocca, nvira, nvira)) + t2ab = np.empty((nocca, noccb, nvira, nvirb)) + t2bb = np.empty((noccb, noccb, nvirb, nvirb)) + eia_a = (mo_energy[0][:nocca, None] - mo_energy[0][None, nocca:]) + eia_b = (mo_energy[1][:noccb, None] - mo_energy[1][None, noccb:]) + + # Alpha-alpha and Alpha-beta: + if blksize is None: + blksize_a = int(workmem / max(nocca * nvira * nvira * 8, 1)) + else: + blksize_a = blksize + for blk in brange(0, nocca, blksize_a): + # Alpha-alpha + if eris is not None: + gijab = eris[0][blk].transpose(0, 2, 1, 3) + else: + gijab = einsum('Lia,Ljb->ijab', cderi[0][:, blk], cderi[0]) + if cderi_neg[0] is not None: + gijab -= einsum('Lia,Ljb->ijab', cderi_neg[0][:, blk], cderi_neg[0]) + eijab = (eia_a[blk][:, None, :, None] + eia_a[None, :, None, :]) + t2aa[blk] = (gijab / eijab) + t2aa[blk] -= t2aa[blk].transpose(0, 1, 3, 2) + # Alpha-beta + if eris is not None: + gijab = eris[1][blk].transpose(0, 2, 1, 3) + else: + gijab = einsum('Lia,Ljb->ijab', cderi[0][:, blk], cderi[1]) + if cderi_neg[0] is not None: + gijab -= einsum('Lia,Ljb->ijab', cderi_neg[0][:, blk], cderi_neg[1]) + eijab = (eia_a[blk][:, None, :, None] + eia_b[None, :, None, :]) + t2ab[blk] = (gijab / eijab) + # Beta-beta: + if blksize is None: + blksize_b = int(workmem / max(noccb * nvirb * nvirb * 8, 1)) + else: + blksize_b = blksize + for blk in brange(0, noccb, blksize_b): + if eris is not None: + gijab = eris[2][blk].transpose(0, 2, 1, 3) + else: + gijab = einsum('Lia,Ljb->ijab', cderi[1][:, blk], cderi[1]) + if cderi_neg[0] is not None: + gijab -= einsum('Lia,Ljb->ijab', cderi_neg[1][:, blk], cderi_neg[1]) + eijab = (eia_b[blk][:, None, :, None] + eia_b[None, :, None, :]) + t2bb[blk] = (gijab / eijab) + t2bb[blk] -= t2bb[blk].transpose(0, 1, 3, 2) + + return (t2aa, t2ab, t2bb)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/solver.html b/_modules/vayesta/solver/solver.html new file mode 100644 index 000000000..af8eb6ecc --- /dev/null +++ b/_modules/vayesta/solver/solver.html @@ -0,0 +1,304 @@ + + + + + + vayesta.solver.solver — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.solver

+import dataclasses
+
+import numpy as np
+import scipy
+import scipy.optimize
+
+from vayesta.core.util import einsum, OptionsBase, break_into_lines, AbstractMethodError, replace_attr, ConvergenceError
+
+
+
[docs]class ClusterSolver: + """Base class for cluster solver""" + +
[docs] @dataclasses.dataclass + class Options(OptionsBase): + pass
+ + def __init__(self, hamil, log=None, **kwargs): + """ + Arguments + --------- + """ + self.hamil = hamil + self.log = (log or hamil.log) + # --- Options: + self.opts = self.Options() + self.opts.update(**kwargs) + self.log.info("Parameters of %s:" % self.__class__.__name__) + self.log.info(break_into_lines(str(self.opts), newline='\n ')) + + # --- Results + self.converged = False + self.e_corr = 0 + self.wf = None + self.dm1 = None + self.dm2 = None + + @property + def v_ext(self): + return self.hamil.v_ext + + @v_ext.setter + def v_ext(self, val): + self.hamil.v_ext = val + +
[docs] def kernel(self, *args, **kwargs): + """Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this + information.""" + raise AbstractMethodError
+ +
[docs] def optimize_cpt(self, nelectron, c_frag, cpt_guess=0, atol=1e-6, rtol=1e-6, cpt_radius=0.5): + """Enables chemical potential optimization to match a number of electrons in the fragment space. + + Parameters + ---------- + nelectron: float + Target number of electrons. + c_frag: array + Fragment orbitals. + cpt_guess: float, optional + Initial guess for fragment chemical potential. Default: 0. + atol: float, optional + Absolute electron number tolerance. Default: 1e-6. + rtol: float, optional + Relative electron number tolerance. Default: 1e-6 + cpt_radius: float, optional + Search radius for chemical potential. Default: 0.5. + + Returns + ------- + results: + Solver results. + """ + + kernel_orig = self.kernel + # Make projector into fragment space + + p_frag = self.hamil.target_space_projector(c=c_frag) + + class CptFound(RuntimeError): + """Raise when electron error is below tolerance.""" + pass + + def kernel(self, *args, **kwargs): + result = None + err = None + cpt_opt = None + iterations = 0 + init_guess = {} + err0 = None + + def electron_err(cpt): + nonlocal result, err, err0, cpt_opt, iterations, init_guess + # Avoid recalculation of cpt=0.0 in SciPy: + if (cpt == 0) and (err0 is not None): + self.log.debugv("Chemical potential %f already calculated - returning error= %.8f", cpt, err0) + return err0 + + kwargs.update(**init_guess) + self.log.debugv("kwargs keys for solver: %r", kwargs.keys()) + + replace = {} + if cpt: + v_ext_0 = (self.v_ext if self.v_ext is not None else 0) + replace['v_ext'] = self.calc_v_ext(v_ext_0, cpt) + # self.reset() + self.converged = False + with replace_attr(self.hamil, **replace): + results = kernel_orig(**kwargs) + if not self.converged: + raise ConvergenceError() + dm1 = self.wf.make_rdm1() + if np.ndim(p_frag[0]) == 1: + ne_frag = einsum('xi,ij,xj->', p_frag, dm1, p_frag) + else: + ne_frag = (einsum('xi,ij,xj->', p_frag[0], dm1[0], p_frag[0]) + + einsum('xi,ij,xj->', p_frag[1], dm1[1], p_frag[1])) + + err = (ne_frag - nelectron) + self.log.debug("Fragment chemical potential= %+12.8f Ha: electrons= %.8f error= %+.3e", cpt, ne_frag, + err) + iterations += 1 + if abs(err) < (atol + rtol * nelectron): + cpt_opt = cpt + raise CptFound() + # Initial guess for next chemical potential + # init_guess = results.get_init_guess() + init_guess = self.get_init_guess() + return err + + # First run with cpt_guess: + try: + err0 = electron_err(cpt_guess) + except CptFound: + self.log.debug( + "Chemical potential= %.6f leads to electron error= %.3e within tolerance (atol= %.1e, rtol= %.1e)", + cpt_guess, err, atol, rtol) + return result + + # Not enough electrons in fragment space -> raise fragment chemical potential: + if err0 < 0: + lower = cpt_guess + upper = cpt_guess + cpt_radius + # Too many electrons in fragment space -> lower fragment chemical potential: + else: + lower = cpt_guess - cpt_radius + upper = cpt_guess + + self.log.debugv("Estimated bounds: %.3e %.3e", lower, upper) + bounds = np.asarray([lower, upper], dtype=float) + + for ntry in range(5): + try: + cpt, res = scipy.optimize.brentq(electron_err, a=bounds[0], b=bounds[1], xtol=1e-12, + full_output=True) + if res.converged: + raise RuntimeError( + "Chemical potential converged to %+16.8f, but electron error is still %.3e" % (cpt, err)) + except CptFound: + break + # Could not find chemical potential in bracket: + except ValueError: + bounds *= 2 + self.log.warning("Interval for chemical potential search too small. New search interval: [%f %f]", + *bounds) + continue + # Could not convergence in bracket: + except ConvergenceError: + bounds /= 2 + self.log.warning("Solver did not converge. New search interval: [%f %f]", *bounds) + continue + raise RuntimeError("Invalid state: electron error= %.3e" % err) + else: + errmsg = ("Could not find chemical potential within interval [%f %f]!" % (bounds[0], bounds[1])) + self.log.critical(errmsg) + raise RuntimeError(errmsg) + + self.log.info("Chemical potential optimized in %d iterations= %+16.8f Ha", iterations, cpt_opt) + return result + + # Replace kernel: + self.kernel = kernel.__get__(self)
+ +
[docs] def calc_v_ext(self, v_ext_0, cpt): + return v_ext_0 - cpt * self.hamil.target_space_projector()
+ +
[docs] def get_init_guess(self): + return {}
+ + +
[docs]class UClusterSolver(ClusterSolver): + +
[docs] def calc_v_ext(self, v_ext_0, cpt): + pfrag = self.hamil.target_space_projector() + # Surely None would be a better default? + if v_ext_0 == 0: + v_ext_0 = (v_ext_0, v_ext_0) + return (v_ext_0[0] - cpt * pfrag[0], v_ext_0[1] - cpt * pfrag[1])
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/solver/tccsd.html b/_modules/vayesta/solver/tccsd.html new file mode 100644 index 000000000..0c73843cb --- /dev/null +++ b/_modules/vayesta/solver/tccsd.html @@ -0,0 +1,172 @@ + + + + + + vayesta.solver.tccsd — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.solver.tccsd

+import dataclasses
+
+import numpy as np
+import scipy.linalg
+
+from vayesta.core.spinalg import hstack_matrices
+from vayesta.core.types import Orbitals, Cluster
+from vayesta.core.util import dot, einsum
+from vayesta.solver.ccsd import RCCSD_Solver
+from vayesta.solver.fci import FCI_Solver
+
+
+
[docs]class TRCCSD_Solver(RCCSD_Solver): +
[docs] @dataclasses.dataclass + class Options(RCCSD_Solver.Options): + fci_opts: dict = dataclasses.field(default_factory=dict) + c_cas_occ: np.array = None + c_cas_vir: np.array = None
+ +
[docs] def get_callback(self): + # Just need to generate FCI soln to reduced cluster, then make callback function. + orbs = Orbitals(hstack_matrices(self.opts.c_cas_occ, self.opts.c_cas_vir), occ=self.opts.c_cas_occ.shape[-1]) + # Dummy cluster without any environmental orbitals. + tclus = Cluster(orbs, None) + tham = self.hamil.with_new_cluster(tclus) + fci = FCI_Solver(tham) + # Need to set v_ext for the FCI calculation. Just want rotation into our current basis. + ro = dot(self.hamil.cluster.c_active_occ.T, self.hamil.orig_mf.get_ovlp(), tclus.c_active_occ) + rv = dot(self.hamil.cluster.c_active_vir.T, self.hamil.orig_mf.get_ovlp(), tclus.c_active_vir) + r = scipy.linalg.block_diag(ro, rv) + + if self.v_ext is not None: + fci.v_ext = dot(r.T, self.v_ext, r) + + fci.kernel() + if not fci.converged: + self.log.error("FCI not converged!") + wf = fci.wf.as_ccsd() + # Now have FCI solution in the fragment, just need to write tailor function. + # Delete everything for the FCI. + del fci, tham + + def tailor_func(kwargs): + cc = kwargs['mycc'] + t1, t2 = kwargs['t1new'], kwargs['t2new'] + # Rotate & project CC amplitudes to CAS + t1_cc = einsum('IA,Ii,Aa->ia', t1, ro, rv) + t2_cc = einsum('IJAB,Ii,Jj,Aa,Bb->ijab', t2, ro, ro, rv, rv) + # Take difference wrt to FCI + dt1 = (wf.t1 - t1_cc) + dt2 = (wf.t2 - t2_cc) + # Rotate back to CC space + dt1 = einsum('ia,Ii,Aa->IA', dt1, ro, rv) + dt2 = einsum('ijab,Ii,Jj,Aa,Bb->IJAB', dt2, ro, ro, rv, rv) + # Add correction + t1 += dt1 + t2 += dt2 + cc._norm_dt1 = np.linalg.norm(dt1) + cc._norm_dt2 = np.linalg.norm(dt2) + + return tailor_func
+ +
[docs] def print_extra_info(self, mycc): + self.log.debug("Tailored CC: |dT1|= %.2e |dT2|= %.2e", mycc._norm_dt1, mycc._norm_dt2) + del mycc._norm_dt1, mycc._norm_dt2
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/tools/eos.html b/_modules/vayesta/tools/eos.html new file mode 100644 index 000000000..55132c96e --- /dev/null +++ b/_modules/vayesta/tools/eos.html @@ -0,0 +1,266 @@ + + + + + + vayesta.tools.eos — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.tools.eos

+#!/usr/bin/env python3
+"""Fitting of equations of states."""
+
+import dataclasses
+import numpy as np
+import scipy
+import scipy.optimize
+
+HARTREE2JOULE = 4.359744e-18
+ANGSTROM2METER = 1e-10
+# Hartree per cubic Angstrom to Giga-Pascal
+HPCA2GPA = (HARTREE2JOULE/ANGSTROM2METER**3) / 1e9
+
+
+
[docs]def parabola(v, e0, v0, b0): + """Quadratic equation of state.""" + ev = 0.5*b0/v0*(v-v0)**2 + e0 + return ev
+ + +
[docs]def birch_murnaghan(v, e0, v0, b0, bp): + """Third-order Birch-Murnaghan equation of states.""" + vr = (v0/v)**(2.0/3) + t1 = (vr-1)**3 + t2 = (vr-1)**2 * (6-4*vr) + ev = e0 + 9/16*v0*b0 * (t1*bp + t2) + return ev
+ + +
[docs]@dataclasses.dataclass +class FitResult: + """DOC""" + e0: float = None + b0: float = None + x0: float = None + v0: float = None + bp: float = None + + def __repr__(self): + txt = "Fit results: E0= %.4f Ha" % self.e0 + if self.x0 is not None: + txt += (" x0= %.4f A" % self.x0) + if self.v0 is not None: + txt += (" V0= %.4f A^3" % self.v0) + if self.b0 is not None: + txt += (" B0= %.4f GPa" % self.b0) + if self.bp is not None: + txt += (" B'= %.4f" % self.bp) + return txt
+ + +
[docs]def fit_eos(volumes, energies, fitfunc=birch_murnaghan, plot=True, value_at=None): + """Fit EOS to volumes, energies data points.""" + # Estimate starting parameters + minidx = np.argmin(energies) + e0 = energies[minidx] + v0 = volumes[minidx] + b0 = bp = 0.0 + if fitfunc == parabola: + p0 = (e0, v0, b0) + else: + p0 = (e0, v0, b0, bp) + + popt, pcov = scipy.optimize.curve_fit(fitfunc, volumes, energies, p0=p0) + e0, v0, b0 = popt[:3] + other = popt[3:] + + # Convert to GPa + b0 = b0 * HPCA2GPA + + if plot: + try: + from matplotlib import pyplot as plt + grid = np.linspace(volumes[0], volumes[-1], 100) + y = fitfunc(grid, *popt) + ax = plt.subplot(111) + plt.subplots_adjust(left=0.16, bottom=0.12, right=0.98, top=0.98) + ax.plot(grid, y, label="Fit") + ax.plot(volumes, energies, label="Data points", marker=".", ls="", markersize=10, markeredgecolor='black') + ax.plot([v0], [e0], label="Minimum", marker='p', color='C1', markersize=12, markeredgecolor='black', ls='') + ax.set_xlabel('Unit cell volume ($\mathrm{\AA}^3$)') + ax.set_ylabel('Unit cell energy ($E_\mathrm{H}$)') + text = """ + $E_0 = % .6f\,\mathrm{Ha}$ + $V_0 = % .6f\,\mathrm{\AA}^3$ + $B_0 = % .6f\,\mathrm{GPa}$ + """ % (e0, v0, b0) + if other: + bp = other[0] + text += "$B'= % .6f$\n" % bp + if value_at is not None: + xv = value_at + yv = fitfunc(xv, *popt) + text += "$E(%g\,\mathrm{\AA}^3)= %.6f\,\mathrm{Ha}$" % (xv, yv) + ax.plot([xv], [yv], label="Value at $V= %g\,\mathrm{\AA}^3$" % xv, marker='d', color='C3', markersize=12, markeredgecolor='black', ls='') + + ax.text(0.3, 0.7, text, transform=ax.transAxes, ha='left', va='top') + ax.legend() + if plot is True: + plt.show() + else: + plt.savefig(plot) + except Exception as e: + print("Error while creating plot: %s" % e) + + result = FitResult(e0, b0, v0=v0) + if other: + result.bp = other[0] + + return result
+ + +
[docs]def fit_from_file(filename, xcol=0, ycol=1, volume_func=None): + """Load and fit EOS to textfile.""" + data = np.loadtxt(filename) + x = data[:,xcol] + y = data[:,ycol] + if volume_func is not None: + x = volume_func(x) + result = fit_eos(x, y) + return result
+ + +
[docs]def cmdline_tool(): + import argparse + parser = argparse.ArgumentParser(allow_abbrev=False) + parser.add_argument('file') + parser.add_argument('--lattice') + parser.add_argument('--bsse') + parser.add_argument('--xcol', type=int, default=0) + parser.add_argument('--ycol', type=int, default=1) + parser.add_argument('--no-plot', dest='plot', action='store_false', default=True) + parser.add_argument('--value-at', type=float) + args = parser.parse_args() + + volume_func = lambda x : x + if args.lattice == 'diamond': + volume_func = lambda x : (x**3) / 4 + inv_volume_func = lambda v : np.power(4*v, 1.0/3) + elif args.lattice is not None: + raise ValueError() + + data = np.loadtxt(args.file) + print("Loading file %s using columns x= %d y= %d" % (args.file, args.xcol, args.ycol)) + x = data[:,args.xcol] + y = data[:,args.ycol] + if args.bsse: + print("Loading BSSE from file %s" % args.bsse) + bsse_data = np.loadtxt(args.bsse) + assert np.allclose(bsse_data[:,args.xcol], x) + y = y - bsse_data[:,args.ycol] + + x = volume_func(x) + result = fit_eos(x, y, plot=args.plot, value_at=args.value_at) + result.x0 = inv_volume_func(result.v0) + print(result)
+ + +if __name__ == '__main__': + cmdline_tool() +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_modules/vayesta/tools/plotting/colors.html b/_modules/vayesta/tools/plotting/colors.html new file mode 100644 index 000000000..1f2475587 --- /dev/null +++ b/_modules/vayesta/tools/plotting/colors.html @@ -0,0 +1,225 @@ + + + + + + vayesta.tools.plotting.colors — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for vayesta.tools.plotting.colors

+colors_jmol = [
+    (1  , 'H',   [255,255,255]),
+    (2  , 'He',  [217,255,255]),
+    (3  , 'Li',  [204,128,255]),
+    (4  , 'Be',  [194,255,0]  ),
+    (5  , 'B',   [255,181,181]),
+    (6  , 'C',   [144,144,144]),
+    (7  , 'N',   [48,80,248]  ),
+    (8  , 'O',   [255,13,13]  ),
+    (9  , 'F',   [144,224,80] ),
+    (10 , 'Ne',  [179,227,245]),
+    (11 , 'Na',  [171,92,242] ),
+    (12 , 'Mg',  [138,255,0]  ),
+    (13 , 'Al',  [191,166,166]),
+    (14 , 'Si',  [240,200,160]),
+    (15 , 'P',   [255,128,0]  ),
+    (16 , 'S',   [255,255,48] ),
+    (17 , 'Cl',  [31,240,31]  ),
+    (18 , 'Ar',  [128,209,227]),
+    (19 , 'K',   [143,64,212] ),
+    (20 , 'Ca',  [61,255,0]   ),
+    (21 , 'Sc',  [230,230,230]),
+    (22 , 'Ti',  [191,194,199]),
+    (23 , 'V',   [166,166,171]),
+    (24 , 'Cr',  [138,153,199]),
+    (25 , 'Mn',  [156,122,199]),
+    (26 , 'Fe',  [224,102,51] ),
+    (27 , 'Co',  [240,144,160]),
+    (28 , 'Ni',  [80,208,80]  ),
+    (29 , 'Cu',  [200,128,51] ),
+    (30 , 'Zn',  [125,128,176]),
+    (31 , 'Ga',  [194,143,143]),
+    (32 , 'Ge',  [102,143,143]),
+    (33 , 'As',  [189,128,227]),
+    (34 , 'Se',  [255,161,0]  ),
+    (35 , 'Br',  [166,41,41]  ),
+    (36 , 'Kr',  [92,184,209] ),
+    (37 , 'Rb',  [112,46,176] ),
+    (38 , 'Sr',  [0,255,0]    ),
+    (39 , 'Y',   [148,255,255]),
+    (40 , 'Zr',  [148,224,224]),
+    (41 , 'Nb',  [115,194,201]),
+    (42 , 'Mo',  [84,181,181] ),
+    (43 , 'Tc',  [59,158,158] ),
+    (44 , 'Ru',  [36,143,143] ),
+    (45 , 'Rh',  [10,125,140] ),
+    (46 , 'Pd',  [0,105,133]  ),
+    (47 , 'Ag',  [192,192,192]),
+    (48 , 'Cd',  [255,217,143]),
+    (49 , 'In',  [166,117,115]),
+    (50 , 'Sn',  [102,128,128]),
+    (51 , 'Sb',  [158,99,181] ),
+    (52 , 'Te',  [212,122,0]  ),
+    (53 , 'I',   [148,0,148]  ),
+    (54 , 'Xe',  [66,158,176] ),
+    (55 , 'Cs',  [87,23,143]  ),
+    (56 , 'Ba',  [0,201,0]    ),
+    (57 , 'La',  [112,212,255]),
+    (58 , 'Ce',  [255,255,199]),
+    (59 , 'Pr',  [217,255,199]),
+    (60 , 'Nd',  [199,255,199]),
+    (61 , 'Pm',  [163,255,199]),
+    (62 , 'Sm',  [143,255,199]),
+    (63 , 'Eu',  [97,255,199] ),
+    (64 , 'Gd',  [69,255,199] ),
+    (65 , 'Tb',  [48,255,199] ),
+    (66 , 'Dy',  [31,255,199] ),
+    (67 , 'Ho',  [0,255,156]  ),
+    (68 , 'Er',  [0,230,117]  ),
+    (69 , 'Tm',  [0,212,82]   ),
+    (70 , 'Yb',  [0,191,56]   ),
+    (71 , 'Lu',  [0,171,36]   ),
+    (72 , 'Hf',  [77,194,255] ),
+    (73 , 'Ta',  [77,166,255] ),
+    (74 , 'W',   [33,148,214] ),
+    (75 , 'Re',  [38,125,171] ),
+    (76 , 'Os',  [38,102,150] ),
+    (77 , 'Ir',  [23,84,135]  ),
+    (78 , 'Pt',  [208,208,224]),
+    (79 , 'Au',  [255,209,35] ),
+    (80 , 'Hg',  [184,184,208]),
+    (81 , 'Tl',  [166,84,77]  ),
+    (82 , 'Pb',  [87,89,97]   ),
+    (83 , 'Bi',  [158,79,181] ),
+    (84 , 'Po',  [171,92,0]   ),
+    (85 , 'At',  [117,79,69]  ),
+    (86 , 'Rn',  [66,130,150] ),
+    (87 , 'Fr',  [66,0,102]   ),
+    (88 , 'Ra',  [0,125,0]    ),
+    (89 , 'Ac',  [112,171,250]),
+    (90 , 'Th',  [0,186,255]  ),
+    (91 , 'Pa',  [0,161,255]  ),
+    (92 , 'U',   [0,143,255]  ),
+    (93 , 'Np',  [0,128,255]  ),
+    (94 , 'Pu',  [0,107,255]  ),
+    (95 , 'Am',  [84,92,242]  ),
+    (96 , 'Cm',  [120,92,227] ),
+    (97 , 'Bk',  [138,79,227] ),
+    (98 , 'Cf',  [161,54,212] ),
+    (99 , 'Es',  [179,31,212] ),
+    (100, 'Fm',  [179,31,186] ),
+    (101, 'Md',  [179,13,166] ),
+    (102, 'No',  [189,13,135] ),
+    (103, 'Lr',  [199,0,102]  ),
+    (104, 'Rf',  [204,0,89]   ),
+    (105, 'Db',  [209,0,79]   ),
+    (106, 'Sg',  [217,0,69]   ),
+    (107, 'Bh',  [224,0,56]   ),
+    (108, 'Hs',  [230,0,46]   ),
+    (109, 'Mt',  [235,0,38]   ),
+]
+
+
+atom_colors = {x[1] : x[2] for x in colors_jmol}
+unknown = '#FF1493'
+
+
[docs]def get_atom_color(symbol, default=unknown): + sym = ''.join([l for l in symbol if l.isalpha()]) + return atom_colors.get(sym, default)
+
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/_sources/apidoc/modules.rst.txt b/_sources/apidoc/modules.rst.txt new file mode 100644 index 000000000..e4283f836 --- /dev/null +++ b/_sources/apidoc/modules.rst.txt @@ -0,0 +1,29 @@ +API +=== + +.. warning:: + The API documentation is work-in-progress! + +Basic +----- + +.. toctree:: + :maxdepth: 1 + + vayesta.dmet + vayesta.edmet + vayesta.ewf + +Advanced +-------- + +.. toctree:: + :maxdepth: 1 + + vayesta.core + vayesta.lattmod + vayesta.libs + vayesta.misc + vayesta.mpi + vayesta.rpa + vayesta.solver diff --git a/_sources/apidoc/vayesta.core.ao2mo.rst.txt b/_sources/apidoc/vayesta.core.ao2mo.rst.txt new file mode 100644 index 000000000..825883d34 --- /dev/null +++ b/_sources/apidoc/vayesta.core.ao2mo.rst.txt @@ -0,0 +1,45 @@ +vayesta.core.ao2mo +================== + +Submodules +---------- + +vayesta.core.ao2mo.helper +------------------------- + +.. automodule:: vayesta.core.ao2mo.helper + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.ao2mo.kao2gmo +-------------------------- + +.. automodule:: vayesta.core.ao2mo.kao2gmo + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.ao2mo.postscf\_ao2mo +--------------------------------- + +.. automodule:: vayesta.core.ao2mo.postscf_ao2mo + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.ao2mo.pyscf\_eris +------------------------------ + +.. automodule:: vayesta.core.ao2mo.pyscf_eris + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.core.ao2mo + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.core.bath.rst.txt b/_sources/apidoc/vayesta.core.bath.rst.txt new file mode 100644 index 000000000..48f8a03dc --- /dev/null +++ b/_sources/apidoc/vayesta.core.bath.rst.txt @@ -0,0 +1,69 @@ +vayesta.core.bath +================= + +Submodules +---------- + +vayesta.core.bath.bath +---------------------- + +.. automodule:: vayesta.core.bath.bath + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.bath.bno +--------------------- + +.. automodule:: vayesta.core.bath.bno + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.bath.dmet +---------------------- + +.. automodule:: vayesta.core.bath.dmet + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.bath.ewdmet +------------------------ + +.. automodule:: vayesta.core.bath.ewdmet + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.bath.full +---------------------- + +.. automodule:: vayesta.core.bath.full + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.bath.helper +------------------------ + +.. automodule:: vayesta.core.bath.helper + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.bath.r2bath +------------------------ + +.. automodule:: vayesta.core.bath.r2bath + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.core.bath + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.core.fragmentation.rst.txt b/_sources/apidoc/vayesta.core.fragmentation.rst.txt new file mode 100644 index 000000000..5914c8bee --- /dev/null +++ b/_sources/apidoc/vayesta.core.fragmentation.rst.txt @@ -0,0 +1,77 @@ +vayesta.core.fragmentation +========================== + +Submodules +---------- + +vayesta.core.fragmentation.cas +------------------------------ + +.. automodule:: vayesta.core.fragmentation.cas + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.fragmentation.fragmentation +---------------------------------------- + +.. automodule:: vayesta.core.fragmentation.fragmentation + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.fragmentation.helper +--------------------------------- + +.. automodule:: vayesta.core.fragmentation.helper + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.fragmentation.iao +------------------------------ + +.. automodule:: vayesta.core.fragmentation.iao + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.fragmentation.iaopao +--------------------------------- + +.. automodule:: vayesta.core.fragmentation.iaopao + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.fragmentation.sao +------------------------------ + +.. automodule:: vayesta.core.fragmentation.sao + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.fragmentation.site +------------------------------- + +.. automodule:: vayesta.core.fragmentation.site + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.fragmentation.ufragmentation +----------------------------------------- + +.. automodule:: vayesta.core.fragmentation.ufragmentation + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.core.fragmentation + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.core.qemb.rst.txt b/_sources/apidoc/vayesta.core.qemb.rst.txt new file mode 100644 index 000000000..813177937 --- /dev/null +++ b/_sources/apidoc/vayesta.core.qemb.rst.txt @@ -0,0 +1,69 @@ +vayesta.core.qemb +================= + +Submodules +---------- + +vayesta.core.qemb.corrfunc +-------------------------- + +.. automodule:: vayesta.core.qemb.corrfunc + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.qemb.fragment +-------------------------- + +.. automodule:: vayesta.core.qemb.fragment + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.qemb.qemb +---------------------- + +.. automodule:: vayesta.core.qemb.qemb + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.qemb.register +-------------------------- + +.. automodule:: vayesta.core.qemb.register + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.qemb.scrcoulomb +---------------------------- + +.. automodule:: vayesta.core.qemb.scrcoulomb + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.qemb.ufragment +--------------------------- + +.. automodule:: vayesta.core.qemb.ufragment + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.qemb.uqemb +----------------------- + +.. automodule:: vayesta.core.qemb.uqemb + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.core.qemb + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.core.rst.txt b/_sources/apidoc/vayesta.core.rst.txt new file mode 100644 index 000000000..ddf076e8e --- /dev/null +++ b/_sources/apidoc/vayesta.core.rst.txt @@ -0,0 +1,83 @@ +vayesta.core +============ + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + vayesta.core.ao2mo + vayesta.core.bath + vayesta.core.fragmentation + vayesta.core.qemb + vayesta.core.scmf + vayesta.core.symmetry + vayesta.core.types + +Submodules +---------- + +vayesta.core.cmdargs +-------------------- + +.. automodule:: vayesta.core.cmdargs + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.foldscf +-------------------- + +.. automodule:: vayesta.core.foldscf + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.helper +------------------- + +.. automodule:: vayesta.core.helper + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.linalg +------------------- + +.. automodule:: vayesta.core.linalg + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.spinalg +-------------------- + +.. automodule:: vayesta.core.spinalg + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.util +----------------- + +.. automodule:: vayesta.core.util + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.vlog +----------------- + +.. automodule:: vayesta.core.vlog + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.core + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.core.scmf.rst.txt b/_sources/apidoc/vayesta.core.scmf.rst.txt new file mode 100644 index 000000000..95e61fdfb --- /dev/null +++ b/_sources/apidoc/vayesta.core.scmf.rst.txt @@ -0,0 +1,37 @@ +vayesta.core.scmf +================= + +Submodules +---------- + +vayesta.core.scmf.brueckner +--------------------------- + +.. automodule:: vayesta.core.scmf.brueckner + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.scmf.pdmet +----------------------- + +.. automodule:: vayesta.core.scmf.pdmet + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.scmf.scmf +---------------------- + +.. automodule:: vayesta.core.scmf.scmf + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.core.scmf + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.core.symmetry.rst.txt b/_sources/apidoc/vayesta.core.symmetry.rst.txt new file mode 100644 index 000000000..2cc5e11de --- /dev/null +++ b/_sources/apidoc/vayesta.core.symmetry.rst.txt @@ -0,0 +1,45 @@ +vayesta.core.symmetry +===================== + +Submodules +---------- + +vayesta.core.symmetry.group +--------------------------- + +.. automodule:: vayesta.core.symmetry.group + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.symmetry.operation +------------------------------- + +.. automodule:: vayesta.core.symmetry.operation + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.symmetry.symmetry +------------------------------ + +.. automodule:: vayesta.core.symmetry.symmetry + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.symmetry.tsymmetry +------------------------------- + +.. automodule:: vayesta.core.symmetry.tsymmetry + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.core.symmetry + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.core.types.rst.txt b/_sources/apidoc/vayesta.core.types.rst.txt new file mode 100644 index 000000000..f53a387d4 --- /dev/null +++ b/_sources/apidoc/vayesta.core.types.rst.txt @@ -0,0 +1,45 @@ +vayesta.core.types +================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + vayesta.core.types.wf + +Submodules +---------- + +vayesta.core.types.cluster +-------------------------- + +.. automodule:: vayesta.core.types.cluster + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.ebwf +----------------------- + +.. automodule:: vayesta.core.types.ebwf + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.orbitals +--------------------------- + +.. automodule:: vayesta.core.types.orbitals + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.core.types + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.core.types.wf.rst.txt b/_sources/apidoc/vayesta.core.types.wf.rst.txt new file mode 100644 index 000000000..543f38a3d --- /dev/null +++ b/_sources/apidoc/vayesta.core.types.wf.rst.txt @@ -0,0 +1,93 @@ +vayesta.core.types.wf +===================== + +Submodules +---------- + +vayesta.core.types.wf.ccsd +-------------------------- + +.. automodule:: vayesta.core.types.wf.ccsd + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.wf.ccsdtq +---------------------------- + +.. automodule:: vayesta.core.types.wf.ccsdtq + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.wf.cisd +-------------------------- + +.. automodule:: vayesta.core.types.wf.cisd + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.wf.cisdtq +---------------------------- + +.. automodule:: vayesta.core.types.wf.cisdtq + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.wf.fci +------------------------- + +.. automodule:: vayesta.core.types.wf.fci + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.wf.hf +------------------------ + +.. automodule:: vayesta.core.types.wf.hf + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.wf.mp2 +------------------------- + +.. automodule:: vayesta.core.types.wf.mp2 + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.wf.project +----------------------------- + +.. automodule:: vayesta.core.types.wf.project + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.wf.t\_to\_c +------------------------------ + +.. automodule:: vayesta.core.types.wf.t_to_c + :members: + :undoc-members: + :show-inheritance: + +vayesta.core.types.wf.wf +------------------------ + +.. automodule:: vayesta.core.types.wf.wf + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.core.types.wf + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.dmet.rst.txt b/_sources/apidoc/vayesta.dmet.rst.txt new file mode 100644 index 000000000..c0fecb9a1 --- /dev/null +++ b/_sources/apidoc/vayesta.dmet.rst.txt @@ -0,0 +1,69 @@ +vayesta.dmet +============ + +Submodules +---------- + +vayesta.dmet.dmet +----------------- + +.. automodule:: vayesta.dmet.dmet + :members: + :undoc-members: + :show-inheritance: + +vayesta.dmet.fragment +--------------------- + +.. automodule:: vayesta.dmet.fragment + :members: + :undoc-members: + :show-inheritance: + +vayesta.dmet.pdmet +------------------ + +.. automodule:: vayesta.dmet.pdmet + :members: + :undoc-members: + :show-inheritance: + +vayesta.dmet.sdp\_sc +-------------------- + +.. automodule:: vayesta.dmet.sdp_sc + :members: + :undoc-members: + :show-inheritance: + +vayesta.dmet.udmet +------------------ + +.. automodule:: vayesta.dmet.udmet + :members: + :undoc-members: + :show-inheritance: + +vayesta.dmet.ufragment +---------------------- + +.. automodule:: vayesta.dmet.ufragment + :members: + :undoc-members: + :show-inheritance: + +vayesta.dmet.updates +-------------------- + +.. automodule:: vayesta.dmet.updates + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.dmet + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.edmet.rst.txt b/_sources/apidoc/vayesta.edmet.rst.txt new file mode 100644 index 000000000..ad437cd47 --- /dev/null +++ b/_sources/apidoc/vayesta.edmet.rst.txt @@ -0,0 +1,45 @@ +vayesta.edmet +============= + +Submodules +---------- + +vayesta.edmet.edmet +------------------- + +.. automodule:: vayesta.edmet.edmet + :members: + :undoc-members: + :show-inheritance: + +vayesta.edmet.fragment +---------------------- + +.. automodule:: vayesta.edmet.fragment + :members: + :undoc-members: + :show-inheritance: + +vayesta.edmet.uedmet +-------------------- + +.. automodule:: vayesta.edmet.uedmet + :members: + :undoc-members: + :show-inheritance: + +vayesta.edmet.ufragment +----------------------- + +.. automodule:: vayesta.edmet.ufragment + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.edmet + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.ewf.rst.txt b/_sources/apidoc/vayesta.ewf.rst.txt new file mode 100644 index 000000000..d79decf27 --- /dev/null +++ b/_sources/apidoc/vayesta.ewf.rst.txt @@ -0,0 +1,53 @@ +vayesta.ewf +=========== + +Submodules +---------- + +vayesta.ewf.ewf +--------------- + +.. automodule:: vayesta.ewf.ewf + :members: + :undoc-members: + :show-inheritance: + +vayesta.ewf.fragment +-------------------- + +.. automodule:: vayesta.ewf.fragment + :members: + :undoc-members: + :show-inheritance: + +vayesta.ewf.helper +------------------ + +.. automodule:: vayesta.ewf.helper + :members: + :undoc-members: + :show-inheritance: + +vayesta.ewf.uewf +---------------- + +.. automodule:: vayesta.ewf.uewf + :members: + :undoc-members: + :show-inheritance: + +vayesta.ewf.ufragment +--------------------- + +.. automodule:: vayesta.ewf.ufragment + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.ewf + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.lattmod.rst.txt b/_sources/apidoc/vayesta.lattmod.rst.txt new file mode 100644 index 000000000..02df85814 --- /dev/null +++ b/_sources/apidoc/vayesta.lattmod.rst.txt @@ -0,0 +1,29 @@ +vayesta.lattmod +=============== + +Submodules +---------- + +vayesta.lattmod.bethe +--------------------- + +.. automodule:: vayesta.lattmod.bethe + :members: + :undoc-members: + :show-inheritance: + +vayesta.lattmod.latt +-------------------- + +.. automodule:: vayesta.lattmod.latt + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.lattmod + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.libs.rst.txt b/_sources/apidoc/vayesta.libs.rst.txt new file mode 100644 index 000000000..6ae85a9f9 --- /dev/null +++ b/_sources/apidoc/vayesta.libs.rst.txt @@ -0,0 +1,21 @@ +vayesta.libs +============ + +Submodules +---------- + +vayesta.libs.libcore +-------------------- + +.. automodule:: vayesta.libs.libcore + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.libs + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.misc.molecules.rst.txt b/_sources/apidoc/vayesta.misc.molecules.rst.txt new file mode 100644 index 000000000..54e3dd6ba --- /dev/null +++ b/_sources/apidoc/vayesta.misc.molecules.rst.txt @@ -0,0 +1,21 @@ +vayesta.misc.molecules +====================== + +Submodules +---------- + +vayesta.misc.molecules.molecules +-------------------------------- + +.. automodule:: vayesta.misc.molecules.molecules + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.misc.molecules + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.misc.rst.txt b/_sources/apidoc/vayesta.misc.rst.txt new file mode 100644 index 000000000..72d1f5977 --- /dev/null +++ b/_sources/apidoc/vayesta.misc.rst.txt @@ -0,0 +1,78 @@ +vayesta.misc +============ + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + vayesta.misc.molecules + vayesta.misc.solids + +Submodules +---------- + +vayesta.misc.brueckner +---------------------- + +.. automodule:: vayesta.misc.brueckner + :members: + :undoc-members: + :show-inheritance: + +vayesta.misc.corrfunc +--------------------- + +.. automodule:: vayesta.misc.corrfunc + :members: + :undoc-members: + :show-inheritance: + +vayesta.misc.counterpoise +------------------------- + +.. automodule:: vayesta.misc.counterpoise + :members: + :undoc-members: + :show-inheritance: + +vayesta.misc.cptbisect +---------------------- + +.. automodule:: vayesta.misc.cptbisect + :members: + :undoc-members: + :show-inheritance: + +vayesta.misc.cubefile +--------------------- + +.. automodule:: vayesta.misc.cubefile + :members: + :undoc-members: + :show-inheritance: + +vayesta.misc.gto\_helper +------------------------ + +.. automodule:: vayesta.misc.gto_helper + :members: + :undoc-members: + :show-inheritance: + +vayesta.misc.pcdiis +------------------- + +.. automodule:: vayesta.misc.pcdiis + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.misc + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.misc.solids.rst.txt b/_sources/apidoc/vayesta.misc.solids.rst.txt new file mode 100644 index 000000000..cfc729036 --- /dev/null +++ b/_sources/apidoc/vayesta.misc.solids.rst.txt @@ -0,0 +1,21 @@ +vayesta.misc.solids +=================== + +Submodules +---------- + +vayesta.misc.solids.solids +-------------------------- + +.. automodule:: vayesta.misc.solids.solids + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.misc.solids + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.mpi.rst.txt b/_sources/apidoc/vayesta.mpi.rst.txt new file mode 100644 index 000000000..f22779de0 --- /dev/null +++ b/_sources/apidoc/vayesta.mpi.rst.txt @@ -0,0 +1,37 @@ +vayesta.mpi +=========== + +Submodules +---------- + +vayesta.mpi.interface +--------------------- + +.. automodule:: vayesta.mpi.interface + :members: + :undoc-members: + :show-inheritance: + +vayesta.mpi.rma +--------------- + +.. automodule:: vayesta.mpi.rma + :members: + :undoc-members: + :show-inheritance: + +vayesta.mpi.scf +--------------- + +.. automodule:: vayesta.mpi.scf + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.mpi + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.rpa.rirpa.rst.txt b/_sources/apidoc/vayesta.rpa.rirpa.rst.txt new file mode 100644 index 000000000..0a7e53fcd --- /dev/null +++ b/_sources/apidoc/vayesta.rpa.rirpa.rst.txt @@ -0,0 +1,53 @@ +vayesta.rpa.rirpa +================= + +Submodules +---------- + +vayesta.rpa.rirpa.NI\_eval +-------------------------- + +.. automodule:: vayesta.rpa.rirpa.NI_eval + :members: + :undoc-members: + :show-inheritance: + +vayesta.rpa.rirpa.RIRPA +----------------------- + +.. automodule:: vayesta.rpa.rirpa.RIRPA + :members: + :undoc-members: + :show-inheritance: + +vayesta.rpa.rirpa.RIURPA +------------------------ + +.. automodule:: vayesta.rpa.rirpa.RIURPA + :members: + :undoc-members: + :show-inheritance: + +vayesta.rpa.rirpa.energy\_NI +---------------------------- + +.. automodule:: vayesta.rpa.rirpa.energy_NI + :members: + :undoc-members: + :show-inheritance: + +vayesta.rpa.rirpa.momzero\_NI +----------------------------- + +.. automodule:: vayesta.rpa.rirpa.momzero_NI + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.rpa.rirpa + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.rpa.rst.txt b/_sources/apidoc/vayesta.rpa.rst.txt new file mode 100644 index 000000000..7767a3223 --- /dev/null +++ b/_sources/apidoc/vayesta.rpa.rst.txt @@ -0,0 +1,45 @@ +vayesta.rpa +=========== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + vayesta.rpa.rirpa + +Submodules +---------- + +vayesta.rpa.rpa +--------------- + +.. automodule:: vayesta.rpa.rpa + :members: + :undoc-members: + :show-inheritance: + +vayesta.rpa.ssrpa +----------------- + +.. automodule:: vayesta.rpa.ssrpa + :members: + :undoc-members: + :show-inheritance: + +vayesta.rpa.ssurpa +------------------ + +.. automodule:: vayesta.rpa.ssurpa + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.rpa + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.rst.txt b/_sources/apidoc/vayesta.rst.txt new file mode 100644 index 000000000..a19c9b342 --- /dev/null +++ b/_sources/apidoc/vayesta.rst.txt @@ -0,0 +1,28 @@ +vayesta +======= + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + vayesta.core + vayesta.dmet + vayesta.edmet + vayesta.ewf + vayesta.lattmod + vayesta.libs + vayesta.misc + vayesta.mpi + vayesta.rpa + vayesta.solver + vayesta.tools + +Module contents +--------------- + +.. automodule:: vayesta + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.solver.eb_fci.rst.txt b/_sources/apidoc/vayesta.solver.eb_fci.rst.txt new file mode 100644 index 000000000..ccbe41403 --- /dev/null +++ b/_sources/apidoc/vayesta.solver.eb_fci.rst.txt @@ -0,0 +1,37 @@ +vayesta.solver.eb\_fci +====================== + +Submodules +---------- + +vayesta.solver.eb\_fci.ebfci +---------------------------- + +.. automodule:: vayesta.solver.eb_fci.ebfci + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.eb\_fci.ebfci\_slow +---------------------------------- + +.. automodule:: vayesta.solver.eb_fci.ebfci_slow + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.eb\_fci.uebfci\_slow +----------------------------------- + +.. automodule:: vayesta.solver.eb_fci.uebfci_slow + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.solver.eb_fci + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.solver.rst.txt b/_sources/apidoc/vayesta.solver.rst.txt new file mode 100644 index 000000000..65650931f --- /dev/null +++ b/_sources/apidoc/vayesta.solver.rst.txt @@ -0,0 +1,133 @@ +vayesta.solver +============== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + vayesta.solver.eb_fci + +Submodules +---------- + +vayesta.solver.ccsd +------------------- + +.. automodule:: vayesta.solver.ccsd + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.ccsdtq +--------------------- + +.. automodule:: vayesta.solver.ccsdtq + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.cisd +------------------- + +.. automodule:: vayesta.solver.cisd + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.coupled\_ccsd +---------------------------- + +.. automodule:: vayesta.solver.coupled_ccsd + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.coupling +----------------------- + +.. automodule:: vayesta.solver.coupling + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.dump +------------------- + +.. automodule:: vayesta.solver.dump + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.ebcc +------------------- + +.. automodule:: vayesta.solver.ebcc + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.ebfci +-------------------- + +.. automodule:: vayesta.solver.ebfci + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.ext\_ccsd +------------------------ + +.. automodule:: vayesta.solver.ext_ccsd + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.fci +------------------ + +.. automodule:: vayesta.solver.fci + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.hamiltonian +-------------------------- + +.. automodule:: vayesta.solver.hamiltonian + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.mp2 +------------------ + +.. automodule:: vayesta.solver.mp2 + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.solver +--------------------- + +.. automodule:: vayesta.solver.solver + :members: + :undoc-members: + :show-inheritance: + +vayesta.solver.tccsd +-------------------- + +.. automodule:: vayesta.solver.tccsd + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.solver + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.tools.plotting.rst.txt b/_sources/apidoc/vayesta.tools.plotting.rst.txt new file mode 100644 index 000000000..09a9d9ead --- /dev/null +++ b/_sources/apidoc/vayesta.tools.plotting.rst.txt @@ -0,0 +1,37 @@ +vayesta.tools.plotting +====================== + +Submodules +---------- + +vayesta.tools.plotting.colors +----------------------------- + +.. automodule:: vayesta.tools.plotting.colors + :members: + :undoc-members: + :show-inheritance: + +vayesta.tools.plotting.mpl\_mol +------------------------------- + +.. automodule:: vayesta.tools.plotting.mpl_mol + :members: + :undoc-members: + :show-inheritance: + +vayesta.tools.plotting.plotly\_mol +---------------------------------- + +.. automodule:: vayesta.tools.plotting.plotly_mol + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.tools.plotting + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/apidoc/vayesta.tools.rst.txt b/_sources/apidoc/vayesta.tools.rst.txt new file mode 100644 index 000000000..52da19f2f --- /dev/null +++ b/_sources/apidoc/vayesta.tools.rst.txt @@ -0,0 +1,29 @@ +vayesta.tools +============= + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + vayesta.tools.plotting + +Submodules +---------- + +vayesta.tools.eos +----------------- + +.. automodule:: vayesta.tools.eos + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: vayesta.tools + :members: + :undoc-members: + :show-inheritance: diff --git a/_sources/faq/blas.rst.txt b/_sources/faq/blas.rst.txt new file mode 100644 index 000000000..7f5d84221 --- /dev/null +++ b/_sources/faq/blas.rst.txt @@ -0,0 +1,55 @@ +.. include:: /include/links.rst + +Installing OpenBLAS from source +------------------------------- + +The following is an example of installation of OpenBLAS, which can be important for +multithreaded solutions to the embedding problems and other linear algebra operations required. + +This installation example is carried out using **gcc** compilers. + +.. note:: + + The installation of OpenBLAS_ should be done locally. + +To install a local version, a specific directory should be created where the library is stored: + +.. code-block:: console + + [~]$ mkdir $HOME/work + [~]$ export WORK=$HOME/work + + +The last line of code creates an enviromental variable called WORK, which will store the absolute path declared for the directory `work`. + +To install an **openmp** version of OpenBLAS_, a series of steps need to be followed. Firstly, specific options should be selected as is shown in the following lines of code: + +.. code-block:: console + + [~]$ export USE_OPENMP=1 + [~]$ export NO_WARMUP=1 + [~]$ export BUILD_RELAPACK=0 + [~]$ export DYNAMIC_ARCH=0 + [~]$ export CC=gcc + [~]$ export FC=gfortran + [~]$ export HOSTCC=gcc + + +The last 3 options ensures the use of **GNU** compilers. Similarly, a set of optimized `FLAGS` is defined in the following way: + +.. code-block:: console + + [~]$ export COMMON_OPT="-O3 -ftree-vectorize -fprefetch-loop-arrays --param prefetch-latency=300" + [~]$ export CFLAGS="-O3 -ftree-vectorize -fprefetch-loop-arrays --param prefetch-latency=300" + [~]$ export FCOMMON_OPT="-O3 -ftree-vectorize -fprefetch-loop-arrays --param prefetch-latency=300" + [~]$ export FCFLAGS="-O3 -ftree-vectorize -fprefetch-loop-arrays --param prefetch-latency=300" + +To install OpenBLAS, the following commands should be used: + +.. code-block:: console + + [~]$ OPENBLAS_DIR=$HOME/work/openblas + [~]$ make -j4 BINARY=64 INTERFACE=64 LIBNAMESUFFIX=openmp + [~]$ make PREFIX=$OPENBLAS_DIR LIBNAMESUFFIX=openmp install + +This concludes the installation of OpenBLAS. The library can be found in the path `$HOME/work/openblas`. diff --git a/_sources/faq/env.rst.txt b/_sources/faq/env.rst.txt new file mode 100644 index 000000000..f8c8baa7c --- /dev/null +++ b/_sources/faq/env.rst.txt @@ -0,0 +1,15 @@ +.. include:: /include/links.rst + +Environment Variables +--------------------- + +An important point is to configure the ``pip`` to point to the directory ``$HOME/work``. +This can be done via the following lines of code: + +.. code-block:: console + + [~]$ export PYTHONUSERBASE=${WORK}/.local + [~]$ export PATH=$PYTHONUSERBASE/bin:$PATH + [~]$ export PYTHONPATH=$PYTHONUSERBASE/lib/pythonX.X/site-packages:$PYTHONPATH + +This ensures that the future installations will be stored in this directory. diff --git a/_sources/faq/index.rst.txt b/_sources/faq/index.rst.txt new file mode 100644 index 000000000..0ae7feaa3 --- /dev/null +++ b/_sources/faq/index.rst.txt @@ -0,0 +1,19 @@ +.. include:: /include/links.rst + +.. _faq: + +FAQ +=== + +Significant additional functionality present in Vayesta is not covered in the quickstart section---however, +much of it is covered by the examples found with the source. +Here, we cover a few selected additional questions on the setup and workings. + +.. toctree:: + :hidden: + +.. toctree:: + :maxdepth: 1 + + blas + mpi4py diff --git a/_sources/faq/mpi4py.rst.txt b/_sources/faq/mpi4py.rst.txt new file mode 100644 index 000000000..1393a4ea3 --- /dev/null +++ b/_sources/faq/mpi4py.rst.txt @@ -0,0 +1,12 @@ +.. include:: /include/links.rst + +Installing mpi4py +----------------- + +To install **mpi4py**, the following command can be used to build the library: + +.. code-block:: bash + + env MPICC=/../mpicc python -m pip install --force --user mpi4py + +This ensures the creation of the library locally. diff --git a/_sources/include/links.rst.txt b/_sources/include/links.rst.txt new file mode 100644 index 000000000..53e203a78 --- /dev/null +++ b/_sources/include/links.rst.txt @@ -0,0 +1,24 @@ +.. _Python: https://www.python.org/ +.. _GNU: https://www.gnu.org/licenses/gpl-3.0.en.html +.. _PySCF: https://pyscf.org/ +.. _Vayesta: https://github.com/BoothGroup/Vayesta +.. _GitHub: https://github.com/ +.. _OpenBLAS: https://github.com/xianyi/OpenBLAS +.. _pip: https://pypi.org/project/pip/ +.. _NumPy: https://numpy.org +.. _SciPy: https://scipy.org +.. _HDF5: https://www.hdfgroup.org/solutions/hdf5/ +.. _h5py: https://h5py.org +.. _MPI: https://www.mpi-forum.org/ +.. _MPI4PY: https://mpi4py.readthedocs.io/en/stable/ +.. _REF_PRX: https://journals.aps.org/prx/abstract/10.1103/PhysRevX.12.011046 +.. _REF_IAO: https://pubs.acs.org/doi/10.1021/ct400687b +.. _REF_PAO: https://www.annualreviews.org/doi/abs/10.1146/annurev.pc.44.100193.001241 +.. _REF_DMET: https://pubs.acs.org/doi/full/10.1021/acs.jctc.6b00316 +.. _Vayesta_issues: https://github.com/BoothGroup/Vayesta/issues + +.. role:: python(code) + :language: python + +.. role:: console(code) + :language: console diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 000000000..08e8e1912 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,25 @@ +.. include:: /include/links.rst + +Vayesta Documentation +===================== + +Vayesta_ is a Python package for performing state of the art wave function-based quantum embedding simulations of +*ab initio* molecules and solids, as well as lattice models. + +.. toctree:: + :maxdepth: 3 + :caption: Contents: + + intro + install + quickstart/index + faq/index + apidoc/modules + +.. + Indices and tables + ================== + + * :ref:`genindex` + * :ref:`modindex` + * :ref:`search` diff --git a/_sources/install.rst.txt b/_sources/install.rst.txt new file mode 100644 index 000000000..c3b1d5532 --- /dev/null +++ b/_sources/install.rst.txt @@ -0,0 +1,62 @@ +.. include:: /include/links.rst +.. _install: + +============ +Installation +============ + +Vayesta_ can be installed using pip_ or from source. + +Installing with pip +=================== + +The simplest way to install Vayesta is to use the ``setup.py``: + +.. code-block:: console + + [~]$ git clone https://github.com/BoothGroup/Vayesta + [~]$ cd Vayesta + [~]$ pip install . + +All required python packages, such as NumPy_ and PySCF_ will be installed automatically. + +Optional dependencies are required to perform DMET calculations, to leverage MPI parallelism, or to use [``ebcc``](https://github.com/BoothGroup/ebcc) solvers. +These can be specified by adding the modifiers ``[dmet]``, ``[mpi]``, and ``[ebcc]``, respectively. + + +Installation from Source +======================== + +.. note:: + Vayesta requires the following python packages when installing from source: NumPy_, SciPy_, PySCF_, and h5py_) + +To install Vayesta from source, clone the GitHub repository and use ``cmake`` and ``make`` to compile: + +.. code-block:: console + + [~]$ git clone https://github.com/BoothGroup/Vayesta . + [~]$ cd Vayesta/vayesta/libs + [~]$ mkdir build && cd build + [~]$ cmake .. + [~]$ make + +To ensure that Vayesta is found by the Python interpreter when calling :python:`import vayesta`, +the installation location needs to be prepended to the ``PYTHONPATH`` environment variable as follows: + +.. code-block:: console + + [~]$ export PYTHONPATH:"/path/to/vayesta":$PYTHONPATH + +This command can be added to the ``~/.profile`` file located in the home dirctory, to ensure that it is excecuted for every new shell instance. + +.. + For more detailed installation procedures and troubleshooting, please refer to the :ref:`faq`. + +Running Tests +============= + +After installation it is a good idea to run the test suite with ``pytest`` using the following command: + +.. code-block:: console + + [~]$ pytest vayesta/tests diff --git a/_sources/intro.rst.txt b/_sources/intro.rst.txt new file mode 100644 index 000000000..922ea00e2 --- /dev/null +++ b/_sources/intro.rst.txt @@ -0,0 +1,56 @@ +.. include:: /include/links.rst +.. _intro: + +.. figure:: figures/graphene_titlepic.png + :align: center + :figclass: align-center + + Embedding of a carbon atom in graphene. + + +============ +Introduction +============ + +Vayesta_ is a Python package for performing correlated wave function-based quantum embedding +in *ab initio* molecules and solids, as well as lattice models. + +It builds on the functionality of the PySCF_ package to set up the system and obtain mean-field properties. +With Vayesta one can define fragments within these systems in a highly flexible way +and add bath orbitals to represent the coupling of each fragment to its extended environment, +with various approaches actively developed. +The resulting quantum embedding problems can be solved with a variety of wave function based solvers, +making use of the efficient implementations within PySCF. +As a final step, expectation values, such as the energy or reduced density-matrices, +can be reconstructed from the collection of individually-solved embedding problems. +Vayesta also offers support for self-consistency in the procedure or closer coupling in the solutions of the embedding problems. + +The package and methods are actively developed. + +Features +-------- + +- Fragments can be flexibly defined in terms of sets of: + - `Intrinsic atomic orbitals `_ (IAO) [1]_ + - Intrinsic atomic orbitals + orthogonalized `projected atomic orbitals `_ (IAO+PAO) + - Symmetrically (Löwdin) orthogonalized atomic orbitals (SAO) + - Site basis (for lattice models) + +- Bath orbitals: + - `Density-matrix embedding theory (DMET) `_ bath orbitals [2]_ + - `MP2 bath natural orbitals `_ [3]_ + - Spatially closest bath orbitals + +- Quantum embedding problems can be solved with the following PySCF solvers: + - Second-order Møller--Plesset perturbation theory (MP2) + - Configuration interaction with single and double excitations (CISD) + - Coupled-cluster with single and double excitations (CCSD) + - Full configuration-interaction (FCI) + - Dump orbitals and integrals of resulting embedded cluster to HDF5 file for external processing + +Additional functionality is available for self-consistency and the definition of different resulting expectation values. + + +.. [1] Gerald Knizia, J. Chem. Theory Comput. 9, 11, 4834 (2013). +.. [2] Gerald Knizia and Garnet Kin-Lic Chan, Phys. Rev. Lett. 109, 186404 (2012). +.. [3] Max Nusspickel and George H. Booth, Phys. Rev. X 12, 011046 (2022). diff --git a/_sources/quickstart/1dhubbard.rst.txt b/_sources/quickstart/1dhubbard.rst.txt new file mode 100644 index 000000000..08fc0ed51 --- /dev/null +++ b/_sources/quickstart/1dhubbard.rst.txt @@ -0,0 +1,75 @@ +.. include:: /include/links.rst +.. _1dhubbard: + +Custom Hamiltonians +========================== + +Model Hamiltonians are commonly used for simulating systems of interest both in Quantum Chemistry calculations as well as in Condensed-matter studies. +Vayesta_ enables the creation of customized Hamiltonians by employing the module `ref:lattmod` and the functions `ref:Hubbard_1d` and `ref:LatticeMF` +contained in this class. + +To perform calculations using this feature, the required modules should be imported as shown in the following snippet: + +.. literalinclude:: 1d_hubbard.py + :lines: 1-3 + +The initial conditions for an user-defined Hubbard's model are declared as shown in the following lines of code: + +.. literalinclude:: 1d_hubbard.py + :lines: 5-7 + +The creation of the Lattice model is performed automatically by Vayesta_ using these commands: + +.. literalinclude:: 1d_hubbard.py + :lines: 5-7 + +where the function `ref:Hubbard1D` is specialized to create a 1-D Hubbard's model based on the user-defined variables such as *nsite*, *nelectron*, and +*hubbard_u*. An important feature of Vayesta_ is the way in which desired properties are printed and stored. This is done in a new folder created in the +current working directory and called **vayesta_output** where a *log_file* and *error_log* are placed. The user has the possibility to name the output +file provided in `ref:Hubbard1D` function. + +The declared model can be further studied by using the module `ref:LatticeMF`, where a mean-field calculation can be carried out using the object created +in `ref:Hubbard1D` function as is shown below: + +.. literalinclude:: 1d_hubbard.py + :lines: 10-11 + +Likewise, the `ref:LatticeMf` function will automatically select to carry out between **HF** or **UHF** mean-field methods based on the total spin +number. + +The Vayesta_ embedding methods can be further used to numerically study these systems as introduced in the previous tutorials. In this sense, the +`ref:EWF` function employs the *mf* object created by `ref:LatticeMF` and complemented with the options *bno_threshold* and the option *fragment_type* +which indicates the use of **sites** instead of **atoms** as displayed in the following snipet: + +.. literalinclude:: 1d_hubbard.py + :lines: 14-17 + +The fragmentation procedure is carried out in the function `ref:site_fragmentation` and all the corresponding fragements are added utilizing the function +`ref:add_atomic_fragment`. At this point, the extension of the embedding can be declared as a first argument of this function, where the combination +**0** and **sym_factor=nsite** indicates a single-site embedding. The corresponding calculation is performed using the attribute **.kernel()**. The +energy per electron can be computed for both cases (i.e MF and EWF) as indicated below: + +.. literalinclude:: 1d_hubbard.py + :lines: 18-19 + +Due to the flexibility of the embedding methodology different combinations of site-size clusters can be explored. To do so, the function +'ref:add_atomic_fragment' should be correspondingly changed. As an example, a double-site embedding can be declared as: + +.. literalinclude:: 1d_hubbard.py + :lines: 24-25 + +where the arguments **[0,1]** and **sym_factor=nsite//2** indicates the use of a *dimerized* version of the 1-D Hubbard's model which is depicted in +**Figure(1)**. + +.. figure:: figures/1dhubbfig.png + :alt: aperiodic hubbard model + :align: center + :figclass: align-center + + **Figure(1)** Schematic depiction of the 1-D Hubbard model, half filling with double-site embedding fragmentation. + + +Finally, the results for this calculation can be obtained as indicated in the following snippet: + +.. literalinclude:: 1d_hubbard.py + :lines: 27-28 diff --git a/_sources/quickstart/dmet.rst.txt b/_sources/quickstart/dmet.rst.txt new file mode 100644 index 000000000..cd3929eb1 --- /dev/null +++ b/_sources/quickstart/dmet.rst.txt @@ -0,0 +1,120 @@ +.. include:: /include/links.rst + +.. _dmet: + +Density-Matrix Embbeding Theory (DMET) +====================================== + +Vayesta_ can be used for DMET calculations of molecules, solids, and lattice models. +In this section, we give two simple examples: the calculations of a :math:`\textrm{H}_6` `molecule `_ +and a `1D Hubbard model `_. + +Simple Molecule +--------------- + +A simple DMET calculation of a :math:`\textrm{H}_6` ring can be performed as follows (the example can also be found in ``examples/dmet/01-simple-dmet.py``): + +.. literalinclude:: /../../examples/dmet/01-simple-dmet.py + :linenos: + + +In **lines 9--17** the :math:`\textrm{H}_6` molecule is set up +and a restricted Hartree--Fock (RHF) calculation is performed using PySCF_. +We also perform an full system full configuration interaction (FCI) calculation (**lines 20--21**), +to obtain a reference value for the DMET results. + +In **line 24**, a one-shot DMET calculation is instantiated with the Hartree--Fock object as first argument. +Additionally, the keyword argument ``solver='FCI'`` is used to select FCI +as the default solver and ``maxiter=1`` is used to skip the DMET self-consistency cycle. + + +In **lines 25--28** the fragments for the calculation are defined. +This is done with help of the context manager ``dmet.sao_fragmentation()``, which specifies that the +fragments added in the body of the context manager will refer to symmetrically orthogonalized atomic orbitals (SAOs). +The method ``f.add_atomic_fragment(atoms)`` adds a fragment comprised of +all orbitals corresponding to the atom ``atoms`` to the calculation. +In this case, we split the system into three fragments, containing two neighboring hydrogen atoms each. + +.. note:: + + For more information on the fragmentation and the ``add_atomic_fragment`` method, + see section :ref:`Defining Fragments `. + +Finally, the two embedding problems are solved by calling ``dmet.kernel()`` +and the resulting total energy is stored in ``dmet.e_tot``. + +In **lines 32--37** these steps are repeated for a self-consistent DMET calculation, in which case only +the keyword argument ``maxiter=1`` has to be dropped. + + +.. note:: + + The fragments in the calculation above are symmetry-related by a rotation of 120° or 240° around the `z`-axis. + This symmetry can be added to the embedding class, such that only a single fragment needs to be solved: + + .. literalinclude:: /../../examples/dmet/02-rotational-symmetry.py + :lines: 27-32 + + see also ``example/dmet/02-rotations-symmetry.py`` + +.. note:: + + The self-consistent optimization of a correlation potential in DMET can be ill-defined and will sometimes fail. + In this case, changing the tolerance or starting point can sometimes help. + The underlying origin of these difficulties are described in Ref. [1]_. + + Our implementation of self-consistent DMET follows that of Ref. [2]_ and requires the Python package ``cxvpy`` + for use. + +Density-Matrices +---------------- + +In DMET expectation values are defined in terms of democratically partitioned one- and two-body density-matices. +These can be obtained by calling ``dmet.make_rdm1()`` and ``dmet.make_rdm2()`` as shown in example +``examples/dmet/03-density-matrices.py``: + +.. literalinclude:: /../../examples/dmet/03-density-matrices.py + :linenos: + +.. _dmet_hub1d: + +Hubbard Model in 1D +------------------- + +In order to simulate lattice model systems, such as the Hubbard model, Vayesta provides the classes +``Hubbard1D``, ``Hubbard2D`` and ``LatticeMF`` in the ``lattmod`` package. +In the following example the half-filled, ten-site Hubbard chain is calculated with :math:`U = 6t` (where :math:`t` is the hopping parameter, which is 1 by default): + +.. literalinclude:: /../../examples/dmet/63-hubbard-1d.py + :linenos: + +For lattice model systems, fragments for quantum embedding calculations are usually defined in terms of lattice sites. +For this purpose, the embedding class has the fragmentation context manager ``dmet.site_fragmentation()``. +Within the body of this context manager, fragments can be added as before with the method +``add_atomic_fragment``---for the purpose fo defining fragments, the sites are considered as atoms. +In **lines 19--20** of this example, the lattice is divided into two-site fragments, as depicted in :numref:`fig_hub1d`. + +.. _fig_hub1d: +.. figure:: figures/1dhubbfig.png + :alt: 1D Hubbard model + :align: center + :figclass: align-center + + Schematic depiction of the 1-D Hubbard model with two-sites fragments. + +Just as for the :math:`\mathrm{H}_6` ring molecule in the example `above `_, +this lattice model system has an inherent (in this case translational) symmetry between the fragments, which can +be exploited. +This is done in the second DMET calculation in **lines 24--32**, where the translational symmetry is specified +in the following lines: + +.. literalinclude:: /../../examples/dmet/63-hubbard-1d.py + :lines: 27-28 + +The three integers in ``nimages`` specify the number of symmetry related copies (including the original) +along each lattice vector. +For a 1D system, the first lattice vector corresponds to the periodic dimension and is thus the only dimension +along which there are more than one copies. + +.. [1] Faulstich et al., J. Chem. Theor. Comput. 18, 851-864 (2022). +.. [2] Wu et al., Phys. Rev. B 102, 085123 (2020). diff --git a/_sources/quickstart/dumpcluster.rst.txt b/_sources/quickstart/dumpcluster.rst.txt new file mode 100644 index 000000000..f0aff9fa4 --- /dev/null +++ b/_sources/quickstart/dumpcluster.rst.txt @@ -0,0 +1,30 @@ +.. include:: /include/links.rst + +.. _dumpcluster: + +Dumping Cluster Hamiltonians +============================ + +Some users may want to utilize Vayesta_ to easily define fragments within the system +and obtain the corresponding cluster Hamiltonians, but solve the embedding problems externally and with their own solvers. +To accomodate for this, the ``EWF`` class allows setting ``solver='Dump'``, which will dump orbitals and integrals +of all fragments to an HDF5_ file and exit. + +The name of the HDF5 file is ``clusters.h5`` by default, but can be adjusted via an additional solver option: + +.. literalinclude:: /../../examples/ewf/molecules/20-dump-clusters.py + :lines: 26-27 + +.. note:: + The full example can be found at ``examples/ewf/molecules/20-dump-clusters.py`` + +The dump file contains a separate group for each fragment which was defined for the embedding. +The content of each group can be best illustrated via this code snippet: + +.. literalinclude:: /../../examples/ewf/molecules/20-dump-clusters.py + :lines: 56-87 + +For a spin-unrestricted calculation, the shapes and dataset names are slighlty different: + +.. literalinclude:: /../../examples/ewf/molecules/20-dump-clusters.py + :lines: 92-122 diff --git a/_sources/quickstart/edmet.rst.txt b/_sources/quickstart/edmet.rst.txt new file mode 100644 index 000000000..47a58a792 --- /dev/null +++ b/_sources/quickstart/edmet.rst.txt @@ -0,0 +1,55 @@ +.. include:: /include/links.rst +.. _edmet: + + +Extended Density-matrix embedding theory EDMET: +====================================================== + +In the following tutorial, the extended density-matrix embbeding theory (EDMET) is introduced as implemented in Vayesta_. Two examples (Finite systems +and custom Hamiltonians) are used to illustrate the capabilities of this methodology. + + +Finite Systems +^^^^^^^^^^^^^^^^^^^^^ + +The Vayesta_ `ref:edmet.EDMET` module is introduced. As starting point, the relevant modules of PySCF_ and Vayesta_ are loaded: + +.. literalinclude:: edmetfinite.py + :lines: 1-7 + +The pertinent variables to declare a finite system (water molecule) in PySCF_ are shown in the following snippet: + +.. literalinclude:: edmetfinite.py + :lines: 10-18 + +The `ref:EDMET` module enables the use of different mean-field approaches, like for instance, Density Functional Theory (DFT). As implemente in PySCF_, the relevant variables are called as shown in the following lines of code: + +.. literalinclude:: edmetfinite.py + :lines: 20-24 + +It is important to notice that the features of a DFT object in PySCF_ are not consistent with the characteristics of a Hartree-Fock object and therefore needs to be converted in the followin way: + +.. literalinclude:: edmetfinite.py + :lines: 26-27 + +To use the module, the function `ref:edmet` is declared and arguments are provided from previous steps as shown in the snippet below: + +.. literalinclude:: edmetfinite.py + :lines: 29-30 + +The arguments **dmet_threshold**, **oneshot**, and **make_dd_moments** are arguments employed to define specific strategies of the algortihm. The **solver** option offers the possibility to use the **EBFCI** and **EBCCSD**, which is the one selected in this example. + +A fragmentation scheme is needed and, in this example, perfomed in the following manner: + +.. literalinclude:: edmetfinite.py + :lines: 32-34 + +To compare with the **CCSD** reference, the computation can be submitted as shown in the code below: + +.. literalinclude:: edmetfinite.py + :lines: 61-63 + +Relevant quantities, such as the total energy, can be printed as displayed in the following lines of code: + +.. literalinclude:: edmetfinite.py + :lines: 65-68 diff --git a/_sources/quickstart/ewf.rst.txt b/_sources/quickstart/ewf.rst.txt new file mode 100644 index 000000000..0dc3f8222 --- /dev/null +++ b/_sources/quickstart/ewf.rst.txt @@ -0,0 +1,121 @@ +.. include:: /include/links.rst + +.. _ewf: + +Wave Function Based Embedding (EWF) +=================================== + +This introduces the ``EWF`` class to perform a more generalized wave function based quantum embedding that +improves on DMET for *ab initio* systems, as presented in `Phys. Rev. X 12, 011046 `_ [1]_. + +Water Molecule +-------------- + +An embedded wave function calculation of a simple water molecule can be performed with the following code: + +.. literalinclude:: /../../examples/ewf/molecules/01-simple-ccsd.py + :linenos: + +There are two main differences in setup compared to the :ref:`DMET embedding class ` in the definition of the ``EWF`` class (**lines 24--25**). + +* The keyword argument :python:`bath_options=dict(threshold=1e-6)` defines the threshold for the MP2 bath natural orbitals + (the variable :math:`\eta` in Ref. `1 <1_>`_) [2]_. + +* No fragmentation scheme is explicitly provided, which by default results in the system being fully fragmented + into simple atomic fragments as defined by `intrinsic atomic orbitals `_ (IAOs). + This is equivalent to adding the following lines before calling the embedding kernel method: + +.. code-block:: python + + with emb.iao_fragmentation() as f: + f.add_all_atomic_fragments() + +which, in turn, is equivalent to + +.. code-block:: python + + with emb.iao_fragmentation() as f: + for atom in range(mol.natm): + f.add_atomic_fragment(atom) + +Other :ref:`fragmentations schemes ` can still be used, but have to be specified manually. + + +Cubic Boron Nitride (cBN) +------------------------- + +In this example we calculate cubic boron nitride (Zinc Blende structure): + +.. note:: + The basis set, auxiliary (density-fitting) basis set, and **k**-point sampling in this example are much too small + for accurate results and only chosen for demonstration. + + +.. literalinclude:: /../../examples/ewf/solids/03-cubic-BN.py + :linenos: + +In **line 34** the setup of the embedding class is performed in the same way as for molecules. +Vayesta will detect if the mean field object ``mf`` has **k**-points defined. If these are found, then +the **k**-point sampled mean-field will automatically be folded to the :math:`\Gamma`-point of the equivalent +(in this case :math:`2\times2\times2`) Born--von Karman supercell. + +.. note:: + + Only Monkhorst-pack **k**-point meshes which include the :math:`\Gamma`-point are currently supported. + +Note that instantiating the embedding class with a **k**-point sampled mean-field object +will automatically add the translational symmetry to the symmetry group stored in :python:`emb.symmetry`. +This assumes that the user will only define fragments within the original primitive unit cell, +which are then copied throughout the supercell using the translational symmetry (and this symmetry will be exploited +to avoid the cost of solving embedded fragments which are symmetrically equivalent to others). +For calculations of fragments across multiple primitive cells or where the primitive cell has not been explicitly +enlarged to encompass the full fragment space, +the translational symmetry should be removed by calling :python:`emb.symmetry.clear_translations()` +or overwritten via :python:`emb.symmetry.set_translations(nimages)`, as demonstrated in +for the 1D Hubbard model :ref:`here `. + +Performing the embedding in the supercell allows for optimal utilization of the locality of electron correlation, +as the embedding problems are only restricted to have the periodicity of the supercell, rather than the **k**-point sampled +primitive cell. +Properties, such as density-matrix calculated in **line 42**, will recover the full, primitive cell symmetry, +since they are obtained from a summation over all symmetry equivalent fragments in the supercell. +This is confirmed by the population analysis, which shows that the boron atom 2 has the same population than +boron atom 0, despite being part of a different primitive cell within the supercell: + +.. code-block:: console + + Population analysis + ------------------- + 0 B: q= 0.17325874 s= 0.00000000 + 0 0 B 1s = 1.98971008 + 1 0 B 2s = 0.76417671 + 2 0 B 2px = 0.69095149 + 3 0 B 2py = 0.69095149 + 4 0 B 2pz = 0.69095149 + 1 N: q= -0.17325874 s= 0.00000000 + 5 1 N 1s = 1.99053993 + 6 1 N 2s = 1.17403392 + 7 1 N 2px = 1.33622830 + 8 1 N 2py = 1.33622830 + 9 1 N 2pz = 1.33622830 + 2 B: q= 0.17325874 s= 0.00000000 + 10 2 B 1s = 1.98971008 + 11 2 B 2s = 0.76417671 + 12 2 B 2px = 0.69095149 + 13 2 B 2py = 0.69095149 + 14 2 B 2pz = 0.69095149 + 3 N: q= -0.17325874 s= 0.00000000 + 15 3 N 1s = 1.99053993 + 16 3 N 2s = 1.17403392 + 17 3 N 2px = 1.33622830 + 18 3 N 2py = 1.33622830 + 19 3 N 2pz = 1.33622830 + ... + + + +.. [1] Max Nusspickel and George H. Booth, Phys. Rev. X 12, 011046 (2022). +.. [2] The definition of :math:`\eta` in Vayesta differs from Ref. 1 by a factor of :math:`1/2`. In Ref. 1 the + occupation numbers of the spin traced density matrix (between 0 and 2) are compared against :math:`\eta`, whereas in Vayesta the eigenvalues of + the spinned density-matrix (between 0 and 1) are used. The latter definition allows for a more natural comparison between spin-restricted + and unrestricted calculations with the same value of :math:`\eta`. diff --git a/_sources/quickstart/fragmentation.rst.txt b/_sources/quickstart/fragmentation.rst.txt new file mode 100644 index 000000000..b6a372cf4 --- /dev/null +++ b/_sources/quickstart/fragmentation.rst.txt @@ -0,0 +1,109 @@ +.. include:: /include/links.rst + +.. _fragments: + +Defining Fragments +================== + +Fragments are added within a fragmentation context manager, +which determines in which way orbitals are constructed for particular fragment choices. + +Fragmentation +------------- + +In order to define fragments in an *ab initio* system, one needs to specify +a set of orthogonal projectors onto subspaces. +There is no unique way to define such projectors---the question where one atom or orbital 'ends' and the next one begins +within a molecule or solid is fundamentally ill-posed. + +Nevertheless, we do not require the projectors to be uniquely defined in order to perform quantum embedding calculations. +Within the embedded wave function (EWF) framework, the systematic improvability to the exact result is +guaranteed via an expansion of the bath space and appropriate choice of property functionals [1]_. +The only requirement on the fragments is that they are orthogonal and (when taken together) they span the complete *occupied* space. +For DMET calculations, it is additionally desirable for the union of the fragment spaces to span the entire *virtual* space. + +.. note:: + + To check if a user-defined fragmentation is orthogonal and complete in the occupied/virtual space, + lock for the following line in the output: + + .. code-block:: console + + Fragmentation: orthogonal= True, occupied-complete= True, virtual-complete= False + +For *ab initio* systems atomic projectors can be defined in terms of three different types of local atomic orbitals: + +* `Intrinsic atomic orbitals (IAO) `_ +* IAOs augmented with `projected atomic orbitals (PAO) `_ +* Symmetrically (Löwdin) orthogonalized atomic orbitals (SAO) + +For lattice models, on the other hand, the mapping between the site basis and the sites is clearer and more natural to define. + +:numref:`table_fragmentation` shows a comparison of the the different fragmentation types: + +.. _table_fragmentation: +.. list-table:: Comparison of fragmentation types + :widths: 20 40 10 10 20 + :header-rows: 1 + + * - Type + - Context manager + - DMET + - EWF + - Comments + * - IAO + - :python:`iao_fragmentation(minao='auto')` + - No + - Yes + - Default for :python:`EWF` + * - IAO+PAO + - :python:`iaopao_fragmentation(minao='auto')` + - Yes + - Yes + - + * - SAO + - :python:`sao_fragmentation()` + - Yes + - Yes + - + * - Site basis + - :python:`site_fragmentation()` + - Yes + - Yes + - For lattice models only + +The minimal reference basis for the IAO construction can be selected with the :python:`minao` +argument. By default a suitable basis set will be chosen automatically :python:`'auto'`. + +.. note:: + + Generally different fragmentations should not be combined, as the resulting fragments are not guaranteed to be orthogonal. + The only exception to this are the IAO and IAO+PAO fragmentation, which can be combined as long as no atom is added twice: + + .. code-block:: python + + with emb.iao_fragmentation() as f: + f.add_atomic_fragment(0) + with emb.iaopao_fragmentation() as f: + f.add_atomic_fragment(1) + + +Adding Fragments +---------------- + +Within the fragmentation context manager, fragments can be added using the methods +:python:`add_atomic_fragment` and :python:`add_orbital_fragment`. + +The :python:`add_atomic_fragment` method can accept both atom indices and symbols and can further filter specific orbital types +with the :python:`orbital_filter` argument. +The capabilities are best demonstrated in example ``examples/ewf/molecules/12-custom-fragments.py``: + +.. literalinclude:: /../../examples/ewf/molecules/12-custom-fragments.py + :linenos: + +The :python:`add_orbital_fragment` method allows selecting orbitals (IAOs, PAOs, or SAOs) +to define fragments, either via their indices or labels. + + +.. [1] Exact here means free of any error due to the embedding procedure. Any external errors + (for example by using a CCSD solver) remain. diff --git a/_sources/quickstart/index.rst.txt b/_sources/quickstart/index.rst.txt new file mode 100644 index 000000000..c63796ca3 --- /dev/null +++ b/_sources/quickstart/index.rst.txt @@ -0,0 +1,19 @@ +.. include:: /include/links.rst +.. _quickstart: + +Quickstart +========== + +Collection of examples showing how to perform calculations with Vayesta. In the following pages, we will present the different capabilities that Vayesta is able to perform the corresponding calculations: + +.. toctree:: + :hidden: + +.. toctree:: + :maxdepth: 1 + + dmet + ewf + fragmentation + mpi + dumpcluster diff --git a/_sources/quickstart/mpi.rst.txt b/_sources/quickstart/mpi.rst.txt new file mode 100644 index 000000000..33dce11dc --- /dev/null +++ b/_sources/quickstart/mpi.rst.txt @@ -0,0 +1,66 @@ +.. include:: /include/links.rst + +.. _sec_mpi: + +Parallel Computing with MPI +=========================== + +Vayesta_ can construct and solve multiple quantum embedding problems (as defined by the fragmentation) in parallel +over distributed memory architecture, +using the `Message Passing Interface (MPI) `_ and the Python bindings provided by `mpi4py `_. + +.. warning:: + + Not all functions have been tested in combinations with MPI. + It is always adviced to perform a smaller test run, in order to verify that parallel and serial excecution yield the same results. + Please open an issue on the `GitHub page `_ to report any bugs or unexpected behavior. + +.. note:: + + ``mpi4py`` can be installed using pip: :console:`[~]$ pip install mpi4py` + +Running an MPI Job +------------------ + +Running a calculation in parallel is as simple as excecuting :console:`[~]$ mpirun -np N jobscript.py` +in the console, where ``N`` is the desired number of MPI processes. +For the best possible parallelization, use as many MPI processes as there are fragments +(for example three for an atomic fragmentation of a water molecule), for which the scaling +with number of MPI processes should be favourable. +When it is necessary to use fewer MPI processes than fragments, the processes will then +calculate their assigned set of embedding problems sequentially. +It is never advised to use more MPI processes than there are fragments; the additional processes +will simply be idle. + +Note that if a multithreaded BLAS library is linked, then the embedding +problems assigned to each MPI rank will in general still be solved in a multithreaded fashion. +Therefore, a good strategy is to assign the MPI ranks to separate nodes (ideally equal to the number +of fragments) and use a multithreaded (e.g. OpenBLAS) library with multiple threads over the cores of the node for the solution and +manipulation of each embedded problems. + +.. note:: + + Many multithreaded libraries do not scale well beyond 16 or so threads for typical problem sizes. + For modern CPUs the number of cores can be significantly higher than this and, unless memory is a bottleneck, + it can be beneficial to assign multiple MPI ranks to each node. + +Additional Considerations +------------------------- + +While any job script should in principle also work in parallel, +there are some additional considerations, which mainly concern file IO and logging. +They are demonstrated at this example, which can be found at ``examples/ewf/molecules/90-mpi.py``: + +.. literalinclude:: /../../examples/ewf/molecules/90-mpi.py + :linenos: + +* Vayesta will generate a separate logging file for each MPI rank, but PySCF_ does not. To avoid + chaotic logging, it is adviced to give the ``mol`` object of each MPI process a unique output name (see **line 17**). +* PySCF does not support MPI by default. The mean-field calculation will thus simple be performed on each MPI process individually, + and Vayesta will discard all solutions, except that obtained on the master process (rank 0). + To save electricy, the function ``vayesta.mpi.mpi.scf(mf)`` can be used to restrict the mean-field calculation to + the master process from the beginning (see **line 22**). Alternatively, for a more efficient workflow in situations with significant mean-field + overheads, the initial mean-field calculation can be performed separately, and the mean-field read in. See the PySCF_ documentation + for how this can be done. +* Output should only be printed on the master process. + The property ``mpi.is_master`` (identical to ``mpi.rank == 0``) can be used to check if the current MPI process is the master process (see **line 30**) diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 000000000..81415803e --- /dev/null +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 000000000..7577acb1a --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,903 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 000000000..c718cee44 --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 000000000..6cb600001 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 000000000..7059e2314 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 000000000..f815f63f9 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 000000000..f2c76e5bd Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 000000000..e9f60ca95 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 000000000..855c845e5 --- /dev/null +++ b/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 000000000..35acda2fa Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 000000000..400014a4b Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 000000000..4d13fc604 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 000000000..88ad05b9f Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 000000000..c4e3d804b Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff new file mode 100644 index 000000000..c6dff51f0 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 000000000..bb195043c Binary files /dev/null and b/_static/css/fonts/lato-bold.woff2 differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 000000000..76114bc03 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 000000000..3404f37e2 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff new file mode 100644 index 000000000..ae1307ff5 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 000000000..3bf984332 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff2 differ diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 000000000..19a446a0e --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 000000000..d06a71d75 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 000000000..995f333f6 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '1.0.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 000000000..a858a410e Binary files /dev/null and b/_static/file.png differ diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 000000000..c4c6022f2 --- /dev/null +++ b/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/html5shiv.min.js b/_static/js/html5shiv.min.js new file mode 100644 index 000000000..cd1c674f5 --- /dev/null +++ b/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/theme.js b/_static/js/theme.js new file mode 100644 index 000000000..1fddb6ee4 --- /dev/null +++ b/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 000000000..d96755fda Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 000000000..7107cec93 Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 000000000..08bec689d --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,74 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 000000000..97d56a74d --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,566 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 000000000..aae669d7e --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,144 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(SphinxHighlight.highlightSearchWords); +_ready(SphinxHighlight.initEscapeListener); diff --git a/apidoc/modules.html b/apidoc/modules.html new file mode 100644 index 000000000..cfeac63c1 --- /dev/null +++ b/apidoc/modules.html @@ -0,0 +1,159 @@ + + + + + + + API — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

API

+
+

Warning

+

The API documentation is work-in-progress!

+
+
+

Basic

+ +
+
+

Advanced

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.core.ao2mo.html b/apidoc/vayesta.core.ao2mo.html new file mode 100644 index 000000000..fd7e5a132 --- /dev/null +++ b/apidoc/vayesta.core.ao2mo.html @@ -0,0 +1,490 @@ + + + + + + + vayesta.core.ao2mo — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.core.ao2mo

+
+

Submodules

+
+
+

vayesta.core.ao2mo.helper

+
+
+vayesta.core.ao2mo.helper.get_kconserv(cell, kpts, nk=3)[source]
+

Get the momentum conservation array for a set of k-points.

+

Given k-point indices (k, l, m) the array kconserv[k,l,m] returns +the index n that satifies momentum conservation,

+
+
nk=1:

(k(k) - k(n)) dot a = 2npi

+
+
nk=2:

(k(k) - k(l) - k(n)) dot a = 2npi

+
+
nk=3:

(k(k) - k(l) + k(m) - k(n)) dot a = 2npi

+
+
This is used for symmetry e.g. integrals of the form

[phi*[k](1) phi[l](1) | phi*[m](2) phi[n](2)]

+
+
+

are zero unless n satisfies the above.

+
+ +
+
+vayesta.core.ao2mo.helper.get_full_array(eris, mo_coeff=None, out=None)[source]
+

Get dense ERI array from CCSD _ChemistEris object.

+
+ +
+
+vayesta.core.ao2mo.helper.get_full_array_rhf(eris, mo_coeff=None, out=None)[source]
+

Get dense ERI array from CCSD _ChemistEris object.

+
+ +
+
+vayesta.core.ao2mo.helper.get_full_array_uhf(eris, mo_coeff=None, out=None)[source]
+

Get dense ERI array from CCSD _ChemistEris object.

+
+ +
+
+vayesta.core.ao2mo.helper.get_ovvv(eris, block='ovvv')[source]
+
+ +
+
+vayesta.core.ao2mo.helper.get_ovVV(eris, block='ovVV')[source]
+
+ +
+
+vayesta.core.ao2mo.helper.get_vvvv(eris, block='vvvv')[source]
+
+ +
+
+vayesta.core.ao2mo.helper.get_vvVV(eris, block='vvVV')[source]
+
+ +
+
+vayesta.core.ao2mo.helper.get_block(eris, block)[source]
+
+ +
+
+vayesta.core.ao2mo.helper.pack_ovvv(ovvv)[source]
+
+ +
+
+vayesta.core.ao2mo.helper.pack_vvvv(vvvv)[source]
+
+ +
+
+vayesta.core.ao2mo.helper.contract_dm2_eris(dm2, eris)[source]
+

Contracts _ChemistsERIs with the two-body density matrix.

+
+
Parameters:
+
    +
  • dm2 (ndarry or (ndarray, ndarray, ndarray)) – Two-body density matrix or tuple of alpha-alpha, alpha-beta, beta-beta spin blocks for UHF.

  • +
  • eris (_ChemistERIs) – PySCF ERIs object.

  • +
+
+
Returns:
+

e2 – Two-body energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+vayesta.core.ao2mo.helper.contract_dm2_eris_rhf(dm2, eris)[source]
+

Contracts _ChemistsERIs with the two-body density matrix.

+
+
Parameters:
+
    +
  • dm2 (ndarry) – Two-body density matrix.

  • +
  • eris (_ChemistERIs) – PySCF ERIs object.

  • +
+
+
Returns:
+

e2 – Two-body energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+vayesta.core.ao2mo.helper.contract_dm2_eris_uhf(dm2, eris)[source]
+

Contracts _ChemistsERIs with the two-body density matrix.

+
+
Parameters:
+
    +
  • dm2 (tuple(ndarray, ndarray, ndarray)) – Two-body density matrix as a tuple of alpha-alpha, alpha-beta, beta-beta spin blocks.

  • +
  • eris (_ChemistERIs) – PySCF ERIs object.

  • +
+
+
Returns:
+

e2 – Two-body energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+vayesta.core.ao2mo.helper.contract_dm2intermeds_eris_rhf(dm2, eris, destroy_dm2=True)[source]
+

Contracts _ChemistsERIs with the two-body density matrix.

+
+
Parameters:
+
    +
  • dm2 (tuple) – Intermediates of spin-restricted two-body density matrix.

  • +
  • eris (_ChemistERIs) – PySCF ERIs object.

  • +
+
+
Returns:
+

e2 – Two-body energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+vayesta.core.ao2mo.helper.contract_dm2intermeds_eris_uhf(dm2, eris, destroy_dm2=True)[source]
+

Contracts _ChemistsERIs with the two-body density matrix.

+
+
Parameters:
+
    +
  • dm2 (tuple) – Intermediates of spin-unrestricted two-body density matrix.

  • +
  • eris (_ChemistERIs) – PySCF ERIs object.

  • +
+
+
Returns:
+

e2 – Two-body energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+vayesta.core.ao2mo.helper.project_ccsd_eris(eris, mo_coeff, nocc, ovlp, check_subspace=True)[source]
+

Project CCSD ERIs to a subset of orbital coefficients.

+
+
Parameters:
+
    +
  • eris (_ChemistERIs) – PySCF ERIs object

  • +
  • mo_coeff ((n(AO), n(MO)) array) – New subspace MO coefficients.

  • +
  • nocc (int) – Number of occupied orbitals.

  • +
  • ovlp ((n(AO), n(AO)) array) – AO overlap matrix.

  • +
  • check_subspace (bool, optional) – Check if c_occ and c_vir span a subspace of eris.mo_coeff. +Return None if Not. Default: True.

  • +
+
+
Returns:
+

eris – ERIs with transformed integral values, as well as transformed attributes +mo_coeff, fock, and mo_energy.

+
+
Return type:
+

_ChemistERIs or None

+
+
+
+ +
+
+

vayesta.core.ao2mo.kao2gmo

+

AO to MO transformation from k-space (AOs) to supercell real space (MOs)

+

Author: Max Nusspickel +Email: max.nusspickel@gmail.com

+
+
+vayesta.core.ao2mo.kao2gmo.kao2gmo_cderi(gdf, mo_coeffs, make_real=True, blksize=None, tril_kij=True, driver=None)[source]
+

Transform density-fitted ERIs from primtive cell k-AO, to Gamma-point MOs.

+

(L|ka,k’b) * C1_(Ra)i * C2_(R’b)j -> (R’’L|Ri,R’j)

+
+
Parameters:
+
    +
  • gdf (pyscf.pbc.df.GDF) – Gaussian density-fitting object of primitive unit cell.

  • +
  • mo_coeffs (array or tuple(2) of arrays) – MO coefficients C1_(Ra)i and C2_(R’b)j for the transformation. If only one coefficient matrix is +passed, it will be used for both C1 and C2.

  • +
  • make_real (bool, optional) – Fourier-transform the auxiliary DF dimension, such that the final three-center integrals are real. +Default: True.

  • +
  • blksize (int, optional) – Blocksize for the auxiliary dimension.

  • +
  • tril_kij (bool, optional) – Only load k-point pairs k >= k’, and use the symmetry (L|ka,k’b) = (L|k’b,ka)*. +Default: True.

  • +
  • driver ({None, 'c', 'python'}) – Use Python or C driver for the transformation. If None, use C if compiled library is present, +if so use C, else use python. Default: None.

  • +
+
+
Returns:
+

    +
  • cderi_mo (array) – Density-fitted supercell three-center integrals in MO basis.

  • +
  • cderi_mo_neg (array or None) – Negative part of density-fitted supercell three-center integrals in MO basis. +None for 3D systems.

  • +
+

+
+
+
+ +
+
+

vayesta.core.ao2mo.postscf_ao2mo

+
+
+vayesta.core.ao2mo.postscf_ao2mo.postscf_ao2mo(postscf, mo_coeff=None, fock=None, mo_energy=None, e_hf=None)[source]
+

AO to MO transformation of ERIs for post-SCF calculations.

+

Use this as postscf_ao2mo(cc,…) instead of cc.ao2mo(…) to allow control +of eris.fock, eris.mo_energy, and eris.e_hf.

+
+
Parameters:
+
    +
  • postscf (PySCF Post-SCF method) – Instance of MP2, DFMP2, CCSD, RCCSD, or DFCCSD, with attribute mo_coeff set.

  • +
  • mo_coeff (array, optional) – MO coefficients for the AO to MO transformation. If None, PySCF uses postscf.mo_coeff. +Default: None.

  • +
  • fock (array, optional) – Fock matrix in AO representation. If None, PySCF uses postscf._scf.get_fock(). Default: None.

  • +
  • mo_energy (array, optional) – Active MO energies. If None, PySCF uses fock.diagonal(). Default: None.

  • +
  • e_hf (float, optional) – Mean-field energy. If None, PySCF calculates this as postscf._scf.energy_tot(). Default: None.

  • +
+
+
Returns:
+

eris – PySCF ERIs object which can be used for the respective post-SCF calculation.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+vayesta.core.ao2mo.postscf_ao2mo.postscf_kao2gmo(postscf, gdf, fock, mo_energy, e_hf=None, mo_coeff=None)[source]
+

k-AO to Gamma-MO transformation of ERIs for post-SCF calculations of supercells.

+

This can be used to avoid performing the expensive density-fitting in the supercell, +if a smaller primitive unit cell exists.

+
+
Parameters:
+
    +
  • postscf (PySCF Post-SCF method) – Instance of MP2, DFMP2, CCSD, RCCSD, or DFCCSD, with attribute mo_coeff set.

  • +
  • gdf (PySCF Gaussian density-fitting object) – Density-fitting object of the primitive unit cell.

  • +
  • fock (array) – Fock matrix in AO representation.

  • +
  • mo_energy (array) – Active MO energies.

  • +
  • e_hf (float) – Mean-field energy.

  • +
  • mo_coeff (array, optional) – MO coefficients for the AO to MO transformation. If None, PySCF uses postscf.mo_coeff. +Default: None.

  • +
+
+
Returns:
+

eris – PySCF ERIs object which can be used for the respective supercell post-SCF calculation.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+vayesta.core.ao2mo.postscf_ao2mo.postscf_kao2gmo_uhf(postscf, gdf, fock, mo_energy, e_hf=None, mo_coeff=None)[source]
+

k-AO to Gamma-MO transformation of ERIs for unrestricted post-SCF calculations of supercells.

+

This can be used to avoid performing the expensive density-fitting in the supercell, +if a smaller primitive unit cell exists.

+
+
Parameters:
+
    +
  • postscf (PySCF Post-SCF method) – Instance of UMP2 or UCCSD, with attribute mo_coeff set.

  • +
  • gdf (PySCF Gaussian density-fitting object) – Density-fitting object of the primitive unit cell.

  • +
  • fock (tuple(2) of arrays) – Fock matrix in AO representation (alpha, beta).

  • +
  • mo_energy (tuple(2) or arrays) – Active MO energies (alpha, beta).

  • +
  • e_hf (float) – Mean-field energy.

  • +
  • mo_coeff (tuple(2) of arrays, optional) – MO coefficients for the AO to MO transformation (alpha, beta). +If None, PySCF uses postscf.mo_coeff. Default: None.

  • +
+
+
Returns:
+

eris – PySCF ERIs object which can be used for the respective supercell post-SCF calculation.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+

vayesta.core.ao2mo.pyscf_eris

+
+
+vayesta.core.ao2mo.pyscf_eris.make_ccsd_eris(fock, eris, nocc, mo_energy=None)[source]
+

Generate _ChemistERIs object for pyscf.cc.ccsd.CCSD.

+
+
Parameters:
+
    +
  • fock (array) – Fock matrix in MO basis.

  • +
  • eris (array) – Electron-repulsion integrals in MO basis.

  • +
  • nocc (int) – Number of occupied orbitals.

  • +
  • mo_energy (array, optional) – MO energies. Used for the initial guess and preconditioning. +Default: fock.diagonal().

  • +
+
+
Returns:
+

eris – ERI object as used by pyscf.cc.ccsd.CCSD.

+
+
Return type:
+

pyscf.cc.ccsd._ChemistERIs

+
+
+
+ +
+
+vayesta.core.ao2mo.pyscf_eris.make_uccsd_eris(fock, eris, nocc, mo_energy=None)[source]
+

Generate _ChemistERIs object for pyscf.cc.uccsd.UCCSD.

+
+
Parameters:
+
    +
  • fock (tuple(2) of arrays) – Fock matrix in MO basis.

  • +
  • eris (tuple(3) of arrays) – Electron-repulsion integrals in MO basis.

  • +
  • nocc (tuple(2) of ints) – Number of occupied orbitals.

  • +
  • mo_energy (tuple(2) of arrays, optional) – MO energies. Used for the initial guess and preconditioning. +Default: fock.diagonal().

  • +
+
+
Returns:
+

eris – ERI object as used by pyscf.cc.uccsd.UCCSD.

+
+
Return type:
+

pyscf.cc.uccsd._ChemistERIs

+
+
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.core.bath.html b/apidoc/vayesta.core.bath.html new file mode 100644 index 000000000..4596e212f --- /dev/null +++ b/apidoc/vayesta.core.bath.html @@ -0,0 +1,1211 @@ + + + + + + + vayesta.core.bath — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.core.bath

+
+

Submodules

+
+
+

vayesta.core.bath.bath

+

Bath base class.

+
+
+class vayesta.core.bath.bath.Bath(fragment)[source]
+

Bases: object

+
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property log
+
+ +
+
+property base
+
+ +
+
+property c_frag
+
+ +
+ +
+
+

vayesta.core.bath.bno

+
+
+class vayesta.core.bath.bno.BNO_Threshold(type, threshold)[source]
+

Bases: object

+
+
+get_number(bno_occup, electron_total=None)[source]
+

Get number of BNOs.

+
+ +
+ +
+
+class vayesta.core.bath.bno.BNO_Bath(fragment, dmet_bath, occtype, *args, c_buffer=None, canonicalize=True, **kwargs)[source]
+

Bases: Bath

+

Bath natural orbital (BNO) bath, requires DMET bath.

+
+
+property c_cluster_occ
+

Occupied DMET cluster orbitals.

+
+ +
+
+property c_cluster_vir
+

Virtual DMET cluster orbitals.

+
+ +
+
+make_bno_coeff(*args, **kwargs)[source]
+
+ +
+
+property c_env
+
+ +
+
+property ncluster
+
+ +
+
+kernel()[source]
+
+ +
+
+log_histogram(n_bno)[source]
+
+ +
+
+get_bath(bno_threshold=None, **kwargs)[source]
+
+ +
+
+get_finite_bath_correction(c_active, c_frozen)[source]
+
+ +
+
+truncate_bno(coeff, occup, bno_threshold=None, verbose=True)[source]
+

Split natural orbitals (NO) into bath and rest.

+
+ +
+
+get_active_space(c_active=None)[source]
+
+ +
+
+property base
+
+ +
+
+property c_frag
+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+ +
+
+class vayesta.core.bath.bno.BNO_Bath_UHF(fragment, dmet_bath, occtype, *args, c_buffer=None, canonicalize=True, **kwargs)[source]
+

Bases: BNO_Bath

+
+
+property ncluster
+
+ +
+
+log_histogram(n_bno)[source]
+
+ +
+
+truncate_bno(coeff, occup, *args, **kwargs)[source]
+

Split natural orbitals (NO) into bath and rest.

+
+ +
+
+property base
+
+ +
+
+property c_cluster_occ
+

Occupied DMET cluster orbitals.

+
+ +
+
+property c_cluster_vir
+

Virtual DMET cluster orbitals.

+
+ +
+
+property c_env
+
+ +
+
+property c_frag
+
+ +
+
+get_active_space(c_active=None)
+
+ +
+
+get_bath(bno_threshold=None, **kwargs)
+
+ +
+
+get_finite_bath_correction(c_active, c_frozen)
+
+ +
+
+kernel()
+
+ +
+
+property log
+
+ +
+
+make_bno_coeff(*args, **kwargs)
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+ +
+
+class vayesta.core.bath.bno.MP2_BNO_Bath(*args, project_dmet_order=0, project_dmet_mode='full', project_dmet=None, **kwargs)[source]
+

Bases: BNO_Bath

+
+
+get_eris_or_cderi(actspace)[source]
+
+ +
+
+make_delta_dm1(t2, actspace)[source]
+

Delta MP2 density matrix

+
+ +
+
+make_bno_coeff(eris=None)[source]
+

Construct MP2 bath natural orbital coefficients and occupation numbers.

+

This routine works for both for spin-restricted and unrestricted.

+
+
Parameters:
+

eris (mp2._ChemistERIs) –

+
+
Returns:
+

    +
  • c_bno ((n(AO), n(BNO)) array) – Bath natural orbital coefficients.

  • +
  • n_bno ((n(BNO)) array) – Bath natural orbital occupation numbers.

  • +
+

+
+
+
+ +
+
+property base
+
+ +
+
+property c_cluster_occ
+

Occupied DMET cluster orbitals.

+
+ +
+
+property c_cluster_vir
+

Virtual DMET cluster orbitals.

+
+ +
+
+property c_env
+
+ +
+
+property c_frag
+
+ +
+
+get_active_space(c_active=None)
+
+ +
+
+get_bath(bno_threshold=None, **kwargs)
+
+ +
+
+get_finite_bath_correction(c_active, c_frozen)
+
+ +
+
+kernel()
+
+ +
+
+property log
+
+ +
+
+log_histogram(n_bno)
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property ncluster
+
+ +
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+
+truncate_bno(coeff, occup, bno_threshold=None, verbose=True)
+

Split natural orbitals (NO) into bath and rest.

+
+ +
+ +
+
+class vayesta.core.bath.bno.UMP2_BNO_Bath(*args, project_dmet_order=0, project_dmet_mode='full', project_dmet=None, **kwargs)[source]
+

Bases: MP2_BNO_Bath, BNO_Bath_UHF

+
+
+make_delta_dm1(t2, actspace)[source]
+

Delta MP2 density matrix

+
+ +
+
+property base
+
+ +
+
+property c_cluster_occ
+

Occupied DMET cluster orbitals.

+
+ +
+
+property c_cluster_vir
+

Virtual DMET cluster orbitals.

+
+ +
+
+property c_env
+
+ +
+
+property c_frag
+
+ +
+
+get_active_space(c_active=None)
+
+ +
+
+get_bath(bno_threshold=None, **kwargs)
+
+ +
+
+get_eris_or_cderi(actspace)
+
+ +
+
+get_finite_bath_correction(c_active, c_frozen)
+
+ +
+
+kernel()
+
+ +
+
+property log
+
+ +
+
+log_histogram(n_bno)
+
+ +
+
+make_bno_coeff(eris=None)
+

Construct MP2 bath natural orbital coefficients and occupation numbers.

+

This routine works for both for spin-restricted and unrestricted.

+
+
Parameters:
+

eris (mp2._ChemistERIs) –

+
+
Returns:
+

    +
  • c_bno ((n(AO), n(BNO)) array) – Bath natural orbital coefficients.

  • +
  • n_bno ((n(BNO)) array) – Bath natural orbital occupation numbers.

  • +
+

+
+
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property ncluster
+
+ +
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+
+truncate_bno(coeff, occup, *args, **kwargs)
+

Split natural orbitals (NO) into bath and rest.

+
+ +
+ +
+
+

vayesta.core.bath.dmet

+
+
+class vayesta.core.bath.dmet.DMET_Bath_RHF(fragment, dmet_threshold=1e-06)[source]
+

Bases: Bath

+
+
+get_cluster_electrons()[source]
+

Number of cluster electrons.

+
+ +
+
+get_occupied_bath(*args, **kwargs)[source]
+

Inherited bath classes can overwrite this to return additional occupied bath orbitals.

+
+ +
+
+get_virtual_bath(*args, **kwargs)[source]
+

Inherited bath classes can overwrite this to return additional virtual bath orbitals.

+
+ +
+
+kernel()[source]
+
+ +
+
+get_environment()[source]
+
+ +
+
+make_dmet_bath(c_env, dm1=None, c_ref=None, nbath=None, verbose=True, reftol=0.8)[source]
+

Calculate DMET bath, occupied environment and virtual environment orbitals.

+

If c_ref is not None, complete DMET orbital space using active transformation of reference orbitals.

+

TODO: +* reftol should not be necessary - just determine how many DMET bath orbital N are missing +from C_ref and take the N largest eigenvalues over the combined occupied and virtual +eigenvalues.

+
+
Parameters:
+
    +
  • c_env ((n(AO), n(env)) array) – MO-coefficients of environment orbitals.

  • +
  • dm1 ((n(AO), n(AO)) array, optional) – Mean-field one-particle reduced density matrix in AO representation. If None, self.mf.make_rdm1() is used. +Default: None.

  • +
  • c_ref (ndarray, optional) – Reference DMET bath orbitals from previous calculation.

  • +
  • nbath (int, optional) – Number of DMET bath orbitals. If set, the parameter tol is ignored. Default: None.

  • +
  • tol (float, optional) – Tolerance for DMET orbitals in eigendecomposition of density-matrix. Default: 1e-5.

  • +
  • reftol (float, optional) – Tolerance for DMET orbitals in projection of reference orbitals.

  • +
+
+
Returns:
+

    +
  • c_bath ((n(AO), n(bath)) array) – DMET bath orbitals.

  • +
  • eig (n(bath) array) – DMET orbital occupation numbers (in [0,1]).

  • +
  • c_occenv ((n(AO), n(occ. env)) array) – Occupied environment orbitals.

  • +
  • c_virenv ((n(AO), n(vir. env)) array) – Virtual environment orbitals.

  • +
+

+
+
+
+ +
+
+make_dmet_bath_fast(c_env, dm1=None)[source]
+

Fast DMET orbitals. +from Ref. J. Chem. Phys. 151, 064108 (2019); https://doi.org/10.1063/1.5108818

+

Problem: How to get C_occenv and C_virenv without N^3 diagonalization?

+
+ +
+
+log_info(eig, c_env, threshold=1e-10)[source]
+
+ +
+
+use_ref_orbitals(c_bath, c_occenv, c_virenv, c_ref, reftol=0.8)[source]
+

Not maintained!

+
+ +
+
+property base
+
+ +
+
+property c_frag
+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+ +
+
+class vayesta.core.bath.dmet.DMET_Bath_UHF(fragment, dmet_threshold=1e-06)[source]
+

Bases: DMET_Bath_RHF

+
+
+get_cluster_electrons()[source]
+

Number of (alpha, beta) cluster electrons.

+
+ +
+
+get_occupied_bath(*args, **kwargs)[source]
+

Inherited bath classes can overwrite this to return additional occupied bath orbitals.

+
+ +
+
+get_virtual_bath(*args, **kwargs)[source]
+

Inherited bath classes can overwrite this to return additional virtual bath orbitals.

+
+ +
+
+make_dmet_bath(c_env, dm1=None, **kwargs)[source]
+

Calculate DMET bath, occupied environment and virtual environment orbitals.

+

If c_ref is not None, complete DMET orbital space using active transformation of reference orbitals.

+

TODO: +* reftol should not be necessary - just determine how many DMET bath orbital N are missing +from C_ref and take the N largest eigenvalues over the combined occupied and virtual +eigenvalues.

+
+
Parameters:
+
    +
  • c_env ((n(AO), n(env)) array) – MO-coefficients of environment orbitals.

  • +
  • dm1 ((n(AO), n(AO)) array, optional) – Mean-field one-particle reduced density matrix in AO representation. If None, self.mf.make_rdm1() is used. +Default: None.

  • +
  • c_ref (ndarray, optional) – Reference DMET bath orbitals from previous calculation.

  • +
  • nbath (int, optional) – Number of DMET bath orbitals. If set, the parameter tol is ignored. Default: None.

  • +
  • tol (float, optional) – Tolerance for DMET orbitals in eigendecomposition of density-matrix. Default: 1e-5.

  • +
  • reftol (float, optional) – Tolerance for DMET orbitals in projection of reference orbitals.

  • +
+
+
Returns:
+

    +
  • c_bath ((n(AO), n(bath)) array) – DMET bath orbitals.

  • +
  • eig (n(bath) array) – DMET orbital occupation numbers (in [0,1]).

  • +
  • c_occenv ((n(AO), n(occ. env)) array) – Occupied environment orbitals.

  • +
  • c_virenv ((n(AO), n(vir. env)) array) – Virtual environment orbitals.

  • +
+

+
+
+
+ +
+
+property base
+
+ +
+
+property c_frag
+
+ +
+
+get_environment()
+
+ +
+
+kernel()
+
+ +
+
+property log
+
+ +
+
+log_info(eig, c_env, threshold=1e-10)
+
+ +
+
+make_dmet_bath_fast(c_env, dm1=None)
+

Fast DMET orbitals. +from Ref. J. Chem. Phys. 151, 064108 (2019); https://doi.org/10.1063/1.5108818

+

Problem: How to get C_occenv and C_virenv without N^3 diagonalization?

+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+
+use_ref_orbitals(c_bath, c_occenv, c_virenv, c_ref, reftol=0.8)
+

Not maintained!

+
+ +
+ +
+
+

vayesta.core.bath.ewdmet

+
+
+class vayesta.core.bath.ewdmet.EwDMET_Bath_RHF(fragment, dmet_bath, occtype, *args, threshold=None, max_order=20, **kwargs)[source]
+

Bases: Bath

+
+
+get_fock(*args, **kwargs)[source]
+
+ +
+
+kernel()[source]
+
+ +
+
+property c_env
+
+ +
+
+get_bath(order)[source]
+
+ +
+
+property base
+
+ +
+
+property c_frag
+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+ +
+
+

vayesta.core.bath.full

+
+
+class vayesta.core.bath.full.Full_Bath_RHF(fragment, dmet_bath, occtype, *args, **kwargs)[source]
+

Bases: Bath

+
+
+property c_env
+
+ +
+
+get_bath(*args, **kwargs)[source]
+
+ +
+
+property base
+
+ +
+
+property c_frag
+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+ +
+
+class vayesta.core.bath.full.Full_Bath_UHF(fragment, dmet_bath, occtype, *args, **kwargs)[source]
+

Bases: Full_Bath_RHF

+
+
+get_bath(*args, **kwargs)[source]
+
+ +
+
+property base
+
+ +
+
+property c_env
+
+ +
+
+property c_frag
+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+ +
+
+

vayesta.core.bath.helper

+
+
+vayesta.core.bath.helper.make_histogram(values, bins, labels=None, binwidth=5, height=6, fill=':', show_number=False, invertx=True, rstrip=True)[source]
+
+ +
+
+vayesta.core.bath.helper.make_horizontal_histogram(values, bins=None, maxbarlength=50, invertx=True)[source]
+
+ +
+
+vayesta.core.bath.helper.transform_mp2_eris(eris, c_occ, c_vir, ovlp)[source]
+

Transform eris of kind (ov|ov) (occupied-virtual-occupied-virtual)

+

OBSOLETE: replaced by transform_eris

+
+ +
+
+

vayesta.core.bath.r2bath

+
+
+class vayesta.core.bath.r2bath.R2_Bath_RHF(fragment, dmet_bath, occtype, *args, **kwargs)[source]
+

Bases: Bath

+
+
+property c_env
+
+ +
+
+get_r2()[source]
+
+ +
+
+kernel()[source]
+
+ +
+
+get_bath(rcut, unit='Ang')[source]
+
+ +
+
+log_histogram(r, name)[source]
+
+ +
+
+property base
+
+ +
+
+property c_frag
+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property spin_restricted
+
+ +
+
+property spin_unrestricted
+
+ +
+
+property spinsym
+
+ +
+ +
+
+

Module contents

+
+
+vayesta.core.bath.DMET_Bath(fragment, *args, **kwargs)[source]
+
+ +
+
+vayesta.core.bath.EwDMET_Bath(fragment, *args, **kwargs)[source]
+
+ +
+
+vayesta.core.bath.MP2_Bath(fragment, *args, **kwargs)[source]
+
+ +
+
+vayesta.core.bath.R2_Bath(fragment, *args, **kwargs)[source]
+
+ +
+
+vayesta.core.bath.Full_Bath(fragment, *args, **kwargs)[source]
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.core.fragmentation.html b/apidoc/vayesta.core.fragmentation.html new file mode 100644 index 000000000..063dfae8a --- /dev/null +++ b/apidoc/vayesta.core.fragmentation.html @@ -0,0 +1,2970 @@ + + + + + + + vayesta.core.fragmentation — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.core.fragmentation

+
+

Submodules

+
+
+

vayesta.core.fragmentation.cas

+
+
+class vayesta.core.fragmentation.cas.CAS_Fragmentation(emb, add_symmetric=True, log=None)[source]
+

Bases: Fragmentation

+

Fragmentation into mean-field states.

+
+
+name = 'CAS'
+
+ +
+
+get_coeff()[source]
+

Return MO coefficients as “fragment” orbitals.

+
+ +
+
+get_labels()[source]
+

Abstract method.

+
+ +
+
+get_atom_indices_symbols(*args, **kwargs)[source]
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_orbital_indices_labels(orbitals)[source]
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+add_cas_fragment(ncas, nelec, name=None, degen_tol=1e-08, **kwargs)[source]
+

Create a single fragment containing a CAS.

+
+
Parameters:
+
    +
  • ncas (int) – Number of spatial orbitals within the fragment.

  • +
  • nelec (int) – Number of electrons within the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the orbital indices. Default: None.

  • +
+
+
+
+ +
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_env_coeff(indices)
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+get_frag_coeff(indices)
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_ovlp()
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+search_labels(labels)
+

Abstract method.

+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+class vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF(emb, add_symmetric=True, log=None)[source]
+

Bases: Fragmentation_UHF, CAS_Fragmentation

+
+
+get_labels()[source]
+

Abstract method.

+
+ +
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_cas_fragment(ncas, nelec, name=None, degen_tol=1e-08, **kwargs)
+

Create a single fragment containing a CAS.

+
+
Parameters:
+
    +
  • ncas (int) – Number of spatial orbitals within the fragment.

  • +
  • nelec (int) – Number of electrons within the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the orbital indices. Default: None.

  • +
+
+
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atom_indices_symbols(*args, **kwargs)
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_coeff()
+

Return MO coefficients as “fragment” orbitals.

+
+ +
+
+get_env_coeff(indices)
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+get_frag_coeff(indices)
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_orbital_indices_labels(orbitals)
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_ovlp()
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+name = 'CAS'
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+search_labels(labels)
+

Abstract method.

+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+

vayesta.core.fragmentation.fragmentation

+
+
+vayesta.core.fragmentation.fragmentation.check_orthonormal(log, mo_coeff, ovlp, mo_name='orbital', tol=1e-07)[source]
+

Check orthonormality of mo_coeff.

+

Supports both RHF and UHF.

+
+ +
+
+class vayesta.core.fragmentation.fragmentation.Fragmentation(emb, add_symmetric=True, log=None)[source]
+

Bases: object

+

Fragmentation for a quantum embedding method class.

+
+
+name = '<not set>'
+
+ +
+
+kernel()[source]
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)[source]
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)[source]
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)[source]
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_all_atomic_fragments(**kwargs)[source]
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_full_system(name='full-system', **kwargs)[source]
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')[source]
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')[source]
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')[source]
+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')[source]
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+get_ovlp()[source]
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+get_coeff()[source]
+

Abstract method.

+
+ +
+
+get_labels()[source]
+

Abstract method.

+
+ +
+
+search_labels(labels)[source]
+

Abstract method.

+
+ +
+
+get_atoms()[source]
+

Get the base atom for each fragment orbital.

+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)[source]
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)[source]
+
+ +
+
+get_atom_indices_symbols(atoms)[source]
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)[source]
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_orbital_indices_labels(orbitals)[source]
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)[source]
+
+ +
+
+get_frag_coeff(indices)[source]
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_env_coeff(indices)[source]
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+ +
+
+

vayesta.core.fragmentation.helper

+
+
+vayesta.core.fragmentation.helper.log_orbitals(logger, labels, ncol=8)[source]
+
+ +
+
+

vayesta.core.fragmentation.iao

+
+
+vayesta.core.fragmentation.iao.get_default_minao(basis)[source]
+
+ +
+
+class vayesta.core.fragmentation.iao.IAO_Fragmentation(*args, minao='auto', **kwargs)[source]
+

Bases: Fragmentation

+
+
+name = 'IAO'
+
+ +
+
+property n_iao
+
+ +
+
+get_coeff(mo_coeff=None, mo_occ=None, add_virtuals=True)[source]
+

Make intrinsic atomic orbitals (IAOs).

+
+
Returns:
+

c_iao – Orthonormalized IAO coefficients.

+
+
Return type:
+

(n(AO), n(IAO)) array

+
+
+
+ +
+
+check_nelectron(c_iao, mo_coeff, mo_occ)[source]
+
+ +
+
+get_labels()[source]
+

Get labels of IAOs.

+
+
Returns:
+

iao_labels – Orbital label (atom-id, atom symbol, nl string, m string) for each IAO.

+
+
Return type:
+

list of length nIAO

+
+
+
+ +
+
+search_labels(labels)[source]
+

Abstract method.

+
+ +
+
+get_virtual_coeff(c_iao, mo_coeff=None)[source]
+
+ +
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atom_indices_symbols(atoms)
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_env_coeff(indices)
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+get_frag_coeff(indices)
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_orbital_indices_labels(orbitals)
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_ovlp()
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+class vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF(*args, minao='auto', **kwargs)[source]
+

Bases: Fragmentation_UHF, IAO_Fragmentation

+
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_nelectron(c_iao, mo_coeff, mo_occ)
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atom_indices_symbols(atoms)
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_coeff(mo_coeff=None, mo_occ=None, add_virtuals=True)[source]
+

Abstract method.

+
+ +
+
+get_env_coeff(indices)
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+get_frag_coeff(indices)
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_labels()
+

Get labels of IAOs.

+
+
Returns:
+

iao_labels – Orbital label (atom-id, atom symbol, nl string, m string) for each IAO.

+
+
Return type:
+

list of length nIAO

+
+
+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_orbital_indices_labels(orbitals)
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_ovlp()
+
+ +
+
+get_virtual_coeff(c_iao, mo_coeff=None)
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+property n_iao
+
+ +
+
+name = 'IAO'
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+search_labels(labels)
+

Abstract method.

+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+

vayesta.core.fragmentation.iaopao

+
+
+class vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation(*args, **kwargs)[source]
+

Bases: IAO_Fragmentation

+
+
+name = 'IAO/PAO'
+
+ +
+
+get_pao_coeff(iao_coeff)[source]
+
+ +
+
+get_coeff(order=None)[source]
+

Make projected atomic orbitals (PAOs).

+
+ +
+
+get_labels(order=None)[source]
+

Get labels of IAOs.

+
+
Returns:
+

iao_labels – Orbital label (atom-id, atom symbol, nl string, m string) for each IAO.

+
+
Return type:
+

list of length nIAO

+
+
+
+ +
+
+search_labels(labels)[source]
+

Abstract method.

+
+ +
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_nelectron(c_iao, mo_coeff, mo_occ)
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atom_indices_symbols(atoms)
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_env_coeff(indices)
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+get_frag_coeff(indices)
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_orbital_indices_labels(orbitals)
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_ovlp()
+
+ +
+
+get_virtual_coeff(c_iao, mo_coeff=None)
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+property n_iao
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+class vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF(*args, **kwargs)[source]
+

Bases: IAOPAO_Fragmentation, IAO_Fragmentation_UHF

+
+
+get_coeff(order=None)[source]
+

Make projected atomic orbitals (PAOs).

+
+ +
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_nelectron(c_iao, mo_coeff, mo_occ)
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atom_indices_symbols(atoms)
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_env_coeff(indices)
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+get_frag_coeff(indices)
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_labels(order=None)
+

Get labels of IAOs.

+
+
Returns:
+

iao_labels – Orbital label (atom-id, atom symbol, nl string, m string) for each IAO.

+
+
Return type:
+

list of length nIAO

+
+
+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_orbital_indices_labels(orbitals)
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_ovlp()
+
+ +
+
+get_pao_coeff(iao_coeff)
+
+ +
+
+get_virtual_coeff(c_iao, mo_coeff=None)
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+property n_iao
+
+ +
+
+name = 'IAO/PAO'
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+search_labels(labels)
+

Abstract method.

+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+

vayesta.core.fragmentation.sao

+
+
+class vayesta.core.fragmentation.sao.SAO_Fragmentation(emb, add_symmetric=True, log=None)[source]
+

Bases: Fragmentation

+
+
+name = 'SAO'
+
+ +
+
+get_coeff()[source]
+

Abstract method.

+
+ +
+
+get_labels()[source]
+

Abstract method.

+
+ +
+
+search_labels(labels)[source]
+

Abstract method.

+
+ +
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atom_indices_symbols(atoms)
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_env_coeff(indices)
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+get_frag_coeff(indices)
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_orbital_indices_labels(orbitals)
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_ovlp()
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+class vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF(emb, add_symmetric=True, log=None)[source]
+

Bases: Fragmentation_UHF, SAO_Fragmentation

+
+
+get_coeff()[source]
+

Abstract method.

+
+ +
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atom_indices_symbols(atoms)
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_env_coeff(indices)
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+get_frag_coeff(indices)
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_labels()
+

Abstract method.

+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_orbital_indices_labels(orbitals)
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_ovlp()
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+name = 'SAO'
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+search_labels(labels)
+

Abstract method.

+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+

vayesta.core.fragmentation.site

+
+
+class vayesta.core.fragmentation.site.Site_Fragmentation(emb, add_symmetric=True, log=None)[source]
+

Bases: SAO_Fragmentation

+
+
+name = 'Site'
+
+ +
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atom_indices_symbols(atoms)
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_coeff()
+

Abstract method.

+
+ +
+
+get_env_coeff(indices)
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+get_frag_coeff(indices)
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_labels()
+

Abstract method.

+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_orbital_indices_labels(orbitals)
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_ovlp()
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+search_labels(labels)
+

Abstract method.

+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+class vayesta.core.fragmentation.site.Site_Fragmentation_UHF(emb, add_symmetric=True, log=None)[source]
+

Bases: SAO_Fragmentation_UHF

+
+
+name = 'Site'
+
+ +
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atom_indices_symbols(atoms)
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_coeff()
+

Abstract method.

+
+ +
+
+get_env_coeff(indices)
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+get_frag_coeff(indices)
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_labels()
+

Abstract method.

+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_orbital_indices_labels(orbitals)
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_ovlp()
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property nmo
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+search_labels(labels)
+

Abstract method.

+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+

vayesta.core.fragmentation.ufragmentation

+
+
+class vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF(emb, add_symmetric=True, log=None)[source]
+

Bases: Fragmentation

+

Fragmentation for unrestricted HF.

+
+
+property nmo
+
+ +
+
+get_frag_coeff(indices)[source]
+

Get fragment coefficients for a given set of orbital indices.

+
+ +
+
+get_env_coeff(indices)[source]
+

Get environment coefficients for a given set of orbital indices.

+
+ +
+
+add_all_atomic_fragments(**kwargs)
+

Create a single fragment for each atom in the system.

+
+
Parameters:
+

**kwargs – Additional keyword arguments are passed through to each fragment constructor.

+
+
+
+ +
+
+add_atomic_fragment(atoms, orbital_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple atoms, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • atoms (int, str, list[int], or list[str]) – Atom indices or symbols which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen atoms. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+add_atomshell_fragment(atoms, shells, **kwargs)
+
+ +
+
+add_full_system(name='full-system', **kwargs)
+
+ +
+
+add_orbital_fragment(orbitals, atom_filter=None, name=None, **kwargs)
+

Create a fragment of one or multiple orbitals, which will be solved by the embedding method.

+
+
Parameters:
+
    +
  • orbitals (int, str, list[int], or list[str]) – Orbital indices or labels which should be included in the fragment.

  • +
  • name (str, optional) – Name for the fragment. If None, a name is automatically generated from the chosen orbitals. Default: None.

  • +
  • **kwargs – Additional keyword arguments are passed through to the fragment constructor.

  • +
+
+
Returns:
+

Fragment object.

+
+
Return type:
+

Fragment

+
+
+
+ +
+
+check_orthonormal(mo_coeff, mo_name=None, tol=1e-07)
+
+ +
+
+get_atom_indices_symbols(atoms)
+

Convert a list of integer or strings to atom indices and symbols.

+
+ +
+
+get_atomic_fragment_indices(atoms, orbital_filter=None, name=None)
+

Get fragment indices for one atom or a set of atoms.

+
+
Parameters:
+
    +
  • atoms (list or int or str) – List of atom IDs or labels. For a single atom, a single integer or string can be passed as well.

  • +
  • orbital_filter (list, optional) – Additionally restrict fragment orbitals to a specific orbital type (e.g. ‘2p’). Default: None.

  • +
  • name (str, optional) – Name for fragment.

  • +
+
+
Returns:
+

    +
  • name (str) – Name of fragment.

  • +
  • indices (list) – List of fragment orbitals indices, with coefficients corresponding to self.coeff[:,indices].

  • +
+

+
+
+
+ +
+
+get_atoms()
+

Get the base atom for each fragment orbital.

+
+ +
+
+get_coeff()
+

Abstract method.

+
+ +
+
+get_labels()
+

Abstract method.

+
+ +
+
+get_orbital_fragment_indices(orbitals, atom_filter=None, name=None)
+
+ +
+
+get_orbital_indices_labels(orbitals)
+

Convert a list of integer or strings to orbital indices and labels.

+
+ +
+
+get_ovlp()
+
+ +
+
+inversion_symmetry(center=(0, 0, 0), unit='Ang')
+
+ +
+
+kernel()
+
+ +
+
+property mf
+
+ +
+
+mirror_symmetry(axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+property mo_coeff
+
+ +
+
+property mo_occ
+
+ +
+
+property mol
+
+ +
+
+name = '<not set>'
+
+ +
+
+property nao
+
+ +
+
+rotational_symmetry(order, axis, center=(0, 0, 0), unit='Ang')
+
+ +
+
+search_labels(labels)
+

Abstract method.

+
+ +
+
+secondary_fragments(bno_threshold=None, bno_threshold_factor=0.1, solver='MP2')
+
+ +
+
+symmetric_orth(mo_coeff, ovlp=None, tol=1e-15)
+

Use as mo_coeff = np.dot(mo_coeff, x) to get orthonormal orbitals.

+
+ +
+ +
+
+

Module contents

+
+
+vayesta.core.fragmentation.SAO_Fragmentation(emb, *args, **kwargs)[source]
+
+ +
+
+vayesta.core.fragmentation.Site_Fragmentation(emb, *args, **kwargs)[source]
+
+ +
+
+vayesta.core.fragmentation.IAO_Fragmentation(emb, *args, **kwargs)[source]
+
+ +
+
+vayesta.core.fragmentation.IAOPAO_Fragmentation(emb, *args, **kwargs)[source]
+
+ +
+
+vayesta.core.fragmentation.CAS_Fragmentation(emb, *args, **kwargs)[source]
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.core.html b/apidoc/vayesta.core.html new file mode 100644 index 000000000..254d8a254 --- /dev/null +++ b/apidoc/vayesta.core.html @@ -0,0 +1,5033 @@ + + + + + + + vayesta.core — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.core

+
+

Subpackages

+
+ +
+
+
+

Submodules

+
+
+

vayesta.core.cmdargs

+
+
+vayesta.core.cmdargs.parse_cmd_args()[source]
+
+ +
+
+

vayesta.core.foldscf

+
+
+vayesta.core.foldscf.fold_scf(kmf, *args, **kwargs)[source]
+

Fold k-point sampled mean-field object to Born-von Karman (BVK) supercell. +See also FoldedSCF.

+
+ +
+
+class vayesta.core.foldscf.FoldedSCF(kmf, kpt=array([0., 0., 0.]), **kwargs)[source]
+

Bases: object

+

Fold k-point sampled SCF calculation to the BVK (Born-von Karman) supercell.

+

This class automatically updates the attributes mo_energy, mo_coeff, mo_occ, e_tot, and converged. +It also overwrites the methods get_ovlp, get_hcore, and get_veff, +calling its more efficient k-space variant first and folding the result to the supercell.

+

Since get_hcore and get_veff are implemented, get_fock is supported automatically, +if the inherited base SCF class implements it.

+
+
+kmf
+

Converged k-point sampled mean-field calculation.

+
+
Type:
+

pyscf.pbc.gto.KRHF or pyscf.pbc.gto.KRHF

+
+
+
+ +
+
+kcell
+

Primitive unit cell object.

+
+
Type:
+

pyscf.pbc.gto.Cell

+
+
+
+ +
+
+ncells
+

Number of primitive unit cells within BVK supercell

+
+
Type:
+

int

+
+
+
+ +
+
+kphase
+

Transformation matrix between k-point and BVK quantities.

+
+
Type:
+

(ncells, ncells) array

+
+
+
+ +
+
+property e_tot
+
+ +
+
+property ncells
+
+ +
+
+property kcell
+
+ +
+
+get_ovlp(*args, **kwargs)[source]
+
+ +
+
+get_hcore(*args, make_real=True, **kwargs)[source]
+
+ +
+
+get_veff(mol=None, dm=None, *args, make_real=True, **kwargs)[source]
+
+ +
+ +
+
+class vayesta.core.foldscf.FoldedRHF(kmf, *args, **kwargs)[source]
+

Bases: FoldedSCF, RHF

+

Fold k-point sampled SCF calculation to the BVK (Born-von Karman) supercell.

+

This class automatically updates the attributes mo_energy, mo_coeff, mo_occ, e_tot, and converged. +It also overwrites the methods get_ovlp, get_hcore, and get_veff, +calling its more efficient k-space variant first and folding the result to the supercell.

+

Since get_hcore and get_veff are implemented, get_fock is supported automatically, +if the inherited base SCF class implements it.

+
+
+kmf
+

Converged k-point sampled mean-field calculation.

+
+
Type:
+

pyscf.pbc.gto.KRHF or pyscf.pbc.gto.KRHF

+
+
+
+ +
+
+kcell
+

Primitive unit cell object.

+
+
Type:
+

pyscf.pbc.gto.Cell

+
+
+
+ +
+
+ncells
+

Number of primitive unit cells within BVK supercell

+
+
Type:
+

int

+
+
+
+ +
+
+kphase
+

Transformation matrix between k-point and BVK quantities.

+
+
Type:
+

(ncells, ncells) array

+
+
+
+ +
+
+DIIS
+

alias of CDIIS

+
+ +
+
+add_keys(**kwargs)
+

Add or update attributes of the object and register these attributes in ._keys

+
+ +
+
+analyze(verbose=None, with_meta_lowdin=True, **kwargs)
+

Analyze the given SCF object: print orbital energies, occupancies; +print orbital coefficients; Mulliken population analysis; Diople moment.

+
+ +
+
+apply(fn, *args, **kwargs)
+

Apply the fn to rest arguments: return fn(*args, **kwargs). The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+as_scanner()
+

Generating a scanner/solver for HF PES.

+

The returned solver is a function. This function requires one argument +“mol” as input and returns total HF energy.

+

The solver will automatically use the results of last calculation as the +initial guess of the new calculation. All parameters assigned in the +SCF object (DIIS, conv_tol, max_memory etc) are automatically applied in +the solver.

+

Note scanner has side effects. It may change many underlying objects +(_scf, with_df, with_x2c, …) during calculation.

+

Examples:

+
>>> from pyscf import gto, scf
+>>> hf_scanner = scf.RHF(gto.Mole().set(verbose=0)).as_scanner()
+>>> hf_scanner(gto.M(atom='H 0 0 0; F 0 0 1.1'))
+-98.552190448277955
+>>> hf_scanner(gto.M(atom='H 0 0 0; F 0 0 1.5'))
+-98.414750424294368
+
+
+
+ +
+
+build(cell=None)
+
+ +
+
+canonicalize(mo_coeff, mo_occ, fock=None)
+

Canonicalization diagonalizes the Fock matrix within occupied, open, +virtual subspaces separatedly (without change occupancy).

+
+ +
+
+check_convergence = None
+
+ +
+
+check_sanity()
+

Check input of class/object attributes, check whether a class method is +overwritten. It does not check the attributes which are prefixed with +“_”. The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+conv_check = True
+
+ +
+
+conv_tol = 1e-09
+
+ +
+
+conv_tol_grad = None
+
+ +
+
+convert_from_(mf)
+

Convert given mean-field object to RHF

+
+ +
+
+damp = 0
+
+ +
+
+property damp_factor
+
+ +
+
+density_fit(auxbasis=None, with_df=None)
+
+ +
+
+diis = True
+
+ +
+
+diis_file = None
+
+ +
+
+diis_space = 8
+
+ +
+
+diis_space_rollback = 0
+
+ +
+
+diis_start_cycle = 1
+
+ +
+
+dip_moment(cell=None, dm=None, unit='Debye', verbose=3, **kwargs)
+

Dipole moment in the cell (is it well defined)?

+
+
Parameters:
+
    +
  • cell – an instance of Cell

  • +
  • dm (ndarray) – density matrix

  • +
+
+
Returns:
+

the dipole moment on x, y and z components

+
+
Return type:
+

A list

+
+
+
+ +
+
+direct_scf = False
+
+ +
+
+direct_scf_tol = 1e-13
+
+ +
+
+dump_chk(envs)
+
+ +
+
+dump_flags(verbose=None)
+
+ +
+
+dump_scf_summary(verbose=5)
+
+ +
+
+property e_tot
+
+ +
+
+eig(h, s)
+

Solver for generalized eigenvalue problem

+
+\[HC = SCE\]
+
+ +
+
+energy_elec(dm=None, h1e=None, vhf=None)
+

Electronic part of Hartree-Fock energy, for given core hamiltonian and +HF potential

+

… math:

+
E = \sum_{ij}h_{ij} \gamma_{ji}
+  + \frac{1}{2}\sum_{ijkl} \gamma_{ji}\gamma_{lk} \langle ik||jl\rangle
+
+
+

Note this function has side effects which cause mf.scf_summary updated.

+
+
Parameters:
+

mf – an instance of SCF class

+
+
+
+
Kwargs:
+
dm2D ndarray

one-partical density matrix

+
+
h1e2D ndarray

Core hamiltonian

+
+
vhf2D ndarray

HF potential

+
+
+
+
+
+
Returns:
+

Hartree-Fock electronic energy and the Coulomb energy

+
+
+

Examples:

+
>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; H 0 0 1.1')
+>>> mf = scf.RHF(mol)
+>>> mf.scf()
+>>> dm = mf.make_rdm1()
+>>> scf.hf.energy_elec(mf, dm)
+(-1.5176090667746334, 0.60917167853723675)
+>>> mf.energy_elec(dm)
+(-1.5176090667746334, 0.60917167853723675)
+
+
+
+ +
+
+energy_nuc()
+
+ +
+
+energy_tot(dm=None, h1e=None, vhf=None)
+

Total Hartree-Fock energy, electronic part plus nuclear repulstion +See scf.hf.energy_elec() for the electron part

+

Note this function has side effects which cause mf.scf_summary updated.

+
+ +
+
+from_chk(chk=None, project=None, kpt=None)
+

Read the HF results from checkpoint file, then project it to the +basis defined by mol

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+gen_response(mo_coeff=None, mo_occ=None, singlet=None, hermi=0, max_memory=None)
+
+ +
+
+get_bands(kpts_band, cell=None, dm=None, kpt=None)
+

Get energy bands at the given (arbitrary) ‘band’ k-points.

+
+
Returns:
+

+
(nmo,) ndarray or a list of (nmo,) ndarray

Bands energies E_n(k)

+
+
mo_coeff(nao, nmo) ndarray or a list of (nao,nmo) ndarray

Band orbitals psi_n(k)

+
+
+

+
+
Return type:
+

mo_energy

+
+
+
+ +
+
+get_fock(h1e=None, s1e=None, vhf=None, dm=None, cycle=-1, diis=None, diis_start_cycle=None, level_shift_factor=None, damp_factor=None)
+

F = h^{core} + V^{HF}

+

Special treatment (damping, DIIS, or level shift) will be applied to the +Fock matrix if diis and cycle is specified (The two parameters are passed +to get_fock function during the SCF iteration)

+
+
Kwargs:
+
h1e2D ndarray

Core hamiltonian

+
+
s1e2D ndarray

Overlap matrix, for DIIS

+
+
vhf2D ndarray

HF potential matrix

+
+
dm2D ndarray

Density matrix, for DIIS

+
+
cycleint

Then present SCF iteration step, for DIIS

+
+
diisan object of SCF.DIIS class

DIIS object to hold intermediate Fock and error vectors

+
+
diis_start_cycleint

The step to start DIIS. Default is 0.

+
+
level_shift_factorfloat or int

Level shift (in AU) for virtual space. Default is 0.

+
+
+
+
+
+ +
+
+get_grad(mo_coeff, mo_occ, fock=None)
+

RHF orbital gradients

+
+
Parameters:
+
    +
  • mo_coeff – 2D ndarray +Obital coefficients

  • +
  • mo_occ – 1D ndarray +Orbital occupancy

  • +
  • fock_ao – 2D ndarray +Fock matrix in AO representation

  • +
+
+
Returns:
+

Gradients in MO representation. It’s a num_occ*num_vir vector.

+
+
+
+ +
+
+get_hcore(*args, make_real=True, **kwargs)
+
+ +
+
+get_init_guess(cell=None, key='minao')
+
+ +
+
+get_j(cell=None, dm=None, hermi=1, kpt=None, kpts_band=None, omega=None)
+

Compute J matrix for the given density matrix and k-point (kpt). +When kpts_band is given, the J matrices on kpts_band are evaluated.

+
+

J_{pq} = sum_{rs} (pq|rs) dm[s,r]

+
+

where r,s are orbitals on kpt. p and q are orbitals on kpts_band +if kpts_band is given otherwise p and q are orbitals on kpt.

+
+ +
+
+get_jk(cell=None, dm=None, hermi=1, kpt=None, kpts_band=None, with_j=True, with_k=True, omega=None, **kwargs)
+

Get Coulomb (J) and exchange (K) following scf.hf.RHF.get_jk_(). +for particular k-point (kpt).

+

When kpts_band is given, the J, K matrices on kpts_band are evaluated.

+
+

J_{pq} = sum_{rs} (pq|rs) dm[s,r] +K_{pq} = sum_{rs} (pr|sq) dm[r,s]

+
+

where r,s are orbitals on kpt. p and q are orbitals on kpts_band +if kpts_band is given otherwise p and q are orbitals on kpt.

+
+ +
+
+get_jk_incore(cell=None, dm=None, hermi=1, kpt=None, omega=None, **kwargs)
+

Get Coulomb (J) and exchange (K) following scf.hf.RHF.get_jk_().

+

Incore version of Coulomb and exchange build only. +Currently RHF always uses PBC AO integrals (unlike RKS), since +exchange is currently computed by building PBC AO integrals.

+
+ +
+
+get_k(cell=None, dm=None, hermi=1, kpt=None, kpts_band=None, omega=None)
+

Compute K matrix for the given density matrix.

+
+ +
+
+get_occ(mo_energy=None, mo_coeff=None)
+

Label the occupancies for each orbital

+
+
Kwargs:
+
mo_energy1D ndarray

Obital energies

+
+
mo_coeff2D ndarray

Obital coefficients

+
+
+
+
+

Examples:

+
>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> energy = numpy.array([-10., -1., 1, -2., 0, -3])
+>>> mf.get_occ(energy)
+array([2, 2, 0, 2, 2, 2])
+
+
+
+ +
+
+get_ovlp(*args, **kwargs)
+
+ +
+
+get_rho(dm=None, grids=None, kpt=None)
+

Compute density in real space

+
+ +
+
+get_veff(mol=None, dm=None, *args, make_real=True, **kwargs)
+

Hartree-Fock potential matrix for the given density matrix. +See scf.hf.get_veff() and scf.hf.RHF.get_veff()

+
+ +
+
+property hf_energy
+
+ +
+
+init_direct_scf(mol=None)
+
+ +
+
+init_guess = 'minao'
+
+ +
+
+init_guess_by_1e(cell=None)
+

Generate initial guess density matrix from core hamiltonian

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_atom(mol=None)
+

Generate initial guess density matrix from superposition of atomic HF +density matrix. The atomic HF is occupancy averaged RHF

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_chkfile(chk=None, project=None, kpt=None)
+

Read the HF results from checkpoint file, then project it to the +basis defined by mol

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_huckel(mol=None)
+

Generate initial guess density matrix from a Huckel calculation based +on occupancy averaged atomic RHF calculations, doi:10.1021/acs.jctc.8b01089

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_minao(mol=None)
+

Generate initial guess density matrix based on ANO basis, then project +the density matrix to the basis set defined by mol

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+

Examples:

+
>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; H 0 0 1.1')
+>>> scf.hf.init_guess_by_minao(mol)
+array([[ 0.94758917,  0.09227308],
+       [ 0.09227308,  0.94758917]])
+
+
+
+ +
+
+jk_method(J='FFTDF', K=None)
+

Set up the schemes to evaluate Coulomb and exchange matrix

+

FFTDF: planewave density fitting using Fast Fourier Transform +AFTDF: planewave density fitting using analytic Fourier Transform +GDF: Gaussian density fitting +MDF: Gaussian and planewave mix density fitting +RS: range-separation JK builder +RSDF: range-separation density fitting

+
+ +
+
+property kcell
+
+ +
+
+kernel(dm0=None, **kwargs)
+

SCF main driver

+
+
Kwargs:
+
dm0ndarray

If given, it will be used as the initial guess density matrix

+
+
+
+
+

Examples:

+
>>> import numpy
+>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> dm_guess = numpy.eye(mol.nao_nr())
+>>> mf.kernel(dm_guess)
+converged SCF energy = -98.5521904482821
+-98.552190448282104
+
+
+
+ +
+
+property kpt
+
+ +
+
+level_shift = 0
+
+ +
+
+property level_shift_factor
+
+ +
+
+make_rdm1(mo_coeff=None, mo_occ=None, **kwargs)
+

One-particle density matrix in AO representation

+
+
Parameters:
+
    +
  • mo_coeff – 2D ndarray +Orbital coefficients. Each column is one orbital.

  • +
  • mo_occ – 1D ndarray +Occupancy

  • +
+
+
Returns:
+

One-particle density matrix, 2D ndarray

+
+
+
+ +
+
+make_rdm2(mo_coeff=None, mo_occ=None, **kwargs)
+

Two-particle density matrix in AO representation

+
+
Parameters:
+
    +
  • mo_coeff – 2D ndarray +Orbital coefficients. Each column is one orbital.

  • +
  • mo_occ – 1D ndarray +Occupancy

  • +
+
+
Returns:
+

Two-particle density matrix, 4D ndarray

+
+
+
+ +
+
+max_cycle = 50
+
+ +
+
+mix_density_fit(auxbasis=None, with_df=None)
+
+ +
+
+mulliken_meta(mol=None, dm=None, verbose=5, pre_orth_method='ANO', s=None)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+mulliken_pop(mol=None, dm=None, s=None, verbose=5)
+

Mulliken population analysis

+
+\[M_{ij} = D_{ij} S_{ji}\]
+

Mulliken charges

+
+\[\delta_i = \sum_j M_{ij}\]
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+mulliken_pop_meta_lowdin_ao(*args, **kwargs)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+property ncells
+
+ +
+
+newton()
+

Create an SOSCF object based on the mean-field object

+
+ +
+
+nuc_grad_method(*args, **kwargs)
+

Hook to create object for analytical nuclear gradients.

+
+ +
+
+pop(*args, **kwargs)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+post_kernel(envs)
+

A hook to be run after the main body of the kernel function. Internal +variables are exposed to post_kernel through the “envs” dictionary. +Return value of post_kernel function is not required.

+
+ +
+
+pre_kernel(envs)
+

A hook to be run before the main body of kernel function is executed. +Internal variables are exposed to pre_kernel through the “envs” +dictionary. Return value of pre_kernel function is not required.

+
+ +
+
+remove_soscf()
+

Remove the SOSCF decorator

+
+ +
+
+reset(cell=None)
+

Reset cell and relevant attributes associated to the old cell object

+
+ +
+
+rs_density_fit(auxbasis=None, with_df=None)
+
+ +
+
+run(*args, **kwargs)
+

Call the kernel function of current object. args will be passed +to kernel function. kwargs will be used to update the attributes of +current object. The return value of method run is the object itself. +This allows a series of functions/methods to be executed in pipe.

+
+ +
+
+scf(dm0=None, **kwargs)
+

SCF main driver

+
+
Kwargs:
+
dm0ndarray

If given, it will be used as the initial guess density matrix

+
+
+
+
+

Examples:

+
>>> import numpy
+>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> dm_guess = numpy.eye(mol.nao_nr())
+>>> mf.kernel(dm_guess)
+converged SCF energy = -98.5521904482821
+-98.552190448282104
+
+
+
+ +
+
+set(*args, **kwargs)
+

Update the attributes of the current object. The return value of +method set is the object itself. This allows a series of +functions/methods to be executed in pipe.

+
+ +
+
+sfx2c1e()
+
+ +
+
+spin_square(mo_coeff=None, s=None)
+

Spin square and multiplicity of RHF determinant

+
+ +
+
+stability(internal=True, external=False, verbose=None, return_status=False)
+

RHF/RKS stability analysis.

+

See also pyscf.scf.stability.rhf_stability function.

+
+
Kwargs:
+
internalbool

Internal stability, within the RHF optimization space.

+
+
externalbool

External stability. Including the RHF -> UHF and real -> complex +stability analysis.

+
+
return_status: bool

Whether to return stable_i and stable_e

+
+
+
+
+
+
Returns:
+

If return_status is False (default), the return value includes +two set of orbitals, which are more close to the stable condition. +The first corresponds to the internal stability +and the second corresponds to the external stability.

+

Else, another two boolean variables (indicating current status: +stable or unstable) are returned. +The first corresponds to the internal stability +and the second corresponds to the external stability.

+

+
+
+
+ +
+
+stdout = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
+
+ +
+
+to_ghf(mf)
+

Convert the input mean-field object to a GHF/GKS object

+
+ +
+
+to_gks(xc='HF')
+

Convert the input mean-field object to a GKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_ks(xc='HF')
+

Convert the input mean-field object to the associated KS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_rhf(mf)
+

Convert the input mean-field object to a RHF/ROHF/RKS/ROKS object

+
+ +
+
+to_rks(xc='HF')
+

Convert the input mean-field object to a RKS/ROKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_uhf(mf)
+

Convert the input mean-field object to a UHF/UKS object

+
+ +
+
+to_uks(xc='HF')
+

Convert the input mean-field object to a UKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+update(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_from_chk(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_from_chk_(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+verbose = 0
+
+ +
+
+view(cls)
+

New view of object with the same attributes.

+
+ +
+
+x2c()
+
+ +
+
+x2c1e()
+
+ +
+ +
+
+class vayesta.core.foldscf.FoldedUHF(kmf, *args, **kwargs)[source]
+

Bases: FoldedSCF, UHF

+

Fold k-point sampled SCF calculation to the BVK (Born-von Karman) supercell.

+

This class automatically updates the attributes mo_energy, mo_coeff, mo_occ, e_tot, and converged. +It also overwrites the methods get_ovlp, get_hcore, and get_veff, +calling its more efficient k-space variant first and folding the result to the supercell.

+

Since get_hcore and get_veff are implemented, get_fock is supported automatically, +if the inherited base SCF class implements it.

+
+
+kmf
+

Converged k-point sampled mean-field calculation.

+
+
Type:
+

pyscf.pbc.gto.KRHF or pyscf.pbc.gto.KRHF

+
+
+
+ +
+
+kcell
+

Primitive unit cell object.

+
+
Type:
+

pyscf.pbc.gto.Cell

+
+
+
+ +
+
+ncells
+

Number of primitive unit cells within BVK supercell

+
+
Type:
+

int

+
+
+
+ +
+
+kphase
+

Transformation matrix between k-point and BVK quantities.

+
+
Type:
+

(ncells, ncells) array

+
+
+
+ +
+
+DIIS
+

alias of CDIIS

+
+ +
+
+add_keys(**kwargs)
+

Add or update attributes of the object and register these attributes in ._keys

+
+ +
+
+analyze(verbose=None, with_meta_lowdin=True, **kwargs)
+

Analyze the given SCF object: print orbital energies, occupancies; +print orbital coefficients; Mulliken population analysis; Diople moment.

+
+ +
+
+apply(fn, *args, **kwargs)
+

Apply the fn to rest arguments: return fn(*args, **kwargs). The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+as_scanner()
+

Generating a scanner/solver for HF PES.

+

The returned solver is a function. This function requires one argument +“mol” as input and returns total HF energy.

+

The solver will automatically use the results of last calculation as the +initial guess of the new calculation. All parameters assigned in the +SCF object (DIIS, conv_tol, max_memory etc) are automatically applied in +the solver.

+

Note scanner has side effects. It may change many underlying objects +(_scf, with_df, with_x2c, …) during calculation.

+

Examples:

+
>>> from pyscf import gto, scf
+>>> hf_scanner = scf.RHF(gto.Mole().set(verbose=0)).as_scanner()
+>>> hf_scanner(gto.M(atom='H 0 0 0; F 0 0 1.1'))
+-98.552190448277955
+>>> hf_scanner(gto.M(atom='H 0 0 0; F 0 0 1.5'))
+-98.414750424294368
+
+
+
+ +
+
+build(cell=None)
+
+ +
+
+canonicalize(mo_coeff, mo_occ, fock=None)
+

Canonicalization diagonalizes the UHF Fock matrix within occupied, +virtual subspaces separatedly (without change occupancy).

+
+ +
+
+check_convergence = None
+
+ +
+
+check_sanity()
+

Check input of class/object attributes, check whether a class method is +overwritten. It does not check the attributes which are prefixed with +“_”. The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+conv_check = True
+
+ +
+
+conv_tol = 1e-09
+
+ +
+
+conv_tol_grad = None
+
+ +
+
+convert_from_(mf)
+

Convert given mean-field object to RHF/ROHF

+
+ +
+
+damp = 0
+
+ +
+
+property damp_factor
+
+ +
+
+density_fit(auxbasis=None, with_df=None)
+
+ +
+
+det_ovlp(mo1, mo2, occ1, occ2, ovlp=None)
+

Calculate the overlap between two different determinants. It is the product +of single values of molecular orbital overlap matrix.

+
+\[S_{12} = \langle \Psi_A | \Psi_B \rangle += (\mathrm{det}\mathbf{U}) (\mathrm{det}\mathbf{V^\dagger}) + \prod\limits_{i=1}\limits^{2N} \lambda_{ii}\]
+

where \(\mathbf{U}, \mathbf{V}, \lambda\) are unitary matrices and single +values generated by single value decomposition(SVD) of the overlap matrix +\(\mathbf{O}\) which is the overlap matrix of two sets of molecular orbitals:

+
+\[\mathbf{U}^\dagger \mathbf{O} \mathbf{V} = \mathbf{\Lambda}\]
+
+
Parameters:
+
    +
  • mo1 – 2D ndarrays +Molecualr orbital coefficients

  • +
  • mo2 – 2D ndarrays +Molecualr orbital coefficients

  • +
  • occ1 – 2D ndarrays +occupation numbers

  • +
  • occ2 – 2D ndarrays +occupation numbers

  • +
+
+
Returns:
+

the product of single values: float +(x_a, x_b): 1D ndarrays +\(\mathbf{U} \mathbf{\Lambda}^{-1} \mathbf{V}^\dagger\) +They are used to calculate asymmetric density matrix

+
+
Return type:
+

A list

+
+
+
+ +
+
+diis = True
+
+ +
+
+diis_file = None
+
+ +
+
+diis_space = 8
+
+ +
+
+diis_space_rollback = 0
+
+ +
+
+diis_start_cycle = 1
+
+ +
+
+dip_moment(cell=None, dm=None, unit='Debye', verbose=3, **kwargs)
+

Dipole moment in the cell.

+
+
Parameters:
+
    +
  • cell – an instance of Cell

  • +
  • dm_kpts (a list of ndarrays) – density matrices of k-points

  • +
+
+
Returns:
+

the dipole moment on x, y and z components

+
+
Return type:
+

A list

+
+
+
+ +
+
+direct_scf = False
+
+ +
+
+direct_scf_tol = 1e-13
+
+ +
+
+dump_chk(envs)
+
+ +
+
+dump_flags(verbose=None)
+
+ +
+
+dump_scf_summary(verbose=5)
+
+ +
+
+property e_tot
+
+ +
+
+eig(fock, s)
+

Solver for generalized eigenvalue problem

+
+\[HC = SCE\]
+
+ +
+
+energy_elec(dm=None, h1e=None, vhf=None)
+

Electronic energy of Unrestricted Hartree-Fock

+

Note this function has side effects which cause mf.scf_summary updated.

+
+
Returns:
+

Hartree-Fock electronic energy and the 2-electron part contribution

+
+
+
+ +
+
+energy_nuc()
+
+ +
+
+energy_tot(dm=None, h1e=None, vhf=None)
+

Total Hartree-Fock energy, electronic part plus nuclear repulstion +See scf.hf.energy_elec() for the electron part

+

Note this function has side effects which cause mf.scf_summary updated.

+
+ +
+
+from_chk(chk=None, project=None, kpt=None)
+

Read the HF results from checkpoint file, then project it to the +basis defined by mol

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+gen_response(mo_coeff=None, mo_occ=None, with_j=True, hermi=0, max_memory=None)
+
+ +
+
+get_bands(kpts_band, cell=None, dm=None, kpt=None)
+

Get energy bands at the given (arbitrary) ‘band’ k-points.

+
+
Returns:
+

+
(nmo,) ndarray or a list of (nmo,) ndarray

Bands energies E_n(k)

+
+
mo_coeff(nao, nmo) ndarray or a list of (nao,nmo) ndarray

Band orbitals psi_n(k)

+
+
+

+
+
Return type:
+

mo_energy

+
+
+
+ +
+
+get_fock(h1e=None, s1e=None, vhf=None, dm=None, cycle=-1, diis=None, diis_start_cycle=None, level_shift_factor=None, damp_factor=None)
+

F = h^{core} + V^{HF}

+

Special treatment (damping, DIIS, or level shift) will be applied to the +Fock matrix if diis and cycle is specified (The two parameters are passed +to get_fock function during the SCF iteration)

+
+
Kwargs:
+
h1e2D ndarray

Core hamiltonian

+
+
s1e2D ndarray

Overlap matrix, for DIIS

+
+
vhf2D ndarray

HF potential matrix

+
+
dm2D ndarray

Density matrix, for DIIS

+
+
cycleint

Then present SCF iteration step, for DIIS

+
+
diisan object of SCF.DIIS class

DIIS object to hold intermediate Fock and error vectors

+
+
diis_start_cycleint

The step to start DIIS. Default is 0.

+
+
level_shift_factorfloat or int

Level shift (in AU) for virtual space. Default is 0.

+
+
+
+
+
+ +
+
+get_grad(mo_coeff, mo_occ, fock=None)
+

RHF orbital gradients

+
+
Parameters:
+
    +
  • mo_coeff – 2D ndarray +Obital coefficients

  • +
  • mo_occ – 1D ndarray +Orbital occupancy

  • +
  • fock_ao – 2D ndarray +Fock matrix in AO representation

  • +
+
+
Returns:
+

Gradients in MO representation. It’s a num_occ*num_vir vector.

+
+
+
+ +
+
+get_hcore(*args, make_real=True, **kwargs)
+
+ +
+
+get_init_guess(cell=None, key='minao')
+
+ +
+
+get_j(cell=None, dm=None, hermi=1, kpt=None, kpts_band=None, omega=None)
+

Compute J matrix for the given density matrix and k-point (kpt). +When kpts_band is given, the J matrices on kpts_band are evaluated.

+
+

J_{pq} = sum_{rs} (pq|rs) dm[s,r]

+
+

where r,s are orbitals on kpt. p and q are orbitals on kpts_band +if kpts_band is given otherwise p and q are orbitals on kpt.

+
+ +
+
+get_jk(cell=None, dm=None, hermi=1, kpt=None, kpts_band=None, with_j=True, with_k=True, omega=None, **kwargs)
+

Get Coulomb (J) and exchange (K) following scf.hf.RHF.get_jk_(). +for particular k-point (kpt).

+

When kpts_band is given, the J, K matrices on kpts_band are evaluated.

+
+

J_{pq} = sum_{rs} (pq|rs) dm[s,r] +K_{pq} = sum_{rs} (pr|sq) dm[r,s]

+
+

where r,s are orbitals on kpt. p and q are orbitals on kpts_band +if kpts_band is given otherwise p and q are orbitals on kpt.

+
+ +
+
+get_jk_incore(cell=None, dm=None, hermi=1, kpt=None, omega=None, **kwargs)
+

Get Coulomb (J) and exchange (K) following scf.hf.RHF.get_jk_().

+

Incore version of Coulomb and exchange build only. +Currently RHF always uses PBC AO integrals (unlike RKS), since +exchange is currently computed by building PBC AO integrals.

+
+ +
+
+get_k(cell=None, dm=None, hermi=1, kpt=None, kpts_band=None, omega=None)
+

Compute K matrix for the given density matrix.

+
+ +
+
+get_occ(mo_energy=None, mo_coeff=None)
+

Label the occupancies for each orbital

+
+
Kwargs:
+
mo_energy1D ndarray

Obital energies

+
+
mo_coeff2D ndarray

Obital coefficients

+
+
+
+
+

Examples:

+
>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> energy = numpy.array([-10., -1., 1, -2., 0, -3])
+>>> mf.get_occ(energy)
+array([2, 2, 0, 2, 2, 2])
+
+
+
+ +
+
+get_ovlp(*args, **kwargs)
+
+ +
+
+get_rho(dm=None, grids=None, kpt=None)
+

Compute density in real space

+
+ +
+
+get_veff(mol=None, dm=None, *args, make_real=True, **kwargs)
+

Hartree-Fock potential matrix for the given density matrix. +See scf.hf.get_veff() and scf.hf.RHF.get_veff()

+
+ +
+
+property hf_energy
+
+ +
+
+init_direct_scf(mol=None)
+
+ +
+
+init_guess = 'minao'
+
+ +
+
+init_guess_by_1e(cell=None)
+

Generate initial guess density matrix from core hamiltonian

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_atom(mol=None, breaksym=True)
+

Generate initial guess density matrix from superposition of atomic HF +density matrix. The atomic HF is occupancy averaged RHF

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_chkfile(chk=None, project=True, kpt=None)
+

Read the HF results from checkpoint file, then project it to the +basis defined by mol

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_huckel(mol=None, breaksym=True)
+

Generate initial guess density matrix from a Huckel calculation based +on occupancy averaged atomic RHF calculations, doi:10.1021/acs.jctc.8b01089

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_minao(mol=None, breaksym=True)
+

Initial guess in terms of the overlap to minimal basis.

+
+ +
+
+jk_method(J='FFTDF', K=None)
+

Set up the schemes to evaluate Coulomb and exchange matrix

+

FFTDF: planewave density fitting using Fast Fourier Transform +AFTDF: planewave density fitting using analytic Fourier Transform +GDF: Gaussian density fitting +MDF: Gaussian and planewave mix density fitting +RS: range-separation JK builder +RSDF: range-separation density fitting

+
+ +
+
+property kcell
+
+ +
+
+kernel(dm0=None, **kwargs)
+

SCF main driver

+
+
Kwargs:
+
dm0ndarray

If given, it will be used as the initial guess density matrix

+
+
+
+
+

Examples:

+
>>> import numpy
+>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> dm_guess = numpy.eye(mol.nao_nr())
+>>> mf.kernel(dm_guess)
+converged SCF energy = -98.5521904482821
+-98.552190448282104
+
+
+
+ +
+
+property kpt
+
+ +
+
+level_shift = 0
+
+ +
+
+property level_shift_factor
+
+ +
+
+make_asym_dm(mo1, mo2, occ1, occ2, x)
+

One-particle asymmetric density matrix

+
+
Parameters:
+
    +
  • mo1 – 2D ndarrays +Molecualr orbital coefficients

  • +
  • mo2 – 2D ndarrays +Molecualr orbital coefficients

  • +
  • occ1 – 2D ndarrays +Occupation numbers

  • +
  • occ2 – 2D ndarrays +Occupation numbers

  • +
  • x – 2D ndarrays +\(\mathbf{U} \mathbf{\Lambda}^{-1} \mathbf{V}^\dagger\). +See also det_ovlp()

  • +
+
+
Returns:
+

A list of 2D ndarrays for alpha and beta spin

+
+
+

Examples:

+
>>> mf1 = scf.UHF(gto.M(atom='H 0 0 0; F 0 0 1.3', basis='ccpvdz')).run()
+>>> mf2 = scf.UHF(gto.M(atom='H 0 0 0; F 0 0 1.4', basis='ccpvdz')).run()
+>>> s = gto.intor_cross('int1e_ovlp_sph', mf1.mol, mf2.mol)
+>>> det, x = det_ovlp(mf1.mo_coeff, mf1.mo_occ, mf2.mo_coeff, mf2.mo_occ, s)
+>>> adm = make_asym_dm(mf1.mo_coeff, mf1.mo_occ, mf2.mo_coeff, mf2.mo_occ, x)
+>>> adm.shape
+(2, 19, 19)
+
+
+
+ +
+
+make_rdm1(mo_coeff=None, mo_occ=None, **kwargs)
+

One-particle density matrix in AO representation

+
+
Parameters:
+
    +
  • mo_coeff – tuple of 2D ndarrays +Orbital coefficients for alpha and beta spins. Each column is one orbital.

  • +
  • mo_occ – tuple of 1D ndarrays +Occupancies for alpha and beta spins.

  • +
+
+
Returns:
+

A list of 2D ndarrays for alpha and beta spins

+
+
+
+ +
+
+make_rdm2(mo_coeff=None, mo_occ=None, **kwargs)
+

Two-particle density matrix in AO representation

+
+
Parameters:
+
    +
  • mo_coeff – tuple of 2D ndarrays +Orbital coefficients for alpha and beta spins. Each column is one orbital.

  • +
  • mo_occ – tuple of 1D ndarrays +Occupancies for alpha and beta spins.

  • +
+
+
Returns:
+

A tuple of three 4D ndarrays for alpha,alpha and alpha,beta and beta,beta spins

+
+
+
+ +
+
+max_cycle = 50
+
+ +
+
+mix_density_fit(auxbasis=None, with_df=None)
+
+ +
+
+mulliken_meta(mol=None, dm=None, verbose=5, pre_orth_method='ANO', s=None)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+mulliken_meta_spin(mol=None, dm=None, verbose=5, pre_orth_method='ANO', s=None)
+
+ +
+
+mulliken_pop(mol=None, dm=None, s=None, verbose=5)
+

Mulliken population analysis

+
+\[M_{ij} = D_{ij} S_{ji}\]
+

Mulliken charges

+
+\[\delta_i = \sum_j M_{ij}\]
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+mulliken_pop_meta_lowdin_ao(*args, **kwargs)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+mulliken_spin_pop(mol=None, dm=None, s=None, verbose=5)
+
+ +
+
+property ncells
+
+ +
+
+property nelec
+
+ +
+
+property nelectron_alpha
+
+ +
+
+newton()
+

Create an SOSCF object based on the mean-field object

+
+ +
+
+nuc_grad_method(*args, **kwargs)
+

Hook to create object for analytical nuclear gradients.

+
+ +
+
+pop(*args, **kwargs)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+post_kernel(envs)
+

A hook to be run after the main body of the kernel function. Internal +variables are exposed to post_kernel through the “envs” dictionary. +Return value of post_kernel function is not required.

+
+ +
+
+pre_kernel(envs)
+

A hook to be run before the main body of kernel function is executed. +Internal variables are exposed to pre_kernel through the “envs” +dictionary. Return value of pre_kernel function is not required.

+
+ +
+
+remove_soscf()
+

Remove the SOSCF decorator

+
+ +
+
+reset(cell=None)
+

Reset cell and relevant attributes associated to the old cell object

+
+ +
+
+rs_density_fit(auxbasis=None, with_df=None)
+
+ +
+
+run(*args, **kwargs)
+

Call the kernel function of current object. args will be passed +to kernel function. kwargs will be used to update the attributes of +current object. The return value of method run is the object itself. +This allows a series of functions/methods to be executed in pipe.

+
+ +
+
+scf(dm0=None, **kwargs)
+

SCF main driver

+
+
Kwargs:
+
dm0ndarray

If given, it will be used as the initial guess density matrix

+
+
+
+
+

Examples:

+
>>> import numpy
+>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> dm_guess = numpy.eye(mol.nao_nr())
+>>> mf.kernel(dm_guess)
+converged SCF energy = -98.5521904482821
+-98.552190448282104
+
+
+
+ +
+
+set(*args, **kwargs)
+

Update the attributes of the current object. The return value of +method set is the object itself. This allows a series of +functions/methods to be executed in pipe.

+
+ +
+
+sfx2c1e()
+
+ +
+
+spin_square(mo_coeff=None, s=None)
+

Spin square and multiplicity of UHF determinant

+
+\[S^2 = \frac{1}{2}(S_+ S_- + S_- S_+) + S_z^2\]
+

where \(S_+ = \sum_i S_{i+}\) is effective for all beta occupied +orbitals; \(S_- = \sum_i S_{i-}\) is effective for all alpha occupied +orbitals.

+
    +
  1. +
    There are two possibilities for \(S_+ S_-\)
      +
    1. same electron \(S_+ S_- = \sum_i s_{i+} s_{i-}\),

    2. +
    +
    +\[\sum_i \langle UHF|s_{i+} s_{i-}|UHF\rangle + = \sum_{pq}\langle p|s_+s_-|q\rangle \gamma_{qp} = n_\alpha\]
    +

    2) different electrons \(S_+ S_- = \sum s_{i+} s_{j-}, (i\neq j)\). +There are in total \(n(n-1)\) terms. As a two-particle operator,

    +
    +\[\langle S_+ S_- \rangle = \langle ij|s_+ s_-|ij\rangle + - \langle ij|s_+ s_-|ji\rangle + = -\langle i^\alpha|j^\beta\rangle + \langle j^\beta|i^\alpha\rangle\]
    +
    +
    +
  2. +
  3. +
    Similarly, for \(S_- S_+\)
      +
    1. same electron

    2. +
    +
    +\[\sum_i \langle s_{i-} s_{i+}\rangle = n_\beta\]
    +
      +
    1. different electrons

    2. +
    +
    +\[\langle S_- S_+ \rangle = -\langle i^\beta|j^\alpha\rangle + \langle j^\alpha|i^\beta\rangle\]
    +
    +
    +
  4. +
  5. +
    For \(S_z^2\)
      +
    1. same electron

    2. +
    +
    +\[\langle s_z^2\rangle = \frac{1}{4}(n_\alpha + n_\beta)\]
    +
      +
    1. different electrons

    2. +
    +
    +\[\begin{split}&\frac{1}{2}\sum_{ij}(\langle ij|2s_{z1}s_{z2}|ij\rangle + -\langle ij|2s_{z1}s_{z2}|ji\rangle) \\ +&=\frac{1}{4}(\langle i^\alpha|i^\alpha\rangle \langle j^\alpha|j^\alpha\rangle + - \langle i^\alpha|i^\alpha\rangle \langle j^\beta|j^\beta\rangle + - \langle i^\beta|i^\beta\rangle \langle j^\alpha|j^\alpha\rangle + + \langle i^\beta|i^\beta\rangle \langle j^\beta|j^\beta\rangle) \\ +&-\frac{1}{4}(\langle i^\alpha|j^\alpha\rangle \langle j^\alpha|i^\alpha\rangle + + \langle i^\beta|j^\beta\rangle\langle j^\beta|i^\beta\rangle) \\ +&=\frac{1}{4}(n_\alpha^2 - n_\alpha n_\beta - n_\beta n_\alpha + n_\beta^2) + -\frac{1}{4}(n_\alpha + n_\beta) \\ +&=\frac{1}{4}((n_\alpha-n_\beta)^2 - (n_\alpha+n_\beta))\end{split}\]
    +
    +
    +
  6. +
+

In total

+
+\[\begin{split}\langle S^2\rangle &= \frac{1}{2} +(n_\alpha-\sum_{ij}\langle i^\alpha|j^\beta\rangle \langle j^\beta|i^\alpha\rangle ++n_\beta -\sum_{ij}\langle i^\beta|j^\alpha\rangle\langle j^\alpha|i^\beta\rangle) ++ \frac{1}{4}(n_\alpha-n_\beta)^2 \\\end{split}\]
+
+
Parameters:
+

mo – a list of 2 ndarrays +Occupied alpha and occupied beta orbitals

+
+
+
+
Kwargs:
+
sndarray

AO overlap

+
+
+
+
+
+
Returns:
+

A list of two floats. The first is the expectation value of S^2. +The second is the corresponding 2S+1

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; H 0 0 1; H 0 1 0', basis='ccpvdz', charge=1, spin=1, verbose=0)
+>>> mf = scf.UHF(mol)
+>>> mf.kernel()
+-75.623975516256706
+>>> mo = (mf.mo_coeff[0][:,mf.mo_occ[0]>0], mf.mo_coeff[1][:,mf.mo_occ[1]>0])
+>>> print('S^2 = %.7f, 2S+1 = %.7f' % spin_square(mo, mol.intor('int1e_ovlp_sph')))
+S^2 = 0.7570150, 2S+1 = 2.0070027
+
+
+
+ +
+
+stability(internal=True, external=False, verbose=None, return_status=False)
+

Stability analysis for UHF/UKS method.

+

See also pyscf.scf.stability.uhf_stability function.

+
+
Parameters:
+

mf – UHF or UKS object

+
+
+
+
Kwargs:
+
internalbool

Internal stability, within the UHF space.

+
+
externalbool

External stability. Including the UHF -> GHF and real -> complex +stability analysis.

+
+
return_status: bool

Whether to return stable_i and stable_e

+
+
+
+
+
+
Returns:
+

If return_status is False (default), the return value includes +two set of orbitals, which are more close to the stable condition. +The first corresponds to the internal stability +and the second corresponds to the external stability.

+

Else, another two boolean variables (indicating current status: +stable or unstable) are returned. +The first corresponds to the internal stability +and the second corresponds to the external stability.

+

+
+
+
+ +
+
+stdout = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
+
+ +
+
+to_ghf(mf)
+

Convert the input mean-field object to a GHF/GKS object

+
+ +
+
+to_gks(xc='HF')
+

Convert the input mean-field object to a GKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_ks(xc='HF')
+

Convert the input mean-field object to the associated KS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_rhf(mf)
+

Convert the input mean-field object to a RHF/ROHF/RKS/ROKS object

+
+ +
+
+to_rks(xc='HF')
+

Convert the input mean-field object to a RKS/ROKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_uhf(mf)
+

Convert the input mean-field object to a UHF/UKS object

+
+ +
+
+to_uks(xc='HF')
+

Convert the input mean-field object to a UKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+update(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_from_chk(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_from_chk_(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+verbose = 0
+
+ +
+
+view(cls)
+

New view of object with the same attributes.

+
+ +
+
+x2c()
+
+ +
+
+x2c1e()
+
+ +
+ +
+
+vayesta.core.foldscf.fold_mos(kmo_energy, kmo_coeff, kmo_occ, kphase, ovlp, make_real=True, sort=True)[source]
+
+ +
+
+vayesta.core.foldscf.log_error_norms(msg, err, error_tol=0.001, warn_tol=1e-06)[source]
+
+ +
+
+vayesta.core.foldscf.make_mo_coeff_real(mo_energy, mo_coeff, ovlp, imag_tol=1e-10)[source]
+
+ +
+
+vayesta.core.foldscf.make_mo_coeff_real_2(mo_energy, mo_coeff, mo_occ, ovlp, hcore, imag_tol=1e-08)[source]
+
+ +
+
+vayesta.core.foldscf.kpts_to_kmesh(cell, kpts)[source]
+

Guess k-mesh from k-points.

+
+ +
+
+vayesta.core.foldscf.translation_vectors_for_kmesh(cell, kmesh)[source]
+

Translation vectors to construct super-cell of which the gamma point is +identical to the k-point mesh of primitive cell

+
+ +
+
+vayesta.core.foldscf.get_phase(cell, kpts, kmesh=None)[source]
+

The unitary transformation that transforms the supercell basis k-mesh +adapted basis.

+

Important: This is ordered as (k,R), different to PySCF k2gamma.get_phase!

+
+ +
+
+vayesta.core.foldscf.k2bvk_2d(ak, phase, make_real=True, imag_tol=1e-06)[source]
+

Transform unit-cell k-point AO integrals to the supercell gamma-point AO integrals.

+
+ +
+
+vayesta.core.foldscf.bvk2k_2d(ag, phase)[source]
+

Transform supercell gamma-point AO integrals to the unit-cell k-point AO integrals.

+
+ +
+
+

vayesta.core.helper

+
+
+vayesta.core.helper.orbital_sign_convention(mo_coeff, inplace=True)[source]
+
+ +
+
+vayesta.core.helper.get_dtype_int(obj)[source]
+
+ +
+
+vayesta.core.helper.get_dtype(dtint)[source]
+
+ +
+
+vayesta.core.helper.pack_metadata(array, maxdim=8)[source]
+
+ +
+
+vayesta.core.helper.unpack_metadata(array, maxdim=8)[source]
+
+ +
+
+vayesta.core.helper.pack_arrays(*arrays, dtype=<class 'float'>, maxdim=8)[source]
+

Pack multiple arrays into a single array of data type dtype.

+

Useful for MPI communication.

+
+ +
+
+vayesta.core.helper.unpack_arrays(packed, dtype=<class 'float'>, maxdim=8)[source]
+

Unpack a single array of data type dtype into multiple arrays.

+

Useful for MPI communication.

+
+ +
+
+

vayesta.core.linalg

+
+
+vayesta.core.linalg.recursive_block_svd(a, n, tol=1e-10, maxblock=100)[source]
+

Perform SVD of rectangular, offdiagonal blocks of a matrix recursively.

+
+
Parameters:
+
    +
  • a ((m, m) array) – Input matrix.

  • +
  • n (int) – Number of rows of the first offdiagonal block.

  • +
  • tol (float, optional) – Singular values below the tolerance are considered uncoupled. Default: 1e-10.

  • +
  • maxblock (int, optional) – Maximum number of recursions. Default: 100.

  • +
+
+
Returns:
+

    +
  • coeff ((m-n, m-n) array) – Coefficients.

  • +
  • sv ((m-n) array) – Singular values.

  • +
  • order ((m-n) array) – Orders.

  • +
+

+
+
+
+ +
+
+

vayesta.core.spinalg

+

Some utility to perform operations for RHF and UHF using the +same functions

+
+
+vayesta.core.spinalg.add_numbers(*args)[source]
+
+ +
+
+vayesta.core.spinalg.hstack_matrices(*args, ignore_none=True)[source]
+
+ +
+
+

vayesta.core.util

+
+
+class vayesta.core.util.Object[source]
+

Bases: object

+
+ +
+
+class vayesta.core.util.OptionsBase[source]
+

Bases: object

+

Abstract base class for Option dataclasses.

+

This should be inherited and decorated with @dataclasses.dataclass. +One can then define attributes and default values as for any dataclass. +This base class provides some dictionary-like methods, like get and items +and also the method replace, in order to update options from another Option object +or dictionary.

+
+
+get(attr, default=None)[source]
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+asdict(deepcopy=False)[source]
+
+ +
+
+keys()[source]
+
+ +
+
+values()[source]
+
+ +
+
+items()[source]
+
+ +
+
+classmethod get_default(field)[source]
+
+ +
+
+classmethod get_default_factory(field)[source]
+
+ +
+
+replace(**kwargs)[source]
+
+ +
+
+update(**kwargs)[source]
+
+ +
+
+static dict_with_defaults(**kwargs)[source]
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)[source]
+
+ +
+ +
+
+vayesta.core.util.brange(*args, minstep=1, maxstep=None)[source]
+

Similar to PySCF’s prange, but returning a slice instead.

+

Start, stop, and blocksize can be accessed from each slice blk as +blk.start, blk.stop, and blk.step.

+
+ +
+
+vayesta.core.util.deprecated(message=None, replacement=None)[source]
+

This is a decorator which can be used to mark functions +as deprecated. It will result in a warning being emitted +when the function is used.

+
+ +
+
+vayesta.core.util.cache(maxsize_or_user_function=16, typed=False, copy=False)[source]
+

Adds LRU cache to function or method.

+

If the function or method returns a mutable object, e.g. a NumPy array, +cache hits will return the same object. If the object has been modified +(for example by the user on the script level), the modified object will be +returned by future calls. To avoid this, a (deep)copy of the result can be +performed, by setting copy=True.

+

modified from https://stackoverflow.com/questions/54909357

+
+ +
+
+vayesta.core.util.call_once(func, *args, **kwargs)[source]
+
+ +
+
+vayesta.core.util.with_doc(doc)[source]
+

Use this decorator to add doc string for function

+
+

@with_doc(doc) +def func:

+
+

+
+
+

is equivalent to

+
+

func.__doc__ = doc

+
+
+ +
+
+vayesta.core.util.dot(*args, out=None, ignore_none=False)[source]
+

Like NumPy’s multi_dot, but variadic

+
+ +
+
+vayesta.core.util.tril_indices_ndim(n, dims, include_diagonal=False)[source]
+

Return lower triangular indices for a multidimensional array.

+

Copied from ebcc.

+
+ +
+
+vayesta.core.util.einsum(subscripts, *operands, **kwargs)[source]
+
+ +
+
+vayesta.core.util.hstack(*args, ignore_none=True)[source]
+

Like NumPy’s hstack, but variadic, ignores any arguments which are None and improved error message.

+
+ +
+
+vayesta.core.util.decompress_axes(subscript, array_flat, shape, include_diagonal=False, symmetry=None)[source]
+

Decompress an array that has dimensions flattened according to +permutation symmetries in the signs.

+

Copied from ebcc.

+
+ +
+
+exception vayesta.core.util.AbstractMethodError[source]
+

Bases: NotImplementedError

+
+
+args
+
+ +
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+exception vayesta.core.util.ConvergenceError[source]
+

Bases: RuntimeError

+
+
+args
+
+ +
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+exception vayesta.core.util.OrthonormalityError[source]
+

Bases: RuntimeError

+
+
+args
+
+ +
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+exception vayesta.core.util.ImaginaryPartError[source]
+

Bases: RuntimeError

+
+
+args
+
+ +
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+exception vayesta.core.util.NotCalculatedError[source]
+

Bases: AttributeError

+

Raise if a necessary attribute has not been calculated.

+
+
+args
+
+ +
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+vayesta.core.util.energy_string(energy, unit='Ha')[source]
+
+ +
+
+vayesta.core.util.time_string(seconds, show_zeros=False)[source]
+

String representation of seconds.

+
+ +
+
+vayesta.core.util.memory_string(nbytes, fmt='6.2f')[source]
+

String representation of nbytes

+
+ +
+
+vayesta.core.util.timer()
+

perf_counter() -> float

+

Performance counter for benchmarking.

+
+ +
+
+vayesta.core.util.log_time(logger, message, *args, mintime=None, **kwargs)[source]
+

Log time to execute the body of a with-statement.

+
+
Use as:
>>> with log_time(log.info, 'Time for hcore: %s'):
+>>>     hcore = mf.get_hcore()
+
+
+
+
+
+
Parameters:
+
    +
  • logger

  • +
  • message

  • +
+
+
+
+ +
+
+vayesta.core.util.get_used_memory(unit='b')[source]
+
+ +
+
+vayesta.core.util.log_method(message='Time for %(classname).%(funcname): %s', log=None)[source]
+
+ +
+
+vayesta.core.util.getattr_recursive(obj, attr, *args)[source]
+
+ +
+
+vayesta.core.util.setattr_recursive(obj, attr, val)[source]
+
+ +
+
+vayesta.core.util.replace_attr(obj, **kwargs)[source]
+

Temporary replace attributes and methods of object.

+
+ +
+
+vayesta.core.util.break_into_lines(string, linelength=100, sep=None, newline='\n')[source]
+

Break a long string into multiple lines

+
+ +
+
+vayesta.core.util.fix_orbital_sign(mo_coeff, inplace=True)[source]
+
+ +
+
+vayesta.core.util.split_into_blocks(array, axis=0, blocksize=None, max_memory=1000000000)[source]
+
+ +
+
+vayesta.core.util.getif(obj, key, cond=<function <lambda>>, default=None)[source]
+

Returns obj[key] if cond(obj) else default.

+
+ +
+
+vayesta.core.util.callif(func, arg, cond=<function <lambda>>, default=None, **kwargs)[source]
+

Returns func(arg, **kwargs) if cond(arg, **kwargs) else default.

+
+ +
+
+vayesta.core.util.permutations_with_signs(seq)[source]
+

Generate permutations of seq, yielding also a sign which is +equal to +1 for an even number of swaps, and -1 for an odd number +of swaps.

+

Copied from ebcc.

+
+ +
+
+

vayesta.core.vlog

+

Vayesta logging module

+
+
+class vayesta.core.vlog.NoLogger[source]
+

Bases: object

+
+ +
+
+class vayesta.core.vlog.LevelRangeFilter(*args, low=None, high=None, **kwargs)[source]
+

Bases: Filter

+

Only log events with level in interval [low, high).

+
+
+filter(record)[source]
+

Determine if the specified record is to be logged.

+

Returns True if the record should be logged, or False otherwise. +If deemed appropriate, the record may be modified in-place.

+
+ +
+ +
+
+class vayesta.core.vlog.LevelIncludeFilter(*args, include, **kwargs)[source]
+

Bases: Filter

+

Only log events with level in include.

+
+
+filter(record)[source]
+

Determine if the specified record is to be logged.

+

Returns True if the record should be logged, or False otherwise. +If deemed appropriate, the record may be modified in-place.

+
+ +
+ +
+
+class vayesta.core.vlog.LevelExcludeFilter(*args, exclude, **kwargs)[source]
+

Bases: Filter

+

Only log events with level not in exlude.

+
+
+filter(record)[source]
+

Determine if the specified record is to be logged.

+

Returns True if the record should be logged, or False otherwise. +If deemed appropriate, the record may be modified in-place.

+
+ +
+ +
+
+class vayesta.core.vlog.VFormatter(*args, show_level=True, show_mpi_rank=False, prefix_sep='|', indent=False, indent_char=' ', indent_width=4, **kwargs)[source]
+

Bases: Formatter

+

Formatter which adds a prefix column and indentation.

+
+
+format(record)[source]
+

Format the specified record as text.

+

The record’s attribute dictionary is used as the operand to a +string formatting operation which yields the returned string. +Before formatting the dictionary, a couple of preparatory steps +are carried out. The message attribute of the record is computed +using LogRecord.getMessage(). If the formatting string uses the +time (as determined by a call to usesTime(), formatTime() is +called to format the event time. If there is exception information, +it is formatted using formatException() and appended to the message.

+
+ +
+
+converter()
+
+
localtime([seconds]) -> (tm_year,tm_mon,tm_mday,tm_hour,tm_min,

tm_sec,tm_wday,tm_yday,tm_isdst)

+
+
+

Convert seconds since the Epoch to a time tuple expressing local time. +When ‘seconds’ is not passed in, convert the current time instead.

+
+ +
+
+default_msec_format = '%s,%03d'
+
+ +
+
+default_time_format = '%Y-%m-%d %H:%M:%S'
+
+ +
+
+formatException(ei)
+

Format and return the specified exception information as a string.

+

This default implementation just uses +traceback.print_exception()

+
+ +
+
+formatMessage(record)
+
+ +
+
+formatStack(stack_info)
+

This method is provided as an extension point for specialized +formatting of stack information.

+

The input data is a string as returned from a call to +traceback.print_stack(), but with the last trailing newline +removed.

+

The base implementation just returns the value passed in.

+
+ +
+
+formatTime(record, datefmt=None)
+

Return the creation time of the specified LogRecord as formatted text.

+

This method should be called from format() by a formatter which +wants to make use of a formatted time. This method can be overridden +in formatters to provide for any specific requirement, but the +basic behaviour is as follows: if datefmt (a string) is specified, +it is used with time.strftime() to format the creation time of the +record. Otherwise, an ISO8601-like (or RFC 3339-like) format is used. +The resulting string is returned. This function uses a user-configurable +function to convert the creation time to a tuple. By default, +time.localtime() is used; to change this for a particular formatter +instance, set the ‘converter’ attribute to a function with the same +signature as time.localtime() or time.gmtime(). To change it for all +formatters, for example if you want all logging times to be shown in GMT, +set the ‘converter’ attribute in the Formatter class.

+
+ +
+
+usesTime()
+

Check if the format uses the creation time of the record.

+
+ +
+ +
+
+class vayesta.core.vlog.VStreamHandler(stream, formatter=None, **kwargs)[source]
+

Bases: StreamHandler

+

Default stream handler with IndentedFormatter

+
+
+acquire()
+

Acquire the I/O thread lock.

+
+ +
+
+addFilter(filter)
+

Add the specified filter to this handler.

+
+ +
+
+close()
+

Tidy up any resources used by the handler.

+

This version removes the handler from an internal map of handlers, +_handlers, which is used for handler lookup by name. Subclasses +should ensure that this gets called from overridden close() +methods.

+
+ +
+
+createLock()
+

Acquire a thread lock for serializing access to the underlying I/O.

+
+ +
+
+emit(record)
+

Emit a record.

+

If a formatter is specified, it is used to format the record. +The record is then written to the stream with a trailing newline. If +exception information is present, it is formatted using +traceback.print_exception and appended to the stream. If the stream +has an ‘encoding’ attribute, it is used to determine how to do the +output to the stream.

+
+ +
+
+filter(record)
+

Determine if a record is loggable by consulting all the filters.

+

The default is to allow the record to be logged; any filter can veto +this and the record is then dropped. Returns a zero value if a record +is to be dropped, else non-zero.

+
+

Changed in version 3.2: Allow filters to be just callables.

+
+
+ +
+
+flush()
+

Flushes the stream.

+
+ +
+
+format(record)
+

Format the specified record.

+

If a formatter is set, use it. Otherwise, use the default formatter +for the module.

+
+ +
+
+get_name()
+
+ +
+
+handle(record)
+

Conditionally emit the specified logging record.

+

Emission depends on filters which may have been added to the handler. +Wrap the actual emission of the record with acquisition/release of +the I/O thread lock. Returns whether the filter passed the record for +emission.

+
+ +
+
+handleError(record)
+

Handle errors which occur during an emit() call.

+

This method should be called from handlers when an exception is +encountered during an emit() call. If raiseExceptions is false, +exceptions get silently ignored. This is what is mostly wanted +for a logging system - most users will not care about errors in +the logging system, they are more interested in application errors. +You could, however, replace this with a custom handler if you wish. +The record which was being processed is passed in to this method.

+
+ +
+
+property name
+
+ +
+
+release()
+

Release the I/O thread lock.

+
+ +
+
+removeFilter(filter)
+

Remove the specified filter from this handler.

+
+ +
+
+setFormatter(fmt)
+

Set the formatter for this handler.

+
+ +
+
+setLevel(level)
+

Set the logging level of this handler. level must be an int or a str.

+
+ +
+
+setStream(stream)
+

Sets the StreamHandler’s stream to the specified value, +if it is different.

+

Returns the old stream, if the stream was changed, or None +if it wasn’t.

+
+ +
+
+set_name(name)
+
+ +
+
+terminator = '\n'
+
+ +
+ +
+
+class vayesta.core.vlog.VFileHandler(filename, mode='a', formatter=None, add_mpi_rank=True, delay=True, **kwargs)[source]
+

Bases: FileHandler

+

Default file handler with IndentedFormatter

+
+
+acquire()
+

Acquire the I/O thread lock.

+
+ +
+
+addFilter(filter)
+

Add the specified filter to this handler.

+
+ +
+
+close()
+

Closes the stream.

+
+ +
+
+createLock()
+

Acquire a thread lock for serializing access to the underlying I/O.

+
+ +
+
+emit(record)
+

Emit a record.

+

If the stream was not opened because ‘delay’ was specified in the +constructor, open it before calling the superclass’s emit.

+
+ +
+
+filter(record)
+

Determine if a record is loggable by consulting all the filters.

+

The default is to allow the record to be logged; any filter can veto +this and the record is then dropped. Returns a zero value if a record +is to be dropped, else non-zero.

+
+

Changed in version 3.2: Allow filters to be just callables.

+
+
+ +
+
+flush()
+

Flushes the stream.

+
+ +
+
+format(record)
+

Format the specified record.

+

If a formatter is set, use it. Otherwise, use the default formatter +for the module.

+
+ +
+
+get_name()
+
+ +
+
+handle(record)
+

Conditionally emit the specified logging record.

+

Emission depends on filters which may have been added to the handler. +Wrap the actual emission of the record with acquisition/release of +the I/O thread lock. Returns whether the filter passed the record for +emission.

+
+ +
+
+handleError(record)
+

Handle errors which occur during an emit() call.

+

This method should be called from handlers when an exception is +encountered during an emit() call. If raiseExceptions is false, +exceptions get silently ignored. This is what is mostly wanted +for a logging system - most users will not care about errors in +the logging system, they are more interested in application errors. +You could, however, replace this with a custom handler if you wish. +The record which was being processed is passed in to this method.

+
+ +
+
+property name
+
+ +
+
+release()
+

Release the I/O thread lock.

+
+ +
+
+removeFilter(filter)
+

Remove the specified filter from this handler.

+
+ +
+
+setFormatter(fmt)
+

Set the formatter for this handler.

+
+ +
+
+setLevel(level)
+

Set the logging level of this handler. level must be an int or a str.

+
+ +
+
+setStream(stream)
+

Sets the StreamHandler’s stream to the specified value, +if it is different.

+

Returns the old stream, if the stream was changed, or None +if it wasn’t.

+
+ +
+
+set_name(name)
+
+ +
+
+terminator = '\n'
+
+ +
+ +
+
+vayesta.core.vlog.get_logname(name, add_mpi_rank=True, ext='txt')[source]
+
+ +
+
+vayesta.core.vlog.init_logging()[source]
+

Call this to initialize and configure logging, when importing Vayesta.

+

This will: +1) Add four new logging levels:

+
+

output, infov, timing, debugv, and timingv.

+
+
    +
  1. +
    Adds the attribute indentLevel to the root logger and two new Logger methods:

    setIndentLevel, changeIndentLevel.

    +
    +
    +
  2. +
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.core.qemb.html b/apidoc/vayesta.core.qemb.html new file mode 100644 index 000000000..9f18daae9 --- /dev/null +++ b/apidoc/vayesta.core.qemb.html @@ -0,0 +1,4229 @@ + + + + + + + vayesta.core.qemb — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.core.qemb

+
+

Submodules

+
+
+

vayesta.core.qemb.corrfunc

+

Expectation values for quantum embedding methods.

+
+
+vayesta.core.qemb.corrfunc.get_corrfunc_mf(emb, kind, dm1=None, atoms=None, projection='sao')[source]
+

dm1 in MO basis

+
+ +
+
+vayesta.core.qemb.corrfunc.get_corrfunc(emb, kind, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None, use_symmetry=True, orbital_filter=None)[source]
+

Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X.

+

TODO: MPI

+
+
Parameters:
+

atoms (list[int] or list[list[int]], optional) – Atom indices for which the spin-spin correlation function should be evaluated. +If set to None (default), all atoms of the system will be considered. +If a list is given, all atom pairs formed from this list will be considered. +If a list of two lists is given, the first list contains the indices of atom A, +and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. +This is useful in cases where one is only interested in the correlation to +a small subset of atoms. Default: None

+
+
Returns:
+

corr – Atom projected correlation function.

+
+
Return type:
+

array(N,M)

+
+
+
+ +
+
+vayesta.core.qemb.corrfunc.get_corrfunc_unrestricted(emb, kind, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None, use_symmetry=True, orbital_filter=None)[source]
+

Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X.

+

TODO: MPI

+
+
Parameters:
+

atoms (list[int] or list[list[int]], optional) – Atom indices for which the spin-spin correlation function should be evaluated. +If set to None (default), all atoms of the system will be considered. +If a list is given, all atom pairs formed from this list will be considered. +If a list of two lists is given, the first list contains the indices of atom A, +and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. +This is useful in cases where one is only interested in the correlation to +a small subset of atoms. Default: None

+
+
Returns:
+

corr – Atom projected correlation function.

+
+
Return type:
+

array(N,M)

+
+
+
+ +
+
+

vayesta.core.qemb.fragment

+
+
+vayesta.core.qemb.fragment.get_fragment_mpi_rank(*args)
+
+ +
+
+class vayesta.core.qemb.fragment.Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0)[source]
+

Bases: OptionsBase

+
+
+bath_options: dict = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+screening: str | None = None
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+coupled_fragments: list
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+class vayesta.core.qemb.fragment.Fragment(base, fid, name, c_frag, c_env, solver=None, atoms=None, aos=None, active=True, sym_parent=None, sym_op=None, mpi_rank=0, flags=None, log=None, **kwargs)[source]
+

Bases: object

+
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0)
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: int | NoneType = None)[source]
+

Bases: object

+
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+
+bath_parent_fragment_id: int | None = None
+
+ +
+ +
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None)[source]
+

Bases: object

+
+
+fid: int = None
+
+ +
+
+converged: bool = None
+
+ +
+
+e_corr: float = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+ +
+
+log_info()[source]
+
+ +
+
+property mol
+
+ +
+
+property mf
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+trimmed_name(length=10, add_dots=True)[source]
+

Fragment name trimmed to a given maximum length.

+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+change_options(**kwargs)[source]
+
+ +
+
+property hamil
+
+ +
+
+get_overlap(key)[source]
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_coeff_env()[source]
+
+ +
+
+property results
+
+ +
+
+property cluster
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)[source]
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)[source]
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+couple_to_fragment(frag)[source]
+
+ +
+
+couple_to_fragments(frags)[source]
+
+ +
+
+get_fragment_mf_energy()[source]
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+get_fragment_projector(coeff, c_proj=None, inverse=False)[source]
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None)[source]
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occup – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, eigvals=False, sign_convention=True)[source]
+

Diagonalize Fock matrix within subspace.

+

TODO: move to Embedding class

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=2, tol=0.0001)[source]
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (array or list of arrays) – Orbital coefficients. If multiple are given, they will be stacked along their second dimension.

  • +
  • dm1 (array, optional) – Mean-field density matrix, used to separate occupied and virtual cluster orbitals. +If None, self.mf.make_rdm1() is used. Default: None.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 2, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ ((n(AO), n(occ cluster)) array) – Occupied cluster orbital coefficients.

  • +
  • c_cluster_vir ((n(AO), n(vir cluster)) array) – Virtual cluster orbital coefficients.

  • +
+

+
+
+
+ +
+
+project_ref_orbitals(c_ref, c)[source]
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+copy(fid=None, name=None, **kwargs)[source]
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)[source]
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)[source]
+
+ +
+
+get_symmetry_parent()[source]
+
+ +
+
+get_symmetry_operation()[source]
+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)[source]
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)[source]
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)[source]
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)[source]
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+get_symmetry_error(frag, dm1=None)[source]
+

Get translational symmetry error between two fragments.

+
+ +
+
+make_bath()[source]
+
+ +
+
+make_cluster()[source]
+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)[source]
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)[source]
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)[source]
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)[source]
+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)[source]
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+check_solver(solver)[source]
+
+ +
+
+get_solver(solver=None)[source]
+
+ +
+
+get_frag_hamil()[source]
+
+ +
+
+get_solver_options(*args, **kwargs)[source]
+
+ +
+ +
+
+

vayesta.core.qemb.qemb

+
+
+class vayesta.core.qemb.qemb.Options(store_eris: bool = True, global_frag_chempot: float = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: Union[str, NoneType] = None)[source]
+

Bases: OptionsBase

+
+
+store_eris: bool = True
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+bath_options: dict
+
+ +
+
+solver_options: dict
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+screening: str | None = None
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+class vayesta.core.qemb.qemb.Embedding(mf, solver='CCSD', log=None, overwrite=None, **kwargs)[source]
+

Bases: object

+

Base class for quantum embedding methods.

+
+
Parameters:
+
    +
  • mf (pyscf.scf.SCF) – PySCF mean-field object.

  • +
  • solver (str, optional) – Default solver for cluster problems. The available solvers depend on the embedding class. +Default: ‘CCSD’.

  • +
  • log (logging.Logger, optional) – Vayesta logger object. Default: None

  • +
  • bath_options (dict, optional) –

    Bath specific options. The bath type is determined by the key bathtype (default: ‘DMET’). +The following bath specific options can be specified.

    +

    All bath types:

    +
    +
    +
    dmet_thresholdfloat, optional

    Threshold for DMET bath orbitals. Orbitals with eigenvalues larger than dmet_threshold +or smaller than 1-dmet_threshold will be added as bath orbitals. Default: 1e-6.

    +
    +
    +
    +

    MP2 bath (bathtype = ‘MP2’):

    +
    +
    +
    thresholdfloat

    Threshold for MP2 natural orbital truncation. Orbitals with eigenvalues larger than +threshold will be added as bath orbitals.

    +
    +
    +
    +

    R2 bath (bathtype = ‘R2’):

    +
    +
    +
    rcutfloat

    Range cutoff for R2 bath. Orbitals with eigenvalues smaller than rcut will be added +as bath orbitals.

    +
    +
    unit{‘Ang’, ‘Bohr’}, optional

    Unit of rcut. Default: ‘Ang’.

    +
    +
    +
    +

  • +
  • solver_options – Solver specific options. The following solver specific options can be specified.

  • +
+
+
+
+
+mol
+
+ +
+
+nao
+
+ +
+
+ncells
+
+ +
+
+nmo
+
+ +
+
+nfrag
+
+ +
+
+e_mf
+
+ +
+
+log
+

Logger object.

+
+
Type:
+

logging.Logger

+
+
+
+ +
+
+self.mf
+

PySCF mean-field object.

+
+
Type:
+

pyscf.scf.SCF

+
+
+
+ +
+
+self.mo_energy
+

MO energies.

+
+
Type:
+

(nMO) array

+
+
+
+ +
+
+self.mo_occ
+

MO occupation numbers.

+
+
Type:
+

(nMO) array

+
+
+
+ +
+
+self.mo_coeff
+

MO coefficients.

+
+
Type:
+

(nAO, nMO) array

+
+
+
+ +
+
+self.fragments
+

List of fragments for embedding calculation.

+
+
Type:
+

list

+
+
+
+ +
+
+self.kcell
+

For k-point sampled mean-field calculation, which have been folded to the supercell, +this will hold the original primitive unit cell.

+
+
Type:
+

pyscf.pbc.gto.Cell

+
+
+
+ +
+
+self.kpts
+

For k-point sampled mean-field calculation, which have been folded to the supercell, +this will hold the original k-points.

+
+
Type:
+

(nK, 3) array

+
+
+
+ +
+
+self.kdf
+

For k-point sampled mean-field calculation, which have been folded to the supercell, +this will hold the original Gaussian density-fitting object.

+
+
Type:
+

pyscf.pbc.df.GDF

+
+
+
+ +
+
+class Fragment(base, fid, name, c_frag, c_env, solver=None, atoms=None, aos=None, active=True, sym_parent=None, sym_op=None, mpi_rank=0, flags=None, log=None, **kwargs)
+

Bases: object

+
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: int | NoneType = None)
+

Bases: object

+
+
+bath_parent_fragment_id: int | None = None
+
+ +
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+ +
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0)
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None)
+

Bases: object

+
+
+converged: bool = None
+
+ +
+
+e_corr: float = None
+
+ +
+
+fid: int = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, eigvals=False, sign_convention=True)
+

Diagonalize Fock matrix within subspace.

+

TODO: move to Embedding class

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_solver(solver)
+
+ +
+
+property cluster
+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+copy(fid=None, name=None, **kwargs)
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+couple_to_fragment(frag)
+
+ +
+
+couple_to_fragments(frags)
+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=2, tol=0.0001)
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (array or list of arrays) – Orbital coefficients. If multiple are given, they will be stacked along their second dimension.

  • +
  • dm1 (array, optional) – Mean-field density matrix, used to separate occupied and virtual cluster orbitals. +If None, self.mf.make_rdm1() is used. Default: None.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 2, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ ((n(AO), n(occ cluster)) array) – Occupied cluster orbital coefficients.

  • +
  • c_cluster_vir ((n(AO), n(vir cluster)) array) – Virtual cluster orbital coefficients.

  • +
+

+
+
+
+ +
+
+get_coeff_env()
+
+ +
+
+get_frag_hamil()
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_fragment_mf_energy()
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_projector(coeff, c_proj=None, inverse=False)
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None)
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occup – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+get_overlap(key)
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_solver(solver=None)
+
+ +
+
+get_solver_options(*args, **kwargs)
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)
+
+ +
+
+get_symmetry_error(frag, dm1=None)
+

Get translational symmetry error between two fragments.

+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)
+
+ +
+
+get_symmetry_operation()
+
+ +
+
+get_symmetry_parent()
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+property hamil
+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+log_info()
+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+make_bath()
+
+ +
+
+make_cluster()
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)
+
+ +
+
+project_ref_orbitals(c_ref, c)
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)
+
+ +
+
+property results
+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+trimmed_name(length=10, add_dots=True)
+

Fragment name trimmed to a given maximum length.

+
+ +
+ +
+
+class Options(store_eris: bool = True, global_frag_chempot: float = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: Union[str, NoneType] = None)
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+bath_options: dict
+
+ +
+
+solver_options: dict
+
+ +
+ +
+
+is_rhf = True
+
+ +
+
+is_uhf = False
+
+ +
+
+spinsym = 'restricted'
+
+ +
+
+init_mf(mf)[source]
+
+ +
+
+change_options(**kwargs)[source]
+
+ +
+
+property mol
+

Mole or Cell object.

+
+ +
+
+property has_exxdiv
+

Correction for divergent exact-exchange potential.

+
+ +
+
+get_exxdiv()[source]
+

Get divergent exact-exchange (exxdiv) energy correction and potential.

+
+
Returns:
+

    +
  • e_exxdiv (float) – Divergent exact-exchange energy correction per unit cell.

  • +
  • v_exxdiv (array) – Divergent exact-exchange potential correction in AO basis.

  • +
+

+
+
+
+ +
+
+property pbc_dimension
+
+ +
+
+property nao
+

Number of atomic orbitals.

+
+ +
+
+property ncells
+

Number of primitive cells within supercell.

+
+ +
+
+property has_df
+
+ +
+
+property df
+
+ +
+
+property mo_energy
+

Molecular orbital energies.

+
+ +
+
+property mo_coeff
+

Molecular orbital coefficients.

+
+ +
+
+property mo_occ
+

Molecular orbital occupations.

+
+ +
+
+property nmo
+

Total number of molecular orbitals (MOs).

+
+ +
+
+property nocc
+

Number of occupied MOs.

+
+ +
+
+property nvir
+

Number of virtual MOs.

+
+ +
+
+property mo_energy_occ
+

Occupied MO energies.

+
+ +
+
+property mo_energy_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+property e_mf
+

Total mean-field energy per unit cell (not folded supercell). +Note that the input unit cell itself can be a supercell, in which case +e_mf refers to this cell.

+
+ +
+
+property e_nuc
+

Nuclear-repulsion energy per unit cell (not folded supercell).

+
+ +
+
+property nfrag
+

Number of fragments.

+
+ +
+
+loop()[source]
+

Loop over fragments.

+
+ +
+
+get_ovlp()[source]
+

AO-overlap matrix.

+
+ +
+
+get_hcore()[source]
+

Core Hamiltonian (kinetic energy plus nuclear-electron attraction).

+
+ +
+
+get_veff(dm1=None, with_exxdiv=True)[source]
+

Hartree-Fock Coulomb and exchange potential in AO basis.

+
+ +
+
+get_fock(dm1=None, with_exxdiv=True)[source]
+

Fock matrix in AO basis.

+
+ +
+
+set_ovlp(value)[source]
+
+ +
+
+set_hcore(value)[source]
+
+ +
+
+set_veff(value)[source]
+
+ +
+
+get_hcore_for_energy()[source]
+

Core Hamiltonian used for energy evaluation.

+
+ +
+
+get_veff_for_energy(dm1=None, with_exxdiv=True)[source]
+

Hartree-Fock potential used for energy evaluation.

+
+ +
+
+get_fock_for_energy(dm1=None, with_exxdiv=True)[source]
+

Fock matrix used for energy evaluation.

+
+ +
+
+get_fock_for_bath(dm1=None, with_exxdiv=True)[source]
+

Fock matrix used for bath orbitals.

+
+ +
+
+get_ovlp_power(power)[source]
+

get power of AO overlap matrix.

+

For folded calculations, this uses the k-point sampled overlap, for better performance and accuracy.

+
+
Parameters:
+

power (float) – Matrix power.

+
+
Returns:
+

spow – Matrix power of AO overlap matrix

+
+
Return type:
+

(n(AO), n(AO)) array

+
+
+
+ +
+
+get_cderi(mo_coeff, compact=False, blksize=None)[source]
+

Get density-fitted three-center integrals in MO basis.

+
+ +
+
+get_eris_array(mo_coeff, compact=False)[source]
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff ([list(4) of] (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

eris – Electron-repulsion integrals in MO basis.

+
+
Return type:
+

(n(MO), n(MO), n(MO), n(MO)) array

+
+
+
+ +
+
+get_eris_object(postscf, fock=None)[source]
+

Get ERIs for post-SCF methods.

+

For folded PBC calculations, this folds the MO back into k-space +and contracts with the k-space three-center integrals..

+
+
Parameters:
+

postscf (one of the following PySCF methods: MP2, CCSD, RCCSD, DFCCSD) – Post-SCF method with attribute mo_coeff set.

+
+
Returns:
+

eris – ERIs which can be used for the respective post-scf method.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+build_screened_eris(*args, **kwargs)[source]
+

Generates renormalised coulomb interactions for use in local cluster calculations. +Currently requires unrestricted system.

+
+
Parameters:
+
    +
  • emb (Embedding) – Embedding instance.

  • +
  • fragments (list of vayesta.qemb.Fragment subclasses, optional) – List of fragments for the calculation, used to define local interaction spaces. +If None, emb.get_fragments(sym_parent=None) is used. Default: None.

  • +
  • cderi_ov (np.array or tuple of np.array, optional.) – Cholesky-decomposed ERIs in the particle-hole basis of mf. If mf is unrestricted +this should be a list of arrays corresponding to the different spin channels.

  • +
  • calc_ecorrection (bool, optional.) – Whether to calculate a nonlocal energy correction at the level of RPA

  • +
  • npoints (int, optional) – Number of points for numerical integration. Default: 48.

  • +
  • log (logging.Logger, optional) – Logger object. If None, the logger of the emb object is used. Default: None.

  • +
+
+
Returns:
+

    +
  • seris_ov (list of tuples of np.array) – List of spin-dependent screened (ov|ov), for each fragment provided.

  • +
  • erpa (float) – Delta RPA correction computed as difference between full system RPA energy and +cluster correlation energies; currently only functional in CAS fragmentations.

  • +
+

+
+
+
+ +
+
+create_symmetric_fragments(symmetry, fragments=None, symbol=None, mf_tol=None, check_mf=True)[source]
+

Add rotationally or translationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: self.opts.symmetry_mf_tol.

+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_invsym_fragments(center, fragments=None, unit='Ang', **kwargs)[source]
+

Create inversion symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of inversion-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_mirrorsym_fragments(axis, center, fragments=None, unit='Ang', **kwargs)[source]
+

Create mirror symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of mirror-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_rotsym_fragments(order, axis, center, fragments=None, unit='Ang', **kwargs)[source]
+

Create rotationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of rotationally-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_transsym_fragments(translation, fragments=None, **kwargs)[source]
+

Create translationally symmetric fragments.

+
+
Parameters:
+
    +
  • translation (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+get_symmetry_parent_fragments()[source]
+

Returns a list of all fragments, which are parents to symmetry related child fragments.

+
+
Returns:
+

parents – A list of all parent fragments, ordered in the same way as they appear in self.fragments.

+
+
Return type:
+

list

+
+
+
+ +
+
+get_symmetry_child_fragments(include_parents=False)[source]
+

Returns a list of all fragments, which are children to symmetry related parent fragments.

+
+
Parameters:
+

include_parents (bool, optional) – If true, the parent fragment of each symmetry group is prepended to each symmetry sublist.

+
+
Returns:
+

children – A list with the length of the number of parent fragments in the system, each element +being another list containing all the children fragments of the given parent fragment. +Both the outer and inner lists are ordered in the same way that the fragments appear in self.fragments.

+
+
Return type:
+

list of lists

+
+
+
+ +
+
+get_fragments(fragments=None, options=None, flags=None, **filters)[source]
+

Return all fragments which obey the specified conditions.

+
+
Parameters:
+

**filters – List of returned fragments will be filtered according to specified +keyword arguments.

+
+
Returns:
+

fragments – List of fragments.

+
+
Return type:
+

list

+
+
+

Examples

+

Only returns fragments with mpi_rank 0, 1, or 2:

+
>>> self.get_fragments(mpi_rank=[0,1,2])
+
+
+

Only returns fragments with no symmetry parent:

+
>>> self.get_fragments(sym_parent=None)
+
+
+
+ +
+
+get_fragment_overlap_norm(fragments=None, occupied=True, virtual=True, norm=2)[source]
+

Get matrix of overlap norms between fragments.

+
+ +
+
+communicate_clusters()[source]
+

Communicate cluster orbitals between MPI ranks.

+
+ +
+
+make_rdm1_demo(*args, **kwargs)[source]
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – One-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+make_rdm2_demo(*args, **kwargs)[source]
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+get_dmet_elec_energy(part_cumulant=True, approx_cumulant=True)[source]
+

Calculate electronic DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_dmet_energy(part_cumulant=True, approx_cumulant=True, with_nuc=True, with_exxdiv=True)[source]
+

Calculate DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
  • with_nuc (bool, optional) – Include nuclear-repulsion energy. Default: True.

  • +
  • with_exxdiv (bool, optional) – Include divergent exact-exchange correction. Default: True.

  • +
+
+
Returns:
+

e_dmet – DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_corrfunc_mf(kind, dm1=None, atoms=None, projection='sao')
+

dm1 in MO basis

+
+ +
+
+get_corrfunc(kind, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None, use_symmetry=True, orbital_filter=None)
+

Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X.

+

TODO: MPI

+
+
Parameters:
+

atoms (list[int] or list[list[int]], optional) – Atom indices for which the spin-spin correlation function should be evaluated. +If set to None (default), all atoms of the system will be considered. +If a list is given, all atom pairs formed from this list will be considered. +If a list of two lists is given, the first list contains the indices of atom A, +and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. +This is useful in cases where one is only interested in the correlation to +a small subset of atoms. Default: None

+
+
Returns:
+

corr – Atom projected correlation function.

+
+
Return type:
+

array(N,M)

+
+
+
+ +
+
+get_mean_cluster_size()[source]
+
+ +
+
+get_average_cluster_size(average='mean')[source]
+
+ +
+
+get_min_cluster_size()[source]
+
+ +
+
+get_max_cluster_size()[source]
+
+ +
+
+get_lo_coeff(local_orbitals='lowdin', minao='auto')[source]
+
+ +
+
+pop_analysis(dm1, mo_coeff=None, local_orbitals='lowdin', minao='auto', write=True, filename=None, filemode='a', orbital_resolved=False, mpi_rank=0)[source]
+
+
Parameters:
+
    +
  • dm1 ((N, N) array) – If mo_coeff is None, AO representation is assumed.

  • +
  • local_orbitals ({'lowdin', 'mulliken', 'iao+pao'} or array) – Kind of population analysis. Default: ‘lowdin’.

  • +
+
+
Returns:
+

pop – Population of atomic orbitals.

+
+
Return type:
+

    +
  1. array

  2. +
+

+
+
+
+ +
+
+get_atomic_charges(pop)[source]
+
+ +
+
+write_population(pop, filename=None, filemode='a', orbital_resolved=False)[source]
+
+ +
+
+sao_fragmentation(**kwargs)[source]
+

Initialize the quantum embedding method for the use of SAO (Lowdin-AO) fragments.

+
+ +
+
+site_fragmentation(**kwargs)[source]
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+iao_fragmentation(minao='auto', **kwargs)[source]
+

Initialize the quantum embedding method for the use of IAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+iaopao_fragmentation(minao='auto', **kwargs)[source]
+

Initialize the quantum embedding method for the use of IAO+PAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+cas_fragmentation(**kwargs)[source]
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+has_orthonormal_fragmentation(**kwargs)[source]
+

Check if union of fragment spaces is orthonormal.

+
+ +
+
+has_complete_fragmentation(**kwargs)[source]
+

Check if union of fragment spaces is orthonormal and complete.

+
+ +
+
+has_complete_occupied_fragmentation(**kwargs)[source]
+

Check if union of fragment spaces is orthonormal and complete in the occupied space.

+
+ +
+
+has_complete_virtual_fragmentation(**kwargs)[source]
+

Check if union of fragment spaces is orthonormal and complete in the virtual space.

+
+ +
+
+require_complete_fragmentation(message=None, incl_virtual=True, **kwargs)[source]
+
+ +
+
+reset(*args, **kwargs)[source]
+
+ +
+
+update_mf(mo_coeff, mo_energy=None, veff=None)[source]
+

Update underlying mean-field object.

+
+ +
+
+check_fragment_symmetry(dm1, symtol=1e-06)[source]
+

Check that the mean-field obeys the symmetry between fragments.

+
+ +
+
+optimize_chempot(cpt_init=0.0, dm1func=None, dm1kwds=None, robust=False)[source]
+
+ +
+
+pdmet_scmf(*args, **kwargs)[source]
+

Decorator for p-DMET.

+
+ +
+
+brueckner_scmf(*args, **kwargs)[source]
+

Decorator for Brueckner-DMET.

+
+ +
+
+check_solver(solver)[source]
+
+ +
+ +
+
+

vayesta.core.qemb.register

+
+
+class vayesta.core.qemb.register.FragmentRegister(mpi_size=None)[source]
+

Bases: object

+
+
+get_next_id()[source]
+
+ +
+
+get_next_mpi_rank(runtime=None, memory=None)[source]
+

TODO: get next MPI rank based on runtime and memory estimates.

+
+ +
+
+get_next(*args, **kwargs)[source]
+

Get next free fragment ID and MPI rank.

+
+ +
+ +
+
+

vayesta.core.qemb.scrcoulomb

+
+
+vayesta.core.qemb.scrcoulomb.build_screened_eris(emb, fragments=None, cderi_ov=None, calc_e=True, npoints=48, log=None)[source]
+

Generates renormalised coulomb interactions for use in local cluster calculations. +Currently requires unrestricted system.

+
+
Parameters:
+
    +
  • emb (Embedding) – Embedding instance.

  • +
  • fragments (list of vayesta.qemb.Fragment subclasses, optional) – List of fragments for the calculation, used to define local interaction spaces. +If None, emb.get_fragments(sym_parent=None) is used. Default: None.

  • +
  • cderi_ov (np.array or tuple of np.array, optional.) – Cholesky-decomposed ERIs in the particle-hole basis of mf. If mf is unrestricted +this should be a list of arrays corresponding to the different spin channels.

  • +
  • calc_ecorrection (bool, optional.) – Whether to calculate a nonlocal energy correction at the level of RPA

  • +
  • npoints (int, optional) – Number of points for numerical integration. Default: 48.

  • +
  • log (logging.Logger, optional) – Logger object. If None, the logger of the emb object is used. Default: None.

  • +
+
+
Returns:
+

    +
  • seris_ov (list of tuples of np.array) – List of spin-dependent screened (ov|ov), for each fragment provided.

  • +
  • erpa (float) – Delta RPA correction computed as difference between full system RPA energy and +cluster correlation energies; currently only functional in CAS fragmentations.

  • +
+

+
+
+
+ +
+
+vayesta.core.qemb.scrcoulomb.get_screened_eris_full(eris, seris_ov, copy=True, log=None)[source]
+

Build full array of screened ERIs, given the bare ERIs and screening.

+
+ +
+
+vayesta.core.qemb.scrcoulomb.get_screened_eris_ccsd(eris, seris_ov, add_restore_bare=True, log=None)[source]
+
+ +
+
+

vayesta.core.qemb.ufragment

+
+
+class vayesta.core.qemb.ufragment.UFragment(base, fid, name, c_frag, c_env, solver=None, atoms=None, aos=None, active=True, sym_parent=None, sym_op=None, mpi_rank=0, flags=None, log=None, **kwargs)[source]
+

Bases: Fragment

+
+
+log_info()[source]
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None, **kwargs)[source]
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occ – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, **kwargs)[source]
+

Diagonalize Fock matrix within subspace.

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=1, **kwargs)[source]
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 1, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ (ndarray) – Occupied cluster orbitals.

  • +
  • c_cluster_vir (ndarray) – Virtual cluster orbitals.

  • +
+

+
+
+
+ +
+
+get_fragment_projector(coeff, c_proj=None, **kwargs)[source]
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_fragment_mf_energy()[source]
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)[source]
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)[source]
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_symmetry_error(frag, dm1=None)[source]
+

Get translational symmetry error between two fragments.

+
+ +
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: int | NoneType = None)
+

Bases: object

+
+
+bath_parent_fragment_id: int | None = None
+
+ +
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+ +
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0)
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None)
+

Bases: object

+
+
+converged: bool = None
+
+ +
+
+e_corr: float = None
+
+ +
+
+fid: int = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_solver(solver)
+
+ +
+
+property cluster
+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+copy(fid=None, name=None, **kwargs)
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+couple_to_fragment(frag)
+
+ +
+
+couple_to_fragments(frags)
+
+ +
+
+get_coeff_env()
+
+ +
+
+get_frag_hamil()
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+get_overlap(key)
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_solver(solver=None)
+
+ +
+
+get_solver_options(*args, **kwargs)
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)
+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)
+
+ +
+
+get_symmetry_operation()
+
+ +
+
+get_symmetry_parent()
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+property hamil
+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+make_bath()
+
+ +
+
+make_cluster()
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)
+
+ +
+
+project_ref_orbitals(c_ref, c)
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)
+
+ +
+
+property results
+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+trimmed_name(length=10, add_dots=True)
+

Fragment name trimmed to a given maximum length.

+
+ +
+ +
+
+

vayesta.core.qemb.uqemb

+
+
+class vayesta.core.qemb.uqemb.UEmbedding(mf, solver='CCSD', log=None, overwrite=None, **kwargs)[source]
+

Bases: Embedding

+

Spin unrestricted quantum embedding.

+
+
+Fragment
+

alias of UFragment

+
+ +
+
+is_rhf = False
+
+ +
+
+is_uhf = True
+
+ +
+
+spinsym = 'unrestricted'
+
+ +
+
+property nmo
+

Total number of molecular orbitals (MOs).

+
+ +
+
+property nocc
+

Number of occupied MOs.

+
+ +
+
+property nvir
+

Number of virtual MOs.

+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+get_exxdiv()[source]
+

Get divergent exact-exchange (exxdiv) energy correction and potential.

+
+
Returns:
+

    +
  • e_exxdiv (float) – Divergent exact-exchange energy correction per unit cell.

  • +
  • v_exxdiv (array) – Divergent exact-exchange potential correction in AO basis.

  • +
+

+
+
+
+ +
+
+get_eris_array_uhf(mo_coeff, mo_coeff2=None, compact=False)[source]
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff (tuple(2) of (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

Electron-repulsion integrals in MO basis.

+
+
Return type:
+

eris

+
+
+
+ +
+
+get_eris_object(postscf, fock=None)[source]
+

Get ERIs for post-SCF methods.

+

For folded PBC calculations, this folds the MO back into k-space +and contracts with the k-space three-center integrals..

+
+
Parameters:
+

postscf (one of the following post-SCF methods: MP2, CCSD, RCCSD, DFCCSD) – Post-SCF method with attribute mo_coeff set.

+
+
Returns:
+

eris – ERIs which can be used for the respective post-SCF method.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+update_mf(mo_coeff, mo_energy=None, veff=None)[source]
+

Update underlying mean-field object.

+
+ +
+
+check_fragment_symmetry(dm1, charge_tol=1e-06, spin_tol=1e-06)[source]
+

Check that the mean-field obeys the symmetry between fragments.

+
+ +
+
+make_rdm1_demo(*args, **kwargs)[source]
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – Alpha- and beta one-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

tuple of (n, n) arrays

+
+
+
+ +
+
+make_rdm2_demo(*args, **kwargs)[source]
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+pop_analysis(dm1, mo_coeff=None, local_orbitals='lowdin', write=True, minao='auto', mpi_rank=0, **kwargs)[source]
+
+
Parameters:
+
    +
  • dm1 ((N, N) array) – If mo_coeff is None, AO representation is assumed.

  • +
  • local_orbitals ({'lowdin', 'mulliken', 'iao+pao'} or array) – Kind of population analysis. Default: ‘lowdin’.

  • +
+
+
Returns:
+

pop – Population of atomic orbitals.

+
+
Return type:
+

    +
  1. array

  2. +
+

+
+
+
+ +
+
+get_atomic_charges(pop)[source]
+
+ +
+
+get_corrfunc(kind, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None, use_symmetry=True, orbital_filter=None)
+

Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X.

+

TODO: MPI

+
+
Parameters:
+

atoms (list[int] or list[list[int]], optional) – Atom indices for which the spin-spin correlation function should be evaluated. +If set to None (default), all atoms of the system will be considered. +If a list is given, all atom pairs formed from this list will be considered. +If a list of two lists is given, the first list contains the indices of atom A, +and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. +This is useful in cases where one is only interested in the correlation to +a small subset of atoms. Default: None

+
+
Returns:
+

corr – Atom projected correlation function.

+
+
Return type:
+

array(N,M)

+
+
+
+ +
+
+class Options(store_eris: bool = True, global_frag_chempot: float = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: Union[str, NoneType] = None)
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+bath_options: dict
+
+ +
+
+solver_options: dict
+
+ +
+ +
+
+brueckner_scmf(*args, **kwargs)
+

Decorator for Brueckner-DMET.

+
+ +
+
+build_screened_eris(*args, **kwargs)
+

Generates renormalised coulomb interactions for use in local cluster calculations. +Currently requires unrestricted system.

+
+
Parameters:
+
    +
  • emb (Embedding) – Embedding instance.

  • +
  • fragments (list of vayesta.qemb.Fragment subclasses, optional) – List of fragments for the calculation, used to define local interaction spaces. +If None, emb.get_fragments(sym_parent=None) is used. Default: None.

  • +
  • cderi_ov (np.array or tuple of np.array, optional.) – Cholesky-decomposed ERIs in the particle-hole basis of mf. If mf is unrestricted +this should be a list of arrays corresponding to the different spin channels.

  • +
  • calc_ecorrection (bool, optional.) – Whether to calculate a nonlocal energy correction at the level of RPA

  • +
  • npoints (int, optional) – Number of points for numerical integration. Default: 48.

  • +
  • log (logging.Logger, optional) – Logger object. If None, the logger of the emb object is used. Default: None.

  • +
+
+
Returns:
+

    +
  • seris_ov (list of tuples of np.array) – List of spin-dependent screened (ov|ov), for each fragment provided.

  • +
  • erpa (float) – Delta RPA correction computed as difference between full system RPA energy and +cluster correlation energies; currently only functional in CAS fragmentations.

  • +
+

+
+
+
+ +
+
+cas_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_solver(solver)
+
+ +
+
+communicate_clusters()
+

Communicate cluster orbitals between MPI ranks.

+
+ +
+
+create_invsym_fragments(center, fragments=None, unit='Ang', **kwargs)
+

Create inversion symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of inversion-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_mirrorsym_fragments(axis, center, fragments=None, unit='Ang', **kwargs)
+

Create mirror symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of mirror-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_rotsym_fragments(order, axis, center, fragments=None, unit='Ang', **kwargs)
+

Create rotationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of rotationally-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_symmetric_fragments(symmetry, fragments=None, symbol=None, mf_tol=None, check_mf=True)
+

Add rotationally or translationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: self.opts.symmetry_mf_tol.

+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_transsym_fragments(translation, fragments=None, **kwargs)
+

Create translationally symmetric fragments.

+
+
Parameters:
+
    +
  • translation (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+property df
+
+ +
+
+property e_mf
+

Total mean-field energy per unit cell (not folded supercell). +Note that the input unit cell itself can be a supercell, in which case +e_mf refers to this cell.

+
+ +
+
+property e_nuc
+

Nuclear-repulsion energy per unit cell (not folded supercell).

+
+ +
+
+get_average_cluster_size(average='mean')
+
+ +
+
+get_cderi(mo_coeff, compact=False, blksize=None)
+

Get density-fitted three-center integrals in MO basis.

+
+ +
+
+get_corrfunc_mf(kind, dm1=None, atoms=None, projection='sao')
+

dm1 in MO basis

+
+ +
+
+get_dmet_elec_energy(part_cumulant=True, approx_cumulant=True)
+

Calculate electronic DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_dmet_energy(part_cumulant=True, approx_cumulant=True, with_nuc=True, with_exxdiv=True)
+

Calculate DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
  • with_nuc (bool, optional) – Include nuclear-repulsion energy. Default: True.

  • +
  • with_exxdiv (bool, optional) – Include divergent exact-exchange correction. Default: True.

  • +
+
+
Returns:
+

e_dmet – DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_eris_array(mo_coeff, compact=False)
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff ([list(4) of] (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

eris – Electron-repulsion integrals in MO basis.

+
+
Return type:
+

(n(MO), n(MO), n(MO), n(MO)) array

+
+
+
+ +
+
+get_fock(dm1=None, with_exxdiv=True)
+

Fock matrix in AO basis.

+
+ +
+
+get_fock_for_bath(dm1=None, with_exxdiv=True)
+

Fock matrix used for bath orbitals.

+
+ +
+
+get_fock_for_energy(dm1=None, with_exxdiv=True)
+

Fock matrix used for energy evaluation.

+
+ +
+
+get_fragment_overlap_norm(fragments=None, occupied=True, virtual=True, norm=2)
+

Get matrix of overlap norms between fragments.

+
+ +
+
+get_fragments(fragments=None, options=None, flags=None, **filters)
+

Return all fragments which obey the specified conditions.

+
+
Parameters:
+

**filters – List of returned fragments will be filtered according to specified +keyword arguments.

+
+
Returns:
+

fragments – List of fragments.

+
+
Return type:
+

list

+
+
+

Examples

+

Only returns fragments with mpi_rank 0, 1, or 2:

+
>>> self.get_fragments(mpi_rank=[0,1,2])
+
+
+

Only returns fragments with no symmetry parent:

+
>>> self.get_fragments(sym_parent=None)
+
+
+
+ +
+
+get_hcore()
+

Core Hamiltonian (kinetic energy plus nuclear-electron attraction).

+
+ +
+
+get_hcore_for_energy()
+

Core Hamiltonian used for energy evaluation.

+
+ +
+
+get_lo_coeff(local_orbitals='lowdin', minao='auto')
+
+ +
+
+get_max_cluster_size()
+
+ +
+
+get_mean_cluster_size()
+
+ +
+
+get_min_cluster_size()
+
+ +
+
+get_ovlp()
+

AO-overlap matrix.

+
+ +
+
+get_ovlp_power(power)
+

get power of AO overlap matrix.

+

For folded calculations, this uses the k-point sampled overlap, for better performance and accuracy.

+
+
Parameters:
+

power (float) – Matrix power.

+
+
Returns:
+

spow – Matrix power of AO overlap matrix

+
+
Return type:
+

(n(AO), n(AO)) array

+
+
+
+ +
+
+get_symmetry_child_fragments(include_parents=False)
+

Returns a list of all fragments, which are children to symmetry related parent fragments.

+
+
Parameters:
+

include_parents (bool, optional) – If true, the parent fragment of each symmetry group is prepended to each symmetry sublist.

+
+
Returns:
+

children – A list with the length of the number of parent fragments in the system, each element +being another list containing all the children fragments of the given parent fragment. +Both the outer and inner lists are ordered in the same way that the fragments appear in self.fragments.

+
+
Return type:
+

list of lists

+
+
+
+ +
+
+get_symmetry_parent_fragments()
+

Returns a list of all fragments, which are parents to symmetry related child fragments.

+
+
Returns:
+

parents – A list of all parent fragments, ordered in the same way as they appear in self.fragments.

+
+
Return type:
+

list

+
+
+
+ +
+
+get_veff(dm1=None, with_exxdiv=True)
+

Hartree-Fock Coulomb and exchange potential in AO basis.

+
+ +
+
+get_veff_for_energy(dm1=None, with_exxdiv=True)
+

Hartree-Fock potential used for energy evaluation.

+
+ +
+
+has_complete_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete.

+
+ +
+
+has_complete_occupied_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the occupied space.

+
+ +
+
+has_complete_virtual_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the virtual space.

+
+ +
+
+property has_df
+
+ +
+
+property has_exxdiv
+

Correction for divergent exact-exchange potential.

+
+ +
+
+has_orthonormal_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal.

+
+ +
+
+iao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+iaopao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO+PAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+init_mf(mf)
+
+ +
+
+loop()
+

Loop over fragments.

+
+ +
+
+property mo_coeff
+

Molecular orbital coefficients.

+
+ +
+
+property mo_energy
+

Molecular orbital energies.

+
+ +
+
+property mo_energy_occ
+

Occupied MO energies.

+
+ +
+
+property mo_energy_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_occ
+

Molecular orbital occupations.

+
+ +
+
+property mol
+

Mole or Cell object.

+
+ +
+
+property nao
+

Number of atomic orbitals.

+
+ +
+
+property ncells
+

Number of primitive cells within supercell.

+
+ +
+
+property nfrag
+

Number of fragments.

+
+ +
+
+optimize_chempot(cpt_init=0.0, dm1func=None, dm1kwds=None, robust=False)
+
+ +
+
+property pbc_dimension
+
+ +
+
+pdmet_scmf(*args, **kwargs)
+

Decorator for p-DMET.

+
+ +
+
+require_complete_fragmentation(message=None, incl_virtual=True, **kwargs)
+
+ +
+
+reset(*args, **kwargs)
+
+ +
+
+sao_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of SAO (Lowdin-AO) fragments.

+
+ +
+
+set_hcore(value)
+
+ +
+
+set_ovlp(value)
+
+ +
+
+set_veff(value)
+
+ +
+
+site_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+write_population(pop, filename=None, filemode='a', orbital_resolved=False)
+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.core.scmf.html b/apidoc/vayesta.core.scmf.html new file mode 100644 index 000000000..44d2808a2 --- /dev/null +++ b/apidoc/vayesta.core.scmf.html @@ -0,0 +1,458 @@ + + + + + + + vayesta.core.scmf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.core.scmf

+
+

Submodules

+
+
+

vayesta.core.scmf.brueckner

+
+
+class vayesta.core.scmf.brueckner.Brueckner_RHF(*args, diis_obj='dm1', **kwargs)[source]
+

Bases: SCMF

+
+
+name = 'Brueckner'
+
+ +
+
+get_t1()[source]
+

Get global T1 amplitudes from quantum embedding calculation.

+
+ +
+
+update_mo_coeff(mf, diis=None)[source]
+

Get new MO coefficients.

+
+ +
+
+check_convergence(e_tot, dm1, e_last=None, dm1_last=None, etol=None, dtol=None)
+
+ +
+
+property e_tot
+
+ +
+
+property e_tot_oneshot
+
+ +
+
+get_diis()
+
+ +
+
+kernel(*args, **kwargs)
+
+ +
+
+property kernel_orig
+

Original kernel of embedding method.

+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+ +
+
+class vayesta.core.scmf.brueckner.Brueckner_UHF(*args, diis_obj='dm1', **kwargs)[source]
+

Bases: Brueckner_RHF

+
+
+update_mo_coeff(mf, diis=None)[source]
+

Get new MO coefficients.

+
+ +
+
+check_convergence(e_tot, dm1, e_last=None, dm1_last=None, etol=None, dtol=None)
+
+ +
+
+property e_tot
+
+ +
+
+property e_tot_oneshot
+
+ +
+
+get_diis()
+
+ +
+
+get_t1()
+

Get global T1 amplitudes from quantum embedding calculation.

+
+ +
+
+kernel(*args, **kwargs)
+
+ +
+
+property kernel_orig
+

Original kernel of embedding method.

+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+
+name = 'Brueckner'
+
+ +
+ +
+
+

vayesta.core.scmf.pdmet

+
+
+class vayesta.core.scmf.pdmet.PDMET_RHF(*args, dm_type='default', **kwargs)[source]
+

Bases: SCMF

+
+
+name = 'p-DMET'
+
+ +
+
+get_rdm1()[source]
+

DM1 in MO basis.

+
+ +
+
+update_mo_coeff(mf, diis=None)[source]
+

Get new set of MO coefficients.

+

Must be implemented for any SCMF method.

+
+ +
+
+check_convergence(e_tot, dm1, e_last=None, dm1_last=None, etol=None, dtol=None)
+
+ +
+
+property e_tot
+
+ +
+
+property e_tot_oneshot
+
+ +
+
+get_diis()
+
+ +
+
+kernel(*args, **kwargs)
+
+ +
+
+property kernel_orig
+

Original kernel of embedding method.

+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+ +
+
+class vayesta.core.scmf.pdmet.PDMET_UHF(*args, dm_type='default', **kwargs)[source]
+

Bases: PDMET_RHF

+
+
+get_rdm1()[source]
+

DM1 in MO basis.

+
+ +
+
+update_mo_coeff(mf, diis=None)[source]
+

Get new set of MO coefficients.

+

Must be implemented for any SCMF method.

+
+ +
+
+check_convergence(e_tot, dm1, e_last=None, dm1_last=None, etol=None, dtol=None)
+
+ +
+
+property e_tot
+
+ +
+
+property e_tot_oneshot
+
+ +
+
+get_diis()
+
+ +
+
+kernel(*args, **kwargs)
+
+ +
+
+property kernel_orig
+

Original kernel of embedding method.

+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+
+name = 'p-DMET'
+
+ +
+ +
+
+

vayesta.core.scmf.scmf

+

Self-consistent mean-field decorators

+
+
+class vayesta.core.scmf.scmf.SCMF(emb, etol=1e-08, dtol=1e-06, maxiter=100, damping=0.0, diis=True)[source]
+

Bases: object

+
+
+name = 'SCMF'
+
+ +
+
+property log
+
+ +
+
+property mf
+
+ +
+
+property e_tot
+
+ +
+
+property e_tot_oneshot
+
+ +
+
+get_diis()[source]
+
+ +
+
+property kernel_orig
+

Original kernel of embedding method.

+
+ +
+
+update_mo_coeff(mf, diis=None)[source]
+

Get new set of MO coefficients.

+

Must be implemented for any SCMF method.

+
+ +
+
+check_convergence(e_tot, dm1, e_last=None, dm1_last=None, etol=None, dtol=None)[source]
+
+ +
+
+kernel(*args, **kwargs)[source]
+
+ +
+ +
+
+

Module contents

+
+
+vayesta.core.scmf.PDMET(emb, *args, **kwargs)[source]
+
+ +
+
+vayesta.core.scmf.Brueckner(emb, *args, **kwargs)[source]
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.core.symmetry.html b/apidoc/vayesta.core.symmetry.html new file mode 100644 index 000000000..cacd3dff2 --- /dev/null +++ b/apidoc/vayesta.core.symmetry.html @@ -0,0 +1,835 @@ + + + + + + + vayesta.core.symmetry — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.core.symmetry

+
+

Submodules

+
+
+

vayesta.core.symmetry.group

+
+
+class vayesta.core.symmetry.group.SymmetryGroup(mol, xtol=1e-08, check_basis=True, check_label=False)[source]
+

Bases: object

+

Detect symmetry group automatically (use spglib?).

+
+
+property natom
+
+ +
+
+property nao
+
+ +
+
+property dimension
+
+ +
+
+compare_atoms(atom1, atom2, check_basis=None, check_label=None)[source]
+

Compare atom symbol and (optionally) basis between atom1 and atom2.

+
+ +
+
+get_closest_atom(coords)[source]
+

pos in internal coordinates.

+
+ +
+
+add_rotation(order, axis, center, unit='ang')[source]
+
+ +
+
+set_translations(nimages)[source]
+

Set translational symmetry.

+
+
Parameters:
+

nimages (array(3)) – Number of translationally symmetric images in the direction of the first, second, +and third lattice vector.

+
+
+
+ +
+
+clear_translations()[source]
+
+ +
+ +
+
+

vayesta.core.symmetry.operation

+
+
+class vayesta.core.symmetry.operation.SymmetryOperation(group)[source]
+

Bases: object

+
+
+property mol
+
+ +
+
+property xtol
+
+ +
+
+property natom
+
+ +
+
+property nao
+
+ +
+
+call_wrapper(a, *args, axis=0, **kwargs)[source]
+

Common pre- and post-processing for all symmetries.

+

Symmetry specific processing is performed in call_kernel.

+
+ +
+
+call_kernel(*args, **kwargs)[source]
+
+ +
+
+apply_to_point(r0)[source]
+
+ +
+
+get_atom_reorder()[source]
+

Reordering of atoms for a given rotation.

+
+
Returns:
+

    +
  • reorder (list)

  • +
  • inverse (list)

  • +
+

+
+
+
+ +
+
+get_ao_reorder(atom_reorder)[source]
+
+ +
+
+rotate_angular_orbitals(a, rotmats)[source]
+

Rotate between orbitals in p,d,f,… shells.

+
+ +
+ +
+
+class vayesta.core.symmetry.operation.SymmetryIdentity(group)[source]
+

Bases: SymmetryOperation

+
+
+apply_to_point(r0)[source]
+
+ +
+
+get_atom_reorder()[source]
+

Reordering of atoms for a given rotation.

+
+
Returns:
+

    +
  • reorder (list)

  • +
  • inverse (list)

  • +
+

+
+
+
+ +
+
+call_kernel(*args, **kwargs)
+
+ +
+
+call_wrapper(a, *args, axis=0, **kwargs)
+

Common pre- and post-processing for all symmetries.

+

Symmetry specific processing is performed in call_kernel.

+
+ +
+
+get_ao_reorder(atom_reorder)
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property natom
+
+ +
+
+rotate_angular_orbitals(a, rotmats)
+

Rotate between orbitals in p,d,f,… shells.

+
+ +
+
+property xtol
+
+ +
+ +
+
+class vayesta.core.symmetry.operation.SymmetryInversion(group, center=(0, 0, 0))[source]
+

Bases: SymmetryOperation

+
+
+apply_to_point(r0)[source]
+
+ +
+
+call_kernel(a)[source]
+
+ +
+
+call_wrapper(a, *args, axis=0, **kwargs)
+

Common pre- and post-processing for all symmetries.

+

Symmetry specific processing is performed in call_kernel.

+
+ +
+
+get_ao_reorder(atom_reorder)
+
+ +
+
+get_atom_reorder()
+

Reordering of atoms for a given rotation.

+
+
Returns:
+

    +
  • reorder (list)

  • +
  • inverse (list)

  • +
+

+
+
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property natom
+
+ +
+
+rotate_angular_orbitals(a, rotmats)
+

Rotate between orbitals in p,d,f,… shells.

+
+ +
+
+property xtol
+
+ +
+ +
+
+class vayesta.core.symmetry.operation.SymmetryReflection(group, axis, center=(0, 0, 0))[source]
+

Bases: SymmetryOperation

+
+
+as_matrix()[source]
+

Householder matrix. Does not account for shifted origin!

+
+ +
+
+apply_to_point(r0)[source]
+

Householder transformation.

+
+ +
+
+call_kernel(a)[source]
+
+ +
+
+call_wrapper(a, *args, axis=0, **kwargs)
+

Common pre- and post-processing for all symmetries.

+

Symmetry specific processing is performed in call_kernel.

+
+ +
+
+get_ao_reorder(atom_reorder)
+
+ +
+
+get_atom_reorder()
+

Reordering of atoms for a given rotation.

+
+
Returns:
+

    +
  • reorder (list)

  • +
  • inverse (list)

  • +
+

+
+
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property natom
+
+ +
+
+rotate_angular_orbitals(a, rotmats)
+

Rotate between orbitals in p,d,f,… shells.

+
+ +
+
+property xtol
+
+ +
+ +
+
+class vayesta.core.symmetry.operation.SymmetryRotation(group, rotvec, center=(0, 0, 0))[source]
+

Bases: SymmetryOperation

+
+
+as_matrix()[source]
+
+ +
+
+apply_to_point(r0)[source]
+
+ +
+
+call_kernel(a)[source]
+
+ +
+
+call_wrapper(a, *args, axis=0, **kwargs)
+

Common pre- and post-processing for all symmetries.

+

Symmetry specific processing is performed in call_kernel.

+
+ +
+
+get_ao_reorder(atom_reorder)
+
+ +
+
+get_atom_reorder()
+

Reordering of atoms for a given rotation.

+
+
Returns:
+

    +
  • reorder (list)

  • +
  • inverse (list)

  • +
+

+
+
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property natom
+
+ +
+
+rotate_angular_orbitals(a, rotmats)
+

Rotate between orbitals in p,d,f,… shells.

+
+ +
+
+property xtol
+
+ +
+ +
+
+class vayesta.core.symmetry.operation.SymmetryTranslation(group, vector, boundary=None, atom_reorder=None, ao_reorder=None)[source]
+

Bases: SymmetryOperation

+
+
+call_kernel(a)[source]
+
+ +
+
+inverse()[source]
+
+ +
+
+property lattice_vectors
+
+ +
+
+property inv_lattice_vectors
+
+ +
+
+property boundary_phases
+
+ +
+
+property vector_xyz
+

Translation vector in real-space coordinates (unit = Bohr).

+
+ +
+
+property inverse_atom_reorder
+
+ +
+
+apply_to_point(r0)
+
+ +
+
+call_wrapper(a, *args, axis=0, **kwargs)
+

Common pre- and post-processing for all symmetries.

+

Symmetry specific processing is performed in call_kernel.

+
+ +
+
+get_atom_reorder()[source]
+

Reordering of atoms for a given translation.

+
+
Returns:
+

    +
  • reorder (list)

  • +
  • inverse (list)

  • +
  • phases (list)

  • +
+

+
+
+
+ +
+
+property mol
+
+ +
+
+property nao
+
+ +
+
+property natom
+
+ +
+
+rotate_angular_orbitals(a, rotmats)
+

Rotate between orbitals in p,d,f,… shells.

+
+ +
+
+property xtol
+
+ +
+
+get_ao_reorder(atom_reorder=None, atom_reorder_phases=None)[source]
+
+ +
+ +
+
+

vayesta.core.symmetry.symmetry

+
+
+vayesta.core.symmetry.symmetry.unit_vector(vector)[source]
+

Returns the unit vector of the vector.

+
+ +
+
+vayesta.core.symmetry.symmetry.angle_between(v1, v2)[source]
+

Returns the angle in radians between vectors ‘v1’ and ‘v2’:

+
>>> angle_between((1, 0, 0), (0, 1, 0))
+
+
+

1.5707963267948966 +>>> angle_between((1, 0, 0), (1, 0, 0)) +0.0 +>>> angle_between((1, 0, 0), (-1, 0, 0)) +3.141592653589793

+
+ +
+
+class vayesta.core.symmetry.symmetry.Symmetry(mf, log=<Logger vayesta.core.symmetry.symmetry (INFO)>)[source]
+

Bases: object

+
+
+property mol
+
+ +
+
+property cell
+
+ +
+
+property natom
+
+ +
+
+property natom_unique
+
+ +
+
+get_unique_atoms()[source]
+
+ +
+
+primitive_lattice_vectors()[source]
+
+ +
+
+atom_coords(unit='Bohr')[source]
+
+ +
+
+lattice_vectors()[source]
+
+ +
+
+property pbcndims
+

0 = No PBC, 1 = 1D 2 = 2D, 3 = 3D.

+
+
Type:
+

Number of periodic boundary conditions

+
+
+
+ +
+
+property has_pbc
+
+ +
+
+compare_atoms(atom1, atom2, respect_labels=False, respect_basis=True)[source]
+

Compare atom symbol and (optionally) basis between atom1 and atom2.

+
+ +
+
+find_subcells(respect_basis=True, respect_labels=False, respect_dm1=None, r_tol=1e-05, dm1_tol=1e-06)[source]
+

Find subcells within cell, with unit cell vectors parallel to the supercell.

+
+
Parameters:
+
    +
  • respect_basis (bool, optional) – If True, the basis functions are considered when determining the symmetry. Default: True.

  • +
  • respect_labels (bool, optional) – If True, the labels of atoms (such as “H1” or “C*”) are considered when determining the symmetry. Default: False.

  • +
  • respect_dm1 (array or None, optional) – If a (tuple of) density-matrix is passed, it is considered when determining the symmetry. Default: None.

  • +
  • r_tol (float, optional) – Real space tolerance to determine if two atoms are symmetry equivalent. Default: 1e-5.

  • +
  • dm1_tol (float, optional) – Density-matrix tolerance to determine the symmetry. Default: 1e-6.

  • +
+
+
Returns:
+

nsubcells – Number of primitive subcells in (a0, a1, a2) direction.

+
+
Return type:
+

tuple(3)

+
+
+
+ +
+ +
+
+

vayesta.core.symmetry.tsymmetry

+

Translational symmetry module.

+
+
+vayesta.core.symmetry.tsymmetry.to_bohr(a, unit)[source]
+
+ +
+
+vayesta.core.symmetry.tsymmetry.get_mesh_tvecs(cell, tvecs, unit='Ang')[source]
+
+ +
+
+vayesta.core.symmetry.tsymmetry.loop_tvecs(cell, tvecs, unit='Ang', include_origin=False)[source]
+
+ +
+
+vayesta.core.symmetry.tsymmetry.tsymmetric_atoms(cell, rvecs, xtol=1e-08, unit='Ang', check_element=True, check_basis=True)[source]
+

Get indices of translationally symmetric atoms.

+
+
Parameters:
+
    +
  • cell (pyscf.pbc.gto.Cell) – Unit cell.

  • +
  • rvecs ((3, 3) array) – The rows contain the real space translation vectors.

  • +
  • xtol (float, optional) – Tolerance to identify equivalent atom positions. Default: 1e-8

  • +
  • unit (['Ang', 'Bohr']) – Unit of rvecs and xtol. Default: ‘Ang’.

  • +
+
+
Returns:
+

indices – List with length cell.natm. Each element represents the lowest atom index of a +translationally symmetry equivalent atom.

+
+
Return type:
+

list

+
+
+
+ +
+
+vayesta.core.symmetry.tsymmetry.compare_atoms(cell, atm1, atm2, check_basis=True)[source]
+
+ +
+
+vayesta.core.symmetry.tsymmetry.reorder_atoms(cell, tvec, boundary=None, unit='Ang', check_basis=True)[source]
+

Reordering of atoms for a given translation.

+
+
Parameters:
+

tvec – Translation vector.

+
+
Returns:
+

    +
  • reorder (list)

  • +
  • inverse (list)

  • +
+

+
+
+
+ +
+
+vayesta.core.symmetry.tsymmetry.reorder_atoms2aos(cell, atom_reorder, atom_phases)[source]
+
+ +
+
+vayesta.core.symmetry.tsymmetry.reorder_aos(cell, tvec, unit='Ang')[source]
+
+ +
+
+vayesta.core.symmetry.tsymmetry.get_tsymmetry_op(cell, tvec, unit='Ang')[source]
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.core.types.html b/apidoc/vayesta.core.types.html new file mode 100644 index 000000000..d10008122 --- /dev/null +++ b/apidoc/vayesta.core.types.html @@ -0,0 +1,1659 @@ + + + + + + + vayesta.core.types — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.core.types

+
+

Subpackages

+
+ +
+
+
+

Submodules

+
+
+

vayesta.core.types.cluster

+
+
+class vayesta.core.types.cluster.Cluster(active_orbitals, frozen_orbitals)[source]
+

Bases: object

+
+
+static from_coeffs(c_active_occ, c_active_vir, c_frozen_occ, c_frozen_vir)[source]
+
+ +
+
+property norb_active
+
+ +
+
+property nocc_active
+
+ +
+
+property nvir_active
+
+ +
+
+property c_active
+
+ +
+
+property c_active_occ
+
+ +
+
+property c_active_vir
+
+ +
+
+property norb
+
+ +
+
+property nocc
+
+ +
+
+property nvir
+
+ +
+
+property coeff
+
+ +
+
+property c_occ
+
+ +
+
+property c_vir
+
+ +
+
+property norb_frozen
+
+ +
+
+property nocc_frozen
+
+ +
+
+property nvir_frozen
+
+ +
+
+property c_frozen
+
+ +
+
+property c_frozen_occ
+
+ +
+
+property c_frozen_vir
+
+ +
+
+property norb_total
+
+ +
+
+property nocc_total
+
+ +
+
+property nvir_total
+
+ +
+
+property c_total
+
+ +
+
+property c_total_occ
+
+ +
+
+property c_total_vir
+
+ +
+
+copy()[source]
+
+ +
+
+basis_transform(trafo, inplace=False)[source]
+
+ +
+ +
+
+class vayesta.core.types.cluster.ClusterRHF(active_orbitals, frozen_orbitals)[source]
+

Bases: Cluster

+
+
+spinsym = 'restricted'
+
+ +
+
+get_active_slice()[source]
+
+ +
+
+get_active_indices()[source]
+
+ +
+
+get_frozen_indices()[source]
+
+ +
+
+repr_size()[source]
+
+ +
+
+basis_transform(trafo, inplace=False)
+
+ +
+
+property c_active
+
+ +
+
+property c_active_occ
+
+ +
+
+property c_active_vir
+
+ +
+
+property c_frozen
+
+ +
+
+property c_frozen_occ
+
+ +
+
+property c_frozen_vir
+
+ +
+
+property c_occ
+
+ +
+
+property c_total
+
+ +
+
+property c_total_occ
+
+ +
+
+property c_total_vir
+
+ +
+
+property c_vir
+
+ +
+
+property coeff
+
+ +
+
+copy()
+
+ +
+
+static from_coeffs(c_active_occ, c_active_vir, c_frozen_occ, c_frozen_vir)
+
+ +
+
+property nocc
+
+ +
+
+property nocc_active
+
+ +
+
+property nocc_frozen
+
+ +
+
+property nocc_total
+
+ +
+
+property norb
+
+ +
+
+property norb_active
+
+ +
+
+property norb_frozen
+
+ +
+
+property norb_total
+
+ +
+
+property nvir
+
+ +
+
+property nvir_active
+
+ +
+
+property nvir_frozen
+
+ +
+
+property nvir_total
+
+ +
+ +
+
+class vayesta.core.types.cluster.ClusterUHF(active_orbitals, frozen_orbitals)[source]
+

Bases: Cluster

+
+
+spinsym = 'unrestricted'
+
+ +
+
+get_active_slice()[source]
+
+ +
+
+get_active_indices()[source]
+
+ +
+
+get_frozen_indices()[source]
+
+ +
+
+repr_size()[source]
+
+ +
+
+basis_transform(trafo, inplace=False)
+
+ +
+
+property c_active
+
+ +
+
+property c_active_occ
+
+ +
+
+property c_active_vir
+
+ +
+
+property c_frozen
+
+ +
+
+property c_frozen_occ
+
+ +
+
+property c_frozen_vir
+
+ +
+
+property c_occ
+
+ +
+
+property c_total
+
+ +
+
+property c_total_occ
+
+ +
+
+property c_total_vir
+
+ +
+
+property c_vir
+
+ +
+
+property coeff
+
+ +
+
+copy()
+
+ +
+
+static from_coeffs(c_active_occ, c_active_vir, c_frozen_occ, c_frozen_vir)
+
+ +
+
+property nocc
+
+ +
+
+property nocc_active
+
+ +
+
+property nocc_frozen
+
+ +
+
+property nocc_total
+
+ +
+
+property norb
+
+ +
+
+property norb_active
+
+ +
+
+property norb_frozen
+
+ +
+
+property norb_total
+
+ +
+
+property nvir
+
+ +
+
+property nvir_active
+
+ +
+
+property nvir_frozen
+
+ +
+
+property nvir_total
+
+ +
+ +
+
+

vayesta.core.types.ebwf

+
+
+

vayesta.core.types.orbitals

+
+
+vayesta.core.types.orbitals.Orbitals(coeff, *args, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.orbitals.SpatialOrbitals(coeff, energy=None, occ=None, labels=None, maxocc=2)[source]
+

Bases: MolecularOrbitals

+
+
+property nspin
+
+ +
+
+property norb
+
+ +
+
+property nocc
+
+ +
+
+property nvir
+
+ +
+
+property nelec
+
+ +
+
+property coeff_occ
+
+ +
+
+property coeff_vir
+
+ +
+
+basis_transform(trafo, inplace=False)[source]
+
+ +
+
+to_spin_orbitals()[source]
+
+ +
+
+to_general_orbitals()[source]
+
+ +
+
+pack(dtype=<class 'float'>)[source]
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+classmethod unpack(packed)[source]
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+copy()
+
+ +
+ +
+
+class vayesta.core.types.orbitals.SpinOrbitals(coeff, energy=None, occ=None, labels=None, maxocc=1)[source]
+

Bases: MolecularOrbitals

+
+
+classmethod from_spatial_orbitals(orbitals)[source]
+
+ +
+
+to_general_orbitals()[source]
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+
+property nspin
+
+ +
+
+basis_transform(trafo, inplace=False)[source]
+
+ +
+
+pack(dtype=<class 'float'>)[source]
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+classmethod unpack(packed)[source]
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+copy()
+
+ +
+ +
+
+class vayesta.core.types.orbitals.GeneralOrbitals(coeff, energy=None, occ=None, labels=None, maxocc=2)[source]
+

Bases: SpatialOrbitals

+
+
+property nspin
+
+ +
+
+classmethod from_spatial_orbitals(orbitals)[source]
+
+ +
+
+classmethod from_spin_orbitals(orbitals)[source]
+
+ +
+
+basis_transform(trafo, inplace=False)
+
+ +
+
+property coeff_occ
+
+ +
+
+property coeff_vir
+
+ +
+
+copy()
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property norb
+
+ +
+
+property nvir
+
+ +
+
+pack(dtype=<class 'float'>)
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+to_general_orbitals()
+
+ +
+
+to_spin_orbitals()
+
+ +
+
+classmethod unpack(packed)
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.core.types.wf.html b/apidoc/vayesta.core.types.wf.html new file mode 100644 index 000000000..8865016a0 --- /dev/null +++ b/apidoc/vayesta.core.types.wf.html @@ -0,0 +1,3779 @@ + + + + + + + vayesta.core.types.wf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.core.types.wf

+
+

Submodules

+
+
+

vayesta.core.types.wf.ccsd

+
+
+vayesta.core.types.wf.ccsd.CCSD_WaveFunction(mo, t1, t2, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.ccsd.RCCSD_WaveFunction(mo, t1, t2, l1=None, l2=None, projector=None)[source]
+

Bases: WaveFunction

+
+
+make_rdm1(t_as_lambda=False, with_mf=True, ao_basis=False)[source]
+
+ +
+
+make_rdm2(t_as_lambda=False, with_dm1=True, ao_basis=False, approx_cumulant=True)[source]
+
+ +
+
+make_rdm2_non_cumulant(t_as_lambda=False, ao_basis=False)[source]
+
+ +
+
+multiply(factor)[source]
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+pack(dtype=<class 'float'>)[source]
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+classmethod unpack(packed)[source]
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+copy()[source]
+
+ +
+
+as_unrestricted()[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=1.0)[source]
+

In intermediate normalization.

+
+ +
+
+as_ccsd()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.ccsd.UCCSD_WaveFunction(mo, t1, t2, l1=None, l2=None, projector=None)[source]
+

Bases: RCCSD_WaveFunction

+
+
+property t1a
+
+ +
+
+property t1b
+
+ +
+
+property t2aa
+
+ +
+
+property t2ab
+
+ +
+
+property t2ba
+
+ +
+
+property t2bb
+
+ +
+
+property l1a
+
+ +
+
+property l1b
+
+ +
+
+property l2aa
+
+ +
+
+property l2ab
+
+ +
+
+property l2ba
+
+ +
+
+property l2bb
+
+ +
+
+make_rdm2_non_cumulant(t_as_lambda=False, ao_basis=False)[source]
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=1.0)[source]
+

In intermediate normalization.

+
+ +
+
+as_fci()[source]
+
+ +
+
+multiply(factor)[source]
+
+ +
+
+as_ccsd()
+
+ +
+
+as_unrestricted()
+
+ +
+
+copy()
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(t_as_lambda=False, with_mf=True, ao_basis=False)
+
+ +
+
+make_rdm2(t_as_lambda=False, with_dm1=True, ao_basis=False, approx_cumulant=True)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+
+pack(dtype=<class 'float'>)
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+classmethod unpack(packed)
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+ +
+
+

vayesta.core.types.wf.ccsdtq

+
+
+vayesta.core.types.wf.ccsdtq.CCSDTQ_WaveFunction(mo, *args, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction(mo, t1, t2, t3, t4)[source]
+

Bases: WaveFunction

+
+
+as_ccsdtq()[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+as_cisd(c0=1.0)[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction(mo, t1, t2, t3, t4)[source]
+

Bases: RCCSDTQ_WaveFunction

+
+
+as_ccsd()
+
+ +
+
+as_ccsdtq()
+
+ +
+
+as_cisd(c0=1.0)
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+

vayesta.core.types.wf.cisd

+
+
+vayesta.core.types.wf.cisd.CISD_WaveFunction(mo, c0, c1, c2, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.cisd.RCISD_WaveFunction(mo, c0, c1, c2, projector=None)[source]
+

Bases: WaveFunction

+
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+copy()[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=None)[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+get_cisdvec()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.cisd.UCISD_WaveFunction(mo, c0, c1, c2, projector=None)[source]
+

Bases: RCISD_WaveFunction

+
+
+property c1a
+
+ +
+
+property c1b
+
+ +
+
+property c2aa
+
+ +
+
+property c2ab
+
+ +
+
+property c2ba
+
+ +
+
+property c2bb
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=None)[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+get_cisdvec()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+copy()
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+

vayesta.core.types.wf.cisdtq

+
+
+vayesta.core.types.wf.cisdtq.CISDTQ_WaveFunction(mo, *args, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction(mo, c0, c1, c2, c3, c4)[source]
+

Bases: WaveFunction

+
+
+as_ccsdtq()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction(mo, c0, c1, c2, c3, c4)[source]
+

Bases: WaveFunction

+
+
+as_ccsdtq()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+

vayesta.core.types.wf.fci

+
+
+vayesta.core.types.wf.fci.FCI_WaveFunction(mo, ci, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.fci.RFCI_WaveFunction(mo, ci, projector=None)[source]
+

Bases: WaveFunction

+
+
+make_rdm1(ao_basis=False, with_mf=True)[source]
+
+ +
+
+make_rdm2(ao_basis=False, with_dm1=True, approx_cumulant=True)[source]
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False)[source]
+
+ +
+
+property c0
+
+ +
+
+as_unrestricted()[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=None)[source]
+
+ +
+
+as_cisdtq(c0=None)[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+as_ccsdtq()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.fci.UFCI_WaveFunction(mo, ci, projector=None)[source]
+

Bases: RFCI_WaveFunction

+
+
+make_rdm1(ao_basis=False, with_mf=True)[source]
+
+ +
+
+make_rdm2(ao_basis=False, with_dm1=True, approx_cumulant=True)[source]
+
+ +
+
+as_cisd(c0=None)[source]
+
+ +
+
+as_cisdtq(c0=None)[source]
+
+ +
+
+as_ccsd()
+
+ +
+
+as_ccsdtq()
+
+ +
+
+as_fci()
+
+ +
+
+as_mp2()
+
+ +
+
+as_unrestricted()
+
+ +
+
+property c0
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+
+project(projector, inplace=False)
+
+ +
+
+restore(projector=None, inplace=False)
+
+ +
+ +
+
+class vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy(mo, ci, dummy_orbs, projector=None)[source]
+

Bases: UFCI_WaveFunction

+

Class to allow use of dummy orbitals to balance alpha and beta spin channels. +This is done by introducing a dummy SpinOrbitals object during calculation of properties in orbital basis, then +removal of dummy indices from these quantities. +We currently choose to only introduce virtual orbitals.

+

TODO check all quantities removed are negligible.

+
+
+property ndummy
+
+ +
+
+property dummy_mo
+
+ +
+
+make_rdm1(ao_basis=False, *args, **kwargs)[source]
+
+ +
+
+make_rdm2(ao_basis=False, *args, **kwargs)[source]
+
+ +
+
+as_cisd(*args, **kwargs)[source]
+
+ +
+
+as_cisdtq(*args, **kwargs)[source]
+
+ +
+
+as_ccsd()
+
+ +
+
+as_ccsdtq()
+
+ +
+
+as_fci()
+
+ +
+
+as_mp2()
+
+ +
+
+as_unrestricted()
+
+ +
+
+property c0
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+
+project(projector, inplace=False)
+
+ +
+
+restore(projector=None, inplace=False)
+
+ +
+ +
+
+

vayesta.core.types.wf.hf

+
+
+vayesta.core.types.wf.hf.HF_WaveFunction(mo)[source]
+
+ +
+
+class vayesta.core.types.wf.hf.RHF_WaveFunction(mo, projector=None)[source]
+

Bases: WaveFunction

+
+
+make_rdm1(mo_coeff=None, mo_occ=None, ao_basis=True)[source]
+
+ +
+
+make_rdm2(mo_coeff=None, mo_occ=None, ao_basis=True)[source]
+
+ +
+
+as_restricted()[source]
+
+ +
+
+as_unrestricted()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.hf.UHF_WaveFunction(mo, projector=None)[source]
+

Bases: RHF_WaveFunction

+
+
+make_rdm1(mo_coeff=None, mo_occ=None, ao_basis=True)[source]
+
+ +
+
+make_rdm2(mo_coeff=None, mo_occ=None, ao_basis=True)[source]
+
+ +
+
+as_restricted()[source]
+
+ +
+
+as_unrestricted()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+

vayesta.core.types.wf.mp2

+
+
+vayesta.core.types.wf.mp2.MP2_WaveFunction(mo, t2, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.mp2.RMP2_WaveFunction(mo, t2, projector=None)[source]
+

Bases: WaveFunction

+
+
+make_rdm1(with_mf=True, ao_basis=False)[source]
+
+ +
+
+make_rdm2(with_dm1=True, ao_basis=False, approx_cumulant=True)[source]
+
+ +
+
+as_restricted()[source]
+
+ +
+
+as_unrestricted()[source]
+
+ +
+
+multiply(factor)[source]
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=1.0)[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+copy()[source]
+
+ +
+
+pack(dtype=<class 'float'>)[source]
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+classmethod unpack(packed)[source]
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.mp2.UMP2_WaveFunction(mo, t2, projector=None)[source]
+

Bases: RMP2_WaveFunction

+
+
+property t2aa
+
+ +
+
+property t2ab
+
+ +
+
+property t2ba
+
+ +
+
+property t2bb
+
+ +
+
+make_rdm1(*args, **kwargs)[source]
+
+ +
+
+make_rdm2(*args, **kwargs)[source]
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=1.0)[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+multiply(factor)[source]
+
+ +
+
+as_restricted()
+
+ +
+
+as_unrestricted()
+
+ +
+
+copy()
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+
+pack(dtype=<class 'float'>)
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+classmethod unpack(packed)
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+ +
+
+

vayesta.core.types.wf.project

+

Utility functions for projection of wave functions.

+
+
+vayesta.core.types.wf.project.project_c1(c1, p)[source]
+
+ +
+
+vayesta.core.types.wf.project.project_c2(c2, p)[source]
+
+ +
+
+vayesta.core.types.wf.project.project_uc1(c1, p)[source]
+
+ +
+
+vayesta.core.types.wf.project.project_uc2(c2, p)[source]
+
+ +
+
+vayesta.core.types.wf.project.symmetrize_c2(c2, inplace=True)[source]
+
+ +
+
+vayesta.core.types.wf.project.symmetrize_uc2(c2, inplace=True)[source]
+
+ +
+
+

vayesta.core.types.wf.t_to_c

+

These expressions were obtained from https://doi.org/10.1063/1.4996044 for +GHF, and then spin integrated to RHF and UHF expressions.

+
+
+vayesta.core.types.wf.t_to_c.t1_uhf(c1)[source]
+
+ +
+
+vayesta.core.types.wf.t_to_c.t1_rhf(c1)[source]
+
+ +
+
+vayesta.core.types.wf.t_to_c.t2_uhf(t1, c2)[source]
+
+ +
+
+vayesta.core.types.wf.t_to_c.t2_rhf(t1, c2)[source]
+
+ +
+
+vayesta.core.types.wf.t_to_c.t3_uhf(t1, t2, c3)[source]
+
+ +
+
+vayesta.core.types.wf.t_to_c.t3_rhf(t1, t2, c3)[source]
+
+ +
+
+vayesta.core.types.wf.t_to_c.t4_uhf(t1, t2, t3, c4)[source]
+
+ +
+
+vayesta.core.types.wf.t_to_c.t4_rhf(t1, t2, t3, c4)[source]
+
+ +
+
+

vayesta.core.types.wf.wf

+
+
+class vayesta.core.types.wf.wf.WaveFunction(mo, projector=None)[source]
+

Bases: object

+
+
+property norb
+
+ +
+
+property nocc
+
+ +
+
+property nvir
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+
+property nelec
+
+ +
+
+make_rdm1(*args, **kwargs)[source]
+
+ +
+
+make_rdm2(*args, **kwargs)[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)[source]
+
+ +
+ +
+
+

Module contents

+

Package for wave function objects.

+

TODO: spin-off projections (delegation, inheritance?)

+
+
+class vayesta.core.types.wf.WaveFunction(mo, projector=None)[source]
+

Bases: object

+
+
+property norb
+
+ +
+
+property nocc
+
+ +
+
+property nvir
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+
+property nelec
+
+ +
+
+make_rdm1(*args, **kwargs)[source]
+
+ +
+
+make_rdm2(*args, **kwargs)[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)[source]
+
+ +
+ +
+
+vayesta.core.types.wf.HF_WaveFunction(mo)[source]
+
+ +
+
+class vayesta.core.types.wf.RHF_WaveFunction(mo, projector=None)[source]
+

Bases: WaveFunction

+
+
+make_rdm1(mo_coeff=None, mo_occ=None, ao_basis=True)[source]
+
+ +
+
+make_rdm2(mo_coeff=None, mo_occ=None, ao_basis=True)[source]
+
+ +
+
+as_restricted()[source]
+
+ +
+
+as_unrestricted()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.UHF_WaveFunction(mo, projector=None)[source]
+

Bases: RHF_WaveFunction

+
+
+make_rdm1(mo_coeff=None, mo_occ=None, ao_basis=True)[source]
+
+ +
+
+make_rdm2(mo_coeff=None, mo_occ=None, ao_basis=True)[source]
+
+ +
+
+as_restricted()[source]
+
+ +
+
+as_unrestricted()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+vayesta.core.types.wf.MP2_WaveFunction(mo, t2, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.RMP2_WaveFunction(mo, t2, projector=None)[source]
+

Bases: WaveFunction

+
+
+make_rdm1(with_mf=True, ao_basis=False)[source]
+
+ +
+
+make_rdm2(with_dm1=True, ao_basis=False, approx_cumulant=True)[source]
+
+ +
+
+as_restricted()[source]
+
+ +
+
+as_unrestricted()[source]
+
+ +
+
+multiply(factor)[source]
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=1.0)[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+copy()[source]
+
+ +
+
+pack(dtype=<class 'float'>)[source]
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+classmethod unpack(packed)[source]
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.UMP2_WaveFunction(mo, t2, projector=None)[source]
+

Bases: RMP2_WaveFunction

+
+
+property t2aa
+
+ +
+
+property t2ab
+
+ +
+
+property t2ba
+
+ +
+
+property t2bb
+
+ +
+
+make_rdm1(*args, **kwargs)[source]
+
+ +
+
+make_rdm2(*args, **kwargs)[source]
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=1.0)[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+multiply(factor)[source]
+
+ +
+
+as_restricted()
+
+ +
+
+as_unrestricted()
+
+ +
+
+copy()
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+
+pack(dtype=<class 'float'>)
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+classmethod unpack(packed)
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+ +
+
+vayesta.core.types.wf.CISD_WaveFunction(mo, c0, c1, c2, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.RCISD_WaveFunction(mo, c0, c1, c2, projector=None)[source]
+

Bases: WaveFunction

+
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+copy()[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=None)[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+get_cisdvec()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.UCISD_WaveFunction(mo, c0, c1, c2, projector=None)[source]
+

Bases: RCISD_WaveFunction

+
+
+property c1a
+
+ +
+
+property c1b
+
+ +
+
+property c2aa
+
+ +
+
+property c2ab
+
+ +
+
+property c2ba
+
+ +
+
+property c2bb
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=None)[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+get_cisdvec()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+copy()
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+vayesta.core.types.wf.CCSD_WaveFunction(mo, t1, t2, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.RCCSD_WaveFunction(mo, t1, t2, l1=None, l2=None, projector=None)[source]
+

Bases: WaveFunction

+
+
+make_rdm1(t_as_lambda=False, with_mf=True, ao_basis=False)[source]
+
+ +
+
+make_rdm2(t_as_lambda=False, with_dm1=True, ao_basis=False, approx_cumulant=True)[source]
+
+ +
+
+make_rdm2_non_cumulant(t_as_lambda=False, ao_basis=False)[source]
+
+ +
+
+multiply(factor)[source]
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+pack(dtype=<class 'float'>)[source]
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+classmethod unpack(packed)[source]
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+copy()[source]
+
+ +
+
+as_unrestricted()[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=1.0)[source]
+

In intermediate normalization.

+
+ +
+
+as_ccsd()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.UCCSD_WaveFunction(mo, t1, t2, l1=None, l2=None, projector=None)[source]
+

Bases: RCCSD_WaveFunction

+
+
+property t1a
+
+ +
+
+property t1b
+
+ +
+
+property t2aa
+
+ +
+
+property t2ab
+
+ +
+
+property t2ba
+
+ +
+
+property t2bb
+
+ +
+
+property l1a
+
+ +
+
+property l1b
+
+ +
+
+property l2aa
+
+ +
+
+property l2ab
+
+ +
+
+property l2ba
+
+ +
+
+property l2bb
+
+ +
+
+make_rdm2_non_cumulant(t_as_lambda=False, ao_basis=False)[source]
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False, sym=True)[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=1.0)[source]
+

In intermediate normalization.

+
+ +
+
+as_fci()[source]
+
+ +
+
+multiply(factor)[source]
+
+ +
+
+as_ccsd()
+
+ +
+
+as_unrestricted()
+
+ +
+
+copy()
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(t_as_lambda=False, with_mf=True, ao_basis=False)
+
+ +
+
+make_rdm2(t_as_lambda=False, with_dm1=True, ao_basis=False, approx_cumulant=True)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+
+pack(dtype=<class 'float'>)
+

Pack into a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+
+classmethod unpack(packed)
+

Unpack from a single array of data type dtype.

+

Useful for communication via MPI.

+
+ +
+ +
+
+vayesta.core.types.wf.FCI_WaveFunction(mo, ci, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.RFCI_WaveFunction(mo, ci, projector=None)[source]
+

Bases: WaveFunction

+
+
+make_rdm1(ao_basis=False, with_mf=True)[source]
+
+ +
+
+make_rdm2(ao_basis=False, with_dm1=True, approx_cumulant=True)[source]
+
+ +
+
+project(projector, inplace=False)[source]
+
+ +
+
+restore(projector=None, inplace=False)[source]
+
+ +
+
+property c0
+
+ +
+
+as_unrestricted()[source]
+
+ +
+
+as_mp2()[source]
+
+ +
+
+as_cisd(c0=None)[source]
+
+ +
+
+as_cisdtq(c0=None)[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+as_ccsdtq()[source]
+
+ +
+
+as_fci()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.UFCI_WaveFunction(mo, ci, projector=None)[source]
+

Bases: RFCI_WaveFunction

+
+
+make_rdm1(ao_basis=False, with_mf=True)[source]
+
+ +
+
+make_rdm2(ao_basis=False, with_dm1=True, approx_cumulant=True)[source]
+
+ +
+
+as_cisd(c0=None)[source]
+
+ +
+
+as_cisdtq(c0=None)[source]
+
+ +
+
+as_ccsd()
+
+ +
+
+as_ccsdtq()
+
+ +
+
+as_fci()
+
+ +
+
+as_mp2()
+
+ +
+
+as_unrestricted()
+
+ +
+
+property c0
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+
+project(projector, inplace=False)
+
+ +
+
+restore(projector=None, inplace=False)
+
+ +
+ +
+
+vayesta.core.types.wf.CISDTQ_WaveFunction(mo, *args, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.RCISDTQ_WaveFunction(mo, c0, c1, c2, c3, c4)[source]
+

Bases: WaveFunction

+
+
+as_ccsdtq()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.UCISDTQ_WaveFunction(mo, c0, c1, c2, c3, c4)[source]
+

Bases: WaveFunction

+
+
+as_ccsdtq()[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+vayesta.core.types.wf.CCSDTQ_WaveFunction(mo, *args, **kwargs)[source]
+
+ +
+
+class vayesta.core.types.wf.RCCSDTQ_WaveFunction(mo, t1, t2, t3, t4)[source]
+

Bases: WaveFunction

+
+
+as_ccsdtq()[source]
+
+ +
+
+as_ccsd()[source]
+
+ +
+
+as_cisd(c0=1.0)[source]
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+class vayesta.core.types.wf.UCCSDTQ_WaveFunction(mo, t1, t2, t3, t4)[source]
+

Bases: RCCSDTQ_WaveFunction

+
+
+as_ccsd()
+
+ +
+
+as_ccsdtq()
+
+ +
+
+as_cisd(c0=1.0)
+
+ +
+
+static from_pyscf(obj, **kwargs)
+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+property nelec
+
+ +
+
+property nocc
+
+ +
+
+property nocca
+
+ +
+
+property noccb
+
+ +
+
+property norb
+
+ +
+
+property norba
+
+ +
+
+property norbb
+
+ +
+
+property nvir
+
+ +
+
+property nvira
+
+ +
+
+property nvirb
+
+ +
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.dmet.html b/apidoc/vayesta.dmet.html new file mode 100644 index 000000000..e78d0d03b --- /dev/null +++ b/apidoc/vayesta.dmet.html @@ -0,0 +1,3871 @@ + + + + + + + vayesta.dmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.dmet

+
+

Submodules

+
+
+

vayesta.dmet.dmet

+
+
+class vayesta.dmet.dmet.Options(store_eris: bool = True, global_frag_chempot: float | None = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: str | None = None, iao_minao: str = 'auto', maxiter: int = 30, charge_consistent: bool = True, max_elec_err: float = 0.0001, conv_tol: float = 1e-06, diis: bool = True, mixing_param: float = 0.5, mixing_variable: str = 'hl rdm', oneshot: bool = False)[source]
+

Bases: Options

+

Options for DMET calculations.

+
+
+iao_minao: str = 'auto'
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+maxiter: int = 30
+
+ +
+
+charge_consistent: bool = True
+
+ +
+
+max_elec_err: float = 0.0001
+
+ +
+
+conv_tol: float = 1e-06
+
+ +
+
+diis: bool = True
+
+ +
+
+mixing_param: float = 0.5
+
+ +
+
+mixing_variable: str = 'hl rdm'
+
+ +
+
+oneshot: bool = False
+
+ +
+
+solver_options: dict
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+bath_options: dict
+
+ +
+ +
+
+class vayesta.dmet.dmet.DMETResults(cluster_sizes: numpy.ndarray = None, e_corr: float = None)[source]
+

Bases: object

+
+
+cluster_sizes: ndarray = None
+
+ +
+
+e_corr: float = None
+
+ +
+ +
+
+class vayesta.dmet.dmet.DMET(mf, solver='CCSD', log=None, **kwargs)[source]
+

Bases: Embedding

+
+
+Fragment
+

alias of DMETFragment

+
+ +
+
+class Options(store_eris: bool = True, global_frag_chempot: float | None = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: str | None = None, iao_minao: str = 'auto', maxiter: int = 30, charge_consistent: bool = True, max_elec_err: float = 0.0001, conv_tol: float = 1e-06, diis: bool = True, mixing_param: float = 0.5, mixing_variable: str = 'hl rdm', oneshot: bool = False)
+

Bases: Options

+

Options for DMET calculations.

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+charge_consistent: bool = True
+
+ +
+
+conv_tol: float = 1e-06
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+diis: bool = True
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+iao_minao: str = 'auto'
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+max_elec_err: float = 0.0001
+
+ +
+
+maxiter: int = 30
+
+ +
+
+mixing_param: float = 0.5
+
+ +
+
+mixing_variable: str = 'hl rdm'
+
+ +
+
+oneshot: bool = False
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+solver_options: dict
+
+ +
+
+bath_options: dict
+
+ +
+ +
+
+property e_tot
+
+ +
+
+kernel()[source]
+

Run DMET calculation.

+
+ +
+
+calc_electron_number_defect(chempot, nelec_target, parent_fragments, nsym, construct_bath=True)[source]
+
+ +
+
+update_vcorr(fock, curr_rdms)[source]
+
+ +
+
+get_impurity_coeffs()[source]
+
+ +
+
+print_results()[source]
+
+ +
+
+print_clusters()[source]
+

Print fragments of calculations.

+
+ +
+
+make_rdm1(*args, **kwargs)[source]
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – Alpha- and beta one-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

tuple of (n, n) arrays

+
+
+
+ +
+
+make_rdm2(*args, **kwargs)[source]
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+get_corrfunc(kind, dm1=None, dm2=None, **kwargs)[source]
+

Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X.

+

TODO: MPI

+
+
Parameters:
+

atoms (list[int] or list[list[int]], optional) – Atom indices for which the spin-spin correlation function should be evaluated. +If set to None (default), all atoms of the system will be considered. +If a list is given, all atom pairs formed from this list will be considered. +If a list of two lists is given, the first list contains the indices of atom A, +and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. +This is useful in cases where one is only interested in the correlation to +a small subset of atoms. Default: None

+
+
Returns:
+

corr – Atom projected correlation function.

+
+
Return type:
+

array(N,M)

+
+
+
+ +
+
+brueckner_scmf(*args, **kwargs)
+

Decorator for Brueckner-DMET.

+
+ +
+
+build_screened_eris(*args, **kwargs)
+

Generates renormalised coulomb interactions for use in local cluster calculations. +Currently requires unrestricted system.

+
+
Parameters:
+
    +
  • emb (Embedding) – Embedding instance.

  • +
  • fragments (list of vayesta.qemb.Fragment subclasses, optional) – List of fragments for the calculation, used to define local interaction spaces. +If None, emb.get_fragments(sym_parent=None) is used. Default: None.

  • +
  • cderi_ov (np.array or tuple of np.array, optional.) – Cholesky-decomposed ERIs in the particle-hole basis of mf. If mf is unrestricted +this should be a list of arrays corresponding to the different spin channels.

  • +
  • calc_ecorrection (bool, optional.) – Whether to calculate a nonlocal energy correction at the level of RPA

  • +
  • npoints (int, optional) – Number of points for numerical integration. Default: 48.

  • +
  • log (logging.Logger, optional) – Logger object. If None, the logger of the emb object is used. Default: None.

  • +
+
+
Returns:
+

    +
  • seris_ov (list of tuples of np.array) – List of spin-dependent screened (ov|ov), for each fragment provided.

  • +
  • erpa (float) – Delta RPA correction computed as difference between full system RPA energy and +cluster correlation energies; currently only functional in CAS fragmentations.

  • +
+

+
+
+
+ +
+
+cas_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_fragment_symmetry(dm1, symtol=1e-06)
+

Check that the mean-field obeys the symmetry between fragments.

+
+ +
+
+check_solver(solver)
+
+ +
+
+communicate_clusters()
+

Communicate cluster orbitals between MPI ranks.

+
+ +
+
+create_invsym_fragments(center, fragments=None, unit='Ang', **kwargs)
+

Create inversion symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of inversion-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_mirrorsym_fragments(axis, center, fragments=None, unit='Ang', **kwargs)
+

Create mirror symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of mirror-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_rotsym_fragments(order, axis, center, fragments=None, unit='Ang', **kwargs)
+

Create rotationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of rotationally-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_symmetric_fragments(symmetry, fragments=None, symbol=None, mf_tol=None, check_mf=True)
+

Add rotationally or translationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: self.opts.symmetry_mf_tol.

+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_transsym_fragments(translation, fragments=None, **kwargs)
+

Create translationally symmetric fragments.

+
+
Parameters:
+
    +
  • translation (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+property df
+
+ +
+
+property e_mf
+

Total mean-field energy per unit cell (not folded supercell). +Note that the input unit cell itself can be a supercell, in which case +e_mf refers to this cell.

+
+ +
+
+property e_nuc
+

Nuclear-repulsion energy per unit cell (not folded supercell).

+
+ +
+
+get_atomic_charges(pop)
+
+ +
+
+get_average_cluster_size(average='mean')
+
+ +
+
+get_cderi(mo_coeff, compact=False, blksize=None)
+

Get density-fitted three-center integrals in MO basis.

+
+ +
+
+get_corrfunc_mf(kind, dm1=None, atoms=None, projection='sao')
+

dm1 in MO basis

+
+ +
+
+get_dmet_elec_energy(part_cumulant=True, approx_cumulant=True)
+

Calculate electronic DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_dmet_energy(part_cumulant=True, approx_cumulant=True, with_nuc=True, with_exxdiv=True)
+

Calculate DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
  • with_nuc (bool, optional) – Include nuclear-repulsion energy. Default: True.

  • +
  • with_exxdiv (bool, optional) – Include divergent exact-exchange correction. Default: True.

  • +
+
+
Returns:
+

e_dmet – DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_eris_array(mo_coeff, compact=False)
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff ([list(4) of] (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

eris – Electron-repulsion integrals in MO basis.

+
+
Return type:
+

(n(MO), n(MO), n(MO), n(MO)) array

+
+
+
+ +
+
+get_eris_object(postscf, fock=None)
+

Get ERIs for post-SCF methods.

+

For folded PBC calculations, this folds the MO back into k-space +and contracts with the k-space three-center integrals..

+
+
Parameters:
+

postscf (one of the following PySCF methods: MP2, CCSD, RCCSD, DFCCSD) – Post-SCF method with attribute mo_coeff set.

+
+
Returns:
+

eris – ERIs which can be used for the respective post-scf method.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+get_exxdiv()
+

Get divergent exact-exchange (exxdiv) energy correction and potential.

+
+
Returns:
+

    +
  • e_exxdiv (float) – Divergent exact-exchange energy correction per unit cell.

  • +
  • v_exxdiv (array) – Divergent exact-exchange potential correction in AO basis.

  • +
+

+
+
+
+ +
+
+get_fock(dm1=None, with_exxdiv=True)
+

Fock matrix in AO basis.

+
+ +
+
+get_fock_for_bath(dm1=None, with_exxdiv=True)
+

Fock matrix used for bath orbitals.

+
+ +
+
+get_fock_for_energy(dm1=None, with_exxdiv=True)
+

Fock matrix used for energy evaluation.

+
+ +
+
+get_fragment_overlap_norm(fragments=None, occupied=True, virtual=True, norm=2)
+

Get matrix of overlap norms between fragments.

+
+ +
+
+get_fragments(fragments=None, options=None, flags=None, **filters)
+

Return all fragments which obey the specified conditions.

+
+
Parameters:
+

**filters – List of returned fragments will be filtered according to specified +keyword arguments.

+
+
Returns:
+

fragments – List of fragments.

+
+
Return type:
+

list

+
+
+

Examples

+

Only returns fragments with mpi_rank 0, 1, or 2:

+
>>> self.get_fragments(mpi_rank=[0,1,2])
+
+
+

Only returns fragments with no symmetry parent:

+
>>> self.get_fragments(sym_parent=None)
+
+
+
+ +
+
+get_hcore()
+

Core Hamiltonian (kinetic energy plus nuclear-electron attraction).

+
+ +
+
+get_hcore_for_energy()
+

Core Hamiltonian used for energy evaluation.

+
+ +
+
+get_lo_coeff(local_orbitals='lowdin', minao='auto')
+
+ +
+
+get_max_cluster_size()
+
+ +
+
+get_mean_cluster_size()
+
+ +
+
+get_min_cluster_size()
+
+ +
+
+get_ovlp()
+

AO-overlap matrix.

+
+ +
+
+get_ovlp_power(power)
+

get power of AO overlap matrix.

+

For folded calculations, this uses the k-point sampled overlap, for better performance and accuracy.

+
+
Parameters:
+

power (float) – Matrix power.

+
+
Returns:
+

spow – Matrix power of AO overlap matrix

+
+
Return type:
+

(n(AO), n(AO)) array

+
+
+
+ +
+
+get_symmetry_child_fragments(include_parents=False)
+

Returns a list of all fragments, which are children to symmetry related parent fragments.

+
+
Parameters:
+

include_parents (bool, optional) – If true, the parent fragment of each symmetry group is prepended to each symmetry sublist.

+
+
Returns:
+

children – A list with the length of the number of parent fragments in the system, each element +being another list containing all the children fragments of the given parent fragment. +Both the outer and inner lists are ordered in the same way that the fragments appear in self.fragments.

+
+
Return type:
+

list of lists

+
+
+
+ +
+
+get_symmetry_parent_fragments()
+

Returns a list of all fragments, which are parents to symmetry related child fragments.

+
+
Returns:
+

parents – A list of all parent fragments, ordered in the same way as they appear in self.fragments.

+
+
Return type:
+

list

+
+
+
+ +
+
+get_veff(dm1=None, with_exxdiv=True)
+

Hartree-Fock Coulomb and exchange potential in AO basis.

+
+ +
+
+get_veff_for_energy(dm1=None, with_exxdiv=True)
+

Hartree-Fock potential used for energy evaluation.

+
+ +
+
+has_complete_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete.

+
+ +
+
+has_complete_occupied_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the occupied space.

+
+ +
+
+has_complete_virtual_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the virtual space.

+
+ +
+
+property has_df
+
+ +
+
+property has_exxdiv
+

Correction for divergent exact-exchange potential.

+
+ +
+
+has_orthonormal_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal.

+
+ +
+
+iao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+iaopao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO+PAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+init_mf(mf)
+
+ +
+
+is_rhf = True
+
+ +
+
+is_uhf = False
+
+ +
+
+loop()
+

Loop over fragments.

+
+ +
+
+make_rdm1_demo(*args, **kwargs)
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – One-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+make_rdm2_demo(*args, **kwargs)
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+property mo_coeff
+

Molecular orbital coefficients.

+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_energy
+

Molecular orbital energies.

+
+ +
+
+property mo_energy_occ
+

Occupied MO energies.

+
+ +
+
+property mo_energy_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_occ
+

Molecular orbital occupations.

+
+ +
+
+property mol
+

Mole or Cell object.

+
+ +
+
+property nao
+

Number of atomic orbitals.

+
+ +
+
+property ncells
+

Number of primitive cells within supercell.

+
+ +
+
+property nfrag
+

Number of fragments.

+
+ +
+
+property nmo
+

Total number of molecular orbitals (MOs).

+
+ +
+
+property nocc
+

Number of occupied MOs.

+
+ +
+
+property nvir
+

Number of virtual MOs.

+
+ +
+
+optimize_chempot(cpt_init=0.0, dm1func=None, dm1kwds=None, robust=False)
+
+ +
+
+property pbc_dimension
+
+ +
+
+pdmet_scmf(*args, **kwargs)
+

Decorator for p-DMET.

+
+ +
+
+pop_analysis(dm1, mo_coeff=None, local_orbitals='lowdin', minao='auto', write=True, filename=None, filemode='a', orbital_resolved=False, mpi_rank=0)
+
+
Parameters:
+
    +
  • dm1 ((N, N) array) – If mo_coeff is None, AO representation is assumed.

  • +
  • local_orbitals ({'lowdin', 'mulliken', 'iao+pao'} or array) – Kind of population analysis. Default: ‘lowdin’.

  • +
+
+
Returns:
+

pop – Population of atomic orbitals.

+
+
Return type:
+

    +
  1. array

  2. +
+

+
+
+
+ +
+
+require_complete_fragmentation(message=None, incl_virtual=True, **kwargs)
+
+ +
+
+reset(*args, **kwargs)
+
+ +
+
+sao_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of SAO (Lowdin-AO) fragments.

+
+ +
+
+set_hcore(value)
+
+ +
+
+set_ovlp(value)
+
+ +
+
+set_veff(value)
+
+ +
+
+site_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+spinsym = 'restricted'
+
+ +
+
+update_mf(mo_coeff, mo_energy=None, veff=None)
+

Update underlying mean-field object.

+
+ +
+
+write_population(pop, filename=None, filemode='a', orbital_resolved=False)
+
+ +
+ +
+
+vayesta.dmet.dmet.RDMET
+

alias of DMET

+
+ +
+
+

vayesta.dmet.fragment

+
+
+exception vayesta.dmet.fragment.DMETFragmentExit[source]
+

Bases: Exception

+
+
+args
+
+ +
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+class vayesta.dmet.fragment.DMETFragment(*args, **kwargs)[source]
+

Bases: Fragment

+
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None, n_active: int = None, e1: float = None, e2: float = None, dm1: numpy.ndarray = None, dm2: numpy.ndarray = None)[source]
+

Bases: Results

+
+
+n_active: int = None
+
+ +
+
+e1: float = None
+
+ +
+
+e2: float = None
+
+ +
+
+dm1: ndarray = None
+
+ +
+
+dm2: ndarray = None
+
+ +
+
+converged: bool = None
+
+ +
+
+e_corr: float = None
+
+ +
+
+fid: int = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+ +
+
+kernel(solver=None, init_guess=None, seris_ov=None, construct_bath=True, chempot=None)[source]
+

Run solver for a single BNO threshold.

+
+
Parameters:
+

solver ({'MP2', 'CISD', 'CCSD', 'CCSD(T)', 'FCI'}, optional) – Correlated solver.

+
+
Returns:
+

results

+
+
Return type:
+

DMETFragmentResults

+
+
+
+ +
+
+get_solver_options(solver)[source]
+
+ +
+
+get_dmet_energy_contrib(hamil=None)[source]
+

Calculate the contribution of this fragment to the overall DMET energy.

+

TODO: use core.qemb.fragment.get_fragment_dmet_energy instead?

+
+ +
+
+get_frag_hl_dm()[source]
+
+ +
+
+get_nelectron_hl()[source]
+
+ +
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: int | NoneType = None)
+

Bases: object

+
+
+bath_parent_fragment_id: int | None = None
+
+ +
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+ +
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0)
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, eigvals=False, sign_convention=True)
+

Diagonalize Fock matrix within subspace.

+

TODO: move to Embedding class

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_solver(solver)
+
+ +
+
+property cluster
+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+copy(fid=None, name=None, **kwargs)
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+couple_to_fragment(frag)
+
+ +
+
+couple_to_fragments(frags)
+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=2, tol=0.0001)
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (array or list of arrays) – Orbital coefficients. If multiple are given, they will be stacked along their second dimension.

  • +
  • dm1 (array, optional) – Mean-field density matrix, used to separate occupied and virtual cluster orbitals. +If None, self.mf.make_rdm1() is used. Default: None.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 2, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ ((n(AO), n(occ cluster)) array) – Occupied cluster orbital coefficients.

  • +
  • c_cluster_vir ((n(AO), n(vir cluster)) array) – Virtual cluster orbital coefficients.

  • +
+

+
+
+
+ +
+
+get_coeff_env()
+
+ +
+
+get_frag_hamil()
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_fragment_mf_energy()
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_projector(coeff, c_proj=None, inverse=False)
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None)
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occup – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+get_overlap(key)
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_solver(solver=None)
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)
+
+ +
+
+get_symmetry_error(frag, dm1=None)
+

Get translational symmetry error between two fragments.

+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)
+
+ +
+
+get_symmetry_operation()
+
+ +
+
+get_symmetry_parent()
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+property hamil
+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+log_info()
+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+make_bath()
+
+ +
+
+make_cluster()
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)
+
+ +
+
+project_ref_orbitals(c_ref, c)
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)
+
+ +
+
+property results
+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+trimmed_name(length=10, add_dots=True)
+

Fragment name trimmed to a given maximum length.

+
+ +
+ +
+
+

vayesta.dmet.pdmet

+
+
+vayesta.dmet.pdmet.update_mf(mf, dm1, canonicalize=True, inplace=False, damping=0.0, diis=None)[source]
+

p-DMET mean-field update.

+
+ +
+
+

vayesta.dmet.sdp_sc

+
+
+vayesta.dmet.sdp_sc.perform_SDP_fit(nelec, fock, impurity_projectors, target_rdms, ovlp, log)[source]
+

Given all required information about the system, generate the correlation potential reproducing the local DM +via a semidefinite program, as described in doi.org/10.1103/PhysRevB.102.085123. Initially use SCS solver, though +others (eg. MOSEK) could be used if this runs into issues.

+

Note that initially we will only have a single impurity in each symmetry class, until the fragmentation routines are +updated to include symmetry.

+
+
Parameters:
+
    +
  • nelec (integer) – Number of electrons in the system.

  • +
  • fock (np.array) – Fock matrix of the full system, in the spatial orbital basis.

  • +
  • impurity_projectors (list of list of np.array) – For each class of symmetry-equivalent impurities, projection from the full spatial orbital basis to the impurity +set.

  • +
  • target_rdms (list of np.array) – Impurity-local one-body density matrices for each class of impurities.

  • +
  • ovlp (np.array) – Overlap matrix of the AOs, so we can implicitly transform into the PAO basis.

  • +
+
+
+
+ +
+
+

vayesta.dmet.udmet

+
+
+class vayesta.dmet.udmet.UDMET(mf, solver='CCSD', log=None, **kwargs)[source]
+

Bases: UEmbedding, DMET

+
+
+Fragment
+

alias of UDMETFragment

+
+ +
+
+update_vcorr(fock, curr_rdms)[source]
+
+ +
+
+get_impurity_coeffs()[source]
+
+ +
+
+class Options(store_eris: bool = True, global_frag_chempot: float | None = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: str | None = None, iao_minao: str = 'auto', maxiter: int = 30, charge_consistent: bool = True, max_elec_err: float = 0.0001, conv_tol: float = 1e-06, diis: bool = True, mixing_param: float = 0.5, mixing_variable: str = 'hl rdm', oneshot: bool = False)
+

Bases: Options

+

Options for DMET calculations.

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+charge_consistent: bool = True
+
+ +
+
+conv_tol: float = 1e-06
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+diis: bool = True
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+iao_minao: str = 'auto'
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+max_elec_err: float = 0.0001
+
+ +
+
+maxiter: int = 30
+
+ +
+
+mixing_param: float = 0.5
+
+ +
+
+mixing_variable: str = 'hl rdm'
+
+ +
+
+oneshot: bool = False
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+solver_options: dict
+
+ +
+
+bath_options: dict
+
+ +
+ +
+
+brueckner_scmf(*args, **kwargs)
+

Decorator for Brueckner-DMET.

+
+ +
+
+build_screened_eris(*args, **kwargs)
+

Generates renormalised coulomb interactions for use in local cluster calculations. +Currently requires unrestricted system.

+
+
Parameters:
+
    +
  • emb (Embedding) – Embedding instance.

  • +
  • fragments (list of vayesta.qemb.Fragment subclasses, optional) – List of fragments for the calculation, used to define local interaction spaces. +If None, emb.get_fragments(sym_parent=None) is used. Default: None.

  • +
  • cderi_ov (np.array or tuple of np.array, optional.) – Cholesky-decomposed ERIs in the particle-hole basis of mf. If mf is unrestricted +this should be a list of arrays corresponding to the different spin channels.

  • +
  • calc_ecorrection (bool, optional.) – Whether to calculate a nonlocal energy correction at the level of RPA

  • +
  • npoints (int, optional) – Number of points for numerical integration. Default: 48.

  • +
  • log (logging.Logger, optional) – Logger object. If None, the logger of the emb object is used. Default: None.

  • +
+
+
Returns:
+

    +
  • seris_ov (list of tuples of np.array) – List of spin-dependent screened (ov|ov), for each fragment provided.

  • +
  • erpa (float) – Delta RPA correction computed as difference between full system RPA energy and +cluster correlation energies; currently only functional in CAS fragmentations.

  • +
+

+
+
+
+ +
+
+calc_electron_number_defect(chempot, nelec_target, parent_fragments, nsym, construct_bath=True)
+
+ +
+
+cas_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_fragment_symmetry(dm1, charge_tol=1e-06, spin_tol=1e-06)
+

Check that the mean-field obeys the symmetry between fragments.

+
+ +
+
+check_solver(solver)
+
+ +
+
+communicate_clusters()
+

Communicate cluster orbitals between MPI ranks.

+
+ +
+
+create_invsym_fragments(center, fragments=None, unit='Ang', **kwargs)
+

Create inversion symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of inversion-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_mirrorsym_fragments(axis, center, fragments=None, unit='Ang', **kwargs)
+

Create mirror symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of mirror-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_rotsym_fragments(order, axis, center, fragments=None, unit='Ang', **kwargs)
+

Create rotationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of rotationally-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_symmetric_fragments(symmetry, fragments=None, symbol=None, mf_tol=None, check_mf=True)
+

Add rotationally or translationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: self.opts.symmetry_mf_tol.

+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_transsym_fragments(translation, fragments=None, **kwargs)
+

Create translationally symmetric fragments.

+
+
Parameters:
+
    +
  • translation (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+property df
+
+ +
+
+property e_mf
+

Total mean-field energy per unit cell (not folded supercell). +Note that the input unit cell itself can be a supercell, in which case +e_mf refers to this cell.

+
+ +
+
+property e_nuc
+

Nuclear-repulsion energy per unit cell (not folded supercell).

+
+ +
+
+property e_tot
+
+ +
+
+get_atomic_charges(pop)
+
+ +
+
+get_average_cluster_size(average='mean')
+
+ +
+
+get_cderi(mo_coeff, compact=False, blksize=None)
+

Get density-fitted three-center integrals in MO basis.

+
+ +
+
+get_corrfunc(kind, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None, use_symmetry=True, orbital_filter=None)
+

Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X.

+

TODO: MPI

+
+
Parameters:
+

atoms (list[int] or list[list[int]], optional) – Atom indices for which the spin-spin correlation function should be evaluated. +If set to None (default), all atoms of the system will be considered. +If a list is given, all atom pairs formed from this list will be considered. +If a list of two lists is given, the first list contains the indices of atom A, +and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. +This is useful in cases where one is only interested in the correlation to +a small subset of atoms. Default: None

+
+
Returns:
+

corr – Atom projected correlation function.

+
+
Return type:
+

array(N,M)

+
+
+
+ +
+
+get_corrfunc_mf(kind, dm1=None, atoms=None, projection='sao')
+

dm1 in MO basis

+
+ +
+
+get_dmet_elec_energy(part_cumulant=True, approx_cumulant=True)
+

Calculate electronic DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_dmet_energy(part_cumulant=True, approx_cumulant=True, with_nuc=True, with_exxdiv=True)
+

Calculate DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
  • with_nuc (bool, optional) – Include nuclear-repulsion energy. Default: True.

  • +
  • with_exxdiv (bool, optional) – Include divergent exact-exchange correction. Default: True.

  • +
+
+
Returns:
+

e_dmet – DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_eris_array(mo_coeff, compact=False)
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff ([list(4) of] (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

eris – Electron-repulsion integrals in MO basis.

+
+
Return type:
+

(n(MO), n(MO), n(MO), n(MO)) array

+
+
+
+ +
+
+get_eris_array_uhf(mo_coeff, mo_coeff2=None, compact=False)
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff (tuple(2) of (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

Electron-repulsion integrals in MO basis.

+
+
Return type:
+

eris

+
+
+
+ +
+
+get_eris_object(postscf, fock=None)
+

Get ERIs for post-SCF methods.

+

For folded PBC calculations, this folds the MO back into k-space +and contracts with the k-space three-center integrals..

+
+
Parameters:
+

postscf (one of the following post-SCF methods: MP2, CCSD, RCCSD, DFCCSD) – Post-SCF method with attribute mo_coeff set.

+
+
Returns:
+

eris – ERIs which can be used for the respective post-SCF method.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+get_exxdiv()
+

Get divergent exact-exchange (exxdiv) energy correction and potential.

+
+
Returns:
+

    +
  • e_exxdiv (float) – Divergent exact-exchange energy correction per unit cell.

  • +
  • v_exxdiv (array) – Divergent exact-exchange potential correction in AO basis.

  • +
+

+
+
+
+ +
+
+get_fock(dm1=None, with_exxdiv=True)
+

Fock matrix in AO basis.

+
+ +
+
+get_fock_for_bath(dm1=None, with_exxdiv=True)
+

Fock matrix used for bath orbitals.

+
+ +
+
+get_fock_for_energy(dm1=None, with_exxdiv=True)
+

Fock matrix used for energy evaluation.

+
+ +
+
+get_fragment_overlap_norm(fragments=None, occupied=True, virtual=True, norm=2)
+

Get matrix of overlap norms between fragments.

+
+ +
+
+get_fragments(fragments=None, options=None, flags=None, **filters)
+

Return all fragments which obey the specified conditions.

+
+
Parameters:
+

**filters – List of returned fragments will be filtered according to specified +keyword arguments.

+
+
Returns:
+

fragments – List of fragments.

+
+
Return type:
+

list

+
+
+

Examples

+

Only returns fragments with mpi_rank 0, 1, or 2:

+
>>> self.get_fragments(mpi_rank=[0,1,2])
+
+
+

Only returns fragments with no symmetry parent:

+
>>> self.get_fragments(sym_parent=None)
+
+
+
+ +
+
+get_hcore()
+

Core Hamiltonian (kinetic energy plus nuclear-electron attraction).

+
+ +
+
+get_hcore_for_energy()
+

Core Hamiltonian used for energy evaluation.

+
+ +
+
+get_lo_coeff(local_orbitals='lowdin', minao='auto')
+
+ +
+
+get_max_cluster_size()
+
+ +
+
+get_mean_cluster_size()
+
+ +
+
+get_min_cluster_size()
+
+ +
+
+get_ovlp()
+

AO-overlap matrix.

+
+ +
+
+get_ovlp_power(power)
+

get power of AO overlap matrix.

+

For folded calculations, this uses the k-point sampled overlap, for better performance and accuracy.

+
+
Parameters:
+

power (float) – Matrix power.

+
+
Returns:
+

spow – Matrix power of AO overlap matrix

+
+
Return type:
+

(n(AO), n(AO)) array

+
+
+
+ +
+
+get_symmetry_child_fragments(include_parents=False)
+

Returns a list of all fragments, which are children to symmetry related parent fragments.

+
+
Parameters:
+

include_parents (bool, optional) – If true, the parent fragment of each symmetry group is prepended to each symmetry sublist.

+
+
Returns:
+

children – A list with the length of the number of parent fragments in the system, each element +being another list containing all the children fragments of the given parent fragment. +Both the outer and inner lists are ordered in the same way that the fragments appear in self.fragments.

+
+
Return type:
+

list of lists

+
+
+
+ +
+
+get_symmetry_parent_fragments()
+

Returns a list of all fragments, which are parents to symmetry related child fragments.

+
+
Returns:
+

parents – A list of all parent fragments, ordered in the same way as they appear in self.fragments.

+
+
Return type:
+

list

+
+
+
+ +
+
+get_veff(dm1=None, with_exxdiv=True)
+

Hartree-Fock Coulomb and exchange potential in AO basis.

+
+ +
+
+get_veff_for_energy(dm1=None, with_exxdiv=True)
+

Hartree-Fock potential used for energy evaluation.

+
+ +
+
+has_complete_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete.

+
+ +
+
+has_complete_occupied_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the occupied space.

+
+ +
+
+has_complete_virtual_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the virtual space.

+
+ +
+
+property has_df
+
+ +
+
+property has_exxdiv
+

Correction for divergent exact-exchange potential.

+
+ +
+
+has_orthonormal_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal.

+
+ +
+
+iao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+iaopao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO+PAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+init_mf(mf)
+
+ +
+
+is_rhf = False
+
+ +
+
+is_uhf = True
+
+ +
+
+kernel()
+

Run DMET calculation.

+
+ +
+
+loop()
+

Loop over fragments.

+
+ +
+
+make_rdm1(*args, **kwargs)
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – Alpha- and beta one-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

tuple of (n, n) arrays

+
+
+
+ +
+
+make_rdm1_demo(*args, **kwargs)
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – Alpha- and beta one-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

tuple of (n, n) arrays

+
+
+
+ +
+
+make_rdm2(*args, **kwargs)
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+make_rdm2_demo(*args, **kwargs)
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+property mo_coeff
+

Molecular orbital coefficients.

+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_energy
+

Molecular orbital energies.

+
+ +
+
+property mo_energy_occ
+

Occupied MO energies.

+
+ +
+
+property mo_energy_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_occ
+

Molecular orbital occupations.

+
+ +
+
+property mol
+

Mole or Cell object.

+
+ +
+
+property nao
+

Number of atomic orbitals.

+
+ +
+
+property ncells
+

Number of primitive cells within supercell.

+
+ +
+
+property nfrag
+

Number of fragments.

+
+ +
+
+property nmo
+

Total number of molecular orbitals (MOs).

+
+ +
+
+property nocc
+

Number of occupied MOs.

+
+ +
+
+property nvir
+

Number of virtual MOs.

+
+ +
+
+optimize_chempot(cpt_init=0.0, dm1func=None, dm1kwds=None, robust=False)
+
+ +
+
+property pbc_dimension
+
+ +
+
+pdmet_scmf(*args, **kwargs)
+

Decorator for p-DMET.

+
+ +
+
+pop_analysis(dm1, mo_coeff=None, local_orbitals='lowdin', write=True, minao='auto', mpi_rank=0, **kwargs)
+
+
Parameters:
+
    +
  • dm1 ((N, N) array) – If mo_coeff is None, AO representation is assumed.

  • +
  • local_orbitals ({'lowdin', 'mulliken', 'iao+pao'} or array) – Kind of population analysis. Default: ‘lowdin’.

  • +
+
+
Returns:
+

pop – Population of atomic orbitals.

+
+
Return type:
+

    +
  1. array

  2. +
+

+
+
+
+ +
+
+print_clusters()
+

Print fragments of calculations.

+
+ +
+
+print_results()
+
+ +
+
+require_complete_fragmentation(message=None, incl_virtual=True, **kwargs)
+
+ +
+
+reset(*args, **kwargs)
+
+ +
+
+sao_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of SAO (Lowdin-AO) fragments.

+
+ +
+
+set_hcore(value)
+
+ +
+
+set_ovlp(value)
+
+ +
+
+set_veff(value)
+
+ +
+
+site_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+spinsym = 'unrestricted'
+
+ +
+
+update_mf(mo_coeff, mo_energy=None, veff=None)
+

Update underlying mean-field object.

+
+ +
+
+write_population(pop, filename=None, filemode='a', orbital_resolved=False)
+
+ +
+ +
+
+

vayesta.dmet.ufragment

+
+
+class vayesta.dmet.ufragment.UDMETFragment(*args, **kwargs)[source]
+

Bases: UFragment, DMETFragment

+
+
+set_cas(*args, **kwargs)[source]
+
+ +
+
+get_frag_hl_dm()[source]
+
+ +
+
+get_nelectron_hl()[source]
+
+ +
+
+get_dmet_energy_contrib(hamil=None)[source]
+

Calculate the contribution of this fragment to the overall DMET energy.

+
+ +
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: int | NoneType = None)
+

Bases: object

+
+
+bath_parent_fragment_id: int | None = None
+
+ +
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+ +
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0)
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None, n_active: int = None, e1: float = None, e2: float = None, dm1: numpy.ndarray = None, dm2: numpy.ndarray = None)
+

Bases: Results

+
+
+converged: bool = None
+
+ +
+
+dm1: ndarray = None
+
+ +
+
+dm2: ndarray = None
+
+ +
+
+e1: float = None
+
+ +
+
+e2: float = None
+
+ +
+
+e_corr: float = None
+
+ +
+
+fid: int = None
+
+ +
+
+n_active: int = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, **kwargs)
+

Diagonalize Fock matrix within subspace.

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_solver(solver)
+
+ +
+
+property cluster
+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+copy(fid=None, name=None, **kwargs)
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+couple_to_fragment(frag)
+
+ +
+
+couple_to_fragments(frags)
+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=1, **kwargs)
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 1, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ (ndarray) – Occupied cluster orbitals.

  • +
  • c_cluster_vir (ndarray) – Virtual cluster orbitals.

  • +
+

+
+
+
+ +
+
+get_coeff_env()
+
+ +
+
+get_frag_hamil()
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_fragment_mf_energy()
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_projector(coeff, c_proj=None, **kwargs)
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None, **kwargs)
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occ – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+get_overlap(key)
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_solver(solver=None)
+
+ +
+
+get_solver_options(solver)
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)
+
+ +
+
+get_symmetry_error(frag, dm1=None)
+

Get translational symmetry error between two fragments.

+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)
+
+ +
+
+get_symmetry_operation()
+
+ +
+
+get_symmetry_parent()
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+property hamil
+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+kernel(solver=None, init_guess=None, seris_ov=None, construct_bath=True, chempot=None)
+

Run solver for a single BNO threshold.

+
+
Parameters:
+

solver ({'MP2', 'CISD', 'CCSD', 'CCSD(T)', 'FCI'}, optional) – Correlated solver.

+
+
Returns:
+

results

+
+
Return type:
+

DMETFragmentResults

+
+
+
+ +
+
+log_info()
+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+make_bath()
+
+ +
+
+make_cluster()
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)
+
+ +
+
+project_ref_orbitals(c_ref, c)
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)
+
+ +
+
+property results
+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+trimmed_name(length=10, add_dots=True)
+

Fragment name trimmed to a given maximum length.

+
+ +
+ +
+
+

vayesta.dmet.updates

+
+
+class vayesta.dmet.updates.Update[source]
+

Bases: object

+
+ +
+
+class vayesta.dmet.updates.DIISUpdate(space_size=6, min_space_size=1)[source]
+

Bases: Update

+
+
+update(params)[source]
+
+ +
+ +
+
+class vayesta.dmet.updates.MixUpdate(alpha=1.0)[source]
+

Bases: Update

+
+
+update(params)[source]
+
+ +
+ +
+
+

Module contents

+

Density Matrix Embedding Theory (DMET) method +Author: Charles Scott +email: cjcargillscott@gmail.com

+
+
+vayesta.dmet.DMET(mf, *args, **kwargs)[source]
+

Determine restricted or unrestricted by inspection of mean-field object

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.edmet.html b/apidoc/vayesta.edmet.html new file mode 100644 index 000000000..762391485 --- /dev/null +++ b/apidoc/vayesta.edmet.html @@ -0,0 +1,4633 @@ + + + + + + + vayesta.edmet — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.edmet

+
+

Submodules

+
+
+

vayesta.edmet.edmet

+
+
+class vayesta.edmet.edmet.Options(store_eris: bool = True, global_frag_chempot: float = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: Union[str, NoneType] = None, iao_minao: str = 'auto', maxiter: int = 1, charge_consistent: bool = True, max_elec_err: float = 0.0001, conv_tol: float = 1e-06, diis: bool = True, mixing_param: float = 0.5, mixing_variable: str = 'hl rdm', oneshot: bool = False, make_dd_moments: bool = False, old_sc_condition: bool = False, max_bos: int = inf, occ_proj_kernel: bool = False, boson_xc_kernel: bool = False, bosonic_interaction: str = 'xc')[source]
+

Bases: Options

+
+
+maxiter: int = 1
+
+ +
+
+make_dd_moments: bool = False
+
+ +
+
+old_sc_condition: bool = False
+
+ +
+
+max_bos: int = inf
+
+ +
+
+occ_proj_kernel: bool = False
+
+ +
+
+boson_xc_kernel: bool = False
+
+ +
+
+bosonic_interaction: str = 'xc'
+
+ +
+
+solver_options: dict
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+charge_consistent: bool = True
+
+ +
+
+conv_tol: float = 1e-06
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+diis: bool = True
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+iao_minao: str = 'auto'
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+max_elec_err: float = 0.0001
+
+ +
+
+mixing_param: float = 0.5
+
+ +
+
+mixing_variable: str = 'hl rdm'
+
+ +
+
+oneshot: bool = False
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+bath_options: dict
+
+ +
+ +
+
+class vayesta.edmet.edmet.EDMETResults(cluster_sizes: numpy.ndarray = None, e_corr: float = None)[source]
+

Bases: object

+
+
+cluster_sizes: ndarray = None
+
+ +
+
+e_corr: float = None
+
+ +
+ +
+
+class vayesta.edmet.edmet.EDMET(mf, solver='EBFCI', log=None, **kwargs)[source]
+

Bases: DMET

+
+
+Fragment
+

alias of EDMETFragment

+
+ +
+
+class Options(store_eris: bool = True, global_frag_chempot: float = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: Union[str, NoneType] = None, iao_minao: str = 'auto', maxiter: int = 1, charge_consistent: bool = True, max_elec_err: float = 0.0001, conv_tol: float = 1e-06, diis: bool = True, mixing_param: float = 0.5, mixing_variable: str = 'hl rdm', oneshot: bool = False, make_dd_moments: bool = False, old_sc_condition: bool = False, max_bos: int = inf, occ_proj_kernel: bool = False, boson_xc_kernel: bool = False, bosonic_interaction: str = 'xc')
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+boson_xc_kernel: bool = False
+
+ +
+
+bosonic_interaction: str = 'xc'
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+charge_consistent: bool = True
+
+ +
+
+conv_tol: float = 1e-06
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+diis: bool = True
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+iao_minao: str = 'auto'
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+make_dd_moments: bool = False
+
+ +
+
+max_bos: int = inf
+
+ +
+
+max_elec_err: float = 0.0001
+
+ +
+
+maxiter: int = 1
+
+ +
+
+mixing_param: float = 0.5
+
+ +
+
+mixing_variable: str = 'hl rdm'
+
+ +
+
+occ_proj_kernel: bool = False
+
+ +
+
+old_sc_condition: bool = False
+
+ +
+
+oneshot: bool = False
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+solver_options: dict
+
+ +
+
+bath_options: dict
+
+ +
+ +
+
+property with_df
+
+ +
+
+property eps
+
+ +
+
+check_solver(solver)[source]
+
+ +
+
+kernel()[source]
+

Run DMET calculation.

+
+ +
+
+set_up_fragments(sym_parents, nsym)[source]
+
+ +
+
+calc_electron_number_defect(chempot, nelec_target, parent_fragments, nsym, construct_bath=True)[source]
+
+ +
+
+get_updated_correlation_kernel(curr_dd0, curr_dd1, sym_parents, sym_children)[source]
+

Generate the update to our RPA exchange-correlation kernel this iteration.

+
+ +
+
+improve_nl_energy(use_plasmon=True, deg=5)[source]
+

Perform exact adiabatic-connection integration to obtain improved estimate for the nonlocal correlation +energy at the level of RPA. This is initially only calculated using a linear approximation.

+
+ +
+
+run_exact_full_ac(xc_kernel=None, deg=5, calc_local=False, cluster_constrain=False, npoints=48)[source]
+

During calculation we only calculate the linearised nonlocal correlation energy, since this is relatively +cheap (only a single RPA numerical integration). This instead performs the exact energy via numerical +integration of the adiabatic connection.

+
+ +
+
+brueckner_scmf(*args, **kwargs)
+

Decorator for Brueckner-DMET.

+
+ +
+
+build_screened_eris(*args, **kwargs)
+

Generates renormalised coulomb interactions for use in local cluster calculations. +Currently requires unrestricted system.

+
+
Parameters:
+
    +
  • emb (Embedding) – Embedding instance.

  • +
  • fragments (list of vayesta.qemb.Fragment subclasses, optional) – List of fragments for the calculation, used to define local interaction spaces. +If None, emb.get_fragments(sym_parent=None) is used. Default: None.

  • +
  • cderi_ov (np.array or tuple of np.array, optional.) – Cholesky-decomposed ERIs in the particle-hole basis of mf. If mf is unrestricted +this should be a list of arrays corresponding to the different spin channels.

  • +
  • calc_ecorrection (bool, optional.) – Whether to calculate a nonlocal energy correction at the level of RPA

  • +
  • npoints (int, optional) – Number of points for numerical integration. Default: 48.

  • +
  • log (logging.Logger, optional) – Logger object. If None, the logger of the emb object is used. Default: None.

  • +
+
+
Returns:
+

    +
  • seris_ov (list of tuples of np.array) – List of spin-dependent screened (ov|ov), for each fragment provided.

  • +
  • erpa (float) – Delta RPA correction computed as difference between full system RPA energy and +cluster correlation energies; currently only functional in CAS fragmentations.

  • +
+

+
+
+
+ +
+
+cas_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_fragment_symmetry(dm1, symtol=1e-06)
+

Check that the mean-field obeys the symmetry between fragments.

+
+ +
+
+communicate_clusters()
+

Communicate cluster orbitals between MPI ranks.

+
+ +
+
+create_invsym_fragments(center, fragments=None, unit='Ang', **kwargs)
+

Create inversion symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of inversion-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_mirrorsym_fragments(axis, center, fragments=None, unit='Ang', **kwargs)
+

Create mirror symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of mirror-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_rotsym_fragments(order, axis, center, fragments=None, unit='Ang', **kwargs)
+

Create rotationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of rotationally-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_symmetric_fragments(symmetry, fragments=None, symbol=None, mf_tol=None, check_mf=True)
+

Add rotationally or translationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: self.opts.symmetry_mf_tol.

+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_transsym_fragments(translation, fragments=None, **kwargs)
+

Create translationally symmetric fragments.

+
+
Parameters:
+
    +
  • translation (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+property df
+
+ +
+
+property e_mf
+

Total mean-field energy per unit cell (not folded supercell). +Note that the input unit cell itself can be a supercell, in which case +e_mf refers to this cell.

+
+ +
+
+property e_nuc
+

Nuclear-repulsion energy per unit cell (not folded supercell).

+
+ +
+
+property e_tot
+
+ +
+
+get_atomic_charges(pop)
+
+ +
+
+get_average_cluster_size(average='mean')
+
+ +
+
+get_cderi(mo_coeff, compact=False, blksize=None)
+

Get density-fitted three-center integrals in MO basis.

+
+ +
+
+get_corrfunc(kind, dm1=None, dm2=None, **kwargs)
+

Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X.

+

TODO: MPI

+
+
Parameters:
+

atoms (list[int] or list[list[int]], optional) – Atom indices for which the spin-spin correlation function should be evaluated. +If set to None (default), all atoms of the system will be considered. +If a list is given, all atom pairs formed from this list will be considered. +If a list of two lists is given, the first list contains the indices of atom A, +and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. +This is useful in cases where one is only interested in the correlation to +a small subset of atoms. Default: None

+
+
Returns:
+

corr – Atom projected correlation function.

+
+
Return type:
+

array(N,M)

+
+
+
+ +
+
+get_corrfunc_mf(kind, dm1=None, atoms=None, projection='sao')
+

dm1 in MO basis

+
+ +
+
+get_dmet_elec_energy(part_cumulant=True, approx_cumulant=True)
+

Calculate electronic DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_dmet_energy(part_cumulant=True, approx_cumulant=True, with_nuc=True, with_exxdiv=True)
+

Calculate DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
  • with_nuc (bool, optional) – Include nuclear-repulsion energy. Default: True.

  • +
  • with_exxdiv (bool, optional) – Include divergent exact-exchange correction. Default: True.

  • +
+
+
Returns:
+

e_dmet – DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_eris_array(mo_coeff, compact=False)
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff ([list(4) of] (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

eris – Electron-repulsion integrals in MO basis.

+
+
Return type:
+

(n(MO), n(MO), n(MO), n(MO)) array

+
+
+
+ +
+
+get_eris_object(postscf, fock=None)
+

Get ERIs for post-SCF methods.

+

For folded PBC calculations, this folds the MO back into k-space +and contracts with the k-space three-center integrals..

+
+
Parameters:
+

postscf (one of the following PySCF methods: MP2, CCSD, RCCSD, DFCCSD) – Post-SCF method with attribute mo_coeff set.

+
+
Returns:
+

eris – ERIs which can be used for the respective post-scf method.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+get_exxdiv()
+

Get divergent exact-exchange (exxdiv) energy correction and potential.

+
+
Returns:
+

    +
  • e_exxdiv (float) – Divergent exact-exchange energy correction per unit cell.

  • +
  • v_exxdiv (array) – Divergent exact-exchange potential correction in AO basis.

  • +
+

+
+
+
+ +
+
+get_fock(dm1=None, with_exxdiv=True)
+

Fock matrix in AO basis.

+
+ +
+
+get_fock_for_bath(dm1=None, with_exxdiv=True)
+

Fock matrix used for bath orbitals.

+
+ +
+
+get_fock_for_energy(dm1=None, with_exxdiv=True)
+

Fock matrix used for energy evaluation.

+
+ +
+
+get_fragment_overlap_norm(fragments=None, occupied=True, virtual=True, norm=2)
+

Get matrix of overlap norms between fragments.

+
+ +
+
+get_fragments(fragments=None, options=None, flags=None, **filters)
+

Return all fragments which obey the specified conditions.

+
+
Parameters:
+

**filters – List of returned fragments will be filtered according to specified +keyword arguments.

+
+
Returns:
+

fragments – List of fragments.

+
+
Return type:
+

list

+
+
+

Examples

+

Only returns fragments with mpi_rank 0, 1, or 2:

+
>>> self.get_fragments(mpi_rank=[0,1,2])
+
+
+

Only returns fragments with no symmetry parent:

+
>>> self.get_fragments(sym_parent=None)
+
+
+
+ +
+
+get_hcore()
+

Core Hamiltonian (kinetic energy plus nuclear-electron attraction).

+
+ +
+
+get_hcore_for_energy()
+

Core Hamiltonian used for energy evaluation.

+
+ +
+
+get_impurity_coeffs()
+
+ +
+
+get_lo_coeff(local_orbitals='lowdin', minao='auto')
+
+ +
+
+get_max_cluster_size()
+
+ +
+
+get_mean_cluster_size()
+
+ +
+
+get_min_cluster_size()
+
+ +
+
+get_ovlp()
+

AO-overlap matrix.

+
+ +
+
+get_ovlp_power(power)
+

get power of AO overlap matrix.

+

For folded calculations, this uses the k-point sampled overlap, for better performance and accuracy.

+
+
Parameters:
+

power (float) – Matrix power.

+
+
Returns:
+

spow – Matrix power of AO overlap matrix

+
+
Return type:
+

(n(AO), n(AO)) array

+
+
+
+ +
+
+get_symmetry_child_fragments(include_parents=False)
+

Returns a list of all fragments, which are children to symmetry related parent fragments.

+
+
Parameters:
+

include_parents (bool, optional) – If true, the parent fragment of each symmetry group is prepended to each symmetry sublist.

+
+
Returns:
+

children – A list with the length of the number of parent fragments in the system, each element +being another list containing all the children fragments of the given parent fragment. +Both the outer and inner lists are ordered in the same way that the fragments appear in self.fragments.

+
+
Return type:
+

list of lists

+
+
+
+ +
+
+get_symmetry_parent_fragments()
+

Returns a list of all fragments, which are parents to symmetry related child fragments.

+
+
Returns:
+

parents – A list of all parent fragments, ordered in the same way as they appear in self.fragments.

+
+
Return type:
+

list

+
+
+
+ +
+
+get_veff(dm1=None, with_exxdiv=True)
+

Hartree-Fock Coulomb and exchange potential in AO basis.

+
+ +
+
+get_veff_for_energy(dm1=None, with_exxdiv=True)
+

Hartree-Fock potential used for energy evaluation.

+
+ +
+
+has_complete_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete.

+
+ +
+
+has_complete_occupied_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the occupied space.

+
+ +
+
+has_complete_virtual_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the virtual space.

+
+ +
+
+property has_df
+
+ +
+
+property has_exxdiv
+

Correction for divergent exact-exchange potential.

+
+ +
+
+has_orthonormal_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal.

+
+ +
+
+iao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+iaopao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO+PAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+init_mf(mf)
+
+ +
+
+is_rhf = True
+
+ +
+
+is_uhf = False
+
+ +
+
+loop()
+

Loop over fragments.

+
+ +
+
+make_rdm1(*args, **kwargs)
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – Alpha- and beta one-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

tuple of (n, n) arrays

+
+
+
+ +
+
+make_rdm1_demo(*args, **kwargs)
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – One-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+make_rdm2(*args, **kwargs)
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+make_rdm2_demo(*args, **kwargs)
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+property mo_coeff
+

Molecular orbital coefficients.

+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_energy
+

Molecular orbital energies.

+
+ +
+
+property mo_energy_occ
+

Occupied MO energies.

+
+ +
+
+property mo_energy_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_occ
+

Molecular orbital occupations.

+
+ +
+
+property mol
+

Mole or Cell object.

+
+ +
+
+property nao
+

Number of atomic orbitals.

+
+ +
+
+property ncells
+

Number of primitive cells within supercell.

+
+ +
+
+property nfrag
+

Number of fragments.

+
+ +
+
+property nmo
+

Total number of molecular orbitals (MOs).

+
+ +
+
+property nocc
+

Number of occupied MOs.

+
+ +
+
+property nvir
+

Number of virtual MOs.

+
+ +
+
+optimize_chempot(cpt_init=0.0, dm1func=None, dm1kwds=None, robust=False)
+
+ +
+
+property pbc_dimension
+
+ +
+
+pdmet_scmf(*args, **kwargs)
+

Decorator for p-DMET.

+
+ +
+
+pop_analysis(dm1, mo_coeff=None, local_orbitals='lowdin', minao='auto', write=True, filename=None, filemode='a', orbital_resolved=False, mpi_rank=0)
+
+
Parameters:
+
    +
  • dm1 ((N, N) array) – If mo_coeff is None, AO representation is assumed.

  • +
  • local_orbitals ({'lowdin', 'mulliken', 'iao+pao'} or array) – Kind of population analysis. Default: ‘lowdin’.

  • +
+
+
Returns:
+

pop – Population of atomic orbitals.

+
+
Return type:
+

    +
  1. array

  2. +
+

+
+
+
+ +
+
+print_clusters()
+

Print fragments of calculations.

+
+ +
+
+print_results()
+
+ +
+
+require_complete_fragmentation(message=None, incl_virtual=True, **kwargs)
+
+ +
+
+reset(*args, **kwargs)
+
+ +
+
+sao_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of SAO (Lowdin-AO) fragments.

+
+ +
+
+set_hcore(value)
+
+ +
+
+set_ovlp(value)
+
+ +
+
+set_veff(value)
+
+ +
+
+site_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+spinsym = 'restricted'
+
+ +
+
+update_mf(mo_coeff, mo_energy=None, veff=None)
+

Update underlying mean-field object.

+
+ +
+
+update_vcorr(fock, curr_rdms)
+
+ +
+
+write_population(pop, filename=None, filemode='a', orbital_resolved=False)
+
+ +
+ +
+
+vayesta.edmet.edmet.REDMET
+

alias of EDMET

+
+ +
+
+

vayesta.edmet.fragment

+
+
+exception vayesta.edmet.fragment.EDMETFragmentExit[source]
+

Bases: Exception

+
+
+args
+
+ +
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+class vayesta.edmet.fragment.Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0, make_dd_moments: bool = None, old_sc_condition: bool = None, max_bos: int = None, occ_proj_kernel: bool = None, boson_xc_kernel: bool = None, bosonic_interaction: str = None)[source]
+

Bases: Options

+
+
+make_dd_moments: bool = None
+
+ +
+
+old_sc_condition: bool = None
+
+ +
+
+max_bos: int = None
+
+ +
+
+occ_proj_kernel: bool = None
+
+ +
+
+boson_xc_kernel: bool = None
+
+ +
+
+bosonic_interaction: str = None
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: Optional[str] = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class vayesta.edmet.fragment.EDMETFragment(*args, **kwargs)[source]
+

Bases: DMETFragment

+
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0, make_dd_moments: bool = None, old_sc_condition: bool = None, max_bos: int = None, occ_proj_kernel: bool = None, boson_xc_kernel: bool = None, bosonic_interaction: str = None)
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+boson_xc_kernel: bool = None
+
+ +
+
+bosonic_interaction: str = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+make_dd_moments: bool = None
+
+ +
+
+max_bos: int = None
+
+ +
+
+occ_proj_kernel: bool = None
+
+ +
+
+old_sc_condition: bool = None
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: Optional[str] = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None, n_active: int = None, e1: float = None, e2: float = None, dm1: numpy.ndarray = None, dm2: numpy.ndarray = None, dm_eb: numpy.ndarray = None, eb_couplings: numpy.ndarray = None, boson_freqs: tuple = None, dd_mom0: numpy.ndarray = None, dd_mom1: numpy.ndarray = None, e_fb: float = None)[source]
+

Bases: Results

+
+
+dm_eb: ndarray = None
+
+ +
+
+eb_couplings: ndarray = None
+
+ +
+
+boson_freqs: tuple = None
+
+ +
+
+dd_mom0: ndarray = None
+
+ +
+
+dd_mom1: ndarray = None
+
+ +
+
+e_fb: float = None
+
+ +
+
+converged: bool = None
+
+ +
+
+dm1: np.ndarray = None
+
+ +
+
+dm2: np.ndarray = None
+
+ +
+
+e1: float = None
+
+ +
+
+e2: float = None
+
+ +
+
+e_corr: float = None
+
+ +
+
+fid: int = None
+
+ +
+
+n_active: int = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+ +
+
+property ov_active
+
+ +
+
+property ov_active_tot
+
+ +
+
+property ov_mf
+
+ +
+
+property nbos
+
+ +
+
+property r_bos
+
+ +
+
+property r_bos_ao
+
+ +
+
+property r_ao_bos
+
+ +
+
+property energy_couplings
+
+ +
+
+check_solver(solver)[source]
+
+ +
+
+get_fock()[source]
+
+ +
+
+get_co_active()[source]
+
+ +
+
+get_cv_active()[source]
+
+ +
+
+get_rot_to_mf_ov()[source]
+
+ +
+
+get_fragment_projector_ov(proj='o', inc_bosons=False)[source]
+

In space of cluster p-h excitations, generate the projector to the impurity portion of the occupied index.

+
+ +
+
+set_up_fermionic_bath()[source]
+

Set up the fermionic bath orbitals

+
+ +
+
+define_bosons(rpa_mom, rot_ov=None, tol=1e-08)[source]
+

Given the RPA zeroth moment between the fermionic cluster excitations and the rest of the space, define +our cluster bosons. +Note that this doesn’t define our Hamiltonian, since we don’t yet have the required portion of our +zeroth moment for the bosonic degrees of freedom.

+
+ +
+
+construct_boson_hamil(eta0_bos, eps, xc_kernel)[source]
+

Given the zeroth moment coupling of our bosons to the remainder of the space, along with stored information, +generate the components of our interacting electron-boson Hamiltonian. +At the same time, calculate the local RPA correlation energy since this requires all the same information we +already have to hand.

+
+ +
+
+store_cluster_rpa(eta0_bos, eps, xc_kernel)[source]
+

This function just stores all required information for the

+
+ +
+
+get_eri_couplings(rot)[source]
+

Obtain eri in a space defined by an arbitrary rotation of the mean-field particle-hole excitations of our +systems. Note that this should only really be used in the case that such a rotation cannot be described by a +rotation of the underlying single-particle basis, since highly efficient routines already exist for this case..

+
+ +
+
+conv_to_aos(ra, rb)[source]
+
+ +
+
+get_xc_couplings(xc_kernel, rot)[source]
+
+ +
+
+get_loc_eps(eps, rot)[source]
+
+ +
+
+proj_hamil_qba(exchange_between_bos=True)[source]
+

Generate quasi-bosonic Hamiltonian via projection of appropriate Hamiltonian elements of full system. +This represents the bosons as an explicit sum of environmental excitations, which we then approximate as bosonic

+
+

degrees of freedom.

+
+
+ +
+
+check_qba_approx(rdm1)[source]
+

Given boson and cluster coefficient definitions, checks deviation from exact bosonic commutation relations +within our cluster projected onto the ground state. +This will hopefully tell us whether our bosons are likely to be a good approximation to the full system. +We could take the L2 norm of the overall deviation, but given most of the resultant operators have essentially +negligible expectation values with the ground state this is an unnecessarily pessimistic +estimator.

+
+ +
+
+get_rbos_split()[source]
+
+ +
+
+kernel(solver=None, eris=None, construct_bath=False, chempot=None)[source]
+

Solve the fragment with the specified solver and chemical potential.

+
+ +
+
+get_solver_options(solver)[source]
+
+ +
+
+get_edmet_energy_contrib(hamil=None)[source]
+

Generate EDMET energy contribution, according to expression given in appendix of EDMET preprint

+
+ +
+
+construct_correlation_kernel_contrib(epsilon, m0_new, m1_new, eris=None, svdtol=1e-12)[source]
+

Generate the contribution to the correlation kernel arising from this fragment, in terms of local degrees of +freedom (ie cluster orbitals and bosons).

+
+ +
+
+get_correlation_kernel_contrib(contrib)[source]
+

Gets contribution to xc kernel in full space of system.

+
+ +
+
+get_composite_moments(m0_new, m1_new)[source]
+

Construct composite moments using the local solver dd moments and the lattice RPA moments

+
+ +
+
+get_rot_ov_frag()[source]
+

Get rotations between the relevant space for fragment two-point excitations and the cluster active occupied- +virtual excitations.

+
+ +
+
+calc_exact_ac(eps, use_plasmon=True, deg=5)[source]
+

Evaluate the exact local energy for RPA in this cluster via the Adiabatic Connection, with or without +the plasmon formula. Note that although

+
+ +
+
+test_total_rpa_energy(eps, use_plasmon=True, deg=5)[source]
+

Evaluate the exact local energy for RPA in this cluster via the Adiabatic Connection, with or without +the plasmon formula. Note that although

+
+ +
+
+property ov_active_ab
+
+ +
+
+property nocc_ab
+
+ +
+
+property nclus_ab
+
+ +
+
+property nvir_ab
+
+ +
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: int | NoneType = None)
+

Bases: object

+
+
+bath_parent_fragment_id: int | None = None
+
+ +
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, eigvals=False, sign_convention=True)
+

Diagonalize Fock matrix within subspace.

+

TODO: move to Embedding class

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+change_options(**kwargs)
+
+ +
+
+property cluster
+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+copy(fid=None, name=None, **kwargs)
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+couple_to_fragment(frag)
+
+ +
+
+couple_to_fragments(frags)
+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=2, tol=0.0001)
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (array or list of arrays) – Orbital coefficients. If multiple are given, they will be stacked along their second dimension.

  • +
  • dm1 (array, optional) – Mean-field density matrix, used to separate occupied and virtual cluster orbitals. +If None, self.mf.make_rdm1() is used. Default: None.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 2, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ ((n(AO), n(occ cluster)) array) – Occupied cluster orbital coefficients.

  • +
  • c_cluster_vir ((n(AO), n(vir cluster)) array) – Virtual cluster orbital coefficients.

  • +
+

+
+
+
+ +
+
+get_coeff_env()
+
+ +
+
+get_dmet_energy_contrib(hamil=None)
+

Calculate the contribution of this fragment to the overall DMET energy.

+

TODO: use core.qemb.fragment.get_fragment_dmet_energy instead?

+
+ +
+
+get_frag_hamil()
+
+ +
+
+get_frag_hl_dm()
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_fragment_mf_energy()
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_projector(coeff, c_proj=None, inverse=False)
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None)
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occup – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+get_nelectron_hl()
+
+ +
+
+get_overlap(key)
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_solver(solver=None)
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)
+
+ +
+
+get_symmetry_error(frag, dm1=None)
+

Get translational symmetry error between two fragments.

+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)
+
+ +
+
+get_symmetry_operation()
+
+ +
+
+get_symmetry_parent()
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+property hamil
+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+log_info()
+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+make_bath()
+
+ +
+
+make_cluster()
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)
+
+ +
+
+project_ref_orbitals(c_ref, c)
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)
+
+ +
+
+property results
+
+ +
+
+split_ov_spin_components(mat)[source]
+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+trimmed_name(length=10, add_dots=True)
+

Fragment name trimmed to a given maximum length.

+
+ +
+ +
+
+vayesta.edmet.fragment.bogoliubov_decouple(apb, amb)[source]
+
+ +
+
+

vayesta.edmet.uedmet

+
+
+class vayesta.edmet.uedmet.UEDMET(mf, solver='EBFCI', log=None, **kwargs)[source]
+

Bases: EDMET, UDMET

+
+
+property eps
+
+ +
+
+Fragment
+

alias of UEDMETFragment

+
+ +
+
+class Options(store_eris: bool = True, global_frag_chempot: float = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: Union[str, NoneType] = None, iao_minao: str = 'auto', maxiter: int = 1, charge_consistent: bool = True, max_elec_err: float = 0.0001, conv_tol: float = 1e-06, diis: bool = True, mixing_param: float = 0.5, mixing_variable: str = 'hl rdm', oneshot: bool = False, make_dd_moments: bool = False, old_sc_condition: bool = False, max_bos: int = inf, occ_proj_kernel: bool = False, boson_xc_kernel: bool = False, bosonic_interaction: str = 'xc')
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+boson_xc_kernel: bool = False
+
+ +
+
+bosonic_interaction: str = 'xc'
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+charge_consistent: bool = True
+
+ +
+
+conv_tol: float = 1e-06
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+diis: bool = True
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+iao_minao: str = 'auto'
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+make_dd_moments: bool = False
+
+ +
+
+max_bos: int = inf
+
+ +
+
+max_elec_err: float = 0.0001
+
+ +
+
+maxiter: int = 1
+
+ +
+
+mixing_param: float = 0.5
+
+ +
+
+mixing_variable: str = 'hl rdm'
+
+ +
+
+occ_proj_kernel: bool = False
+
+ +
+
+old_sc_condition: bool = False
+
+ +
+
+oneshot: bool = False
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+solver_options: dict
+
+ +
+
+bath_options: dict
+
+ +
+ +
+
+brueckner_scmf(*args, **kwargs)
+

Decorator for Brueckner-DMET.

+
+ +
+
+build_screened_eris(*args, **kwargs)
+

Generates renormalised coulomb interactions for use in local cluster calculations. +Currently requires unrestricted system.

+
+
Parameters:
+
    +
  • emb (Embedding) – Embedding instance.

  • +
  • fragments (list of vayesta.qemb.Fragment subclasses, optional) – List of fragments for the calculation, used to define local interaction spaces. +If None, emb.get_fragments(sym_parent=None) is used. Default: None.

  • +
  • cderi_ov (np.array or tuple of np.array, optional.) – Cholesky-decomposed ERIs in the particle-hole basis of mf. If mf is unrestricted +this should be a list of arrays corresponding to the different spin channels.

  • +
  • calc_ecorrection (bool, optional.) – Whether to calculate a nonlocal energy correction at the level of RPA

  • +
  • npoints (int, optional) – Number of points for numerical integration. Default: 48.

  • +
  • log (logging.Logger, optional) – Logger object. If None, the logger of the emb object is used. Default: None.

  • +
+
+
Returns:
+

    +
  • seris_ov (list of tuples of np.array) – List of spin-dependent screened (ov|ov), for each fragment provided.

  • +
  • erpa (float) – Delta RPA correction computed as difference between full system RPA energy and +cluster correlation energies; currently only functional in CAS fragmentations.

  • +
+

+
+
+
+ +
+
+calc_electron_number_defect(chempot, nelec_target, parent_fragments, nsym, construct_bath=True)
+
+ +
+
+cas_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_fragment_symmetry(dm1, charge_tol=1e-06, spin_tol=1e-06)
+

Check that the mean-field obeys the symmetry between fragments.

+
+ +
+
+check_solver(solver)
+
+ +
+
+communicate_clusters()
+

Communicate cluster orbitals between MPI ranks.

+
+ +
+
+create_invsym_fragments(center, fragments=None, unit='Ang', **kwargs)
+

Create inversion symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of inversion-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_mirrorsym_fragments(axis, center, fragments=None, unit='Ang', **kwargs)
+

Create mirror symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of mirror-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_rotsym_fragments(order, axis, center, fragments=None, unit='Ang', **kwargs)
+

Create rotationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of rotationally-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_symmetric_fragments(symmetry, fragments=None, symbol=None, mf_tol=None, check_mf=True)
+

Add rotationally or translationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: self.opts.symmetry_mf_tol.

+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_transsym_fragments(translation, fragments=None, **kwargs)
+

Create translationally symmetric fragments.

+
+
Parameters:
+
    +
  • translation (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+property df
+
+ +
+
+property e_mf
+

Total mean-field energy per unit cell (not folded supercell). +Note that the input unit cell itself can be a supercell, in which case +e_mf refers to this cell.

+
+ +
+
+property e_nuc
+

Nuclear-repulsion energy per unit cell (not folded supercell).

+
+ +
+
+property e_tot
+
+ +
+
+get_atomic_charges(pop)
+
+ +
+
+get_average_cluster_size(average='mean')
+
+ +
+
+get_cderi(mo_coeff, compact=False, blksize=None)
+

Get density-fitted three-center integrals in MO basis.

+
+ +
+
+get_corrfunc(kind, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None, use_symmetry=True, orbital_filter=None)
+

Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X.

+

TODO: MPI

+
+
Parameters:
+

atoms (list[int] or list[list[int]], optional) – Atom indices for which the spin-spin correlation function should be evaluated. +If set to None (default), all atoms of the system will be considered. +If a list is given, all atom pairs formed from this list will be considered. +If a list of two lists is given, the first list contains the indices of atom A, +and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. +This is useful in cases where one is only interested in the correlation to +a small subset of atoms. Default: None

+
+
Returns:
+

corr – Atom projected correlation function.

+
+
Return type:
+

array(N,M)

+
+
+
+ +
+
+get_corrfunc_mf(kind, dm1=None, atoms=None, projection='sao')
+

dm1 in MO basis

+
+ +
+
+get_dmet_elec_energy(part_cumulant=True, approx_cumulant=True)
+

Calculate electronic DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_dmet_energy(part_cumulant=True, approx_cumulant=True, with_nuc=True, with_exxdiv=True)
+

Calculate DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
  • with_nuc (bool, optional) – Include nuclear-repulsion energy. Default: True.

  • +
  • with_exxdiv (bool, optional) – Include divergent exact-exchange correction. Default: True.

  • +
+
+
Returns:
+

e_dmet – DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_eris_array(mo_coeff, compact=False)
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff ([list(4) of] (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

eris – Electron-repulsion integrals in MO basis.

+
+
Return type:
+

(n(MO), n(MO), n(MO), n(MO)) array

+
+
+
+ +
+
+get_eris_array_uhf(mo_coeff, mo_coeff2=None, compact=False)
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff (tuple(2) of (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

Electron-repulsion integrals in MO basis.

+
+
Return type:
+

eris

+
+
+
+ +
+
+get_eris_object(postscf, fock=None)
+

Get ERIs for post-SCF methods.

+

For folded PBC calculations, this folds the MO back into k-space +and contracts with the k-space three-center integrals..

+
+
Parameters:
+

postscf (one of the following post-SCF methods: MP2, CCSD, RCCSD, DFCCSD) – Post-SCF method with attribute mo_coeff set.

+
+
Returns:
+

eris – ERIs which can be used for the respective post-SCF method.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+get_exxdiv()
+

Get divergent exact-exchange (exxdiv) energy correction and potential.

+
+
Returns:
+

    +
  • e_exxdiv (float) – Divergent exact-exchange energy correction per unit cell.

  • +
  • v_exxdiv (array) – Divergent exact-exchange potential correction in AO basis.

  • +
+

+
+
+
+ +
+
+get_fock(dm1=None, with_exxdiv=True)
+

Fock matrix in AO basis.

+
+ +
+
+get_fock_for_bath(dm1=None, with_exxdiv=True)
+

Fock matrix used for bath orbitals.

+
+ +
+
+get_fock_for_energy(dm1=None, with_exxdiv=True)
+

Fock matrix used for energy evaluation.

+
+ +
+
+get_fragment_overlap_norm(fragments=None, occupied=True, virtual=True, norm=2)
+

Get matrix of overlap norms between fragments.

+
+ +
+
+get_fragments(fragments=None, options=None, flags=None, **filters)
+

Return all fragments which obey the specified conditions.

+
+
Parameters:
+

**filters – List of returned fragments will be filtered according to specified +keyword arguments.

+
+
Returns:
+

fragments – List of fragments.

+
+
Return type:
+

list

+
+
+

Examples

+

Only returns fragments with mpi_rank 0, 1, or 2:

+
>>> self.get_fragments(mpi_rank=[0,1,2])
+
+
+

Only returns fragments with no symmetry parent:

+
>>> self.get_fragments(sym_parent=None)
+
+
+
+ +
+
+get_hcore()
+

Core Hamiltonian (kinetic energy plus nuclear-electron attraction).

+
+ +
+
+get_hcore_for_energy()
+

Core Hamiltonian used for energy evaluation.

+
+ +
+
+get_impurity_coeffs()
+
+ +
+
+get_lo_coeff(local_orbitals='lowdin', minao='auto')
+
+ +
+
+get_max_cluster_size()
+
+ +
+
+get_mean_cluster_size()
+
+ +
+
+get_min_cluster_size()
+
+ +
+
+get_ovlp()
+

AO-overlap matrix.

+
+ +
+
+get_ovlp_power(power)
+

get power of AO overlap matrix.

+

For folded calculations, this uses the k-point sampled overlap, for better performance and accuracy.

+
+
Parameters:
+

power (float) – Matrix power.

+
+
Returns:
+

spow – Matrix power of AO overlap matrix

+
+
Return type:
+

(n(AO), n(AO)) array

+
+
+
+ +
+
+get_symmetry_child_fragments(include_parents=False)
+

Returns a list of all fragments, which are children to symmetry related parent fragments.

+
+
Parameters:
+

include_parents (bool, optional) – If true, the parent fragment of each symmetry group is prepended to each symmetry sublist.

+
+
Returns:
+

children – A list with the length of the number of parent fragments in the system, each element +being another list containing all the children fragments of the given parent fragment. +Both the outer and inner lists are ordered in the same way that the fragments appear in self.fragments.

+
+
Return type:
+

list of lists

+
+
+
+ +
+
+get_symmetry_parent_fragments()
+

Returns a list of all fragments, which are parents to symmetry related child fragments.

+
+
Returns:
+

parents – A list of all parent fragments, ordered in the same way as they appear in self.fragments.

+
+
Return type:
+

list

+
+
+
+ +
+
+get_updated_correlation_kernel(curr_dd0, curr_dd1, sym_parents, sym_children)
+

Generate the update to our RPA exchange-correlation kernel this iteration.

+
+ +
+
+get_veff(dm1=None, with_exxdiv=True)
+

Hartree-Fock Coulomb and exchange potential in AO basis.

+
+ +
+
+get_veff_for_energy(dm1=None, with_exxdiv=True)
+

Hartree-Fock potential used for energy evaluation.

+
+ +
+
+has_complete_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete.

+
+ +
+
+has_complete_occupied_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the occupied space.

+
+ +
+
+has_complete_virtual_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the virtual space.

+
+ +
+
+property has_df
+
+ +
+
+property has_exxdiv
+

Correction for divergent exact-exchange potential.

+
+ +
+
+has_orthonormal_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal.

+
+ +
+
+iao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+iaopao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO+PAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+improve_nl_energy(use_plasmon=True, deg=5)
+

Perform exact adiabatic-connection integration to obtain improved estimate for the nonlocal correlation +energy at the level of RPA. This is initially only calculated using a linear approximation.

+
+ +
+
+init_mf(mf)
+
+ +
+
+is_rhf = False
+
+ +
+
+is_uhf = True
+
+ +
+
+kernel()
+

Run DMET calculation.

+
+ +
+
+loop()
+

Loop over fragments.

+
+ +
+
+make_rdm1(*args, **kwargs)
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – Alpha- and beta one-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

tuple of (n, n) arrays

+
+
+
+ +
+
+make_rdm1_demo(*args, **kwargs)
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – Alpha- and beta one-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

tuple of (n, n) arrays

+
+
+
+ +
+
+make_rdm2(*args, **kwargs)
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+make_rdm2_demo(*args, **kwargs)
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+property mo_coeff
+

Molecular orbital coefficients.

+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_energy
+

Molecular orbital energies.

+
+ +
+
+property mo_energy_occ
+

Occupied MO energies.

+
+ +
+
+property mo_energy_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_occ
+

Molecular orbital occupations.

+
+ +
+
+property mol
+

Mole or Cell object.

+
+ +
+
+property nao
+

Number of atomic orbitals.

+
+ +
+
+property ncells
+

Number of primitive cells within supercell.

+
+ +
+
+property nfrag
+

Number of fragments.

+
+ +
+
+property nmo
+

Total number of molecular orbitals (MOs).

+
+ +
+
+property nocc
+

Number of occupied MOs.

+
+ +
+
+property nvir
+

Number of virtual MOs.

+
+ +
+
+optimize_chempot(cpt_init=0.0, dm1func=None, dm1kwds=None, robust=False)
+
+ +
+
+property pbc_dimension
+
+ +
+
+pdmet_scmf(*args, **kwargs)
+

Decorator for p-DMET.

+
+ +
+
+pop_analysis(dm1, mo_coeff=None, local_orbitals='lowdin', write=True, minao='auto', mpi_rank=0, **kwargs)
+
+
Parameters:
+
    +
  • dm1 ((N, N) array) – If mo_coeff is None, AO representation is assumed.

  • +
  • local_orbitals ({'lowdin', 'mulliken', 'iao+pao'} or array) – Kind of population analysis. Default: ‘lowdin’.

  • +
+
+
Returns:
+

pop – Population of atomic orbitals.

+
+
Return type:
+

    +
  1. array

  2. +
+

+
+
+
+ +
+
+print_clusters()
+

Print fragments of calculations.

+
+ +
+
+print_results()
+
+ +
+
+require_complete_fragmentation(message=None, incl_virtual=True, **kwargs)
+
+ +
+
+reset(*args, **kwargs)
+
+ +
+
+run_exact_full_ac(xc_kernel=None, deg=5, calc_local=False, cluster_constrain=False, npoints=48)
+

During calculation we only calculate the linearised nonlocal correlation energy, since this is relatively +cheap (only a single RPA numerical integration). This instead performs the exact energy via numerical +integration of the adiabatic connection.

+
+ +
+
+sao_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of SAO (Lowdin-AO) fragments.

+
+ +
+
+set_hcore(value)
+
+ +
+
+set_ovlp(value)
+
+ +
+
+set_up_fragments(sym_parents, nsym)
+
+ +
+
+set_veff(value)
+
+ +
+
+site_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+spinsym = 'unrestricted'
+
+ +
+
+update_mf(mo_coeff, mo_energy=None, veff=None)
+

Update underlying mean-field object.

+
+ +
+
+update_vcorr(fock, curr_rdms)
+
+ +
+
+property with_df
+
+ +
+
+write_population(pop, filename=None, filemode='a', orbital_resolved=False)
+
+ +
+ +
+
+

vayesta.edmet.ufragment

+
+
+class vayesta.edmet.ufragment.UEDMETFragment(*args, **kwargs)[source]
+

Bases: UDMETFragment, EDMETFragment

+
+
+property ov_active
+
+ +
+
+property ov_active_tot
+
+ +
+
+property ov_mf
+
+ +
+
+property r_bos_ao
+
+ +
+
+get_fock()[source]
+
+ +
+
+get_co_active()[source]
+
+ +
+
+get_cv_active()[source]
+
+ +
+
+get_rot_to_mf_ov()[source]
+
+ +
+
+get_fragment_projector_ov(proj='o', inc_bosons=False)[source]
+

In space of cluster p-h excitations, generate the projector to the .

+
+ +
+
+conv_to_aos(ra, rb)[source]
+
+ +
+
+get_eri_couplings(rot)[source]
+

Obtain eri in a space defined by an arbitrary rotation of the mean-field particle-hole excitations of our +systems. Note that this should only really be used in the case that such a rotation cannot be described by a +rotation of the underlying single-particle basis, since highly efficient routines already exist for this case..

+
+ +
+
+get_rbos_split()[source]
+
+ +
+
+get_rot_ov_frag()[source]
+

Get rotations between the relevant space for fragment two-point excitations and the cluster active occupied- +virtual excitations.

+
+ +
+
+get_correlation_kernel_contrib(contrib)[source]
+

Gets contribution to xc kernel in full space of system.

+
+ +
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: int | NoneType = None)
+

Bases: object

+
+
+bath_parent_fragment_id: int | None = None
+
+ +
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+ +
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0, make_dd_moments: bool = None, old_sc_condition: bool = None, max_bos: int = None, occ_proj_kernel: bool = None, boson_xc_kernel: bool = None, bosonic_interaction: str = None)
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+boson_xc_kernel: bool = None
+
+ +
+
+bosonic_interaction: str = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+make_dd_moments: bool = None
+
+ +
+
+max_bos: int = None
+
+ +
+
+occ_proj_kernel: bool = None
+
+ +
+
+old_sc_condition: bool = None
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: Optional[str] = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None, n_active: int = None, e1: float = None, e2: float = None, dm1: numpy.ndarray = None, dm2: numpy.ndarray = None, dm_eb: numpy.ndarray = None, eb_couplings: numpy.ndarray = None, boson_freqs: tuple = None, dd_mom0: numpy.ndarray = None, dd_mom1: numpy.ndarray = None, e_fb: float = None)
+

Bases: Results

+
+
+boson_freqs: tuple = None
+
+ +
+
+converged: bool = None
+
+ +
+
+dd_mom0: ndarray = None
+
+ +
+
+dd_mom1: ndarray = None
+
+ +
+
+dm1: np.ndarray = None
+
+ +
+
+dm2: np.ndarray = None
+
+ +
+
+dm_eb: ndarray = None
+
+ +
+
+e1: float = None
+
+ +
+
+e2: float = None
+
+ +
+
+e_corr: float = None
+
+ +
+
+e_fb: float = None
+
+ +
+
+eb_couplings: ndarray = None
+
+ +
+
+fid: int = None
+
+ +
+
+n_active: int = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+calc_exact_ac(eps, use_plasmon=True, deg=5)
+

Evaluate the exact local energy for RPA in this cluster via the Adiabatic Connection, with or without +the plasmon formula. Note that although

+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, **kwargs)
+

Diagonalize Fock matrix within subspace.

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_qba_approx(rdm1)
+

Given boson and cluster coefficient definitions, checks deviation from exact bosonic commutation relations +within our cluster projected onto the ground state. +This will hopefully tell us whether our bosons are likely to be a good approximation to the full system. +We could take the L2 norm of the overall deviation, but given most of the resultant operators have essentially +negligible expectation values with the ground state this is an unnecessarily pessimistic +estimator.

+
+ +
+
+check_solver(solver)
+
+ +
+
+property cluster
+
+ +
+
+construct_boson_hamil(eta0_bos, eps, xc_kernel)
+

Given the zeroth moment coupling of our bosons to the remainder of the space, along with stored information, +generate the components of our interacting electron-boson Hamiltonian. +At the same time, calculate the local RPA correlation energy since this requires all the same information we +already have to hand.

+
+ +
+
+construct_correlation_kernel_contrib(epsilon, m0_new, m1_new, eris=None, svdtol=1e-12)
+

Generate the contribution to the correlation kernel arising from this fragment, in terms of local degrees of +freedom (ie cluster orbitals and bosons).

+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+copy(fid=None, name=None, **kwargs)
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+couple_to_fragment(frag)
+
+ +
+
+couple_to_fragments(frags)
+
+ +
+
+define_bosons(rpa_mom, rot_ov=None, tol=1e-08)
+

Given the RPA zeroth moment between the fermionic cluster excitations and the rest of the space, define +our cluster bosons. +Note that this doesn’t define our Hamiltonian, since we don’t yet have the required portion of our +zeroth moment for the bosonic degrees of freedom.

+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=1, **kwargs)
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 1, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ (ndarray) – Occupied cluster orbitals.

  • +
  • c_cluster_vir (ndarray) – Virtual cluster orbitals.

  • +
+

+
+
+
+ +
+
+property energy_couplings
+
+ +
+
+get_coeff_env()
+
+ +
+
+get_composite_moments(m0_new, m1_new)
+

Construct composite moments using the local solver dd moments and the lattice RPA moments

+
+ +
+
+get_dmet_energy_contrib(hamil=None)
+

Calculate the contribution of this fragment to the overall DMET energy.

+
+ +
+
+get_edmet_energy_contrib(hamil=None)
+

Generate EDMET energy contribution, according to expression given in appendix of EDMET preprint

+
+ +
+
+get_frag_hamil()
+
+ +
+
+get_frag_hl_dm()
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_fragment_mf_energy()
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_projector(coeff, c_proj=None, **kwargs)
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+get_loc_eps(eps, rot)
+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None, **kwargs)
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occ – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+get_nelectron_hl()
+
+ +
+
+get_overlap(key)
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_solver(solver=None)
+
+ +
+
+get_solver_options(solver)
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)
+
+ +
+
+get_symmetry_error(frag, dm1=None)
+

Get translational symmetry error between two fragments.

+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)
+
+ +
+
+get_symmetry_operation()
+
+ +
+
+get_symmetry_parent()
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+get_xc_couplings(xc_kernel, rot)
+
+ +
+
+property hamil
+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+kernel(solver=None, eris=None, construct_bath=False, chempot=None)
+

Solve the fragment with the specified solver and chemical potential.

+
+ +
+
+log_info()
+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+make_bath()
+
+ +
+
+make_cluster()
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+property nbos
+
+ +
+
+property nclus_ab
+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+property nocc_ab
+
+ +
+
+property nvir_ab
+
+ +
+
+property ov_active_ab
+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)
+
+ +
+
+proj_hamil_qba(exchange_between_bos=True)
+

Generate quasi-bosonic Hamiltonian via projection of appropriate Hamiltonian elements of full system. +This represents the bosons as an explicit sum of environmental excitations, which we then approximate as bosonic

+
+

degrees of freedom.

+
+
+ +
+
+project_ref_orbitals(c_ref, c)
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+property r_ao_bos
+
+ +
+
+property r_bos
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)
+
+ +
+
+property results
+
+ +
+
+set_cas(*args, **kwargs)
+
+ +
+
+set_up_fermionic_bath()
+

Set up the fermionic bath orbitals

+
+ +
+
+split_ov_spin_components(mat)
+
+ +
+
+store_cluster_rpa(eta0_bos, eps, xc_kernel)
+

This function just stores all required information for the

+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+test_total_rpa_energy(eps, use_plasmon=True, deg=5)
+

Evaluate the exact local energy for RPA in this cluster via the Adiabatic Connection, with or without +the plasmon formula. Note that although

+
+ +
+
+trimmed_name(length=10, add_dots=True)
+

Fragment name trimmed to a given maximum length.

+
+ +
+ +
+
+

Module contents

+

Extended Density Matrix Embedding Theory (EDMET) method +Author: Charles Scott +email: cjcargillscott@gmail.com

+
+
+vayesta.edmet.EDMET(mf, *args, **kwargs)[source]
+

Determine restricted or unrestricted by inspection of mean-field object

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.ewf.html b/apidoc/vayesta.ewf.html new file mode 100644 index 000000000..093cb4b21 --- /dev/null +++ b/apidoc/vayesta.ewf.html @@ -0,0 +1,6125 @@ + + + + + + + vayesta.ewf — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.ewf

+
+

Submodules

+
+
+

vayesta.ewf.ewf

+
+
+class vayesta.ewf.ewf.Options(store_eris: bool = True, global_frag_chempot: float | None = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: str | None = None, iao_minao: str = 'auto', project_eris: bool = False, project_init_guess: bool = True, energy_functional: str = 'wf', calc_e_wf_corr: bool = True, calc_e_dm_corr: bool = False, t_as_lambda: bool | None = None, store_wf_type: str | None = None, bsse_correction: bool = True, bsse_rmax: float = 5.0, nelectron_target: int | None = None, sc_mode: int = 0, coupled_iterations: bool = False, _debug_wf: str | None = None)[source]
+

Bases: Options

+

Options for EWF calculations.

+
+
+iao_minao: str = 'auto'
+
+ +
+
+bath_options: dict
+
+ +
+
+project_eris: bool = False
+
+ +
+
+project_init_guess: bool = True
+
+ +
+
+energy_functional: str = 'wf'
+
+ +
+
+calc_e_wf_corr: bool = True
+
+ +
+
+calc_e_dm_corr: bool = False
+
+ +
+
+t_as_lambda: bool = None
+
+ +
+
+store_wf_type: str = None
+
+ +
+
+bsse_correction: bool = True
+
+ +
+
+bsse_rmax: float = 5.0
+
+ +
+
+nelectron_target: int = None
+
+ +
+
+sc_mode: int = 0
+
+ +
+
+coupled_iterations: bool = False
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+solver_options: dict
+
+ +
+ +
+
+class vayesta.ewf.ewf.EWF(mf, solver='CCSD', bno_threshold=None, bath_type=None, solve_lambda=None, log=None, **kwargs)[source]
+

Bases: Embedding

+
+
+class Fragment(*args, **kwargs)
+

Bases: Fragment

+
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: Union[int, NoneType] = None, external_corrections: Union[List[Any], NoneType] = <factory>, test_extcorr: bool = False)
+

Bases: Flags

+
+
+bath_parent_fragment_id: int | None = None
+
+ +
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+
+test_extcorr: bool = False
+
+ +
+
+external_corrections: List[Any] | None
+
+ +
+ +
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0, t_as_lambda: bool = None, bsse_correction: bool = None, bsse_rmax: float = None, sc_mode: int = None, nelectron_target: float = None, nelectron_target_atol: float = 1e-06, nelectron_target_rtol: float = 1e-06, calc_e_wf_corr: bool = None, calc_e_dm_corr: bool = None, store_wf_type: str = None, wf_factor: Union[int, NoneType] = None, c_cas_occ: numpy.ndarray = None, c_cas_vir: numpy.ndarray = None, tcc_fci_opts: dict = <factory>)
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+bsse_correction: bool = None
+
+ +
+
+bsse_rmax: float = None
+
+ +
+
+c_cas_occ: ndarray = None
+
+ +
+
+c_cas_vir: ndarray = None
+
+ +
+
+calc_e_dm_corr: bool = None
+
+ +
+
+calc_e_wf_corr: bool = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+nelectron_target: float = None
+
+ +
+
+nelectron_target_atol: float = 1e-06
+
+ +
+
+nelectron_target_rtol: float = 1e-06
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = None
+
+ +
+
+screening: str | None = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+store_wf_type: str = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+t_as_lambda: bool = None
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+wf_factor: int | None = None
+
+ +
+
+tcc_fci_opts: dict
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None, e_corr_dm2cumulant: float = None, n_active: int = None, ip_energy: numpy.ndarray = None, ea_energy: numpy.ndarray = None)
+

Bases: Results

+
+
+converged: bool = None
+
+ +
+
+property dm1
+

Cluster 1DM

+
+ +
+
+property dm2
+

Cluster 2DM

+
+ +
+
+e_corr: float = None
+
+ +
+
+e_corr_dm2cumulant: float = None
+
+ +
+
+ea_energy: ndarray = None
+
+ +
+
+fid: int = None
+
+ +
+
+ip_energy: ndarray = None
+
+ +
+
+n_active: int = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+ +
+
+add_external_corrections(fragments, correction_type='tailor', projectors=1, test_extcorr=False, low_level_coul=True)
+

Add tailoring or external correction from other fragment solutions to CCSD solver.

+
+
Parameters:
+
    +
  • fragments (list) – List of solved or auxiliary fragments, used for the correction.

  • +
  • correction_type (str, optional) –

    +
    Type of correction:

    ’tailor’: replace CCSD T1 and T2 amplitudes with FCI amplitudes. +‘delta-tailor’: Add the difference of FCI and CCSD T1 and T2 amplitudes +‘external’: externally correct CCSD T1 and T2 amplitudes from FCI T3 and T4 amplitudes.

    +
    +
    +

    Default: ‘tailor’.

    +

  • +
  • projectors (int, optional) – Maximum number of projections applied to the occupied dimensions of the amplitude corrections. +Default: 1.

  • +
  • test_extcorr (bool, optional) – Whether to perform additional checks on the external corrections.

  • +
  • low_level_coul (bool, optional) – This is an option specific to the ‘external’ correction. +If True, then the T3V term is contracted with integrals spanning the ‘low-level’ (i.e. CCSD) solver, i.e. the cluster being constrained. +If False, then the T3V term is contracted with the integrals in the ‘high-level’ (i.e. FCI) solver, i.e. the cluster providing the constraints. +In general, there should be a slight speed increase, and slight loss of accuracy for the low_level_coul=False option, but in practice, we find only +minor differences. +Default: True

  • +
+
+
+
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, eigvals=False, sign_convention=True)
+

Diagonalize Fock matrix within subspace.

+

TODO: move to Embedding class

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_solver(solver)
+
+ +
+
+clear_external_corrections()
+

Remove all tailoring or external correction which were added via add_external_corrections.

+
+ +
+
+property cluster
+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+copy(fid=None, name=None, **kwargs)
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+counterpoise_calculation(rmax, dm0=None, nimages=5, unit='A')
+
+ +
+
+couple_to_fragment(frag)
+
+ +
+
+couple_to_fragments(frags)
+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=2, tol=0.0001)
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (array or list of arrays) – Orbital coefficients. If multiple are given, they will be stacked along their second dimension.

  • +
  • dm1 (array, optional) – Mean-field density matrix, used to separate occupied and virtual cluster orbitals. +If None, self.mf.make_rdm1() is used. Default: None.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 2, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ ((n(AO), n(occ cluster)) array) – Occupied cluster orbital coefficients.

  • +
  • c_cluster_vir ((n(AO), n(vir cluster)) array) – Virtual cluster orbital coefficients.

  • +
+

+
+
+
+ +
+
+get_coeff_env()
+
+ +
+
+get_frag_hamil()
+
+ +
+
+get_fragment_bsse(rmax=None, nimages=5, unit='A')
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_fragment_energy(c1, c2, hamil=None, fock=None, c2ba_order='ba', axis1='fragment')
+

Calculate fragment correlation energy contribution from projected C1, C2.

+
+
Parameters:
+
    +
  • c1 ((n(occ-CO), n(vir-CO)) array) – Fragment projected C1-amplitudes.

  • +
  • c2 ((n(occ-CO), n(occ-CO), n(vir-CO), n(vir-CO)) array) – Fragment projected C2-amplitudes.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • fock ((n(AO), n(AO)) array, optional) – Fock matrix in AO representation. If None, self.base.get_fock_for_energy() +is used. Default: None.

  • +
+
+
Returns:
+

    +
  • e_singles (float) – Fragment correlation energy contribution from single excitations.

  • +
  • e_doubles (float) – Fragment correlation energy contribution from double excitations.

  • +
  • e_corr (float) – Total fragment correlation energy contribution.

  • +
+

+
+
+
+ +
+
+get_fragment_mf_energy()
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_projector(coeff, c_proj=None, inverse=False)
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+get_init_guess(init_guess, solver, cluster)
+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None)
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occup – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+get_overlap(key)
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_solver(solver=None)
+
+ +
+
+get_solver_options(solver)
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)
+
+ +
+
+get_symmetry_error(frag, dm1=None)
+

Get translational symmetry error between two fragments.

+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)
+
+ +
+
+get_symmetry_operation()
+
+ +
+
+get_symmetry_parent()
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+property hamil
+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+kernel(solver=None, init_guess=None)
+
+ +
+
+log_info()
+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+make_bath()
+
+ +
+
+make_cluster()
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+make_fragment_dm1(t_as_lambda=False, sym_t2=True)
+

Currently CCSD only.

+

Without mean-field contribution!

+
+ +
+
+make_fragment_dm2cumulant(t_as_lambda=False, sym_t2=True, sym_dm2=True, full_shape=True, approx_cumulant=True)
+

Currently MP2/CCSD only

+
+ +
+
+make_fragment_dm2cumulant_energy(hamil=None, t_as_lambda=False, sym_t2=True, approx_cumulant=True)
+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)
+
+ +
+
+project_ref_orbitals(c_ref, c)
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)
+
+ +
+
+property results
+
+ +
+
+set_cas(iaos=None, c_occ=None, c_vir=None, minao='auto', dmet_threshold=None)
+

Set complete active space for tailored CCSD

+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+tailor_with_fragments(fragments, projectors=1)
+
+ +
+
+trimmed_name(length=10, add_dots=True)
+

Fragment name trimmed to a given maximum length.

+
+ +
+ +
+
+class Options(store_eris: bool = True, global_frag_chempot: float | None = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: str | None = None, iao_minao: str = 'auto', project_eris: bool = False, project_init_guess: bool = True, energy_functional: str = 'wf', calc_e_wf_corr: bool = True, calc_e_dm_corr: bool = False, t_as_lambda: bool | None = None, store_wf_type: str | None = None, bsse_correction: bool = True, bsse_rmax: float = 5.0, nelectron_target: int | None = None, sc_mode: int = 0, coupled_iterations: bool = False, _debug_wf: str | None = None)
+

Bases: Options

+

Options for EWF calculations.

+
+
+asdict(deepcopy=False)
+
+ +
+
+bsse_correction: bool = True
+
+ +
+
+bsse_rmax: float = 5.0
+
+ +
+
+calc_e_dm_corr: bool = False
+
+ +
+
+calc_e_wf_corr: bool = True
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+coupled_iterations: bool = False
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+energy_functional: str = 'wf'
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+iao_minao: str = 'auto'
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+nelectron_target: int = None
+
+ +
+
+project_eris: bool = False
+
+ +
+
+project_init_guess: bool = True
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = 0
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+store_wf_type: str = None
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+t_as_lambda: bool = None
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+bath_options: dict
+
+ +
+
+solver_options: dict
+
+ +
+ +
+
+fragmentation(*args, **kwargs)[source]
+
+ +
+
+tailor_all_fragments()[source]
+
+ +
+
+kernel()[source]
+

Run EWF.

+
+ +
+
+get_global_t1(get_lambda=False, mpi_target=None, ao_basis=False, for_dm2=False)
+

Get global CCSD T1 amplitudes from fragment calculations.

+

Runtime: N(frag)/N(MPI) * N^2

+
+
Parameters:
+
    +
  • get_lambda (bool, optional) – If True, return L1 amplitudes. Default: False.

  • +
  • mpi_target (int or None, optional) – If set to an integer, the result will only be available at the specified MPI rank. +If set to None, an MPI allreduce will be performed and the result will be available +at all MPI ranks. Default: None.

  • +
+
+
Returns:
+

t1 – Global T1 amplitudes.

+
+
Return type:
+

(n(occ), n(vir)) array

+
+
+
+ +
+
+get_global_t2(get_lambda=False, symmetrize=True, mpi_target=None, ao_basis=False, for_dm2=False)
+

Get global CCSD T2 amplitudes from fragment calculations.

+

Runtime: N(frag)/N(MPI) * N^4

+
+
Parameters:
+
    +
  • get_lambda (bool, optional) – If True, return L1 amplitudes. Default: False.

  • +
  • mpi_target (int or None, optional) – If set to an integer, the result will only be available at the specified MPI rank. +If set to None, an MPI allreduce will be performed and the result will be available +at all MPI ranks. Default: None.

  • +
+
+
Returns:
+

t2 – Global T2 amplitudes.

+
+
Return type:
+

(n(occ), n(occ), n(vir), n(vir)) array

+
+
+
+ +
+
+get_global_l1(*args, t_as_lambda=None, **kwargs)[source]
+
+ +
+
+get_global_l2(*args, t_as_lambda=None, **kwargs)[source]
+
+ +
+
+t1_diagnostic(warntol=0.02)[source]
+
+ +
+
+get_t1(*args, **kwargs)[source]
+
+ +
+
+get_t2(*args, **kwargs)[source]
+
+ +
+
+get_l1(*args, **kwargs)[source]
+
+ +
+
+get_l2(*args, **kwargs)[source]
+
+ +
+
+make_rdm1(*args, **kwargs)[source]
+
+ +
+
+make_rdm2(*args, **kwargs)[source]
+
+ +
+
+get_e_corr(functional=None, **kwargs)[source]
+
+ +
+
+get_wf_corr_energy()[source]
+
+ +
+
+get_proj_corr_energy()[source]
+

TODO: deprecate in favor of get_wf_corr_energy.

+
+ +
+
+get_dm_corr_energy(dm1='global-wf', dm2='projected-lambda', t_as_lambda=None, with_exxdiv=None)[source]
+
+ +
+
+get_dm_corr_energy_e1(dm1='global-wf', t_as_lambda=None, with_exxdiv=None)[source]
+
+ +
+
+get_dm_corr_energy_e2(dm2='projected-lambda', t_as_lambda=None)[source]
+

Correlation energy due to cumulant

+
+ +
+
+get_ccsd_corr_energy(full_wf=False)[source]
+

Get projected correlation energy from partitioned CCSD WF.

+

This is the projected (T1, T2) energy expression, instead of the +projected (C1, C2) expression used in PRX (the differences are very small).

+

For testing only, UHF and MPI not implemented

+
+ +
+
+property e_tot
+

Total energy.

+
+ +
+
+get_wf_energy(*args, **kwargs)[source]
+
+ +
+
+get_proj_energy(*args, **kwargs)[source]
+

TODO: deprecate in favor of get_wf_energy.

+
+ +
+
+get_dm_energy(*args, **kwargs)[source]
+
+ +
+
+get_ccsd_energy(full_wf=False)[source]
+
+ +
+
+get_fbc_energy(occupied=True, virtual=True)[source]
+

Get finite-bath correction (FBC) energy.

+

This correction consists of two independent contributions, one due to the finite occupied, +and one due to the finite virtual space.

+

The virtual correction for a given fragment x is calculated as +“E(MP2)[occ=D,vir=F] - E(MP2)[occ=D,vir=C]”, where D is the DMET cluster space, +F is the full space, and C is the full cluster space. For the occupied correction, +occ and vir spaces are swapped. Fragments which do not have a BNO bath are skipped.

+
+
Parameters:
+
    +
  • occupied (bool, optional) – If True, the FBC energy from the occupied space is included. Default: True.

  • +
  • virtual (bool, optional) – If True, the FBC energy from the virtual space is included. Default: True.

  • +
+
+
Returns:
+

e_fbc – Finite bath correction (FBC) energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_intercluster_mp2_energy(*args, **kwargs)[source]
+
+ +
+
+get_atomic_ssz_mf(dm1=None, atoms=None, projection='sao')[source]
+
+ +
+
+get_atomic_ssz(dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None)[source]
+
+ +
+
+brueckner_scmf(*args, **kwargs)
+

Decorator for Brueckner-DMET.

+
+ +
+
+build_screened_eris(*args, **kwargs)
+

Generates renormalised coulomb interactions for use in local cluster calculations. +Currently requires unrestricted system.

+
+
Parameters:
+
    +
  • emb (Embedding) – Embedding instance.

  • +
  • fragments (list of vayesta.qemb.Fragment subclasses, optional) – List of fragments for the calculation, used to define local interaction spaces. +If None, emb.get_fragments(sym_parent=None) is used. Default: None.

  • +
  • cderi_ov (np.array or tuple of np.array, optional.) – Cholesky-decomposed ERIs in the particle-hole basis of mf. If mf is unrestricted +this should be a list of arrays corresponding to the different spin channels.

  • +
  • calc_ecorrection (bool, optional.) – Whether to calculate a nonlocal energy correction at the level of RPA

  • +
  • npoints (int, optional) – Number of points for numerical integration. Default: 48.

  • +
  • log (logging.Logger, optional) – Logger object. If None, the logger of the emb object is used. Default: None.

  • +
+
+
Returns:
+

    +
  • seris_ov (list of tuples of np.array) – List of spin-dependent screened (ov|ov), for each fragment provided.

  • +
  • erpa (float) – Delta RPA correction computed as difference between full system RPA energy and +cluster correlation energies; currently only functional in CAS fragmentations.

  • +
+

+
+
+
+ +
+
+cas_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_fragment_symmetry(dm1, symtol=1e-06)
+

Check that the mean-field obeys the symmetry between fragments.

+
+ +
+
+check_solver(solver)
+
+ +
+
+communicate_clusters()
+

Communicate cluster orbitals between MPI ranks.

+
+ +
+
+create_invsym_fragments(center, fragments=None, unit='Ang', **kwargs)
+

Create inversion symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of inversion-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_mirrorsym_fragments(axis, center, fragments=None, unit='Ang', **kwargs)
+

Create mirror symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of mirror-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_rotsym_fragments(order, axis, center, fragments=None, unit='Ang', **kwargs)
+

Create rotationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of rotationally-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_symmetric_fragments(symmetry, fragments=None, symbol=None, mf_tol=None, check_mf=True)
+

Add rotationally or translationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: self.opts.symmetry_mf_tol.

+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_transsym_fragments(translation, fragments=None, **kwargs)
+

Create translationally symmetric fragments.

+
+
Parameters:
+
    +
  • translation (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+property df
+
+ +
+
+property e_mf
+

Total mean-field energy per unit cell (not folded supercell). +Note that the input unit cell itself can be a supercell, in which case +e_mf refers to this cell.

+
+ +
+
+property e_nuc
+

Nuclear-repulsion energy per unit cell (not folded supercell).

+
+ +
+
+get_atomic_charges(pop)
+
+ +
+
+get_average_cluster_size(average='mean')
+
+ +
+
+get_cderi(mo_coeff, compact=False, blksize=None)
+

Get density-fitted three-center integrals in MO basis.

+
+ +
+
+get_corrfunc(kind, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None, use_symmetry=True, orbital_filter=None)
+

Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X.

+

TODO: MPI

+
+
Parameters:
+

atoms (list[int] or list[list[int]], optional) – Atom indices for which the spin-spin correlation function should be evaluated. +If set to None (default), all atoms of the system will be considered. +If a list is given, all atom pairs formed from this list will be considered. +If a list of two lists is given, the first list contains the indices of atom A, +and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. +This is useful in cases where one is only interested in the correlation to +a small subset of atoms. Default: None

+
+
Returns:
+

corr – Atom projected correlation function.

+
+
Return type:
+

array(N,M)

+
+
+
+ +
+
+get_corrfunc_mf(kind, dm1=None, atoms=None, projection='sao')
+

dm1 in MO basis

+
+ +
+
+get_dmet_elec_energy(part_cumulant=True, approx_cumulant=True)
+

Calculate electronic DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_dmet_energy(part_cumulant=True, approx_cumulant=True, with_nuc=True, with_exxdiv=True)
+

Calculate DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
  • with_nuc (bool, optional) – Include nuclear-repulsion energy. Default: True.

  • +
  • with_exxdiv (bool, optional) – Include divergent exact-exchange correction. Default: True.

  • +
+
+
Returns:
+

e_dmet – DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_eris_array(mo_coeff, compact=False)
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff ([list(4) of] (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

eris – Electron-repulsion integrals in MO basis.

+
+
Return type:
+

(n(MO), n(MO), n(MO), n(MO)) array

+
+
+
+ +
+
+get_eris_object(postscf, fock=None)
+

Get ERIs for post-SCF methods.

+

For folded PBC calculations, this folds the MO back into k-space +and contracts with the k-space three-center integrals..

+
+
Parameters:
+

postscf (one of the following PySCF methods: MP2, CCSD, RCCSD, DFCCSD) – Post-SCF method with attribute mo_coeff set.

+
+
Returns:
+

eris – ERIs which can be used for the respective post-scf method.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+get_exxdiv()
+

Get divergent exact-exchange (exxdiv) energy correction and potential.

+
+
Returns:
+

    +
  • e_exxdiv (float) – Divergent exact-exchange energy correction per unit cell.

  • +
  • v_exxdiv (array) – Divergent exact-exchange potential correction in AO basis.

  • +
+

+
+
+
+ +
+
+get_fock(dm1=None, with_exxdiv=True)
+

Fock matrix in AO basis.

+
+ +
+
+get_fock_for_bath(dm1=None, with_exxdiv=True)
+

Fock matrix used for bath orbitals.

+
+ +
+
+get_fock_for_energy(dm1=None, with_exxdiv=True)
+

Fock matrix used for energy evaluation.

+
+ +
+
+get_fragment_overlap_norm(fragments=None, occupied=True, virtual=True, norm=2)
+

Get matrix of overlap norms between fragments.

+
+ +
+
+get_fragments(fragments=None, options=None, flags=None, **filters)
+

Return all fragments which obey the specified conditions.

+
+
Parameters:
+

**filters – List of returned fragments will be filtered according to specified +keyword arguments.

+
+
Returns:
+

fragments – List of fragments.

+
+
Return type:
+

list

+
+
+

Examples

+

Only returns fragments with mpi_rank 0, 1, or 2:

+
>>> self.get_fragments(mpi_rank=[0,1,2])
+
+
+

Only returns fragments with no symmetry parent:

+
>>> self.get_fragments(sym_parent=None)
+
+
+
+ +
+
+get_hcore()
+

Core Hamiltonian (kinetic energy plus nuclear-electron attraction).

+
+ +
+
+get_hcore_for_energy()
+

Core Hamiltonian used for energy evaluation.

+
+ +
+
+get_lo_coeff(local_orbitals='lowdin', minao='auto')
+
+ +
+
+get_max_cluster_size()
+
+ +
+
+get_mean_cluster_size()
+
+ +
+
+get_min_cluster_size()
+
+ +
+
+get_ovlp()
+

AO-overlap matrix.

+
+ +
+
+get_ovlp_power(power)
+

get power of AO overlap matrix.

+

For folded calculations, this uses the k-point sampled overlap, for better performance and accuracy.

+
+
Parameters:
+

power (float) – Matrix power.

+
+
Returns:
+

spow – Matrix power of AO overlap matrix

+
+
Return type:
+

(n(AO), n(AO)) array

+
+
+
+ +
+
+get_symmetry_child_fragments(include_parents=False)
+

Returns a list of all fragments, which are children to symmetry related parent fragments.

+
+
Parameters:
+

include_parents (bool, optional) – If true, the parent fragment of each symmetry group is prepended to each symmetry sublist.

+
+
Returns:
+

children – A list with the length of the number of parent fragments in the system, each element +being another list containing all the children fragments of the given parent fragment. +Both the outer and inner lists are ordered in the same way that the fragments appear in self.fragments.

+
+
Return type:
+

list of lists

+
+
+
+ +
+
+get_symmetry_parent_fragments()
+

Returns a list of all fragments, which are parents to symmetry related child fragments.

+
+
Returns:
+

parents – A list of all parent fragments, ordered in the same way as they appear in self.fragments.

+
+
Return type:
+

list

+
+
+
+ +
+
+get_veff(dm1=None, with_exxdiv=True)
+

Hartree-Fock Coulomb and exchange potential in AO basis.

+
+ +
+
+get_veff_for_energy(dm1=None, with_exxdiv=True)
+

Hartree-Fock potential used for energy evaluation.

+
+ +
+
+has_complete_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete.

+
+ +
+
+has_complete_occupied_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the occupied space.

+
+ +
+
+has_complete_virtual_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the virtual space.

+
+ +
+
+property has_df
+
+ +
+
+property has_exxdiv
+

Correction for divergent exact-exchange potential.

+
+ +
+
+has_orthonormal_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal.

+
+ +
+
+iao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+iaopao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO+PAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+init_mf(mf)
+
+ +
+
+is_rhf = True
+
+ +
+
+is_uhf = False
+
+ +
+
+loop()
+

Loop over fragments.

+
+ +
+
+make_rdm1_demo(*args, **kwargs)
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – One-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+make_rdm2_demo(*args, **kwargs)
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+property mo_coeff
+

Molecular orbital coefficients.

+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_energy
+

Molecular orbital energies.

+
+ +
+
+property mo_energy_occ
+

Occupied MO energies.

+
+ +
+
+property mo_energy_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_occ
+

Molecular orbital occupations.

+
+ +
+
+property mol
+

Mole or Cell object.

+
+ +
+
+property nao
+

Number of atomic orbitals.

+
+ +
+
+property ncells
+

Number of primitive cells within supercell.

+
+ +
+
+property nfrag
+

Number of fragments.

+
+ +
+
+property nmo
+

Total number of molecular orbitals (MOs).

+
+ +
+
+property nocc
+

Number of occupied MOs.

+
+ +
+
+property nvir
+

Number of virtual MOs.

+
+ +
+
+optimize_chempot(cpt_init=0.0, dm1func=None, dm1kwds=None, robust=False)
+
+ +
+
+property pbc_dimension
+
+ +
+
+pdmet_scmf(*args, **kwargs)
+

Decorator for p-DMET.

+
+ +
+
+pop_analysis(dm1, mo_coeff=None, local_orbitals='lowdin', minao='auto', write=True, filename=None, filemode='a', orbital_resolved=False, mpi_rank=0)
+
+
Parameters:
+
    +
  • dm1 ((N, N) array) – If mo_coeff is None, AO representation is assumed.

  • +
  • local_orbitals ({'lowdin', 'mulliken', 'iao+pao'} or array) – Kind of population analysis. Default: ‘lowdin’.

  • +
+
+
Returns:
+

pop – Population of atomic orbitals.

+
+
Return type:
+

    +
  1. array

  2. +
+

+
+
+
+ +
+
+require_complete_fragmentation(message=None, incl_virtual=True, **kwargs)
+
+ +
+
+reset(*args, **kwargs)
+
+ +
+
+sao_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of SAO (Lowdin-AO) fragments.

+
+ +
+
+set_hcore(value)
+
+ +
+
+set_ovlp(value)
+
+ +
+
+set_veff(value)
+
+ +
+
+site_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+spinsym = 'restricted'
+
+ +
+
+update_mf(mo_coeff, mo_energy=None, veff=None)
+

Update underlying mean-field object.

+
+ +
+
+write_population(pop, filename=None, filemode='a', orbital_resolved=False)
+
+ +
+ +
+
+vayesta.ewf.ewf.REWF
+

alias of EWF

+
+ +
+
+

vayesta.ewf.fragment

+
+
+vayesta.ewf.fragment.get_fragment_mpi_rank(*args)
+
+ +
+
+class vayesta.ewf.fragment.Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0, t_as_lambda: bool = None, bsse_correction: bool = None, bsse_rmax: float = None, sc_mode: int = None, nelectron_target: float = None, nelectron_target_atol: float = 1e-06, nelectron_target_rtol: float = 1e-06, calc_e_wf_corr: bool = None, calc_e_dm_corr: bool = None, store_wf_type: str = None, wf_factor: Union[int, NoneType] = None, c_cas_occ: numpy.ndarray = None, c_cas_vir: numpy.ndarray = None, tcc_fci_opts: dict = <factory>)[source]
+

Bases: Options

+
+
+t_as_lambda: bool = None
+
+ +
+
+bsse_correction: bool = None
+
+ +
+
+bsse_rmax: float = None
+
+ +
+
+sc_mode: int = None
+
+ +
+
+nelectron_target: float = None
+
+ +
+
+nelectron_target_atol: float = 1e-06
+
+ +
+
+nelectron_target_rtol: float = 1e-06
+
+ +
+
+calc_e_wf_corr: bool = None
+
+ +
+
+calc_e_dm_corr: bool = None
+
+ +
+
+store_wf_type: str = None
+
+ +
+
+wf_factor: int | None = None
+
+ +
+
+c_cas_occ: ndarray = None
+
+ +
+
+c_cas_vir: ndarray = None
+
+ +
+
+tcc_fci_opts: dict
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class vayesta.ewf.fragment.Fragment(*args, **kwargs)[source]
+

Bases: Fragment

+
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0, t_as_lambda: bool = None, bsse_correction: bool = None, bsse_rmax: float = None, sc_mode: int = None, nelectron_target: float = None, nelectron_target_atol: float = 1e-06, nelectron_target_rtol: float = 1e-06, calc_e_wf_corr: bool = None, calc_e_dm_corr: bool = None, store_wf_type: str = None, wf_factor: Union[int, NoneType] = None, c_cas_occ: numpy.ndarray = None, c_cas_vir: numpy.ndarray = None, tcc_fci_opts: dict = <factory>)
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+bsse_correction: bool = None
+
+ +
+
+bsse_rmax: float = None
+
+ +
+
+c_cas_occ: ndarray = None
+
+ +
+
+c_cas_vir: ndarray = None
+
+ +
+
+calc_e_dm_corr: bool = None
+
+ +
+
+calc_e_wf_corr: bool = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+nelectron_target: float = None
+
+ +
+
+nelectron_target_atol: float = 1e-06
+
+ +
+
+nelectron_target_rtol: float = 1e-06
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = None
+
+ +
+
+screening: str | None = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+store_wf_type: str = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+t_as_lambda: bool = None
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+wf_factor: int | None = None
+
+ +
+
+tcc_fci_opts: dict
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: Union[int, NoneType] = None, external_corrections: Union[List[Any], NoneType] = <factory>, test_extcorr: bool = False)[source]
+

Bases: Flags

+
+
+external_corrections: List[Any] | None
+
+ +
+
+test_extcorr: bool = False
+
+ +
+
+bath_parent_fragment_id: int | None = None
+
+ +
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+ +
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None, e_corr_dm2cumulant: float = None, n_active: int = None, ip_energy: numpy.ndarray = None, ea_energy: numpy.ndarray = None)[source]
+

Bases: Results

+
+
+e_corr_dm2cumulant: float = None
+
+ +
+
+n_active: int = None
+
+ +
+
+ip_energy: ndarray = None
+
+ +
+
+ea_energy: ndarray = None
+
+ +
+
+property dm1
+

Cluster 1DM

+
+ +
+
+property dm2
+

Cluster 2DM

+
+ +
+
+converged: bool = None
+
+ +
+
+e_corr: float = None
+
+ +
+
+fid: int = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+ +
+
+set_cas(iaos=None, c_occ=None, c_vir=None, minao='auto', dmet_threshold=None)[source]
+

Set complete active space for tailored CCSD

+
+ +
+
+tailor_with_fragments(fragments, projectors=1)[source]
+
+ +
+
+add_external_corrections(fragments, correction_type='tailor', projectors=1, test_extcorr=False, low_level_coul=True)[source]
+

Add tailoring or external correction from other fragment solutions to CCSD solver.

+
+
Parameters:
+
    +
  • fragments (list) – List of solved or auxiliary fragments, used for the correction.

  • +
  • correction_type (str, optional) –

    +
    Type of correction:

    ’tailor’: replace CCSD T1 and T2 amplitudes with FCI amplitudes. +‘delta-tailor’: Add the difference of FCI and CCSD T1 and T2 amplitudes +‘external’: externally correct CCSD T1 and T2 amplitudes from FCI T3 and T4 amplitudes.

    +
    +
    +

    Default: ‘tailor’.

    +

  • +
  • projectors (int, optional) – Maximum number of projections applied to the occupied dimensions of the amplitude corrections. +Default: 1.

  • +
  • test_extcorr (bool, optional) – Whether to perform additional checks on the external corrections.

  • +
  • low_level_coul (bool, optional) – This is an option specific to the ‘external’ correction. +If True, then the T3V term is contracted with integrals spanning the ‘low-level’ (i.e. CCSD) solver, i.e. the cluster being constrained. +If False, then the T3V term is contracted with the integrals in the ‘high-level’ (i.e. FCI) solver, i.e. the cluster providing the constraints. +In general, there should be a slight speed increase, and slight loss of accuracy for the low_level_coul=False option, but in practice, we find only +minor differences. +Default: True

  • +
+
+
+
+ +
+
+clear_external_corrections()[source]
+

Remove all tailoring or external correction which were added via add_external_corrections.

+
+ +
+
+get_init_guess(init_guess, solver, cluster)[source]
+
+ +
+
+kernel(solver=None, init_guess=None)[source]
+
+ +
+
+get_solver_options(solver)[source]
+
+ +
+
+get_fragment_energy(c1, c2, hamil=None, fock=None, c2ba_order='ba', axis1='fragment')[source]
+

Calculate fragment correlation energy contribution from projected C1, C2.

+
+
Parameters:
+
    +
  • c1 ((n(occ-CO), n(vir-CO)) array) – Fragment projected C1-amplitudes.

  • +
  • c2 ((n(occ-CO), n(occ-CO), n(vir-CO), n(vir-CO)) array) – Fragment projected C2-amplitudes.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • fock ((n(AO), n(AO)) array, optional) – Fock matrix in AO representation. If None, self.base.get_fock_for_energy() +is used. Default: None.

  • +
+
+
Returns:
+

    +
  • e_singles (float) – Fragment correlation energy contribution from single excitations.

  • +
  • e_doubles (float) – Fragment correlation energy contribution from double excitations.

  • +
  • e_corr (float) – Total fragment correlation energy contribution.

  • +
+

+
+
+
+ +
+
+make_fragment_dm1(t_as_lambda=False, sym_t2=True)[source]
+

Currently CCSD only.

+

Without mean-field contribution!

+
+ +
+
+make_fragment_dm2cumulant(t_as_lambda=False, sym_t2=True, sym_dm2=True, full_shape=True, approx_cumulant=True)[source]
+

Currently MP2/CCSD only

+
+ +
+
+make_fragment_dm2cumulant_energy(hamil=None, t_as_lambda=False, sym_t2=True, approx_cumulant=True)[source]
+
+ +
+
+get_fragment_bsse(rmax=None, nimages=5, unit='A')[source]
+
+ +
+
+counterpoise_calculation(rmax, dm0=None, nimages=5, unit='A')[source]
+
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)[source]
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, eigvals=False, sign_convention=True)[source]
+

Diagonalize Fock matrix within subspace.

+

TODO: move to Embedding class

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+change_options(**kwargs)[source]
+
+ +
+
+check_solver(solver)[source]
+
+ +
+
+property cluster
+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+copy(fid=None, name=None, **kwargs)[source]
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+couple_to_fragment(frag)[source]
+
+ +
+
+couple_to_fragments(frags)[source]
+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=2, tol=0.0001)[source]
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (array or list of arrays) – Orbital coefficients. If multiple are given, they will be stacked along their second dimension.

  • +
  • dm1 (array, optional) – Mean-field density matrix, used to separate occupied and virtual cluster orbitals. +If None, self.mf.make_rdm1() is used. Default: None.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 2, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ ((n(AO), n(occ cluster)) array) – Occupied cluster orbital coefficients.

  • +
  • c_cluster_vir ((n(AO), n(vir cluster)) array) – Virtual cluster orbital coefficients.

  • +
+

+
+
+
+ +
+
+get_coeff_env()[source]
+
+ +
+
+get_frag_hamil()[source]
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)[source]
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_fragment_mf_energy()[source]
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)[source]
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_projector(coeff, c_proj=None, inverse=False)[source]
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)[source]
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None)[source]
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occup – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+get_overlap(key)[source]
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_solver(solver=None)[source]
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)[source]
+
+ +
+
+get_symmetry_error(frag, dm1=None)[source]
+

Get translational symmetry error between two fragments.

+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)[source]
+
+ +
+
+get_symmetry_operation()[source]
+
+ +
+
+get_symmetry_parent()[source]
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)[source]
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+property hamil
+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+log_info()[source]
+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)[source]
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+make_bath()[source]
+
+ +
+
+make_cluster()[source]
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)[source]
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)[source]
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)[source]
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)[source]
+
+ +
+
+project_ref_orbitals(c_ref, c)[source]
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)[source]
+
+ +
+
+property results
+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+trimmed_name(length=10, add_dots=True)[source]
+

Fragment name trimmed to a given maximum length.

+
+ +
+ +
+
+

vayesta.ewf.helper

+
+
+vayesta.ewf.helper.orthogonalize_mo(c, s, tol=1e-06)[source]
+

Orthogonalize MOs, such that C^T S C = I (identity matrix).

+
+
Parameters:
+
    +
  • c (ndarray) – MO orbital coefficients.

  • +
  • s (ndarray) – AO overlap matrix.

  • +
  • tol (float, optional) – Tolerance.

  • +
+
+
Returns:
+

c_out – Orthogonalized MO coefficients.

+
+
Return type:
+

ndarray

+
+
+
+ +
+
+

vayesta.ewf.uewf

+
+
+class vayesta.ewf.uewf.UEWF(mf, solver='CCSD', bno_threshold=None, bath_type=None, solve_lambda=None, log=None, **kwargs)[source]
+

Bases: EWF, UEmbedding

+
+
+class Fragment(*args, **kwargs)
+

Bases: Fragment, UFragment

+
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: Union[int, NoneType] = None, external_corrections: Union[List[Any], NoneType] = <factory>, test_extcorr: bool = False)
+

Bases: Flags

+
+
+bath_parent_fragment_id: int | None = None
+
+ +
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+
+test_extcorr: bool = False
+
+ +
+
+external_corrections: List[Any] | None
+
+ +
+ +
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0, t_as_lambda: bool = None, bsse_correction: bool = None, bsse_rmax: float = None, sc_mode: int = None, nelectron_target: float = None, nelectron_target_atol: float = 1e-06, nelectron_target_rtol: float = 1e-06, calc_e_wf_corr: bool = None, calc_e_dm_corr: bool = None, store_wf_type: str = None, wf_factor: Union[int, NoneType] = None, c_cas_occ: numpy.ndarray = None, c_cas_vir: numpy.ndarray = None, tcc_fci_opts: dict = <factory>)
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+bsse_correction: bool = None
+
+ +
+
+bsse_rmax: float = None
+
+ +
+
+c_cas_occ: ndarray = None
+
+ +
+
+c_cas_vir: ndarray = None
+
+ +
+
+calc_e_dm_corr: bool = None
+
+ +
+
+calc_e_wf_corr: bool = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+nelectron_target: float = None
+
+ +
+
+nelectron_target_atol: float = 1e-06
+
+ +
+
+nelectron_target_rtol: float = 1e-06
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = None
+
+ +
+
+screening: str | None = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+store_wf_type: str = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+t_as_lambda: bool = None
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+wf_factor: int | None = None
+
+ +
+
+tcc_fci_opts: dict
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None, e_corr_dm2cumulant: float = None, n_active: int = None, ip_energy: numpy.ndarray = None, ea_energy: numpy.ndarray = None)
+

Bases: Results

+
+
+converged: bool = None
+
+ +
+
+property dm1
+

Cluster 1DM

+
+ +
+
+property dm2
+

Cluster 2DM

+
+ +
+
+e_corr: float = None
+
+ +
+
+e_corr_dm2cumulant: float = None
+
+ +
+
+ea_energy: ndarray = None
+
+ +
+
+fid: int = None
+
+ +
+
+ip_energy: ndarray = None
+
+ +
+
+n_active: int = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+ +
+
+add_external_corrections(fragments, correction_type='tailor', projectors=1, test_extcorr=False, low_level_coul=True)
+

Add tailoring or external correction from other fragment solutions to CCSD solver.

+
+
Parameters:
+
    +
  • fragments (list) – List of solved or auxiliary fragments, used for the correction.

  • +
  • correction_type (str, optional) –

    +
    Type of correction:

    ’tailor’: replace CCSD T1 and T2 amplitudes with FCI amplitudes. +‘delta-tailor’: Add the difference of FCI and CCSD T1 and T2 amplitudes +‘external’: externally correct CCSD T1 and T2 amplitudes from FCI T3 and T4 amplitudes.

    +
    +
    +

    Default: ‘tailor’.

    +

  • +
  • projectors (int, optional) – Maximum number of projections applied to the occupied dimensions of the amplitude corrections. +Default: 1.

  • +
  • test_extcorr (bool, optional) – Whether to perform additional checks on the external corrections.

  • +
  • low_level_coul (bool, optional) – This is an option specific to the ‘external’ correction. +If True, then the T3V term is contracted with integrals spanning the ‘low-level’ (i.e. CCSD) solver, i.e. the cluster being constrained. +If False, then the T3V term is contracted with the integrals in the ‘high-level’ (i.e. FCI) solver, i.e. the cluster providing the constraints. +In general, there should be a slight speed increase, and slight loss of accuracy for the low_level_coul=False option, but in practice, we find only +minor differences. +Default: True

  • +
+
+
+
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, **kwargs)
+

Diagonalize Fock matrix within subspace.

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_solver(solver)
+
+ +
+
+clear_external_corrections()
+

Remove all tailoring or external correction which were added via add_external_corrections.

+
+ +
+
+property cluster
+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+copy(fid=None, name=None, **kwargs)
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+counterpoise_calculation(rmax, dm0=None, nimages=5, unit='A')
+
+ +
+
+couple_to_fragment(frag)
+
+ +
+
+couple_to_fragments(frags)
+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=1, **kwargs)
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 1, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ (ndarray) – Occupied cluster orbitals.

  • +
  • c_cluster_vir (ndarray) – Virtual cluster orbitals.

  • +
+

+
+
+
+ +
+
+get_coeff_env()
+
+ +
+
+get_frag_hamil()
+
+ +
+
+get_fragment_bsse(rmax=None, nimages=5, unit='A')
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_fragment_energy(c1, c2, hamil=None, fock=None, axis1='fragment', c2ba_order='ba')
+

Calculate fragment correlation energy contribution from projected C1, C2.

+
+
Parameters:
+
    +
  • c1 ((n(occ-CO), n(vir-CO)) array) – Fragment projected C1-amplitudes.

  • +
  • c2 ((n(occ-CO), n(occ-CO), n(vir-CO), n(vir-CO)) array) – Fragment projected C2-amplitudes.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • fock ((n(AO), n(AO)) array, optional) – Fock matrix in AO representation. If None, self.base.get_fock_for_energy() +is used. Default: None.

  • +
+
+
Returns:
+

    +
  • e_singles (float) – Fragment correlation energy contribution from single excitations.

  • +
  • e_doubles (float) – Fragment correlation energy contribution from double excitations.

  • +
  • e_corr (float) – Total fragment correlation energy contribution.

  • +
+

+
+
+
+ +
+
+get_fragment_mf_energy()
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_projector(coeff, c_proj=None, **kwargs)
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+get_init_guess(init_guess, solver, cluster)
+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None, **kwargs)
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occ – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+get_overlap(key)
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_solver(solver=None)
+
+ +
+
+get_solver_options(solver)
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)
+
+ +
+
+get_symmetry_error(frag, dm1=None)
+

Get translational symmetry error between two fragments.

+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)
+
+ +
+
+get_symmetry_operation()
+
+ +
+
+get_symmetry_parent()
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+property hamil
+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+kernel(solver=None, init_guess=None)
+
+ +
+
+log_info()
+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+make_bath()
+
+ +
+
+make_cluster()
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+make_fragment_dm1(t_as_lambda=False, sym_t2=True)
+

Currently CCSD only.

+

Without mean-field contribution!

+
+ +
+
+make_fragment_dm2cumulant(t_as_lambda=None, sym_t2=True, approx_cumulant=True, full_shape=True)
+

Currently MP2/CCSD only

+
+ +
+
+make_fragment_dm2cumulant_energy(hamil=None, t_as_lambda=None, sym_t2=True, approx_cumulant=True)
+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)
+
+ +
+
+project_ref_orbitals(c_ref, c)
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)
+
+ +
+
+property results
+
+ +
+
+set_cas(*args, **kwargs)
+

Set complete active space for tailored CCSD

+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+tailor_with_fragments(fragments, projectors=1)
+
+ +
+
+trimmed_name(length=10, add_dots=True)
+

Fragment name trimmed to a given maximum length.

+
+ +
+ +
+
+get_global_t1(get_lambda=False, mpi_target=None, ao_basis=False)
+

Get global CCSD T1 from fragment calculations.

+
+
Parameters:
+
    +
  • get_lambda (bool, optional) – If True, return L1 amplitudes. Default: False.

  • +
  • mpi_target (int or None, optional) – If set to an integer, the result will only be available at the specified MPI rank. +If set to None, an MPI allreduce will be performed and the result will be available +at all MPI ranks. Default: None.

  • +
+
+
Returns:
+

t1 – Global T1 amplitudes.

+
+
Return type:
+

tuple(2) of (n(occ), n(vir)) array

+
+
+
+ +
+
+get_global_t2(get_lambda=False, symmetrize=True, mpi_target=None, ao_basis=False)
+

Get global CCSD T2 amplitudes from fragment calculations.

+
+
Parameters:
+
    +
  • get_lambda (bool, optional) – If True, return L1 amplitudes. Default: False.

  • +
  • mpi_target (int or None, optional) – If set to an integer, the result will only be available at the specified MPI rank. +If set to None, an MPI allreduce will be performed and the result will be available +at all MPI ranks. Default: None.

  • +
+
+
Returns:
+

t2 – Global T2 amplitudes.

+
+
Return type:
+

tuple(3) of (n(occ), n(occ), n(vir), n(vir)) array

+
+
+
+ +
+
+t1_diagnostic(warn_tol=0.02)[source]
+
+ +
+
+d1_diagnostic()[source]
+

Global wave function diagnostic.

+
+ +
+
+get_intercluster_mp2_energy(*args, **kwargs)[source]
+
+ +
+
+get_atomic_ssz_mf(dm1=None, atoms=None, projection='sao')[source]
+

TODO: update similar to restricted code +dm1 in MO basis

+
+ +
+
+get_atomic_ssz(dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None)[source]
+

Get expectation values <P(A) S_z^2 P(B)>, where P(X) are projectors onto atoms.

+

TODO: MPI

+
+ +
+
+class Options(store_eris: bool = True, global_frag_chempot: float | None = None, dm_with_frozen: bool = False, bath_options: dict = <factory>, solver_options: dict = <factory>, symmetry_tol: float = 1e-06, symmetry_mf_tol: float = 1e-05, screening: str | None = None, iao_minao: str = 'auto', project_eris: bool = False, project_init_guess: bool = True, energy_functional: str = 'wf', calc_e_wf_corr: bool = True, calc_e_dm_corr: bool = False, t_as_lambda: bool | None = None, store_wf_type: str | None = None, bsse_correction: bool = True, bsse_rmax: float = 5.0, nelectron_target: int | None = None, sc_mode: int = 0, coupled_iterations: bool = False, _debug_wf: str | None = None)
+

Bases: Options

+

Options for EWF calculations.

+
+
+asdict(deepcopy=False)
+
+ +
+
+bsse_correction: bool = True
+
+ +
+
+bsse_rmax: float = 5.0
+
+ +
+
+calc_e_dm_corr: bool = False
+
+ +
+
+calc_e_wf_corr: bool = True
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+coupled_iterations: bool = False
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = False
+
+ +
+
+energy_functional: str = 'wf'
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+global_frag_chempot: float = None
+
+ +
+
+iao_minao: str = 'auto'
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+nelectron_target: int = None
+
+ +
+
+project_eris: bool = False
+
+ +
+
+project_init_guess: bool = True
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = 0
+
+ +
+
+screening: str | None = None
+
+ +
+
+store_eris: bool = True
+
+ +
+
+store_wf_type: str = None
+
+ +
+
+symmetry_mf_tol: float = 1e-05
+
+ +
+
+symmetry_tol: float = 1e-06
+
+ +
+
+t_as_lambda: bool = None
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+bath_options: dict
+
+ +
+
+solver_options: dict
+
+ +
+ +
+
+brueckner_scmf(*args, **kwargs)
+

Decorator for Brueckner-DMET.

+
+ +
+
+build_screened_eris(*args, **kwargs)
+

Generates renormalised coulomb interactions for use in local cluster calculations. +Currently requires unrestricted system.

+
+
Parameters:
+
    +
  • emb (Embedding) – Embedding instance.

  • +
  • fragments (list of vayesta.qemb.Fragment subclasses, optional) – List of fragments for the calculation, used to define local interaction spaces. +If None, emb.get_fragments(sym_parent=None) is used. Default: None.

  • +
  • cderi_ov (np.array or tuple of np.array, optional.) – Cholesky-decomposed ERIs in the particle-hole basis of mf. If mf is unrestricted +this should be a list of arrays corresponding to the different spin channels.

  • +
  • calc_ecorrection (bool, optional.) – Whether to calculate a nonlocal energy correction at the level of RPA

  • +
  • npoints (int, optional) – Number of points for numerical integration. Default: 48.

  • +
  • log (logging.Logger, optional) – Logger object. If None, the logger of the emb object is used. Default: None.

  • +
+
+
Returns:
+

    +
  • seris_ov (list of tuples of np.array) – List of spin-dependent screened (ov|ov), for each fragment provided.

  • +
  • erpa (float) – Delta RPA correction computed as difference between full system RPA energy and +cluster correlation energies; currently only functional in CAS fragmentations.

  • +
+

+
+
+
+ +
+
+cas_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+change_options(**kwargs)
+
+ +
+
+check_fragment_symmetry(dm1, charge_tol=1e-06, spin_tol=1e-06)
+

Check that the mean-field obeys the symmetry between fragments.

+
+ +
+
+check_solver(solver)
+
+ +
+
+communicate_clusters()
+

Communicate cluster orbitals between MPI ranks.

+
+ +
+
+create_invsym_fragments(center, fragments=None, unit='Ang', **kwargs)
+

Create inversion symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of inversion-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_mirrorsym_fragments(axis, center, fragments=None, unit='Ang', **kwargs)
+

Create mirror symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of mirror-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_rotsym_fragments(order, axis, center, fragments=None, unit='Ang', **kwargs)
+

Create rotationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

+
+
Returns:
+

fragments – List of rotationally-symmetry related fragments. These will have have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_symmetric_fragments(symmetry, fragments=None, symbol=None, mf_tol=None, check_mf=True)
+

Add rotationally or translationally symmetric fragments.

+
+
Parameters:
+

mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: self.opts.symmetry_mf_tol.

+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+create_transsym_fragments(translation, fragments=None, **kwargs)
+

Create translationally symmetric fragments.

+
+
Parameters:
+
    +
  • translation (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • mf_tol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+property df
+
+ +
+
+property e_mf
+

Total mean-field energy per unit cell (not folded supercell). +Note that the input unit cell itself can be a supercell, in which case +e_mf refers to this cell.

+
+ +
+
+property e_nuc
+

Nuclear-repulsion energy per unit cell (not folded supercell).

+
+ +
+
+property e_tot
+

Total energy.

+
+ +
+
+fragmentation(*args, **kwargs)
+
+ +
+
+get_atomic_charges(pop)
+
+ +
+
+get_average_cluster_size(average='mean')
+
+ +
+
+get_ccsd_corr_energy(full_wf=False)
+

Get projected correlation energy from partitioned CCSD WF.

+

This is the projected (T1, T2) energy expression, instead of the +projected (C1, C2) expression used in PRX (the differences are very small).

+

For testing only, UHF and MPI not implemented

+
+ +
+
+get_ccsd_energy(full_wf=False)
+
+ +
+
+get_cderi(mo_coeff, compact=False, blksize=None)
+

Get density-fitted three-center integrals in MO basis.

+
+ +
+
+get_corrfunc(kind, dm1=None, dm2=None, atoms=None, projection='sao', dm2_with_dm1=None, use_symmetry=True, orbital_filter=None)
+

Get expectation values <P(A) S_z P(B) S_z>, where P(X) are projectors onto atoms X.

+

TODO: MPI

+
+
Parameters:
+

atoms (list[int] or list[list[int]], optional) – Atom indices for which the spin-spin correlation function should be evaluated. +If set to None (default), all atoms of the system will be considered. +If a list is given, all atom pairs formed from this list will be considered. +If a list of two lists is given, the first list contains the indices of atom A, +and the second of atom B, for which <Sz(A) Sz(B)> will be evaluated. +This is useful in cases where one is only interested in the correlation to +a small subset of atoms. Default: None

+
+
Returns:
+

corr – Atom projected correlation function.

+
+
Return type:
+

array(N,M)

+
+
+
+ +
+
+get_corrfunc_mf(kind, dm1=None, atoms=None, projection='sao')
+

dm1 in MO basis

+
+ +
+
+get_dm_corr_energy(dm1='global-wf', dm2='projected-lambda', t_as_lambda=None, with_exxdiv=None)
+
+ +
+
+get_dm_corr_energy_e1(dm1='global-wf', t_as_lambda=None, with_exxdiv=None)
+
+ +
+
+get_dm_corr_energy_e2(dm2='projected-lambda', t_as_lambda=None)
+

Correlation energy due to cumulant

+
+ +
+
+get_dm_energy(*args, **kwargs)
+
+ +
+
+get_dmet_elec_energy(part_cumulant=True, approx_cumulant=True)
+

Calculate electronic DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_dmet_energy(part_cumulant=True, approx_cumulant=True, with_nuc=True, with_exxdiv=True)
+

Calculate DMET energy via democratically partitioned density-matrices.

+
+
Parameters:
+
    +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
  • with_nuc (bool, optional) – Include nuclear-repulsion energy. Default: True.

  • +
  • with_exxdiv (bool, optional) – Include divergent exact-exchange correction. Default: True.

  • +
+
+
Returns:
+

e_dmet – DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_e_corr(functional=None, **kwargs)
+
+ +
+
+get_eris_array(mo_coeff, compact=False)
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff ([list(4) of] (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

eris – Electron-repulsion integrals in MO basis.

+
+
Return type:
+

(n(MO), n(MO), n(MO), n(MO)) array

+
+
+
+ +
+
+get_eris_array_uhf(mo_coeff, mo_coeff2=None, compact=False)
+

Get electron-repulsion integrals in MO basis as a NumPy array.

+
+
Parameters:
+

mo_coeff (tuple(2) of (n(AO), n(MO)) array) – MO coefficients.

+
+
Returns:
+

Electron-repulsion integrals in MO basis.

+
+
Return type:
+

eris

+
+
+
+ +
+
+get_eris_object(postscf, fock=None)
+

Get ERIs for post-SCF methods.

+

For folded PBC calculations, this folds the MO back into k-space +and contracts with the k-space three-center integrals..

+
+
Parameters:
+

postscf (one of the following post-SCF methods: MP2, CCSD, RCCSD, DFCCSD) – Post-SCF method with attribute mo_coeff set.

+
+
Returns:
+

eris – ERIs which can be used for the respective post-SCF method.

+
+
Return type:
+

_ChemistsERIs

+
+
+
+ +
+
+get_exxdiv()
+

Get divergent exact-exchange (exxdiv) energy correction and potential.

+
+
Returns:
+

    +
  • e_exxdiv (float) – Divergent exact-exchange energy correction per unit cell.

  • +
  • v_exxdiv (array) – Divergent exact-exchange potential correction in AO basis.

  • +
+

+
+
+
+ +
+
+get_fbc_energy(occupied=True, virtual=True)
+

Get finite-bath correction (FBC) energy.

+

This correction consists of two independent contributions, one due to the finite occupied, +and one due to the finite virtual space.

+

The virtual correction for a given fragment x is calculated as +“E(MP2)[occ=D,vir=F] - E(MP2)[occ=D,vir=C]”, where D is the DMET cluster space, +F is the full space, and C is the full cluster space. For the occupied correction, +occ and vir spaces are swapped. Fragments which do not have a BNO bath are skipped.

+
+
Parameters:
+
    +
  • occupied (bool, optional) – If True, the FBC energy from the occupied space is included. Default: True.

  • +
  • virtual (bool, optional) – If True, the FBC energy from the virtual space is included. Default: True.

  • +
+
+
Returns:
+

e_fbc – Finite bath correction (FBC) energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_fock(dm1=None, with_exxdiv=True)
+

Fock matrix in AO basis.

+
+ +
+
+get_fock_for_bath(dm1=None, with_exxdiv=True)
+

Fock matrix used for bath orbitals.

+
+ +
+
+get_fock_for_energy(dm1=None, with_exxdiv=True)
+

Fock matrix used for energy evaluation.

+
+ +
+
+get_fragment_overlap_norm(fragments=None, occupied=True, virtual=True, norm=2)
+

Get matrix of overlap norms between fragments.

+
+ +
+
+get_fragments(fragments=None, options=None, flags=None, **filters)
+

Return all fragments which obey the specified conditions.

+
+
Parameters:
+

**filters – List of returned fragments will be filtered according to specified +keyword arguments.

+
+
Returns:
+

fragments – List of fragments.

+
+
Return type:
+

list

+
+
+

Examples

+

Only returns fragments with mpi_rank 0, 1, or 2:

+
>>> self.get_fragments(mpi_rank=[0,1,2])
+
+
+

Only returns fragments with no symmetry parent:

+
>>> self.get_fragments(sym_parent=None)
+
+
+
+ +
+
+get_global_l1(*args, t_as_lambda=None, **kwargs)
+
+ +
+
+get_global_l2(*args, t_as_lambda=None, **kwargs)
+
+ +
+
+get_hcore()
+

Core Hamiltonian (kinetic energy plus nuclear-electron attraction).

+
+ +
+
+get_hcore_for_energy()
+

Core Hamiltonian used for energy evaluation.

+
+ +
+
+get_l1(*args, **kwargs)
+
+ +
+
+get_l2(*args, **kwargs)
+
+ +
+
+get_lo_coeff(local_orbitals='lowdin', minao='auto')
+
+ +
+
+get_max_cluster_size()
+
+ +
+
+get_mean_cluster_size()
+
+ +
+
+get_min_cluster_size()
+
+ +
+
+get_ovlp()
+

AO-overlap matrix.

+
+ +
+
+get_ovlp_power(power)
+

get power of AO overlap matrix.

+

For folded calculations, this uses the k-point sampled overlap, for better performance and accuracy.

+
+
Parameters:
+

power (float) – Matrix power.

+
+
Returns:
+

spow – Matrix power of AO overlap matrix

+
+
Return type:
+

(n(AO), n(AO)) array

+
+
+
+ +
+
+get_proj_corr_energy()
+

TODO: deprecate in favor of get_wf_corr_energy.

+
+ +
+
+get_proj_energy(*args, **kwargs)
+

TODO: deprecate in favor of get_wf_energy.

+
+ +
+
+get_symmetry_child_fragments(include_parents=False)
+

Returns a list of all fragments, which are children to symmetry related parent fragments.

+
+
Parameters:
+

include_parents (bool, optional) – If true, the parent fragment of each symmetry group is prepended to each symmetry sublist.

+
+
Returns:
+

children – A list with the length of the number of parent fragments in the system, each element +being another list containing all the children fragments of the given parent fragment. +Both the outer and inner lists are ordered in the same way that the fragments appear in self.fragments.

+
+
Return type:
+

list of lists

+
+
+
+ +
+
+get_symmetry_parent_fragments()
+

Returns a list of all fragments, which are parents to symmetry related child fragments.

+
+
Returns:
+

parents – A list of all parent fragments, ordered in the same way as they appear in self.fragments.

+
+
Return type:
+

list

+
+
+
+ +
+
+get_t1(*args, **kwargs)
+
+ +
+
+get_t2(*args, **kwargs)
+
+ +
+
+get_veff(dm1=None, with_exxdiv=True)
+

Hartree-Fock Coulomb and exchange potential in AO basis.

+
+ +
+
+get_veff_for_energy(dm1=None, with_exxdiv=True)
+

Hartree-Fock potential used for energy evaluation.

+
+ +
+
+get_wf_corr_energy()
+
+ +
+
+get_wf_energy(*args, **kwargs)
+
+ +
+
+has_complete_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete.

+
+ +
+
+has_complete_occupied_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the occupied space.

+
+ +
+
+has_complete_virtual_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal and complete in the virtual space.

+
+ +
+
+property has_df
+
+ +
+
+property has_exxdiv
+

Correction for divergent exact-exchange potential.

+
+ +
+
+has_orthonormal_fragmentation(**kwargs)
+

Check if union of fragment spaces is orthonormal.

+
+ +
+
+iao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+iaopao_fragmentation(minao='auto', **kwargs)
+

Initialize the quantum embedding method for the use of IAO+PAO fragments.

+
+
Parameters:
+

minao (str, optional) – IAO reference basis set. Default: ‘auto’

+
+
+
+ +
+
+init_mf(mf)
+
+ +
+
+is_rhf = False
+
+ +
+
+is_uhf = True
+
+ +
+
+kernel()
+

Run EWF.

+
+ +
+
+loop()
+

Loop over fragments.

+
+ +
+
+make_rdm1(*args, **kwargs)
+
+ +
+
+make_rdm1_demo(*args, **kwargs)
+

Make democratically partitioned one-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg, Lowdin-AO or IAO+PAO fragmentation).

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_mf (bool, optional) – Add the mean-field contribution to the density-matrix (double counting is accounted for). +Is only used if partition = ‘dm’. Default: False.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm1 – Alpha- and beta one-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

tuple of (n, n) arrays

+
+
+
+ +
+
+make_rdm2(*args, **kwargs)
+
+ +
+
+make_rdm2_demo(*args, **kwargs)
+

Make democratically partitioned two-particle reduced density-matrix from fragment calculations.

+

Warning: A democratically partitioned DM is only expected to yield reasonable results +for full fragmentations (eg. Lowdin-AO (SAO) or IAO+PAO fragmentation).

+

Energies can be evaluated as follows from the 1-DM and 2-DM:

+

1) Literature DMET energy: +>>> e_nuc = mol.energy_nuc() +>>> hcore = mf.get_hcore() +>>> eris = pyscf.ao2mo.kernel(mol, mf.mo_coeff, compact=False).reshape([mol.nao]*4) +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)

+

…or in terms of the (approximated) cumulant: +>>> vhf = mf.get_veff() +>>> ddm1 = 2*dm1 - mf.make_rdm1() +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=False, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*ddm2) + np.sum(vhf*ddm1)/2

+

2) Improved DMET energy (same as emb.get_dmet_energy(part_cumulant=True)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=True) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the (approximated) cumulant: +>>> fock = mf.get_fock() +>>> ddm1 = emb.make_rdm1_demo(ao_basis=True, with_mf=False) +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=True) +>>> e_tot = mf.e_tot + np.sum(fock*ddm1) + np.sum(eris*ddm2)/2

+

3) Improved DMET energy with true cumulant +(same as emb.get_dmet_energy(part_cumulant=True, approx_cumulant=False)): +>>> dm1 = emb.make_rdm1_demo(ao_basis=True) +>>> dm2 = emb.make_rdm2_demo(ao_basis=True, part_cumulant=True, approx_cumulant=False) +>>> e_tot = e_nuc + np.sum(hcore*dm1) + np.sum(eris*dm2)/2

+

…or in terms of the cumulant: +>>> ddm2 = emb.make_rdm2_demo(ao_basis=True, with_dm1=False, part_cumulant=True, approx_cumulant=False) +>>> fcorr = mf.get_fock(dm=dm1) +>>> e_tot = e_nuc + np.sum((hcore+fcorr)*dm1)/2 + np.sum(eris*ddm2)/2

+
+
Parameters:
+
    +
  • ao_basis (bool, optional) – Return the density-matrix in the AO basis. Default: False.

  • +
  • with_dm1 (bool, optional) – If True, the non-cumulant part of the 2-DM will be added. See also approx_cumulant. Default: False.

  • +
  • part_cumulant (bool, optional) – If False, the mixed non-cumulant contributions, “DM1(MF) * [DM1(corr)-DM1(MF)]”, will be projected +symmetrically between both factors. This will return a 2-DM will evaluates to the DMET-energy +of the literature. If True, only the second factor will be projected. This will generally +give better expectation values and is the recommended setting. Default: True.

  • +
  • approx_cumulant (bool or int, optional) – If True, the cumulant of the 2-DM will be approximated and contain the non-cumulant contribution +“delta[DM1(corr)-DM1(MF)]^2”. This value is ignored if part_cumulant is False and with_dm1 is True. +Default: True.

  • +
  • symmetrize (bool, optional) – Symmetrize the density-matrix at the end of the calculation. Default: True.

  • +
+
+
Returns:
+

dm2 – Two-particle reduced density matrix in AO (if ao_basis=True) or MO basis (default).

+
+
Return type:
+

(n, n, n, n) array

+
+
+
+ +
+
+property mo_coeff
+

Molecular orbital coefficients.

+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_energy
+

Molecular orbital energies.

+
+ +
+
+property mo_energy_occ
+

Occupied MO energies.

+
+ +
+
+property mo_energy_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_occ
+

Molecular orbital occupations.

+
+ +
+
+property mol
+

Mole or Cell object.

+
+ +
+
+property nao
+

Number of atomic orbitals.

+
+ +
+
+property ncells
+

Number of primitive cells within supercell.

+
+ +
+
+property nfrag
+

Number of fragments.

+
+ +
+
+property nmo
+

Total number of molecular orbitals (MOs).

+
+ +
+
+property nocc
+

Number of occupied MOs.

+
+ +
+
+property nvir
+

Number of virtual MOs.

+
+ +
+
+optimize_chempot(cpt_init=0.0, dm1func=None, dm1kwds=None, robust=False)
+
+ +
+
+property pbc_dimension
+
+ +
+
+pdmet_scmf(*args, **kwargs)
+

Decorator for p-DMET.

+
+ +
+
+pop_analysis(dm1, mo_coeff=None, local_orbitals='lowdin', write=True, minao='auto', mpi_rank=0, **kwargs)
+
+
Parameters:
+
    +
  • dm1 ((N, N) array) – If mo_coeff is None, AO representation is assumed.

  • +
  • local_orbitals ({'lowdin', 'mulliken', 'iao+pao'} or array) – Kind of population analysis. Default: ‘lowdin’.

  • +
+
+
Returns:
+

pop – Population of atomic orbitals.

+
+
Return type:
+

    +
  1. array

  2. +
+

+
+
+
+ +
+
+require_complete_fragmentation(message=None, incl_virtual=True, **kwargs)
+
+ +
+
+reset(*args, **kwargs)
+
+ +
+
+sao_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of SAO (Lowdin-AO) fragments.

+
+ +
+
+set_hcore(value)
+
+ +
+
+set_ovlp(value)
+
+ +
+
+set_veff(value)
+
+ +
+
+site_fragmentation(**kwargs)
+

Initialize the quantum embedding method for the use of site fragments.

+
+ +
+
+spinsym = 'unrestricted'
+
+ +
+
+tailor_all_fragments()
+
+ +
+
+update_mf(mo_coeff, mo_energy=None, veff=None)
+

Update underlying mean-field object.

+
+ +
+
+write_population(pop, filename=None, filemode='a', orbital_resolved=False)
+
+ +
+ +
+
+

vayesta.ewf.ufragment

+
+
+class vayesta.ewf.ufragment.Fragment(*args, **kwargs)[source]
+

Bases: Fragment, UFragment

+
+
+set_cas(*args, **kwargs)[source]
+

Set complete active space for tailored CCSD

+
+ +
+
+get_fragment_energy(c1, c2, hamil=None, fock=None, axis1='fragment', c2ba_order='ba')[source]
+

Calculate fragment correlation energy contribution from projected C1, C2.

+
+
Parameters:
+
    +
  • c1 ((n(occ-CO), n(vir-CO)) array) – Fragment projected C1-amplitudes.

  • +
  • c2 ((n(occ-CO), n(occ-CO), n(vir-CO), n(vir-CO)) array) – Fragment projected C2-amplitudes.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • fock ((n(AO), n(AO)) array, optional) – Fock matrix in AO representation. If None, self.base.get_fock_for_energy() +is used. Default: None.

  • +
+
+
Returns:
+

    +
  • e_singles (float) – Fragment correlation energy contribution from single excitations.

  • +
  • e_doubles (float) – Fragment correlation energy contribution from double excitations.

  • +
  • e_corr (float) – Total fragment correlation energy contribution.

  • +
+

+
+
+
+ +
+
+make_fragment_dm2cumulant(t_as_lambda=None, sym_t2=True, approx_cumulant=True, full_shape=True)[source]
+

Currently MP2/CCSD only

+
+ +
+
+make_fragment_dm2cumulant_energy(hamil=None, t_as_lambda=None, sym_t2=True, approx_cumulant=True)[source]
+
+ +
+
+class Flags(is_envelop: bool = True, is_secfrag: bool = False, bath_parent_fragment_id: Union[int, NoneType] = None, external_corrections: Union[List[Any], NoneType] = <factory>, test_extcorr: bool = False)[source]
+

Bases: Flags

+
+
+external_corrections: List[Any] | None
+
+ +
+
+test_extcorr: bool = False
+
+ +
+
+bath_parent_fragment_id: int | None = None
+
+ +
+
+is_envelop: bool = True
+
+ +
+
+is_secfrag: bool = False
+
+ +
+ +
+
+class Options(bath_options: dict = None, solver_options: dict = None, store_eris: bool = None, dm_with_frozen: bool = None, screening: Union[str, NoneType] = None, auxiliary: bool = False, coupled_fragments: list = <factory>, sym_factor: float = 1.0, t_as_lambda: bool = None, bsse_correction: bool = None, bsse_rmax: float = None, sc_mode: int = None, nelectron_target: float = None, nelectron_target_atol: float = 1e-06, nelectron_target_rtol: float = 1e-06, calc_e_wf_corr: bool = None, calc_e_dm_corr: bool = None, store_wf_type: str = None, wf_factor: Union[int, NoneType] = None, c_cas_occ: numpy.ndarray = None, c_cas_vir: numpy.ndarray = None, tcc_fci_opts: dict = <factory>)
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+auxiliary: bool = False
+
+ +
+
+bath_options: dict = None
+
+ +
+
+bsse_correction: bool = None
+
+ +
+
+bsse_rmax: float = None
+
+ +
+
+c_cas_occ: ndarray = None
+
+ +
+
+c_cas_vir: ndarray = None
+
+ +
+
+calc_e_dm_corr: bool = None
+
+ +
+
+calc_e_wf_corr: bool = None
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+dm_with_frozen: bool = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+nelectron_target: float = None
+
+ +
+
+nelectron_target_atol: float = 1e-06
+
+ +
+
+nelectron_target_rtol: float = 1e-06
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = None
+
+ +
+
+screening: str | None = None
+
+ +
+
+solver_options: dict = None
+
+ +
+
+store_eris: bool = None
+
+ +
+
+store_wf_type: str = None
+
+ +
+
+sym_factor: float = 1.0
+
+ +
+
+t_as_lambda: bool = None
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+wf_factor: int | None = None
+
+ +
+
+tcc_fci_opts: dict
+
+ +
+
+coupled_fragments: list
+
+ +
+ +
+
+class Results(fid: int = None, converged: bool = None, e_corr: float = None, wf: vayesta.core.types.wf.wf.WaveFunction = None, pwf: vayesta.core.types.wf.wf.WaveFunction = None, e_corr_dm2cumulant: float = None, n_active: int = None, ip_energy: numpy.ndarray = None, ea_energy: numpy.ndarray = None)[source]
+

Bases: Results

+
+
+e_corr_dm2cumulant: float = None
+
+ +
+
+n_active: int = None
+
+ +
+
+ip_energy: ndarray = None
+
+ +
+
+ea_energy: ndarray = None
+
+ +
+
+property dm1
+

Cluster 1DM

+
+ +
+
+property dm2
+

Cluster 2DM

+
+ +
+
+converged: bool = None
+
+ +
+
+e_corr: float = None
+
+ +
+
+fid: int = None
+
+ +
+
+pwf: WaveFunction = None
+
+ +
+
+wf: WaveFunction = None
+
+ +
+ +
+
+add_external_corrections(fragments, correction_type='tailor', projectors=1, test_extcorr=False, low_level_coul=True)[source]
+

Add tailoring or external correction from other fragment solutions to CCSD solver.

+
+
Parameters:
+
    +
  • fragments (list) – List of solved or auxiliary fragments, used for the correction.

  • +
  • correction_type (str, optional) –

    +
    Type of correction:

    ’tailor’: replace CCSD T1 and T2 amplitudes with FCI amplitudes. +‘delta-tailor’: Add the difference of FCI and CCSD T1 and T2 amplitudes +‘external’: externally correct CCSD T1 and T2 amplitudes from FCI T3 and T4 amplitudes.

    +
    +
    +

    Default: ‘tailor’.

    +

  • +
  • projectors (int, optional) – Maximum number of projections applied to the occupied dimensions of the amplitude corrections. +Default: 1.

  • +
  • test_extcorr (bool, optional) – Whether to perform additional checks on the external corrections.

  • +
  • low_level_coul (bool, optional) – This is an option specific to the ‘external’ correction. +If True, then the T3V term is contracted with integrals spanning the ‘low-level’ (i.e. CCSD) solver, i.e. the cluster being constrained. +If False, then the T3V term is contracted with the integrals in the ‘high-level’ (i.e. FCI) solver, i.e. the cluster providing the constraints. +In general, there should be a slight speed increase, and slight loss of accuracy for the low_level_coul=False option, but in practice, we find only +minor differences. +Default: True

  • +
+
+
+
+ +
+
+add_tsymmetric_fragments(tvecs, symtol=1e-06)[source]
+
+
Parameters:
+
    +
  • tvecs (array(3) of integers) – Each element represent the number of translation vector corresponding to the a0, a1, and a2 lattice vectors of the cell.

  • +
  • symtol (float, optional) – Tolerance for the error of the mean-field density matrix between symmetry related fragments. +If the largest absolute difference in the density-matrix is above this value, +and exception will be raised. Default: 1e-6.

  • +
+
+
Returns:
+

fragments – List of T-symmetry related fragments. These will be automatically added to base.fragments and +have the attributes sym_parent and sym_op set.

+
+
Return type:
+

list

+
+
+
+ +
+
+canonicalize_mo(*mo_coeff, fock=None, **kwargs)
+

Diagonalize Fock matrix within subspace.

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • eigenvalues (ndarray) – Return MO energies of canonicalized orbitals.

  • +
+
+
Returns:
+

    +
  • mo_canon (ndarray) – Canonicalized orbital coefficients.

  • +
  • rot (ndarray) – Rotation matrix: np.dot(mo_coeff, rot) = mo_canon.

  • +
+

+
+
+
+ +
+
+change_options(**kwargs)[source]
+
+ +
+
+check_solver(solver)[source]
+
+ +
+
+clear_external_corrections()[source]
+

Remove all tailoring or external correction which were added via add_external_corrections.

+
+ +
+
+property cluster
+
+ +
+
+property contributes
+

True if fragment contributes to expectation values, else False.

+
+ +
+
+copy(fid=None, name=None, **kwargs)[source]
+

Create copy of fragment, without adding it to the fragments list.

+
+ +
+
+counterpoise_calculation(rmax, dm0=None, nimages=5, unit='A')[source]
+
+ +
+
+couple_to_fragment(frag)[source]
+
+ +
+
+couple_to_fragments(frags)[source]
+
+ +
+
+diagonalize_cluster_dm(*mo_coeff, dm1=None, norm=1, **kwargs)
+

Diagonalize cluster (fragment+bath) DM to get fully occupied and virtual orbitals.

+
+
Parameters:
+
    +
  • *mo_coeff (ndarrays) – Orbital coefficients.

  • +
  • tol (float, optional) – If set, check that all eigenvalues of the cluster DM are close +to 0 or 1, with the tolerance given by tol. Default= 1e-4.

  • +
+
+
Returns:
+

    +
  • c_cluster_occ (ndarray) – Occupied cluster orbitals.

  • +
  • c_cluster_vir (ndarray) – Virtual cluster orbitals.

  • +
+

+
+
+
+ +
+
+get_coeff_env()[source]
+
+ +
+
+get_frag_hamil()[source]
+
+ +
+
+get_fragment_bsse(rmax=None, nimages=5, unit='A')[source]
+
+ +
+
+get_fragment_dmet_energy(dm1=None, dm2=None, h1e_eff=None, hamil=None, part_cumulant=True, approx_cumulant=True)
+

Get fragment contribution to whole system DMET energy from cluster DMs.

+

After fragment summation, the nuclear-nuclear repulsion must be added to get the total energy!

+
+
Parameters:
+
    +
  • dm1 (array, optional) – Cluster one-electron reduced density-matrix in cluster basis. If None, self.results.dm1 is used. Default: None.

  • +
  • dm2 (array, optional) – Cluster two-electron reduced density-matrix in cluster basis. If None, self.results.dm2 is used. Default: None.

  • +
  • hamil (ClusterHamiltonian object.) – Object representing cluster hamiltonian, possibly including cached ERIs.

  • +
  • part_cumulant (bool, optional) – If True, the 2-DM cumulant will be partitioned to calculate the energy. If False, +the full 2-DM will be partitioned, as it is done in most of the DMET literature. +True is recommended, unless checking for agreement with literature results. Default: True.

  • +
  • approx_cumulant (bool, optional) – If True, the approximate cumulant, containing (delta 1-DM)-squared terms, is partitioned, +instead of the true cumulant, if part_cumulant=True. Default: True.

  • +
+
+
Returns:
+

e_dmet – Electronic fragment DMET energy.

+
+
Return type:
+

float

+
+
+
+ +
+
+get_fragment_mf_energy()
+

Calculate the part of the mean-field energy associated with the fragment.

+

Does not include nuclear-nuclear repulsion!

+
+ +
+
+get_fragment_mo_energy(c_active=None, fock=None)
+

Returns approximate MO energies, using the the diagonal of the Fock matrix.

+
+
Parameters:
+
    +
  • c_active (array, optional) –

  • +
  • fock (array, optional) –

  • +
+
+
+
+ +
+
+get_fragment_projector(coeff, c_proj=None, **kwargs)
+

Projector for one index of amplitudes local energy expression.

+

Cost: N^2 if O(1) coeffs , N^3 if O(N) coeffs

+
+
Parameters:
+
    +
  • coeff (ndarray, shape(n(AO), N)) – Occupied or virtual orbital coefficients.

  • +
  • inverse (bool, optional) – Return 1-p instead. Default: False.

  • +
+
+
Returns:
+

p – Projection matrix.

+
+
Return type:
+

(n, n) array

+
+
+
+ +
+
+get_fragments_with_overlap(tol=1e-08, **kwargs)[source]
+

Get list of fragments which overlap both in occupied and virtual space.

+
+ +
+
+get_init_guess(init_guess, solver, cluster)[source]
+
+ +
+
+get_mo_occupation(*mo_coeff, dm1=None, **kwargs)
+

Get mean-field occupation numbers (diagonal of 1-RDM) of orbitals.

+
+
Parameters:
+

mo_coeff (ndarray, shape(N, M)) – Orbital coefficients.

+
+
Returns:
+

occ – Occupation numbers of orbitals.

+
+
Return type:
+

ndarray, shape(M)

+
+
+
+ +
+
+get_overlap(key)[source]
+

Get overlap between cluster orbitals, fragment orbitals, or MOs.

+

The return value is cached but not copied; do not modify the array in place without +creating a copy!

+

Examples: +>>> s = self.get_overlap(‘cluster|mo’) +>>> s = self.get_overlap(‘cluster|frag’) +>>> s = self.get_overlap(‘mo[occ]|cluster[occ]’) +>>> s = self.get_overlap(‘mo[vir]|cluster[vir]’)

+
+ +
+
+get_solver(solver=None)[source]
+
+ +
+
+get_solver_options(solver)[source]
+
+ +
+
+get_symmetry_children(maxgen=None, **filters)[source]
+
+ +
+
+get_symmetry_error(frag, dm1=None)
+

Get translational symmetry error between two fragments.

+
+ +
+
+get_symmetry_generations(maxgen=None, **filters)[source]
+
+ +
+
+get_symmetry_operation()[source]
+
+ +
+
+get_symmetry_parent()[source]
+
+ +
+
+get_symmetry_tree(maxgen=None, **filters)[source]
+

Returns a recursive tree:

+

[(x, [children of x]), (y, [children of y]), …]

+
+ +
+
+property hamil
+
+ +
+
+property id_name
+

Use this whenever a unique name is needed (for example to open a separate file for each fragment).

+
+ +
+
+kernel(solver=None, init_guess=None)[source]
+
+ +
+
+log_info()
+
+ +
+
+loop_symmetry_children(arrays=None, axes=None, symtree=None, maxgen=None, include_self=False)[source]
+

Loop over all symmetry related fragments, including children of children, etc.

+
+
Parameters:
+
    +
  • arrays (ndarray or list[ndarray], optional) – If arrays are passed, the symmetry operation of each symmetry related fragment will be +applied to this array along the axis given in axes.

  • +
  • axes (list[int], optional) – List of axes, along which the symmetry operation is applied for each element of arrays. +If None, the first axis will be used.

  • +
+
+
+
+ +
+
+make_bath()[source]
+
+ +
+
+make_cluster()[source]
+
+ +
+
+make_counterpoise_mol(rmax, nimages=1, unit='A', **kwargs)[source]
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 5.

  • +
  • unit (['A', 'B']) – Unit for rmax, either Angstrom (A) or Bohr (B).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+make_fragment_dm1(t_as_lambda=False, sym_t2=True)[source]
+

Currently CCSD only.

+

Without mean-field contribution!

+
+ +
+
+make_tsymmetric_fragments(*args, **kwargs)[source]
+
+ +
+
+property mf
+
+ +
+
+property mol
+
+ +
+
+property n_frag
+

Number of fragment orbitals.

+
+ +
+
+property n_symmetry_children
+

Includes children of children, etc.

+
+ +
+
+property nelectron
+

Number of mean-field electrons.

+
+ +
+
+plot3d(filename, gridsize=(100, 100, 100), **kwargs)[source]
+

Write cube density data of fragment orbitals to file.

+
+ +
+
+pop_analysis(cluster=None, dm1=None, **kwargs)[source]
+
+ +
+
+project_ref_orbitals(c_ref, c)[source]
+

Project reference orbitals into available space in new geometry.

+

The projected orbitals will be ordered according to their eigenvalues within the space.

+
+
Parameters:
+
    +
  • c (ndarray) – Orbital coefficients.

  • +
  • c_ref (ndarray) – Orbital coefficients of reference orbitals.

  • +
+
+
+
+ +
+
+reset(reset_bath=True, reset_cluster=True, reset_eris=True, reset_inactive=True)[source]
+
+ +
+
+property results
+
+ +
+
+property symmetry_factor
+

Includes children of children, etc.

+
+ +
+
+tailor_with_fragments(fragments, projectors=1)[source]
+
+ +
+
+trimmed_name(length=10, add_dots=True)[source]
+

Fragment name trimmed to a given maximum length.

+
+ +
+ +
+
+

Module contents

+

Embedded wave function (EWF) method +Author: Max Nusspickel +email: max.nusspickel@gmail.com

+
+
+vayesta.ewf.EWF(mf, *args, **kwargs)[source]
+

Determine restricted or unrestricted by inspection of mean-field object

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.html b/apidoc/vayesta.html new file mode 100644 index 000000000..269a4ee80 --- /dev/null +++ b/apidoc/vayesta.html @@ -0,0 +1,3814 @@ + + + + + + + vayesta — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta

+
+

Subpackages

+
+ +
+
+
+

Module contents

+
+
+vayesta.import_package(name, required=True)[source]
+
+ +
+
+vayesta.get_git_hash(dir)[source]
+
+ +
+
+vayesta.new_log(logname, fmt=None, remove_existing=True)[source]
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.lattmod.html b/apidoc/vayesta.lattmod.html new file mode 100644 index 000000000..50dd7ba6a --- /dev/null +++ b/apidoc/vayesta.lattmod.html @@ -0,0 +1,14147 @@ + + + + + + + vayesta.lattmod — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.lattmod

+
+

Submodules

+
+
+

vayesta.lattmod.bethe

+
+
+vayesta.lattmod.bethe.hubbard1d_bethe_energy(t, u, interval=(1e-14, 96.60397409788614), **kwargs)[source]
+

Exact total energy per site for the 1D Hubbard model in the thermodynamic limit.

+

from DOI: 10.1103/PhysRevB.77.045133.

+
+ +
+
+vayesta.lattmod.bethe.hubbard1d_bethe_docc(t, u, interval=(1e-14, 96.60397409788614), **kwargs)[source]
+

Exact on-site double occupancy for the 1D Hubbard model in the thermodynamic limit.

+
+ +
+
+vayesta.lattmod.bethe.hubbard1d_bethe_docc_numdiff(t, u, du=1e-10, order=2, **kwargs)[source]
+

Exact on-site double occupancy for the 1D Hubbard model in the thermodynamic limit.

+

Calculated from the numerical differentiation of the exact Bethe ansatz energy.

+
+ +
+
+

vayesta.lattmod.latt

+
+
+class vayesta.lattmod.latt.LatticeMole(nsite, nelectron=None, spin=0, order=None, incore_anyway=True, verbose=0, output=None)[source]
+

Bases: Cell

+

For PySCF compatibility

+

Needs to implement: +a +copy() +build() +intor_cross() +intor_symmetric() +pbc_intor() +basis

+

? +atom_coord +unit

+
+
+property nelectron
+
+ +
+
+incore_anyway = False
+
+ +
+
+property natm
+
+ +
+
+nao_nr()[source]
+

Total number of contracted GTOs for the given Mole object

+
+ +
+
+ao_labels(fmt=True)[source]
+

Labels of AO basis functions

+
+
Kwargs:
+
fmtstr or bool

if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-AO-notation)] +or formatted strings based on the argument “fmt”

+
+
+
+ +
+
+atom_symbol(site)[source]
+

For the given atom id, return the input symbol (without striping special characters)

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H^2 0 0 0; H 0 0 1.1')
+>>> mol.atom_symbol(0)
+H^2
+
+
+
+ +
+
+atom_pure_symbol(site)[source]
+

For the given atom id, return the standard symbol (striping special characters)

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H^2 0 0 0; H 0 0 1.1')
+>>> mol.atom_symbol(0)
+H
+
+
+
+ +
+
+search_ao_label()[source]
+

Find the index of the AO basis function based on the given ao_label

+
+
Parameters:
+

ao_label – string or a list of strings +The regular expression pattern to match the orbital labels +returned by mol.ao_labels()

+
+
Returns:
+

A list of index for the AOs that matches the given ao_label RE pattern

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='ccpvtz')
+>>> mol.search_ao_label('Cl.*p')
+[19 20 21 22 23 24 25 26 27 28 29 30]
+>>> mol.search_ao_label('Cl 2p')
+[19 20 21]
+>>> mol.search_ao_label(['Cl.*d', 'Cl 4p'])
+[25 26 27 31 32 33 34 35 36 37 38 39 40]
+
+
+
+ +
+
+property Gv
+
+ +
+
+add_keys(**kwargs)
+

Add or update attributes of the object and register these attributes in ._keys

+
+ +
+
+ao2mo(mo_coeffs, intor='int2e', erifile=None, dataname='eri_mo', **kwargs)
+

Integral transformation for arbitrary orbitals and arbitrary +integrals. See more detalied documentation in func:ao2mo.kernel.

+
+
Parameters:
+

mo_coeffs (an np array or a list of arrays) – A matrix of orbital +coefficients if it is a numpy ndarray, or four sets of orbital +coefficients, corresponding to the four indices of (ij|kl).

+
+
+
+
Kwargs:
+
erifile (str or h5py File or h5py Group object)The file/object

to store the transformed integrals. If not given, the return +value is an array (in memory) of the transformed integrals.

+
+
datanamestr

Note this argument is effective if erifile is given. +The dataset name in the erifile (ref the hierarchy of HDF5 format +http://www.hdfgroup.org/HDF5/doc1.6/UG/09_Groups.html). By assigning +different dataname, the existed integral file can be reused. If +the erifile contains the specified dataname, the old integrals +will be replaced by the new one under the key dataname.

+
+
intor (str)integral name Name of the 2-electron integral. Ref

to getints_by_shell() +for the complete list of available 2-electron integral names

+
+
+
+
+
+
Returns:
+

An array of transformed integrals if erifile is not given. +Otherwise, return the file/fileobject if erifile is assigned.

+
+
+

Examples:

+
>>> import pyscf
+>>> mol = pyscf.M(atom='O 0 0 0; H 0 1 0; H 0 0 1', basis='sto3g')
+>>> mo1 = numpy.random.random((mol.nao_nr(), 10))
+>>> mo2 = numpy.random.random((mol.nao_nr(), 8))
+
+
+
>>> eri1 = mol.ao2mo(mo1)
+>>> print(eri1.shape)
+(55, 55)
+
+
+
>>> eri1 = mol.ao2mo(mo1, compact=False)
+>>> print(eri1.shape)
+(100, 100)
+
+
+
>>> eri1 = mol.ao2mo(eri, (mo1,mo2,mo2,mo2))
+>>> print(eri1.shape)
+(80, 36)
+
+
+
>>> eri1 = mol.ao2mo(eri, (mo1,mo2,mo2,mo2), erifile='water.h5')
+
+
+
+ +
+
+property ao_loc
+

Offset of every shell in the spherical basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start basis function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_nr(mol)
+[0, 1, 2, 3, 6, 9, 10, 11, 12, 15, 18]
+
+
+
+ +
+
+ao_loc_2c()
+

Offset of every shell in the spinor basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start id of spinor function

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_2c(mol)
+[0, 2, 4, 6, 12, 18, 20, 22, 24, 30, 36]
+
+
+
+ +
+
+ao_loc_nr(cart=None)
+

Offset of every shell in the spherical basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start basis function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_nr(mol)
+[0, 1, 2, 3, 6, 9, 10, 11, 12, 15, 18]
+
+
+
+ +
+
+ao_rotation_matrix(orientation)
+

Matrix u to rotate AO basis to a new orientation.

+

atom_new_coords = mol.atom_coords().dot(orientation.T) +new_AO = u * mol.AO +new_orbitals_coef = u.dot(orbitals_coef)

+
+ +
+
+aoslice_2c_by_atom()
+

2-component AO offset for each atom. Return a list, each item +of the list gives (start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+aoslice_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+aoslice_nr_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+apply(fn, *args, **kwargs)
+

Apply the fn to rest arguments: return fn(*args, **kwargs). The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+atom_charge(atm_id)
+

Nuclear effective charge of the given atom id +Note “atom_charge /= charge(atom_symbol)” when ECP is enabled. +Number of electrons screened by ECP can be obtained by charge(atom_symbol)-atom_charge

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_charge(1)
+17
+
+
+
+ +
+
+atom_charges()
+

np.asarray([mol.atom_charge(i) for i in range(mol.natm)])

+
+ +
+
+atom_coord(atm_id, unit='Bohr')
+

Coordinates (ndarray) of the given atom id

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_coord(1)
+[ 0.          0.          2.07869874]
+
+
+
+ +
+
+atom_coords(unit='Bohr')
+

np.asarray([mol.atom_coords(i) for i in range(mol.natm)])

+
+ +
+
+atom_mass_list(isotope_avg=False)
+

A list of mass for all atoms in the molecule

+
+
Kwargs:
+
isotope_avgboolean

Whether to use the isotope average mass as the atomic mass

+
+
+
+
+
+ +
+
+atom_nelec_core(atm_id)
+

Number of core electrons for pseudo potential.

+
+ +
+
+atom_nshells(atm_id)
+

Number of basis/shells of the given atom

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_nshells(1)
+5
+
+
+
+ +
+
+atom_shell_ids(atm_id)
+

A list of the shell-ids of the given atom

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.atom_shell_ids(1)
+[3, 4, 5, 6, 7]
+
+
+
+ +
+
+bas_angular(bas_id)
+

The angular momentum associated with the given basis

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(7)
+2
+
+
+
+ +
+
+bas_atom(bas_id)
+

The atom (0-based id) that the given basis sits on

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(7)
+1
+
+
+
+ +
+
+bas_coord(bas_id)
+

Coordinates (ndarray) associated with the given basis id

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.bas_coord(1)
+[ 0.          0.          2.07869874]
+
+
+
+ +
+
+bas_ctr_coeff(bas_id)
+

Contract coefficients (ndarray) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.M(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_ctr_coeff(0)
+[[ 10.03400444]
+ [  4.1188704 ]
+ [  1.53971186]]
+
+
+
+ +
+
+bas_exp(bas_id)
+

exponents (ndarray) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_kappa(0)
+[ 13.01     1.962    0.4446]
+
+
+
+ +
+
+bas_exps()
+

exponents of all basis +return [mol.bas_exp(i) for i in range(self.nbas)]

+
+ +
+
+bas_kappa(bas_id)
+

Kappa (if l < j, -l-1, else l) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_kappa(3)
+0
+
+
+
+ +
+
+bas_len_cart(bas_id)
+

The number of Cartesian function associated with given basis

+
+ +
+
+bas_len_spinor(bas_id)
+

The number of spinor associated with given basis +If kappa is 0, return 4l+2

+
+ +
+
+bas_nctr(bas_id)
+

The number of contracted GTOs for the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(3)
+3
+
+
+
+ +
+
+bas_nprim(bas_id)
+

The number of primitive GTOs for the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(3)
+11
+
+
+
+ +
+
+bas_rcut(bas_id, precision=1e-08)
+

Estimate the largest distance between the function and its image to +reach the precision in overlap

+

precision ~ int g(r-0) g(r-Rcut)

+
+ +
+
+build(dump_input=True, parse_arg=True, a=None, mesh=None, ke_cutoff=None, precision=None, nimgs=None, pseudo=None, basis=None, h=None, dimension=None, rcut=None, ecp=None, low_dim_ft_type=None, space_group_symmetry=None, symmorphic=None, *args, **kwargs)
+

Setup Mole molecule and Cell and initialize some control parameters. +Whenever you change the value of the attributes of Cell, +you need call this function to refresh the internal data of Cell.

+
+
Kwargs:
+
a(3,3) ndarray

The real-space cell lattice vectors. Each row represents +a lattice vector.

+
+
mesh(3,) ndarray of ints

The number of positive G-vectors along each direction.

+
+
ke_cutofffloat

If set, defines a spherical cutoff of planewaves, with .5 * G**2 < ke_cutoff +The default value is estimated based on precision

+
+
precisionfloat

To control Ewald sums and lattice sums accuracy

+
+
nimgs(3,) ndarray of ints

Number of repeated images in lattice summation to produce +periodicity. This value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
rcutfloat

Cutoff radius (unit Bohr) in lattice summation to produce +periodicity. The value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
pseudodict or str

To define pseudopotential.

+
+
ecpdict or str

To define ECP type pseudopotential.

+
+
h(3,3) ndarray

a.T. Deprecated

+
+
dimensionint

Default is 3

+
+
low_dim_ft_typestr

For semi-empirical periodic systems, whether to calculate +integrals at the non-PBC dimension using the sampled mesh grids in +infinity vacuum (inf_vacuum) or truncated Coulomb potential +(analytic_2d_1). Unless explicitly specified, analytic_2d_1 is +used for 2D system and inf_vacuum is assumed for 1D and 0D.

+
+
space_group_symmetrybool

Whether to consider space group symmetry. Default is False.

+
+
symmorphicbool

Whether the lattice is symmorphic. If set to True, even if the +lattice is non-symmorphic, only symmorphic space group symmetry +will be considered. Default is False, meaning the space group is +determined by the lattice symmetry to be symmorphic or non-symmorphic.

+
+
+
+
+
+ +
+
+cart = False
+
+ +
+
+cart2sph_coeff(normalized='sp')
+

Transformation matrix that transforms Cartesian GTOs to spherical +GTOs for all basis functions

+
+
Kwargs:
+
normalizedstring or boolean

How the Cartesian GTOs are normalized. Except s and p functions, +Cartesian GTOs do not have the universal normalization coefficients +for the different components of the same shell. The value of this +argument can be one of ‘sp’, ‘all’, None. ‘sp’ means the Cartesian s +and p basis are normalized. ‘all’ means all Cartesian functions are +normalized. None means none of the Cartesian functions are normalized. +The default value ‘sp’ is the convention used by libcint library.

+
+
+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; F 0 0 1', basis='ccpvtz')
+>>> c = mol.cart2sph_coeff()
+>>> s0 = mol.intor('int1e_ovlp_sph')
+>>> s1 = c.T.dot(mol.intor('int1e_ovlp_cart')).dot(c)
+>>> print(abs(s1-s0).sum())
+>>> 4.58676826646e-15
+
+
+
+ +
+
+cart_labels(fmt=True, base=0)
+

Labels of Cartesian GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-xyz-notation)] +or formatted strings based on the argument “fmt”

+
+
+
+ +
+
+check_sanity()
+

Check input of class/object attributes, check whether a class method is +overwritten. It does not check the attributes which are prefixed with +“_”. The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+condense_to_shell(mat, compressor='max')
+

The given matrix is first partitioned to blocks, based on AO shell as +delimiter. Then call compressor function to abstract each block.

+
+
Parameters:
+

compressor – string or function +if compressor is a string, its value can be sum, max, min, abssum, +absmax, absmin, norm

+
+
+
+ +
+
+copy()
+

Deepcopy of the given Mole object

+
+ +
+
+decontract_basis(atoms=None, to_cart=False)
+

Decontract the basis of a Mole or a Cell. Returns a Mole (Cell) object +with the uncontracted basis environment and a list of coefficients that +transform the uncontracted basis to the original basis. Each element in +the coefficients list corresponds to one shell of the original Mole (Cell).

+
+
Kwargs:
+
atoms: list or str

Atoms on which the basis to be decontracted. By default, all basis +are decontracted

+
+
to_cart: bool

Decontract basis and transfer to Cartesian basis

+
+
+
+
+

Examples:

+
>>> mol = gto.M(atom='Ne', basis='ccpvdz')
+>>> pmol, ctr_coeff = mol.decontract_basis()
+>>> c = scipy.linalg.block_diag(*ctr_coeff)
+>>> s = reduce(numpy.dot, (c.T, pmol.intor('int1e_ovlp'), c))
+>>> abs(s-mol.intor('int1e_ovlp')).max()
+0.0
+
+
+
+ +
+
+property drop_exponent
+
+ +
+
+dump_input()
+
+ +
+
+dumps()
+

Serialize Cell object to a JSON formatted str.

+
+ +
+
+property elements
+

A list of elements in the molecule

+
+ +
+
+energy_nuc(ew_eta=None, ew_cut=None)
+

Perform real (R) and reciprocal (G) space Ewald sum for the energy.

+

Formulation of Martin, App. F2.

+
+
Returns:
+

+
float

The Ewald energy consisting of overlap, self, and G-space sum.

+
+
+

+
+
+
+

See also

+

pyscf.pbc.gto.get_ewald_params

+
+
+ +
+
+etbs(etbs)
+

Generate even tempered basis. See also expand_etb()

+
+
Parameters:
+

[ (etbs =) –

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etbs([(0, 2, 1.5, 2.), (1, 2, 1, 2.)])
+[[0, [6.0, 1]], [0, [3.0, 1]], [1, [1., 1]], [1, [2., 1]]]
+
+
+
+ +
+
+eval_ao(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+eval_gto(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+property ew_cut
+
+ +
+
+property ew_eta
+
+ +
+
+ewald(ew_eta=None, ew_cut=None)
+

Perform real (R) and reciprocal (G) space Ewald sum for the energy.

+

Formulation of Martin, App. F2.

+
+
Returns:
+

+
float

The Ewald energy consisting of overlap, self, and G-space sum.

+
+
+

+
+
+
+

See also

+

pyscf.pbc.gto.get_ewald_params

+
+
+ +
+
+exp_to_discard = None
+
+ +
+
+expand_etb(l, n, alpha, beta)
+

Generate the exponents of even tempered basis for Mole.basis. +.. math:

+
e = e^{-\alpha * \beta^{i-1}} for i = 1 .. n
+
+
+
+
Parameters:
+
    +
  • l – int +Angular momentum

  • +
  • n – int +Number of GTOs

  • +
+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etb(1, 3, 1.5, 2)
+[[1, [6.0, 1]], [1, [3.0, 1]], [1, [1.5, 1]]]
+
+
+
+ +
+
+expand_etbs(etbs)
+

Generate even tempered basis. See also expand_etb()

+
+
Parameters:
+

[ (etbs =) –

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etbs([(0, 2, 1.5, 2.), (1, 2, 1, 2.)])
+[[0, [6.0, 1]], [0, [3.0, 1]], [1, [1., 1]], [1, [2., 1]]]
+
+
+
+ +
+
+format_atom(atom, origin=0, axes=None, unit='Ang')
+

Convert the input Mole.atom to the internal data format. +Including, changing the nuclear charge to atom symbol, converting the +coordinates to AU, rotate and shift the molecule. +If the atom is a string, it takes “;” and “n” +for the mark to separate atoms; “,” and arbitrary length of blank space +to spearate the individual terms for an atom. Blank line will be ignored.

+
+
Parameters:
+

atoms – list or str +the same to Mole.atom

+
+
+
+
Kwargs:
+
originndarray

new axis origin.

+
+
axesndarray

(new_x, new_y, new_z), new coordinates

+
+
unitstr or number

If unit is one of strings (B, b, Bohr, bohr, AU, au), the coordinates +of the input atoms are the atomic unit; If unit is one of strings +(A, a, Angstrom, angstrom, Ang, ang), the coordinates are in the +unit of angstrom; If a number is given, the number are considered +as the Bohr value (in angstrom), which should be around 0.53. +Set unit=1 if wishing to preserve the unit of the coordinates.

+
+
+
+
+
+
Returns:
+

+
“atoms” in the internal format. The internal format is
+
atom = [[atom1, (x, y, z)],
+
+
[atom2, (x, y, z)],
+
+
[atomN, (x, y, z)]]
+
+
+
+
+

+
+
+

Examples:

+
>>> gto.format_atom('9,0,0,0; h@1 0 0 1', origin=(1,1,1))
+[['F', [-1.0, -1.0, -1.0]], ['H@1', [-1.0, -1.0, 0.0]]]
+>>> gto.format_atom(['9,0,0,0', (1, (0, 0, 1))], origin=(1,1,1))
+[['F', [-1.0, -1.0, -1.0]], ['H', [-1, -1, 0]]]
+
+
+
+ +
+
+format_basis(basis_tab)
+

Convert the input Cell.basis to the internal data format:

+
{ atom: (l, kappa, ((-exp, c_1, c_2, ..), nprim, nctr, ptr-exps, ptr-contraction-coeff)), ... }
+
+
+
+
Parameters:
+

basis_tab – dict +Similar to Cell.basis, it cannot be a str

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> pbc.format_basis({'H':'gth-szv'})
+{'H': [[0,
+    (8.3744350009, -0.0283380461),
+    (1.8058681460, -0.1333810052),
+    (0.4852528328, -0.3995676063),
+    (0.1658236932, -0.5531027541)]]}
+
+
+
+ +
+
+format_ecp(ecp_tab)
+

Convert the input ecp (dict) to the internal data format:

+
{ atom: (nelec,  # core electrons
+
+
+
+
+
+
((l, # l=-1 for UL, l>=0 for Ul to indicate |l><l|
+
(((exp_1, c_1), # for r^0
+

(exp_2, c_2), +…),

+
+
+
((exp_1, c_1), # for r^1

(exp_2, c_2), +…),

+
+
((exp_1, c_1), # for r^2

…))))),

+
+
+
+
+
+
+
+

…}

+
+
+ +
+
+format_pseudo(pseudo_tab)
+

Convert the input Cell.pseudo (dict) to the internal data format:

+
{ atom: ( (nelec_s, nele_p, nelec_d, ...),
+         rloc, nexp, (cexp_1, cexp_2, ..., cexp_nexp),
+         nproj_types,
+         (r1, nproj1, ( (hproj1[1,1], hproj1[1,2], ..., hproj1[1,nproj1]),
+                        (hproj1[2,1], hproj1[2,2], ..., hproj1[2,nproj1]),
+                        ...
+                        (hproj1[nproj1,1], hproj1[nproj1,2], ...        ) )),
+         (r2, nproj2, ( (hproj2[1,1], hproj2[1,2], ..., hproj2[1,nproj1]),
+         ... ) )
+         )
+ ... }
+
+
+
+
Parameters:
+

pseudo_tab – dict +Similar to Cell.pseudo (a dict), it cannot be a str

+
+
Returns:
+

Formatted pseudo

+
+
+

Examples:

+
>>> pbc.format_pseudo({'H':'gth-blyp', 'He': 'gth-pade'})
+{'H': [[1],
+    0.2, 2, [-4.19596147, 0.73049821], 0],
+ 'He': [[2],
+    0.2, 2, [-9.1120234, 1.69836797], 0]}
+
+
+
+ +
+
+from_ase(ase_atom)
+

Update cell based on given ase atom object

+

Examples:

+
>>> from ase.lattice import bulk
+>>> cell.from_ase(bulk('C', 'diamond', a=LATTICE_CONST))
+
+
+
+ +
+
+fromfile(filename, format=None)
+

Update the Mole object based on the input geometry file

+
+ +
+
+fromstring(string, format='xyz')
+

Update the Mole object based on the input geometry string

+
+ +
+
+gen_uniform_grids(mesh=None, wrap_around=True)
+

Generate a uniform real-space grid consistent w/ samp thm; see MH (3.19).

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngx*ngy*ngz, 3) ndarray

The real-space grid point coordinates.

+
+
+

+
+
Return type:
+

coords

+
+
+
+ +
+
+get_Gv(mesh=None, **kwargs)
+

Calculate three-dimensional G-vectors for the cell; see MH (3.8).

+

Indices along each direction go as [0…N-1, -N…-1] to follow FFT convention.

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngrids, 3) ndarray of floats

The array of G-vectors.

+
+
+

+
+
Return type:
+

Gv

+
+
+
+ +
+
+get_Gv_weights(mesh=None, **kwargs)
+

Calculate G-vectors and weights.

+
+
Returns:
+

+
(ngris, 3) ndarray of floats

The array of G-vectors.

+
+
+

+
+
Return type:
+

Gv

+
+
+
+ +
+
+get_SI(Gv=None)
+

Calculate the structure factor (0D, 1D, 2D, 3D) for all atoms; see MH (3.34).

+
+
Parameters:
+
    +
  • cell – instance of Cell

  • +
  • Gv – (N,3) array +G vectors

  • +
+
+
Returns:
+

+
(natm, ngrids) ndarray, dtype=np.complex128

The structure factor for each atom at each G-vector.

+
+
+

+
+
Return type:
+

SI

+
+
+
+ +
+
+get_abs_kpts(scaled_kpts)
+

Get absolute k-points (in 1/Bohr), given “scaled” k-points in +fractions of lattice vectors.

+
+
Parameters:
+

scaled_kpts – (nkpts, 3) ndarray of floats

+
+
Returns:
+

(nkpts, 3) ndarray of floats

+
+
Return type:
+

abs_kpts

+
+
+
+ +
+
+get_ao_indices(bas_list, ao_loc=None)
+

Generate (dis-continued) AO indices for basis specified in bas_list

+
+ +
+
+get_bounding_sphere(rcut)
+

Finds all the lattice points within a sphere of radius rcut.

+

Defines a parallelipiped given by -N_x <= n_x <= N_x, with x in [1,3] +See Martin p. 85

+
+
Parameters:
+

rcut – number +real space cut-off for interaction

+
+
Returns:
+

ndarray of 3 ints defining N_x

+
+
Return type:
+

cut

+
+
+
+ +
+
+get_enuc()
+
+ +
+
+get_ewald_params(precision=None, mesh=None)
+

Choose a reasonable value of Ewald ‘eta’ and ‘cut’ parameters. +eta^2 is the exponent coefficient of the model Gaussian charge for nucleus +at R: frac{eta^3}{pi^1.5} e^{-eta^2 (r-R)^2}

+

Choice is based on largest G vector and desired relative precision.

+

The relative error in the G-space sum is given by

+
+

precision ~ 4pi Gmax^2 e^{(-Gmax^2)/(4 eta^2)}

+
+

which determines eta. Then, real-space cutoff is determined by (exp. +factors only)

+
+

precision ~ erfc(eta*rcut) / rcut ~ e^{(-eta**2 rcut*2)}

+
+
+
Returns:
+

+
float

The Ewald ‘eta’ and ‘cut’ parameters.

+
+
+

+
+
Return type:
+

ew_eta, ew_cut

+
+
+
+ +
+
+get_kpts(nks, wrap_around=False, with_gamma_point=True, scaled_center=None, space_group_symmetry=False, time_reversal_symmetry=False, **kwargs)
+

Given number of kpoints along x,y,z , generate kpoints

+
+
Parameters:
+

nks – (3,) ndarray

+
+
+
+
Kwargs:
+
wrap_aroundbool

To ensure all kpts are in first Brillouin zone.

+
+
with_gamma_pointbool

Whether to shift Monkhorst-pack grid to include gamma-point.

+
+
scaled_center(3,) array

Shift all points in the Monkhorst-pack grid to be centered on +scaled_center, given as the zeroth index of the returned kpts. +Scaled meaning that the k-points are scaled to a grid from +[-1,1] x [-1,1] x [-1,1]

+
+
space_group_symmetrybool

Whether to consider space group symmetry

+
+
time_reversal_symmetrybool

Whether to consider time reversal symmetry

+
+
+
+
+
+
Returns:
+

kpts in absolute value (unit 1/Bohr). Gamma point is placed at the +first place in the k-points list; +instance of KPoints if k-point symmetry is considered

+
+
+

Examples:

+
>>> cell.make_kpts((4,4,4))
+
+
+
+ +
+
+get_lattice_Ls(nimgs=None, rcut=None, dimension=None, discard=True)
+

Get the (Cartesian, unitful) lattice translation vectors for nearby images. +The translation vectors can be used for the lattice summation.

+
+ +
+
+get_nimgs(precision=None)
+

Choose number of basis function images in lattice sums +to include for given precision in overlap, using

+

precision ~ int r^l e^{-alpha r^2} (r-rcut)^l e^{-alpha (r-rcut)^2} +~ (rcut^2/(2alpha))^l e^{alpha/2 rcut^2}

+

where alpha is the smallest exponent in the basis. Note +that assumes an isolated exponent in the middle of the box, so +it adds one additional lattice vector to be safe.

+
+ +
+
+get_overlap_cond(shls_slice=None)
+

Overlap magnitudes measured by -log(overlap) between two shells

+
+
Parameters:
+

mol – an instance of Mole

+
+
Returns:
+

2D mask array of shape (nbas,nbas)

+
+
+
+ +
+
+get_scaled_kpts(abs_kpts, kpts_in_ibz=True)
+

Get scaled k-points, given absolute k-points in 1/Bohr.

+
+
Parameters:
+
    +
  • abs_kpts – (nkpts, 3) ndarray of floats or KPoints object

  • +
  • kpts_in_ibz – bool +If True, return k-points in IBZ; otherwise, return k-points in BZ. +Default value is True. This has effects only if abs_kpts is a +KPoints object

  • +
+
+
Returns:
+

(nkpts, 3) ndarray of floats

+
+
Return type:
+

scaled_kpts

+
+
+
+ +
+
+get_scaled_positions()
+

Get scaled atom positions.

+
+ +
+
+get_uniform_grids(mesh=None, wrap_around=True)
+

Generate a uniform real-space grid consistent w/ samp thm; see MH (3.19).

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngx*ngy*ngz, 3) ndarray

The real-space grid point coordinates.

+
+
+

+
+
Return type:
+

coords

+
+
+
+ +
+
+property gs
+
+ +
+
+gto_norm(l, expnt)
+

Normalized factor for GTO radial part \(g=r^l e^{-\alpha r^2}\)

+
+\[\frac{1}{\sqrt{\int g^2 r^2 dr}} += \sqrt{\frac{2^{2l+3} (l+1)! (2a)^{l+1.5}}{(2l+2)!\sqrt{\pi}}}\]
+

Ref: H. B. Schlegel and M. J. Frisch, Int. J. Quant. Chem., 54(1995), 83-87.

+
+
Parameters:
+
    +
  • l (int) – angular momentum

  • +
  • expnt – exponent \(\alpha\)

  • +
+
+
Returns:
+

normalization factor

+
+
+

Examples:

+
>>> print(gto_norm(0, 1))
+2.5264751109842591
+
+
+
+ +
+
+property h
+
+ +
+
+has_ecp()
+

Whether pseudo potential is used in the system.

+
+ +
+
+has_ecp_soc()
+

Whether spin-orbit coupling is enabled in ECP.

+
+ +
+
+inertia_moment(mass=None, coords=None)
+
+ +
+
+intor(intor, comp=None, hermi=0, aosym='s1', out=None, shls_slice=None, grids=None)
+

Integral generator.

+
+
Parameters:
+

intor – str +Name of the 1e or 2e AO integrals. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp_sph has 3 components.

+
+
hermiint

Symmetry of the integrals

+
+
0 : no symmetry assumed (default)
+
1 : hermitian
+
2 : anti-hermitian
+
+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor('int1e_ipnuc_sph', comp=3) # <nabla i | V_nuc | j>
+[[[ 0.          0.        ]
+  [ 0.          0.        ]]
+ [[ 0.          0.        ]
+  [ 0.          0.        ]]
+ [[ 0.10289944  0.48176097]
+  [-0.48176097 -0.10289944]]]
+>>> mol.intor('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j -0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j -0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+intor_asymmetric(intor, comp=None, grids=None)
+

One-electron integral generator. The integrals are assumed to be anti-hermitian

+
+
Parameters:
+

intor – str +Name of the 1-electron integral. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp has 3 components.

+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor_asymmetric('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j  0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j  0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+intor_by_shell(intor, shells, comp=None, grids=None)
+

For given 2, 3 or 4 shells, interface for libcint to get 1e, 2e, +2-center-2e or 3-center-2e integrals

+
+
Parameters:
+
    +
  • intor_name – str +See also getints() for the supported intor_name

  • +
  • shls – list of int +The AO shell-ids of the integrals

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp has 3 components.

+
+
+
+
+
+
Returns:
+

ndarray of 2-dim to 5-dim, depending on the integral type (1e, +2e, 3c-2e, 2c2e) and the value of comp

+
+
+

Examples

+

The gradients of the spherical 2e integrals

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> gto.getints_by_shell('int2e_ip1_sph', (0,1,0,1), mol._atm, mol._bas, mol._env, comp=3)
+[[[[[-0.        ]]]]
+  [[[[-0.        ]]]]
+  [[[[-0.08760462]]]]]
+
+
+
+ +
+
+intor_symmetric(intor, comp=None, grids=None)
+

One-electron integral generator. The integrals are assumed to be hermitian

+
+
Parameters:
+

intor – str +Name of the 1-electron integral. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp_sph has 3 components.

+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor_symmetric('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j -0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j -0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+kernel(dump_input=True, parse_arg=True, a=None, mesh=None, ke_cutoff=None, precision=None, nimgs=None, pseudo=None, basis=None, h=None, dimension=None, rcut=None, ecp=None, low_dim_ft_type=None, space_group_symmetry=None, symmorphic=None, *args, **kwargs)
+

Setup Mole molecule and Cell and initialize some control parameters. +Whenever you change the value of the attributes of Cell, +you need call this function to refresh the internal data of Cell.

+
+
Kwargs:
+
a(3,3) ndarray

The real-space cell lattice vectors. Each row represents +a lattice vector.

+
+
mesh(3,) ndarray of ints

The number of positive G-vectors along each direction.

+
+
ke_cutofffloat

If set, defines a spherical cutoff of planewaves, with .5 * G**2 < ke_cutoff +The default value is estimated based on precision

+
+
precisionfloat

To control Ewald sums and lattice sums accuracy

+
+
nimgs(3,) ndarray of ints

Number of repeated images in lattice summation to produce +periodicity. This value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
rcutfloat

Cutoff radius (unit Bohr) in lattice summation to produce +periodicity. The value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
pseudodict or str

To define pseudopotential.

+
+
ecpdict or str

To define ECP type pseudopotential.

+
+
h(3,3) ndarray

a.T. Deprecated

+
+
dimensionint

Default is 3

+
+
low_dim_ft_typestr

For semi-empirical periodic systems, whether to calculate +integrals at the non-PBC dimension using the sampled mesh grids in +infinity vacuum (inf_vacuum) or truncated Coulomb potential +(analytic_2d_1). Unless explicitly specified, analytic_2d_1 is +used for 2D system and inf_vacuum is assumed for 1D and 0D.

+
+
space_group_symmetrybool

Whether to consider space group symmetry. Default is False.

+
+
symmorphicbool

Whether the lattice is symmorphic. If set to True, even if the +lattice is non-symmorphic, only symmorphic space group symmetry +will be considered. Default is False, meaning the space group is +determined by the lattice symmetry to be symmorphic or non-symmorphic.

+
+
+
+
+
+ +
+
+lattice_vectors()
+

Convert the primitive lattice vectors.

+

Return 3x3 array in which each row represents one direction of the +lattice vectors (unit in Bohr)

+
+ +
+
+classmethod loads(molstr)
+

Deserialize a str containing a JSON document to a Cell object.

+
+ +
+
+loads_(molstr)
+

classmethod(function) -> method

+

Convert a function to be a class method.

+

A class method receives the class as implicit first argument, +just like an instance method receives the instance. +To declare a class method, use this idiom:

+
+
+
class C:

@classmethod +def f(cls, arg1, arg2, …):

+
+

+
+
+
+
+

It can be called either on the class (e.g. C.f()) or on an instance +(e.g. C().f()). The instance is ignored except for its class. +If a class method is called for a derived class, the derived class +object is passed as the implied first argument.

+

Class methods are different than C++ or Java static methods. +If you want those, see the staticmethod builtin.

+
+ +
+
+make_atm_env(atom, ptr=0, nucmod=1, nucprop=None)
+

Convert the internal format Mole._atom to the format required +by libcint integrals

+
+ +
+
+make_bas_env(basis_add, atom_id=0, ptr=0)
+

Convert Mole.basis to the argument bas for libcint integrals

+
+ +
+
+make_ecp_env(_atm, _ecp, pre_env=[])
+

Generate the input arguments _ecpbas for ECP integrals

+
+ +
+
+make_env(atoms, basis, pre_env=[], nucmod={}, nucprop=None)
+

Generate the input arguments for libcint library based on internal +format Mole._atom and Mole._basis

+
+ +
+
+make_kpts(nks, wrap_around=False, with_gamma_point=True, scaled_center=None, space_group_symmetry=False, time_reversal_symmetry=False, **kwargs)
+

Given number of kpoints along x,y,z , generate kpoints

+
+
Parameters:
+

nks – (3,) ndarray

+
+
+
+
Kwargs:
+
wrap_aroundbool

To ensure all kpts are in first Brillouin zone.

+
+
with_gamma_pointbool

Whether to shift Monkhorst-pack grid to include gamma-point.

+
+
scaled_center(3,) array

Shift all points in the Monkhorst-pack grid to be centered on +scaled_center, given as the zeroth index of the returned kpts. +Scaled meaning that the k-points are scaled to a grid from +[-1,1] x [-1,1] x [-1,1]

+
+
space_group_symmetrybool

Whether to consider space group symmetry

+
+
time_reversal_symmetrybool

Whether to consider time reversal symmetry

+
+
+
+
+
+
Returns:
+

kpts in absolute value (unit 1/Bohr). Gamma point is placed at the +first place in the k-points list; +instance of KPoints if k-point symmetry is considered

+
+
+

Examples:

+
>>> cell.make_kpts((4,4,4))
+
+
+
+ +
+
+property mesh
+
+ +
+
+property ms
+

Spin quantum number. multiplicity = ms*2+1

+
+ +
+
+property multiplicity
+
+ +
+
+property nao
+
+ +
+
+nao_2c()
+

Total number of contracted spinor GTOs for the given Mole object

+
+ +
+
+nao_2c_range(bas_id0, bas_id1)
+

Lower and upper boundary of contracted spinor basis functions associated +with the given shell range

+
+
Parameters:
+
    +
  • molMole object

  • +
  • bas_id0 – int +start shell id, 0-based

  • +
  • bas_id1 – int +stop shell id, 0-based

  • +
+
+
Returns:
+

tupel of start basis function id and the stop function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.nao_2c_range(mol, 2, 4)
+(4, 12)
+
+
+
+ +
+
+nao_cart()
+

Total number of contracted cartesian GTOs for the given Mole object

+
+ +
+
+nao_nr_range(bas_id0, bas_id1)
+

Lower and upper boundary of contracted spherical basis functions associated +with the given shell range

+
+
Parameters:
+
    +
  • molMole object

  • +
  • bas_id0 – int +start shell id

  • +
  • bas_id1 – int +stop shell id

  • +
+
+
Returns:
+

tupel of start basis function id and the stop function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.nao_nr_range(mol, 2, 4)
+(2, 6)
+
+
+
+ +
+
+property nbas
+
+ +
+
+property nelec
+
+ +
+
+property nimgs
+
+ +
+
+npgto_nr(cart=None)
+

Total number of primitive spherical GTOs for the given Mole object

+
+ +
+
+offset_2c_by_atom()
+

2-component AO offset for each atom. Return a list, each item +of the list gives (start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+offset_ao_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+offset_nr_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+property omega
+
+ +
+
+pack()
+

Pack the input args of Cell to a dict, which can be serialized +with pickle

+
+ +
+
+pbc_eval_ao(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None, Ls=None, rcut=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+pbc_eval_gto(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None, Ls=None, rcut=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+pbc_intor(intor, comp=None, hermi=0, kpts=None, kpt=None, shls_slice=None, **kwargs)
+

One-electron integrals with PBC.

+
+\[\sum_T \int \mu(r) * [intor] * \nu (r-T) dr\]
+

See also Mole.intor

+
+ +
+
+post_kernel(envs)
+

A hook to be run after the main body of the kernel function. Internal +variables are exposed to post_kernel through the “envs” dictionary. +Return value of post_kernel function is not required.

+
+ +
+
+pre_kernel(envs)
+

A hook to be run before the main body of kernel function is executed. +Internal variables are exposed to pre_kernel through the “envs” +dictionary. Return value of pre_kernel function is not required.

+
+ +
+
+precision = 1e-08
+
+ +
+
+property rcut
+
+ +
+
+reciprocal_vectors(norm_to=6.283185307179586)
+
+\[\begin{split}\begin{align} +\mathbf{b_1} &= 2\pi \frac{\mathbf{a_2} \times \mathbf{a_3}}{\mathbf{a_1} \cdot (\mathbf{a_2} \times \mathbf{a_3})} \\ +\mathbf{b_2} &= 2\pi \frac{\mathbf{a_3} \times \mathbf{a_1}}{\mathbf{a_2} \cdot (\mathbf{a_3} \times \mathbf{a_1})} \\ +\mathbf{b_3} &= 2\pi \frac{\mathbf{a_1} \times \mathbf{a_2}}{\mathbf{a_3} \cdot (\mathbf{a_1} \times \mathbf{a_2})} +\end{align}\end{split}\]
+
+ +
+
+run(*args, **kwargs)
+

Call the kernel function of current object. args will be passed +to kernel function. kwargs will be used to update the attributes of +current object. The return value of method run is the object itself. +This allows a series of functions/methods to be executed in pipe.

+
+ +
+
+search_ao_nr(atm_id, l, m, atmshell)
+

Search the first basis function id (not the shell id) which matches +the given atom-id, angular momentum magnetic angular momentum, principal shell.

+
+
Parameters:
+
    +
  • atm_id – int +atom id, 0-based

  • +
  • l – int +angular momentum

  • +
  • m – int +magnetic angular momentum

  • +
  • atmshell – int +principal quantum number

  • +
+
+
Returns:
+

basis function id, 0-based. If not found, return None

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> mol.search_ao_nr(1, 1, -1, 3) # Cl 3px
+7
+
+
+
+ +
+
+search_ao_r(atm_id, l, j, m, atmshell)
+
+ +
+
+search_shell_id(atm_id, l)
+
+ +
+
+set(*args, **kwargs)
+

Update the attributes of the current object. The return value of +method set is the object itself. This allows a series of +functions/methods to be executed in pipe.

+
+ +
+
+set_common_orig(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_orig_(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_origin(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_origin_(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_f12_zeta(zeta)
+

Set zeta for YP exp(-zeta r12)/r12 or STG exp(-zeta r12) type integrals

+
+ +
+
+set_geom_(atoms_or_coords, unit=None, symmetry=None, inplace=True)
+

Update geometry

+
+ +
+
+set_nuc_mod(atm_id, zeta)
+

Change the nuclear charge distribution of the given atom ID. The charge +distribution is defined as: rho(r) = nuc_charge * Norm * exp(-zeta * r^2). +This function can only be called after .build() method is executed.

+

Examples:

+
>>> for ia in range(mol.natm):
+...     zeta = gto.filatov_nuc_mod(mol.atom_charge(ia))
+...     mol.set_nuc_mod(ia, zeta)
+
+
+
+ +
+
+set_nuc_mod_(atm_id, zeta)
+

Change the nuclear charge distribution of the given atom ID. The charge +distribution is defined as: rho(r) = nuc_charge * Norm * exp(-zeta * r^2). +This function can only be called after .build() method is executed.

+

Examples:

+
>>> for ia in range(mol.natm):
+...     zeta = gto.filatov_nuc_mod(mol.atom_charge(ia))
+...     mol.set_nuc_mod(ia, zeta)
+
+
+
+ +
+
+set_range_coulomb(omega)
+

Switch on range-separated Coulomb operator for all 2e integrals

+
+
Parameters:
+

omega

double

+
+
= 0 : Regular electron repulsion integral
+
> 0 : Long-range operator erf(omega r12) / r12
+
< 0 : Short-range operator erfc(omega r12) /r12
+
+

+
+
+
+ +
+
+set_range_coulomb_(omega)
+

Switch on range-separated Coulomb operator for all 2e integrals

+
+
Parameters:
+

omega

double

+
+
= 0 : Regular electron repulsion integral
+
> 0 : Long-range operator erf(omega r12) / r12
+
< 0 : Short-range operator erfc(omega r12) /r12
+
+

+
+
+
+ +
+
+set_rinv_orig(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_orig_(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_origin(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_origin_(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_zeta(zeta)
+

Assume the charge distribution on the “rinv_origin”. zeta is the parameter +to control the charge distribution: rho(r) = Norm * exp(-zeta * r^2). +Be careful when call this function. It affects the behavior of +int1e_rinv_* functions. Make sure to set it back to 0 after using it!

+
+ +
+
+set_rinv_zeta_(zeta)
+

Assume the charge distribution on the “rinv_origin”. zeta is the parameter +to control the charge distribution: rho(r) = Norm * exp(-zeta * r^2). +Be careful when call this function. It affects the behavior of +int1e_rinv_* functions. Make sure to set it back to 0 after using it!

+
+ +
+
+sph2spinor_coeff()
+

Transformation matrix that transforms real-spherical GTOs to spinor +GTOs for all basis functions

+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; F 0 0 1', basis='ccpvtz')
+>>> ca, cb = mol.sph2spinor_coeff()
+>>> s0 = mol.intor('int1e_ovlp_spinor')
+>>> s1 = ca.conj().T.dot(mol.intor('int1e_ovlp_sph')).dot(ca)
+>>> s1+= cb.conj().T.dot(mol.intor('int1e_ovlp_sph')).dot(cb)
+>>> print(abs(s1-s0).max())
+>>> 6.66133814775e-16
+
+
+
+ +
+
+sph_labels(fmt=True, base=0)
+

Labels for spherical GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-real-spherical-notation] +or formatted strings based on the argument “fmt”

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> gto.sph_labels(mol)
+[(0, 'H', '1s', ''), (1, 'Cl', '1s', ''), (1, 'Cl', '2s', ''), (1, 'Cl', '3s', ''),
+ (1, 'Cl', '2p', 'x'), (1, 'Cl', '2p', 'y'), (1, 'Cl', '2p', 'z'), (1, 'Cl', '3p', 'x'),
+ (1, 'Cl', '3p', 'y'), (1, 'Cl', '3p', 'z')]
+
+
+
+ +
+
+spheric_labels(fmt=True, base=0)
+

Labels for spherical GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-real-spherical-notation] +or formatted strings based on the argument “fmt”

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> gto.sph_labels(mol)
+[(0, 'H', '1s', ''), (1, 'Cl', '1s', ''), (1, 'Cl', '2s', ''), (1, 'Cl', '3s', ''),
+ (1, 'Cl', '2p', 'x'), (1, 'Cl', '2p', 'y'), (1, 'Cl', '2p', 'z'), (1, 'Cl', '3p', 'x'),
+ (1, 'Cl', '3p', 'y'), (1, 'Cl', '3p', 'z')]
+
+
+
+ +
+
+spinor_labels(fmt=True, base=0)
+

Labels of spinor GTO functions

+
+ +
+
+stdout = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
+
+ +
+
+symmetrize_mesh(mesh=None)
+
+ +
+
+time_reversal_map()
+

The index to map the spinor functions and its time reversal counterpart. +The returned indices have postive or negative values. For the i-th basis function, +if the returned j = idx[i] < 0, it means \(T|i\rangle = -|j\rangle\), +otherwise \(T|i\rangle = |j\rangle\)

+
+ +
+
+tmap()
+

The index to map the spinor functions and its time reversal counterpart. +The returned indices have postive or negative values. For the i-th basis function, +if the returned j = idx[i] < 0, it means \(T|i\rangle = -|j\rangle\), +otherwise \(T|i\rangle = |j\rangle\)

+
+ +
+
+to_mol()
+

Return a Mole object using the same atoms and basis functions as +the Cell object.

+
+ +
+
+to_uncontracted_cartesian_basis()
+

Decontract the basis of a Mole or a Cell. Returns a Mole (Cell) object +with uncontracted Cartesian basis and a list of coefficients that +transform the uncontracted basis to the original basis. Each element in +the coefficients list corresponds to one shell of the original Mole (Cell).

+

Examples:

+
>>> mol = gto.M(atom='Ne', basis='ccpvdz')
+>>> pmol, ctr_coeff = mol.to_uncontracted_cartesian_basis()
+>>> c = scipy.linalg.block_diag(*ctr_coeff)
+>>> s = reduce(numpy.dot, (c.T, pmol.intor('int1e_ovlp'), c))
+>>> abs(s-mol.intor('int1e_ovlp')).max()
+0.0
+
+
+
+ +
+
+tofile(filename, format=None)
+

Write molecular geometry to a file of the required format.

+
+
Supported output formats:
+
raw: Each line is <symobl> <x> <y> <z>
+
xyz: XYZ cartesian coordinates format
+
zmat: Z-matrix format
+
+
+
+
+ +
+
+tostring(format='raw')
+

Convert molecular geometry to a string of the required format.

+
+
Supported output formats:
+
raw: Each line is <symobl> <x> <y> <z>
+
xyz: XYZ cartesian coordinates format
+
zmat: Z-matrix format
+
+
+
+
+ +
+
+tot_electrons(nkpts=1)
+

Total number of electrons

+
+ +
+
+unit = 'angstrom'
+
+ +
+
+classmethod unpack(moldic)
+

Convert the packed dict to a Cell object, to generate the +input arguments for Cell object.

+
+ +
+
+unpack_(moldic)
+

classmethod(function) -> method

+

Convert a function to be a class method.

+

A class method receives the class as implicit first argument, +just like an instance method receives the instance. +To declare a class method, use this idiom:

+
+
+
class C:

@classmethod +def f(cls, arg1, arg2, …):

+
+

+
+
+
+
+

It can be called either on the class (e.g. C.f()) or on an instance +(e.g. C().f()). The instance is ignored except for its class. +If a class method is called for a derived class, the derived class +object is passed as the implied first argument.

+

Class methods are different than C++ or Java static methods. +If you want those, see the staticmethod builtin.

+
+ +
+
+update(chkfile)
+
+ +
+
+update_from_chk(chkfile)
+
+ +
+
+verbose = 3
+
+ +
+
+view(cls)
+

New view of object with the same attributes.

+
+ +
+
+property vol
+
+ +
+
+with_common_orig(coord)
+

Return a temporary mol context which has the rquired common origin. +The required common origin has no effects out of the temporary context. +See also mol.set_common_origin()

+

Examples:

+
>>> with mol.with_common_origin((1,0,0)):
+...     mol.intor('int1e_r', comp=3)
+
+
+
+ +
+
+with_common_origin(coord)
+

Return a temporary mol context which has the rquired common origin. +The required common origin has no effects out of the temporary context. +See also mol.set_common_origin()

+

Examples:

+
>>> with mol.with_common_origin((1,0,0)):
+...     mol.intor('int1e_r', comp=3)
+
+
+
+ +
+
+with_integral_screen(threshold)
+

Return a temporary mol context which has the rquired integral +screen threshold

+
+ +
+
+with_long_range_coulomb(omega)
+

Return a temporary mol context for long-range part of +range-separated Coulomb operator.

+
+ +
+
+with_range_coulomb(omega)
+

Return a temporary mol context which sets the required parameter +omega for range-separated Coulomb operator. +If omega = None, return the context for regular Coulomb integrals. +See also mol.set_range_coulomb()

+

Examples:

+
>>> with mol.with_range_coulomb(omega=1.5):
+...     mol.intor('int2e')
+
+
+
+ +
+
+with_rinv_as_nucleus(atm_id)
+

Return a temporary mol context in which the rinv operator (1/r) is +treated like the Coulomb potential of a Gaussian charge distribution +rho(r) = Norm * exp(-zeta * r^2) at the place of the input atm_id.

+

Examples:

+
>>> with mol.with_rinv_at_nucleus(3):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_at_nucleus(atm_id)
+

Return a temporary mol context in which the rinv operator (1/r) is +treated like the Coulomb potential of a Gaussian charge distribution +rho(r) = Norm * exp(-zeta * r^2) at the place of the input atm_id.

+

Examples:

+
>>> with mol.with_rinv_at_nucleus(3):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_orig(coord)
+

Return a temporary mol context which has the rquired origin of 1/r +operator. The required origin has no effects out of the temporary +context. See also mol.set_rinv_origin()

+

Examples:

+
>>> with mol.with_rinv_origin((1,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_origin(coord)
+

Return a temporary mol context which has the rquired origin of 1/r +operator. The required origin has no effects out of the temporary +context. See also mol.set_rinv_origin()

+

Examples:

+
>>> with mol.with_rinv_origin((1,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_zeta(zeta)
+

Return a temporary mol context which has the rquired Gaussian charge +distribution placed at “rinv_origin”: rho(r) = Norm * exp(-zeta * r^2). +See also mol.set_rinv_zeta()

+

Examples:

+
>>> with mol.with_rinv_zeta(zeta=1.5), mol.with_rinv_origin((1.,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_short_range_coulomb(omega)
+

Return a temporary mol context for short-range part of +range-separated Coulomb operator.

+
+ +
+ +
+
+class vayesta.lattmod.latt.Hubbard(nsite, nelectron=None, spin=0, hubbard_t=1.0, hubbard_u=0.0, v_nn=0.0, **kwargs)[source]
+

Bases: LatticeMole

+

Abstract Hubbard model class.

+
+
+aoslice_by_atom()[source]
+

One basis function per site (“atom”).

+
+ +
+
+ao2mo(mo_coeffs, compact=False)[source]
+

Integral transformation for arbitrary orbitals and arbitrary +integrals. See more detalied documentation in func:ao2mo.kernel.

+
+
Parameters:
+

mo_coeffs (an np array or a list of arrays) – A matrix of orbital +coefficients if it is a numpy ndarray, or four sets of orbital +coefficients, corresponding to the four indices of (ij|kl).

+
+
+
+
Kwargs:
+
erifile (str or h5py File or h5py Group object)The file/object

to store the transformed integrals. If not given, the return +value is an array (in memory) of the transformed integrals.

+
+
datanamestr

Note this argument is effective if erifile is given. +The dataset name in the erifile (ref the hierarchy of HDF5 format +http://www.hdfgroup.org/HDF5/doc1.6/UG/09_Groups.html). By assigning +different dataname, the existed integral file can be reused. If +the erifile contains the specified dataname, the old integrals +will be replaced by the new one under the key dataname.

+
+
intor (str)integral name Name of the 2-electron integral. Ref

to getints_by_shell() +for the complete list of available 2-electron integral names

+
+
+
+
+
+
Returns:
+

An array of transformed integrals if erifile is not given. +Otherwise, return the file/fileobject if erifile is assigned.

+
+
+

Examples:

+
>>> import pyscf
+>>> mol = pyscf.M(atom='O 0 0 0; H 0 1 0; H 0 0 1', basis='sto3g')
+>>> mo1 = numpy.random.random((mol.nao_nr(), 10))
+>>> mo2 = numpy.random.random((mol.nao_nr(), 8))
+
+
+
>>> eri1 = mol.ao2mo(mo1)
+>>> print(eri1.shape)
+(55, 55)
+
+
+
>>> eri1 = mol.ao2mo(mo1, compact=False)
+>>> print(eri1.shape)
+(100, 100)
+
+
+
>>> eri1 = mol.ao2mo(eri, (mo1,mo2,mo2,mo2))
+>>> print(eri1.shape)
+(80, 36)
+
+
+
>>> eri1 = mol.ao2mo(eri, (mo1,mo2,mo2,mo2), erifile='water.h5')
+
+
+
+ +
+
+property Gv
+
+ +
+
+add_keys(**kwargs)
+

Add or update attributes of the object and register these attributes in ._keys

+
+ +
+
+ao_labels(fmt=True)
+

Labels of AO basis functions

+
+
Kwargs:
+
fmtstr or bool

if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-AO-notation)] +or formatted strings based on the argument “fmt”

+
+
+
+ +
+
+property ao_loc
+

Offset of every shell in the spherical basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start basis function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_nr(mol)
+[0, 1, 2, 3, 6, 9, 10, 11, 12, 15, 18]
+
+
+
+ +
+
+ao_loc_2c()
+

Offset of every shell in the spinor basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start id of spinor function

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_2c(mol)
+[0, 2, 4, 6, 12, 18, 20, 22, 24, 30, 36]
+
+
+
+ +
+
+ao_loc_nr(cart=None)
+

Offset of every shell in the spherical basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start basis function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_nr(mol)
+[0, 1, 2, 3, 6, 9, 10, 11, 12, 15, 18]
+
+
+
+ +
+
+ao_rotation_matrix(orientation)
+

Matrix u to rotate AO basis to a new orientation.

+

atom_new_coords = mol.atom_coords().dot(orientation.T) +new_AO = u * mol.AO +new_orbitals_coef = u.dot(orbitals_coef)

+
+ +
+
+aoslice_2c_by_atom()
+

2-component AO offset for each atom. Return a list, each item +of the list gives (start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+aoslice_nr_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+apply(fn, *args, **kwargs)
+

Apply the fn to rest arguments: return fn(*args, **kwargs). The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+atom_charge(atm_id)
+

Nuclear effective charge of the given atom id +Note “atom_charge /= charge(atom_symbol)” when ECP is enabled. +Number of electrons screened by ECP can be obtained by charge(atom_symbol)-atom_charge

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_charge(1)
+17
+
+
+
+ +
+
+atom_charges()
+

np.asarray([mol.atom_charge(i) for i in range(mol.natm)])

+
+ +
+
+atom_coord(atm_id, unit='Bohr')
+

Coordinates (ndarray) of the given atom id

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_coord(1)
+[ 0.          0.          2.07869874]
+
+
+
+ +
+
+atom_coords(unit='Bohr')
+

np.asarray([mol.atom_coords(i) for i in range(mol.natm)])

+
+ +
+
+atom_mass_list(isotope_avg=False)
+

A list of mass for all atoms in the molecule

+
+
Kwargs:
+
isotope_avgboolean

Whether to use the isotope average mass as the atomic mass

+
+
+
+
+
+ +
+
+atom_nelec_core(atm_id)
+

Number of core electrons for pseudo potential.

+
+ +
+
+atom_nshells(atm_id)
+

Number of basis/shells of the given atom

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_nshells(1)
+5
+
+
+
+ +
+
+atom_pure_symbol(site)
+

For the given atom id, return the standard symbol (striping special characters)

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H^2 0 0 0; H 0 0 1.1')
+>>> mol.atom_symbol(0)
+H
+
+
+
+ +
+
+atom_shell_ids(atm_id)
+

A list of the shell-ids of the given atom

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.atom_shell_ids(1)
+[3, 4, 5, 6, 7]
+
+
+
+ +
+
+atom_symbol(site)
+

For the given atom id, return the input symbol (without striping special characters)

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H^2 0 0 0; H 0 0 1.1')
+>>> mol.atom_symbol(0)
+H^2
+
+
+
+ +
+
+bas_angular(bas_id)
+

The angular momentum associated with the given basis

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(7)
+2
+
+
+
+ +
+
+bas_atom(bas_id)
+

The atom (0-based id) that the given basis sits on

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(7)
+1
+
+
+
+ +
+
+bas_coord(bas_id)
+

Coordinates (ndarray) associated with the given basis id

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.bas_coord(1)
+[ 0.          0.          2.07869874]
+
+
+
+ +
+
+bas_ctr_coeff(bas_id)
+

Contract coefficients (ndarray) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.M(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_ctr_coeff(0)
+[[ 10.03400444]
+ [  4.1188704 ]
+ [  1.53971186]]
+
+
+
+ +
+
+bas_exp(bas_id)
+

exponents (ndarray) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_kappa(0)
+[ 13.01     1.962    0.4446]
+
+
+
+ +
+
+bas_exps()
+

exponents of all basis +return [mol.bas_exp(i) for i in range(self.nbas)]

+
+ +
+
+bas_kappa(bas_id)
+

Kappa (if l < j, -l-1, else l) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_kappa(3)
+0
+
+
+
+ +
+
+bas_len_cart(bas_id)
+

The number of Cartesian function associated with given basis

+
+ +
+
+bas_len_spinor(bas_id)
+

The number of spinor associated with given basis +If kappa is 0, return 4l+2

+
+ +
+
+bas_nctr(bas_id)
+

The number of contracted GTOs for the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(3)
+3
+
+
+
+ +
+
+bas_nprim(bas_id)
+

The number of primitive GTOs for the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(3)
+11
+
+
+
+ +
+
+bas_rcut(bas_id, precision=1e-08)
+

Estimate the largest distance between the function and its image to +reach the precision in overlap

+

precision ~ int g(r-0) g(r-Rcut)

+
+ +
+
+build(dump_input=True, parse_arg=True, a=None, mesh=None, ke_cutoff=None, precision=None, nimgs=None, pseudo=None, basis=None, h=None, dimension=None, rcut=None, ecp=None, low_dim_ft_type=None, space_group_symmetry=None, symmorphic=None, *args, **kwargs)
+

Setup Mole molecule and Cell and initialize some control parameters. +Whenever you change the value of the attributes of Cell, +you need call this function to refresh the internal data of Cell.

+
+
Kwargs:
+
a(3,3) ndarray

The real-space cell lattice vectors. Each row represents +a lattice vector.

+
+
mesh(3,) ndarray of ints

The number of positive G-vectors along each direction.

+
+
ke_cutofffloat

If set, defines a spherical cutoff of planewaves, with .5 * G**2 < ke_cutoff +The default value is estimated based on precision

+
+
precisionfloat

To control Ewald sums and lattice sums accuracy

+
+
nimgs(3,) ndarray of ints

Number of repeated images in lattice summation to produce +periodicity. This value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
rcutfloat

Cutoff radius (unit Bohr) in lattice summation to produce +periodicity. The value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
pseudodict or str

To define pseudopotential.

+
+
ecpdict or str

To define ECP type pseudopotential.

+
+
h(3,3) ndarray

a.T. Deprecated

+
+
dimensionint

Default is 3

+
+
low_dim_ft_typestr

For semi-empirical periodic systems, whether to calculate +integrals at the non-PBC dimension using the sampled mesh grids in +infinity vacuum (inf_vacuum) or truncated Coulomb potential +(analytic_2d_1). Unless explicitly specified, analytic_2d_1 is +used for 2D system and inf_vacuum is assumed for 1D and 0D.

+
+
space_group_symmetrybool

Whether to consider space group symmetry. Default is False.

+
+
symmorphicbool

Whether the lattice is symmorphic. If set to True, even if the +lattice is non-symmorphic, only symmorphic space group symmetry +will be considered. Default is False, meaning the space group is +determined by the lattice symmetry to be symmorphic or non-symmorphic.

+
+
+
+
+
+ +
+
+cart = False
+
+ +
+
+cart2sph_coeff(normalized='sp')
+

Transformation matrix that transforms Cartesian GTOs to spherical +GTOs for all basis functions

+
+
Kwargs:
+
normalizedstring or boolean

How the Cartesian GTOs are normalized. Except s and p functions, +Cartesian GTOs do not have the universal normalization coefficients +for the different components of the same shell. The value of this +argument can be one of ‘sp’, ‘all’, None. ‘sp’ means the Cartesian s +and p basis are normalized. ‘all’ means all Cartesian functions are +normalized. None means none of the Cartesian functions are normalized. +The default value ‘sp’ is the convention used by libcint library.

+
+
+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; F 0 0 1', basis='ccpvtz')
+>>> c = mol.cart2sph_coeff()
+>>> s0 = mol.intor('int1e_ovlp_sph')
+>>> s1 = c.T.dot(mol.intor('int1e_ovlp_cart')).dot(c)
+>>> print(abs(s1-s0).sum())
+>>> 4.58676826646e-15
+
+
+
+ +
+
+cart_labels(fmt=True, base=0)
+

Labels of Cartesian GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-xyz-notation)] +or formatted strings based on the argument “fmt”

+
+
+
+ +
+
+check_sanity()
+

Check input of class/object attributes, check whether a class method is +overwritten. It does not check the attributes which are prefixed with +“_”. The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+condense_to_shell(mat, compressor='max')
+

The given matrix is first partitioned to blocks, based on AO shell as +delimiter. Then call compressor function to abstract each block.

+
+
Parameters:
+

compressor – string or function +if compressor is a string, its value can be sum, max, min, abssum, +absmax, absmin, norm

+
+
+
+ +
+
+copy()
+

Deepcopy of the given Mole object

+
+ +
+
+decontract_basis(atoms=None, to_cart=False)
+

Decontract the basis of a Mole or a Cell. Returns a Mole (Cell) object +with the uncontracted basis environment and a list of coefficients that +transform the uncontracted basis to the original basis. Each element in +the coefficients list corresponds to one shell of the original Mole (Cell).

+
+
Kwargs:
+
atoms: list or str

Atoms on which the basis to be decontracted. By default, all basis +are decontracted

+
+
to_cart: bool

Decontract basis and transfer to Cartesian basis

+
+
+
+
+

Examples:

+
>>> mol = gto.M(atom='Ne', basis='ccpvdz')
+>>> pmol, ctr_coeff = mol.decontract_basis()
+>>> c = scipy.linalg.block_diag(*ctr_coeff)
+>>> s = reduce(numpy.dot, (c.T, pmol.intor('int1e_ovlp'), c))
+>>> abs(s-mol.intor('int1e_ovlp')).max()
+0.0
+
+
+
+ +
+
+property drop_exponent
+
+ +
+
+dump_input()
+
+ +
+
+dumps()
+

Serialize Cell object to a JSON formatted str.

+
+ +
+
+property elements
+

A list of elements in the molecule

+
+ +
+
+energy_nuc(ew_eta=None, ew_cut=None)
+

Perform real (R) and reciprocal (G) space Ewald sum for the energy.

+

Formulation of Martin, App. F2.

+
+
Returns:
+

+
float

The Ewald energy consisting of overlap, self, and G-space sum.

+
+
+

+
+
+
+

See also

+

pyscf.pbc.gto.get_ewald_params

+
+
+ +
+
+etbs(etbs)
+

Generate even tempered basis. See also expand_etb()

+
+
Parameters:
+

[ (etbs =) –

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etbs([(0, 2, 1.5, 2.), (1, 2, 1, 2.)])
+[[0, [6.0, 1]], [0, [3.0, 1]], [1, [1., 1]], [1, [2., 1]]]
+
+
+
+ +
+
+eval_ao(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+eval_gto(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+property ew_cut
+
+ +
+
+property ew_eta
+
+ +
+
+ewald(ew_eta=None, ew_cut=None)
+

Perform real (R) and reciprocal (G) space Ewald sum for the energy.

+

Formulation of Martin, App. F2.

+
+
Returns:
+

+
float

The Ewald energy consisting of overlap, self, and G-space sum.

+
+
+

+
+
+
+

See also

+

pyscf.pbc.gto.get_ewald_params

+
+
+ +
+
+exp_to_discard = None
+
+ +
+
+expand_etb(l, n, alpha, beta)
+

Generate the exponents of even tempered basis for Mole.basis. +.. math:

+
e = e^{-\alpha * \beta^{i-1}} for i = 1 .. n
+
+
+
+
Parameters:
+
    +
  • l – int +Angular momentum

  • +
  • n – int +Number of GTOs

  • +
+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etb(1, 3, 1.5, 2)
+[[1, [6.0, 1]], [1, [3.0, 1]], [1, [1.5, 1]]]
+
+
+
+ +
+
+expand_etbs(etbs)
+

Generate even tempered basis. See also expand_etb()

+
+
Parameters:
+

[ (etbs =) –

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etbs([(0, 2, 1.5, 2.), (1, 2, 1, 2.)])
+[[0, [6.0, 1]], [0, [3.0, 1]], [1, [1., 1]], [1, [2., 1]]]
+
+
+
+ +
+
+format_atom(atom, origin=0, axes=None, unit='Ang')
+

Convert the input Mole.atom to the internal data format. +Including, changing the nuclear charge to atom symbol, converting the +coordinates to AU, rotate and shift the molecule. +If the atom is a string, it takes “;” and “n” +for the mark to separate atoms; “,” and arbitrary length of blank space +to spearate the individual terms for an atom. Blank line will be ignored.

+
+
Parameters:
+

atoms – list or str +the same to Mole.atom

+
+
+
+
Kwargs:
+
originndarray

new axis origin.

+
+
axesndarray

(new_x, new_y, new_z), new coordinates

+
+
unitstr or number

If unit is one of strings (B, b, Bohr, bohr, AU, au), the coordinates +of the input atoms are the atomic unit; If unit is one of strings +(A, a, Angstrom, angstrom, Ang, ang), the coordinates are in the +unit of angstrom; If a number is given, the number are considered +as the Bohr value (in angstrom), which should be around 0.53. +Set unit=1 if wishing to preserve the unit of the coordinates.

+
+
+
+
+
+
Returns:
+

+
“atoms” in the internal format. The internal format is
+
atom = [[atom1, (x, y, z)],
+
+
[atom2, (x, y, z)],
+
+
[atomN, (x, y, z)]]
+
+
+
+
+

+
+
+

Examples:

+
>>> gto.format_atom('9,0,0,0; h@1 0 0 1', origin=(1,1,1))
+[['F', [-1.0, -1.0, -1.0]], ['H@1', [-1.0, -1.0, 0.0]]]
+>>> gto.format_atom(['9,0,0,0', (1, (0, 0, 1))], origin=(1,1,1))
+[['F', [-1.0, -1.0, -1.0]], ['H', [-1, -1, 0]]]
+
+
+
+ +
+
+format_basis(basis_tab)
+

Convert the input Cell.basis to the internal data format:

+
{ atom: (l, kappa, ((-exp, c_1, c_2, ..), nprim, nctr, ptr-exps, ptr-contraction-coeff)), ... }
+
+
+
+
Parameters:
+

basis_tab – dict +Similar to Cell.basis, it cannot be a str

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> pbc.format_basis({'H':'gth-szv'})
+{'H': [[0,
+    (8.3744350009, -0.0283380461),
+    (1.8058681460, -0.1333810052),
+    (0.4852528328, -0.3995676063),
+    (0.1658236932, -0.5531027541)]]}
+
+
+
+ +
+
+format_ecp(ecp_tab)
+

Convert the input ecp (dict) to the internal data format:

+
{ atom: (nelec,  # core electrons
+
+
+
+
+
+
((l, # l=-1 for UL, l>=0 for Ul to indicate |l><l|
+
(((exp_1, c_1), # for r^0
+

(exp_2, c_2), +…),

+
+
+
((exp_1, c_1), # for r^1

(exp_2, c_2), +…),

+
+
((exp_1, c_1), # for r^2

…))))),

+
+
+
+
+
+
+
+

…}

+
+
+ +
+
+format_pseudo(pseudo_tab)
+

Convert the input Cell.pseudo (dict) to the internal data format:

+
{ atom: ( (nelec_s, nele_p, nelec_d, ...),
+         rloc, nexp, (cexp_1, cexp_2, ..., cexp_nexp),
+         nproj_types,
+         (r1, nproj1, ( (hproj1[1,1], hproj1[1,2], ..., hproj1[1,nproj1]),
+                        (hproj1[2,1], hproj1[2,2], ..., hproj1[2,nproj1]),
+                        ...
+                        (hproj1[nproj1,1], hproj1[nproj1,2], ...        ) )),
+         (r2, nproj2, ( (hproj2[1,1], hproj2[1,2], ..., hproj2[1,nproj1]),
+         ... ) )
+         )
+ ... }
+
+
+
+
Parameters:
+

pseudo_tab – dict +Similar to Cell.pseudo (a dict), it cannot be a str

+
+
Returns:
+

Formatted pseudo

+
+
+

Examples:

+
>>> pbc.format_pseudo({'H':'gth-blyp', 'He': 'gth-pade'})
+{'H': [[1],
+    0.2, 2, [-4.19596147, 0.73049821], 0],
+ 'He': [[2],
+    0.2, 2, [-9.1120234, 1.69836797], 0]}
+
+
+
+ +
+
+from_ase(ase_atom)
+

Update cell based on given ase atom object

+

Examples:

+
>>> from ase.lattice import bulk
+>>> cell.from_ase(bulk('C', 'diamond', a=LATTICE_CONST))
+
+
+
+ +
+
+fromfile(filename, format=None)
+

Update the Mole object based on the input geometry file

+
+ +
+
+fromstring(string, format='xyz')
+

Update the Mole object based on the input geometry string

+
+ +
+
+gen_uniform_grids(mesh=None, wrap_around=True)
+

Generate a uniform real-space grid consistent w/ samp thm; see MH (3.19).

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngx*ngy*ngz, 3) ndarray

The real-space grid point coordinates.

+
+
+

+
+
Return type:
+

coords

+
+
+
+ +
+
+get_Gv(mesh=None, **kwargs)
+

Calculate three-dimensional G-vectors for the cell; see MH (3.8).

+

Indices along each direction go as [0…N-1, -N…-1] to follow FFT convention.

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngrids, 3) ndarray of floats

The array of G-vectors.

+
+
+

+
+
Return type:
+

Gv

+
+
+
+ +
+
+get_Gv_weights(mesh=None, **kwargs)
+

Calculate G-vectors and weights.

+
+
Returns:
+

+
(ngris, 3) ndarray of floats

The array of G-vectors.

+
+
+

+
+
Return type:
+

Gv

+
+
+
+ +
+
+get_SI(Gv=None)
+

Calculate the structure factor (0D, 1D, 2D, 3D) for all atoms; see MH (3.34).

+
+
Parameters:
+
    +
  • cell – instance of Cell

  • +
  • Gv – (N,3) array +G vectors

  • +
+
+
Returns:
+

+
(natm, ngrids) ndarray, dtype=np.complex128

The structure factor for each atom at each G-vector.

+
+
+

+
+
Return type:
+

SI

+
+
+
+ +
+
+get_abs_kpts(scaled_kpts)
+

Get absolute k-points (in 1/Bohr), given “scaled” k-points in +fractions of lattice vectors.

+
+
Parameters:
+

scaled_kpts – (nkpts, 3) ndarray of floats

+
+
Returns:
+

(nkpts, 3) ndarray of floats

+
+
Return type:
+

abs_kpts

+
+
+
+ +
+
+get_ao_indices(bas_list, ao_loc=None)
+

Generate (dis-continued) AO indices for basis specified in bas_list

+
+ +
+
+get_bounding_sphere(rcut)
+

Finds all the lattice points within a sphere of radius rcut.

+

Defines a parallelipiped given by -N_x <= n_x <= N_x, with x in [1,3] +See Martin p. 85

+
+
Parameters:
+

rcut – number +real space cut-off for interaction

+
+
Returns:
+

ndarray of 3 ints defining N_x

+
+
Return type:
+

cut

+
+
+
+ +
+
+get_enuc()
+
+ +
+
+get_ewald_params(precision=None, mesh=None)
+

Choose a reasonable value of Ewald ‘eta’ and ‘cut’ parameters. +eta^2 is the exponent coefficient of the model Gaussian charge for nucleus +at R: frac{eta^3}{pi^1.5} e^{-eta^2 (r-R)^2}

+

Choice is based on largest G vector and desired relative precision.

+

The relative error in the G-space sum is given by

+
+

precision ~ 4pi Gmax^2 e^{(-Gmax^2)/(4 eta^2)}

+
+

which determines eta. Then, real-space cutoff is determined by (exp. +factors only)

+
+

precision ~ erfc(eta*rcut) / rcut ~ e^{(-eta**2 rcut*2)}

+
+
+
Returns:
+

+
float

The Ewald ‘eta’ and ‘cut’ parameters.

+
+
+

+
+
Return type:
+

ew_eta, ew_cut

+
+
+
+ +
+
+get_kpts(nks, wrap_around=False, with_gamma_point=True, scaled_center=None, space_group_symmetry=False, time_reversal_symmetry=False, **kwargs)
+

Given number of kpoints along x,y,z , generate kpoints

+
+
Parameters:
+

nks – (3,) ndarray

+
+
+
+
Kwargs:
+
wrap_aroundbool

To ensure all kpts are in first Brillouin zone.

+
+
with_gamma_pointbool

Whether to shift Monkhorst-pack grid to include gamma-point.

+
+
scaled_center(3,) array

Shift all points in the Monkhorst-pack grid to be centered on +scaled_center, given as the zeroth index of the returned kpts. +Scaled meaning that the k-points are scaled to a grid from +[-1,1] x [-1,1] x [-1,1]

+
+
space_group_symmetrybool

Whether to consider space group symmetry

+
+
time_reversal_symmetrybool

Whether to consider time reversal symmetry

+
+
+
+
+
+
Returns:
+

kpts in absolute value (unit 1/Bohr). Gamma point is placed at the +first place in the k-points list; +instance of KPoints if k-point symmetry is considered

+
+
+

Examples:

+
>>> cell.make_kpts((4,4,4))
+
+
+
+ +
+
+get_lattice_Ls(nimgs=None, rcut=None, dimension=None, discard=True)
+

Get the (Cartesian, unitful) lattice translation vectors for nearby images. +The translation vectors can be used for the lattice summation.

+
+ +
+
+get_nimgs(precision=None)
+

Choose number of basis function images in lattice sums +to include for given precision in overlap, using

+

precision ~ int r^l e^{-alpha r^2} (r-rcut)^l e^{-alpha (r-rcut)^2} +~ (rcut^2/(2alpha))^l e^{alpha/2 rcut^2}

+

where alpha is the smallest exponent in the basis. Note +that assumes an isolated exponent in the middle of the box, so +it adds one additional lattice vector to be safe.

+
+ +
+
+get_overlap_cond(shls_slice=None)
+

Overlap magnitudes measured by -log(overlap) between two shells

+
+
Parameters:
+

mol – an instance of Mole

+
+
Returns:
+

2D mask array of shape (nbas,nbas)

+
+
+
+ +
+
+get_scaled_kpts(abs_kpts, kpts_in_ibz=True)
+

Get scaled k-points, given absolute k-points in 1/Bohr.

+
+
Parameters:
+
    +
  • abs_kpts – (nkpts, 3) ndarray of floats or KPoints object

  • +
  • kpts_in_ibz – bool +If True, return k-points in IBZ; otherwise, return k-points in BZ. +Default value is True. This has effects only if abs_kpts is a +KPoints object

  • +
+
+
Returns:
+

(nkpts, 3) ndarray of floats

+
+
Return type:
+

scaled_kpts

+
+
+
+ +
+
+get_scaled_positions()
+

Get scaled atom positions.

+
+ +
+
+get_uniform_grids(mesh=None, wrap_around=True)
+

Generate a uniform real-space grid consistent w/ samp thm; see MH (3.19).

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngx*ngy*ngz, 3) ndarray

The real-space grid point coordinates.

+
+
+

+
+
Return type:
+

coords

+
+
+
+ +
+
+property gs
+
+ +
+
+gto_norm(l, expnt)
+

Normalized factor for GTO radial part \(g=r^l e^{-\alpha r^2}\)

+
+\[\frac{1}{\sqrt{\int g^2 r^2 dr}} += \sqrt{\frac{2^{2l+3} (l+1)! (2a)^{l+1.5}}{(2l+2)!\sqrt{\pi}}}\]
+

Ref: H. B. Schlegel and M. J. Frisch, Int. J. Quant. Chem., 54(1995), 83-87.

+
+
Parameters:
+
    +
  • l (int) – angular momentum

  • +
  • expnt – exponent \(\alpha\)

  • +
+
+
Returns:
+

normalization factor

+
+
+

Examples:

+
>>> print(gto_norm(0, 1))
+2.5264751109842591
+
+
+
+ +
+
+property h
+
+ +
+
+has_ecp()
+

Whether pseudo potential is used in the system.

+
+ +
+
+has_ecp_soc()
+

Whether spin-orbit coupling is enabled in ECP.

+
+ +
+
+incore_anyway = False
+
+ +
+
+inertia_moment(mass=None, coords=None)
+
+ +
+
+intor(intor, comp=None, hermi=0, aosym='s1', out=None, shls_slice=None, grids=None)
+

Integral generator.

+
+
Parameters:
+

intor – str +Name of the 1e or 2e AO integrals. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp_sph has 3 components.

+
+
hermiint

Symmetry of the integrals

+
+
0 : no symmetry assumed (default)
+
1 : hermitian
+
2 : anti-hermitian
+
+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor('int1e_ipnuc_sph', comp=3) # <nabla i | V_nuc | j>
+[[[ 0.          0.        ]
+  [ 0.          0.        ]]
+ [[ 0.          0.        ]
+  [ 0.          0.        ]]
+ [[ 0.10289944  0.48176097]
+  [-0.48176097 -0.10289944]]]
+>>> mol.intor('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j -0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j -0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+intor_asymmetric(intor, comp=None, grids=None)
+

One-electron integral generator. The integrals are assumed to be anti-hermitian

+
+
Parameters:
+

intor – str +Name of the 1-electron integral. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp has 3 components.

+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor_asymmetric('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j  0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j  0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+intor_by_shell(intor, shells, comp=None, grids=None)
+

For given 2, 3 or 4 shells, interface for libcint to get 1e, 2e, +2-center-2e or 3-center-2e integrals

+
+
Parameters:
+
    +
  • intor_name – str +See also getints() for the supported intor_name

  • +
  • shls – list of int +The AO shell-ids of the integrals

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp has 3 components.

+
+
+
+
+
+
Returns:
+

ndarray of 2-dim to 5-dim, depending on the integral type (1e, +2e, 3c-2e, 2c2e) and the value of comp

+
+
+

Examples

+

The gradients of the spherical 2e integrals

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> gto.getints_by_shell('int2e_ip1_sph', (0,1,0,1), mol._atm, mol._bas, mol._env, comp=3)
+[[[[[-0.        ]]]]
+  [[[[-0.        ]]]]
+  [[[[-0.08760462]]]]]
+
+
+
+ +
+
+intor_symmetric(intor, comp=None, grids=None)
+

One-electron integral generator. The integrals are assumed to be hermitian

+
+
Parameters:
+

intor – str +Name of the 1-electron integral. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp_sph has 3 components.

+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor_symmetric('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j -0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j -0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+kernel(dump_input=True, parse_arg=True, a=None, mesh=None, ke_cutoff=None, precision=None, nimgs=None, pseudo=None, basis=None, h=None, dimension=None, rcut=None, ecp=None, low_dim_ft_type=None, space_group_symmetry=None, symmorphic=None, *args, **kwargs)
+

Setup Mole molecule and Cell and initialize some control parameters. +Whenever you change the value of the attributes of Cell, +you need call this function to refresh the internal data of Cell.

+
+
Kwargs:
+
a(3,3) ndarray

The real-space cell lattice vectors. Each row represents +a lattice vector.

+
+
mesh(3,) ndarray of ints

The number of positive G-vectors along each direction.

+
+
ke_cutofffloat

If set, defines a spherical cutoff of planewaves, with .5 * G**2 < ke_cutoff +The default value is estimated based on precision

+
+
precisionfloat

To control Ewald sums and lattice sums accuracy

+
+
nimgs(3,) ndarray of ints

Number of repeated images in lattice summation to produce +periodicity. This value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
rcutfloat

Cutoff radius (unit Bohr) in lattice summation to produce +periodicity. The value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
pseudodict or str

To define pseudopotential.

+
+
ecpdict or str

To define ECP type pseudopotential.

+
+
h(3,3) ndarray

a.T. Deprecated

+
+
dimensionint

Default is 3

+
+
low_dim_ft_typestr

For semi-empirical periodic systems, whether to calculate +integrals at the non-PBC dimension using the sampled mesh grids in +infinity vacuum (inf_vacuum) or truncated Coulomb potential +(analytic_2d_1). Unless explicitly specified, analytic_2d_1 is +used for 2D system and inf_vacuum is assumed for 1D and 0D.

+
+
space_group_symmetrybool

Whether to consider space group symmetry. Default is False.

+
+
symmorphicbool

Whether the lattice is symmorphic. If set to True, even if the +lattice is non-symmorphic, only symmorphic space group symmetry +will be considered. Default is False, meaning the space group is +determined by the lattice symmetry to be symmorphic or non-symmorphic.

+
+
+
+
+
+ +
+
+lattice_vectors()
+

Convert the primitive lattice vectors.

+

Return 3x3 array in which each row represents one direction of the +lattice vectors (unit in Bohr)

+
+ +
+
+classmethod loads(molstr)
+

Deserialize a str containing a JSON document to a Cell object.

+
+ +
+
+loads_(molstr)
+

classmethod(function) -> method

+

Convert a function to be a class method.

+

A class method receives the class as implicit first argument, +just like an instance method receives the instance. +To declare a class method, use this idiom:

+
+
+
class C:

@classmethod +def f(cls, arg1, arg2, …):

+
+

+
+
+
+
+

It can be called either on the class (e.g. C.f()) or on an instance +(e.g. C().f()). The instance is ignored except for its class. +If a class method is called for a derived class, the derived class +object is passed as the implied first argument.

+

Class methods are different than C++ or Java static methods. +If you want those, see the staticmethod builtin.

+
+ +
+
+make_atm_env(atom, ptr=0, nucmod=1, nucprop=None)
+

Convert the internal format Mole._atom to the format required +by libcint integrals

+
+ +
+
+make_bas_env(basis_add, atom_id=0, ptr=0)
+

Convert Mole.basis to the argument bas for libcint integrals

+
+ +
+
+make_ecp_env(_atm, _ecp, pre_env=[])
+

Generate the input arguments _ecpbas for ECP integrals

+
+ +
+
+make_env(atoms, basis, pre_env=[], nucmod={}, nucprop=None)
+

Generate the input arguments for libcint library based on internal +format Mole._atom and Mole._basis

+
+ +
+
+make_kpts(nks, wrap_around=False, with_gamma_point=True, scaled_center=None, space_group_symmetry=False, time_reversal_symmetry=False, **kwargs)
+

Given number of kpoints along x,y,z , generate kpoints

+
+
Parameters:
+

nks – (3,) ndarray

+
+
+
+
Kwargs:
+
wrap_aroundbool

To ensure all kpts are in first Brillouin zone.

+
+
with_gamma_pointbool

Whether to shift Monkhorst-pack grid to include gamma-point.

+
+
scaled_center(3,) array

Shift all points in the Monkhorst-pack grid to be centered on +scaled_center, given as the zeroth index of the returned kpts. +Scaled meaning that the k-points are scaled to a grid from +[-1,1] x [-1,1] x [-1,1]

+
+
space_group_symmetrybool

Whether to consider space group symmetry

+
+
time_reversal_symmetrybool

Whether to consider time reversal symmetry

+
+
+
+
+
+
Returns:
+

kpts in absolute value (unit 1/Bohr). Gamma point is placed at the +first place in the k-points list; +instance of KPoints if k-point symmetry is considered

+
+
+

Examples:

+
>>> cell.make_kpts((4,4,4))
+
+
+
+ +
+
+property mesh
+
+ +
+
+property ms
+

Spin quantum number. multiplicity = ms*2+1

+
+ +
+
+property multiplicity
+
+ +
+
+property nao
+
+ +
+
+nao_2c()
+

Total number of contracted spinor GTOs for the given Mole object

+
+ +
+
+nao_2c_range(bas_id0, bas_id1)
+

Lower and upper boundary of contracted spinor basis functions associated +with the given shell range

+
+
Parameters:
+
    +
  • molMole object

  • +
  • bas_id0 – int +start shell id, 0-based

  • +
  • bas_id1 – int +stop shell id, 0-based

  • +
+
+
Returns:
+

tupel of start basis function id and the stop function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.nao_2c_range(mol, 2, 4)
+(4, 12)
+
+
+
+ +
+
+nao_cart()
+

Total number of contracted cartesian GTOs for the given Mole object

+
+ +
+
+nao_nr()
+

Total number of contracted GTOs for the given Mole object

+
+ +
+
+nao_nr_range(bas_id0, bas_id1)
+

Lower and upper boundary of contracted spherical basis functions associated +with the given shell range

+
+
Parameters:
+
    +
  • molMole object

  • +
  • bas_id0 – int +start shell id

  • +
  • bas_id1 – int +stop shell id

  • +
+
+
Returns:
+

tupel of start basis function id and the stop function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.nao_nr_range(mol, 2, 4)
+(2, 6)
+
+
+
+ +
+
+property natm
+
+ +
+
+property nbas
+
+ +
+
+property nelec
+
+ +
+
+property nelectron
+
+ +
+
+property nimgs
+
+ +
+
+npgto_nr(cart=None)
+

Total number of primitive spherical GTOs for the given Mole object

+
+ +
+
+offset_2c_by_atom()
+

2-component AO offset for each atom. Return a list, each item +of the list gives (start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+offset_ao_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+offset_nr_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+property omega
+
+ +
+
+pack()
+

Pack the input args of Cell to a dict, which can be serialized +with pickle

+
+ +
+
+pbc_eval_ao(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None, Ls=None, rcut=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+pbc_eval_gto(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None, Ls=None, rcut=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+pbc_intor(intor, comp=None, hermi=0, kpts=None, kpt=None, shls_slice=None, **kwargs)
+

One-electron integrals with PBC.

+
+\[\sum_T \int \mu(r) * [intor] * \nu (r-T) dr\]
+

See also Mole.intor

+
+ +
+
+post_kernel(envs)
+

A hook to be run after the main body of the kernel function. Internal +variables are exposed to post_kernel through the “envs” dictionary. +Return value of post_kernel function is not required.

+
+ +
+
+pre_kernel(envs)
+

A hook to be run before the main body of kernel function is executed. +Internal variables are exposed to pre_kernel through the “envs” +dictionary. Return value of pre_kernel function is not required.

+
+ +
+
+precision = 1e-08
+
+ +
+
+property rcut
+
+ +
+
+reciprocal_vectors(norm_to=6.283185307179586)
+
+\[\begin{split}\begin{align} +\mathbf{b_1} &= 2\pi \frac{\mathbf{a_2} \times \mathbf{a_3}}{\mathbf{a_1} \cdot (\mathbf{a_2} \times \mathbf{a_3})} \\ +\mathbf{b_2} &= 2\pi \frac{\mathbf{a_3} \times \mathbf{a_1}}{\mathbf{a_2} \cdot (\mathbf{a_3} \times \mathbf{a_1})} \\ +\mathbf{b_3} &= 2\pi \frac{\mathbf{a_1} \times \mathbf{a_2}}{\mathbf{a_3} \cdot (\mathbf{a_1} \times \mathbf{a_2})} +\end{align}\end{split}\]
+
+ +
+
+run(*args, **kwargs)
+

Call the kernel function of current object. args will be passed +to kernel function. kwargs will be used to update the attributes of +current object. The return value of method run is the object itself. +This allows a series of functions/methods to be executed in pipe.

+
+ +
+
+search_ao_label()
+

Find the index of the AO basis function based on the given ao_label

+
+
Parameters:
+

ao_label – string or a list of strings +The regular expression pattern to match the orbital labels +returned by mol.ao_labels()

+
+
Returns:
+

A list of index for the AOs that matches the given ao_label RE pattern

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='ccpvtz')
+>>> mol.search_ao_label('Cl.*p')
+[19 20 21 22 23 24 25 26 27 28 29 30]
+>>> mol.search_ao_label('Cl 2p')
+[19 20 21]
+>>> mol.search_ao_label(['Cl.*d', 'Cl 4p'])
+[25 26 27 31 32 33 34 35 36 37 38 39 40]
+
+
+
+ +
+
+search_ao_nr(atm_id, l, m, atmshell)
+

Search the first basis function id (not the shell id) which matches +the given atom-id, angular momentum magnetic angular momentum, principal shell.

+
+
Parameters:
+
    +
  • atm_id – int +atom id, 0-based

  • +
  • l – int +angular momentum

  • +
  • m – int +magnetic angular momentum

  • +
  • atmshell – int +principal quantum number

  • +
+
+
Returns:
+

basis function id, 0-based. If not found, return None

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> mol.search_ao_nr(1, 1, -1, 3) # Cl 3px
+7
+
+
+
+ +
+
+search_ao_r(atm_id, l, j, m, atmshell)
+
+ +
+
+search_shell_id(atm_id, l)
+
+ +
+
+set(*args, **kwargs)
+

Update the attributes of the current object. The return value of +method set is the object itself. This allows a series of +functions/methods to be executed in pipe.

+
+ +
+
+set_common_orig(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_orig_(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_origin(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_origin_(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_f12_zeta(zeta)
+

Set zeta for YP exp(-zeta r12)/r12 or STG exp(-zeta r12) type integrals

+
+ +
+
+set_geom_(atoms_or_coords, unit=None, symmetry=None, inplace=True)
+

Update geometry

+
+ +
+
+set_nuc_mod(atm_id, zeta)
+

Change the nuclear charge distribution of the given atom ID. The charge +distribution is defined as: rho(r) = nuc_charge * Norm * exp(-zeta * r^2). +This function can only be called after .build() method is executed.

+

Examples:

+
>>> for ia in range(mol.natm):
+...     zeta = gto.filatov_nuc_mod(mol.atom_charge(ia))
+...     mol.set_nuc_mod(ia, zeta)
+
+
+
+ +
+
+set_nuc_mod_(atm_id, zeta)
+

Change the nuclear charge distribution of the given atom ID. The charge +distribution is defined as: rho(r) = nuc_charge * Norm * exp(-zeta * r^2). +This function can only be called after .build() method is executed.

+

Examples:

+
>>> for ia in range(mol.natm):
+...     zeta = gto.filatov_nuc_mod(mol.atom_charge(ia))
+...     mol.set_nuc_mod(ia, zeta)
+
+
+
+ +
+
+set_range_coulomb(omega)
+

Switch on range-separated Coulomb operator for all 2e integrals

+
+
Parameters:
+

omega

double

+
+
= 0 : Regular electron repulsion integral
+
> 0 : Long-range operator erf(omega r12) / r12
+
< 0 : Short-range operator erfc(omega r12) /r12
+
+

+
+
+
+ +
+
+set_range_coulomb_(omega)
+

Switch on range-separated Coulomb operator for all 2e integrals

+
+
Parameters:
+

omega

double

+
+
= 0 : Regular electron repulsion integral
+
> 0 : Long-range operator erf(omega r12) / r12
+
< 0 : Short-range operator erfc(omega r12) /r12
+
+

+
+
+
+ +
+
+set_rinv_orig(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_orig_(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_origin(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_origin_(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_zeta(zeta)
+

Assume the charge distribution on the “rinv_origin”. zeta is the parameter +to control the charge distribution: rho(r) = Norm * exp(-zeta * r^2). +Be careful when call this function. It affects the behavior of +int1e_rinv_* functions. Make sure to set it back to 0 after using it!

+
+ +
+
+set_rinv_zeta_(zeta)
+

Assume the charge distribution on the “rinv_origin”. zeta is the parameter +to control the charge distribution: rho(r) = Norm * exp(-zeta * r^2). +Be careful when call this function. It affects the behavior of +int1e_rinv_* functions. Make sure to set it back to 0 after using it!

+
+ +
+
+sph2spinor_coeff()
+

Transformation matrix that transforms real-spherical GTOs to spinor +GTOs for all basis functions

+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; F 0 0 1', basis='ccpvtz')
+>>> ca, cb = mol.sph2spinor_coeff()
+>>> s0 = mol.intor('int1e_ovlp_spinor')
+>>> s1 = ca.conj().T.dot(mol.intor('int1e_ovlp_sph')).dot(ca)
+>>> s1+= cb.conj().T.dot(mol.intor('int1e_ovlp_sph')).dot(cb)
+>>> print(abs(s1-s0).max())
+>>> 6.66133814775e-16
+
+
+
+ +
+
+sph_labels(fmt=True, base=0)
+

Labels for spherical GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-real-spherical-notation] +or formatted strings based on the argument “fmt”

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> gto.sph_labels(mol)
+[(0, 'H', '1s', ''), (1, 'Cl', '1s', ''), (1, 'Cl', '2s', ''), (1, 'Cl', '3s', ''),
+ (1, 'Cl', '2p', 'x'), (1, 'Cl', '2p', 'y'), (1, 'Cl', '2p', 'z'), (1, 'Cl', '3p', 'x'),
+ (1, 'Cl', '3p', 'y'), (1, 'Cl', '3p', 'z')]
+
+
+
+ +
+
+spheric_labels(fmt=True, base=0)
+

Labels for spherical GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-real-spherical-notation] +or formatted strings based on the argument “fmt”

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> gto.sph_labels(mol)
+[(0, 'H', '1s', ''), (1, 'Cl', '1s', ''), (1, 'Cl', '2s', ''), (1, 'Cl', '3s', ''),
+ (1, 'Cl', '2p', 'x'), (1, 'Cl', '2p', 'y'), (1, 'Cl', '2p', 'z'), (1, 'Cl', '3p', 'x'),
+ (1, 'Cl', '3p', 'y'), (1, 'Cl', '3p', 'z')]
+
+
+
+ +
+
+spinor_labels(fmt=True, base=0)
+

Labels of spinor GTO functions

+
+ +
+
+stdout = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
+
+ +
+
+symmetrize_mesh(mesh=None)
+
+ +
+
+time_reversal_map()
+

The index to map the spinor functions and its time reversal counterpart. +The returned indices have postive or negative values. For the i-th basis function, +if the returned j = idx[i] < 0, it means \(T|i\rangle = -|j\rangle\), +otherwise \(T|i\rangle = |j\rangle\)

+
+ +
+
+tmap()
+

The index to map the spinor functions and its time reversal counterpart. +The returned indices have postive or negative values. For the i-th basis function, +if the returned j = idx[i] < 0, it means \(T|i\rangle = -|j\rangle\), +otherwise \(T|i\rangle = |j\rangle\)

+
+ +
+
+to_mol()
+

Return a Mole object using the same atoms and basis functions as +the Cell object.

+
+ +
+
+to_uncontracted_cartesian_basis()
+

Decontract the basis of a Mole or a Cell. Returns a Mole (Cell) object +with uncontracted Cartesian basis and a list of coefficients that +transform the uncontracted basis to the original basis. Each element in +the coefficients list corresponds to one shell of the original Mole (Cell).

+

Examples:

+
>>> mol = gto.M(atom='Ne', basis='ccpvdz')
+>>> pmol, ctr_coeff = mol.to_uncontracted_cartesian_basis()
+>>> c = scipy.linalg.block_diag(*ctr_coeff)
+>>> s = reduce(numpy.dot, (c.T, pmol.intor('int1e_ovlp'), c))
+>>> abs(s-mol.intor('int1e_ovlp')).max()
+0.0
+
+
+
+ +
+
+tofile(filename, format=None)
+

Write molecular geometry to a file of the required format.

+
+
Supported output formats:
+
raw: Each line is <symobl> <x> <y> <z>
+
xyz: XYZ cartesian coordinates format
+
zmat: Z-matrix format
+
+
+
+
+ +
+
+tostring(format='raw')
+

Convert molecular geometry to a string of the required format.

+
+
Supported output formats:
+
raw: Each line is <symobl> <x> <y> <z>
+
xyz: XYZ cartesian coordinates format
+
zmat: Z-matrix format
+
+
+
+
+ +
+
+tot_electrons(nkpts=1)
+

Total number of electrons

+
+ +
+
+unit = 'angstrom'
+
+ +
+
+classmethod unpack(moldic)
+

Convert the packed dict to a Cell object, to generate the +input arguments for Cell object.

+
+ +
+
+unpack_(moldic)
+

classmethod(function) -> method

+

Convert a function to be a class method.

+

A class method receives the class as implicit first argument, +just like an instance method receives the instance. +To declare a class method, use this idiom:

+
+
+
class C:

@classmethod +def f(cls, arg1, arg2, …):

+
+

+
+
+
+
+

It can be called either on the class (e.g. C.f()) or on an instance +(e.g. C().f()). The instance is ignored except for its class. +If a class method is called for a derived class, the derived class +object is passed as the implied first argument.

+

Class methods are different than C++ or Java static methods. +If you want those, see the staticmethod builtin.

+
+ +
+
+update(chkfile)
+
+ +
+
+update_from_chk(chkfile)
+
+ +
+
+verbose = 3
+
+ +
+
+view(cls)
+

New view of object with the same attributes.

+
+ +
+
+property vol
+
+ +
+
+with_common_orig(coord)
+

Return a temporary mol context which has the rquired common origin. +The required common origin has no effects out of the temporary context. +See also mol.set_common_origin()

+

Examples:

+
>>> with mol.with_common_origin((1,0,0)):
+...     mol.intor('int1e_r', comp=3)
+
+
+
+ +
+
+with_common_origin(coord)
+

Return a temporary mol context which has the rquired common origin. +The required common origin has no effects out of the temporary context. +See also mol.set_common_origin()

+

Examples:

+
>>> with mol.with_common_origin((1,0,0)):
+...     mol.intor('int1e_r', comp=3)
+
+
+
+ +
+
+with_integral_screen(threshold)
+

Return a temporary mol context which has the rquired integral +screen threshold

+
+ +
+
+with_long_range_coulomb(omega)
+

Return a temporary mol context for long-range part of +range-separated Coulomb operator.

+
+ +
+
+with_range_coulomb(omega)
+

Return a temporary mol context which sets the required parameter +omega for range-separated Coulomb operator. +If omega = None, return the context for regular Coulomb integrals. +See also mol.set_range_coulomb()

+

Examples:

+
>>> with mol.with_range_coulomb(omega=1.5):
+...     mol.intor('int2e')
+
+
+
+ +
+
+with_rinv_as_nucleus(atm_id)
+

Return a temporary mol context in which the rinv operator (1/r) is +treated like the Coulomb potential of a Gaussian charge distribution +rho(r) = Norm * exp(-zeta * r^2) at the place of the input atm_id.

+

Examples:

+
>>> with mol.with_rinv_at_nucleus(3):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_at_nucleus(atm_id)
+

Return a temporary mol context in which the rinv operator (1/r) is +treated like the Coulomb potential of a Gaussian charge distribution +rho(r) = Norm * exp(-zeta * r^2) at the place of the input atm_id.

+

Examples:

+
>>> with mol.with_rinv_at_nucleus(3):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_orig(coord)
+

Return a temporary mol context which has the rquired origin of 1/r +operator. The required origin has no effects out of the temporary +context. See also mol.set_rinv_origin()

+

Examples:

+
>>> with mol.with_rinv_origin((1,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_origin(coord)
+

Return a temporary mol context which has the rquired origin of 1/r +operator. The required origin has no effects out of the temporary +context. See also mol.set_rinv_origin()

+

Examples:

+
>>> with mol.with_rinv_origin((1,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_zeta(zeta)
+

Return a temporary mol context which has the rquired Gaussian charge +distribution placed at “rinv_origin”: rho(r) = Norm * exp(-zeta * r^2). +See also mol.set_rinv_zeta()

+

Examples:

+
>>> with mol.with_rinv_zeta(zeta=1.5), mol.with_rinv_origin((1.,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_short_range_coulomb(omega)
+

Return a temporary mol context for short-range part of +range-separated Coulomb operator.

+
+ +
+ +
+
+class vayesta.lattmod.latt.Hubbard1D(nsite, nelectron=None, spin=0, hubbard_t=1.0, hubbard_u=0.0, v_nn=0.0, boundary='auto', **kwargs)[source]
+

Bases: Hubbard

+

Hubbard model in 1D.

+
+
+get_eri(hubbard_u=None, v_nn=None)[source]
+
+ +
+
+lattice_vectors()[source]
+

Lattice vectors of 1D Hubbard model.

+

An arbitrary value of 1 A is assumed between sites. The lattice vectors, however, are saved in units of Bohr.

+
+ +
+
+atom_coords()[source]
+

np.asarray([mol.atom_coords(i) for i in range(mol.natm)])

+
+ +
+
+get_index(i)[source]
+
+ +
+
+property Gv
+
+ +
+
+add_keys(**kwargs)
+

Add or update attributes of the object and register these attributes in ._keys

+
+ +
+
+ao2mo(mo_coeffs, compact=False)
+

Integral transformation for arbitrary orbitals and arbitrary +integrals. See more detalied documentation in func:ao2mo.kernel.

+
+
Parameters:
+

mo_coeffs (an np array or a list of arrays) – A matrix of orbital +coefficients if it is a numpy ndarray, or four sets of orbital +coefficients, corresponding to the four indices of (ij|kl).

+
+
+
+
Kwargs:
+
erifile (str or h5py File or h5py Group object)The file/object

to store the transformed integrals. If not given, the return +value is an array (in memory) of the transformed integrals.

+
+
datanamestr

Note this argument is effective if erifile is given. +The dataset name in the erifile (ref the hierarchy of HDF5 format +http://www.hdfgroup.org/HDF5/doc1.6/UG/09_Groups.html). By assigning +different dataname, the existed integral file can be reused. If +the erifile contains the specified dataname, the old integrals +will be replaced by the new one under the key dataname.

+
+
intor (str)integral name Name of the 2-electron integral. Ref

to getints_by_shell() +for the complete list of available 2-electron integral names

+
+
+
+
+
+
Returns:
+

An array of transformed integrals if erifile is not given. +Otherwise, return the file/fileobject if erifile is assigned.

+
+
+

Examples:

+
>>> import pyscf
+>>> mol = pyscf.M(atom='O 0 0 0; H 0 1 0; H 0 0 1', basis='sto3g')
+>>> mo1 = numpy.random.random((mol.nao_nr(), 10))
+>>> mo2 = numpy.random.random((mol.nao_nr(), 8))
+
+
+
>>> eri1 = mol.ao2mo(mo1)
+>>> print(eri1.shape)
+(55, 55)
+
+
+
>>> eri1 = mol.ao2mo(mo1, compact=False)
+>>> print(eri1.shape)
+(100, 100)
+
+
+
>>> eri1 = mol.ao2mo(eri, (mo1,mo2,mo2,mo2))
+>>> print(eri1.shape)
+(80, 36)
+
+
+
>>> eri1 = mol.ao2mo(eri, (mo1,mo2,mo2,mo2), erifile='water.h5')
+
+
+
+ +
+
+ao_labels(fmt=True)
+

Labels of AO basis functions

+
+
Kwargs:
+
fmtstr or bool

if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-AO-notation)] +or formatted strings based on the argument “fmt”

+
+
+
+ +
+
+property ao_loc
+

Offset of every shell in the spherical basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start basis function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_nr(mol)
+[0, 1, 2, 3, 6, 9, 10, 11, 12, 15, 18]
+
+
+
+ +
+
+ao_loc_2c()
+

Offset of every shell in the spinor basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start id of spinor function

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_2c(mol)
+[0, 2, 4, 6, 12, 18, 20, 22, 24, 30, 36]
+
+
+
+ +
+
+ao_loc_nr(cart=None)
+

Offset of every shell in the spherical basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start basis function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_nr(mol)
+[0, 1, 2, 3, 6, 9, 10, 11, 12, 15, 18]
+
+
+
+ +
+
+ao_rotation_matrix(orientation)
+

Matrix u to rotate AO basis to a new orientation.

+

atom_new_coords = mol.atom_coords().dot(orientation.T) +new_AO = u * mol.AO +new_orbitals_coef = u.dot(orbitals_coef)

+
+ +
+
+aoslice_2c_by_atom()
+

2-component AO offset for each atom. Return a list, each item +of the list gives (start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+aoslice_by_atom()
+

One basis function per site (“atom”).

+
+ +
+
+aoslice_nr_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+apply(fn, *args, **kwargs)
+

Apply the fn to rest arguments: return fn(*args, **kwargs). The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+atom_charge(atm_id)
+

Nuclear effective charge of the given atom id +Note “atom_charge /= charge(atom_symbol)” when ECP is enabled. +Number of electrons screened by ECP can be obtained by charge(atom_symbol)-atom_charge

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_charge(1)
+17
+
+
+
+ +
+
+atom_charges()
+

np.asarray([mol.atom_charge(i) for i in range(mol.natm)])

+
+ +
+
+atom_coord(atm_id, unit='Bohr')
+

Coordinates (ndarray) of the given atom id

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_coord(1)
+[ 0.          0.          2.07869874]
+
+
+
+ +
+
+atom_mass_list(isotope_avg=False)
+

A list of mass for all atoms in the molecule

+
+
Kwargs:
+
isotope_avgboolean

Whether to use the isotope average mass as the atomic mass

+
+
+
+
+
+ +
+
+atom_nelec_core(atm_id)
+

Number of core electrons for pseudo potential.

+
+ +
+
+atom_nshells(atm_id)
+

Number of basis/shells of the given atom

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_nshells(1)
+5
+
+
+
+ +
+
+atom_pure_symbol(site)
+

For the given atom id, return the standard symbol (striping special characters)

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H^2 0 0 0; H 0 0 1.1')
+>>> mol.atom_symbol(0)
+H
+
+
+
+ +
+
+atom_shell_ids(atm_id)
+

A list of the shell-ids of the given atom

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.atom_shell_ids(1)
+[3, 4, 5, 6, 7]
+
+
+
+ +
+
+atom_symbol(site)
+

For the given atom id, return the input symbol (without striping special characters)

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H^2 0 0 0; H 0 0 1.1')
+>>> mol.atom_symbol(0)
+H^2
+
+
+
+ +
+
+bas_angular(bas_id)
+

The angular momentum associated with the given basis

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(7)
+2
+
+
+
+ +
+
+bas_atom(bas_id)
+

The atom (0-based id) that the given basis sits on

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(7)
+1
+
+
+
+ +
+
+bas_coord(bas_id)
+

Coordinates (ndarray) associated with the given basis id

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.bas_coord(1)
+[ 0.          0.          2.07869874]
+
+
+
+ +
+
+bas_ctr_coeff(bas_id)
+

Contract coefficients (ndarray) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.M(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_ctr_coeff(0)
+[[ 10.03400444]
+ [  4.1188704 ]
+ [  1.53971186]]
+
+
+
+ +
+
+bas_exp(bas_id)
+

exponents (ndarray) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_kappa(0)
+[ 13.01     1.962    0.4446]
+
+
+
+ +
+
+bas_exps()
+

exponents of all basis +return [mol.bas_exp(i) for i in range(self.nbas)]

+
+ +
+
+bas_kappa(bas_id)
+

Kappa (if l < j, -l-1, else l) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_kappa(3)
+0
+
+
+
+ +
+
+bas_len_cart(bas_id)
+

The number of Cartesian function associated with given basis

+
+ +
+
+bas_len_spinor(bas_id)
+

The number of spinor associated with given basis +If kappa is 0, return 4l+2

+
+ +
+
+bas_nctr(bas_id)
+

The number of contracted GTOs for the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(3)
+3
+
+
+
+ +
+
+bas_nprim(bas_id)
+

The number of primitive GTOs for the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(3)
+11
+
+
+
+ +
+
+bas_rcut(bas_id, precision=1e-08)
+

Estimate the largest distance between the function and its image to +reach the precision in overlap

+

precision ~ int g(r-0) g(r-Rcut)

+
+ +
+
+build(dump_input=True, parse_arg=True, a=None, mesh=None, ke_cutoff=None, precision=None, nimgs=None, pseudo=None, basis=None, h=None, dimension=None, rcut=None, ecp=None, low_dim_ft_type=None, space_group_symmetry=None, symmorphic=None, *args, **kwargs)
+

Setup Mole molecule and Cell and initialize some control parameters. +Whenever you change the value of the attributes of Cell, +you need call this function to refresh the internal data of Cell.

+
+
Kwargs:
+
a(3,3) ndarray

The real-space cell lattice vectors. Each row represents +a lattice vector.

+
+
mesh(3,) ndarray of ints

The number of positive G-vectors along each direction.

+
+
ke_cutofffloat

If set, defines a spherical cutoff of planewaves, with .5 * G**2 < ke_cutoff +The default value is estimated based on precision

+
+
precisionfloat

To control Ewald sums and lattice sums accuracy

+
+
nimgs(3,) ndarray of ints

Number of repeated images in lattice summation to produce +periodicity. This value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
rcutfloat

Cutoff radius (unit Bohr) in lattice summation to produce +periodicity. The value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
pseudodict or str

To define pseudopotential.

+
+
ecpdict or str

To define ECP type pseudopotential.

+
+
h(3,3) ndarray

a.T. Deprecated

+
+
dimensionint

Default is 3

+
+
low_dim_ft_typestr

For semi-empirical periodic systems, whether to calculate +integrals at the non-PBC dimension using the sampled mesh grids in +infinity vacuum (inf_vacuum) or truncated Coulomb potential +(analytic_2d_1). Unless explicitly specified, analytic_2d_1 is +used for 2D system and inf_vacuum is assumed for 1D and 0D.

+
+
space_group_symmetrybool

Whether to consider space group symmetry. Default is False.

+
+
symmorphicbool

Whether the lattice is symmorphic. If set to True, even if the +lattice is non-symmorphic, only symmorphic space group symmetry +will be considered. Default is False, meaning the space group is +determined by the lattice symmetry to be symmorphic or non-symmorphic.

+
+
+
+
+
+ +
+
+cart = False
+
+ +
+
+cart2sph_coeff(normalized='sp')
+

Transformation matrix that transforms Cartesian GTOs to spherical +GTOs for all basis functions

+
+
Kwargs:
+
normalizedstring or boolean

How the Cartesian GTOs are normalized. Except s and p functions, +Cartesian GTOs do not have the universal normalization coefficients +for the different components of the same shell. The value of this +argument can be one of ‘sp’, ‘all’, None. ‘sp’ means the Cartesian s +and p basis are normalized. ‘all’ means all Cartesian functions are +normalized. None means none of the Cartesian functions are normalized. +The default value ‘sp’ is the convention used by libcint library.

+
+
+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; F 0 0 1', basis='ccpvtz')
+>>> c = mol.cart2sph_coeff()
+>>> s0 = mol.intor('int1e_ovlp_sph')
+>>> s1 = c.T.dot(mol.intor('int1e_ovlp_cart')).dot(c)
+>>> print(abs(s1-s0).sum())
+>>> 4.58676826646e-15
+
+
+
+ +
+
+cart_labels(fmt=True, base=0)
+

Labels of Cartesian GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-xyz-notation)] +or formatted strings based on the argument “fmt”

+
+
+
+ +
+
+check_sanity()
+

Check input of class/object attributes, check whether a class method is +overwritten. It does not check the attributes which are prefixed with +“_”. The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+condense_to_shell(mat, compressor='max')
+

The given matrix is first partitioned to blocks, based on AO shell as +delimiter. Then call compressor function to abstract each block.

+
+
Parameters:
+

compressor – string or function +if compressor is a string, its value can be sum, max, min, abssum, +absmax, absmin, norm

+
+
+
+ +
+
+copy()
+

Deepcopy of the given Mole object

+
+ +
+
+decontract_basis(atoms=None, to_cart=False)
+

Decontract the basis of a Mole or a Cell. Returns a Mole (Cell) object +with the uncontracted basis environment and a list of coefficients that +transform the uncontracted basis to the original basis. Each element in +the coefficients list corresponds to one shell of the original Mole (Cell).

+
+
Kwargs:
+
atoms: list or str

Atoms on which the basis to be decontracted. By default, all basis +are decontracted

+
+
to_cart: bool

Decontract basis and transfer to Cartesian basis

+
+
+
+
+

Examples:

+
>>> mol = gto.M(atom='Ne', basis='ccpvdz')
+>>> pmol, ctr_coeff = mol.decontract_basis()
+>>> c = scipy.linalg.block_diag(*ctr_coeff)
+>>> s = reduce(numpy.dot, (c.T, pmol.intor('int1e_ovlp'), c))
+>>> abs(s-mol.intor('int1e_ovlp')).max()
+0.0
+
+
+
+ +
+
+property drop_exponent
+
+ +
+
+dump_input()
+
+ +
+
+dumps()
+

Serialize Cell object to a JSON formatted str.

+
+ +
+
+property elements
+

A list of elements in the molecule

+
+ +
+
+energy_nuc(ew_eta=None, ew_cut=None)
+

Perform real (R) and reciprocal (G) space Ewald sum for the energy.

+

Formulation of Martin, App. F2.

+
+
Returns:
+

+
float

The Ewald energy consisting of overlap, self, and G-space sum.

+
+
+

+
+
+
+

See also

+

pyscf.pbc.gto.get_ewald_params

+
+
+ +
+
+etbs(etbs)
+

Generate even tempered basis. See also expand_etb()

+
+
Parameters:
+

[ (etbs =) –

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etbs([(0, 2, 1.5, 2.), (1, 2, 1, 2.)])
+[[0, [6.0, 1]], [0, [3.0, 1]], [1, [1., 1]], [1, [2., 1]]]
+
+
+
+ +
+
+eval_ao(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+eval_gto(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+property ew_cut
+
+ +
+
+property ew_eta
+
+ +
+
+ewald(ew_eta=None, ew_cut=None)
+

Perform real (R) and reciprocal (G) space Ewald sum for the energy.

+

Formulation of Martin, App. F2.

+
+
Returns:
+

+
float

The Ewald energy consisting of overlap, self, and G-space sum.

+
+
+

+
+
+
+

See also

+

pyscf.pbc.gto.get_ewald_params

+
+
+ +
+
+exp_to_discard = None
+
+ +
+
+expand_etb(l, n, alpha, beta)
+

Generate the exponents of even tempered basis for Mole.basis. +.. math:

+
e = e^{-\alpha * \beta^{i-1}} for i = 1 .. n
+
+
+
+
Parameters:
+
    +
  • l – int +Angular momentum

  • +
  • n – int +Number of GTOs

  • +
+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etb(1, 3, 1.5, 2)
+[[1, [6.0, 1]], [1, [3.0, 1]], [1, [1.5, 1]]]
+
+
+
+ +
+
+expand_etbs(etbs)
+

Generate even tempered basis. See also expand_etb()

+
+
Parameters:
+

[ (etbs =) –

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etbs([(0, 2, 1.5, 2.), (1, 2, 1, 2.)])
+[[0, [6.0, 1]], [0, [3.0, 1]], [1, [1., 1]], [1, [2., 1]]]
+
+
+
+ +
+
+format_atom(atom, origin=0, axes=None, unit='Ang')
+

Convert the input Mole.atom to the internal data format. +Including, changing the nuclear charge to atom symbol, converting the +coordinates to AU, rotate and shift the molecule. +If the atom is a string, it takes “;” and “n” +for the mark to separate atoms; “,” and arbitrary length of blank space +to spearate the individual terms for an atom. Blank line will be ignored.

+
+
Parameters:
+

atoms – list or str +the same to Mole.atom

+
+
+
+
Kwargs:
+
originndarray

new axis origin.

+
+
axesndarray

(new_x, new_y, new_z), new coordinates

+
+
unitstr or number

If unit is one of strings (B, b, Bohr, bohr, AU, au), the coordinates +of the input atoms are the atomic unit; If unit is one of strings +(A, a, Angstrom, angstrom, Ang, ang), the coordinates are in the +unit of angstrom; If a number is given, the number are considered +as the Bohr value (in angstrom), which should be around 0.53. +Set unit=1 if wishing to preserve the unit of the coordinates.

+
+
+
+
+
+
Returns:
+

+
“atoms” in the internal format. The internal format is
+
atom = [[atom1, (x, y, z)],
+
+
[atom2, (x, y, z)],
+
+
[atomN, (x, y, z)]]
+
+
+
+
+

+
+
+

Examples:

+
>>> gto.format_atom('9,0,0,0; h@1 0 0 1', origin=(1,1,1))
+[['F', [-1.0, -1.0, -1.0]], ['H@1', [-1.0, -1.0, 0.0]]]
+>>> gto.format_atom(['9,0,0,0', (1, (0, 0, 1))], origin=(1,1,1))
+[['F', [-1.0, -1.0, -1.0]], ['H', [-1, -1, 0]]]
+
+
+
+ +
+
+format_basis(basis_tab)
+

Convert the input Cell.basis to the internal data format:

+
{ atom: (l, kappa, ((-exp, c_1, c_2, ..), nprim, nctr, ptr-exps, ptr-contraction-coeff)), ... }
+
+
+
+
Parameters:
+

basis_tab – dict +Similar to Cell.basis, it cannot be a str

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> pbc.format_basis({'H':'gth-szv'})
+{'H': [[0,
+    (8.3744350009, -0.0283380461),
+    (1.8058681460, -0.1333810052),
+    (0.4852528328, -0.3995676063),
+    (0.1658236932, -0.5531027541)]]}
+
+
+
+ +
+
+format_ecp(ecp_tab)
+

Convert the input ecp (dict) to the internal data format:

+
{ atom: (nelec,  # core electrons
+
+
+
+
+
+
((l, # l=-1 for UL, l>=0 for Ul to indicate |l><l|
+
(((exp_1, c_1), # for r^0
+

(exp_2, c_2), +…),

+
+
+
((exp_1, c_1), # for r^1

(exp_2, c_2), +…),

+
+
((exp_1, c_1), # for r^2

…))))),

+
+
+
+
+
+
+
+

…}

+
+
+ +
+
+format_pseudo(pseudo_tab)
+

Convert the input Cell.pseudo (dict) to the internal data format:

+
{ atom: ( (nelec_s, nele_p, nelec_d, ...),
+         rloc, nexp, (cexp_1, cexp_2, ..., cexp_nexp),
+         nproj_types,
+         (r1, nproj1, ( (hproj1[1,1], hproj1[1,2], ..., hproj1[1,nproj1]),
+                        (hproj1[2,1], hproj1[2,2], ..., hproj1[2,nproj1]),
+                        ...
+                        (hproj1[nproj1,1], hproj1[nproj1,2], ...        ) )),
+         (r2, nproj2, ( (hproj2[1,1], hproj2[1,2], ..., hproj2[1,nproj1]),
+         ... ) )
+         )
+ ... }
+
+
+
+
Parameters:
+

pseudo_tab – dict +Similar to Cell.pseudo (a dict), it cannot be a str

+
+
Returns:
+

Formatted pseudo

+
+
+

Examples:

+
>>> pbc.format_pseudo({'H':'gth-blyp', 'He': 'gth-pade'})
+{'H': [[1],
+    0.2, 2, [-4.19596147, 0.73049821], 0],
+ 'He': [[2],
+    0.2, 2, [-9.1120234, 1.69836797], 0]}
+
+
+
+ +
+
+from_ase(ase_atom)
+

Update cell based on given ase atom object

+

Examples:

+
>>> from ase.lattice import bulk
+>>> cell.from_ase(bulk('C', 'diamond', a=LATTICE_CONST))
+
+
+
+ +
+
+fromfile(filename, format=None)
+

Update the Mole object based on the input geometry file

+
+ +
+
+fromstring(string, format='xyz')
+

Update the Mole object based on the input geometry string

+
+ +
+
+gen_uniform_grids(mesh=None, wrap_around=True)
+

Generate a uniform real-space grid consistent w/ samp thm; see MH (3.19).

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngx*ngy*ngz, 3) ndarray

The real-space grid point coordinates.

+
+
+

+
+
Return type:
+

coords

+
+
+
+ +
+
+get_Gv(mesh=None, **kwargs)
+

Calculate three-dimensional G-vectors for the cell; see MH (3.8).

+

Indices along each direction go as [0…N-1, -N…-1] to follow FFT convention.

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngrids, 3) ndarray of floats

The array of G-vectors.

+
+
+

+
+
Return type:
+

Gv

+
+
+
+ +
+
+get_Gv_weights(mesh=None, **kwargs)
+

Calculate G-vectors and weights.

+
+
Returns:
+

+
(ngris, 3) ndarray of floats

The array of G-vectors.

+
+
+

+
+
Return type:
+

Gv

+
+
+
+ +
+
+get_SI(Gv=None)
+

Calculate the structure factor (0D, 1D, 2D, 3D) for all atoms; see MH (3.34).

+
+
Parameters:
+
    +
  • cell – instance of Cell

  • +
  • Gv – (N,3) array +G vectors

  • +
+
+
Returns:
+

+
(natm, ngrids) ndarray, dtype=np.complex128

The structure factor for each atom at each G-vector.

+
+
+

+
+
Return type:
+

SI

+
+
+
+ +
+
+get_abs_kpts(scaled_kpts)
+

Get absolute k-points (in 1/Bohr), given “scaled” k-points in +fractions of lattice vectors.

+
+
Parameters:
+

scaled_kpts – (nkpts, 3) ndarray of floats

+
+
Returns:
+

(nkpts, 3) ndarray of floats

+
+
Return type:
+

abs_kpts

+
+
+
+ +
+
+get_ao_indices(bas_list, ao_loc=None)
+

Generate (dis-continued) AO indices for basis specified in bas_list

+
+ +
+
+get_bounding_sphere(rcut)
+

Finds all the lattice points within a sphere of radius rcut.

+

Defines a parallelipiped given by -N_x <= n_x <= N_x, with x in [1,3] +See Martin p. 85

+
+
Parameters:
+

rcut – number +real space cut-off for interaction

+
+
Returns:
+

ndarray of 3 ints defining N_x

+
+
Return type:
+

cut

+
+
+
+ +
+
+get_enuc()
+
+ +
+
+get_ewald_params(precision=None, mesh=None)
+

Choose a reasonable value of Ewald ‘eta’ and ‘cut’ parameters. +eta^2 is the exponent coefficient of the model Gaussian charge for nucleus +at R: frac{eta^3}{pi^1.5} e^{-eta^2 (r-R)^2}

+

Choice is based on largest G vector and desired relative precision.

+

The relative error in the G-space sum is given by

+
+

precision ~ 4pi Gmax^2 e^{(-Gmax^2)/(4 eta^2)}

+
+

which determines eta. Then, real-space cutoff is determined by (exp. +factors only)

+
+

precision ~ erfc(eta*rcut) / rcut ~ e^{(-eta**2 rcut*2)}

+
+
+
Returns:
+

+
float

The Ewald ‘eta’ and ‘cut’ parameters.

+
+
+

+
+
Return type:
+

ew_eta, ew_cut

+
+
+
+ +
+
+get_kpts(nks, wrap_around=False, with_gamma_point=True, scaled_center=None, space_group_symmetry=False, time_reversal_symmetry=False, **kwargs)
+

Given number of kpoints along x,y,z , generate kpoints

+
+
Parameters:
+

nks – (3,) ndarray

+
+
+
+
Kwargs:
+
wrap_aroundbool

To ensure all kpts are in first Brillouin zone.

+
+
with_gamma_pointbool

Whether to shift Monkhorst-pack grid to include gamma-point.

+
+
scaled_center(3,) array

Shift all points in the Monkhorst-pack grid to be centered on +scaled_center, given as the zeroth index of the returned kpts. +Scaled meaning that the k-points are scaled to a grid from +[-1,1] x [-1,1] x [-1,1]

+
+
space_group_symmetrybool

Whether to consider space group symmetry

+
+
time_reversal_symmetrybool

Whether to consider time reversal symmetry

+
+
+
+
+
+
Returns:
+

kpts in absolute value (unit 1/Bohr). Gamma point is placed at the +first place in the k-points list; +instance of KPoints if k-point symmetry is considered

+
+
+

Examples:

+
>>> cell.make_kpts((4,4,4))
+
+
+
+ +
+
+get_lattice_Ls(nimgs=None, rcut=None, dimension=None, discard=True)
+

Get the (Cartesian, unitful) lattice translation vectors for nearby images. +The translation vectors can be used for the lattice summation.

+
+ +
+
+get_nimgs(precision=None)
+

Choose number of basis function images in lattice sums +to include for given precision in overlap, using

+

precision ~ int r^l e^{-alpha r^2} (r-rcut)^l e^{-alpha (r-rcut)^2} +~ (rcut^2/(2alpha))^l e^{alpha/2 rcut^2}

+

where alpha is the smallest exponent in the basis. Note +that assumes an isolated exponent in the middle of the box, so +it adds one additional lattice vector to be safe.

+
+ +
+
+get_overlap_cond(shls_slice=None)
+

Overlap magnitudes measured by -log(overlap) between two shells

+
+
Parameters:
+

mol – an instance of Mole

+
+
Returns:
+

2D mask array of shape (nbas,nbas)

+
+
+
+ +
+
+get_scaled_kpts(abs_kpts, kpts_in_ibz=True)
+

Get scaled k-points, given absolute k-points in 1/Bohr.

+
+
Parameters:
+
    +
  • abs_kpts – (nkpts, 3) ndarray of floats or KPoints object

  • +
  • kpts_in_ibz – bool +If True, return k-points in IBZ; otherwise, return k-points in BZ. +Default value is True. This has effects only if abs_kpts is a +KPoints object

  • +
+
+
Returns:
+

(nkpts, 3) ndarray of floats

+
+
Return type:
+

scaled_kpts

+
+
+
+ +
+
+get_scaled_positions()
+

Get scaled atom positions.

+
+ +
+
+get_uniform_grids(mesh=None, wrap_around=True)
+

Generate a uniform real-space grid consistent w/ samp thm; see MH (3.19).

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngx*ngy*ngz, 3) ndarray

The real-space grid point coordinates.

+
+
+

+
+
Return type:
+

coords

+
+
+
+ +
+
+property gs
+
+ +
+
+gto_norm(l, expnt)
+

Normalized factor for GTO radial part \(g=r^l e^{-\alpha r^2}\)

+
+\[\frac{1}{\sqrt{\int g^2 r^2 dr}} += \sqrt{\frac{2^{2l+3} (l+1)! (2a)^{l+1.5}}{(2l+2)!\sqrt{\pi}}}\]
+

Ref: H. B. Schlegel and M. J. Frisch, Int. J. Quant. Chem., 54(1995), 83-87.

+
+
Parameters:
+
    +
  • l (int) – angular momentum

  • +
  • expnt – exponent \(\alpha\)

  • +
+
+
Returns:
+

normalization factor

+
+
+

Examples:

+
>>> print(gto_norm(0, 1))
+2.5264751109842591
+
+
+
+ +
+
+property h
+
+ +
+
+has_ecp()
+

Whether pseudo potential is used in the system.

+
+ +
+
+has_ecp_soc()
+

Whether spin-orbit coupling is enabled in ECP.

+
+ +
+
+incore_anyway = False
+
+ +
+
+inertia_moment(mass=None, coords=None)
+
+ +
+
+intor(intor, comp=None, hermi=0, aosym='s1', out=None, shls_slice=None, grids=None)
+

Integral generator.

+
+
Parameters:
+

intor – str +Name of the 1e or 2e AO integrals. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp_sph has 3 components.

+
+
hermiint

Symmetry of the integrals

+
+
0 : no symmetry assumed (default)
+
1 : hermitian
+
2 : anti-hermitian
+
+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor('int1e_ipnuc_sph', comp=3) # <nabla i | V_nuc | j>
+[[[ 0.          0.        ]
+  [ 0.          0.        ]]
+ [[ 0.          0.        ]
+  [ 0.          0.        ]]
+ [[ 0.10289944  0.48176097]
+  [-0.48176097 -0.10289944]]]
+>>> mol.intor('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j -0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j -0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+intor_asymmetric(intor, comp=None, grids=None)
+

One-electron integral generator. The integrals are assumed to be anti-hermitian

+
+
Parameters:
+

intor – str +Name of the 1-electron integral. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp has 3 components.

+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor_asymmetric('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j  0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j  0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+intor_by_shell(intor, shells, comp=None, grids=None)
+

For given 2, 3 or 4 shells, interface for libcint to get 1e, 2e, +2-center-2e or 3-center-2e integrals

+
+
Parameters:
+
    +
  • intor_name – str +See also getints() for the supported intor_name

  • +
  • shls – list of int +The AO shell-ids of the integrals

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp has 3 components.

+
+
+
+
+
+
Returns:
+

ndarray of 2-dim to 5-dim, depending on the integral type (1e, +2e, 3c-2e, 2c2e) and the value of comp

+
+
+

Examples

+

The gradients of the spherical 2e integrals

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> gto.getints_by_shell('int2e_ip1_sph', (0,1,0,1), mol._atm, mol._bas, mol._env, comp=3)
+[[[[[-0.        ]]]]
+  [[[[-0.        ]]]]
+  [[[[-0.08760462]]]]]
+
+
+
+ +
+
+intor_symmetric(intor, comp=None, grids=None)
+

One-electron integral generator. The integrals are assumed to be hermitian

+
+
Parameters:
+

intor – str +Name of the 1-electron integral. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp_sph has 3 components.

+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor_symmetric('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j -0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j -0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+kernel(dump_input=True, parse_arg=True, a=None, mesh=None, ke_cutoff=None, precision=None, nimgs=None, pseudo=None, basis=None, h=None, dimension=None, rcut=None, ecp=None, low_dim_ft_type=None, space_group_symmetry=None, symmorphic=None, *args, **kwargs)
+

Setup Mole molecule and Cell and initialize some control parameters. +Whenever you change the value of the attributes of Cell, +you need call this function to refresh the internal data of Cell.

+
+
Kwargs:
+
a(3,3) ndarray

The real-space cell lattice vectors. Each row represents +a lattice vector.

+
+
mesh(3,) ndarray of ints

The number of positive G-vectors along each direction.

+
+
ke_cutofffloat

If set, defines a spherical cutoff of planewaves, with .5 * G**2 < ke_cutoff +The default value is estimated based on precision

+
+
precisionfloat

To control Ewald sums and lattice sums accuracy

+
+
nimgs(3,) ndarray of ints

Number of repeated images in lattice summation to produce +periodicity. This value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
rcutfloat

Cutoff radius (unit Bohr) in lattice summation to produce +periodicity. The value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
pseudodict or str

To define pseudopotential.

+
+
ecpdict or str

To define ECP type pseudopotential.

+
+
h(3,3) ndarray

a.T. Deprecated

+
+
dimensionint

Default is 3

+
+
low_dim_ft_typestr

For semi-empirical periodic systems, whether to calculate +integrals at the non-PBC dimension using the sampled mesh grids in +infinity vacuum (inf_vacuum) or truncated Coulomb potential +(analytic_2d_1). Unless explicitly specified, analytic_2d_1 is +used for 2D system and inf_vacuum is assumed for 1D and 0D.

+
+
space_group_symmetrybool

Whether to consider space group symmetry. Default is False.

+
+
symmorphicbool

Whether the lattice is symmorphic. If set to True, even if the +lattice is non-symmorphic, only symmorphic space group symmetry +will be considered. Default is False, meaning the space group is +determined by the lattice symmetry to be symmorphic or non-symmorphic.

+
+
+
+
+
+ +
+
+classmethod loads(molstr)
+

Deserialize a str containing a JSON document to a Cell object.

+
+ +
+
+loads_(molstr)
+

classmethod(function) -> method

+

Convert a function to be a class method.

+

A class method receives the class as implicit first argument, +just like an instance method receives the instance. +To declare a class method, use this idiom:

+
+
+
class C:

@classmethod +def f(cls, arg1, arg2, …):

+
+

+
+
+
+
+

It can be called either on the class (e.g. C.f()) or on an instance +(e.g. C().f()). The instance is ignored except for its class. +If a class method is called for a derived class, the derived class +object is passed as the implied first argument.

+

Class methods are different than C++ or Java static methods. +If you want those, see the staticmethod builtin.

+
+ +
+
+make_atm_env(atom, ptr=0, nucmod=1, nucprop=None)
+

Convert the internal format Mole._atom to the format required +by libcint integrals

+
+ +
+
+make_bas_env(basis_add, atom_id=0, ptr=0)
+

Convert Mole.basis to the argument bas for libcint integrals

+
+ +
+
+make_ecp_env(_atm, _ecp, pre_env=[])
+

Generate the input arguments _ecpbas for ECP integrals

+
+ +
+
+make_env(atoms, basis, pre_env=[], nucmod={}, nucprop=None)
+

Generate the input arguments for libcint library based on internal +format Mole._atom and Mole._basis

+
+ +
+
+make_kpts(nks, wrap_around=False, with_gamma_point=True, scaled_center=None, space_group_symmetry=False, time_reversal_symmetry=False, **kwargs)
+

Given number of kpoints along x,y,z , generate kpoints

+
+
Parameters:
+

nks – (3,) ndarray

+
+
+
+
Kwargs:
+
wrap_aroundbool

To ensure all kpts are in first Brillouin zone.

+
+
with_gamma_pointbool

Whether to shift Monkhorst-pack grid to include gamma-point.

+
+
scaled_center(3,) array

Shift all points in the Monkhorst-pack grid to be centered on +scaled_center, given as the zeroth index of the returned kpts. +Scaled meaning that the k-points are scaled to a grid from +[-1,1] x [-1,1] x [-1,1]

+
+
space_group_symmetrybool

Whether to consider space group symmetry

+
+
time_reversal_symmetrybool

Whether to consider time reversal symmetry

+
+
+
+
+
+
Returns:
+

kpts in absolute value (unit 1/Bohr). Gamma point is placed at the +first place in the k-points list; +instance of KPoints if k-point symmetry is considered

+
+
+

Examples:

+
>>> cell.make_kpts((4,4,4))
+
+
+
+ +
+
+property mesh
+
+ +
+
+property ms
+

Spin quantum number. multiplicity = ms*2+1

+
+ +
+
+property multiplicity
+
+ +
+
+property nao
+
+ +
+
+nao_2c()
+

Total number of contracted spinor GTOs for the given Mole object

+
+ +
+
+nao_2c_range(bas_id0, bas_id1)
+

Lower and upper boundary of contracted spinor basis functions associated +with the given shell range

+
+
Parameters:
+
    +
  • molMole object

  • +
  • bas_id0 – int +start shell id, 0-based

  • +
  • bas_id1 – int +stop shell id, 0-based

  • +
+
+
Returns:
+

tupel of start basis function id and the stop function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.nao_2c_range(mol, 2, 4)
+(4, 12)
+
+
+
+ +
+
+nao_cart()
+

Total number of contracted cartesian GTOs for the given Mole object

+
+ +
+
+nao_nr()
+

Total number of contracted GTOs for the given Mole object

+
+ +
+
+nao_nr_range(bas_id0, bas_id1)
+

Lower and upper boundary of contracted spherical basis functions associated +with the given shell range

+
+
Parameters:
+
    +
  • molMole object

  • +
  • bas_id0 – int +start shell id

  • +
  • bas_id1 – int +stop shell id

  • +
+
+
Returns:
+

tupel of start basis function id and the stop function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.nao_nr_range(mol, 2, 4)
+(2, 6)
+
+
+
+ +
+
+property natm
+
+ +
+
+property nbas
+
+ +
+
+property nelec
+
+ +
+
+property nelectron
+
+ +
+
+property nimgs
+
+ +
+
+npgto_nr(cart=None)
+

Total number of primitive spherical GTOs for the given Mole object

+
+ +
+
+offset_2c_by_atom()
+

2-component AO offset for each atom. Return a list, each item +of the list gives (start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+offset_ao_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+offset_nr_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+property omega
+
+ +
+
+pack()
+

Pack the input args of Cell to a dict, which can be serialized +with pickle

+
+ +
+
+pbc_eval_ao(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None, Ls=None, rcut=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+pbc_eval_gto(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None, Ls=None, rcut=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+pbc_intor(intor, comp=None, hermi=0, kpts=None, kpt=None, shls_slice=None, **kwargs)
+

One-electron integrals with PBC.

+
+\[\sum_T \int \mu(r) * [intor] * \nu (r-T) dr\]
+

See also Mole.intor

+
+ +
+
+post_kernel(envs)
+

A hook to be run after the main body of the kernel function. Internal +variables are exposed to post_kernel through the “envs” dictionary. +Return value of post_kernel function is not required.

+
+ +
+
+pre_kernel(envs)
+

A hook to be run before the main body of kernel function is executed. +Internal variables are exposed to pre_kernel through the “envs” +dictionary. Return value of pre_kernel function is not required.

+
+ +
+
+precision = 1e-08
+
+ +
+
+property rcut
+
+ +
+
+reciprocal_vectors(norm_to=6.283185307179586)
+
+\[\begin{split}\begin{align} +\mathbf{b_1} &= 2\pi \frac{\mathbf{a_2} \times \mathbf{a_3}}{\mathbf{a_1} \cdot (\mathbf{a_2} \times \mathbf{a_3})} \\ +\mathbf{b_2} &= 2\pi \frac{\mathbf{a_3} \times \mathbf{a_1}}{\mathbf{a_2} \cdot (\mathbf{a_3} \times \mathbf{a_1})} \\ +\mathbf{b_3} &= 2\pi \frac{\mathbf{a_1} \times \mathbf{a_2}}{\mathbf{a_3} \cdot (\mathbf{a_1} \times \mathbf{a_2})} +\end{align}\end{split}\]
+
+ +
+
+run(*args, **kwargs)
+

Call the kernel function of current object. args will be passed +to kernel function. kwargs will be used to update the attributes of +current object. The return value of method run is the object itself. +This allows a series of functions/methods to be executed in pipe.

+
+ +
+
+search_ao_label()
+

Find the index of the AO basis function based on the given ao_label

+
+
Parameters:
+

ao_label – string or a list of strings +The regular expression pattern to match the orbital labels +returned by mol.ao_labels()

+
+
Returns:
+

A list of index for the AOs that matches the given ao_label RE pattern

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='ccpvtz')
+>>> mol.search_ao_label('Cl.*p')
+[19 20 21 22 23 24 25 26 27 28 29 30]
+>>> mol.search_ao_label('Cl 2p')
+[19 20 21]
+>>> mol.search_ao_label(['Cl.*d', 'Cl 4p'])
+[25 26 27 31 32 33 34 35 36 37 38 39 40]
+
+
+
+ +
+
+search_ao_nr(atm_id, l, m, atmshell)
+

Search the first basis function id (not the shell id) which matches +the given atom-id, angular momentum magnetic angular momentum, principal shell.

+
+
Parameters:
+
    +
  • atm_id – int +atom id, 0-based

  • +
  • l – int +angular momentum

  • +
  • m – int +magnetic angular momentum

  • +
  • atmshell – int +principal quantum number

  • +
+
+
Returns:
+

basis function id, 0-based. If not found, return None

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> mol.search_ao_nr(1, 1, -1, 3) # Cl 3px
+7
+
+
+
+ +
+
+search_ao_r(atm_id, l, j, m, atmshell)
+
+ +
+
+search_shell_id(atm_id, l)
+
+ +
+
+set(*args, **kwargs)
+

Update the attributes of the current object. The return value of +method set is the object itself. This allows a series of +functions/methods to be executed in pipe.

+
+ +
+
+set_common_orig(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_orig_(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_origin(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_origin_(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_f12_zeta(zeta)
+

Set zeta for YP exp(-zeta r12)/r12 or STG exp(-zeta r12) type integrals

+
+ +
+
+set_geom_(atoms_or_coords, unit=None, symmetry=None, inplace=True)
+

Update geometry

+
+ +
+
+set_nuc_mod(atm_id, zeta)
+

Change the nuclear charge distribution of the given atom ID. The charge +distribution is defined as: rho(r) = nuc_charge * Norm * exp(-zeta * r^2). +This function can only be called after .build() method is executed.

+

Examples:

+
>>> for ia in range(mol.natm):
+...     zeta = gto.filatov_nuc_mod(mol.atom_charge(ia))
+...     mol.set_nuc_mod(ia, zeta)
+
+
+
+ +
+
+set_nuc_mod_(atm_id, zeta)
+

Change the nuclear charge distribution of the given atom ID. The charge +distribution is defined as: rho(r) = nuc_charge * Norm * exp(-zeta * r^2). +This function can only be called after .build() method is executed.

+

Examples:

+
>>> for ia in range(mol.natm):
+...     zeta = gto.filatov_nuc_mod(mol.atom_charge(ia))
+...     mol.set_nuc_mod(ia, zeta)
+
+
+
+ +
+
+set_range_coulomb(omega)
+

Switch on range-separated Coulomb operator for all 2e integrals

+
+
Parameters:
+

omega

double

+
+
= 0 : Regular electron repulsion integral
+
> 0 : Long-range operator erf(omega r12) / r12
+
< 0 : Short-range operator erfc(omega r12) /r12
+
+

+
+
+
+ +
+
+set_range_coulomb_(omega)
+

Switch on range-separated Coulomb operator for all 2e integrals

+
+
Parameters:
+

omega

double

+
+
= 0 : Regular electron repulsion integral
+
> 0 : Long-range operator erf(omega r12) / r12
+
< 0 : Short-range operator erfc(omega r12) /r12
+
+

+
+
+
+ +
+
+set_rinv_orig(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_orig_(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_origin(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_origin_(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_zeta(zeta)
+

Assume the charge distribution on the “rinv_origin”. zeta is the parameter +to control the charge distribution: rho(r) = Norm * exp(-zeta * r^2). +Be careful when call this function. It affects the behavior of +int1e_rinv_* functions. Make sure to set it back to 0 after using it!

+
+ +
+
+set_rinv_zeta_(zeta)
+

Assume the charge distribution on the “rinv_origin”. zeta is the parameter +to control the charge distribution: rho(r) = Norm * exp(-zeta * r^2). +Be careful when call this function. It affects the behavior of +int1e_rinv_* functions. Make sure to set it back to 0 after using it!

+
+ +
+
+sph2spinor_coeff()
+

Transformation matrix that transforms real-spherical GTOs to spinor +GTOs for all basis functions

+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; F 0 0 1', basis='ccpvtz')
+>>> ca, cb = mol.sph2spinor_coeff()
+>>> s0 = mol.intor('int1e_ovlp_spinor')
+>>> s1 = ca.conj().T.dot(mol.intor('int1e_ovlp_sph')).dot(ca)
+>>> s1+= cb.conj().T.dot(mol.intor('int1e_ovlp_sph')).dot(cb)
+>>> print(abs(s1-s0).max())
+>>> 6.66133814775e-16
+
+
+
+ +
+
+sph_labels(fmt=True, base=0)
+

Labels for spherical GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-real-spherical-notation] +or formatted strings based on the argument “fmt”

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> gto.sph_labels(mol)
+[(0, 'H', '1s', ''), (1, 'Cl', '1s', ''), (1, 'Cl', '2s', ''), (1, 'Cl', '3s', ''),
+ (1, 'Cl', '2p', 'x'), (1, 'Cl', '2p', 'y'), (1, 'Cl', '2p', 'z'), (1, 'Cl', '3p', 'x'),
+ (1, 'Cl', '3p', 'y'), (1, 'Cl', '3p', 'z')]
+
+
+
+ +
+
+spheric_labels(fmt=True, base=0)
+

Labels for spherical GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-real-spherical-notation] +or formatted strings based on the argument “fmt”

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> gto.sph_labels(mol)
+[(0, 'H', '1s', ''), (1, 'Cl', '1s', ''), (1, 'Cl', '2s', ''), (1, 'Cl', '3s', ''),
+ (1, 'Cl', '2p', 'x'), (1, 'Cl', '2p', 'y'), (1, 'Cl', '2p', 'z'), (1, 'Cl', '3p', 'x'),
+ (1, 'Cl', '3p', 'y'), (1, 'Cl', '3p', 'z')]
+
+
+
+ +
+
+spinor_labels(fmt=True, base=0)
+

Labels of spinor GTO functions

+
+ +
+
+stdout = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
+
+ +
+
+symmetrize_mesh(mesh=None)
+
+ +
+
+time_reversal_map()
+

The index to map the spinor functions and its time reversal counterpart. +The returned indices have postive or negative values. For the i-th basis function, +if the returned j = idx[i] < 0, it means \(T|i\rangle = -|j\rangle\), +otherwise \(T|i\rangle = |j\rangle\)

+
+ +
+
+tmap()
+

The index to map the spinor functions and its time reversal counterpart. +The returned indices have postive or negative values. For the i-th basis function, +if the returned j = idx[i] < 0, it means \(T|i\rangle = -|j\rangle\), +otherwise \(T|i\rangle = |j\rangle\)

+
+ +
+
+to_mol()
+

Return a Mole object using the same atoms and basis functions as +the Cell object.

+
+ +
+
+to_uncontracted_cartesian_basis()
+

Decontract the basis of a Mole or a Cell. Returns a Mole (Cell) object +with uncontracted Cartesian basis and a list of coefficients that +transform the uncontracted basis to the original basis. Each element in +the coefficients list corresponds to one shell of the original Mole (Cell).

+

Examples:

+
>>> mol = gto.M(atom='Ne', basis='ccpvdz')
+>>> pmol, ctr_coeff = mol.to_uncontracted_cartesian_basis()
+>>> c = scipy.linalg.block_diag(*ctr_coeff)
+>>> s = reduce(numpy.dot, (c.T, pmol.intor('int1e_ovlp'), c))
+>>> abs(s-mol.intor('int1e_ovlp')).max()
+0.0
+
+
+
+ +
+
+tofile(filename, format=None)
+

Write molecular geometry to a file of the required format.

+
+
Supported output formats:
+
raw: Each line is <symobl> <x> <y> <z>
+
xyz: XYZ cartesian coordinates format
+
zmat: Z-matrix format
+
+
+
+
+ +
+
+tostring(format='raw')
+

Convert molecular geometry to a string of the required format.

+
+
Supported output formats:
+
raw: Each line is <symobl> <x> <y> <z>
+
xyz: XYZ cartesian coordinates format
+
zmat: Z-matrix format
+
+
+
+
+ +
+
+tot_electrons(nkpts=1)
+

Total number of electrons

+
+ +
+
+unit = 'angstrom'
+
+ +
+
+classmethod unpack(moldic)
+

Convert the packed dict to a Cell object, to generate the +input arguments for Cell object.

+
+ +
+
+unpack_(moldic)
+

classmethod(function) -> method

+

Convert a function to be a class method.

+

A class method receives the class as implicit first argument, +just like an instance method receives the instance. +To declare a class method, use this idiom:

+
+
+
class C:

@classmethod +def f(cls, arg1, arg2, …):

+
+

+
+
+
+
+

It can be called either on the class (e.g. C.f()) or on an instance +(e.g. C().f()). The instance is ignored except for its class. +If a class method is called for a derived class, the derived class +object is passed as the implied first argument.

+

Class methods are different than C++ or Java static methods. +If you want those, see the staticmethod builtin.

+
+ +
+
+update(chkfile)
+
+ +
+
+update_from_chk(chkfile)
+
+ +
+
+verbose = 3
+
+ +
+
+view(cls)
+

New view of object with the same attributes.

+
+ +
+
+property vol
+
+ +
+
+with_common_orig(coord)
+

Return a temporary mol context which has the rquired common origin. +The required common origin has no effects out of the temporary context. +See also mol.set_common_origin()

+

Examples:

+
>>> with mol.with_common_origin((1,0,0)):
+...     mol.intor('int1e_r', comp=3)
+
+
+
+ +
+
+with_common_origin(coord)
+

Return a temporary mol context which has the rquired common origin. +The required common origin has no effects out of the temporary context. +See also mol.set_common_origin()

+

Examples:

+
>>> with mol.with_common_origin((1,0,0)):
+...     mol.intor('int1e_r', comp=3)
+
+
+
+ +
+
+with_integral_screen(threshold)
+

Return a temporary mol context which has the rquired integral +screen threshold

+
+ +
+
+with_long_range_coulomb(omega)
+

Return a temporary mol context for long-range part of +range-separated Coulomb operator.

+
+ +
+
+with_range_coulomb(omega)
+

Return a temporary mol context which sets the required parameter +omega for range-separated Coulomb operator. +If omega = None, return the context for regular Coulomb integrals. +See also mol.set_range_coulomb()

+

Examples:

+
>>> with mol.with_range_coulomb(omega=1.5):
+...     mol.intor('int2e')
+
+
+
+ +
+
+with_rinv_as_nucleus(atm_id)
+

Return a temporary mol context in which the rinv operator (1/r) is +treated like the Coulomb potential of a Gaussian charge distribution +rho(r) = Norm * exp(-zeta * r^2) at the place of the input atm_id.

+

Examples:

+
>>> with mol.with_rinv_at_nucleus(3):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_at_nucleus(atm_id)
+

Return a temporary mol context in which the rinv operator (1/r) is +treated like the Coulomb potential of a Gaussian charge distribution +rho(r) = Norm * exp(-zeta * r^2) at the place of the input atm_id.

+

Examples:

+
>>> with mol.with_rinv_at_nucleus(3):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_orig(coord)
+

Return a temporary mol context which has the rquired origin of 1/r +operator. The required origin has no effects out of the temporary +context. See also mol.set_rinv_origin()

+

Examples:

+
>>> with mol.with_rinv_origin((1,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_origin(coord)
+

Return a temporary mol context which has the rquired origin of 1/r +operator. The required origin has no effects out of the temporary +context. See also mol.set_rinv_origin()

+

Examples:

+
>>> with mol.with_rinv_origin((1,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_zeta(zeta)
+

Return a temporary mol context which has the rquired Gaussian charge +distribution placed at “rinv_origin”: rho(r) = Norm * exp(-zeta * r^2). +See also mol.set_rinv_zeta()

+

Examples:

+
>>> with mol.with_rinv_zeta(zeta=1.5), mol.with_rinv_origin((1.,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_short_range_coulomb(omega)
+

Return a temporary mol context for short-range part of +range-separated Coulomb operator.

+
+ +
+ +
+
+class vayesta.lattmod.latt.Hubbard2D(nsites, nelectron=None, spin=0, hubbard_t=1.0, hubbard_u=0.0, boundary='auto', tiles=(1, 1), order=None, **kwargs)[source]
+

Bases: Hubbard

+
+
+get_index(i, j)[source]
+
+ +
+
+get_eri(hubbard_u=None, v_nn=None)[source]
+
+ +
+
+lattice_vectors()[source]
+

Lattice vectors of 1D Hubbard model.

+

An arbitrary value of 1 A is assumed between sites. The lattice vectors, however, are saved in units of Bohr.

+
+ +
+
+atom_coords()[source]
+

Sites are ordered by default as:

+

6 7 8 +3 4 5 +0 1 2

+
+ +
+
+static get_tiles_order(nsites, tiles)[source]
+
+ +
+
+property Gv
+
+ +
+
+add_keys(**kwargs)
+

Add or update attributes of the object and register these attributes in ._keys

+
+ +
+
+ao2mo(mo_coeffs, compact=False)
+

Integral transformation for arbitrary orbitals and arbitrary +integrals. See more detalied documentation in func:ao2mo.kernel.

+
+
Parameters:
+

mo_coeffs (an np array or a list of arrays) – A matrix of orbital +coefficients if it is a numpy ndarray, or four sets of orbital +coefficients, corresponding to the four indices of (ij|kl).

+
+
+
+
Kwargs:
+
erifile (str or h5py File or h5py Group object)The file/object

to store the transformed integrals. If not given, the return +value is an array (in memory) of the transformed integrals.

+
+
datanamestr

Note this argument is effective if erifile is given. +The dataset name in the erifile (ref the hierarchy of HDF5 format +http://www.hdfgroup.org/HDF5/doc1.6/UG/09_Groups.html). By assigning +different dataname, the existed integral file can be reused. If +the erifile contains the specified dataname, the old integrals +will be replaced by the new one under the key dataname.

+
+
intor (str)integral name Name of the 2-electron integral. Ref

to getints_by_shell() +for the complete list of available 2-electron integral names

+
+
+
+
+
+
Returns:
+

An array of transformed integrals if erifile is not given. +Otherwise, return the file/fileobject if erifile is assigned.

+
+
+

Examples:

+
>>> import pyscf
+>>> mol = pyscf.M(atom='O 0 0 0; H 0 1 0; H 0 0 1', basis='sto3g')
+>>> mo1 = numpy.random.random((mol.nao_nr(), 10))
+>>> mo2 = numpy.random.random((mol.nao_nr(), 8))
+
+
+
>>> eri1 = mol.ao2mo(mo1)
+>>> print(eri1.shape)
+(55, 55)
+
+
+
>>> eri1 = mol.ao2mo(mo1, compact=False)
+>>> print(eri1.shape)
+(100, 100)
+
+
+
>>> eri1 = mol.ao2mo(eri, (mo1,mo2,mo2,mo2))
+>>> print(eri1.shape)
+(80, 36)
+
+
+
>>> eri1 = mol.ao2mo(eri, (mo1,mo2,mo2,mo2), erifile='water.h5')
+
+
+
+ +
+
+ao_labels(fmt=True)
+

Labels of AO basis functions

+
+
Kwargs:
+
fmtstr or bool

if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-AO-notation)] +or formatted strings based on the argument “fmt”

+
+
+
+ +
+
+property ao_loc
+

Offset of every shell in the spherical basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start basis function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_nr(mol)
+[0, 1, 2, 3, 6, 9, 10, 11, 12, 15, 18]
+
+
+
+ +
+
+ao_loc_2c()
+

Offset of every shell in the spinor basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start id of spinor function

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_2c(mol)
+[0, 2, 4, 6, 12, 18, 20, 22, 24, 30, 36]
+
+
+
+ +
+
+ao_loc_nr(cart=None)
+

Offset of every shell in the spherical basis function spectrum

+
+
Returns:
+

list, each entry is the corresponding start basis function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.ao_loc_nr(mol)
+[0, 1, 2, 3, 6, 9, 10, 11, 12, 15, 18]
+
+
+
+ +
+
+ao_rotation_matrix(orientation)
+

Matrix u to rotate AO basis to a new orientation.

+

atom_new_coords = mol.atom_coords().dot(orientation.T) +new_AO = u * mol.AO +new_orbitals_coef = u.dot(orbitals_coef)

+
+ +
+
+aoslice_2c_by_atom()
+

2-component AO offset for each atom. Return a list, each item +of the list gives (start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+aoslice_by_atom()
+

One basis function per site (“atom”).

+
+ +
+
+aoslice_nr_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+apply(fn, *args, **kwargs)
+

Apply the fn to rest arguments: return fn(*args, **kwargs). The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+atom_charge(atm_id)
+

Nuclear effective charge of the given atom id +Note “atom_charge /= charge(atom_symbol)” when ECP is enabled. +Number of electrons screened by ECP can be obtained by charge(atom_symbol)-atom_charge

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_charge(1)
+17
+
+
+
+ +
+
+atom_charges()
+

np.asarray([mol.atom_charge(i) for i in range(mol.natm)])

+
+ +
+
+atom_coord(atm_id, unit='Bohr')
+

Coordinates (ndarray) of the given atom id

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_coord(1)
+[ 0.          0.          2.07869874]
+
+
+
+ +
+
+atom_mass_list(isotope_avg=False)
+

A list of mass for all atoms in the molecule

+
+
Kwargs:
+
isotope_avgboolean

Whether to use the isotope average mass as the atomic mass

+
+
+
+
+
+ +
+
+atom_nelec_core(atm_id)
+

Number of core electrons for pseudo potential.

+
+ +
+
+atom_nshells(atm_id)
+

Number of basis/shells of the given atom

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.atom_nshells(1)
+5
+
+
+
+ +
+
+atom_pure_symbol(site)
+

For the given atom id, return the standard symbol (striping special characters)

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H^2 0 0 0; H 0 0 1.1')
+>>> mol.atom_symbol(0)
+H
+
+
+
+ +
+
+atom_shell_ids(atm_id)
+

A list of the shell-ids of the given atom

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.atom_shell_ids(1)
+[3, 4, 5, 6, 7]
+
+
+
+ +
+
+atom_symbol(site)
+

For the given atom id, return the input symbol (without striping special characters)

+
+
Parameters:
+

atm_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H^2 0 0 0; H 0 0 1.1')
+>>> mol.atom_symbol(0)
+H^2
+
+
+
+ +
+
+bas_angular(bas_id)
+

The angular momentum associated with the given basis

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(7)
+2
+
+
+
+ +
+
+bas_atom(bas_id)
+

The atom (0-based id) that the given basis sits on

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(7)
+1
+
+
+
+ +
+
+bas_coord(bas_id)
+

Coordinates (ndarray) associated with the given basis id

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1')
+>>> mol.bas_coord(1)
+[ 0.          0.          2.07869874]
+
+
+
+ +
+
+bas_ctr_coeff(bas_id)
+

Contract coefficients (ndarray) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.M(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_ctr_coeff(0)
+[[ 10.03400444]
+ [  4.1188704 ]
+ [  1.53971186]]
+
+
+
+ +
+
+bas_exp(bas_id)
+

exponents (ndarray) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_kappa(0)
+[ 13.01     1.962    0.4446]
+
+
+
+ +
+
+bas_exps()
+

exponents of all basis +return [mol.bas_exp(i) for i in range(self.nbas)]

+
+ +
+
+bas_kappa(bas_id)
+

Kappa (if l < j, -l-1, else l) of the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_kappa(3)
+0
+
+
+
+ +
+
+bas_len_cart(bas_id)
+

The number of Cartesian function associated with given basis

+
+ +
+
+bas_len_spinor(bas_id)
+

The number of spinor associated with given basis +If kappa is 0, return 4l+2

+
+ +
+
+bas_nctr(bas_id)
+

The number of contracted GTOs for the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(3)
+3
+
+
+
+ +
+
+bas_nprim(bas_id)
+

The number of primitive GTOs for the given shell

+
+
Parameters:
+

bas_id – int +0-based

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; Cl 0 0 1.1', basis='cc-pvdz')
+>>> mol.bas_atom(3)
+11
+
+
+
+ +
+
+bas_rcut(bas_id, precision=1e-08)
+

Estimate the largest distance between the function and its image to +reach the precision in overlap

+

precision ~ int g(r-0) g(r-Rcut)

+
+ +
+
+build(dump_input=True, parse_arg=True, a=None, mesh=None, ke_cutoff=None, precision=None, nimgs=None, pseudo=None, basis=None, h=None, dimension=None, rcut=None, ecp=None, low_dim_ft_type=None, space_group_symmetry=None, symmorphic=None, *args, **kwargs)
+

Setup Mole molecule and Cell and initialize some control parameters. +Whenever you change the value of the attributes of Cell, +you need call this function to refresh the internal data of Cell.

+
+
Kwargs:
+
a(3,3) ndarray

The real-space cell lattice vectors. Each row represents +a lattice vector.

+
+
mesh(3,) ndarray of ints

The number of positive G-vectors along each direction.

+
+
ke_cutofffloat

If set, defines a spherical cutoff of planewaves, with .5 * G**2 < ke_cutoff +The default value is estimated based on precision

+
+
precisionfloat

To control Ewald sums and lattice sums accuracy

+
+
nimgs(3,) ndarray of ints

Number of repeated images in lattice summation to produce +periodicity. This value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
rcutfloat

Cutoff radius (unit Bohr) in lattice summation to produce +periodicity. The value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
pseudodict or str

To define pseudopotential.

+
+
ecpdict or str

To define ECP type pseudopotential.

+
+
h(3,3) ndarray

a.T. Deprecated

+
+
dimensionint

Default is 3

+
+
low_dim_ft_typestr

For semi-empirical periodic systems, whether to calculate +integrals at the non-PBC dimension using the sampled mesh grids in +infinity vacuum (inf_vacuum) or truncated Coulomb potential +(analytic_2d_1). Unless explicitly specified, analytic_2d_1 is +used for 2D system and inf_vacuum is assumed for 1D and 0D.

+
+
space_group_symmetrybool

Whether to consider space group symmetry. Default is False.

+
+
symmorphicbool

Whether the lattice is symmorphic. If set to True, even if the +lattice is non-symmorphic, only symmorphic space group symmetry +will be considered. Default is False, meaning the space group is +determined by the lattice symmetry to be symmorphic or non-symmorphic.

+
+
+
+
+
+ +
+
+cart = False
+
+ +
+
+cart2sph_coeff(normalized='sp')
+

Transformation matrix that transforms Cartesian GTOs to spherical +GTOs for all basis functions

+
+
Kwargs:
+
normalizedstring or boolean

How the Cartesian GTOs are normalized. Except s and p functions, +Cartesian GTOs do not have the universal normalization coefficients +for the different components of the same shell. The value of this +argument can be one of ‘sp’, ‘all’, None. ‘sp’ means the Cartesian s +and p basis are normalized. ‘all’ means all Cartesian functions are +normalized. None means none of the Cartesian functions are normalized. +The default value ‘sp’ is the convention used by libcint library.

+
+
+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; F 0 0 1', basis='ccpvtz')
+>>> c = mol.cart2sph_coeff()
+>>> s0 = mol.intor('int1e_ovlp_sph')
+>>> s1 = c.T.dot(mol.intor('int1e_ovlp_cart')).dot(c)
+>>> print(abs(s1-s0).sum())
+>>> 4.58676826646e-15
+
+
+
+ +
+
+cart_labels(fmt=True, base=0)
+

Labels of Cartesian GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-xyz-notation)] +or formatted strings based on the argument “fmt”

+
+
+
+ +
+
+check_sanity()
+

Check input of class/object attributes, check whether a class method is +overwritten. It does not check the attributes which are prefixed with +“_”. The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+condense_to_shell(mat, compressor='max')
+

The given matrix is first partitioned to blocks, based on AO shell as +delimiter. Then call compressor function to abstract each block.

+
+
Parameters:
+

compressor – string or function +if compressor is a string, its value can be sum, max, min, abssum, +absmax, absmin, norm

+
+
+
+ +
+
+copy()
+

Deepcopy of the given Mole object

+
+ +
+
+decontract_basis(atoms=None, to_cart=False)
+

Decontract the basis of a Mole or a Cell. Returns a Mole (Cell) object +with the uncontracted basis environment and a list of coefficients that +transform the uncontracted basis to the original basis. Each element in +the coefficients list corresponds to one shell of the original Mole (Cell).

+
+
Kwargs:
+
atoms: list or str

Atoms on which the basis to be decontracted. By default, all basis +are decontracted

+
+
to_cart: bool

Decontract basis and transfer to Cartesian basis

+
+
+
+
+

Examples:

+
>>> mol = gto.M(atom='Ne', basis='ccpvdz')
+>>> pmol, ctr_coeff = mol.decontract_basis()
+>>> c = scipy.linalg.block_diag(*ctr_coeff)
+>>> s = reduce(numpy.dot, (c.T, pmol.intor('int1e_ovlp'), c))
+>>> abs(s-mol.intor('int1e_ovlp')).max()
+0.0
+
+
+
+ +
+
+property drop_exponent
+
+ +
+
+dump_input()
+
+ +
+
+dumps()
+

Serialize Cell object to a JSON formatted str.

+
+ +
+
+property elements
+

A list of elements in the molecule

+
+ +
+
+energy_nuc(ew_eta=None, ew_cut=None)
+

Perform real (R) and reciprocal (G) space Ewald sum for the energy.

+

Formulation of Martin, App. F2.

+
+
Returns:
+

+
float

The Ewald energy consisting of overlap, self, and G-space sum.

+
+
+

+
+
+
+

See also

+

pyscf.pbc.gto.get_ewald_params

+
+
+ +
+
+etbs(etbs)
+

Generate even tempered basis. See also expand_etb()

+
+
Parameters:
+

[ (etbs =) –

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etbs([(0, 2, 1.5, 2.), (1, 2, 1, 2.)])
+[[0, [6.0, 1]], [0, [3.0, 1]], [1, [1., 1]], [1, [2., 1]]]
+
+
+
+ +
+
+eval_ao(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+eval_gto(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+property ew_cut
+
+ +
+
+property ew_eta
+
+ +
+
+ewald(ew_eta=None, ew_cut=None)
+

Perform real (R) and reciprocal (G) space Ewald sum for the energy.

+

Formulation of Martin, App. F2.

+
+
Returns:
+

+
float

The Ewald energy consisting of overlap, self, and G-space sum.

+
+
+

+
+
+
+

See also

+

pyscf.pbc.gto.get_ewald_params

+
+
+ +
+
+exp_to_discard = None
+
+ +
+
+expand_etb(l, n, alpha, beta)
+

Generate the exponents of even tempered basis for Mole.basis. +.. math:

+
e = e^{-\alpha * \beta^{i-1}} for i = 1 .. n
+
+
+
+
Parameters:
+
    +
  • l – int +Angular momentum

  • +
  • n – int +Number of GTOs

  • +
+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etb(1, 3, 1.5, 2)
+[[1, [6.0, 1]], [1, [3.0, 1]], [1, [1.5, 1]]]
+
+
+
+ +
+
+expand_etbs(etbs)
+

Generate even tempered basis. See also expand_etb()

+
+
Parameters:
+

[ (etbs =) –

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> gto.expand_etbs([(0, 2, 1.5, 2.), (1, 2, 1, 2.)])
+[[0, [6.0, 1]], [0, [3.0, 1]], [1, [1., 1]], [1, [2., 1]]]
+
+
+
+ +
+
+format_atom(atom, origin=0, axes=None, unit='Ang')
+

Convert the input Mole.atom to the internal data format. +Including, changing the nuclear charge to atom symbol, converting the +coordinates to AU, rotate and shift the molecule. +If the atom is a string, it takes “;” and “n” +for the mark to separate atoms; “,” and arbitrary length of blank space +to spearate the individual terms for an atom. Blank line will be ignored.

+
+
Parameters:
+

atoms – list or str +the same to Mole.atom

+
+
+
+
Kwargs:
+
originndarray

new axis origin.

+
+
axesndarray

(new_x, new_y, new_z), new coordinates

+
+
unitstr or number

If unit is one of strings (B, b, Bohr, bohr, AU, au), the coordinates +of the input atoms are the atomic unit; If unit is one of strings +(A, a, Angstrom, angstrom, Ang, ang), the coordinates are in the +unit of angstrom; If a number is given, the number are considered +as the Bohr value (in angstrom), which should be around 0.53. +Set unit=1 if wishing to preserve the unit of the coordinates.

+
+
+
+
+
+
Returns:
+

+
“atoms” in the internal format. The internal format is
+
atom = [[atom1, (x, y, z)],
+
+
[atom2, (x, y, z)],
+
+
[atomN, (x, y, z)]]
+
+
+
+
+

+
+
+

Examples:

+
>>> gto.format_atom('9,0,0,0; h@1 0 0 1', origin=(1,1,1))
+[['F', [-1.0, -1.0, -1.0]], ['H@1', [-1.0, -1.0, 0.0]]]
+>>> gto.format_atom(['9,0,0,0', (1, (0, 0, 1))], origin=(1,1,1))
+[['F', [-1.0, -1.0, -1.0]], ['H', [-1, -1, 0]]]
+
+
+
+ +
+
+format_basis(basis_tab)
+

Convert the input Cell.basis to the internal data format:

+
{ atom: (l, kappa, ((-exp, c_1, c_2, ..), nprim, nctr, ptr-exps, ptr-contraction-coeff)), ... }
+
+
+
+
Parameters:
+

basis_tab – dict +Similar to Cell.basis, it cannot be a str

+
+
Returns:
+

Formated basis

+
+
+

Examples:

+
>>> pbc.format_basis({'H':'gth-szv'})
+{'H': [[0,
+    (8.3744350009, -0.0283380461),
+    (1.8058681460, -0.1333810052),
+    (0.4852528328, -0.3995676063),
+    (0.1658236932, -0.5531027541)]]}
+
+
+
+ +
+
+format_ecp(ecp_tab)
+

Convert the input ecp (dict) to the internal data format:

+
{ atom: (nelec,  # core electrons
+
+
+
+
+
+
((l, # l=-1 for UL, l>=0 for Ul to indicate |l><l|
+
(((exp_1, c_1), # for r^0
+

(exp_2, c_2), +…),

+
+
+
((exp_1, c_1), # for r^1

(exp_2, c_2), +…),

+
+
((exp_1, c_1), # for r^2

…))))),

+
+
+
+
+
+
+
+

…}

+
+
+ +
+
+format_pseudo(pseudo_tab)
+

Convert the input Cell.pseudo (dict) to the internal data format:

+
{ atom: ( (nelec_s, nele_p, nelec_d, ...),
+         rloc, nexp, (cexp_1, cexp_2, ..., cexp_nexp),
+         nproj_types,
+         (r1, nproj1, ( (hproj1[1,1], hproj1[1,2], ..., hproj1[1,nproj1]),
+                        (hproj1[2,1], hproj1[2,2], ..., hproj1[2,nproj1]),
+                        ...
+                        (hproj1[nproj1,1], hproj1[nproj1,2], ...        ) )),
+         (r2, nproj2, ( (hproj2[1,1], hproj2[1,2], ..., hproj2[1,nproj1]),
+         ... ) )
+         )
+ ... }
+
+
+
+
Parameters:
+

pseudo_tab – dict +Similar to Cell.pseudo (a dict), it cannot be a str

+
+
Returns:
+

Formatted pseudo

+
+
+

Examples:

+
>>> pbc.format_pseudo({'H':'gth-blyp', 'He': 'gth-pade'})
+{'H': [[1],
+    0.2, 2, [-4.19596147, 0.73049821], 0],
+ 'He': [[2],
+    0.2, 2, [-9.1120234, 1.69836797], 0]}
+
+
+
+ +
+
+from_ase(ase_atom)
+

Update cell based on given ase atom object

+

Examples:

+
>>> from ase.lattice import bulk
+>>> cell.from_ase(bulk('C', 'diamond', a=LATTICE_CONST))
+
+
+
+ +
+
+fromfile(filename, format=None)
+

Update the Mole object based on the input geometry file

+
+ +
+
+fromstring(string, format='xyz')
+

Update the Mole object based on the input geometry string

+
+ +
+
+gen_uniform_grids(mesh=None, wrap_around=True)
+

Generate a uniform real-space grid consistent w/ samp thm; see MH (3.19).

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngx*ngy*ngz, 3) ndarray

The real-space grid point coordinates.

+
+
+

+
+
Return type:
+

coords

+
+
+
+ +
+
+get_Gv(mesh=None, **kwargs)
+

Calculate three-dimensional G-vectors for the cell; see MH (3.8).

+

Indices along each direction go as [0…N-1, -N…-1] to follow FFT convention.

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngrids, 3) ndarray of floats

The array of G-vectors.

+
+
+

+
+
Return type:
+

Gv

+
+
+
+ +
+
+get_Gv_weights(mesh=None, **kwargs)
+

Calculate G-vectors and weights.

+
+
Returns:
+

+
(ngris, 3) ndarray of floats

The array of G-vectors.

+
+
+

+
+
Return type:
+

Gv

+
+
+
+ +
+
+get_SI(Gv=None)
+

Calculate the structure factor (0D, 1D, 2D, 3D) for all atoms; see MH (3.34).

+
+
Parameters:
+
    +
  • cell – instance of Cell

  • +
  • Gv – (N,3) array +G vectors

  • +
+
+
Returns:
+

+
(natm, ngrids) ndarray, dtype=np.complex128

The structure factor for each atom at each G-vector.

+
+
+

+
+
Return type:
+

SI

+
+
+
+ +
+
+get_abs_kpts(scaled_kpts)
+

Get absolute k-points (in 1/Bohr), given “scaled” k-points in +fractions of lattice vectors.

+
+
Parameters:
+

scaled_kpts – (nkpts, 3) ndarray of floats

+
+
Returns:
+

(nkpts, 3) ndarray of floats

+
+
Return type:
+

abs_kpts

+
+
+
+ +
+
+get_ao_indices(bas_list, ao_loc=None)
+

Generate (dis-continued) AO indices for basis specified in bas_list

+
+ +
+
+get_bounding_sphere(rcut)
+

Finds all the lattice points within a sphere of radius rcut.

+

Defines a parallelipiped given by -N_x <= n_x <= N_x, with x in [1,3] +See Martin p. 85

+
+
Parameters:
+

rcut – number +real space cut-off for interaction

+
+
Returns:
+

ndarray of 3 ints defining N_x

+
+
Return type:
+

cut

+
+
+
+ +
+
+get_enuc()
+
+ +
+
+get_ewald_params(precision=None, mesh=None)
+

Choose a reasonable value of Ewald ‘eta’ and ‘cut’ parameters. +eta^2 is the exponent coefficient of the model Gaussian charge for nucleus +at R: frac{eta^3}{pi^1.5} e^{-eta^2 (r-R)^2}

+

Choice is based on largest G vector and desired relative precision.

+

The relative error in the G-space sum is given by

+
+

precision ~ 4pi Gmax^2 e^{(-Gmax^2)/(4 eta^2)}

+
+

which determines eta. Then, real-space cutoff is determined by (exp. +factors only)

+
+

precision ~ erfc(eta*rcut) / rcut ~ e^{(-eta**2 rcut*2)}

+
+
+
Returns:
+

+
float

The Ewald ‘eta’ and ‘cut’ parameters.

+
+
+

+
+
Return type:
+

ew_eta, ew_cut

+
+
+
+ +
+
+get_kpts(nks, wrap_around=False, with_gamma_point=True, scaled_center=None, space_group_symmetry=False, time_reversal_symmetry=False, **kwargs)
+

Given number of kpoints along x,y,z , generate kpoints

+
+
Parameters:
+

nks – (3,) ndarray

+
+
+
+
Kwargs:
+
wrap_aroundbool

To ensure all kpts are in first Brillouin zone.

+
+
with_gamma_pointbool

Whether to shift Monkhorst-pack grid to include gamma-point.

+
+
scaled_center(3,) array

Shift all points in the Monkhorst-pack grid to be centered on +scaled_center, given as the zeroth index of the returned kpts. +Scaled meaning that the k-points are scaled to a grid from +[-1,1] x [-1,1] x [-1,1]

+
+
space_group_symmetrybool

Whether to consider space group symmetry

+
+
time_reversal_symmetrybool

Whether to consider time reversal symmetry

+
+
+
+
+
+
Returns:
+

kpts in absolute value (unit 1/Bohr). Gamma point is placed at the +first place in the k-points list; +instance of KPoints if k-point symmetry is considered

+
+
+

Examples:

+
>>> cell.make_kpts((4,4,4))
+
+
+
+ +
+
+get_lattice_Ls(nimgs=None, rcut=None, dimension=None, discard=True)
+

Get the (Cartesian, unitful) lattice translation vectors for nearby images. +The translation vectors can be used for the lattice summation.

+
+ +
+
+get_nimgs(precision=None)
+

Choose number of basis function images in lattice sums +to include for given precision in overlap, using

+

precision ~ int r^l e^{-alpha r^2} (r-rcut)^l e^{-alpha (r-rcut)^2} +~ (rcut^2/(2alpha))^l e^{alpha/2 rcut^2}

+

where alpha is the smallest exponent in the basis. Note +that assumes an isolated exponent in the middle of the box, so +it adds one additional lattice vector to be safe.

+
+ +
+
+get_overlap_cond(shls_slice=None)
+

Overlap magnitudes measured by -log(overlap) between two shells

+
+
Parameters:
+

mol – an instance of Mole

+
+
Returns:
+

2D mask array of shape (nbas,nbas)

+
+
+
+ +
+
+get_scaled_kpts(abs_kpts, kpts_in_ibz=True)
+

Get scaled k-points, given absolute k-points in 1/Bohr.

+
+
Parameters:
+
    +
  • abs_kpts – (nkpts, 3) ndarray of floats or KPoints object

  • +
  • kpts_in_ibz – bool +If True, return k-points in IBZ; otherwise, return k-points in BZ. +Default value is True. This has effects only if abs_kpts is a +KPoints object

  • +
+
+
Returns:
+

(nkpts, 3) ndarray of floats

+
+
Return type:
+

scaled_kpts

+
+
+
+ +
+
+get_scaled_positions()
+

Get scaled atom positions.

+
+ +
+
+get_uniform_grids(mesh=None, wrap_around=True)
+

Generate a uniform real-space grid consistent w/ samp thm; see MH (3.19).

+
+
Parameters:
+

cell – instance of Cell

+
+
Returns:
+

+
(ngx*ngy*ngz, 3) ndarray

The real-space grid point coordinates.

+
+
+

+
+
Return type:
+

coords

+
+
+
+ +
+
+property gs
+
+ +
+
+gto_norm(l, expnt)
+

Normalized factor for GTO radial part \(g=r^l e^{-\alpha r^2}\)

+
+\[\frac{1}{\sqrt{\int g^2 r^2 dr}} += \sqrt{\frac{2^{2l+3} (l+1)! (2a)^{l+1.5}}{(2l+2)!\sqrt{\pi}}}\]
+

Ref: H. B. Schlegel and M. J. Frisch, Int. J. Quant. Chem., 54(1995), 83-87.

+
+
Parameters:
+
    +
  • l (int) – angular momentum

  • +
  • expnt – exponent \(\alpha\)

  • +
+
+
Returns:
+

normalization factor

+
+
+

Examples:

+
>>> print(gto_norm(0, 1))
+2.5264751109842591
+
+
+
+ +
+
+property h
+
+ +
+
+has_ecp()
+

Whether pseudo potential is used in the system.

+
+ +
+
+has_ecp_soc()
+

Whether spin-orbit coupling is enabled in ECP.

+
+ +
+
+incore_anyway = False
+
+ +
+
+inertia_moment(mass=None, coords=None)
+
+ +
+
+intor(intor, comp=None, hermi=0, aosym='s1', out=None, shls_slice=None, grids=None)
+

Integral generator.

+
+
Parameters:
+

intor – str +Name of the 1e or 2e AO integrals. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp_sph has 3 components.

+
+
hermiint

Symmetry of the integrals

+
+
0 : no symmetry assumed (default)
+
1 : hermitian
+
2 : anti-hermitian
+
+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor('int1e_ipnuc_sph', comp=3) # <nabla i | V_nuc | j>
+[[[ 0.          0.        ]
+  [ 0.          0.        ]]
+ [[ 0.          0.        ]
+  [ 0.          0.        ]]
+ [[ 0.10289944  0.48176097]
+  [-0.48176097 -0.10289944]]]
+>>> mol.intor('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j -0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j -0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+intor_asymmetric(intor, comp=None, grids=None)
+

One-electron integral generator. The integrals are assumed to be anti-hermitian

+
+
Parameters:
+

intor – str +Name of the 1-electron integral. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp has 3 components.

+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor_asymmetric('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j  0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j  0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+intor_by_shell(intor, shells, comp=None, grids=None)
+

For given 2, 3 or 4 shells, interface for libcint to get 1e, 2e, +2-center-2e or 3-center-2e integrals

+
+
Parameters:
+
    +
  • intor_name – str +See also getints() for the supported intor_name

  • +
  • shls – list of int +The AO shell-ids of the integrals

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp has 3 components.

+
+
+
+
+
+
Returns:
+

ndarray of 2-dim to 5-dim, depending on the integral type (1e, +2e, 3c-2e, 2c2e) and the value of comp

+
+
+

Examples

+

The gradients of the spherical 2e integrals

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> gto.getints_by_shell('int2e_ip1_sph', (0,1,0,1), mol._atm, mol._bas, mol._env, comp=3)
+[[[[[-0.        ]]]]
+  [[[[-0.        ]]]]
+  [[[[-0.08760462]]]]]
+
+
+
+ +
+
+intor_symmetric(intor, comp=None, grids=None)
+

One-electron integral generator. The integrals are assumed to be hermitian

+
+
Parameters:
+

intor – str +Name of the 1-electron integral. Ref to getints() for the +complete list of available 1-electron integral names

+
+
+
+
Kwargs:
+
compint

Components of the integrals, e.g. int1e_ipovlp_sph has 3 components.

+
+
gridsndarray

Coordinates of grids for the int1e_grids integrals

+
+
+
+
+
+
Returns:
+

ndarray of 1-electron integrals, can be either 2-dim or 3-dim, depending on comp

+
+
+

Examples:

+
>>> mol.build(atom='H 0 0 0; H 0 0 1.1', basis='sto-3g')
+>>> mol.intor_symmetric('int1e_nuc_spinor')
+[[-1.69771092+0.j  0.00000000+0.j -0.67146312+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -1.69771092+0.j  0.00000000+0.j -0.67146312+0.j]
+ [-0.67146312+0.j  0.00000000+0.j -1.69771092+0.j  0.00000000+0.j]
+ [ 0.00000000+0.j -0.67146312+0.j  0.00000000+0.j -1.69771092+0.j]]
+
+
+
+ +
+
+kernel(dump_input=True, parse_arg=True, a=None, mesh=None, ke_cutoff=None, precision=None, nimgs=None, pseudo=None, basis=None, h=None, dimension=None, rcut=None, ecp=None, low_dim_ft_type=None, space_group_symmetry=None, symmorphic=None, *args, **kwargs)
+

Setup Mole molecule and Cell and initialize some control parameters. +Whenever you change the value of the attributes of Cell, +you need call this function to refresh the internal data of Cell.

+
+
Kwargs:
+
a(3,3) ndarray

The real-space cell lattice vectors. Each row represents +a lattice vector.

+
+
mesh(3,) ndarray of ints

The number of positive G-vectors along each direction.

+
+
ke_cutofffloat

If set, defines a spherical cutoff of planewaves, with .5 * G**2 < ke_cutoff +The default value is estimated based on precision

+
+
precisionfloat

To control Ewald sums and lattice sums accuracy

+
+
nimgs(3,) ndarray of ints

Number of repeated images in lattice summation to produce +periodicity. This value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
rcutfloat

Cutoff radius (unit Bohr) in lattice summation to produce +periodicity. The value can be estimated based on the required +precision. It’s recommended NOT making changes to this value.

+
+
pseudodict or str

To define pseudopotential.

+
+
ecpdict or str

To define ECP type pseudopotential.

+
+
h(3,3) ndarray

a.T. Deprecated

+
+
dimensionint

Default is 3

+
+
low_dim_ft_typestr

For semi-empirical periodic systems, whether to calculate +integrals at the non-PBC dimension using the sampled mesh grids in +infinity vacuum (inf_vacuum) or truncated Coulomb potential +(analytic_2d_1). Unless explicitly specified, analytic_2d_1 is +used for 2D system and inf_vacuum is assumed for 1D and 0D.

+
+
space_group_symmetrybool

Whether to consider space group symmetry. Default is False.

+
+
symmorphicbool

Whether the lattice is symmorphic. If set to True, even if the +lattice is non-symmorphic, only symmorphic space group symmetry +will be considered. Default is False, meaning the space group is +determined by the lattice symmetry to be symmorphic or non-symmorphic.

+
+
+
+
+
+ +
+
+classmethod loads(molstr)
+

Deserialize a str containing a JSON document to a Cell object.

+
+ +
+
+loads_(molstr)
+

classmethod(function) -> method

+

Convert a function to be a class method.

+

A class method receives the class as implicit first argument, +just like an instance method receives the instance. +To declare a class method, use this idiom:

+
+
+
class C:

@classmethod +def f(cls, arg1, arg2, …):

+
+

+
+
+
+
+

It can be called either on the class (e.g. C.f()) or on an instance +(e.g. C().f()). The instance is ignored except for its class. +If a class method is called for a derived class, the derived class +object is passed as the implied first argument.

+

Class methods are different than C++ or Java static methods. +If you want those, see the staticmethod builtin.

+
+ +
+
+make_atm_env(atom, ptr=0, nucmod=1, nucprop=None)
+

Convert the internal format Mole._atom to the format required +by libcint integrals

+
+ +
+
+make_bas_env(basis_add, atom_id=0, ptr=0)
+

Convert Mole.basis to the argument bas for libcint integrals

+
+ +
+
+make_ecp_env(_atm, _ecp, pre_env=[])
+

Generate the input arguments _ecpbas for ECP integrals

+
+ +
+
+make_env(atoms, basis, pre_env=[], nucmod={}, nucprop=None)
+

Generate the input arguments for libcint library based on internal +format Mole._atom and Mole._basis

+
+ +
+
+make_kpts(nks, wrap_around=False, with_gamma_point=True, scaled_center=None, space_group_symmetry=False, time_reversal_symmetry=False, **kwargs)
+

Given number of kpoints along x,y,z , generate kpoints

+
+
Parameters:
+

nks – (3,) ndarray

+
+
+
+
Kwargs:
+
wrap_aroundbool

To ensure all kpts are in first Brillouin zone.

+
+
with_gamma_pointbool

Whether to shift Monkhorst-pack grid to include gamma-point.

+
+
scaled_center(3,) array

Shift all points in the Monkhorst-pack grid to be centered on +scaled_center, given as the zeroth index of the returned kpts. +Scaled meaning that the k-points are scaled to a grid from +[-1,1] x [-1,1] x [-1,1]

+
+
space_group_symmetrybool

Whether to consider space group symmetry

+
+
time_reversal_symmetrybool

Whether to consider time reversal symmetry

+
+
+
+
+
+
Returns:
+

kpts in absolute value (unit 1/Bohr). Gamma point is placed at the +first place in the k-points list; +instance of KPoints if k-point symmetry is considered

+
+
+

Examples:

+
>>> cell.make_kpts((4,4,4))
+
+
+
+ +
+
+property mesh
+
+ +
+
+property ms
+

Spin quantum number. multiplicity = ms*2+1

+
+ +
+
+property multiplicity
+
+ +
+
+property nao
+
+ +
+
+nao_2c()
+

Total number of contracted spinor GTOs for the given Mole object

+
+ +
+
+nao_2c_range(bas_id0, bas_id1)
+

Lower and upper boundary of contracted spinor basis functions associated +with the given shell range

+
+
Parameters:
+
    +
  • molMole object

  • +
  • bas_id0 – int +start shell id, 0-based

  • +
  • bas_id1 – int +stop shell id, 0-based

  • +
+
+
Returns:
+

tupel of start basis function id and the stop function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.nao_2c_range(mol, 2, 4)
+(4, 12)
+
+
+
+ +
+
+nao_cart()
+

Total number of contracted cartesian GTOs for the given Mole object

+
+ +
+
+nao_nr()
+

Total number of contracted GTOs for the given Mole object

+
+ +
+
+nao_nr_range(bas_id0, bas_id1)
+

Lower and upper boundary of contracted spherical basis functions associated +with the given shell range

+
+
Parameters:
+
    +
  • molMole object

  • +
  • bas_id0 – int +start shell id

  • +
  • bas_id1 – int +stop shell id

  • +
+
+
Returns:
+

tupel of start basis function id and the stop function id

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; C 0 0 1', basis='6-31g')
+>>> gto.nao_nr_range(mol, 2, 4)
+(2, 6)
+
+
+
+ +
+
+property natm
+
+ +
+
+property nbas
+
+ +
+
+property nelec
+
+ +
+
+property nelectron
+
+ +
+
+property nimgs
+
+ +
+
+npgto_nr(cart=None)
+

Total number of primitive spherical GTOs for the given Mole object

+
+ +
+
+offset_2c_by_atom()
+

2-component AO offset for each atom. Return a list, each item +of the list gives (start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+offset_ao_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+offset_nr_by_atom(ao_loc=None)
+

AO offsets for each atom. Return a list, each item of the list gives +(start-shell-id, stop-shell-id, start-AO-id, stop-AO-id)

+
+ +
+
+property omega
+
+ +
+
+pack()
+

Pack the input args of Cell to a dict, which can be serialized +with pickle

+
+ +
+
+pbc_eval_ao(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None, Ls=None, rcut=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+pbc_eval_gto(eval_name, coords, comp=None, kpts=None, kpt=None, shls_slice=None, non0tab=None, ao_loc=None, cutoff=None, out=None, Ls=None, rcut=None)
+

Evaluate PBC-AO function value on the given grids,

+
+
Parameters:
+
    +
  • eval_name

    str

    + + + + + + + + + + + + + + + + + + + + +

    Function

    Expression

    ”GTOval_sph”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_sph”

    nabla sum_T exp(ik*T) |AO>

    ”GTOval_cart”

    sum_T exp(ik*T) |AO>

    ”GTOval_ip_cart”

    nabla sum_T exp(ik*T) |AO>

    +

  • +
  • atm – int32 ndarray +libcint integral function argument

  • +
  • bas – int32 ndarray +libcint integral function argument

  • +
  • env – float64 ndarray +libcint integral function argument

  • +
  • coords – 2D array, shape (N,3) +The coordinates of the grids.

  • +
+
+
+
+
Kwargs:
+
shls_slice2-element list

(shl_start, shl_end). +If given, only part of AOs (shl_start <= shell_id < shl_end) are +evaluated. By default, all shells defined in cell will be evaluated.

+
+
non0tab2D bool array

mask array to indicate whether the AO values are zero. The mask +array can be obtained by calling dft.gen_grid.make_mask()

+
+
cutofffloat

AO values smaller than cutoff will be set to zero. The default +cutoff threshold is ~1e-22 (defined in gto/grid_ao_drv.h)

+
+
outndarray

If provided, results are written into this array.

+
+
+
+
+
+
Returns:
+

A list of 2D (or 3D) arrays to hold the AO values on grids. Each +element of the list corresponds to a k-point and it has the shape +(N,nao) Or shape (*,N,nao).

+
+
+

Examples:

+
>>> cell = pbc.gto.M(a=numpy.eye(3)*4, atom='He 1 1 1', basis='6-31g')
+>>> coords = cell.get_uniform_grids([10,10,10])
+>>> kpts = cell.make_kpts([3,3,3])
+>>> ao_value = cell.pbc_eval_gto("GTOval_sph", coords, kpts)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(1000, 2)
+>>> ao_value = cell.pbc_eval_gto("GTOval_ig_sph", coords, kpts, comp=3)
+>>> print(ao_value.shape)
+>>> len(ao_value)
+27
+>>> ao_value[0].shape
+(3, 1000, 2)
+
+
+
+ +
+
+pbc_intor(intor, comp=None, hermi=0, kpts=None, kpt=None, shls_slice=None, **kwargs)
+

One-electron integrals with PBC.

+
+\[\sum_T \int \mu(r) * [intor] * \nu (r-T) dr\]
+

See also Mole.intor

+
+ +
+
+post_kernel(envs)
+

A hook to be run after the main body of the kernel function. Internal +variables are exposed to post_kernel through the “envs” dictionary. +Return value of post_kernel function is not required.

+
+ +
+
+pre_kernel(envs)
+

A hook to be run before the main body of kernel function is executed. +Internal variables are exposed to pre_kernel through the “envs” +dictionary. Return value of pre_kernel function is not required.

+
+ +
+
+precision = 1e-08
+
+ +
+
+property rcut
+
+ +
+
+reciprocal_vectors(norm_to=6.283185307179586)
+
+\[\begin{split}\begin{align} +\mathbf{b_1} &= 2\pi \frac{\mathbf{a_2} \times \mathbf{a_3}}{\mathbf{a_1} \cdot (\mathbf{a_2} \times \mathbf{a_3})} \\ +\mathbf{b_2} &= 2\pi \frac{\mathbf{a_3} \times \mathbf{a_1}}{\mathbf{a_2} \cdot (\mathbf{a_3} \times \mathbf{a_1})} \\ +\mathbf{b_3} &= 2\pi \frac{\mathbf{a_1} \times \mathbf{a_2}}{\mathbf{a_3} \cdot (\mathbf{a_1} \times \mathbf{a_2})} +\end{align}\end{split}\]
+
+ +
+
+run(*args, **kwargs)
+

Call the kernel function of current object. args will be passed +to kernel function. kwargs will be used to update the attributes of +current object. The return value of method run is the object itself. +This allows a series of functions/methods to be executed in pipe.

+
+ +
+
+search_ao_label()
+

Find the index of the AO basis function based on the given ao_label

+
+
Parameters:
+

ao_label – string or a list of strings +The regular expression pattern to match the orbital labels +returned by mol.ao_labels()

+
+
Returns:
+

A list of index for the AOs that matches the given ao_label RE pattern

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='ccpvtz')
+>>> mol.search_ao_label('Cl.*p')
+[19 20 21 22 23 24 25 26 27 28 29 30]
+>>> mol.search_ao_label('Cl 2p')
+[19 20 21]
+>>> mol.search_ao_label(['Cl.*d', 'Cl 4p'])
+[25 26 27 31 32 33 34 35 36 37 38 39 40]
+
+
+
+ +
+
+search_ao_nr(atm_id, l, m, atmshell)
+

Search the first basis function id (not the shell id) which matches +the given atom-id, angular momentum magnetic angular momentum, principal shell.

+
+
Parameters:
+
    +
  • atm_id – int +atom id, 0-based

  • +
  • l – int +angular momentum

  • +
  • m – int +magnetic angular momentum

  • +
  • atmshell – int +principal quantum number

  • +
+
+
Returns:
+

basis function id, 0-based. If not found, return None

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> mol.search_ao_nr(1, 1, -1, 3) # Cl 3px
+7
+
+
+
+ +
+
+search_ao_r(atm_id, l, j, m, atmshell)
+
+ +
+
+search_shell_id(atm_id, l)
+
+ +
+
+set(*args, **kwargs)
+

Update the attributes of the current object. The return value of +method set is the object itself. This allows a series of +functions/methods to be executed in pipe.

+
+ +
+
+set_common_orig(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_orig_(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_origin(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_common_origin_(coord)
+

Update common origin for integrals of dipole, rxp etc. +Note the unit of the coordinates needs to be Bohr

+

Examples:

+
>>> mol.set_common_origin(0)
+>>> mol.set_common_origin((1,0,0))
+
+
+
+ +
+
+set_f12_zeta(zeta)
+

Set zeta for YP exp(-zeta r12)/r12 or STG exp(-zeta r12) type integrals

+
+ +
+
+set_geom_(atoms_or_coords, unit=None, symmetry=None, inplace=True)
+

Update geometry

+
+ +
+
+set_nuc_mod(atm_id, zeta)
+

Change the nuclear charge distribution of the given atom ID. The charge +distribution is defined as: rho(r) = nuc_charge * Norm * exp(-zeta * r^2). +This function can only be called after .build() method is executed.

+

Examples:

+
>>> for ia in range(mol.natm):
+...     zeta = gto.filatov_nuc_mod(mol.atom_charge(ia))
+...     mol.set_nuc_mod(ia, zeta)
+
+
+
+ +
+
+set_nuc_mod_(atm_id, zeta)
+

Change the nuclear charge distribution of the given atom ID. The charge +distribution is defined as: rho(r) = nuc_charge * Norm * exp(-zeta * r^2). +This function can only be called after .build() method is executed.

+

Examples:

+
>>> for ia in range(mol.natm):
+...     zeta = gto.filatov_nuc_mod(mol.atom_charge(ia))
+...     mol.set_nuc_mod(ia, zeta)
+
+
+
+ +
+
+set_range_coulomb(omega)
+

Switch on range-separated Coulomb operator for all 2e integrals

+
+
Parameters:
+

omega

double

+
+
= 0 : Regular electron repulsion integral
+
> 0 : Long-range operator erf(omega r12) / r12
+
< 0 : Short-range operator erfc(omega r12) /r12
+
+

+
+
+
+ +
+
+set_range_coulomb_(omega)
+

Switch on range-separated Coulomb operator for all 2e integrals

+
+
Parameters:
+

omega

double

+
+
= 0 : Regular electron repulsion integral
+
> 0 : Long-range operator erf(omega r12) / r12
+
< 0 : Short-range operator erfc(omega r12) /r12
+
+

+
+
+
+ +
+
+set_rinv_orig(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_orig_(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_origin(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_origin_(coord)
+

Update origin for operator \(\frac{1}{|r-R_O|}\). +Note the unit is Bohr

+

Examples:

+
>>> mol.set_rinv_origin(0)
+>>> mol.set_rinv_origin((0,1,0))
+
+
+
+ +
+
+set_rinv_zeta(zeta)
+

Assume the charge distribution on the “rinv_origin”. zeta is the parameter +to control the charge distribution: rho(r) = Norm * exp(-zeta * r^2). +Be careful when call this function. It affects the behavior of +int1e_rinv_* functions. Make sure to set it back to 0 after using it!

+
+ +
+
+set_rinv_zeta_(zeta)
+

Assume the charge distribution on the “rinv_origin”. zeta is the parameter +to control the charge distribution: rho(r) = Norm * exp(-zeta * r^2). +Be careful when call this function. It affects the behavior of +int1e_rinv_* functions. Make sure to set it back to 0 after using it!

+
+ +
+
+sph2spinor_coeff()
+

Transformation matrix that transforms real-spherical GTOs to spinor +GTOs for all basis functions

+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; F 0 0 1', basis='ccpvtz')
+>>> ca, cb = mol.sph2spinor_coeff()
+>>> s0 = mol.intor('int1e_ovlp_spinor')
+>>> s1 = ca.conj().T.dot(mol.intor('int1e_ovlp_sph')).dot(ca)
+>>> s1+= cb.conj().T.dot(mol.intor('int1e_ovlp_sph')).dot(cb)
+>>> print(abs(s1-s0).max())
+>>> 6.66133814775e-16
+
+
+
+ +
+
+sph_labels(fmt=True, base=0)
+

Labels for spherical GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-real-spherical-notation] +or formatted strings based on the argument “fmt”

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> gto.sph_labels(mol)
+[(0, 'H', '1s', ''), (1, 'Cl', '1s', ''), (1, 'Cl', '2s', ''), (1, 'Cl', '3s', ''),
+ (1, 'Cl', '2p', 'x'), (1, 'Cl', '2p', 'y'), (1, 'Cl', '2p', 'z'), (1, 'Cl', '3p', 'x'),
+ (1, 'Cl', '3p', 'y'), (1, 'Cl', '3p', 'z')]
+
+
+
+ +
+
+spheric_labels(fmt=True, base=0)
+

Labels for spherical GTO functions

+
+
Kwargs:

fmt : str or bool +if fmt is boolean, it controls whether to format the labels and the +default format is “%d%3s %s%-4s”. if fmt is string, the string will +be used as the print format.

+
+
+
+
Returns:
+

List of [(atom-id, symbol-str, nl-str, str-of-real-spherical-notation] +or formatted strings based on the argument “fmt”

+
+
+

Examples:

+
>>> mol = gto.M(atom='H 0 0 0; Cl 0 0 1', basis='sto-3g')
+>>> gto.sph_labels(mol)
+[(0, 'H', '1s', ''), (1, 'Cl', '1s', ''), (1, 'Cl', '2s', ''), (1, 'Cl', '3s', ''),
+ (1, 'Cl', '2p', 'x'), (1, 'Cl', '2p', 'y'), (1, 'Cl', '2p', 'z'), (1, 'Cl', '3p', 'x'),
+ (1, 'Cl', '3p', 'y'), (1, 'Cl', '3p', 'z')]
+
+
+
+ +
+
+spinor_labels(fmt=True, base=0)
+

Labels of spinor GTO functions

+
+ +
+
+stdout = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
+
+ +
+
+symmetrize_mesh(mesh=None)
+
+ +
+
+time_reversal_map()
+

The index to map the spinor functions and its time reversal counterpart. +The returned indices have postive or negative values. For the i-th basis function, +if the returned j = idx[i] < 0, it means \(T|i\rangle = -|j\rangle\), +otherwise \(T|i\rangle = |j\rangle\)

+
+ +
+
+tmap()
+

The index to map the spinor functions and its time reversal counterpart. +The returned indices have postive or negative values. For the i-th basis function, +if the returned j = idx[i] < 0, it means \(T|i\rangle = -|j\rangle\), +otherwise \(T|i\rangle = |j\rangle\)

+
+ +
+
+to_mol()
+

Return a Mole object using the same atoms and basis functions as +the Cell object.

+
+ +
+
+to_uncontracted_cartesian_basis()
+

Decontract the basis of a Mole or a Cell. Returns a Mole (Cell) object +with uncontracted Cartesian basis and a list of coefficients that +transform the uncontracted basis to the original basis. Each element in +the coefficients list corresponds to one shell of the original Mole (Cell).

+

Examples:

+
>>> mol = gto.M(atom='Ne', basis='ccpvdz')
+>>> pmol, ctr_coeff = mol.to_uncontracted_cartesian_basis()
+>>> c = scipy.linalg.block_diag(*ctr_coeff)
+>>> s = reduce(numpy.dot, (c.T, pmol.intor('int1e_ovlp'), c))
+>>> abs(s-mol.intor('int1e_ovlp')).max()
+0.0
+
+
+
+ +
+
+tofile(filename, format=None)
+

Write molecular geometry to a file of the required format.

+
+
Supported output formats:
+
raw: Each line is <symobl> <x> <y> <z>
+
xyz: XYZ cartesian coordinates format
+
zmat: Z-matrix format
+
+
+
+
+ +
+
+tostring(format='raw')
+

Convert molecular geometry to a string of the required format.

+
+
Supported output formats:
+
raw: Each line is <symobl> <x> <y> <z>
+
xyz: XYZ cartesian coordinates format
+
zmat: Z-matrix format
+
+
+
+
+ +
+
+tot_electrons(nkpts=1)
+

Total number of electrons

+
+ +
+
+unit = 'angstrom'
+
+ +
+
+classmethod unpack(moldic)
+

Convert the packed dict to a Cell object, to generate the +input arguments for Cell object.

+
+ +
+
+unpack_(moldic)
+

classmethod(function) -> method

+

Convert a function to be a class method.

+

A class method receives the class as implicit first argument, +just like an instance method receives the instance. +To declare a class method, use this idiom:

+
+
+
class C:

@classmethod +def f(cls, arg1, arg2, …):

+
+

+
+
+
+
+

It can be called either on the class (e.g. C.f()) or on an instance +(e.g. C().f()). The instance is ignored except for its class. +If a class method is called for a derived class, the derived class +object is passed as the implied first argument.

+

Class methods are different than C++ or Java static methods. +If you want those, see the staticmethod builtin.

+
+ +
+
+update(chkfile)
+
+ +
+
+update_from_chk(chkfile)
+
+ +
+
+verbose = 3
+
+ +
+
+view(cls)
+

New view of object with the same attributes.

+
+ +
+
+property vol
+
+ +
+
+with_common_orig(coord)
+

Return a temporary mol context which has the rquired common origin. +The required common origin has no effects out of the temporary context. +See also mol.set_common_origin()

+

Examples:

+
>>> with mol.with_common_origin((1,0,0)):
+...     mol.intor('int1e_r', comp=3)
+
+
+
+ +
+
+with_common_origin(coord)
+

Return a temporary mol context which has the rquired common origin. +The required common origin has no effects out of the temporary context. +See also mol.set_common_origin()

+

Examples:

+
>>> with mol.with_common_origin((1,0,0)):
+...     mol.intor('int1e_r', comp=3)
+
+
+
+ +
+
+with_integral_screen(threshold)
+

Return a temporary mol context which has the rquired integral +screen threshold

+
+ +
+
+with_long_range_coulomb(omega)
+

Return a temporary mol context for long-range part of +range-separated Coulomb operator.

+
+ +
+
+with_range_coulomb(omega)
+

Return a temporary mol context which sets the required parameter +omega for range-separated Coulomb operator. +If omega = None, return the context for regular Coulomb integrals. +See also mol.set_range_coulomb()

+

Examples:

+
>>> with mol.with_range_coulomb(omega=1.5):
+...     mol.intor('int2e')
+
+
+
+ +
+
+with_rinv_as_nucleus(atm_id)
+

Return a temporary mol context in which the rinv operator (1/r) is +treated like the Coulomb potential of a Gaussian charge distribution +rho(r) = Norm * exp(-zeta * r^2) at the place of the input atm_id.

+

Examples:

+
>>> with mol.with_rinv_at_nucleus(3):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_at_nucleus(atm_id)
+

Return a temporary mol context in which the rinv operator (1/r) is +treated like the Coulomb potential of a Gaussian charge distribution +rho(r) = Norm * exp(-zeta * r^2) at the place of the input atm_id.

+

Examples:

+
>>> with mol.with_rinv_at_nucleus(3):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_orig(coord)
+

Return a temporary mol context which has the rquired origin of 1/r +operator. The required origin has no effects out of the temporary +context. See also mol.set_rinv_origin()

+

Examples:

+
>>> with mol.with_rinv_origin((1,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_origin(coord)
+

Return a temporary mol context which has the rquired origin of 1/r +operator. The required origin has no effects out of the temporary +context. See also mol.set_rinv_origin()

+

Examples:

+
>>> with mol.with_rinv_origin((1,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_rinv_zeta(zeta)
+

Return a temporary mol context which has the rquired Gaussian charge +distribution placed at “rinv_origin”: rho(r) = Norm * exp(-zeta * r^2). +See also mol.set_rinv_zeta()

+

Examples:

+
>>> with mol.with_rinv_zeta(zeta=1.5), mol.with_rinv_origin((1.,0,0)):
+...     mol.intor('int1e_rinv')
+
+
+
+ +
+
+with_short_range_coulomb(omega)
+

Return a temporary mol context for short-range part of +range-separated Coulomb operator.

+
+ +
+ +
+
+class vayesta.lattmod.latt.HubbardDF(mol)[source]
+

Bases: object

+
+
+ao2mo(*args, **kwargs)[source]
+
+ +
+
+get_naoaux()[source]
+
+ +
+
+loop(blksize=None)[source]
+

Note that blksize is ignored.

+
+ +
+ +
+
+class vayesta.lattmod.latt.LatticeSCF(mol, *args, **kwargs)[source]
+

Bases: object

+
+
+property cell
+
+ +
+
+get_hcore(*args, **kwargs)[source]
+
+ +
+
+get_ovlp(mol=None)[source]
+
+ +
+
+density_fit()[source]
+
+ +
+ +
+
+class vayesta.lattmod.latt.LatticeRHF(mol, *args, **kwargs)[source]
+

Bases: LatticeSCF, RHF

+
+
+get_init_guess(mol=None, key=None)[source]
+
+ +
+
+get_jk(mol=None, dm=None, *args, **kwargs)[source]
+

Compute J, K matrices for all input density matrices

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or list of ndarrays +A density matrix or a list of density matrices

  • +
+
+
+
+
Kwargs:
+
hermiint

Whether J, K matrix is hermitian

+
+
0 : not hermitian and not symmetric
+
1 : hermitian or symmetric
+
2 : anti-hermitian
+
+
+
vhfopt :

A class which holds precomputed quantities to optimize the +computation of J, K matrices

+
+
with_jboolean

Whether to compute J matrices

+
+
with_kboolean

Whether to compute K matrices

+
+
omegafloat

Parameter of range-seperated Coulomb operator: erf( omega * r12 ) / r12. +If specified, integration are evaluated based on the long-range +part of the range-seperated Coulomb operator.

+
+
+
+
+
+
Returns:
+

Depending on the given dm, the function returns one J and one K matrix, +or a list of J matrices and a list of K matrices, corresponding to the +input density matrices.

+
+
+

Examples:

+
>>> from pyscf import gto, scf
+>>> from pyscf.scf import _vhf
+>>> mol = gto.M(atom='H 0 0 0; H 0 0 1.1')
+>>> dms = numpy.random.random((3,mol.nao_nr(),mol.nao_nr()))
+>>> j, k = scf.hf.get_jk(mol, dms, hermi=0)
+>>> print(j.shape)
+(3, 2, 2)
+
+
+
+ +
+
+check_lattice_symmetry(dm=None)[source]
+
+ +
+
+CCSD(frozen=None, mo_coeff=None, mo_occ=None)
+

restricted CCSD

+
+
+verbose
+

int +Print level. Default value equals to Mole.verbose

+
+ +
+
+max_memory
+

float or int +Allowed memory in MB. Default value equals to Mole.max_memory

+
+ +
+
+conv_tol
+

float +converge threshold. Default is 1e-7.

+
+ +
+
+conv_tol_normt
+

float +converge threshold for norm(t1,t2). Default is 1e-5.

+
+ +
+
+max_cycle
+

int +max number of iterations. Default is 50.

+
+ +
+
+diis_space
+

int +DIIS space size. Default is 6.

+
+ +
+
+diis_start_cycle
+

int +The step to start DIIS. Default is 0.

+
+ +
+
+iterative_damping
+

float +The self consistent damping parameter.

+
+ +
+
+direct
+

bool +AO-direct CCSD. Default is False.

+
+ +
+
+async_io
+

bool +Allow for asynchronous function execution. Default is True.

+
+ +
+
+incore_complete
+

bool +Avoid all I/O (also for DIIS). Default is False.

+
+ +
+
+level_shift
+

float +A shift on virtual orbital energies to stablize the CCSD iteration

+
+ +
+
+frozen
+

int or list +If integer is given, the inner-most orbitals are frozen from CC +amplitudes. Given the orbital indices (0-based) in a list, both +occupied and virtual orbitals can be frozen in CC calculation.

+
>>> mol = gto.M(atom = 'H 0 0 0; F 0 0 1.1', basis = 'ccpvdz')
+>>> mf = scf.RHF(mol).run()
+>>> # freeze 2 core orbitals
+>>> mycc = cc.CCSD(mf).set(frozen = 2).run()
+>>> # auto-generate the number of core orbitals to be frozen (1 in this case)
+>>> mycc = cc.CCSD(mf).set_frozen().run()
+>>> # freeze 2 core orbitals and 3 high lying unoccupied orbitals
+>>> mycc.set(frozen = [0,1,16,17,18]).run()
+
+
+
+ +
+
+callback
+

function(envs_dict) => None +callback function takes one dict as the argument which is +generated by the builtin function locals(), so that the +callback function can access all local variables in the current +environment.

+
+ +

Saved results

+
+
+
convergedbool

CCSD converged or not

+
+
e_corrfloat

CCSD correlation correction

+
+
e_totfloat

Total CCSD energy (HF + correlation)

+
+
t1, t2 :

T amplitudes t1[i,a], t2[i,j,a,b] (i,j in occ, a,b in virt)

+
+
l1, l2 :

Lambda amplitudes l1[i,a], l2[i,j,a,b] (i,j in occ, a,b in virt)

+
+
+
+
+ +
+
+CISD(*args, **kwargs)
+
+ +
+
+DFMP2(*args, **kwargs)
+
+ +
+
+DIIS
+

alias of CDIIS

+
+ +
+
+MP2(*args, **kwargs)
+

restricted MP2 with canonical HF and non-canonical HF reference

+
+
+verbose
+

int +Print level. Default value equals to Mole.verbose

+
+ +
+
+max_memory
+

float or int +Allowed memory in MB. Default value equals to Mole.max_memory

+
+ +
+
+conv_tol
+

float +For non-canonical MP2, converge threshold for MP2 +correlation energy. Default value is 1e-7.

+
+ +
+
+conv_tol_normt
+

float +For non-canonical MP2, converge threshold for +norm(t2). Default value is 1e-5.

+
+ +
+
+max_cycle
+

int +For non-canonical MP2, max number of MP2 +iterations. Default value is 50.

+
+ +
+
+diis_space
+

int +For non-canonical MP2, DIIS space size in MP2 +iterations. Default is 6.

+
+ +
+
+level_shift
+

float +A shift on virtual orbital energies to stablize the MP2 iterations.

+
+ +
+
+frozen
+

int or list +If integer is given, the inner-most orbitals are excluded from MP2 +amplitudes. Given the orbital indices (0-based) in a list, both +occupied and virtual orbitals can be frozen in MP2 calculation.

+
>>> mol = gto.M(atom = 'H 0 0 0; F 0 0 1.1', basis = 'ccpvdz')
+>>> mf = scf.RHF(mol).run()
+>>> # freeze 2 core orbitals
+>>> pt = mp.MP2(mf).set(frozen = 2).run()
+>>> # auto-generate the number of core orbitals to be frozen (1 in this case)
+>>> pt = mp.MP2(mf).set_frozen().run()
+>>> # freeze 2 core orbitals and 3 high lying unoccupied orbitals
+>>> pt.set(frozen = [0,1,16,17,18]).run()
+
+
+
+ +

Saved results

+
+
+
e_corrfloat

MP2 correlation correction

+
+
e_corr_ss/osfloat

Same-spin and opposite-spin component of the MP2 correlation energy

+
+
e_totfloat

Total MP2 energy (HF + correlation)

+
+
t2 :

T amplitudes t2[i,j,a,b] (i,j in occ, a,b in virt)

+
+
+
+
+ +
+
+QCISD(frozen=None, mo_coeff=None, mo_occ=None)
+

restricted QCISD

+
+ +
+
+add_keys(**kwargs)
+

Add or update attributes of the object and register these attributes in ._keys

+
+ +
+
+analyze(verbose=None, with_meta_lowdin=True, **kwargs)
+

Analyze the given SCF object: print orbital energies, occupancies; +print orbital coefficients; Mulliken population analysis; Diople moment.

+
+ +
+
+apply(fn, *args, **kwargs)
+

Apply the fn to rest arguments: return fn(*args, **kwargs). The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+as_scanner()
+

Generating a scanner/solver for HF PES.

+

The returned solver is a function. This function requires one argument +“mol” as input and returns total HF energy.

+

The solver will automatically use the results of last calculation as the +initial guess of the new calculation. All parameters assigned in the +SCF object (DIIS, conv_tol, max_memory etc) are automatically applied in +the solver.

+

Note scanner has side effects. It may change many underlying objects +(_scf, with_df, with_x2c, …) during calculation.

+

Examples:

+
>>> from pyscf import gto, scf
+>>> hf_scanner = scf.RHF(gto.Mole().set(verbose=0)).as_scanner()
+>>> hf_scanner(gto.M(atom='H 0 0 0; F 0 0 1.1'))
+-98.552190448277955
+>>> hf_scanner(gto.M(atom='H 0 0 0; F 0 0 1.5'))
+-98.414750424294368
+
+
+
+ +
+
+build(mol=None)
+
+ +
+
+canonicalize(mo_coeff, mo_occ, fock=None)
+

Canonicalization diagonalizes the Fock matrix within occupied, open, +virtual subspaces separatedly (without change occupancy).

+
+ +
+
+property cell
+
+ +
+
+check_convergence = None
+
+ +
+
+check_sanity()
+

Check input of class/object attributes, check whether a class method is +overwritten. It does not check the attributes which are prefixed with +“_”. The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+conv_check = True
+
+ +
+
+conv_tol = 1e-09
+
+ +
+
+conv_tol_grad = None
+
+ +
+
+convert_from_(mf)
+

Convert the input mean-field object to RHF/ROHF

+
+ +
+
+damp = 0
+
+ +
+
+property damp_factor
+
+ +
+
+density_fit()
+
+ +
+
+diis = True
+
+ +
+
+diis_file = None
+
+ +
+
+diis_space = 8
+
+ +
+
+diis_space_rollback = 0
+
+ +
+
+diis_start_cycle = 1
+
+ +
+
+dip_moment(mol=None, dm=None, unit='Debye', verbose=3, **kwargs)
+

Dipole moment calculation

+
+\[\begin{split}\mu_x = -\sum_{\mu}\sum_{\nu} P_{\mu\nu}(\nu|x|\mu) + \sum_A Q_A X_A\\ +\mu_y = -\sum_{\mu}\sum_{\nu} P_{\mu\nu}(\nu|y|\mu) + \sum_A Q_A Y_A\\ +\mu_z = -\sum_{\mu}\sum_{\nu} P_{\mu\nu}(\nu|z|\mu) + \sum_A Q_A Z_A\end{split}\]
+

where \(\mu_x, \mu_y, \mu_z\) are the x, y and z components of dipole +moment

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – a 2D ndarrays density matrices

  • +
+
+
Returns:
+

the dipole moment on x, y and z component

+
+
Return type:
+

A list

+
+
+
+ +
+
+direct_scf = True
+
+ +
+
+direct_scf_tol = 1e-13
+
+ +
+
+dump_chk(envs)
+
+ +
+
+dump_flags(verbose=None)
+
+ +
+
+dump_scf_summary(verbose=5)
+
+ +
+
+eig(h, s)
+

Solver for generalized eigenvalue problem

+
+\[HC = SCE\]
+
+ +
+
+energy_elec(dm=None, h1e=None, vhf=None)
+

Electronic part of Hartree-Fock energy, for given core hamiltonian and +HF potential

+

… math:

+
E = \sum_{ij}h_{ij} \gamma_{ji}
+  + \frac{1}{2}\sum_{ijkl} \gamma_{ji}\gamma_{lk} \langle ik||jl\rangle
+
+
+

Note this function has side effects which cause mf.scf_summary updated.

+
+
Parameters:
+

mf – an instance of SCF class

+
+
+
+
Kwargs:
+
dm2D ndarray

one-partical density matrix

+
+
h1e2D ndarray

Core hamiltonian

+
+
vhf2D ndarray

HF potential

+
+
+
+
+
+
Returns:
+

Hartree-Fock electronic energy and the Coulomb energy

+
+
+

Examples:

+
>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; H 0 0 1.1')
+>>> mf = scf.RHF(mol)
+>>> mf.scf()
+>>> dm = mf.make_rdm1()
+>>> scf.hf.energy_elec(mf, dm)
+(-1.5176090667746334, 0.60917167853723675)
+>>> mf.energy_elec(dm)
+(-1.5176090667746334, 0.60917167853723675)
+
+
+
+ +
+
+energy_nuc()
+
+ +
+
+energy_tot(dm=None, h1e=None, vhf=None)
+

Total Hartree-Fock energy, electronic part plus nuclear repulstion +See scf.hf.energy_elec() for the electron part

+

Note this function has side effects which cause mf.scf_summary updated.

+
+ +
+
+from_chk(chkfile=None, project=None)
+

Read the HF results from checkpoint file, then project it to the +basis defined by mol

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+get_fock(h1e=None, s1e=None, vhf=None, dm=None, cycle=-1, diis=None, diis_start_cycle=None, level_shift_factor=None, damp_factor=None)
+

F = h^{core} + V^{HF}

+

Special treatment (damping, DIIS, or level shift) will be applied to the +Fock matrix if diis and cycle is specified (The two parameters are passed +to get_fock function during the SCF iteration)

+
+
Kwargs:
+
h1e2D ndarray

Core hamiltonian

+
+
s1e2D ndarray

Overlap matrix, for DIIS

+
+
vhf2D ndarray

HF potential matrix

+
+
dm2D ndarray

Density matrix, for DIIS

+
+
cycleint

Then present SCF iteration step, for DIIS

+
+
diisan object of SCF.DIIS class

DIIS object to hold intermediate Fock and error vectors

+
+
diis_start_cycleint

The step to start DIIS. Default is 0.

+
+
level_shift_factorfloat or int

Level shift (in AU) for virtual space. Default is 0.

+
+
+
+
+
+ +
+
+get_grad(mo_coeff, mo_occ, fock=None)
+

RHF orbital gradients

+
+
Parameters:
+
    +
  • mo_coeff – 2D ndarray +Obital coefficients

  • +
  • mo_occ – 1D ndarray +Orbital occupancy

  • +
  • fock_ao – 2D ndarray +Fock matrix in AO representation

  • +
+
+
Returns:
+

Gradients in MO representation. It’s a num_occ*num_vir vector.

+
+
+
+ +
+
+get_hcore(*args, **kwargs)
+
+ +
+
+get_j(mol=None, dm=None, hermi=1, omega=None)
+

Compute J matrices for all input density matrices

+
+ +
+
+get_k(mol=None, dm=None, hermi=1, omega=None)
+

Compute K matrices for all input density matrices

+
+ +
+
+get_occ(mo_energy=None, mo_coeff=None)
+

Label the occupancies for each orbital

+
+
Kwargs:
+
mo_energy1D ndarray

Obital energies

+
+
mo_coeff2D ndarray

Obital coefficients

+
+
+
+
+

Examples:

+
>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> energy = numpy.array([-10., -1., 1, -2., 0, -3])
+>>> mf.get_occ(energy)
+array([2, 2, 0, 2, 2, 2])
+
+
+
+ +
+
+get_ovlp(mol=None)
+
+ +
+
+get_veff(mol=None, dm=None, dm_last=0, vhf_last=0, hermi=1)
+

Hartree-Fock potential matrix for the given density matrix

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or list of ndarrays +A density matrix or a list of density matrices

  • +
+
+
+
+
Kwargs:
+
dm_lastndarray or a list of ndarrays or 0

The density matrix baseline. If not 0, this function computes the +increment of HF potential w.r.t. the reference HF potential matrix.

+
+
vhf_lastndarray or a list of ndarrays or 0

The reference HF potential matrix.

+
+
hermiint

Whether J, K matrix is hermitian

+
+
0 : no hermitian or symmetric
+
1 : hermitian
+
2 : anti-hermitian
+
+
+
vhfopt :

A class which holds precomputed quantities to optimize the +computation of J, K matrices

+
+
+
+
+
+
Returns:
+

matrix Vhf = 2*J - K. Vhf can be a list matrices, corresponding to the +input density matrices.

+
+
+

Examples:

+
>>> import numpy
+>>> from pyscf import gto, scf
+>>> from pyscf.scf import _vhf
+>>> mol = gto.M(atom='H 0 0 0; H 0 0 1.1')
+>>> dm0 = numpy.random.random((mol.nao_nr(),mol.nao_nr()))
+>>> vhf0 = scf.hf.get_veff(mol, dm0, hermi=0)
+>>> dm1 = numpy.random.random((mol.nao_nr(),mol.nao_nr()))
+>>> vhf1 = scf.hf.get_veff(mol, dm1, hermi=0)
+>>> vhf2 = scf.hf.get_veff(mol, dm1, dm_last=dm0, vhf_last=vhf0, hermi=0)
+>>> numpy.allclose(vhf1, vhf2)
+True
+
+
+
+ +
+
+property hf_energy
+
+ +
+
+init_direct_scf(mol=None)
+
+ +
+
+init_guess = 'minao'
+
+ +
+
+init_guess_by_1e(mol=None)
+

Generate initial guess density matrix from core hamiltonian

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_atom(mol=None)
+

Generate initial guess density matrix from superposition of atomic HF +density matrix. The atomic HF is occupancy averaged RHF

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_chkfile(chkfile=None, project=None)
+

Read the HF results from checkpoint file, then project it to the +basis defined by mol

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_huckel(mol=None)
+

Generate initial guess density matrix from a Huckel calculation based +on occupancy averaged atomic RHF calculations, doi:10.1021/acs.jctc.8b01089

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_minao(mol=None)
+

Generate initial guess density matrix based on ANO basis, then project +the density matrix to the basis set defined by mol

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+

Examples:

+
>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; H 0 0 1.1')
+>>> scf.hf.init_guess_by_minao(mol)
+array([[ 0.94758917,  0.09227308],
+       [ 0.09227308,  0.94758917]])
+
+
+
+ +
+
+kernel(dm0=None, **kwargs)
+

SCF main driver

+
+
Kwargs:
+
dm0ndarray

If given, it will be used as the initial guess density matrix

+
+
+
+
+

Examples:

+
>>> import numpy
+>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> dm_guess = numpy.eye(mol.nao_nr())
+>>> mf.kernel(dm_guess)
+converged SCF energy = -98.5521904482821
+-98.552190448282104
+
+
+
+ +
+
+level_shift = 0
+
+ +
+
+property level_shift_factor
+
+ +
+
+make_rdm1(mo_coeff=None, mo_occ=None, **kwargs)
+

One-particle density matrix in AO representation

+
+
Parameters:
+
    +
  • mo_coeff – 2D ndarray +Orbital coefficients. Each column is one orbital.

  • +
  • mo_occ – 1D ndarray +Occupancy

  • +
+
+
Returns:
+

One-particle density matrix, 2D ndarray

+
+
+
+ +
+
+make_rdm2(mo_coeff=None, mo_occ=None, **kwargs)
+

Two-particle density matrix in AO representation

+
+
Parameters:
+
    +
  • mo_coeff – 2D ndarray +Orbital coefficients. Each column is one orbital.

  • +
  • mo_occ – 1D ndarray +Occupancy

  • +
+
+
Returns:
+

Two-particle density matrix, 4D ndarray

+
+
+
+ +
+
+max_cycle = 50
+
+ +
+
+mulliken_meta(mol=None, dm=None, verbose=5, pre_orth_method='ANO', s=None)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+mulliken_pop(mol=None, dm=None, s=None, verbose=5)
+

Mulliken population analysis

+
+\[M_{ij} = D_{ij} S_{ji}\]
+

Mulliken charges

+
+\[\delta_i = \sum_j M_{ij}\]
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+mulliken_pop_meta_lowdin_ao(*args, **kwargs)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+newton()
+

Create an SOSCF object based on the mean-field object

+
+ +
+
+nuc_grad_method()
+

Hook to create object for analytical nuclear gradients.

+
+ +
+
+pop(*args, **kwargs)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+post_kernel(envs)
+

A hook to be run after the main body of the kernel function. Internal +variables are exposed to post_kernel through the “envs” dictionary. +Return value of post_kernel function is not required.

+
+ +
+
+pre_kernel(envs)
+

A hook to be run before the main body of kernel function is executed. +Internal variables are exposed to pre_kernel through the “envs” +dictionary. Return value of pre_kernel function is not required.

+
+ +
+
+remove_soscf()
+

Remove the SOSCF decorator

+
+ +
+
+reset(mol=None)
+

Reset mol and relevant attributes associated to the old mol object

+
+ +
+
+run(*args, **kwargs)
+

Call the kernel function of current object. args will be passed +to kernel function. kwargs will be used to update the attributes of +current object. The return value of method run is the object itself. +This allows a series of functions/methods to be executed in pipe.

+
+ +
+
+scf(dm0=None, **kwargs)
+

SCF main driver

+
+
Kwargs:
+
dm0ndarray

If given, it will be used as the initial guess density matrix

+
+
+
+
+

Examples:

+
>>> import numpy
+>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> dm_guess = numpy.eye(mol.nao_nr())
+>>> mf.kernel(dm_guess)
+converged SCF energy = -98.5521904482821
+-98.552190448282104
+
+
+
+ +
+
+set(*args, **kwargs)
+

Update the attributes of the current object. The return value of +method set is the object itself. This allows a series of +functions/methods to be executed in pipe.

+
+ +
+
+sfx2c1e()
+
+ +
+
+spin_square(mo_coeff=None, s=None)
+

Spin square and multiplicity of RHF determinant

+
+ +
+
+stability(internal=True, external=False, verbose=None, return_status=False)
+

RHF/RKS stability analysis.

+

See also pyscf.scf.stability.rhf_stability function.

+
+
Kwargs:
+
internalbool

Internal stability, within the RHF optimization space.

+
+
externalbool

External stability. Including the RHF -> UHF and real -> complex +stability analysis.

+
+
return_status: bool

Whether to return stable_i and stable_e

+
+
+
+
+
+
Returns:
+

If return_status is False (default), the return value includes +two set of orbitals, which are more close to the stable condition. +The first corresponds to the internal stability +and the second corresponds to the external stability.

+

Else, another two boolean variables (indicating current status: +stable or unstable) are returned. +The first corresponds to the internal stability +and the second corresponds to the external stability.

+

+
+
+
+ +
+
+stdout = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
+
+ +
+
+to_ghf()
+

Convert the input mean-field object to a GHF object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_gks(xc='HF')
+

Convert the input mean-field object to a GKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_ks(xc='HF')
+

Convert the input mean-field object to the associated KS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_rhf()
+

Convert the input mean-field object to a RHF/ROHF object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_rks(xc='HF')
+

Convert the input mean-field object to a RKS/ROKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_uhf()
+

Convert the input mean-field object to a UHF object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_uks(xc='HF')
+

Convert the input mean-field object to a UKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+update(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_from_chk(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_from_chk_(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+verbose = 0
+
+ +
+
+view(cls)
+

New view of object with the same attributes.

+
+ +
+
+x2c()
+
+ +
+
+x2c1e()
+
+ +
+ +
+
+class vayesta.lattmod.latt.LatticeUHF(mol, *args, **kwargs)[source]
+

Bases: LatticeSCF, UHF

+
+
+get_init_guess(mol=None, key=None)[source]
+
+ +
+
+get_jk(mol=None, dm=None, *args, **kwargs)[source]
+

Coulomb (J) and exchange (K)

+
+
Parameters:
+

dm – a list of 2D arrays or a list of 3D arrays +(alpha_dm, beta_dm) or (alpha_dms, beta_dms)

+
+
+
+ +
+
+CCSD(frozen=None, mo_coeff=None, mo_occ=None)
+

restricted CCSD

+
+
+verbose
+

int +Print level. Default value equals to Mole.verbose

+
+ +
+
+max_memory
+

float or int +Allowed memory in MB. Default value equals to Mole.max_memory

+
+ +
+
+conv_tol
+

float +converge threshold. Default is 1e-7.

+
+ +
+
+conv_tol_normt
+

float +converge threshold for norm(t1,t2). Default is 1e-5.

+
+ +
+
+max_cycle
+

int +max number of iterations. Default is 50.

+
+ +
+
+diis_space
+

int +DIIS space size. Default is 6.

+
+ +
+
+diis_start_cycle
+

int +The step to start DIIS. Default is 0.

+
+ +
+
+iterative_damping
+

float +The self consistent damping parameter.

+
+ +
+
+direct
+

bool +AO-direct CCSD. Default is False.

+
+ +
+
+async_io
+

bool +Allow for asynchronous function execution. Default is True.

+
+ +
+
+incore_complete
+

bool +Avoid all I/O (also for DIIS). Default is False.

+
+ +
+
+level_shift
+

float +A shift on virtual orbital energies to stablize the CCSD iteration

+
+ +
+
+frozen
+

int or list +If integer is given, the inner-most orbitals are frozen from CC +amplitudes. Given the orbital indices (0-based) in a list, both +occupied and virtual orbitals can be frozen in CC calculation.

+
>>> mol = gto.M(atom = 'H 0 0 0; F 0 0 1.1', basis = 'ccpvdz')
+>>> mf = scf.RHF(mol).run()
+>>> # freeze 2 core orbitals
+>>> mycc = cc.CCSD(mf).set(frozen = 2).run()
+>>> # auto-generate the number of core orbitals to be frozen (1 in this case)
+>>> mycc = cc.CCSD(mf).set_frozen().run()
+>>> # freeze 2 core orbitals and 3 high lying unoccupied orbitals
+>>> mycc.set(frozen = [0,1,16,17,18]).run()
+
+
+
+ +
+
+callback
+

function(envs_dict) => None +callback function takes one dict as the argument which is +generated by the builtin function locals(), so that the +callback function can access all local variables in the current +environment.

+
+ +

Saved results

+
+
+
convergedbool

CCSD converged or not

+
+
e_corrfloat

CCSD correlation correction

+
+
e_totfloat

Total CCSD energy (HF + correlation)

+
+
t1, t2 :

T amplitudes t1[i,a], t2[i,j,a,b] (i,j in occ, a,b in virt)

+
+
l1, l2 :

Lambda amplitudes l1[i,a], l2[i,j,a,b] (i,j in occ, a,b in virt)

+
+
+
+
+ +
+
+CISD(*args, **kwargs)
+
+ +
+
+DFMP2 = None
+
+ +
+
+DIIS
+

alias of CDIIS

+
+ +
+
+MP2(*args, **kwargs)
+
+ +
+
+QCISD(frozen=None, mo_coeff=None, mo_occ=None)
+

restricted QCISD

+
+ +
+
+add_keys(**kwargs)
+

Add or update attributes of the object and register these attributes in ._keys

+
+ +
+
+analyze(verbose=None, with_meta_lowdin=True, **kwargs)
+

Analyze the given SCF object: print orbital energies, occupancies; +print orbital coefficients; Mulliken population analysis; Diople moment.

+
+ +
+
+apply(fn, *args, **kwargs)
+

Apply the fn to rest arguments: return fn(*args, **kwargs). The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+as_scanner()
+

Generating a scanner/solver for HF PES.

+

The returned solver is a function. This function requires one argument +“mol” as input and returns total HF energy.

+

The solver will automatically use the results of last calculation as the +initial guess of the new calculation. All parameters assigned in the +SCF object (DIIS, conv_tol, max_memory etc) are automatically applied in +the solver.

+

Note scanner has side effects. It may change many underlying objects +(_scf, with_df, with_x2c, …) during calculation.

+

Examples:

+
>>> from pyscf import gto, scf
+>>> hf_scanner = scf.RHF(gto.Mole().set(verbose=0)).as_scanner()
+>>> hf_scanner(gto.M(atom='H 0 0 0; F 0 0 1.1'))
+-98.552190448277955
+>>> hf_scanner(gto.M(atom='H 0 0 0; F 0 0 1.5'))
+-98.414750424294368
+
+
+
+ +
+
+build(mol=None)
+
+ +
+
+canonicalize(mo_coeff, mo_occ, fock=None)
+

Canonicalization diagonalizes the UHF Fock matrix within occupied, +virtual subspaces separatedly (without change occupancy).

+
+ +
+
+property cell
+
+ +
+
+check_convergence = None
+
+ +
+
+check_sanity()
+

Check input of class/object attributes, check whether a class method is +overwritten. It does not check the attributes which are prefixed with +“_”. The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+conv_check = True
+
+ +
+
+conv_tol = 1e-09
+
+ +
+
+conv_tol_grad = None
+
+ +
+
+convert_from_(mf)
+

Create UHF object based on the RHF/ROHF object

+
+ +
+
+damp = 0
+
+ +
+
+property damp_factor
+
+ +
+
+density_fit()
+
+ +
+
+det_ovlp(mo1, mo2, occ1, occ2, ovlp=None)
+

Calculate the overlap between two different determinants. It is the product +of single values of molecular orbital overlap matrix.

+
+\[S_{12} = \langle \Psi_A | \Psi_B \rangle += (\mathrm{det}\mathbf{U}) (\mathrm{det}\mathbf{V^\dagger}) + \prod\limits_{i=1}\limits^{2N} \lambda_{ii}\]
+

where \(\mathbf{U}, \mathbf{V}, \lambda\) are unitary matrices and single +values generated by single value decomposition(SVD) of the overlap matrix +\(\mathbf{O}\) which is the overlap matrix of two sets of molecular orbitals:

+
+\[\mathbf{U}^\dagger \mathbf{O} \mathbf{V} = \mathbf{\Lambda}\]
+
+
Parameters:
+
    +
  • mo1 – 2D ndarrays +Molecualr orbital coefficients

  • +
  • mo2 – 2D ndarrays +Molecualr orbital coefficients

  • +
  • occ1 – 2D ndarrays +occupation numbers

  • +
  • occ2 – 2D ndarrays +occupation numbers

  • +
+
+
Returns:
+

the product of single values: float +(x_a, x_b): 1D ndarrays +\(\mathbf{U} \mathbf{\Lambda}^{-1} \mathbf{V}^\dagger\) +They are used to calculate asymmetric density matrix

+
+
Return type:
+

A list

+
+
+
+ +
+
+diis = True
+
+ +
+
+diis_file = None
+
+ +
+
+diis_space = 8
+
+ +
+
+diis_space_rollback = 0
+
+ +
+
+diis_start_cycle = 1
+
+ +
+
+dip_moment(mol=None, dm=None, unit='Debye', verbose=3, **kwargs)
+

Dipole moment calculation

+
+\[\begin{split}\mu_x = -\sum_{\mu}\sum_{\nu} P_{\mu\nu}(\nu|x|\mu) + \sum_A Q_A X_A\\ +\mu_y = -\sum_{\mu}\sum_{\nu} P_{\mu\nu}(\nu|y|\mu) + \sum_A Q_A Y_A\\ +\mu_z = -\sum_{\mu}\sum_{\nu} P_{\mu\nu}(\nu|z|\mu) + \sum_A Q_A Z_A\end{split}\]
+

where \(\mu_x, \mu_y, \mu_z\) are the x, y and z components of dipole +moment

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – a 2D ndarrays density matrices

  • +
+
+
Returns:
+

the dipole moment on x, y and z component

+
+
Return type:
+

A list

+
+
+
+ +
+
+direct_scf = True
+
+ +
+
+direct_scf_tol = 1e-13
+
+ +
+
+dump_chk(envs)
+
+ +
+
+dump_flags(verbose=None)
+
+ +
+
+dump_scf_summary(verbose=5)
+
+ +
+
+eig(fock, s)
+

Solver for generalized eigenvalue problem

+
+\[HC = SCE\]
+
+ +
+
+energy_elec(dm=None, h1e=None, vhf=None)
+

Electronic energy of Unrestricted Hartree-Fock

+

Note this function has side effects which cause mf.scf_summary updated.

+
+
Returns:
+

Hartree-Fock electronic energy and the 2-electron part contribution

+
+
+
+ +
+
+energy_nuc()
+
+ +
+
+energy_tot(dm=None, h1e=None, vhf=None)
+

Total Hartree-Fock energy, electronic part plus nuclear repulstion +See scf.hf.energy_elec() for the electron part

+

Note this function has side effects which cause mf.scf_summary updated.

+
+ +
+
+from_chk(chkfile=None, project=None)
+

Read the HF results from checkpoint file, then project it to the +basis defined by mol

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+get_fock(h1e=None, s1e=None, vhf=None, dm=None, cycle=-1, diis=None, diis_start_cycle=None, level_shift_factor=None, damp_factor=None)
+

F = h^{core} + V^{HF}

+

Special treatment (damping, DIIS, or level shift) will be applied to the +Fock matrix if diis and cycle is specified (The two parameters are passed +to get_fock function during the SCF iteration)

+
+
Kwargs:
+
h1e2D ndarray

Core hamiltonian

+
+
s1e2D ndarray

Overlap matrix, for DIIS

+
+
vhf2D ndarray

HF potential matrix

+
+
dm2D ndarray

Density matrix, for DIIS

+
+
cycleint

Then present SCF iteration step, for DIIS

+
+
diisan object of SCF.DIIS class

DIIS object to hold intermediate Fock and error vectors

+
+
diis_start_cycleint

The step to start DIIS. Default is 0.

+
+
level_shift_factorfloat or int

Level shift (in AU) for virtual space. Default is 0.

+
+
+
+
+
+ +
+
+get_grad(mo_coeff, mo_occ, fock=None)
+

RHF orbital gradients

+
+
Parameters:
+
    +
  • mo_coeff – 2D ndarray +Obital coefficients

  • +
  • mo_occ – 1D ndarray +Orbital occupancy

  • +
  • fock_ao – 2D ndarray +Fock matrix in AO representation

  • +
+
+
Returns:
+

Gradients in MO representation. It’s a num_occ*num_vir vector.

+
+
+
+ +
+
+get_hcore(*args, **kwargs)
+
+ +
+
+get_j(mol=None, dm=None, hermi=1, omega=None)
+

Compute J matrices for all input density matrices

+
+ +
+
+get_k(mol=None, dm=None, hermi=1, omega=None)
+

Compute K matrices for all input density matrices

+
+ +
+
+get_occ(mo_energy=None, mo_coeff=None)
+

Label the occupancies for each orbital

+
+
Kwargs:
+
mo_energy1D ndarray

Obital energies

+
+
mo_coeff2D ndarray

Obital coefficients

+
+
+
+
+

Examples:

+
>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> energy = numpy.array([-10., -1., 1, -2., 0, -3])
+>>> mf.get_occ(energy)
+array([2, 2, 0, 2, 2, 2])
+
+
+
+ +
+
+get_ovlp(mol=None)
+
+ +
+
+get_veff(mol=None, dm=None, dm_last=0, vhf_last=0, hermi=1)
+

Unrestricted Hartree-Fock potential matrix of alpha and beta spins, +for the given density matrix

+
+\[\begin{split}V_{ij}^\alpha &= \sum_{kl} (ij|kl)(\gamma_{lk}^\alpha+\gamma_{lk}^\beta) + - \sum_{kl} (il|kj)\gamma_{lk}^\alpha \\ +V_{ij}^\beta &= \sum_{kl} (ij|kl)(\gamma_{lk}^\alpha+\gamma_{lk}^\beta) + - \sum_{kl} (il|kj)\gamma_{lk}^\beta\end{split}\]
+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – a list of ndarrays +A list of density matrices, stored as (alpha,alpha,…,beta,beta,…)

  • +
+
+
+
+
Kwargs:
+
dm_lastndarray or a list of ndarrays or 0

The density matrix baseline. When it is not 0, this function computes +the increment of HF potential w.r.t. the reference HF potential matrix.

+
+
vhf_lastndarray or a list of ndarrays or 0

The reference HF potential matrix.

+
+
hermiint

Whether J, K matrix is hermitian

+
+
0 : no hermitian or symmetric
+
1 : hermitian
+
2 : anti-hermitian
+
+
+
vhfopt :

A class which holds precomputed quantities to optimize the +computation of J, K matrices

+
+
+
+
+
+
Returns:
+

\(V_{hf} = (V^\alpha, V^\beta)\). \(V^\alpha\) (and \(V^\beta\)) +can be a list matrices, corresponding to the input density matrices.

+
+
+

Examples:

+
>>> import numpy
+>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; H 0 0 1.1')
+>>> dmsa = numpy.random.random((3,mol.nao_nr(),mol.nao_nr()))
+>>> dmsb = numpy.random.random((3,mol.nao_nr(),mol.nao_nr()))
+>>> dms = numpy.vstack((dmsa,dmsb))
+>>> dms.shape
+(6, 2, 2)
+>>> vhfa, vhfb = scf.uhf.get_veff(mol, dms, hermi=0)
+>>> vhfa.shape
+(3, 2, 2)
+>>> vhfb.shape
+(3, 2, 2)
+
+
+
+ +
+
+property hf_energy
+
+ +
+
+init_direct_scf(mol=None)
+
+ +
+
+init_guess = 'minao'
+
+ +
+
+init_guess_by_1e(mol=None, breaksym=True)
+

Generate initial guess density matrix from core hamiltonian

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_atom(mol=None, breaksym=True)
+

Generate initial guess density matrix from superposition of atomic HF +density matrix. The atomic HF is occupancy averaged RHF

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_chkfile(chkfile=None, project=None)
+

Read the HF results from checkpoint file, then project it to the +basis defined by mol

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_huckel(mol=None, breaksym=True)
+

Generate initial guess density matrix from a Huckel calculation based +on occupancy averaged atomic RHF calculations, doi:10.1021/acs.jctc.8b01089

+
+
Returns:
+

Density matrix, 2D ndarray

+
+
+
+ +
+
+init_guess_by_minao(mol=None, breaksym=True)
+

Initial guess in terms of the overlap to minimal basis.

+
+ +
+
+kernel(dm0=None, **kwargs)
+

SCF main driver

+
+
Kwargs:
+
dm0ndarray

If given, it will be used as the initial guess density matrix

+
+
+
+
+

Examples:

+
>>> import numpy
+>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> dm_guess = numpy.eye(mol.nao_nr())
+>>> mf.kernel(dm_guess)
+converged SCF energy = -98.5521904482821
+-98.552190448282104
+
+
+
+ +
+
+level_shift = 0
+
+ +
+
+property level_shift_factor
+
+ +
+
+make_asym_dm(mo1, mo2, occ1, occ2, x)
+

One-particle asymmetric density matrix

+
+
Parameters:
+
    +
  • mo1 – 2D ndarrays +Molecualr orbital coefficients

  • +
  • mo2 – 2D ndarrays +Molecualr orbital coefficients

  • +
  • occ1 – 2D ndarrays +Occupation numbers

  • +
  • occ2 – 2D ndarrays +Occupation numbers

  • +
  • x – 2D ndarrays +\(\mathbf{U} \mathbf{\Lambda}^{-1} \mathbf{V}^\dagger\). +See also det_ovlp()

  • +
+
+
Returns:
+

A list of 2D ndarrays for alpha and beta spin

+
+
+

Examples:

+
>>> mf1 = scf.UHF(gto.M(atom='H 0 0 0; F 0 0 1.3', basis='ccpvdz')).run()
+>>> mf2 = scf.UHF(gto.M(atom='H 0 0 0; F 0 0 1.4', basis='ccpvdz')).run()
+>>> s = gto.intor_cross('int1e_ovlp_sph', mf1.mol, mf2.mol)
+>>> det, x = det_ovlp(mf1.mo_coeff, mf1.mo_occ, mf2.mo_coeff, mf2.mo_occ, s)
+>>> adm = make_asym_dm(mf1.mo_coeff, mf1.mo_occ, mf2.mo_coeff, mf2.mo_occ, x)
+>>> adm.shape
+(2, 19, 19)
+
+
+
+ +
+
+make_rdm1(mo_coeff=None, mo_occ=None, **kwargs)
+

One-particle density matrix in AO representation

+
+
Parameters:
+
    +
  • mo_coeff – tuple of 2D ndarrays +Orbital coefficients for alpha and beta spins. Each column is one orbital.

  • +
  • mo_occ – tuple of 1D ndarrays +Occupancies for alpha and beta spins.

  • +
+
+
Returns:
+

A list of 2D ndarrays for alpha and beta spins

+
+
+
+ +
+
+make_rdm2(mo_coeff=None, mo_occ=None, **kwargs)
+

Two-particle density matrix in AO representation

+
+
Parameters:
+
    +
  • mo_coeff – tuple of 2D ndarrays +Orbital coefficients for alpha and beta spins. Each column is one orbital.

  • +
  • mo_occ – tuple of 1D ndarrays +Occupancies for alpha and beta spins.

  • +
+
+
Returns:
+

A tuple of three 4D ndarrays for alpha,alpha and alpha,beta and beta,beta spins

+
+
+
+ +
+
+max_cycle = 50
+
+ +
+
+mulliken_meta(mol=None, dm=None, verbose=5, pre_orth_method='ANO', s=None)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+mulliken_meta_spin(mol=None, dm=None, verbose=5, pre_orth_method='ANO', s=None)
+
+ +
+
+mulliken_pop(mol=None, dm=None, s=None, verbose=5)
+

Mulliken population analysis

+
+\[M_{ij} = D_{ij} S_{ji}\]
+

Mulliken charges

+
+\[\delta_i = \sum_j M_{ij}\]
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+mulliken_pop_meta_lowdin_ao(*args, **kwargs)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+mulliken_spin_pop(mol=None, dm=None, s=None, verbose=5)
+
+ +
+
+property nelec
+
+ +
+
+property nelectron_alpha
+
+ +
+
+newton()
+

Create an SOSCF object based on the mean-field object

+
+ +
+
+nuc_grad_method()
+

Hook to create object for analytical nuclear gradients.

+
+ +
+
+pop(*args, **kwargs)
+

Mulliken population analysis, based on meta-Lowdin AOs. +In the meta-lowdin, the AOs are grouped in three sets: core, valence and +Rydberg, the orthogonalization are carreid out within each subsets.

+
+
Parameters:
+
    +
  • mol – an instance of Mole

  • +
  • dm – ndarray or 2-item list of ndarray +Density matrix. ROHF dm is a 2-item list of 2D array

  • +
+
+
+
+
Kwargs:

verbose : int or instance of lib.logger.Logger

+
+
pre_orth_methodstr

Pre-orthogonalization, which localized GTOs for each atom. +To obtain the occupied and unoccupied atomic shells, there are +three methods

+
+
‘ano’ : Project GTOs to ANO basis
+
‘minao’ : Project GTOs to MINAO basis
+
‘scf’ : Symmetry-averaged fractional occupation atomic RHF
+
+
+
+
+
+
+
Returns:
+

pop, charges

+
+
popnparray

Mulliken population on each atomic orbitals

+
+
chargesnparray

Mulliken charges

+
+
+

+
+
Return type:
+

A list

+
+
+
+ +
+
+post_kernel(envs)
+

A hook to be run after the main body of the kernel function. Internal +variables are exposed to post_kernel through the “envs” dictionary. +Return value of post_kernel function is not required.

+
+ +
+
+pre_kernel(envs)
+

A hook to be run before the main body of kernel function is executed. +Internal variables are exposed to pre_kernel through the “envs” +dictionary. Return value of pre_kernel function is not required.

+
+ +
+
+remove_soscf()
+

Remove the SOSCF decorator

+
+ +
+
+reset(mol=None)
+

Reset mol and relevant attributes associated to the old mol object

+
+ +
+
+run(*args, **kwargs)
+

Call the kernel function of current object. args will be passed +to kernel function. kwargs will be used to update the attributes of +current object. The return value of method run is the object itself. +This allows a series of functions/methods to be executed in pipe.

+
+ +
+
+scf(dm0=None, **kwargs)
+

SCF main driver

+
+
Kwargs:
+
dm0ndarray

If given, it will be used as the initial guess density matrix

+
+
+
+
+

Examples:

+
>>> import numpy
+>>> from pyscf import gto, scf
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1.1')
+>>> mf = scf.hf.SCF(mol)
+>>> dm_guess = numpy.eye(mol.nao_nr())
+>>> mf.kernel(dm_guess)
+converged SCF energy = -98.5521904482821
+-98.552190448282104
+
+
+
+ +
+
+set(*args, **kwargs)
+

Update the attributes of the current object. The return value of +method set is the object itself. This allows a series of +functions/methods to be executed in pipe.

+
+ +
+
+sfx2c1e()
+
+ +
+
+spin_square(mo_coeff=None, s=None)
+

Spin square and multiplicity of UHF determinant

+
+\[S^2 = \frac{1}{2}(S_+ S_- + S_- S_+) + S_z^2\]
+

where \(S_+ = \sum_i S_{i+}\) is effective for all beta occupied +orbitals; \(S_- = \sum_i S_{i-}\) is effective for all alpha occupied +orbitals.

+
    +
  1. +
    There are two possibilities for \(S_+ S_-\)
      +
    1. same electron \(S_+ S_- = \sum_i s_{i+} s_{i-}\),

    2. +
    +
    +\[\sum_i \langle UHF|s_{i+} s_{i-}|UHF\rangle + = \sum_{pq}\langle p|s_+s_-|q\rangle \gamma_{qp} = n_\alpha\]
    +

    2) different electrons \(S_+ S_- = \sum s_{i+} s_{j-}, (i\neq j)\). +There are in total \(n(n-1)\) terms. As a two-particle operator,

    +
    +\[\langle S_+ S_- \rangle = \langle ij|s_+ s_-|ij\rangle + - \langle ij|s_+ s_-|ji\rangle + = -\langle i^\alpha|j^\beta\rangle + \langle j^\beta|i^\alpha\rangle\]
    +
    +
    +
  2. +
  3. +
    Similarly, for \(S_- S_+\)
      +
    1. same electron

    2. +
    +
    +\[\sum_i \langle s_{i-} s_{i+}\rangle = n_\beta\]
    +
      +
    1. different electrons

    2. +
    +
    +\[\langle S_- S_+ \rangle = -\langle i^\beta|j^\alpha\rangle + \langle j^\alpha|i^\beta\rangle\]
    +
    +
    +
  4. +
  5. +
    For \(S_z^2\)
      +
    1. same electron

    2. +
    +
    +\[\langle s_z^2\rangle = \frac{1}{4}(n_\alpha + n_\beta)\]
    +
      +
    1. different electrons

    2. +
    +
    +\[\begin{split}&\frac{1}{2}\sum_{ij}(\langle ij|2s_{z1}s_{z2}|ij\rangle + -\langle ij|2s_{z1}s_{z2}|ji\rangle) \\ +&=\frac{1}{4}(\langle i^\alpha|i^\alpha\rangle \langle j^\alpha|j^\alpha\rangle + - \langle i^\alpha|i^\alpha\rangle \langle j^\beta|j^\beta\rangle + - \langle i^\beta|i^\beta\rangle \langle j^\alpha|j^\alpha\rangle + + \langle i^\beta|i^\beta\rangle \langle j^\beta|j^\beta\rangle) \\ +&-\frac{1}{4}(\langle i^\alpha|j^\alpha\rangle \langle j^\alpha|i^\alpha\rangle + + \langle i^\beta|j^\beta\rangle\langle j^\beta|i^\beta\rangle) \\ +&=\frac{1}{4}(n_\alpha^2 - n_\alpha n_\beta - n_\beta n_\alpha + n_\beta^2) + -\frac{1}{4}(n_\alpha + n_\beta) \\ +&=\frac{1}{4}((n_\alpha-n_\beta)^2 - (n_\alpha+n_\beta))\end{split}\]
    +
    +
    +
  6. +
+

In total

+
+\[\begin{split}\langle S^2\rangle &= \frac{1}{2} +(n_\alpha-\sum_{ij}\langle i^\alpha|j^\beta\rangle \langle j^\beta|i^\alpha\rangle ++n_\beta -\sum_{ij}\langle i^\beta|j^\alpha\rangle\langle j^\alpha|i^\beta\rangle) ++ \frac{1}{4}(n_\alpha-n_\beta)^2 \\\end{split}\]
+
+
Parameters:
+

mo – a list of 2 ndarrays +Occupied alpha and occupied beta orbitals

+
+
+
+
Kwargs:
+
sndarray

AO overlap

+
+
+
+
+
+
Returns:
+

A list of two floats. The first is the expectation value of S^2. +The second is the corresponding 2S+1

+
+
+

Examples:

+
>>> mol = gto.M(atom='O 0 0 0; H 0 0 1; H 0 1 0', basis='ccpvdz', charge=1, spin=1, verbose=0)
+>>> mf = scf.UHF(mol)
+>>> mf.kernel()
+-75.623975516256706
+>>> mo = (mf.mo_coeff[0][:,mf.mo_occ[0]>0], mf.mo_coeff[1][:,mf.mo_occ[1]>0])
+>>> print('S^2 = %.7f, 2S+1 = %.7f' % spin_square(mo, mol.intor('int1e_ovlp_sph')))
+S^2 = 0.7570150, 2S+1 = 2.0070027
+
+
+
+ +
+
+stability(internal=True, external=False, verbose=None, return_status=False)
+

Stability analysis for UHF/UKS method.

+

See also pyscf.scf.stability.uhf_stability function.

+
+
Parameters:
+

mf – UHF or UKS object

+
+
+
+
Kwargs:
+
internalbool

Internal stability, within the UHF space.

+
+
externalbool

External stability. Including the UHF -> GHF and real -> complex +stability analysis.

+
+
return_status: bool

Whether to return stable_i and stable_e

+
+
+
+
+
+
Returns:
+

If return_status is False (default), the return value includes +two set of orbitals, which are more close to the stable condition. +The first corresponds to the internal stability +and the second corresponds to the external stability.

+

Else, another two boolean variables (indicating current status: +stable or unstable) are returned. +The first corresponds to the internal stability +and the second corresponds to the external stability.

+

+
+
+
+ +
+
+stdout = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
+
+ +
+
+to_ghf()
+

Convert the input mean-field object to a GHF object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_gks(xc='HF')
+

Convert the input mean-field object to a GKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_ks(xc='HF')
+

Convert the input mean-field object to the associated KS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_rhf()
+

Convert the input mean-field object to a RHF/ROHF object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_rks(xc='HF')
+

Convert the input mean-field object to a RKS/ROKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_uhf()
+

Convert the input mean-field object to a UHF object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+to_uks(xc='HF')
+

Convert the input mean-field object to a UKS object.

+

Note this conversion only changes the class of the mean-field object. +The total energy and wave-function are the same as them in the input +mean-field object.

+
+ +
+
+update(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_from_chk(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+update_from_chk_(chkfile=None)
+

Read attributes from the chkfile then replace the attributes of +current object. It’s an alias of function update_from_chk_.

+
+ +
+
+verbose = 0
+
+ +
+
+view(cls)
+

New view of object with the same attributes.

+
+ +
+
+x2c()
+
+ +
+
+x2c1e()
+
+ +
+ +
+
+

Module contents

+

Lattice model module

+
+
+vayesta.lattmod.LatticeMF(mol, *args, **kwargs)[source]
+

Use RHF by default, unless spin is not zero.

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.libs.html b/apidoc/vayesta.libs.html new file mode 100644 index 000000000..1a881590d --- /dev/null +++ b/apidoc/vayesta.libs.html @@ -0,0 +1,137 @@ + + + + + + + vayesta.libs — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.libs

+
+

Submodules

+
+
+

vayesta.libs.libcore

+

An instance of this class represents a loaded dll/shared +library, exporting functions using the standard C calling +convention (named ‘cdecl’ on Windows).

+

The exported functions can be accessed as attributes, or by +indexing with the function name. Examples:

+

<obj>.qsort -> callable object +<obj>[‘qsort’] -> callable object

+

Calling the functions releases the Python GIL during the call and +reacquires it afterwards.

+
+
+

Module contents

+
+
+vayesta.libs.load_library(libname, required=False)[source]
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.misc.html b/apidoc/vayesta.misc.html new file mode 100644 index 000000000..59da36edc --- /dev/null +++ b/apidoc/vayesta.misc.html @@ -0,0 +1,511 @@ + + + + + + + vayesta.misc — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.misc

+
+

Subpackages

+ +
+
+

Submodules

+
+
+

vayesta.misc.brueckner

+
+
+vayesta.misc.brueckner.update_mo_coeff(mo_coeff, t1, ovlp=None, damping=0.0, diis=None)[source]
+
+ +
+
+vayesta.misc.brueckner.update_mf(mf, t1, mo_coeff=None, inplace=False, canonicalize=True, damping=0.0, diis=None)[source]
+

Update occupied MOs based on T1 amplitudes, to converge to Brueckner MOs.

+
+
Parameters:
+
    +
  • mf (pyscf.scf.SCF) – Mean-field object.

  • +
  • t1 ((n(Occ), n(Vir)) array) – T1 amplitudes (i.e. C1 in intermediate normalization).

  • +
  • mo_coeff ((n(AO), n(MO)) array, optional) – Molecular orbital coefficients. If None, mf.mo_coeff is used. Default: None.

  • +
  • inplace (bool, optional) – If True, the mf object is updated inplace and the previous MO coefficients are overwritten. Default: False.

  • +
  • canonicalize (bool or str, optional) – Diagonalize the Fock matrix within the new occupied and virtual space, to obtain quasi-canonical orbitals. +Default: False.

  • +
+
+
Returns:
+

mf – Mean-field object with updated mf.mo_coeff and mf.e_tot

+
+
Return type:
+

pyscf.scf.SCF

+
+
+
+ +
+
+

vayesta.misc.corrfunc

+

Correlation function

+
+
+vayesta.misc.corrfunc.chargecharge(dm1, dm2, proj1=None, proj2=None, subtract_indep=True)[source]
+
+ +
+
+vayesta.misc.corrfunc.spin_z(dm1, proj=None)[source]
+
+ +
+
+vayesta.misc.corrfunc.spin_z_unrestricted(dm1, proj=None)[source]
+
+ +
+
+vayesta.misc.corrfunc.spinspin_z(dm1, dm2, proj1=None, proj2=None)[source]
+
+ +
+
+vayesta.misc.corrfunc.spinspin_z_unrestricted(dm1, dm2, proj1=None, proj2=None)[source]
+
+ +
+
+vayesta.misc.corrfunc.chargecharge_mf(dm1, proj1=None, proj2=None, subtract_indep=True)[source]
+
+ +
+
+vayesta.misc.corrfunc.spinspin_z_mf(dm1, proj1=None, proj2=None)[source]
+
+ +
+
+vayesta.misc.corrfunc.spinspin_z_mf_unrestricted(dm1, proj1=None, proj2=None)[source]
+
+ +
+
+

vayesta.misc.counterpoise

+
+
+vayesta.misc.counterpoise.make_cp_mol(mol, atom, rmax, nimages=1, unit='A', **kwargs)[source]
+

Make molecule object for counterposise calculation.

+

WARNING: This has only been tested for periodic systems so far!

+
+
Parameters:
+
    +
  • mol (pyscf.gto.Mole or pyscf.pbc.gto.Cell object) – PySCF molecule or cell object.

  • +
  • atom (int) – Atom index for which the counterpoise correction should be calculated. +TODO: allow list of atoms.

  • +
  • rmax (float) – All atom centers within range rmax are added as ghost-atoms in the counterpoise correction.

  • +
  • nimages (int, optional) – Number of neighboring unit cell in each spatial direction. Has no effect in open boundary +calculations. Default: 1.

  • +
  • unit (['A', 'B', 'a1', 'a2', 'a3']) – Unit for rmax, either Angstrom (A), Bohr (B), or a lattice vector (‘a1’, ‘a2’, ‘a3’).

  • +
  • **kwargs – Additional keyword arguments for returned PySCF Mole/Cell object.

  • +
+
+
Returns:
+

mol_cp – Mole or Cell object with periodic boundary conditions removed +and with ghost atoms added depending on rmax and nimages.

+
+
Return type:
+

pyscf.gto.Mole or pyscf.pbc.gto.Cell

+
+
+
+ +
+
+

vayesta.misc.cptbisect

+
+
+class vayesta.misc.cptbisect.ChempotBisection(func, cpt_init=0.0, tol=1e-08, maxiter=30, robust=False, log=None)[source]
+

Bases: object

+
+
+kernel(*args, **kwargs)[source]
+
+ +
+ +
+
+

vayesta.misc.cubefile

+

Modified from PySCF - at the moment only for PBC systems

+
+
+class vayesta.misc.cubefile.CubeFile(cell, filename=None, gridsize=(100, 100, 100), resolution=None, title=None, comment=None, fmt='%13.5E', crop=None)[source]
+

Bases: object

+
+
+property has_pbc
+
+ +
+
+get_box_and_origin()[source]
+
+ +
+
+get_coords()[source]
+
+ +
+
+property ncoords
+

Number of grod points.

+
+ +
+
+property nfields
+

Number of datasets (orbitals + density matrices).

+
+ +
+
+save_state(filename)[source]
+
+ +
+
+classmethod load_state(filename, cell=None)[source]
+
+ +
+
+add_orbital(coeff, dset_idx=None)[source]
+

Add one or more orbitals to the cube file.

+
+
Parameters:
+
    +
  • coeff – AO coefficients of orbitals. Supports adding a single orbitals, +where coeff is a one-dimensional array, or multiple orbitals, +in which case the second dimension of coeff labels the orbitals.

  • +
  • dset_idx (int, optional) – Dataset index of orbital(s). In the application, the orbitals will +be labelled as ‘Orbital <dset_idx>’ or similar. If set to None, +the smallest unused, positive integer will be used. Default: None.

  • +
+
+
+
+ +
+
+add_density(dm, dset_idx=None)[source]
+

Add one or more densities to the cube file.

+
+
Parameters:
+
    +
  • dm ((N,N) or (M,N,N) array) – Density-matrix in AO-representation. Supports adding a single density-matrix, +where dm is a two-dimensional array, or multiple density-matrices, +in which case the first dimension of dm labels the matrices.

  • +
  • dset_idx (int, optional) – Dataset index of density-matrix. In the application, the density-matrix will +be labelled as ‘Orbital <dset_idx>’ or similar. If set to None, +the smallest unused, positive integer will be used. Default: None.

  • +
+
+
+
+ +
+
+add_mep(dm, dset_idx=None)[source]
+
+ +
+
+write(filename=None)[source]
+
+ +
+
+write_header(filename, dset_ids=None)[source]
+

Write header of cube-file.

+
+ +
+
+write_fields(filename)[source]
+

Write voxel data of registered fields in self.fields to cube-file.

+
+ +
+ +
+
+

vayesta.misc.gto_helper

+
+
+vayesta.misc.gto_helper.loop_neighbor_cells(lattice_vectors=None, dimension=3)[source]
+
+ +
+
+vayesta.misc.gto_helper.get_atom_distances(mol, point, dimension=None)[source]
+

Get array containing the distances of all atoms to the specified point.

+
+
Parameters:
+
    +
  • mol (PySCF Mole or Cell object) –

  • +
  • point (Array(3)) –

  • +
+
+
Returns:
+

Distances

+
+
Return type:
+

Array(n(atom))

+
+
+
+ +
+
+vayesta.misc.gto_helper.get_atom_shells(mol, point, dimension=None, decimals=5)[source]
+
+ +
+
+vayesta.misc.gto_helper.make_counterpoise_fragments(mol, fragments, full_basis=True, add_rest_fragment=True, dump_input=True)[source]
+

Make mol objects for counterpoise calculations.

+
+
Parameters:
+
    +
  • fragments (iterable) –

  • +
  • full_basis (bool, optional) –

  • +
  • add_rest_fragment (bool, optional) –

  • +
+
+
Returns:
+

fmols

+
+
Return type:
+

list

+
+
+
+ +
+
+

vayesta.misc.pcdiis

+
+
+class vayesta.misc.pcdiis.PCDIIS(pref, *args, **kwargs)[source]
+

Bases: DIIS

+

https://doi.org/10.1021/acs.jctc.7b00892

+
+
+update(x)[source]
+

Extrapolate vector

+
    +
  • If xerr the error vector is given, this function will push the target

  • +
+

vector and error vector in the DIIS subspace, and use the error vector +to extrapolate the vector and return the extrapolated vector. +* If xerr is None, this function will take the difference between +the current given vector and the last given vector as the error +vector to extrapolate the vector.

+
+ +
+
+extrapolate(nd=None)
+
+ +
+
+get_err_vec(idx)
+
+ +
+
+get_num_vec()
+
+ +
+
+get_vec(idx)
+
+ +
+
+push_err_vec(xerr)
+
+ +
+
+push_vec(x)
+
+ +
+
+restore(filename, inplace=True)
+

Read diis contents from a diis file and replace the attributes of +current diis object if needed, then construct the vector.

+
+ +
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.misc.molecules.html b/apidoc/vayesta.misc.molecules.html new file mode 100644 index 000000000..ae21804a7 --- /dev/null +++ b/apidoc/vayesta.misc.molecules.html @@ -0,0 +1,231 @@ + + + + + + + vayesta.misc.molecules — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.misc.molecules

+
+

Submodules

+
+
+

vayesta.misc.molecules.molecules

+
+
+vayesta.misc.molecules.molecules.water(atoms=['O', 'H'], origin=(0, 0, 0), scale=1)[source]
+
+ +
+
+vayesta.misc.molecules.molecules.alkane(n, atoms=['C', 'H'], cc_bond=1.54, ch_bond=1.09, scale=1.0, numbering=False)[source]
+

Alkane with idealized tetrahedral (sp3) coordination.

+
+ +
+
+vayesta.misc.molecules.molecules.alkene(ncarbon, cc_bond=1.33, ch_bond=1.09)[source]
+

Alkene with idealized trigonal planar (sp2) coordination.

+
+ +
+
+vayesta.misc.molecules.molecules.arene(n, atoms=['C', 'H'], cc_bond=1.39, ch_bond=1.09, unit=1.0)[source]
+

Bond length for benzene.

+
+ +
+
+vayesta.misc.molecules.molecules.no2()[source]
+
+ +
+
+vayesta.misc.molecules.molecules.ethanol(oh_bond=None, scale=1)[source]
+
+ +
+
+vayesta.misc.molecules.molecules.ketene(cc_bond=None)[source]
+
+ +
+
+vayesta.misc.molecules.molecules.ring(atom, natom, bond_length=None, radius=None, z=0.0, numbering=None)[source]
+
+ +
+
+vayesta.misc.molecules.molecules.chain(atom, natom, bond_length, numbering=None)[source]
+

Open boundary condition version of 1D ring

+
+ +
+
+vayesta.misc.molecules.molecules.acetic_acid()[source]
+
+ +
+
+vayesta.misc.molecules.molecules.ferrocene_b3lyp()[source]
+
+ +
+
+vayesta.misc.molecules.molecules.ferrocene(atoms=['Fe', 'C', 'H'], conformation='eclipsed', dFeCp=1.648, dCC=1.427, dCH=1.079, aCpH=0.52, numbering=None)[source]
+

From https://pubs.acs.org/doi/pdf/10.1021/ct700152c

+
+ +
+
+vayesta.misc.molecules.molecules.propyl()[source]
+
+ +
+
+vayesta.misc.molecules.molecules.phenyl()[source]
+
+ +
+
+vayesta.misc.molecules.molecules.propanol()[source]
+
+ +
+
+vayesta.misc.molecules.molecules.chloroethanol()[source]
+
+ +
+
+vayesta.misc.molecules.molecules.neopentane()[source]
+

Structure from B3LYP//aug-cc-pVTZ.

+
+ +
+
+vayesta.misc.molecules.molecules.boronene()[source]
+
+ +
+
+vayesta.misc.molecules.molecules.coronene()[source]
+
+ +
+
+vayesta.misc.molecules.molecules.glycine()[source]
+
+ +
+
+

Module contents

+

Molecular structures

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.misc.solids.html b/apidoc/vayesta.misc.solids.html new file mode 100644 index 000000000..26f71c2e6 --- /dev/null +++ b/apidoc/vayesta.misc.solids.html @@ -0,0 +1,174 @@ + + + + + + + vayesta.misc.solids — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.misc.solids

+
+

Submodules

+
+
+

vayesta.misc.solids.solids

+
+
+vayesta.misc.solids.solids.bcc(atoms, a)[source]
+

Body-centered cubic. +Li: 3.51 A

+
+ +
+
+vayesta.misc.solids.solids.diamond(atoms=['C', 'C'], a=3.57)[source]
+

Silicon: a=5.431 A

+
+ +
+
+vayesta.misc.solids.solids.graphene(atoms=['C', 'C'], a=2.46, c=20.0)[source]
+

hBN: a=2.5A +hBeO: a=2.68A (VASP)

+
+ +
+
+vayesta.misc.solids.solids.graphite(atoms=['C', 'C', 'C', 'C'], a=2.461, c=6.708)[source]
+

a = 2.461 A , c = 6.708 A

+
+ +
+
+vayesta.misc.solids.solids.rocksalt(atoms=['Na', 'Cl'], a=5.6402, unitcell='primitive')[source]
+

LiH: a=4.0834 +LiF: a=4.0351

+
+ +
+
+vayesta.misc.solids.solids.perovskite(atoms=['Sr', 'Ti', 'O'], a=3.905)[source]
+
+ +
+
+vayesta.misc.solids.solids.perovskite_tetragonal(atoms=['Sr', 'Ti', 'O'], a=5.507, c=7.796, u=0.241)[source]
+

This is the crystallographic (‘quadruple’) cell, not the primitive (‘double’) cell.

+

Lattice constants from PHYSICAL REVIEW MATERIALS 2, 013807 (2018). +DOI:10.1103/PhysRevMaterials.2.013807

+

becomes cubic with parameters: +a = 5.522 A, c = 2a0 = 7.810 A , u = 0.25 +(see DOI: 10.1103/PhysRevB.83.134108)

+
+ +
+
+

Module contents

+

Solid structures

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.mpi.html b/apidoc/vayesta.mpi.html new file mode 100644 index 000000000..9a400dbdc --- /dev/null +++ b/apidoc/vayesta.mpi.html @@ -0,0 +1,380 @@ + + + + + + + vayesta.mpi — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.mpi

+
+

Submodules

+
+
+

vayesta.mpi.interface

+
+
+class vayesta.mpi.interface.NdArrayMetadata(shape, dtype)
+

Bases: tuple

+
+
+count(value, /)
+

Return number of occurrences of value.

+
+ +
+
+dtype
+

Alias for field number 1

+
+ +
+
+index(value, start=0, stop=9223372036854775807, /)
+

Return first index of value.

+

Raises ValueError if the value is not present.

+
+ +
+
+shape
+

Alias for field number 0

+
+ +
+ +
+
+class vayesta.mpi.interface.MPI_Interface(mpi, required=False, log=None)[source]
+

Bases: object

+
+
+property enabled
+
+ +
+
+property disabled
+
+ +
+
+property is_master
+
+ +
+
+get_new_tag()[source]
+
+ +
+
+nreduce(*args, target=None, logfunc=None, **kwargs)[source]
+

(All)reduce multiple arguments.

+

TODO: +* Use Allreduce/Reduce for NumPy types +* combine multiple *args of same dtype into a single array, +to reduce communication overhead.

+
+ +
+
+bcast(obj, root=0)[source]
+

Common function to broadcast NumPy arrays or general objects.

+
+
Parameters:
+
    +
  • obj (ndarray or Any) – Array or object to be broadcasted.

  • +
  • root (int) – Root MPI process.

  • +
+
+
Returns:
+

obj – Broadcasted array or object.

+
+
Return type:
+

ndarray or Any

+
+
+
+ +
+
+with_reduce(**mpi_kwargs)[source]
+
+ +
+
+with_allreduce(**mpi_kwargs)[source]
+
+ +
+
+only_master()[source]
+
+ +
+
+with_send(source, dest=0, tag=None, **mpi_kwargs)[source]
+
+ +
+
+create_rma_dict(dictionary)[source]
+
+ +
+
+scf(mf, mpi_rank=0, log=None)[source]
+
+ +
+
+gdf(df, mpi_rank=0, log=None)[source]
+
+ +
+ +
+
+

vayesta.mpi.rma

+
+
+class vayesta.mpi.rma.RMA_Dict(mpi)[source]
+

Bases: object

+
+
+classmethod from_dict(mpi, dictionary)[source]
+
+ +
+
+class RMA_DictElement(collection, location, data=None, shape=None, dtype=None)[source]
+

Bases: object

+
+
+local_init(data)[source]
+
+ +
+
+remote_init()[source]
+
+ +
+
+property size
+
+ +
+
+get(shared_lock=True)[source]
+
+ +
+
+property mpi
+
+ +
+
+rma_lock(shared_lock=False, **kwargs)[source]
+
+ +
+
+rma_unlock(**kwargs)[source]
+
+ +
+
+rma_put(data, **kwargs)[source]
+
+ +
+
+rma_get(buf, **kwargs)[source]
+
+ +
+
+free()[source]
+
+ +
+ +
+
+property readable
+
+ +
+
+clear()[source]
+
+ +
+
+writable()[source]
+
+ +
+
+keys()[source]
+
+ +
+
+values()[source]
+
+ +
+
+get_location(key)[source]
+
+ +
+
+get_shape(key)[source]
+
+ +
+
+get_dtype(key)[source]
+
+ +
+
+synchronize()[source]
+

Synchronize keys and metadata over all MPI ranks.

+
+ +
+ +
+
+

vayesta.mpi.scf

+
+
+vayesta.mpi.scf.scf_with_mpi(mpi, mf, mpi_rank=0, log=None)[source]
+

Use to run SCF only on the master node and broadcast result afterwards.

+
+ +
+
+vayesta.mpi.scf.gdf_with_mpi(mpi, df, mpi_rank=0, log=None)[source]
+
+ +
+
+

Module contents

+
+
+vayesta.mpi.init_mpi(use_mpi, required=True)[source]
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.rpa.html b/apidoc/vayesta.rpa.html new file mode 100644 index 000000000..bbc926608 --- /dev/null +++ b/apidoc/vayesta.rpa.html @@ -0,0 +1,902 @@ + + + + + + + vayesta.rpa — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.rpa

+
+

Subpackages

+
+ +
+
+
+

Submodules

+
+
+

vayesta.rpa.rpa

+

Straightforward N^6 implementation for RPA in a finite basis set with arbitrary interaction kernel, based upon the +standard Hermitian reformulation used in TDHF approaches. +Note that we only use the spin-block formulation of all matrices, rather than full spin-adaptation, which means our +final diagonalisation is 2^3=8 times more expensive than hypothetically possible. However, this code is only for +comparison.

+
+
+class vayesta.rpa.rpa.RPA(mf, log=None)[source]
+

Bases: object

+

Approach based on equations expressed succinctly in the appendix of +Furche, F. (2001). PRB, 64(19), 195120. https://doi.org/10.1103/PhysRevB.64.195120 +WARNING: Should only be used with canonical mean-field orbital coefficients in mf.mo_coeff and RHF.

+
+
+property nocc
+
+ +
+
+property nvir
+
+ +
+
+property ov
+
+ +
+
+property e_corr
+
+ +
+
+property e_tot
+
+ +
+
+kernel(xc_kernel='rpax')[source]
+

Solve for RPA response; solve same-spin (ss) and spin-flip (sf) separately. +If doing dRPA spin-flip is trivial, so for large calculations use dRPA specific

+
+ +
+
+get_interaction_kernel(xc_kernel='rpax', tda=False)[source]
+

Construct the required components of the interaction kernel, separated into same-spin and spin-flip +components, as well as spin contributions for A+B and A-B. +The results is a length-4 tuple, giving the spin components of respectively

+
+

(ss K_(A+B), ss K_(A-B), sf K_(A+B), sf K_(A-B)).

+
+

In RHF both contributions both only have two distinct spin components, so there are a total of +8 distinct spatial kernels for a general interaction. +For spin contributions we use the orderings

+
+

-(aaaa, aabb) for ss contributions. +-(abab, abba) for st contributions (ie, whether the particle states have the

+
+

same spin in both pairs or not). Sorry for clunky description…

+
+
+

If TDA is specified all appropriate couplings will be zeroed.

+
+ +
+
+property mo_coeff
+
+ +
+
+property nao
+
+ +
+
+ao2mo()[source]
+

Get the ERIs in MO basis

+
+ +
+ +
+
+

vayesta.rpa.ssrpa

+

Straightforward N^6 implementation for dRPA in a basis set, based upon the standard Hermitian reformulation +used in TDHF approaches.

+
+
+class vayesta.rpa.ssrpa.ssRPA(mf, log=None, ov_rot=None)[source]
+

Bases: object

+

Approach based on equations expressed succinctly in the appendix of +Furche, F. (2001). PRB, 64(19), 195120. https://doi.org/10.1103/PhysRevB.64.195120 +WARNING: Should only be used with canonical mean-field orbital coefficients in mf.mo_coeff and RHF.

+
+
+property nocc
+
+ +
+
+property nvir
+
+ +
+
+property ov
+
+ +
+
+property ova
+
+ +
+
+property ovb
+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+property e_corr
+
+ +
+
+property e_tot
+
+ +
+
+kernel(xc_kernel=None, alpha=1.0)[source]
+

Solve same-spin component of dRPA response. +At level of dRPA this is the only contribution to correlation energy; introduction of exchange will lead to +spin-flip contributions.

+
+ +
+
+calc_energy_correction(xc_kernel, version=3)[source]
+
+ +
+
+get_k()[source]
+
+ +
+
+get_xc_contribs(xc_kernel, c_o, c_v, alpha=1.0)[source]
+
+ +
+
+gen_moms(max_mom, xc_kernel=None)[source]
+
+ +
+
+property mo_coeff
+
+ +
+
+property nao
+
+ +
+
+ao2mo(mo_coeff=None, compact=False)[source]
+

Get the ERIs in MO basis

+
+ +
+ +
+
+vayesta.rpa.ssrpa.ssRRPA
+

alias of ssRPA

+
+ +
+
+

vayesta.rpa.ssurpa

+
+
+class vayesta.rpa.ssurpa.ssURPA(mf, log=None, ov_rot=None)[source]
+

Bases: ssRPA

+
+
+property norb
+
+ +
+
+property nocc
+
+ +
+
+property nvir
+
+ +
+
+property ova
+
+ +
+
+property ovb
+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+get_k()[source]
+
+ +
+
+ao2mo(mo_coeff=None)[source]
+

Get the ERIs in MO basis

+
+ +
+
+calc_energy_correction(xc_kernel, version=3)
+
+ +
+
+property e_corr
+
+ +
+
+property e_tot
+
+ +
+
+gen_moms(max_mom, xc_kernel=None)
+
+ +
+
+get_xc_contribs(xc_kernel, c_o, c_v, alpha=1.0)
+
+ +
+
+kernel(xc_kernel=None, alpha=1.0)
+

Solve same-spin component of dRPA response. +At level of dRPA this is the only contribution to correlation energy; introduction of exchange will lead to +spin-flip contributions.

+
+ +
+
+property mo_coeff
+
+ +
+
+property nao
+
+ +
+
+property ov
+
+ +
+ +
+
+

Module contents

+

Random Phase Approximation (RPA) +Author: Charles Scott +email: cjcargillscott@gmail.com

+
+
+vayesta.rpa.ssRPA(mf, *args, **kwargs)[source]
+

Determine restricted or unrestricted by inspection of mean-field object

+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.rpa.rirpa.html b/apidoc/vayesta.rpa.rirpa.html new file mode 100644 index 000000000..0bb13e41a --- /dev/null +++ b/apidoc/vayesta.rpa.rirpa.html @@ -0,0 +1,2825 @@ + + + + + + + vayesta.rpa.rirpa — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.rpa.rirpa

+
+

Submodules

+
+
+

vayesta.rpa.rirpa.NI_eval

+
+
+exception vayesta.rpa.rirpa.NI_eval.NIException[source]
+

Bases: BaseException

+
+
+args
+
+ +
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+class vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase(out_shape, diag_shape, npoints, log)[source]
+

Bases: object

+

Abstract base class for numerical integration over semi-infinite and infinite limits. +Subclasses implementing a specific quadrature need to define

+
+
Subclasses implementing specific evaluations need to define:

.eval_contrib +.eval_diag_contrib +.eval_diag_deriv_contrib +.eval_diag_deriv2_contrib +.eval_diag_exact

+
+
+

A new .__init__ assigning any required attributes and a .fix_params may also be required, depending upon the +particular form of the integral to be approximated. +Might be able to write this as a factory class, but this’ll do for now.

+
+
+property npoints
+
+ +
+
+get_quad(a)[source]
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+eval_contrib(freq)[source]
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+eval_diag_contrib(freq)[source]
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)[source]
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)[source]
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()[source]
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+eval_NI_approx(a)[source]
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_diag_NI_approx(a)[source]
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_grad(a)[source]
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)[source]
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+test_diag_derivs(a, delta=1e-06)[source]
+
+ +
+
+opt_quadrature_diag(ainit=None)[source]
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+fix_params()[source]
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_offset()[source]
+
+ +
+
+kernel(a=None, opt_quad=True)[source]
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()[source]
+
+ +
+
+l2_scan(freqs)[source]
+
+ +
+
+max_scan(freqs)[source]
+
+ +
+
+get_quad_vals(a, l2norm=True)[source]
+
+ +
+ +
+
+class vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur(out_shape, diag_shape, npoints, log)[source]
+

Bases: NumericalIntegratorBase

+
+
+property npoints
+
+ +
+
+calculate_error(a, b)[source]
+

Calculate error by solving cubic equation to model convergence as lpha e^{-eta n_p}. +This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so +generally overestimates the resulting error, which suits us well. +This also overestimates the error since it doesn’t account for the effect of quadrature grid optimisation, which +leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter.

+

This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104.

+

To understand the general behaviour of this approach, we can instead consider the simpler approximation that +the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of +the error resulting from our most accurate estimate as

+
+

error = b ** 3 / a ** 2

+
+
+
with the error in this approximation given by

error_error = b ** 2 / a ** 2.

+
+
+
+ +
+
+eval_NI_approx(a)[source]
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_contrib(freq)
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_contrib(freq)
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_offset()
+
+ +
+
+get_quad(a)
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+class vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite(out_shape, diag_shape, npoints, log, even)[source]
+

Bases: NumericalIntegratorClenCur

+
+
+get_quad(a)[source]
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+calculate_error(a, b)
+

Calculate error by solving cubic equation to model convergence as lpha e^{-eta n_p}. +This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so +generally overestimates the resulting error, which suits us well. +This also overestimates the error since it doesn’t account for the effect of quadrature grid optimisation, which +leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter.

+

This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104.

+

To understand the general behaviour of this approach, we can instead consider the simpler approximation that +the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of +the error resulting from our most accurate estimate as

+
+

error = b ** 3 / a ** 2

+
+
+
with the error in this approximation given by

error_error = b ** 2 / a ** 2.

+
+
+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_contrib(freq)
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_contrib(freq)
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_offset()
+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+class vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite(out_shape, diag_shape, npoints, log)[source]
+

Bases: NumericalIntegratorClenCur

+
+
+get_quad(a)[source]
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+calculate_error(a, b)
+

Calculate error by solving cubic equation to model convergence as lpha e^{-eta n_p}. +This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so +generally overestimates the resulting error, which suits us well. +This also overestimates the error since it doesn’t account for the effect of quadrature grid optimisation, which +leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter.

+

This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104.

+

To understand the general behaviour of this approach, we can instead consider the simpler approximation that +the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of +the error resulting from our most accurate estimate as

+
+

error = b ** 3 / a ** 2

+
+
+
with the error in this approximation given by

error_error = b ** 2 / a ** 2.

+
+
+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_contrib(freq)
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_contrib(freq)
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_offset()
+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+class vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite(out_shape, diag_shape, npoints, log)[source]
+

Bases: NumericalIntegratorBase

+
+
+property npoints
+
+ +
+
+get_quad(a)[source]
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_contrib(freq)
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_contrib(freq)
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_offset()
+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+vayesta.rpa.rirpa.NI_eval.gen_ClenCur_quad_inf(a, npoints, even=False)[source]
+

Generate quadrature points and weights for Clenshaw-Curtis quadrature over infinite range (-inf to +inf)

+
+ +
+
+vayesta.rpa.rirpa.NI_eval.gen_ClenCur_quad_semiinf(a, npoints)[source]
+

Generate quadrature points and weights for Clenshaw-Curtis quadrature over semiinfinite range (0 to +inf)

+
+ +
+
+class vayesta.rpa.rirpa.NI_eval.NICheckInf(exponent, npoints)[source]
+

Bases: NumericalIntegratorClenCurInfinite

+
+
+calculate_error(a, b)
+

Calculate error by solving cubic equation to model convergence as lpha e^{-eta n_p}. +This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so +generally overestimates the resulting error, which suits us well. +This also overestimates the error since it doesn’t account for the effect of quadrature grid optimisation, which +leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter.

+

This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104.

+

To understand the general behaviour of this approach, we can instead consider the simpler approximation that +the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of +the error resulting from our most accurate estimate as

+
+

error = b ** 3 / a ** 2

+
+
+
with the error in this approximation given by

error_error = b ** 2 / a ** 2.

+
+
+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_contrib(freq)
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_offset()
+
+ +
+
+get_quad(a)
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+
+eval_contrib(freq)[source]
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+ +
+
+

vayesta.rpa.rirpa.RIRPA

+
+
+class vayesta.rpa.rirpa.RIRPA.ssRIRPA(dfmf, rixc=None, log=None, err_tol=1e-06, svd_tol=1e-12, Lpq=None, compress=0)[source]
+

Bases: object

+

Approach based on equations expressed succinctly in the appendix of +Furche, F. (2001). PRB, 64(19), 195120. https://doi.org/10.1103/PhysRevB.64.195120 +WARNING: Should only be used with canonical mean-field orbital coefficients in mf.mo_coeff and RHF.

+
+
Parameters:
+
    +
  • dfmf (pyscf.scf.SCF) – PySCF density-fitted mean-field object.

  • +
  • rixc (tuple of tuples or arrays, optional) – low-rank decomposition of exchange-correlation kernel. First tuple separates two different spin channels, and +the second the left- and right-sides of an asymmetric decomposition. Default value is None.

  • +
  • log (logging object, optional) – Default value is None.

  • +
  • err_tol (float, optional) – Threshold defining estimated error at which to print various accuracy warnings. +Default value is 1e-6.

  • +
  • svd_tol (float, optional) – Threshold defining negligible singular values when compressing various decompositions. +Default value is 1e-12.

  • +
  • Lpq (np.ndarray, optional) – CDERIs in mo basis of provided mean field. +Default value is None.

  • +
  • compress (int, optional) – How thoroughly to attempt compression of the low-rank representations of various matrices. +Thresholds are: +- above 0: Compress representation of (A+B)(A-B) once constructed, prior to main calculation. +- above 3: Compress representations of A+B and A-B separately prior to constructing (A+B)(A-B) or (A+B)^{-1} +- above 5: Compress representation of (A+B)^{-1} prior to contracting. This is basically never worthwhile. +Note that in all cases these compressions will have computational cost O(N_{aux}^2 ov), the same as our later +computations, and so a tradeoff must be made between reducing the N_{aux} in later calculations vs the cost +of compression. Default value is 0.

  • +
+
+
+
+
+property nocc
+
+ +
+
+property nvir
+
+ +
+
+property naux_eri
+
+ +
+
+property ov
+
+ +
+
+property ov_tot
+
+ +
+
+property mo_coeff
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_energy
+
+ +
+
+property mo_energy_occ
+
+ +
+
+property mo_energy_vir
+
+ +
+
+property e_corr
+
+ +
+
+property e_tot
+
+ +
+
+property D
+
+ +
+
+kernel_moms(max_moment, target_rot=None, **kwargs)[source]
+

Calculates all density-density moments up to and including `max_moment’ with one index projected into +`target_rot’ space. +For details of numerical integration approach see https://arxiv.org/abs/2301.09107.

+

Runtime: O(n_{points} ((n_{target} + n_{aux}) n_{aux} ov + n_{aux}^3)

+
+
Parameters:
+
    +
  • max_moment (int) – Maximum moment of the dd response to return.

  • +
  • target_rot (array_like, of size (n_{target}, o_a v_a + o_b v_b)) – Projector for one index of the moment.

  • +
  • npoints (int, optional.) – Integer number of points to use in numerical integrations; will be increased to next highest multiple of +4 for error estimation purposes. Default: 48 (excessive).

  • +
  • integral_deduct (str, optional.) – What terms to deduct from numerical integration. +Options are “HO” (default), “D”, and None, corresponding to deducting both the mean-field contribution +and additional higher-order terms, just the mean-field contribution, or nothing. +For discussion of the specific approaches see Appendix A of https://arxiv.org/abs/2301.09107.

  • +
  • ainit (float, optional.) – Value of grid scaling to initialise optimisation from. If `opt_quad’ is False, this value of a is used. +Default: 10.0

  • +
  • opt_quad (bool, optional.) – Whether to optimise the grid spacing `a’. Default: True

  • +
  • adaptive_quad (bool, optional.) – Whether to use scipy adaptive quadrature for calculation. Requires prohibitively more evaluations but can +provide validation of usual approach. Default: False

  • +
  • alpha (float, optional.) – Value or electron interaction scaling in adiabatic connection. Default: 1.0

  • +
  • ri_decomps (iterable of three tuples of array_like or None, optional.) – Low-rank RI expressions (S_L,S_R) for (A-B)(A+B), A+B and A-B, such that the non-diagonal contribution +to each is given by S_L S_R^T. If `None’ these will be contructed at O(N^4) cost. Default: None

  • +
  • analytic_lower_bound (bool, optional.) – Whether to compute analytic lower bound on the error of the computed zeroth dd moment. Computation +requires O(N^4) operation, and given limited utility of lower bound this is optional. +Default: False.

  • +
+
+
Returns:
+

    +
  • moments (array_like, shape (max_moment + 1, n_{tar}, o_a v_a + o_b v_b)) – Array storing the i^th dd moment in the space defined by `target_rot’ in moments[i].

  • +
  • err0 (tuple.) – Bounds on the error, in form (upper_bound, lower_bound). If `analytic_lower_bound’=False lower bound +will be None.

  • +
+

+
+
+
+ +
+
+test_eta0_error(mom0, target_rot, ri_apb, ri_amb)[source]
+
+
Test how well our obtained zeroth moment obeys relation used to derive it, namely

A-B = eta0 (A+B) eta0

+
+
+

From this we can estimate the error in eta0 using Cauchy-Schwartz. +For details see Appendix B of https://arxiv.org/abs/2301.09107, Eq. 96-99.

+
+ +
+
+kernel_trMPrt(npoints=48, ainit=10)[source]
+

Evaluate Tr((MP)^(1/2)).

+
+ +
+
+kernel_energy(npoints=48, ainit=10, correction='linear')[source]
+
+ +
+
+direct_AC_integration(local_rot=None, fragment_projectors=None, deg=5, npoints=48, cluster_constrain=False)[source]
+

Perform direct integration of the adiabatic connection for RPA correlation energy. +This will be preferable when the xc kernel is comparable or larger in magnitude to the coulomb kernel, as it +only requires evaluation of the moment and not its inverse. +local_rot describes the rotation of the ov-excitations to the space of local excitations within a cluster, while +fragment_projectors gives the projector within this local excitation space to the actual fragment.

+
+ +
+
+get_gap(calc_xy=False, tol_eig=0.01, max_space=12, nroots=1, **kwargs)[source]
+

Calculate the RPA gap using a Davidson solver. First checks that A+B and A-B are PSD by calculating their +lowest eigenvalues. For a fixed number of eigenvalues in each case this scales as O(N^3), so shouldn’t be +prohibitively expensive.

+
+ +
+
+get_compressed_MP(alpha=1.0)[source]
+
+ +
+
+check_errors(error, nelements)[source]
+
+ +
+
+construct_RI_AB()[source]
+

Construct the RI expressions for the deviation of A+B and A-B from D.

+
+ +
+
+compress_low_rank(ri_l, ri_r, name=None)[source]
+
+ +
+
+get_apb_eri_ri()[source]
+
+ +
+
+get_ab_xc_ri()[source]
+
+ +
+
+get_3c_integrals()[source]
+
+ +
+
+test_spectral_rep(freqs)[source]
+
+ +
+ +
+
+vayesta.rpa.rirpa.RIRPA.construct_product_RI(D, ri_1, ri_2)[source]
+

Given two matrices expressed as low-rank modifications, cderi_1 and cderi_2, of some full-rank matrix D, +construct the RI expression for the deviation of their product from D**2. +The rank of the resulting deviation is at most the sum of the ranks of the original modifications.

+
+ +
+
+vayesta.rpa.rirpa.RIRPA.construct_inverse_RI(D, ri)[source]
+
+ +
+
+vayesta.rpa.rirpa.RIRPA.compress_low_rank(ri_l, ri_r, tol=1e-12, log=None, name=None)[source]
+
+ +
+
+vayesta.rpa.rirpa.RIRPA.ssRIRRPA
+

alias of ssRIRPA

+
+ +
+
+

vayesta.rpa.rirpa.RIURPA

+
+
+class vayesta.rpa.rirpa.RIURPA.ssRIURPA(dfmf, rixc=None, log=None, err_tol=1e-06, svd_tol=1e-12, Lpq=None, compress=0)[source]
+

Bases: ssRIRPA

+
+
+property mo_occ
+
+ +
+
+property nmo
+

Total number of molecular orbitals (MOs).

+
+ +
+
+property nocc
+

Number of occupied MOs.

+
+ +
+
+property nvir
+

Number of virtual MOs.

+
+ +
+
+property naux_eri
+
+ +
+
+property mo_coeff
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_occ
+

Occupied MO coefficients.

+
+ +
+
+property mo_coeff_vir
+

Virtual MO coefficients.

+
+ +
+
+property mo_energy
+
+ +
+
+property mo_energy_occ
+
+ +
+
+property mo_energy_vir
+
+ +
+
+property ov
+
+ +
+
+property ov_tot
+
+ +
+
+property D
+
+ +
+
+construct_RI_AB()[source]
+

Construct the RI expressions for the deviation of A+B and A-B from D.

+
+ +
+
+get_apb_eri_ri()[source]
+
+ +
+
+get_ab_xc_ri()[source]
+
+ +
+
+check_errors(error, nelements)
+
+ +
+
+compress_low_rank(ri_l, ri_r, name=None)
+
+ +
+
+direct_AC_integration(local_rot=None, fragment_projectors=None, deg=5, npoints=48, cluster_constrain=False)
+

Perform direct integration of the adiabatic connection for RPA correlation energy. +This will be preferable when the xc kernel is comparable or larger in magnitude to the coulomb kernel, as it +only requires evaluation of the moment and not its inverse. +local_rot describes the rotation of the ov-excitations to the space of local excitations within a cluster, while +fragment_projectors gives the projector within this local excitation space to the actual fragment.

+
+ +
+
+property e_corr
+
+ +
+
+property e_tot
+
+ +
+
+get_3c_integrals()
+
+ +
+
+get_compressed_MP(alpha=1.0)
+
+ +
+
+get_gap(calc_xy=False, tol_eig=0.01, max_space=12, nroots=1, **kwargs)
+

Calculate the RPA gap using a Davidson solver. First checks that A+B and A-B are PSD by calculating their +lowest eigenvalues. For a fixed number of eigenvalues in each case this scales as O(N^3), so shouldn’t be +prohibitively expensive.

+
+ +
+
+kernel_energy(npoints=48, ainit=10, correction='linear')
+
+ +
+
+kernel_moms(max_moment, target_rot=None, **kwargs)
+

Calculates all density-density moments up to and including `max_moment’ with one index projected into +`target_rot’ space. +For details of numerical integration approach see https://arxiv.org/abs/2301.09107.

+

Runtime: O(n_{points} ((n_{target} + n_{aux}) n_{aux} ov + n_{aux}^3)

+
+
Parameters:
+
    +
  • max_moment (int) – Maximum moment of the dd response to return.

  • +
  • target_rot (array_like, of size (n_{target}, o_a v_a + o_b v_b)) – Projector for one index of the moment.

  • +
  • npoints (int, optional.) – Integer number of points to use in numerical integrations; will be increased to next highest multiple of +4 for error estimation purposes. Default: 48 (excessive).

  • +
  • integral_deduct (str, optional.) – What terms to deduct from numerical integration. +Options are “HO” (default), “D”, and None, corresponding to deducting both the mean-field contribution +and additional higher-order terms, just the mean-field contribution, or nothing. +For discussion of the specific approaches see Appendix A of https://arxiv.org/abs/2301.09107.

  • +
  • ainit (float, optional.) – Value of grid scaling to initialise optimisation from. If `opt_quad’ is False, this value of a is used. +Default: 10.0

  • +
  • opt_quad (bool, optional.) – Whether to optimise the grid spacing `a’. Default: True

  • +
  • adaptive_quad (bool, optional.) – Whether to use scipy adaptive quadrature for calculation. Requires prohibitively more evaluations but can +provide validation of usual approach. Default: False

  • +
  • alpha (float, optional.) – Value or electron interaction scaling in adiabatic connection. Default: 1.0

  • +
  • ri_decomps (iterable of three tuples of array_like or None, optional.) – Low-rank RI expressions (S_L,S_R) for (A-B)(A+B), A+B and A-B, such that the non-diagonal contribution +to each is given by S_L S_R^T. If `None’ these will be contructed at O(N^4) cost. Default: None

  • +
  • analytic_lower_bound (bool, optional.) – Whether to compute analytic lower bound on the error of the computed zeroth dd moment. Computation +requires O(N^4) operation, and given limited utility of lower bound this is optional. +Default: False.

  • +
+
+
Returns:
+

    +
  • moments (array_like, shape (max_moment + 1, n_{tar}, o_a v_a + o_b v_b)) – Array storing the i^th dd moment in the space defined by `target_rot’ in moments[i].

  • +
  • err0 (tuple.) – Bounds on the error, in form (upper_bound, lower_bound). If `analytic_lower_bound’=False lower bound +will be None.

  • +
+

+
+
+
+ +
+
+kernel_trMPrt(npoints=48, ainit=10)
+

Evaluate Tr((MP)^(1/2)).

+
+ +
+
+test_eta0_error(mom0, target_rot, ri_apb, ri_amb)
+
+
Test how well our obtained zeroth moment obeys relation used to derive it, namely

A-B = eta0 (A+B) eta0

+
+
+

From this we can estimate the error in eta0 using Cauchy-Schwartz. +For details see Appendix B of https://arxiv.org/abs/2301.09107, Eq. 96-99.

+
+ +
+
+test_spectral_rep(freqs)
+
+ +
+ +
+
+

vayesta.rpa.rirpa.energy_NI

+

Functionality to calculate zeroth moment via numerical integration

+
+
+exception vayesta.rpa.rirpa.energy_NI.NIError[source]
+

Bases: Exception

+
+
+args
+
+ +
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+class vayesta.rpa.rirpa.energy_NI.NITrRootMP(D, S_L, S_R, npoints, log)[source]
+

Bases: NumericalIntegratorClenCurInfinite

+
+
+property n_aux
+
+ +
+
+get_F(freq)[source]
+
+ +
+
+get_Q(freq)[source]
+

Efficiently construct Q = S_R (D^{-1} G) S_L^T +This is generally the limiting

+
+ +
+
+property diagmat1
+
+ +
+
+property diagmat2
+
+ +
+
+eval_diag_contrib(freq)[source]
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+calculate_error(a, b)
+

Calculate error by solving cubic equation to model convergence as lpha e^{-eta n_p}. +This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so +generally overestimates the resulting error, which suits us well. +This also overestimates the error since it doesn’t account for the effect of quadrature grid optimisation, which +leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter.

+

This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104.

+

To understand the general behaviour of this approach, we can instead consider the simpler approximation that +the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of +the error resulting from our most accurate estimate as

+
+

error = b ** 3 / a ** 2

+
+
+
with the error in this approximation given by

error_error = b ** 2 / a ** 2.

+
+
+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_deriv_contrib(freq)[source]
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_offset()
+
+ +
+
+get_quad(a)
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+
+eval_diag_deriv2_contrib(freq)[source]
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()[source]
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+eval_contrib(freq)[source]
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+ +
+
+

vayesta.rpa.rirpa.momzero_NI

+

Functionality to calculate zeroth moment via numerical integration

+
+
+class vayesta.rpa.rirpa.momzero_NI.NIMomZero(D, S_L, S_R, target_rot, npoints, log)[source]
+

Bases: NumericalIntegratorClenCurInfinite

+
+
+property n_aux
+
+ +
+
+get_F(freq)[source]
+
+ +
+
+get_Q(freq)[source]
+

Efficiently construct Q = S_R (D^{-1} G) S_L^T +This is generally the limiting

+
+ +
+
+property diagmat1
+
+ +
+
+property diagmat2
+
+ +
+
+calculate_error(a, b)
+

Calculate error by solving cubic equation to model convergence as lpha e^{-eta n_p}. +This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so +generally overestimates the resulting error, which suits us well. +This also overestimates the error since it doesn’t account for the effect of quadrature grid optimisation, which +leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter.

+

This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104.

+

To understand the general behaviour of this approach, we can instead consider the simpler approximation that +the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of +the error resulting from our most accurate estimate as

+
+

error = b ** 3 / a ** 2

+
+
+
with the error in this approximation given by

error_error = b ** 2 / a ** 2.

+
+
+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_contrib(freq)
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_contrib(freq)
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_offset()
+
+ +
+
+get_quad(a)
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+class vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone(*args, **kwargs)[source]
+

Bases: NIMomZero

+
+
+property diagmat1
+
+ +
+
+eval_diag_contrib(freq)[source]
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)[source]
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)[source]
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()[source]
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+eval_contrib(freq)[source]
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+calculate_error(a, b)
+

Calculate error by solving cubic equation to model convergence as lpha e^{-eta n_p}. +This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so +generally overestimates the resulting error, which suits us well. +This also overestimates the error since it doesn’t account for the effect of quadrature grid optimisation, which +leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter.

+

This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104.

+

To understand the general behaviour of this approach, we can instead consider the simpler approximation that +the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of +the error resulting from our most accurate estimate as

+
+

error = b ** 3 / a ** 2

+
+
+
with the error in this approximation given by

error_error = b ** 2 / a ** 2.

+
+
+
+ +
+
+property diagmat2
+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_F(freq)
+
+ +
+
+get_Q(freq)
+

Efficiently construct Q = S_R (D^{-1} G) S_L^T +This is generally the limiting

+
+ +
+
+get_offset()
+
+ +
+
+get_quad(a)
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property n_aux
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+class vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD(*args, **kwargs)[source]
+

Bases: MomzeroDeductNone

+
+
+property diagmat2
+
+ +
+
+eval_contrib(freq)[source]
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+calculate_error(a, b)
+

Calculate error by solving cubic equation to model convergence as lpha e^{-eta n_p}. +This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so +generally overestimates the resulting error, which suits us well. +This also overestimates the error since it doesn’t account for the effect of quadrature grid optimisation, which +leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter.

+

This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104.

+

To understand the general behaviour of this approach, we can instead consider the simpler approximation that +the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of +the error resulting from our most accurate estimate as

+
+

error = b ** 3 / a ** 2

+
+
+
with the error in this approximation given by

error_error = b ** 2 / a ** 2.

+
+
+
+ +
+
+property diagmat1
+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_contrib(freq)
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_F(freq)
+
+ +
+
+get_Q(freq)
+

Efficiently construct Q = S_R (D^{-1} G) S_L^T +This is generally the limiting

+
+ +
+
+get_offset()
+
+ +
+
+get_quad(a)
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property n_aux
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+class vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder(*args, **kwargs)[source]
+

Bases: MomzeroDeductD

+
+
+eval_diag_contrib(freq)[source]
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)[source]
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)[source]
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()[source]
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+eval_contrib(freq)[source]
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+calculate_error(a, b)
+

Calculate error by solving cubic equation to model convergence as lpha e^{-eta n_p}. +This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so +generally overestimates the resulting error, which suits us well. +This also overestimates the error since it doesn’t account for the effect of quadrature grid optimisation, which +leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter.

+

This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104.

+

To understand the general behaviour of this approach, we can instead consider the simpler approximation that +the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of +the error resulting from our most accurate estimate as

+
+

error = b ** 3 / a ** 2

+
+
+
with the error in this approximation given by

error_error = b ** 2 / a ** 2.

+
+
+
+ +
+
+property diagmat1
+
+ +
+
+property diagmat2
+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_F(freq)
+
+ +
+
+get_Q(freq)
+

Efficiently construct Q = S_R (D^{-1} G) S_L^T +This is generally the limiting

+
+ +
+
+get_offset()
+
+ +
+
+get_quad(a)
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property n_aux
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+class vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset(D, S_L, S_R, target_rot, npoints, log)[source]
+

Bases: NumericalIntegratorBase

+

NB this is an abstract class!

+
+
+get_offset()[source]
+
+ +
+
+eval_contrib(freq)[source]
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+eval_diag_contrib(freq)[source]
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)[source]
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)[source]
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()[source]
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_quad(a)
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+class vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag(D, S_L, S_R, target_rot, npoints, log)[source]
+

Bases: BaseMomzeroOffset, NumericalIntegratorGaussianSemiInfinite

+
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_contrib(freq)
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_contrib(freq)
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_offset()
+
+ +
+
+get_quad(a)
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+class vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC(D, S_L, S_R, target_rot, npoints, log)[source]
+

Bases: BaseMomzeroOffset, NumericalIntegratorClenCurSemiInfinite

+
+
+calculate_error(a, b)
+

Calculate error by solving cubic equation to model convergence as lpha e^{-eta n_p}. +This relies upon the Cauchy-Schwartz inequality, and assumes all errors are at their maximum values, so +generally overestimates the resulting error, which suits us well. +This also overestimates the error since it doesn’t account for the effect of quadrature grid optimisation, which +leads to our actual estimates converging more rapidly than they would with a static grid spacing parameter.

+

This approach is detailed in Appendix B of https://arxiv.org/abs/2301.09107, Eqs. 100-104.

+

To understand the general behaviour of this approach, we can instead consider the simpler approximation that +the magnitude of a given difference is dominated by the least accurate estimate. This leads to the estimate of +the error resulting from our most accurate estimate as

+
+

error = b ** 3 / a ** 2

+
+
+
with the error in this approximation given by

error_error = b ** 2 / a ** 2.

+
+
+
+ +
+
+eval_NI_approx(a)
+

Evaluate the NI approximation of the integral with a provided quadrature.

+
+ +
+
+eval_contrib(freq)
+

Evaluate contribution to numerical integral of result at given frequency point.

+
+ +
+
+eval_diag_NI_approx(a)
+

Evaluate the NI approximation to the diagonal approximation of the integral.

+
+ +
+
+eval_diag_NI_approx_deriv2(a)
+

Evaluate the second derivative w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_NI_approx_grad(a)
+

Evaluate the gradient w.r.t a of NI diagonal expression. +Note that for all quadratures the weights and quadrature point positions are proportional to the arbitrary +parameter `a’, so we can use the same expressions for the derivatives.

+
+ +
+
+eval_diag_contrib(freq)
+

Evaluate contribution to integral of diagonal approximation at given frequency point.

+
+ +
+
+eval_diag_deriv2_contrib(freq)
+

Evaluate second derivative of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_deriv_contrib(freq)
+

Evaluate gradient of contribution to integral of diagonal approximation at given frequency point, +w.r.t that frequency point.

+
+ +
+
+eval_diag_exact()
+

Provides an exact evaluation of the integral for the diagonal approximation.

+
+ +
+
+fix_params()
+

If required set parameters within ansatz; defined to ensure hook for functionality in future, will +not always be needed.

+
+ +
+
+get_offset()
+
+ +
+
+get_quad(a)
+

Generate the appropriate Clenshaw-Curtis quadrature points and weights.

+
+ +
+
+get_quad_vals(a, l2norm=True)
+
+ +
+
+kernel(a=None, opt_quad=True)
+

Perform numerical integration. Put simply, fix any arbitrary parameters in the integral to be evaluated, +optimise the quadrature grid to ensure a diagonal approximation is exactly integrated then evaluate full +expression.

+
+ +
+
+kernel_adaptive()
+
+ +
+
+l2_scan(freqs)
+
+ +
+
+max_scan(freqs)
+
+ +
+
+property npoints
+
+ +
+
+opt_quadrature_diag(ainit=None)
+

Optimise the quadrature to exactly integrate a diagonal approximation to the integral

+
+ +
+
+test_diag_derivs(a, delta=1e-06)
+
+ +
+ +
+
+vayesta.rpa.rirpa.momzero_NI.diag_sqrt_contrib(D, freq)[source]
+
+ +
+
+vayesta.rpa.rirpa.momzero_NI.diag_sqrt_grad(D, freq)[source]
+
+ +
+
+vayesta.rpa.rirpa.momzero_NI.diag_sqrt_deriv2(D, freq)[source]
+
+ +
+
+

Module contents

+
+
+vayesta.rpa.rirpa.ssRIRPA(mf, *args, **kwargs)[source]
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.solver.eb_fci.html b/apidoc/vayesta.solver.eb_fci.html new file mode 100644 index 000000000..03669ad42 --- /dev/null +++ b/apidoc/vayesta.solver.eb_fci.html @@ -0,0 +1,722 @@ + + + + + + + vayesta.solver.eb_fci — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.solver.eb_fci

+
+

Submodules

+
+
+

vayesta.solver.eb_fci.ebfci

+
+
+class vayesta.solver.eb_fci.ebfci.REBFCI(hamil, freqs, couplings, **kwargs)[source]
+

Bases: object

+

Performs FCI on coupled electron-boson systems. +Input:

+
+

-system specification, via hamiltonian object along with bosonic parameters.

+
+
+
Output:

-FCI RDMs. +-FCI response specification.

+
+
+
+
+solver = <module 'vayesta.solver.eb_fci.ebfci_slow' from '/home/runner/.local/lib/python3.8/site-packages/vayesta/solver/eb_fci/ebfci_slow.py'>
+
+ +
+
+class Options(max_boson_occ: int = 2, conv_tol: float = 1e-12, max_cycle: int = 100)[source]
+

Bases: OptionsBase

+
+
+max_boson_occ: int = 2
+
+ +
+
+conv_tol: float = 1e-12
+
+ +
+
+max_cycle: int = 100
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+property norb
+
+ +
+
+property nelec
+
+ +
+
+property nbos
+
+ +
+
+kernel(eris=None)[source]
+
+ +
+
+get_hamil(eris=None)[source]
+
+ +
+
+make_rdm1()[source]
+
+ +
+
+make_rdm2()[source]
+
+ +
+
+make_rdm12()[source]
+
+ +
+
+make_rdm_eb()[source]
+
+ +
+
+make_dd_moms(max_mom, dm1=None, coeffs=None, civec=None, eris=None)[source]
+
+ +
+ +
+
+class vayesta.solver.eb_fci.ebfci.UEBFCI(hamil, freqs, couplings, **kwargs)[source]
+

Bases: REBFCI

+
+
+solver = <module 'vayesta.solver.eb_fci.uebfci_slow' from '/home/runner/.local/lib/python3.8/site-packages/vayesta/solver/eb_fci/uebfci_slow.py'>
+
+ +
+
+make_rdm12()[source]
+
+ +
+
+class Options(max_boson_occ: int = 2, conv_tol: float = 1e-12, max_cycle: int = 100)
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = 1e-12
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+max_boson_occ: int = 2
+
+ +
+
+max_cycle: int = 100
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+get_hamil(eris=None)
+
+ +
+
+kernel(eris=None)
+
+ +
+
+make_dd_moms(max_mom, dm1=None, coeffs=None, civec=None, eris=None)
+
+ +
+
+make_rdm1()
+
+ +
+
+make_rdm2()
+
+ +
+
+make_rdm_eb()
+
+ +
+
+property nbos
+
+ +
+
+property nelec
+
+ +
+
+property norb
+
+ +
+ +
+
+

vayesta.solver.eb_fci.ebfci_slow

+

Module for slow, exact diagonalisation-based coupled electron-boson FCI code. +Based on the fci_slow.py code within pyscf.

+
+
+vayesta.solver.eb_fci.ebfci_slow.contract_all(h1e, g2e, hep, hpp, ci0, norbs, nelec, nbosons, max_occ, ecore=0.0, adj_zero_pho=False)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.make_shape(norbs, nelec, nbosons, max_occ)[source]
+

Construct the shape of a single FCI vector in the coupled electron-boson space.

+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.contract_1e(h1e, fcivec, norb, nelec, nbosons, max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.contract_2e(eri, fcivec, norb, nelec, nbosons, max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.contract_ep(heb, fcivec, norb, nelec, nbosons, max_occ, adj_zero_pho=False)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.contract_pp(hpp, fcivec, norb, nelec, nbosons, max_occ)[source]
+

Arbitrary phonon-phonon coupling.

+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.apply_bos_annihilation(ci0, nbosons, max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.apply_bos_creation(ci0, nbosons, max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.contract_pp_for_future(hpp, fcivec, norb, nelec, nbosons, max_occ)[source]
+

Our bosons are decoupled; only have diagonal couplings, +ie. to the boson number.

+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.slices_for(b_id, nbos, occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.slices_for_cre(b_id, nbos, occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.slices_for_des(b_id, nbos, occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.slices_for_occ_reduction(nbos, new_max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.make_hdiag(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.kernel(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ, tol=1e-12, max_cycle=100, verbose=0, ecore=0, returnhop=False, adj_zero_pho=False, **kwargs)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.kernel_multiroot(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ, tol=1e-12, max_cycle=100, verbose=0, ecore=0, nroots=2, returnhop=False, adj_zero_pho=False, **kwargs)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.make_rdm1(fcivec, norb, nelec)[source]
+

1-electron density matrix dm_pq = <|p^+ q|>

+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.make_rdm12(fcivec, norb, nelec)[source]
+

1-electron and 2-electron density matrices +dm_qp = <|q^+ p|> +dm_{pqrs} = <|p^+ r^+ s q|>

+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.make_rdm12s(fcivec, norb, nelec)[source]
+

1-electron and 2-electron spin-resolved density matrices +dm_qp = <|q^+ p|> +dm_{pqrs} = <|p^+ r^+ s q|>

+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.make_eb_rdm(fcivec, norb, nelec, nbosons, max_occ)[source]
+

We calculate the value <0|b^+ p^+ q|0> and return this in value P[p,q,b] +:param fcivec: +:param norb: +:param nelec: +:param max_occ: +:return:

+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.calc_dd_resp_mom(ci0, e0, max_mom, norb, nel, nbos, h1e, eri, hbb, heb, max_boson_occ, rdm1, trace=False, coeffs=None, **kwargs)[source]
+

Calculate up to the mth moment of the dd response, dealing with all spin components separately. To replace +preceding function. +:param m: maximum moment order of response to return. +:param hfbas: whether to return the moment in the HF basis. Otherwise returns in the basis in the underlying

+
+

orthogonal basis hfbas is specified in (defaults to False).

+
+
+
Returns:
+

+
+
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.run(nelec, h1e, eri, hpp, hep, max_occ, returnhop=False, nroots=1, **kwargs)[source]
+

run a calculation using a pyscf mf object.

+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.run_hub_test(returnhop=False, **kwargs)[source]
+
+ +
+
+vayesta.solver.eb_fci.ebfci_slow.run_ep_hubbard(t, u, g, pp, nsite, nelec, nphonon, returnhop=False, **kwargs)[source]
+

Run a calculation using a hubbard model coupled to some phonon modes.

+
+ +
+
+

vayesta.solver.eb_fci.uebfci_slow

+

Module for slow, exact diagonalisation-based coupled electron-boson FCI code. +Based on the fci_slow.py code within pyscf.

+
+
+vayesta.solver.eb_fci.uebfci_slow.contract_all(h1e, g2e, hep, hpp, ci0, norbs, nelec, nbosons, max_occ, ecore=0.0, adj_zero_pho=False)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.make_shape(norbs, nelec, nbosons, max_occ)[source]
+

Construct the shape of a single FCI vector in the coupled electron-boson space.

+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.contract_1e(h1e, fcivec, norb, nelec, nbosons, max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.contract_2e(eri, fcivec, norb, nelec, nbosons, max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.contract_ep(heb, fcivec, norb, nelec, nbosons, max_occ, adj_zero_pho=False)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.contract_pp(hpp, fcivec, norb, nelec, nbosons, max_occ)[source]
+

Arbitrary phonon-phonon coupling.

+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.apply_bos_annihilation(ci0, nbosons, max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.apply_bos_creation(ci0, nbosons, max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.contract_pp_for_future(hpp, fcivec, norb, nelec, nbosons, max_occ)[source]
+

Our bosons are decoupled; only have diagonal couplings, +ie. to the boson number.

+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.slices_for(b_id, nbos, occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.slices_for_cre(b_id, nbos, occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.slices_for_des(b_id, nbos, occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.slices_for_occ_reduction(nbos, new_max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.make_hdiag(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.kernel(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ, tol=1e-12, max_cycle=100, verbose=0, ecore=0, returnhop=False, adj_zero_pho=False, **kwargs)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.kernel_multiroot(h1e, g2e, hep, hpp, norb, nelec, nbosons, max_occ, tol=1e-12, max_cycle=100, verbose=0, ecore=0, nroots=2, returnhop=False, adj_zero_pho=False, **kwargs)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.make_rdm1(fcivec, norb, nelec)[source]
+

1-electron density matrix dm_pq = <|p^+ q|>

+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.make_rdm12(fcivec, norb, nelec)[source]
+

1-electron and 2-electron density matrices +dm_qp = <|q^+ p|> +dm_{pqrs} = <|p^+ r^+ s q|>

+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.make_rdm12s(fcivec, norb, nelec, reorder=True)[source]
+

1-electron and 2-electron spin-resolved density matrices +dm_qp = <|q^+ p|> +dm_{pqrs} = <|p^+ r^+ s q|>

+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.make_eb_rdm(fcivec, norb, nelec, nbosons, max_occ)[source]
+

We calculate the value <0|b^+ p^+ q|0> and return this in value P[p,q,b] +:param fcivec: +:param norb: +:param nelec: +:param max_occ: +:return:

+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.calc_dd_resp_mom(ci0, e0, max_mom, norb, nel, nbos, h1e, eri, hbb, heb, max_boson_occ, rdm1, trace=False, coeffs=None, **kwargs)[source]
+

Calculate up to the mth moment of the dd response, dealing with all spin components separately. To replace +preceding function. +:param m: maximum moment order of response to return. +:param hfbas: whether to return the moment in the HF basis. Otherwise returns in the basis in the underlying

+
+

orthogonal basis hfbas is specified in (defaults to False).

+
+
+
Returns:
+

+
+
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.run(nelec, h1e, eri, hpp, hep, max_occ, returnhop=False, nroots=1, **kwargs)[source]
+

run a calculation using a pyscf mf object.

+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.run_hub_test(returnhop=False, **kwargs)[source]
+
+ +
+
+vayesta.solver.eb_fci.uebfci_slow.run_ep_hubbard(t, u, g, pp, nsite, nelec, nphonon, returnhop=False, **kwargs)[source]
+

Run a calculation using a hubbard model coupled to some phonon modes.

+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.solver.html b/apidoc/vayesta.solver.html new file mode 100644 index 000000000..4f2a55fd7 --- /dev/null +++ b/apidoc/vayesta.solver.html @@ -0,0 +1,5423 @@ + + + + + + + vayesta.solver — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.solver

+
+

Subpackages

+ +
+
+

Submodules

+
+
+

vayesta.solver.ccsd

+
+
+class vayesta.solver.ccsd.RCCSD_Solver(hamil, log=None, **kwargs)[source]
+

Bases: ClusterSolver

+
+
+class Options(max_cycle: int = 100, conv_tol: float = None, conv_tol_normt: float = None, diis_space: int = None, diis_start_cycle: int = None, iterative_damping: float = None, level_shift: float = None, init_guess: str = 'MP2', solve_lambda: bool = True, sc_mode: int = None)[source]
+

Bases: Options

+
+
+max_cycle: int = 100
+
+ +
+
+conv_tol: float = None
+
+ +
+
+conv_tol_normt: float = None
+
+ +
+
+diis_space: int = None
+
+ +
+
+diis_start_cycle: int = None
+
+ +
+
+iterative_damping: float = None
+
+ +
+
+level_shift: float = None
+
+ +
+
+init_guess: str = 'MP2'
+
+ +
+
+solve_lambda: bool = True
+
+ +
+
+sc_mode: int = None
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+kernel(t1=None, t2=None, l1=None, l2=None, coupled_fragments=None, t_diagnostic=True)[source]
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+get_solver_class(mf)[source]
+
+ +
+
+generate_init_guess(eris=None)[source]
+
+ +
+
+t_diagnostic(solver)[source]
+
+ +
+
+get_callback()[source]
+
+ +
+
+print_extra_info(mycc)[source]
+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.ccsd.UCCSD_Solver(hamil, log=None, **kwargs)[source]
+

Bases: UClusterSolver, RCCSD_Solver

+
+
+class Options(max_cycle: int = 100, conv_tol: float = None, conv_tol_normt: float = None, diis_space: int = None, diis_start_cycle: int = None, iterative_damping: float = None, level_shift: float = None, init_guess: str = 'MP2', solve_lambda: bool = True, sc_mode: int = None)[source]
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = None
+
+ +
+
+conv_tol_normt: float = None
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+diis_space: int = None
+
+ +
+
+diis_start_cycle: int = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+init_guess: str = 'MP2'
+
+ +
+
+items()
+
+ +
+
+iterative_damping: float = None
+
+ +
+
+keys()
+
+ +
+
+level_shift: float = None
+
+ +
+
+max_cycle: int = 100
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = None
+
+ +
+
+solve_lambda: bool = True
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+get_solver_class(mf)[source]
+
+ +
+
+t_diagnostic(solver)[source]
+

T diagnostic not implemented for UCCSD in PySCF.

+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+generate_init_guess(eris=None)
+
+ +
+
+get_callback()
+
+ +
+
+get_init_guess()
+
+ +
+
+kernel(t1=None, t2=None, l1=None, l2=None, coupled_fragments=None, t_diagnostic=True)
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+print_extra_info(mycc)
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.ccsd.UCCSD(mf, frozen=None, mo_coeff=None, mo_occ=None)[source]
+

Bases: UCCSD

+
+
+ao2mo(mo_coeff=None)
+
+ +
+
+EOMEA(*args, **kwargs)
+
+ +
+
+EOMEA_Ta(*args, **kwargs)
+

Class for EOM EACCSD(T)*(a) method by Matthews and Stanton.

+
+ +
+
+EOMEE(*args, **kwargs)
+
+ +
+
+EOMEESinglet(*args, **kwargs)
+
+ +
+
+EOMEESpinFlip(*args, **kwargs)
+
+ +
+
+EOMEESpinKeep(*args, **kwargs)
+
+ +
+
+EOMEETriplet(*args, **kwargs)
+
+ +
+
+EOMIP(*args, **kwargs)
+
+ +
+
+EOMIP_Ta(*args, **kwargs)
+

Class for EOM IPCCSD(T)*(a) method by Matthews and Stanton.

+
+ +
+
+add_keys(**kwargs)
+

Add or update attributes of the object and register these attributes in ._keys

+
+ +
+
+amplitudes_from_rccsd(t1, t2)[source]
+
+ +
+
+amplitudes_to_vector(t1, t2, out=None)[source]
+
+ +
+
+apply(fn, *args, **kwargs)
+

Apply the fn to rest arguments: return fn(*args, **kwargs). The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+as_scanner()
+

Generating a scanner/solver for CCSD PES.

+

The returned solver is a function. This function requires one argument +“mol” as input and returns total CCSD energy.

+

The solver will automatically use the results of last calculation as the +initial guess of the new calculation. All parameters assigned in the +CCSD and the underlying SCF objects (conv_tol, max_memory etc) are +automatically applied in the solver.

+

Note scanner has side effects. It may change many underlying objects +(_scf, with_df, with_x2c, …) during calculation.

+

Examples:

+
>>> from pyscf import gto, scf, cc
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1')
+>>> cc_scanner = cc.CCSD(scf.RHF(mol)).as_scanner()
+>>> e_tot = cc_scanner(gto.M(atom='H 0 0 0; F 0 0 1.1'))
+>>> e_tot = cc_scanner(gto.M(atom='H 0 0 0; F 0 0 1.5'))
+
+
+
+ +
+
+async_io = True
+
+ +
+
+cc2 = False
+
+ +
+
+ccsd(t1=None, t2=None, eris=None, mbpt2=False)[source]
+

Ground-state unrestricted (U)CCSD.

+
+
Kwargs:
+
mbpt2bool

Use one-shot MBPT2 approximation to CCSD.

+
+
+
+
+
+ +
+
+ccsd_t(t1=None, t2=None, eris=None)[source]
+
+ +
+
+check_sanity()
+

Check input of class/object attributes, check whether a class method is +overwritten. It does not check the attributes which are prefixed with +“_”. The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+conv_tol = 1e-07
+
+ +
+
+conv_tol_normt = 1e-06
+
+ +
+
+density_fit()[source]
+
+ +
+
+diis = True
+
+ +
+
+diis_file = None
+
+ +
+
+diis_space = 6
+
+ +
+
+diis_start_cycle = 0
+
+ +
+
+diis_start_energy_diff = 1000000000.0
+
+ +
+
+direct = False
+
+ +
+
+dump_chk(t1_t2=None, frozen=None, mo_coeff=None, mo_occ=None)
+
+ +
+
+dump_flags(verbose=None)
+
+ +
+
+property e_tot
+
+ +
+
+eaccsd(nroots=1, left=False, koopmans=False, guess=None, partition=None, eris=None)[source]
+
+ +
+
+property ecc
+
+ +
+
+eeccsd(nroots=1, koopmans=False, guess=None, eris=None)[source]
+
+ +
+
+energy(t1=None, t2=None, eris=None)
+

UCCSD correlation energy

+
+ +
+
+eomea_method()[source]
+
+ +
+
+eomee_ccsd(nroots=1, koopmans=False, guess=None, eris=None)[source]
+
+ +
+
+eomee_ccsd_singlet(nroots=1, koopmans=False, guess=None, eris=None)
+
+ +
+
+eomee_ccsd_triplet(nroots=1, koopmans=False, guess=None, eris=None)
+
+ +
+
+eomee_method()[source]
+
+ +
+
+eomip_method()[source]
+
+ +
+
+eomsf_ccsd(nroots=1, koopmans=False, guess=None, eris=None)[source]
+
+ +
+
+get_d1_diagnostic(t1=None)[source]
+
+ +
+
+get_d2_diagnostic(t2=None)[source]
+
+ +
+
+get_e_hf(mo_coeff=None)
+
+ +
+
+get_frozen_mask()
+

Get boolean mask for the unrestricted reference orbitals.

+

In the returned boolean (mask) array of frozen orbital indices, the +element is False if it corresonds to the frozen orbital.

+
+ +
+
+get_init_guess(eris=None)
+
+ +
+
+get_nmo()
+
+ +
+
+get_nocc()
+
+ +
+
+get_t1_diagnostic(t1=None)[source]
+
+ +
+
+incore_complete = False
+
+ +
+
+init_amps(eris=None)[source]
+
+ +
+
+ipccsd(nroots=1, left=False, koopmans=False, guess=None, partition=None, eris=None)[source]
+
+ +
+
+iterative_damping = 1.0
+
+ +
+
+kernel(t1=None, t2=None, eris=None, mbpt2=False)[source]
+

Kernel function is the main driver of a method. Every method should +define the kernel function as the entry of the calculation. Note the +return value of kernel function is not strictly defined. It can be +anything related to the method (such as the energy, the wave-function, +the DFT mesh grids etc.).

+
+ +
+
+make_rdm1(t1=None, t2=None, l1=None, l2=None, ao_repr=False, with_frozen=True, with_mf=True)[source]
+

Un-relaxed 1-particle density matrix in MO space

+
+
Returns:
+

dm1a, dm1b

+
+
+
+ +
+
+make_rdm2(t1=None, t2=None, l1=None, l2=None, ao_repr=False, with_frozen=True, with_dm1=True)[source]
+

2-particle density matrix in spin-orbital basis.

+
+ +
+
+max_cycle = 50
+
+ +
+
+property nmo
+
+ +
+
+property nocc
+
+ +
+
+nuc_grad_method()[source]
+
+ +
+
+post_kernel(envs)
+

A hook to be run after the main body of the kernel function. Internal +variables are exposed to post_kernel through the “envs” dictionary. +Return value of post_kernel function is not required.

+
+ +
+
+pre_kernel(envs)
+

A hook to be run before the main body of kernel function is executed. +Internal variables are exposed to pre_kernel through the “envs” +dictionary. Return value of pre_kernel function is not required.

+
+ +
+
+reset(mol=None)
+
+ +
+
+restore_from_diis_(diis_file, inplace=True)
+

Reuse an existed DIIS object in the CCSD calculation.

+

The CCSD amplitudes will be restored from the DIIS object to generate t1 +and t2 amplitudes. The t1/t2 amplitudes of the CCSD object will be +overwritten by the generated t1 and t2 amplitudes. The amplitudes vector +and error vector will be reused in the CCSD calculation.

+
+ +
+
+run(*args, **kwargs)
+

Call the kernel function of current object. args will be passed +to kernel function. kwargs will be used to update the attributes of +current object. The return value of method run is the object itself. +This allows a series of functions/methods to be executed in pipe.

+
+ +
+
+run_diis(t1, t2, istep, normt, de, adiis)
+
+ +
+
+set(*args, **kwargs)
+

Update the attributes of the current object. The return value of +method set is the object itself. This allows a series of +functions/methods to be executed in pipe.

+
+ +
+
+set_frozen(method='auto', window=(-1000.0, 1000.0))
+
+ +
+
+solve_lambda(t1=None, t2=None, l1=None, l2=None, eris=None)[source]
+
+ +
+
+spin_square(mo_coeff=None, s=None)[source]
+
+ +
+
+stdout = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
+
+ +
+
+uccsd_t(t1=None, t2=None, eris=None)
+
+ +
+
+update_amps(t1, t2, eris)
+
+ +
+
+vector_size(nmo=None, nocc=None)[source]
+
+ +
+
+vector_to_amplitudes(vector, nmo=None, nocc=None)[source]
+
+ +
+
+verbose = 0
+
+ +
+
+view(cls)
+

New view of object with the same attributes.

+
+ +
+ +
+
+

vayesta.solver.ccsdtq

+
+
+vayesta.solver.ccsdtq.t2_residual_rhf_t3v(solver, fragment, t3, v)[source]
+
+ +
+
+vayesta.solver.ccsdtq.t_residual_rhf(solver, fragment, t1, t2, t3, t4, f, v, include_t3v=False)[source]
+
+ +
+
+vayesta.solver.ccsdtq.t2_residual_uhf_t3v(solver, fragment, t3, v)[source]
+
+ +
+
+vayesta.solver.ccsdtq.t_residual_uhf(solver, fragment, t1, t2, t3, t4, f, v, include_t3v=False)[source]
+
+ +
+
+

vayesta.solver.cisd

+
+
+vayesta.solver.cisd.CISD_Solver(hamil, *args, **kwargs)[source]
+
+ +
+
+class vayesta.solver.cisd.RCISD_Solver(hamil, log=None, **kwargs)[source]
+

Bases: ClusterSolver

+
+
+class Options(conv_tol: float = None)[source]
+

Bases: Options

+
+
+conv_tol: float = None
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+kernel(*args, **kwargs)[source]
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+get_solver_class()[source]
+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.cisd.UCISD_Solver(hamil, log=None, **kwargs)[source]
+

Bases: UClusterSolver, RCISD_Solver

+
+
+class Options(conv_tol: float = None)[source]
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = None
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+get_solver_class()[source]
+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+kernel(*args, **kwargs)
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.cisd.UCISD(mf, frozen=None, mo_coeff=None, mo_occ=None)[source]
+

Bases: UCISD

+
+
+ao2mo(mo_coeff=None)
+
+ +
+
+add_keys(**kwargs)
+

Add or update attributes of the object and register these attributes in ._keys

+
+ +
+
+amplitudes_to_cisdvec(c0, c1, c2)[source]
+
+ +
+
+apply(fn, *args, **kwargs)
+

Apply the fn to rest arguments: return fn(*args, **kwargs). The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+as_scanner()
+

Generating a scanner/solver for CISD PES.

+

The returned solver is a function. This function requires one argument +“mol” as input and returns total CISD energy.

+

The solver will automatically use the results of last calculation as the +initial guess of the new calculation. All parameters assigned in the +CISD and the underlying SCF objects (conv_tol, max_memory etc) are +automatically applied in the solver.

+

Note scanner has side effects. It may change many underlying objects +(_scf, with_df, with_x2c, …) during calculation.

+

Examples:

+
>>> from pyscf import gto, scf, ci
+>>> mol = gto.M(atom='H 0 0 0; F 0 0 1')
+>>> ci_scanner = ci.CISD(scf.RHF(mol)).as_scanner()
+>>> e_tot = ci_scanner(gto.M(atom='H 0 0 0; F 0 0 1.1'))
+>>> e_tot = ci_scanner(gto.M(atom='H 0 0 0; F 0 0 1.5'))
+
+
+
+ +
+
+async_io = True
+
+ +
+
+check_sanity()
+

Check input of class/object attributes, check whether a class method is +overwritten. It does not check the attributes which are prefixed with +“_”. The +return value of method set is the object itself. This allows a series +of functions/methods to be executed in pipe.

+
+ +
+
+cisd(ci0=None, eris=None)
+
+ +
+
+cisdvec_to_amplitudes(civec, nmo=None, nocc=None, copy=True)[source]
+
+ +
+
+contract(civec, eris)
+

Application of CISD hamiltonian onto civec.

+
+
Parameters:
+
    +
  • myci – CISD (inheriting) object

  • +
  • civec – numpy array, same length as a CI vector.

  • +
  • eris – ccsd._ChemistsERIs (inheriting) object (poss diff for df) +Contains the various (pq|rs) integrals needed.

  • +
+
+
Returns:
+

numpy array, same length as a CI vector.

+
+
+
+ +
+
+conv_tol = 1e-09
+
+ +
+
+density_fit()
+
+ +
+
+direct = False
+
+ +
+
+dump_chk(ci=None, frozen=None, mo_coeff=None, mo_occ=None)
+
+ +
+
+dump_flags(verbose=None)
+
+ +
+
+property e_tot
+
+ +
+
+from_fcivec(fcivec, nmo=None, nocc=None)[source]
+
+ +
+
+get_e_hf(mo_coeff=None)
+
+ +
+
+get_frozen_mask()
+

Get boolean mask for the unrestricted reference orbitals.

+

In the returned boolean (mask) array of frozen orbital indices, the +element is False if it corresonds to the frozen orbital.

+
+ +
+
+get_init_guess(eris=None, nroots=1, diag=None)[source]
+

MP2 energy and MP2 initial guess(es) for CISD coefficients.

+
+
Kwargs:
+
erisccsd._ChemistsERIs (inheriting) object (poss diff for df)

Contains the various (pq|rs) integrals needed.

+
+
nrootsinteger

Number of CISD solutions to be found.

+
+
diagnumpy array (1D)

e.g. CISD Hamiltonian diagonal in Slater determinant +space with HF energy subtracted.

+
+
+
+
+
+
Returns:
+

Tuple of float and numpy array or +tuple of float and list of numpy arrays (if nroots > 1) +MP2 energy and initial guess(es) for CISD coefficients.

+
+
+
+ +
+
+get_nmo()
+
+ +
+
+get_nocc()
+
+ +
+
+kernel(ci0=None, eris=None)
+

Kernel function is the main driver of a method. Every method should +define the kernel function as the entry of the calculation. Note the +return value of kernel function is not strictly defined. It can be +anything related to the method (such as the energy, the wave-function, +the DFT mesh grids etc.).

+
+ +
+
+level_shift = 0.001
+
+ +
+
+lindep = 1e-14
+
+ +
+
+make_diagonal(eris)
+

Return diagonal of CISD hamiltonian in Slater determinant basis.

+

Note that a constant has been substracted of all elements. +The first element is the HF energy (minus the +constant), the next elements are the diagonal elements with singly +excited determinants (<D_i^a|H|D_i^a> within the constant), then +doubly excited determinants (<D_ij^ab|H|D_ij^ab> within the +constant).

+
+
Parameters:
+
    +
  • myci – CISD (inheriting) object

  • +
  • eris – ccsd._ChemistsERIs (inheriting) object (poss diff for df) +Contains the various (pq|rs) integrals needed.

  • +
+
+
Returns:
+

+
(1, 1 + #single excitations from HF det
+
    +
  • #double excitations from HF det))

  • +
+
+

Diagonal elements of hamiltonian matrix within a constant, +see above.

+
+
+

+
+
Return type:
+

numpy array (size

+
+
+
+ +
+
+make_rdm1(civec=None, nmo=None, nocc=None, ao_repr=False)
+

One-particle spin density matrices dm1a, dm1b in MO basis (the +occupied-virtual blocks due to the orbital response contribution are not +included).

+

dm1a[p,q] = <q_alpha^dagger p_alpha> +dm1b[p,q] = <q_beta^dagger p_beta>

+

The convention of 1-pdm is based on McWeeney’s book, Eq (5.4.20).

+
+ +
+
+make_rdm2(civec=None, nmo=None, nocc=None, ao_repr=False)
+

Two-particle spin density matrices dm2aa, dm2ab, dm2bb in MO basis

+

dm2aa[p,q,r,s] = <q_alpha^dagger s_alpha^dagger r_alpha p_alpha> +dm2ab[p,q,r,s] = <q_alpha^dagger s_beta^dagger r_beta p_alpha> +dm2bb[p,q,r,s] = <q_beta^dagger s_beta^dagger r_beta p_beta>

+

(p,q correspond to one particle and r,s correspond to another particle) +Two-particle density matrix should be contracted to integrals with the +pattern below to compute energy

+

E = numpy.einsum(‘pqrs,pqrs’, eri_aa, dm2_aa) +E+= numpy.einsum(‘pqrs,pqrs’, eri_ab, dm2_ab) +E+= numpy.einsum(‘pqrs,rspq’, eri_ba, dm2_ab) +E+= numpy.einsum(‘pqrs,pqrs’, eri_bb, dm2_bb)

+

where eri_aa[p,q,r,s] = (p_alpha q_alpha | r_alpha s_alpha ) +eri_ab[p,q,r,s] = ( p_alpha q_alpha | r_beta s_beta ) +eri_ba[p,q,r,s] = ( p_beta q_beta | r_alpha s_alpha ) +eri_bb[p,q,r,s] = ( p_beta q_beta | r_beta s_beta )

+
+ +
+
+max_cycle = 50
+
+ +
+
+max_space = 12
+
+ +
+
+property nmo
+
+ +
+
+property nocc
+
+ +
+
+property nstates
+
+ +
+
+nuc_grad_method()[source]
+
+ +
+
+post_kernel(envs)
+

A hook to be run after the main body of the kernel function. Internal +variables are exposed to post_kernel through the “envs” dictionary. +Return value of post_kernel function is not required.

+
+ +
+
+pre_kernel(envs)
+

A hook to be run before the main body of kernel function is executed. +Internal variables are exposed to pre_kernel through the “envs” +dictionary. Return value of pre_kernel function is not required.

+
+ +
+
+reset(mol=None)
+
+ +
+
+run(*args, **kwargs)
+

Call the kernel function of current object. args will be passed +to kernel function. kwargs will be used to update the attributes of +current object. The return value of method run is the object itself. +This allows a series of functions/methods to be executed in pipe.

+
+ +
+
+set(*args, **kwargs)
+

Update the attributes of the current object. The return value of +method set is the object itself. This allows a series of +functions/methods to be executed in pipe.

+
+ +
+
+stdout = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
+
+ +
+
+to_fcivec(cisdvec, nmo=None, nocc=None)[source]
+
+ +
+
+trans_rdm1(cibra, ciket, nmo=None, nocc=None)
+

One-particle spin density matrices dm1a, dm1b in MO basis (the +occupied-virtual blocks due to the orbital response contribution are not +included).

+

dm1a[p,q] = <q_alpha^dagger p_alpha> +dm1b[p,q] = <q_beta^dagger p_beta>

+

The convention of 1-pdm is based on McWeeney’s book, Eq (5.4.20).

+
+ +
+
+vector_size()[source]
+

The size of the vector which was returned from +amplitudes_to_cisdvec()

+
+ +
+
+verbose = 0
+
+ +
+
+view(cls)
+

New view of object with the same attributes.

+
+ +
+ +
+
+

vayesta.solver.coupled_ccsd

+
+
+class vayesta.solver.coupled_ccsd.coupledRCCSD_Solver(hamil, log=None, **kwargs)[source]
+

Bases: RCCSD_Solver

+
+
+class Options(max_cycle: int = 100, conv_tol: float = None, conv_tol_normt: float = None, diis_space: int = None, diis_start_cycle: int = None, iterative_damping: float = None, level_shift: float = None, init_guess: str = 'MP2', solve_lambda: bool = True, sc_mode: int = None, fragments: List | NoneType = None)[source]
+

Bases: Options

+
+
+fragments: List | None = None
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = None
+
+ +
+
+conv_tol_normt: float = None
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+diis_space: int = None
+
+ +
+
+diis_start_cycle: int = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+init_guess: str = 'MP2'
+
+ +
+
+items()
+
+ +
+
+iterative_damping: float = None
+
+ +
+
+keys()
+
+ +
+
+level_shift: float = None
+
+ +
+
+max_cycle: int = 100
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = None
+
+ +
+
+solve_lambda: bool = True
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+set_coupled_fragments(fragments)[source]
+
+ +
+
+get_callback()[source]
+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+generate_init_guess(eris=None)
+
+ +
+
+get_init_guess()
+
+ +
+
+get_solver_class(mf)
+
+ +
+
+kernel(t1=None, t2=None, l1=None, l2=None, coupled_fragments=None, t_diagnostic=True)
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+print_extra_info(mycc)
+
+ +
+
+t_diagnostic(solver)
+
+ +
+
+property v_ext
+
+ +
+ +
+
+

vayesta.solver.coupling

+
+
+vayesta.solver.coupling.transform_amplitude(t, u_occ, u_vir, u_occ2=None, u_vir2=None, inverse=False)[source]
+

u: (old basis|new basis)

+
+ +
+
+vayesta.solver.coupling.get_amplitude_norm(t1, t2)[source]
+
+ +
+
+vayesta.solver.coupling.project_t2(t2, proj, projectors)[source]
+
+ +
+
+vayesta.solver.coupling.project_t2_rspin(t2, proj, projectors)[source]
+
+ +
+
+vayesta.solver.coupling.project_t2_uspin(t2, proj, projectors)[source]
+
+ +
+
+vayesta.solver.coupling.couple_ccsd_iterations(solver, fragments)[source]
+

Requires MPI.

+
+ +
+
+vayesta.solver.coupling.tailor_with_fragments(solver, fragments, project=False, tailor_t1=True, tailor_t2=True, ovlp_tol=1e-06)[source]
+

Tailor current CCSD calculation with amplitudes of other fragments.

+

This assumes orthogonal fragment spaces.

+
+
Parameters:
+
    +
  • project (int, optional) –

    Level of external correction of T2 amplitudes: +1: Both occupied indices are projected to each other fragment X. +2: Both occupied indices are projected to each other fragment X

    +
    +

    and combinations of other fragments X,Y.

    +
    +

    3: Only the first occupied indices is projected to each other fragment X.

    +

  • +
  • coupled_fragments (list, optional) – List of fragments, which are used for the external correction. +Each fragment x must have the following attributes defined: +c_active_occ : Active occupied MO orbitals of fragment x +c_active_vir : Active virtual MO orbitals of fragment x +results.t1 : T1 amplitudes of fragment x +results.t2 : T2 amplitudes of fragment x

  • +
+
+
Returns:
+

tailor_func – Tailoring function for CCSD.

+
+
Return type:
+

function(cc, t1, t2) -> t1, t2

+
+
+
+ +
+
+vayesta.solver.coupling.externally_correct(solver, external_corrections, hamil=None)[source]
+

Build callback function for CCSD, to add external correction from other fragments.

+

TODO: combine with tailor_with_fragments?

+
+
Parameters:
+
    +
  • solver (CCSD_Solver) – Vayesta CCSD solver.

  • +
  • external_corrections (list of tuple of (int, str, int, bool)) – List of external corrections. Each tuple contains the fragment ID, type of correction, +and number of projectors for the given external correction. Final element is boolean giving +the low_level_coul optional argument.

  • +
  • eris (_ChemistsERIs) – ERIs for parent CCSD fragment. Used for MO energies in residual contraction, and for +the case of low_level_coul, where the parent Coulomb integral is contracted. +If not passed in, MO energy if needed will be constructed from the diagonal of +get_fock() of embedding base class, and the eris will be also be obtained from the +embedding base class. Optional.

  • +
+
+
Returns:
+

callback – Callback function for PySCF’s CCSD solver.

+
+
Return type:
+

callable

+
+
+
+ +
+
+

vayesta.solver.dump

+
+
+class vayesta.solver.dump.DumpSolver(hamil, log=None, **kwargs)[source]
+

Bases: ClusterSolver

+
+
+class Options(dumpfile: str = None)[source]
+

Bases: Options

+
+
+dumpfile: str = None
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+kernel(*args, **kwargs)[source]
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+

vayesta.solver.ebcc

+
+
+class vayesta.solver.ebcc.REBCC_Solver(*args, **kwargs)[source]
+

Bases: ClusterSolver

+
+
+class Options(ansatz: str = 'CCSD', solve_lambda: bool = False, max_cycle: int = 200, conv_tol: float = None, conv_tol_normt: float = None)[source]
+

Bases: Options

+
+
+ansatz: str = 'CCSD'
+
+ +
+
+solve_lambda: bool = False
+
+ +
+
+max_cycle: int = 200
+
+ +
+
+conv_tol: float = None
+
+ +
+
+conv_tol_normt: float = None
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+property is_fCCSD
+
+ +
+
+kernel()[source]
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+get_nonnull_solver_opts()[source]
+
+ +
+
+construct_wavefunction(mycc, mo)[source]
+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.ebcc.UEBCC_Solver(*args, **kwargs)[source]
+

Bases: UClusterSolver, REBCC_Solver

+
+
+class Options(ansatz: str = 'CCSD', solve_lambda: bool = False, max_cycle: int = 200, conv_tol: float = None, conv_tol_normt: float = None)[source]
+

Bases: Options, Options

+
+
+ansatz: str = 'CCSD'
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = None
+
+ +
+
+conv_tol_normt: float = None
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+max_cycle: int = 200
+
+ +
+
+replace(**kwargs)
+
+ +
+
+solve_lambda: bool = False
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+construct_wavefunction(mycc, mo)[source]
+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+get_nonnull_solver_opts()
+
+ +
+
+property is_fCCSD
+
+ +
+
+kernel()
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.ebcc.EB_REBCC_Solver(*args, **kwargs)[source]
+

Bases: REBCC_Solver

+
+
+class Options(ansatz: str = 'CCSD-S-1-1', solve_lambda: bool = False, max_cycle: int = 200, conv_tol: float = None, conv_tol_normt: float = None)[source]
+

Bases: Options

+
+
+ansatz: str = 'CCSD-S-1-1'
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = None
+
+ +
+
+conv_tol_normt: float = None
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+max_cycle: int = 200
+
+ +
+
+replace(**kwargs)
+
+ +
+
+solve_lambda: bool = False
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+property is_fCCSD
+
+ +
+
+get_nonnull_solver_opts()[source]
+
+ +
+
+get_couplings()[source]
+
+ +
+
+construct_wavefunction(mycc, mo)[source]
+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+kernel()
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.ebcc.EB_UEBCC_Solver(*args, **kwargs)[source]
+

Bases: EB_REBCC_Solver, UEBCC_Solver

+
+
+class Options(ansatz: str = 'CCSD', solve_lambda: bool = False, max_cycle: int = 200, conv_tol: float = None, conv_tol_normt: float = None)[source]
+

Bases: Options, Options

+
+
+ansatz: str = 'CCSD-S-1-1'
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = None
+
+ +
+
+conv_tol_normt: float = None
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+max_cycle: int = 200
+
+ +
+
+replace(**kwargs)
+
+ +
+
+solve_lambda: bool = False
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+get_couplings()[source]
+
+ +
+
+construct_wavefunction(mycc, mo)[source]
+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+get_nonnull_solver_opts()
+
+ +
+
+property is_fCCSD
+
+ +
+
+kernel()
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+

vayesta.solver.ebfci

+
+
+class vayesta.solver.ebfci.EB_EBFCI_Solver(hamil, log=None, **kwargs)[source]
+

Bases: ClusterSolver

+
+
+class Options(max_cycle: int = 100, conv_tol: float = None, max_boson_occ: int = 2)[source]
+

Bases: Options

+
+
+max_cycle: int = 100
+
+ +
+
+conv_tol: float = None
+
+ +
+
+max_boson_occ: int = 2
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+get_solver(*args, **kwargs)[source]
+
+ +
+
+kernel()[source]
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.ebfci.EB_UEBFCI_Solver(hamil, log=None, **kwargs)[source]
+

Bases: UClusterSolver, EB_EBFCI_Solver

+
+
+get_solver(*args, **kwargs)[source]
+
+ +
+
+class Options(max_cycle: int = 100, conv_tol: float = None, max_boson_occ: int = 2)
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = None
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+max_boson_occ: int = 2
+
+ +
+
+max_cycle: int = 100
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+kernel()
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+

vayesta.solver.ext_ccsd

+
+
+class vayesta.solver.ext_ccsd.extRCCSD_Solver(hamil, log=None, **kwargs)[source]
+

Bases: RCCSD_Solver

+
+
+class Options(max_cycle: int = 100, conv_tol: float = None, conv_tol_normt: float = None, diis_space: int = None, diis_start_cycle: int = None, iterative_damping: float = None, level_shift: float = None, init_guess: str = 'MP2', solve_lambda: bool = True, sc_mode: int = None, external_corrections: Union[List[Any], NoneType] = <factory>)[source]
+

Bases: Options

+
+
+external_corrections: List[Any] | None
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = None
+
+ +
+
+conv_tol_normt: float = None
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+diis_space: int = None
+
+ +
+
+diis_start_cycle: int = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+init_guess: str = 'MP2'
+
+ +
+
+items()
+
+ +
+
+iterative_damping: float = None
+
+ +
+
+keys()
+
+ +
+
+level_shift: float = None
+
+ +
+
+max_cycle: int = 100
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = None
+
+ +
+
+solve_lambda: bool = True
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+get_callback()[source]
+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+generate_init_guess(eris=None)
+
+ +
+
+get_init_guess()
+
+ +
+
+get_solver_class(mf)
+
+ +
+
+kernel(t1=None, t2=None, l1=None, l2=None, coupled_fragments=None, t_diagnostic=True)
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+print_extra_info(mycc)
+
+ +
+
+t_diagnostic(solver)
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.ext_ccsd.extUCCSD_Solver(hamil, log=None, **kwargs)[source]
+

Bases: UCCSD_Solver, extRCCSD_Solver

+
+
+class Options(max_cycle: int = 100, conv_tol: float = None, conv_tol_normt: float = None, diis_space: int = None, diis_start_cycle: int = None, iterative_damping: float = None, level_shift: float = None, init_guess: str = 'MP2', solve_lambda: bool = True, sc_mode: int = None, external_corrections: Union[List[Any], NoneType] = <factory>)[source]
+

Bases: Options, Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = None
+
+ +
+
+conv_tol_normt: float = None
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+diis_space: int = None
+
+ +
+
+diis_start_cycle: int = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+init_guess: str = 'MP2'
+
+ +
+
+items()
+
+ +
+
+iterative_damping: float = None
+
+ +
+
+keys()
+
+ +
+
+level_shift: float = None
+
+ +
+
+max_cycle: int = 100
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = None
+
+ +
+
+solve_lambda: bool = True
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+
+external_corrections: List[Any] | None
+
+ +
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+generate_init_guess(eris=None)
+
+ +
+
+get_callback()
+
+ +
+
+get_init_guess()
+
+ +
+
+get_solver_class(mf)
+
+ +
+
+kernel(t1=None, t2=None, l1=None, l2=None, coupled_fragments=None, t_diagnostic=True)
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+print_extra_info(mycc)
+
+ +
+
+t_diagnostic(solver)
+

T diagnostic not implemented for UCCSD in PySCF.

+
+ +
+
+property v_ext
+
+ +
+ +
+
+

vayesta.solver.fci

+
+
+class vayesta.solver.fci.FCI_Solver(*args, **kwargs)[source]
+

Bases: ClusterSolver

+
+
+class Options(threads: int = 1, max_cycle: int = 300, lindep: float = None, conv_tol: float = 1e-12, solver_spin: bool = True, fix_spin: float = 0.0, fix_spin_penalty: float = 1.0, davidson_only: bool = True, init_guess: str = 'default', init_guess_noise: float = 1e-05)[source]
+

Bases: Options

+
+
+threads: int = 1
+
+ +
+
+max_cycle: int = 300
+
+ +
+
+lindep: float = None
+
+ +
+
+conv_tol: float = 1e-12
+
+ +
+
+solver_spin: bool = True
+
+ +
+
+fix_spin: float = 0.0
+
+ +
+
+fix_spin_penalty: float = 1.0
+
+ +
+
+davidson_only: bool = True
+
+ +
+
+init_guess: str = 'default'
+
+ +
+
+init_guess_noise: float = 1e-05
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+cisd_solver
+

alias of RCISD_Solver

+
+ +
+
+get_solver_class()[source]
+
+ +
+
+kernel(ci=None)[source]
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.fci.UFCI_Solver(*args, **kwargs)[source]
+

Bases: UClusterSolver, FCI_Solver

+
+
+class Options(threads: int = 1, max_cycle: int = 300, lindep: float = None, conv_tol: float = 1e-12, solver_spin: bool = True, fix_spin: float = None, fix_spin_penalty: float = 1.0, davidson_only: bool = True, init_guess: str = 'default', init_guess_noise: float = 1e-05)[source]
+

Bases: Options

+
+
+fix_spin: float = None
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = 1e-12
+
+ +
+
+davidson_only: bool = True
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+fix_spin_penalty: float = 1.0
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+init_guess: str = 'default'
+
+ +
+
+init_guess_noise: float = 1e-05
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+lindep: float = None
+
+ +
+
+max_cycle: int = 300
+
+ +
+
+replace(**kwargs)
+
+ +
+
+solver_spin: bool = True
+
+ +
+
+threads: int = 1
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+cisd_solver
+

alias of UCISD_Solver

+
+ +
+
+get_solver_class()[source]
+
+ +
+
+kernel(ci=None)[source]
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+

vayesta.solver.hamiltonian

+
+
+vayesta.solver.hamiltonian.is_ham(ham)[source]
+
+ +
+
+vayesta.solver.hamiltonian.is_uhf_ham(ham)[source]
+
+ +
+
+vayesta.solver.hamiltonian.is_eb_ham(ham)[source]
+
+ +
+
+vayesta.solver.hamiltonian.ClusterHamiltonian(fragment, mf, log=None, **kwargs)[source]
+
+ +
+
+class vayesta.solver.hamiltonian.DummyERIs(getter, valid_blocks, **kwargs)[source]
+

Bases: object

+
+ +
+
+class vayesta.solver.hamiltonian.RClusterHamiltonian(fragment, mf, log=None, cluster=None, **kwargs)[source]
+

Bases: object

+
+
+class Options(screening: str | NoneType = None, cache_eris: bool = True)[source]
+

Bases: OptionsBase

+
+
+screening: str | None = None
+
+ +
+
+cache_eris: bool = True
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+property cluster
+
+ +
+
+property mo
+
+ +
+
+property nelec
+
+ +
+
+property ncas
+
+ +
+
+property has_screening
+
+ +
+
+target_space_projector(c=None)[source]
+

Projector to the target fragment space within our cluster.

+
+ +
+
+get_integrals(bare_eris=None, with_vext=True)[source]
+
+ +
+
+get_fock(with_vext=True, use_seris=True, with_exxdiv=False)[source]
+
+ +
+
+get_heff(eris=None, fock=None, with_vext=True, with_exxdiv=False)[source]
+
+ +
+
+get_eris_screened(block=None)[source]
+
+ +
+
+get_eris_bare(block=None)[source]
+
+ +
+
+get_cderi_bare(only_ov=False, compress=False, svd_threshold=1e-12)[source]
+
+ +
+
+to_pyscf_mf(allow_dummy_orbs=False, force_bare_eris=False, overwrite_fock=False, allow_df=False)[source]
+

Generate pyscf.scf object representing this active space Hamiltonian. +This should be able to be passed into a standard post-hf pyscf solver without modification.

+
+
Parameters:
+
    +
  • allow_dummy_orbs (bool, optional) – Whether the introduction of dummy orbitals into the mean-field, which are then frozen, is permitted. +Default is False

  • +
  • force_bare_eris (bool, optional) – Forces resultant mean-field object to use unscreened eris. +Default is False

  • +
  • overwrite_fock (bool, optional) – Whether mf.get_fock should be set to self.get_fock. Mainly for use in UHF. +Default is False

  • +
  • allow_df (bool, optional) – Whether the resultant mean-field object should include a .with_df object containing the projection of the +CDERIs into the cluster space. +Default is False

  • +
+
+
Returns:
+

    +
  • clusmf (pyscf.scf.SCF) – Representation of cluster as pyscf mean-field.

  • +
  • orbs_to_freeze (list of lists) – Which orbitals to freeze, split by spin channel if UHF.

  • +
+

+
+
+
+ +
+
+get_clus_mf_info(ao_basis=False, with_vext=True, with_exxdiv=False)[source]
+
+ +
+
+add_screening(seris_intermed=None)[source]
+

Add screened interactions into the Hamiltonian.

+
+ +
+
+calc_loc_erpa()[source]
+
+ +
+
+assert_equal_spin_channels(message='')[source]
+
+ +
+
+with_new_cluster(cluster)[source]
+
+ +
+
+get_dummy_eri_object(force_bare=False, with_vext=True, with_exxdiv=False)[source]
+
+ +
+ +
+
+class vayesta.solver.hamiltonian.UClusterHamiltonian(fragment, mf, log=None, cluster=None, **kwargs)[source]
+

Bases: RClusterHamiltonian

+
+
+property ncas
+
+ +
+
+property nelec
+
+ +
+
+get_fock(with_vext=True, use_seris=True, with_exxdiv=False)[source]
+
+ +
+
+get_heff(eris=None, fock=None, with_vext=True, with_exxdiv=False)[source]
+
+ +
+
+get_eris_bare(block=None)[source]
+
+ +
+
+get_cderi_bare(only_ov=False, compress=False, svd_threshold=1e-12)[source]
+
+ +
+
+to_pyscf_mf(allow_dummy_orbs=True, force_bare_eris=False, overwrite_fock=True, allow_df=False)[source]
+

Generate pyscf.scf object representing this active space Hamiltonian. +This should be able to be passed into a standard post-hf pyscf solver without modification.

+
+
Parameters:
+
    +
  • allow_dummy_orbs (bool, optional) – Whether the introduction of dummy orbitals into the mean-field, which are then frozen, is permitted. +Default is False

  • +
  • force_bare_eris (bool, optional) – Forces resultant mean-field object to use unscreened eris. +Default is False

  • +
  • overwrite_fock (bool, optional) – Whether mf.get_fock should be set to self.get_fock. Mainly for use in UHF. +Default is False

  • +
  • allow_df (bool, optional) – Whether the resultant mean-field object should include a .with_df object containing the projection of the +CDERIs into the cluster space. +Default is False

  • +
+
+
Returns:
+

    +
  • clusmf (pyscf.scf.SCF) – Representation of cluster as pyscf mean-field.

  • +
  • orbs_to_freeze (list of lists) – Which orbitals to freeze, split by spin channel if UHF.

  • +
+

+
+
+
+ +
+
+get_clus_mf_info(ao_basis=False, with_vext=True, with_exxdiv=False)[source]
+
+ +
+
+get_dummy_eri_object(force_bare=False, with_vext=True, with_exxdiv=False)[source]
+
+ +
+
+class Options(screening: str | NoneType = None, cache_eris: bool = True)
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+cache_eris: bool = True
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+add_screening(seris_intermed=None)
+

Add screened interactions into the Hamiltonian.

+
+ +
+
+assert_equal_spin_channels(message='')
+
+ +
+
+calc_loc_erpa()
+
+ +
+
+property cluster
+
+ +
+
+get_eris_screened(block=None)
+
+ +
+
+get_integrals(bare_eris=None, with_vext=True)
+
+ +
+
+property has_screening
+
+ +
+
+property mo
+
+ +
+
+target_space_projector(c=None)
+

Projector to the target fragment space within our cluster.

+
+ +
+
+with_new_cluster(cluster)
+
+ +
+ +
+
+class vayesta.solver.hamiltonian.EB_RClusterHamiltonian(*args, **kwargs)[source]
+

Bases: RClusterHamiltonian

+
+
+class Options(screening: str | NoneType = None, cache_eris: bool = True, polaritonic_shift: bool = True)[source]
+

Bases: Options

+
+
+polaritonic_shift: bool = True
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+cache_eris: bool = True
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+property polaritonic_shift
+
+ +
+
+property couplings
+
+ +
+
+set_polaritonic_shift(freqs, couplings)[source]
+
+ +
+
+get_heff(eris=None, fock=None, with_vext=True)[source]
+
+ +
+
+get_polaritonic_fock_shift(couplings)[source]
+
+ +
+
+get_polaritonic_shifted_couplings()[source]
+
+ +
+
+get_eb_dm_polaritonic_shift(dm1)[source]
+
+ +
+
+add_screening(seris_intermed=None)
+

Add screened interactions into the Hamiltonian.

+
+ +
+
+assert_equal_spin_channels(message='')
+
+ +
+
+calc_loc_erpa()
+
+ +
+
+property cluster
+
+ +
+
+get_cderi_bare(only_ov=False, compress=False, svd_threshold=1e-12)
+
+ +
+
+get_clus_mf_info(ao_basis=False, with_vext=True, with_exxdiv=False)
+
+ +
+
+get_dummy_eri_object(force_bare=False, with_vext=True, with_exxdiv=False)
+
+ +
+
+get_eris_bare(block=None)
+
+ +
+
+get_eris_screened(block=None)
+
+ +
+
+get_fock(with_vext=True, use_seris=True, with_exxdiv=False)
+
+ +
+
+get_integrals(bare_eris=None, with_vext=True)
+
+ +
+
+property has_screening
+
+ +
+
+property mo
+
+ +
+
+property ncas
+
+ +
+
+property nelec
+
+ +
+
+target_space_projector(c=None)
+

Projector to the target fragment space within our cluster.

+
+ +
+
+to_pyscf_mf(allow_dummy_orbs=False, force_bare_eris=False, overwrite_fock=False, allow_df=False)
+

Generate pyscf.scf object representing this active space Hamiltonian. +This should be able to be passed into a standard post-hf pyscf solver without modification.

+
+
Parameters:
+
    +
  • allow_dummy_orbs (bool, optional) – Whether the introduction of dummy orbitals into the mean-field, which are then frozen, is permitted. +Default is False

  • +
  • force_bare_eris (bool, optional) – Forces resultant mean-field object to use unscreened eris. +Default is False

  • +
  • overwrite_fock (bool, optional) – Whether mf.get_fock should be set to self.get_fock. Mainly for use in UHF. +Default is False

  • +
  • allow_df (bool, optional) – Whether the resultant mean-field object should include a .with_df object containing the projection of the +CDERIs into the cluster space. +Default is False

  • +
+
+
Returns:
+

    +
  • clusmf (pyscf.scf.SCF) – Representation of cluster as pyscf mean-field.

  • +
  • orbs_to_freeze (list of lists) – Which orbitals to freeze, split by spin channel if UHF.

  • +
+

+
+
+
+ +
+
+with_new_cluster(cluster)
+
+ +
+ +
+
+class vayesta.solver.hamiltonian.EB_UClusterHamiltonian(*args, **kwargs)[source]
+

Bases: UClusterHamiltonian, EB_RClusterHamiltonian

+
+
+class Options(screening: str | NoneType = None, cache_eris: bool = True, polaritonic_shift: bool = True)[source]
+

Bases: Options

+
+
+polaritonic_shift: bool = True
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+cache_eris: bool = True
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+screening: str | None = None
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+property couplings
+
+ +
+
+get_heff(eris=None, fock=None, with_vext=True)[source]
+
+ +
+
+get_polaritonic_shifted_couplings()[source]
+
+ +
+
+get_eb_dm_polaritonic_shift(dm1)[source]
+
+ +
+
+add_screening(seris_intermed=None)
+

Add screened interactions into the Hamiltonian.

+
+ +
+
+assert_equal_spin_channels(message='')
+
+ +
+
+calc_loc_erpa()
+
+ +
+
+property cluster
+
+ +
+
+get_cderi_bare(only_ov=False, compress=False, svd_threshold=1e-12)
+
+ +
+
+get_clus_mf_info(ao_basis=False, with_vext=True, with_exxdiv=False)
+
+ +
+
+get_dummy_eri_object(force_bare=False, with_vext=True, with_exxdiv=False)
+
+ +
+
+get_eris_bare(block=None)
+
+ +
+
+get_eris_screened(block=None)
+
+ +
+
+get_fock(with_vext=True, use_seris=True, with_exxdiv=False)
+
+ +
+
+get_integrals(bare_eris=None, with_vext=True)
+
+ +
+
+get_polaritonic_fock_shift(couplings)
+
+ +
+
+property has_screening
+
+ +
+
+property mo
+
+ +
+
+property ncas
+
+ +
+
+property nelec
+
+ +
+
+property polaritonic_shift
+
+ +
+
+set_polaritonic_shift(freqs, couplings)
+
+ +
+
+target_space_projector(c=None)
+

Projector to the target fragment space within our cluster.

+
+ +
+
+to_pyscf_mf(allow_dummy_orbs=True, force_bare_eris=False, overwrite_fock=True, allow_df=False)
+

Generate pyscf.scf object representing this active space Hamiltonian. +This should be able to be passed into a standard post-hf pyscf solver without modification.

+
+
Parameters:
+
    +
  • allow_dummy_orbs (bool, optional) – Whether the introduction of dummy orbitals into the mean-field, which are then frozen, is permitted. +Default is False

  • +
  • force_bare_eris (bool, optional) – Forces resultant mean-field object to use unscreened eris. +Default is False

  • +
  • overwrite_fock (bool, optional) – Whether mf.get_fock should be set to self.get_fock. Mainly for use in UHF. +Default is False

  • +
  • allow_df (bool, optional) – Whether the resultant mean-field object should include a .with_df object containing the projection of the +CDERIs into the cluster space. +Default is False

  • +
+
+
Returns:
+

    +
  • clusmf (pyscf.scf.SCF) – Representation of cluster as pyscf mean-field.

  • +
  • orbs_to_freeze (list of lists) – Which orbitals to freeze, split by spin channel if UHF.

  • +
+

+
+
+
+ +
+
+with_new_cluster(cluster)
+
+ +
+ +
+
+

vayesta.solver.mp2

+
+
+class vayesta.solver.mp2.RMP2_Solver(hamil, log=None, **kwargs)[source]
+

Bases: ClusterSolver

+
+
+class Options(compress_cderi: bool = False)[source]
+

Bases: Options

+
+
+compress_cderi: bool = False
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+kernel(*args, **kwargs)[source]
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+get_ov_eris(eris, nocc)[source]
+
+ +
+
+make_t2(mo_energy, eris=None, cderi=None, cderi_neg=None, blksize=None)[source]
+

Make T2 amplitudes

+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+class vayesta.solver.mp2.UMP2_Solver(hamil, log=None, **kwargs)[source]
+

Bases: UClusterSolver, RMP2_Solver

+
+
+get_ov_eris(eris, nocc)[source]
+
+ +
+
+make_t2(mo_energy, eris=None, cderi=None, cderi_neg=None, blksize=None, workmem=1000000000)[source]
+

Make T2 amplitudes

+
+ +
+
+class Options(compress_cderi: bool = False)
+

Bases: Options

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+compress_cderi: bool = False
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+get_init_guess()
+
+ +
+
+kernel(*args, **kwargs)
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+

vayesta.solver.solver

+
+
+class vayesta.solver.solver.ClusterSolver(hamil, log=None, **kwargs)[source]
+

Bases: object

+

Base class for cluster solver

+
+
+class Options[source]
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+property v_ext
+
+ +
+
+kernel(*args, **kwargs)[source]
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)[source]
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+calc_v_ext(v_ext_0, cpt)[source]
+
+ +
+
+get_init_guess()[source]
+
+ +
+ +
+
+class vayesta.solver.solver.UClusterSolver(hamil, log=None, **kwargs)[source]
+

Bases: ClusterSolver

+
+
+class Options
+

Bases: OptionsBase

+
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+items()
+
+ +
+
+keys()
+
+ +
+
+replace(**kwargs)
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+calc_v_ext(v_ext_0, cpt)[source]
+
+ +
+
+get_init_guess()
+
+ +
+
+kernel(*args, **kwargs)
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+property v_ext
+
+ +
+ +
+
+

vayesta.solver.tccsd

+
+
+class vayesta.solver.tccsd.TRCCSD_Solver(hamil, log=None, **kwargs)[source]
+

Bases: RCCSD_Solver

+
+
+class Options(max_cycle: int = 100, conv_tol: float = None, conv_tol_normt: float = None, diis_space: int = None, diis_start_cycle: int = None, iterative_damping: float = None, level_shift: float = None, init_guess: str = 'MP2', solve_lambda: bool = True, sc_mode: int = None, fci_opts: dict = <factory>, c_cas_occ: <built-in function array> = None, c_cas_vir: <built-in function array> = None)[source]
+

Bases: Options

+
+
+fci_opts: dict
+
+ +
+
+c_cas_occ: array = None
+
+ +
+
+c_cas_vir: array = None
+
+ +
+
+asdict(deepcopy=False)
+
+ +
+
+classmethod change_dict_defaults(field, **kwargs)
+
+ +
+
+conv_tol: float = None
+
+ +
+
+conv_tol_normt: float = None
+
+ +
+
+static dict_with_defaults(**kwargs)
+
+ +
+
+diis_space: int = None
+
+ +
+
+diis_start_cycle: int = None
+
+ +
+
+get(attr, default=None)
+

Dictionary-like access to attributes. +Allows the definition of a default value, of the attribute is not present.

+
+ +
+
+classmethod get_default(field)
+
+ +
+
+classmethod get_default_factory(field)
+
+ +
+
+init_guess: str = 'MP2'
+
+ +
+
+items()
+
+ +
+
+iterative_damping: float = None
+
+ +
+
+keys()
+
+ +
+
+level_shift: float = None
+
+ +
+
+max_cycle: int = 100
+
+ +
+
+replace(**kwargs)
+
+ +
+
+sc_mode: int = None
+
+ +
+
+solve_lambda: bool = True
+
+ +
+
+update(**kwargs)
+
+ +
+
+values()
+
+ +
+ +
+
+get_callback()[source]
+
+ +
+
+print_extra_info(mycc)[source]
+
+ +
+
+calc_v_ext(v_ext_0, cpt)
+
+ +
+
+generate_init_guess(eris=None)
+
+ +
+
+get_init_guess()
+
+ +
+
+get_solver_class(mf)
+
+ +
+
+kernel(t1=None, t2=None, l1=None, l2=None, coupled_fragments=None, t_diagnostic=True)
+

Set up everything for a calculation on the CAS and pass this to the solver-specific kernel that runs on this +information.

+
+ +
+
+optimize_cpt(nelectron, c_frag, cpt_guess=0, atol=1e-06, rtol=1e-06, cpt_radius=0.5)
+

Enables chemical potential optimization to match a number of electrons in the fragment space.

+
+
Parameters:
+
    +
  • nelectron (float) – Target number of electrons.

  • +
  • c_frag (array) – Fragment orbitals.

  • +
  • cpt_guess (float, optional) – Initial guess for fragment chemical potential. Default: 0.

  • +
  • atol (float, optional) – Absolute electron number tolerance. Default: 1e-6.

  • +
  • rtol (float, optional) – Relative electron number tolerance. Default: 1e-6

  • +
  • cpt_radius (float, optional) – Search radius for chemical potential. Default: 0.5.

  • +
+
+
Returns:
+

Solver results.

+
+
Return type:
+

results

+
+
+
+ +
+
+t_diagnostic(solver)
+
+ +
+
+property v_ext
+
+ +
+ +
+
+

Module contents

+
+
+vayesta.solver.get_solver_class(ham, solver)[source]
+
+ +
+
+vayesta.solver.check_solver_config(is_uhf, is_eb, solver, log)[source]
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.tools.html b/apidoc/vayesta.tools.html new file mode 100644 index 000000000..1347281e1 --- /dev/null +++ b/apidoc/vayesta.tools.html @@ -0,0 +1,197 @@ + + + + + + + vayesta.tools — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.tools

+
+

Subpackages

+ +
+
+

Submodules

+
+
+

vayesta.tools.eos

+

Fitting of equations of states.

+
+
+vayesta.tools.eos.parabola(v, e0, v0, b0)[source]
+

Quadratic equation of state.

+
+ +
+
+vayesta.tools.eos.birch_murnaghan(v, e0, v0, b0, bp)[source]
+

Third-order Birch-Murnaghan equation of states.

+
+ +
+
+class vayesta.tools.eos.FitResult(e0: float | None = None, b0: float | None = None, x0: float | None = None, v0: float | None = None, bp: float | None = None)[source]
+

Bases: object

+

DOC

+
+
+e0: float = None
+
+ +
+
+b0: float = None
+
+ +
+
+x0: float = None
+
+ +
+
+v0: float = None
+
+ +
+
+bp: float = None
+
+ +
+ +
+
+vayesta.tools.eos.fit_eos(volumes, energies, fitfunc=<function birch_murnaghan>, plot=True, value_at=None)[source]
+

Fit EOS to volumes, energies data points.

+
+ +
+
+vayesta.tools.eos.fit_from_file(filename, xcol=0, ycol=1, volume_func=None)[source]
+

Load and fit EOS to textfile.

+
+ +
+
+vayesta.tools.eos.cmdline_tool()[source]
+
+ +
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/apidoc/vayesta.tools.plotting.html b/apidoc/vayesta.tools.plotting.html new file mode 100644 index 000000000..2099b009c --- /dev/null +++ b/apidoc/vayesta.tools.plotting.html @@ -0,0 +1,128 @@ + + + + + + + vayesta.tools.plotting — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

vayesta.tools.plotting

+
+

Submodules

+
+
+

vayesta.tools.plotting.colors

+
+
+vayesta.tools.plotting.colors.get_atom_color(symbol, default='#FF1493')[source]
+
+ +
+
+

vayesta.tools.plotting.mpl_mol

+
+
+

vayesta.tools.plotting.plotly_mol

+
+
+

Module contents

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/faq/blas.html b/faq/blas.html new file mode 100644 index 000000000..bac8bd1e3 --- /dev/null +++ b/faq/blas.html @@ -0,0 +1,155 @@ + + + + + + + Installing OpenBLAS from source — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Installing OpenBLAS from source

+

The following is an example of installation of OpenBLAS, which can be important for +multithreaded solutions to the embedding problems and other linear algebra operations required.

+

This installation example is carried out using gcc compilers.

+
+

Note

+

The installation of OpenBLAS should be done locally.

+
+

To install a local version, a specific directory should be created where the library is stored:

+
[~]$ mkdir $HOME/work
+[~]$ export WORK=$HOME/work
+
+
+

The last line of code creates an enviromental variable called WORK, which will store the absolute path declared for the directory work.

+

To install an openmp version of OpenBLAS, a series of steps need to be followed. Firstly, specific options should be selected as is shown in the following lines of code:

+
[~]$ export USE_OPENMP=1
+[~]$ export NO_WARMUP=1
+[~]$ export BUILD_RELAPACK=0
+[~]$ export DYNAMIC_ARCH=0
+[~]$ export CC=gcc
+[~]$ export FC=gfortran
+[~]$ export HOSTCC=gcc
+
+
+

The last 3 options ensures the use of GNU compilers. Similarly, a set of optimized FLAGS is defined in the following way:

+
[~]$ export COMMON_OPT="-O3 -ftree-vectorize -fprefetch-loop-arrays --param prefetch-latency=300"
+[~]$ export CFLAGS="-O3 -ftree-vectorize -fprefetch-loop-arrays --param prefetch-latency=300"
+[~]$ export FCOMMON_OPT="-O3 -ftree-vectorize -fprefetch-loop-arrays --param prefetch-latency=300"
+[~]$ export FCFLAGS="-O3 -ftree-vectorize -fprefetch-loop-arrays --param prefetch-latency=300"
+
+
+

To install OpenBLAS, the following commands should be used:

+
[~]$ OPENBLAS_DIR=$HOME/work/openblas
+[~]$ make -j4 BINARY=64 INTERFACE=64 LIBNAMESUFFIX=openmp
+[~]$ make PREFIX=$OPENBLAS_DIR LIBNAMESUFFIX=openmp install
+
+
+

This concludes the installation of OpenBLAS. The library can be found in the path $HOME/work/openblas.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/faq/env.html b/faq/env.html new file mode 100644 index 000000000..13866f3e5 --- /dev/null +++ b/faq/env.html @@ -0,0 +1,116 @@ + + + + + + + Environment Variables — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Environment Variables

+

An important point is to configure the pip to point to the directory $HOME/work. +This can be done via the following lines of code:

+
[~]$ export PYTHONUSERBASE=${WORK}/.local
+[~]$ export PATH=$PYTHONUSERBASE/bin:$PATH
+[~]$ export PYTHONPATH=$PYTHONUSERBASE/lib/pythonX.X/site-packages:$PYTHONPATH
+
+
+

This ensures that the future installations will be stored in this directory.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/faq/index.html b/faq/index.html new file mode 100644 index 000000000..5cd4680aa --- /dev/null +++ b/faq/index.html @@ -0,0 +1,128 @@ + + + + + + + FAQ — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

FAQ

+

Significant additional functionality present in Vayesta is not covered in the quickstart section—however, +much of it is covered by the examples found with the source. +Here, we cover a few selected additional questions on the setup and workings.

+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/faq/mpi4py.html b/faq/mpi4py.html new file mode 100644 index 000000000..da2aeb478 --- /dev/null +++ b/faq/mpi4py.html @@ -0,0 +1,123 @@ + + + + + + + Installing mpi4py — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Installing mpi4py

+

To install mpi4py, the following command can be used to build the library:

+
env MPICC=/../mpicc python -m pip install --force --user mpi4py
+
+
+

This ensures the creation of the library locally.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 000000000..d98662a1d --- /dev/null +++ b/genindex.html @@ -0,0 +1,17081 @@ + + + + + + Index — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | K + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | X + +
+

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

J

+ + +
+ +

K

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

Q

+ + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + + +
+ +

W

+ + + +
+ +

X

+ + + +
+ + + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/include/links.html b/include/links.html new file mode 100644 index 000000000..463d55d32 --- /dev/null +++ b/include/links.html @@ -0,0 +1,105 @@ + + + + + + + <no title> — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ + + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 000000000..ff64ab805 --- /dev/null +++ b/index.html @@ -0,0 +1,177 @@ + + + + + + + Vayesta Documentation — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/install.html b/install.html new file mode 100644 index 000000000..cca255fb6 --- /dev/null +++ b/install.html @@ -0,0 +1,159 @@ + + + + + + + Installation — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Installation

+

Vayesta can be installed using pip or from source.

+
+

Installing with pip

+

The simplest way to install Vayesta is to use the setup.py:

+
[~]$ git clone https://github.com/BoothGroup/Vayesta
+[~]$ cd Vayesta
+[~]$ pip install .
+
+
+

All required python packages, such as NumPy and PySCF will be installed automatically.

+

Optional dependencies are required to perform DMET calculations, to leverage MPI parallelism, or to use [ebcc](https://github.com/BoothGroup/ebcc) solvers. +These can be specified by adding the modifiers [dmet], [mpi], and [ebcc], respectively.

+
+
+

Installation from Source

+
+

Note

+

Vayesta requires the following python packages when installing from source: NumPy, SciPy, PySCF, and h5py)

+
+

To install Vayesta from source, clone the GitHub repository and use cmake and make to compile:

+
[~]$ git clone https://github.com/BoothGroup/Vayesta .
+[~]$ cd Vayesta/vayesta/libs
+[~]$ mkdir build && cd build
+[~]$ cmake ..
+[~]$ make
+
+
+

To ensure that Vayesta is found by the Python interpreter when calling import vayesta, +the installation location needs to be prepended to the PYTHONPATH environment variable as follows:

+
[~]$ export PYTHONPATH:"/path/to/vayesta":$PYTHONPATH
+
+
+

This command can be added to the ~/.profile file located in the home dirctory, to ensure that it is excecuted for every new shell instance.

+
+
+

Running Tests

+

After installation it is a good idea to run the test suite with pytest using the following command:

+
[~]$ pytest vayesta/tests
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/intro.html b/intro.html new file mode 100644 index 000000000..e36da5d8f --- /dev/null +++ b/intro.html @@ -0,0 +1,184 @@ + + + + + + + Introduction — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+_images/graphene_titlepic.png +
+

Fig. 1 Embedding of a carbon atom in graphene.

+
+
+
+

Introduction

+

Vayesta is a Python package for performing correlated wave function-based quantum embedding +in ab initio molecules and solids, as well as lattice models.

+

It builds on the functionality of the PySCF package to set up the system and obtain mean-field properties. +With Vayesta one can define fragments within these systems in a highly flexible way +and add bath orbitals to represent the coupling of each fragment to its extended environment, +with various approaches actively developed. +The resulting quantum embedding problems can be solved with a variety of wave function based solvers, +making use of the efficient implementations within PySCF. +As a final step, expectation values, such as the energy or reduced density-matrices, +can be reconstructed from the collection of individually-solved embedding problems. +Vayesta also offers support for self-consistency in the procedure or closer coupling in the solutions of the embedding problems.

+

The package and methods are actively developed.

+
+

Features

+
    +
  • +
    Fragments can be flexibly defined in terms of sets of:
    +
    +
    +
  • +
  • +
    Bath orbitals:
    +
    +
    +
  • +
  • +
    Quantum embedding problems can be solved with the following PySCF solvers:
      +
    • Second-order Møller–Plesset perturbation theory (MP2)

    • +
    • Configuration interaction with single and double excitations (CISD)

    • +
    • Coupled-cluster with single and double excitations (CCSD)

    • +
    • Full configuration-interaction (FCI)

    • +
    • Dump orbitals and integrals of resulting embedded cluster to HDF5 file for external processing

    • +
    +
    +
    +
  • +
+

Additional functionality is available for self-consistency and the definition of different resulting expectation values.

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 000000000..c2304a37e Binary files /dev/null and b/objects.inv differ diff --git a/py-modindex.html b/py-modindex.html new file mode 100644 index 000000000..7736bc290 --- /dev/null +++ b/py-modindex.html @@ -0,0 +1,794 @@ + + + + + + Python Module Index — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ v +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ v
+ vayesta +
    + vayesta.core +
    + vayesta.core.ao2mo +
    + vayesta.core.ao2mo.helper +
    + vayesta.core.ao2mo.kao2gmo +
    + vayesta.core.ao2mo.postscf_ao2mo +
    + vayesta.core.ao2mo.pyscf_eris +
    + vayesta.core.bath +
    + vayesta.core.bath.bath +
    + vayesta.core.bath.bno +
    + vayesta.core.bath.dmet +
    + vayesta.core.bath.ewdmet +
    + vayesta.core.bath.full +
    + vayesta.core.bath.helper +
    + vayesta.core.bath.r2bath +
    + vayesta.core.cmdargs +
    + vayesta.core.foldscf +
    + vayesta.core.fragmentation +
    + vayesta.core.fragmentation.cas +
    + vayesta.core.fragmentation.fragmentation +
    + vayesta.core.fragmentation.helper +
    + vayesta.core.fragmentation.iao +
    + vayesta.core.fragmentation.iaopao +
    + vayesta.core.fragmentation.sao +
    + vayesta.core.fragmentation.site +
    + vayesta.core.fragmentation.ufragmentation +
    + vayesta.core.helper +
    + vayesta.core.linalg +
    + vayesta.core.qemb +
    + vayesta.core.qemb.corrfunc +
    + vayesta.core.qemb.fragment +
    + vayesta.core.qemb.qemb +
    + vayesta.core.qemb.register +
    + vayesta.core.qemb.scrcoulomb +
    + vayesta.core.qemb.ufragment +
    + vayesta.core.qemb.uqemb +
    + vayesta.core.scmf +
    + vayesta.core.scmf.brueckner +
    + vayesta.core.scmf.pdmet +
    + vayesta.core.scmf.scmf +
    + vayesta.core.spinalg +
    + vayesta.core.symmetry +
    + vayesta.core.symmetry.group +
    + vayesta.core.symmetry.operation +
    + vayesta.core.symmetry.symmetry +
    + vayesta.core.symmetry.tsymmetry +
    + vayesta.core.types +
    + vayesta.core.types.cluster +
    + vayesta.core.types.orbitals +
    + vayesta.core.types.wf +
    + vayesta.core.types.wf.ccsd +
    + vayesta.core.types.wf.ccsdtq +
    + vayesta.core.types.wf.cisd +
    + vayesta.core.types.wf.cisdtq +
    + vayesta.core.types.wf.fci +
    + vayesta.core.types.wf.hf +
    + vayesta.core.types.wf.mp2 +
    + vayesta.core.types.wf.project +
    + vayesta.core.types.wf.t_to_c +
    + vayesta.core.types.wf.wf +
    + vayesta.core.util +
    + vayesta.core.vlog +
    + vayesta.dmet +
    + vayesta.dmet.dmet +
    + vayesta.dmet.fragment +
    + vayesta.dmet.pdmet +
    + vayesta.dmet.sdp_sc +
    + vayesta.dmet.udmet +
    + vayesta.dmet.ufragment +
    + vayesta.dmet.updates +
    + vayesta.edmet +
    + vayesta.edmet.edmet +
    + vayesta.edmet.fragment +
    + vayesta.edmet.uedmet +
    + vayesta.edmet.ufragment +
    + vayesta.ewf +
    + vayesta.ewf.ewf +
    + vayesta.ewf.fragment +
    + vayesta.ewf.helper +
    + vayesta.ewf.uewf +
    + vayesta.ewf.ufragment +
    + vayesta.lattmod +
    + vayesta.lattmod.bethe +
    + vayesta.lattmod.latt +
    + vayesta.libs +
    + vayesta.libs.libcore +
    + vayesta.misc +
    + vayesta.misc.brueckner +
    + vayesta.misc.corrfunc +
    + vayesta.misc.counterpoise +
    + vayesta.misc.cptbisect +
    + vayesta.misc.cubefile +
    + vayesta.misc.gto_helper +
    + vayesta.misc.molecules +
    + vayesta.misc.molecules.molecules +
    + vayesta.misc.pcdiis +
    + vayesta.misc.solids +
    + vayesta.misc.solids.solids +
    + vayesta.mpi +
    + vayesta.mpi.interface +
    + vayesta.mpi.rma +
    + vayesta.mpi.scf +
    + vayesta.rpa +
    + vayesta.rpa.rirpa +
    + vayesta.rpa.rirpa.energy_NI +
    + vayesta.rpa.rirpa.momzero_NI +
    + vayesta.rpa.rirpa.NI_eval +
    + vayesta.rpa.rirpa.RIRPA +
    + vayesta.rpa.rirpa.RIURPA +
    + vayesta.rpa.rpa +
    + vayesta.rpa.ssrpa +
    + vayesta.rpa.ssurpa +
    + vayesta.solver +
    + vayesta.solver.ccsd +
    + vayesta.solver.ccsdtq +
    + vayesta.solver.cisd +
    + vayesta.solver.coupled_ccsd +
    + vayesta.solver.coupling +
    + vayesta.solver.dump +
    + vayesta.solver.eb_fci +
    + vayesta.solver.eb_fci.ebfci +
    + vayesta.solver.eb_fci.ebfci_slow +
    + vayesta.solver.eb_fci.uebfci_slow +
    + vayesta.solver.ebcc +
    + vayesta.solver.ebfci +
    + vayesta.solver.ext_ccsd +
    + vayesta.solver.fci +
    + vayesta.solver.hamiltonian +
    + vayesta.solver.mp2 +
    + vayesta.solver.solver +
    + vayesta.solver.tccsd +
    + vayesta.tools +
    + vayesta.tools.eos +
    + vayesta.tools.plotting +
    + vayesta.tools.plotting.colors +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/quickstart/1dhubbard.html b/quickstart/1dhubbard.html new file mode 100644 index 000000000..1475ea836 --- /dev/null +++ b/quickstart/1dhubbard.html @@ -0,0 +1,177 @@ + + + + + + + Custom Hamiltonians — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Custom Hamiltonians

+

Model Hamiltonians are commonly used for simulating systems of interest both in Quantum Chemistry calculations as well as in Condensed-matter studies. +Vayesta enables the creation of customized Hamiltonians by employing the module ref:lattmod and the functions ref:Hubbard_1d and ref:LatticeMF +contained in this class.

+

To perform calculations using this feature, the required modules should be imported as shown in the following snippet:

+
import vayesta
+import vayesta.ewf
+import vayesta.lattmod
+
+
+

The initial conditions for an user-defined Hubbard’s model are declared as shown in the following lines of code:

+
nsite = 16
+nelectron = nsite
+hubbard_u = 2.0
+
+
+

The creation of the Lattice model is performed automatically by Vayesta using these commands:

+
nsite = 16
+nelectron = nsite
+hubbard_u = 2.0
+
+
+

where the function ref:Hubbard1D is specialized to create a 1-D Hubbard’s model based on the user-defined variables such as nsite, nelectron, and +hubbard_u. An important feature of Vayesta is the way in which desired properties are printed and stored. This is done in a new folder created in the +current working directory and called vayesta_output where a log_file and error_log are placed. The user has the possibility to name the output +file provided in ref:Hubbard1D function.

+

The declared model can be further studied by using the module ref:LatticeMF, where a mean-field calculation can be carried out using the object created +in ref:Hubbard1D function as is shown below:

+
mf = vayesta.lattmod.LatticeMF(mol)
+mf.kernel()
+
+
+

Likewise, the ref:LatticeMf function will automatically select to carry out between HF or UHF mean-field methods based on the total spin +number.

+

The Vayesta embedding methods can be further used to numerically study these systems as introduced in the previous tutorials. In this sense, the +ref:EWF function employs the mf object created by ref:LatticeMF and complemented with the options bno_threshold and the option fragment_type +which indicates the use of sites instead of atoms as displayed in the following snipet:

+
ewf = vayesta.ewf.EWF(mf, bno_threshold=1e-8, fragment_type='Site')
+ewf.site_fragmentation()
+ewf.add_atomic_fragment(0, sym_factor=nsite)
+ewf.kernel()
+
+
+

The fragmentation procedure is carried out in the function ref:site_fragmentation and all the corresponding fragements are added utilizing the function +ref:add_atomic_fragment. At this point, the extension of the embedding can be declared as a first argument of this function, where the combination +0 and sym_factor=nsite indicates a single-site embedding. The corresponding calculation is performed using the attribute .kernel(). The +energy per electron can be computed for both cases (i.e MF and EWF) as indicated below:

+
print("E(MF)=       %+16.8f Ha" % (mf.e_tot/nelectron))
+print("E(EWF-CCSD)= %+16.8f Ha" % (ewf.e_tot/nelectron))
+
+
+

Due to the flexibility of the embedding methodology different combinations of site-size clusters can be explored. To do so, the function +‘ref:add_atomic_fragment’ should be correspondingly changed. As an example, a double-site embedding can be declared as:

+
ewf.add_atomic_fragment([0,1], sym_factor=nsite/2)
+
+
+
+

where the arguments [0,1] and sym_factor=nsite//2 indicates the use of a dimerized version of the 1-D Hubbard’s model which is depicted in +Figure(1).

+
+aperiodic hubbard model +
+

Figure(1) Schematic depiction of the 1-D Hubbard model, half filling with double-site embedding fragmentation.

+
+
+

Finally, the results for this calculation can be obtained as indicated in the following snippet:

+
print("E(MF)=       %+16.8f Ha" % (mf.e_tot/nelectron))
+print("E(EWF-CCSD)= %+16.8f Ha" % (ewf.e_tot/nelectron))
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/quickstart/dmet.html b/quickstart/dmet.html new file mode 100644 index 000000000..12413af55 --- /dev/null +++ b/quickstart/dmet.html @@ -0,0 +1,350 @@ + + + + + + + Density-Matrix Embbeding Theory (DMET) — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Density-Matrix Embbeding Theory (DMET)

+

Vayesta can be used for DMET calculations of molecules, solids, and lattice models. +In this section, we give two simple examples: the calculations of a \(\textrm{H}_6\) molecule +and a 1D Hubbard model.

+
+

Simple Molecule

+

A simple DMET calculation of a \(\textrm{H}_6\) ring can be performed as follows (the example can also be found in examples/dmet/01-simple-dmet.py):

+
 1import pyscf.gto
+ 2import pyscf.scf
+ 3import pyscf.fci
+ 4import vayesta
+ 5import vayesta.dmet
+ 6from vayesta.misc.molecules import ring
+ 7
+ 8
+ 9# H6 ring
+10mol = pyscf.gto.Mole()
+11mol.atom = ring(atom='H', natom=6, bond_length=2.0)
+12mol.basis = 'sto-6g'
+13mol.output = 'pyscf.out'
+14mol.build()
+15
+16# Hartree-Fock
+17mf = pyscf.scf.RHF(mol)
+18mf.kernel()
+19
+20# Reference FCI
+21fci = pyscf.fci.FCI(mf)
+22fci.kernel()
+23
+24# One-shot DMET
+25dmet = vayesta.dmet.DMET(mf, solver='FCI', maxiter=1)
+26with dmet.sao_fragmentation() as f:
+27    f.add_atomic_fragment([0,1])
+28    f.add_atomic_fragment([2,3])
+29    f.add_atomic_fragment([4,5])
+30dmet.kernel()
+31
+32# Self-consistent DMET
+33dmet_sc = vayesta.dmet.DMET(mf, solver='FCI')
+34with dmet_sc.sao_fragmentation() as f:
+35    f.add_atomic_fragment([0,1])
+36    f.add_atomic_fragment([2,3])
+37    f.add_atomic_fragment([4,5])
+38dmet_sc.kernel()
+39
+40print("Energies")
+41print("========")
+42print("  HF:                    %+16.8f Ha" % mf.e_tot)
+43print("  FCI:                   %+16.8f Ha" % fci.e_tot)
+44print("  DMET(1 iteration):     %+16.8f Ha  (error= %.1f mHa)" % (dmet.e_tot, 1000*(dmet.e_tot-fci.e_tot)))
+45print("  DMET(self-consistent): %+16.8f Ha  (error= %.1f mHa)" % (dmet_sc.e_tot, 1000*(dmet_sc.e_tot-fci.e_tot)))
+
+
+

In lines 9–17 the \(\textrm{H}_6\) molecule is set up +and a restricted Hartree–Fock (RHF) calculation is performed using PySCF. +We also perform an full system full configuration interaction (FCI) calculation (lines 20–21), +to obtain a reference value for the DMET results.

+

In line 24, a one-shot DMET calculation is instantiated with the Hartree–Fock object as first argument. +Additionally, the keyword argument solver='FCI' is used to select FCI +as the default solver and maxiter=1 is used to skip the DMET self-consistency cycle.

+

In lines 25–28 the fragments for the calculation are defined. +This is done with help of the context manager dmet.sao_fragmentation(), which specifies that the +fragments added in the body of the context manager will refer to symmetrically orthogonalized atomic orbitals (SAOs). +The method f.add_atomic_fragment(atoms) adds a fragment comprised of +all orbitals corresponding to the atom atoms to the calculation. +In this case, we split the system into three fragments, containing two neighboring hydrogen atoms each.

+
+

Note

+

For more information on the fragmentation and the add_atomic_fragment method, +see section Defining Fragments.

+
+

Finally, the two embedding problems are solved by calling dmet.kernel() +and the resulting total energy is stored in dmet.e_tot.

+

In lines 32–37 these steps are repeated for a self-consistent DMET calculation, in which case only +the keyword argument maxiter=1 has to be dropped.

+
+

Note

+

The fragments in the calculation above are symmetry-related by a rotation of 120° or 240° around the z-axis. +This symmetry can be added to the embedding class, such that only a single fragment needs to be solved:

+
# One-shot DMET
+dmet = vayesta.dmet.DMET(mf, solver='FCI', maxiter=1)
+with dmet.sao_fragmentation() as f:
+    with f.rotational_symmetry(3, axis='z'):
+        f.add_atomic_fragment([0,1])
+dmet.kernel()
+
+
+

see also example/dmet/02-rotations-symmetry.py

+
+
+

Note

+

The self-consistent optimization of a correlation potential in DMET can be ill-defined and will sometimes fail. +In this case, changing the tolerance or starting point can sometimes help. +The underlying origin of these difficulties are described in Ref. [1].

+

Our implementation of self-consistent DMET follows that of Ref. [2] and requires the Python package cxvpy +for use.

+
+
+
+

Density-Matrices

+

In DMET expectation values are defined in terms of democratically partitioned one- and two-body density-matices. +These can be obtained by calling dmet.make_rdm1() and dmet.make_rdm2() as shown in example +examples/dmet/03-density-matrices.py:

+
 1import numpy as np
+ 2import pyscf.gto
+ 3import pyscf.scf
+ 4import vayesta
+ 5import vayesta.dmet
+ 6from vayesta.misc.molecules import ring
+ 7
+ 8# H6 ring
+ 9mol = pyscf.gto.Mole()
+10mol.atom = ring(atom='H', natom=6, bond_length=2.0)
+11mol.basis = 'sto-6g'
+12mol.output = 'pyscf.out'
+13mol.build()
+14
+15# Hartree-Fock
+16mf = pyscf.scf.RHF(mol)
+17mf.kernel()
+18
+19# One-shot DMET
+20dmet = vayesta.dmet.DMET(mf, solver='FCI', maxiter=1)
+21with dmet.sao_fragmentation() as f:
+22    f.add_atomic_fragment([0,1])
+23    f.add_atomic_fragment([2,3])
+24    f.add_atomic_fragment([4,5])
+25dmet.kernel()
+26
+27# Calculate energy from democratically-partitioned density matrices:
+28dm1 = dmet.make_rdm1(ao_basis=True)
+29dm2 = dmet.make_rdm2(ao_basis=True)
+30# One and two-electron integrals in AO basis:
+31h1e = dmet.get_hcore()
+32eris = dmet.get_eris_array(np.eye(mol.nao))
+33e_dmet = dmet.e_nuc + np.einsum('ij,ij->', h1e, dm1) + np.einsum('ijkl,ijkl->', eris, dm2)/2
+34
+35print("Energies")
+36print("========")
+37print("  HF:                %+16.8f Ha" % mf.e_tot)
+38print("  DMET:              %+16.8f Ha" % dmet.e_tot)
+39print("  DMET (from DMs):   %+16.8f Ha" % e_dmet)
+
+
+
+
+

Hubbard Model in 1D

+

In order to simulate lattice model systems, such as the Hubbard model, Vayesta provides the classes +Hubbard1D, Hubbard2D and LatticeMF in the lattmod package. +In the following example the half-filled, ten-site Hubbard chain is calculated with \(U = 6t\) (where \(t\) is the hopping parameter, which is 1 by default):

+
 1import numpy as np
+ 2import vayesta
+ 3import vayesta.dmet
+ 4import vayesta.lattmod
+ 5
+ 6
+ 7nsite = 10
+ 8nimp = 2
+ 9hubbard_u = 6.0
+10boundary = 'PBC'
+11nelectron = nsite
+12mol = vayesta.lattmod.Hubbard1D(nsite, nelectron=nelectron, hubbard_u=hubbard_u, boundary=boundary)
+13mf = vayesta.lattmod.LatticeMF(mol)
+14mf.kernel()
+15
+16# Calculate each 2-sites fragment:
+17dmet = vayesta.dmet.DMET(mf, solver='FCI')
+18with dmet.site_fragmentation() as f:
+19    for site in range(0, nsite, nimp):
+20        f.add_atomic_fragment(list(range(site, site+nimp)))
+21dmet.kernel()
+22
+23# Calculate a single fragment and use translational symmetry:
+24dmet_sym = vayesta.dmet.DMET(mf, solver='FCI')
+25# Specify the number of translational copies in direction of the three lattice vectors by passing a list with three
+26# integers, [n0, n1, n2]. 1D or 2D systems have their periodic dimension along the first one or two axes.
+27nimages = [nsite//nimp, 1, 1]
+28dmet_sym.symmetry.set_translations(nimages)
+29# Add only a single 2-sites fragment:
+30with dmet_sym.site_fragmentation() as f:
+31    f.add_atomic_fragment(list(range(nimp)))
+32dmet_sym.kernel()
+33
+34print("Difference in converged solutions:")
+35print("  |d(E_tot)|=  %.5e" % abs(dmet.e_tot - dmet_sym.e_tot))
+36print("  |d(V_corr)|= %.5e" % np.linalg.norm(dmet.vcorr - dmet_sym.vcorr))
+
+
+

For lattice model systems, fragments for quantum embedding calculations are usually defined in terms of lattice sites. +For this purpose, the embedding class has the fragmentation context manager dmet.site_fragmentation(). +Within the body of this context manager, fragments can be added as before with the method +add_atomic_fragment—for the purpose fo defining fragments, the sites are considered as atoms. +In lines 19–20 of this example, the lattice is divided into two-site fragments, as depicted in Fig. 2.

+
+1D Hubbard model +
+

Fig. 2 Schematic depiction of the 1-D Hubbard model with two-sites fragments.

+
+
+

Just as for the \(\mathrm{H}_6\) ring molecule in the example above, +this lattice model system has an inherent (in this case translational) symmetry between the fragments, which can +be exploited. +This is done in the second DMET calculation in lines 24–32, where the translational symmetry is specified +in the following lines:

+
nimages = [nsite//nimp, 1, 1]
+dmet_sym.symmetry.set_translations(nimages)
+
+
+

The three integers in nimages specify the number of symmetry related copies (including the original) +along each lattice vector. +For a 1D system, the first lattice vector corresponds to the periodic dimension and is thus the only dimension +along which there are more than one copies.

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/quickstart/dumpcluster.html b/quickstart/dumpcluster.html new file mode 100644 index 000000000..b063eb7f6 --- /dev/null +++ b/quickstart/dumpcluster.html @@ -0,0 +1,203 @@ + + + + + + + Dumping Cluster Hamiltonians — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dumping Cluster Hamiltonians

+

Some users may want to utilize Vayesta to easily define fragments within the system +and obtain the corresponding cluster Hamiltonians, but solve the embedding problems externally and with their own solvers. +To accomodate for this, the EWF class allows setting solver='Dump', which will dump orbitals and integrals +of all fragments to an HDF5 file and exit.

+

The name of the HDF5 file is clusters.h5 by default, but can be adjusted via an additional solver option:

+
        solver_options=dict(dumpfile='clusters-rhf.h5'))
+emb.kernel()
+
+
+
+

Note

+

The full example can be found at examples/ewf/molecules/20-dump-clusters.py

+
+

The dump file contains a separate group for each fragment which was defined for the embedding. +The content of each group can be best illustrated via this code snippet:

+
with h5py.File('clusters-rhf.h5', 'r') as f:
+    # The HDF5 file contains a separate group for each fragment in the system:
+    for key, frag in f.items():
+        # The HDF5-group key for each fragment is constructed as 'fragment_%d' % id
+        print("\nKey= %s" % key)
+        # Name and ID of fragment:
+        print("name= %s, id= %d" % (frag.attrs['name'], frag.attrs['id']))
+        # Number of all/occupied/virtual orbitals:
+        print("Full cluster:")
+        norb, nocc, nvir = frag.attrs['norb'], frag.attrs['nocc'], frag.attrs['nvir']
+        print("norb= %d, nocc= %d, nvir= %d" % (norb, nocc, nvir))
+        # Orbital coefficients:
+        # The first dimension corresponds to the atomic orbitals,
+        # the second dimension to the cluster or fragment orbitals, respectively.
+        print("c_cluster.shape= (%d, %d)" % frag['c_cluster'].shape)
+        print("c_frag.shape=    (%d, %d)" % frag['c_frag'].shape)
+        # Integral arrays:
+        # hcore, fock, and eris are the 1-electron Hamiltonian, Fock, and 2-electron Hamiltonian
+        # matrix elements in the cluster space.
+        # heff is equal to hcore, plus an additional potential due to the Coulomb and exchange
+        # interaction with the occupied environment orbitals outside the cluster.
+        print("hcore.shape=     (%d, %d)" % frag['hcore'].shape)
+        print("heff.shape=      (%d, %d)" % frag['heff'].shape)
+        print("fock.shape=      (%d, %d)" % frag['fock'].shape)
+        # The 2-electron integrals are in chemical ordering: eris[i,j,k,l] = (ij|kl)
+        print("eris.shape=      (%d, %d, %d, %d)" % frag['eris'].shape)
+        # DMET cluster:
+        print("DMET cluster:")
+        norb, nocc, nvir = [frag.attrs['%s_dmet_cluster' % x] for x in ('norb', 'nocc', 'nvir')]
+        print("norb= %d, nocc= %d, nvir= %d" % (norb, nocc, nvir))
+        print("c_dmet_cluster.shape=    (%d, %d)" % frag['c_dmet_cluster'].shape)
+
+
+
+

For a spin-unrestricted calculation, the shapes and dataset names are slighlty different:

+
    for key, frag in f.items():
+        print("\nKey= %s" % key)
+        # Name and ID:
+        print("name= %s, id= %d" % (frag.attrs['name'], frag.attrs['id']))
+        # The orbital sizes are now arrays of length 2, representing alpha and beta spin dimension
+        norb, nocc, nvir = frag.attrs['norb'], frag.attrs['nocc'], frag.attrs['nvir']
+        print("norb= (%d, %d), nocc= (%d, %d), nvir= (%d, %d)" % (*norb, *nocc, *nvir))
+        # The suffixes _a and _b correspond to alpha and beta spin:
+        print("c_cluster_a.shape= (%d, %d)" % frag['c_cluster_a'].shape)
+        print("c_cluster_b.shape= (%d, %d)" % frag['c_cluster_b'].shape)
+        print("c_frag_a.shape=    (%d, %d)" % frag['c_frag_a'].shape)
+        print("c_frag_b.shape=    (%d, %d)" % frag['c_frag_b'].shape)
+        # Integral arrays:
+        print("hcore_a.shape=     (%d, %d)" % frag['hcore_a'].shape)
+        print("hcore_b.shape=     (%d, %d)" % frag['hcore_b'].shape)
+        print("heff_a.shape=      (%d, %d)" % frag['heff_a'].shape)
+        print("heff_b.shape=      (%d, %d)" % frag['heff_b'].shape)
+        print("fock_a.shape=      (%d, %d)" % frag['fock_a'].shape)
+        print("fock_b.shape=      (%d, %d)" % frag['fock_b'].shape)
+        # The spin blocks correspond to (aa|aa), (aa|bb), and (bb|bb)
+        # (Note that (bb|aa) = (aa|bb).transpose(2,3,0,1) for real orbitals):
+        print("eris_aa.shape=     (%d, %d, %d, %d)" % frag['eris_aa'].shape)
+        print("eris_ab.shape=     (%d, %d, %d, %d)" % frag['eris_ab'].shape)
+        print("eris_bb.shape=     (%d, %d, %d, %d)" % frag['eris_bb'].shape)
+        # DMET cluster:
+        print("DMET cluster:")
+        norb, nocc, nvir = [frag.attrs['%s_dmet_cluster' % x] for x in ('norb', 'nocc', 'nvir')]
+        print("norb= (%d, %d), nocc= (%d, %d), nvir= (%d, %d)" % (*norb, *nocc, *nvir))
+        print("c_dmet_cluster_a.shape=    (%d, %d)" % frag['c_dmet_cluster_a'].shape)
+        print("c_dmet_cluster_b.shape=    (%d, %d)" % frag['c_dmet_cluster_b'].shape)
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/quickstart/edmet.html b/quickstart/edmet.html new file mode 100644 index 000000000..d2a62116c --- /dev/null +++ b/quickstart/edmet.html @@ -0,0 +1,173 @@ + + + + + + + Extended Density-matrix embedding theory EDMET: — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Extended Density-matrix embedding theory EDMET:

+

In the following tutorial, the extended density-matrix embbeding theory (EDMET) is introduced as implemented in Vayesta. Two examples (Finite systems +and custom Hamiltonians) are used to illustrate the capabilities of this methodology.

+
+

Finite Systems

+

The Vayesta ref:edmet.EDMET module is introduced. As starting point, the relevant modules of PySCF and Vayesta are loaded:

+
import pyscf
+import pyscf.gto
+import pyscf.dft
+import pyscf.scf
+import pyscf.cc
+import vayesta
+import vayesta.edmet
+
+
+

The pertinent variables to declare a finite system (water molecule) in PySCF are shown in the following snippet:

+
mol = pyscf.gto.Mole()
+mol.atom = """
+O  0.0000   0.0000   0.1173
+H  0.0000   0.7572  -0.4692
+H  0.0000  -0.7572  -0.4692
+"""
+mol.basis = 'cc-pVDZ'
+mol.output = 'pyscf.out'
+mol.build()
+
+
+

The ref:EDMET module enables the use of different mean-field approaches, like for instance, Density Functional Theory (DFT). As implemente in PySCF, the relevant variables are called as shown in the following lines of code:

+
# LDA
+lda = pyscf.dft.RKS(mol)
+lda.xc = 'svwn'
+lda = lda.density_fit()
+lda.kernel()
+
+
+

It is important to notice that the features of a DFT object in PySCF are not consistent with the characteristics of a Hartree-Fock object and therefore needs to be converted in the followin way:

+
# The KS object needs to be converted to a HF object:
+lda = lda.to_rhf()
+
+
+

To use the module, the function ref:edmet is declared and arguments are provided from previous steps as shown in the snippet below:

+
emb_lda = vayesta.edmet.EDMET(lda, dmet_threshold=1e-12, solver="EBCCSD",
+                              oneshot=True, make_dd_moments=False)
+
+
+

The arguments dmet_threshold, oneshot, and make_dd_moments are arguments employed to define specific strategies of the algortihm. The solver option offers the possibility to use the EBFCI and EBCCSD, which is the one selected in this example.

+

A fragmentation scheme is needed and, in this example, perfomed in the following manner:

+
with emb_lda.iao_fragmentation() as f:
+    f.add_all_atomic_fragments()
+emb_lda.kernel()
+
+
+

To compare with the CCSD reference, the computation can be submitted as shown in the code below:

+
# Reference full system CCSD:
+cc = pyscf.cc.CCSD(hf)
+cc.kernel()
+
+
+

Relevant quantities, such as the total energy, can be printed as displayed in the following lines of code:

+
print("E(LDA)=              %+16.8f Ha" % lda.e_tot)
+print("E(Emb. CCSD @LDA)=   %+16.8f Ha" % emb_lda.e_tot)
+print("E(HF @LDA)=          %+16.8f Ha" % emb_lda.e_mf)
+print("E(CCSD)=             %+16.8f Ha" % cc.)
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/quickstart/ewf.html b/quickstart/ewf.html new file mode 100644 index 000000000..f3aaa3e51 --- /dev/null +++ b/quickstart/ewf.html @@ -0,0 +1,311 @@ + + + + + + + Wave Function Based Embedding (EWF) — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Wave Function Based Embedding (EWF)

+

This introduces the EWF class to perform a more generalized wave function based quantum embedding that +improves on DMET for ab initio systems, as presented in Phys. Rev. X 12, 011046 [1].

+
+

Water Molecule

+

An embedded wave function calculation of a simple water molecule can be performed with the following code:

+
 1import pyscf
+ 2import pyscf.gto
+ 3import pyscf.scf
+ 4import pyscf.cc
+ 5import vayesta
+ 6import vayesta.ewf
+ 7
+ 8
+ 9mol = pyscf.gto.Mole()
+10mol.atom = """
+11O  0.0000   0.0000   0.1173
+12H  0.0000   0.7572  -0.4692
+13H  0.0000  -0.7572  -0.4692
+14"""
+15mol.basis = 'cc-pVDZ'
+16mol.output = 'pyscf.txt'
+17mol.build()
+18
+19# Hartree-Fock
+20mf = pyscf.scf.RHF(mol)
+21mf.kernel()
+22
+23# Embedded CCSD
+24emb = vayesta.ewf.EWF(mf, bath_options=dict(threshold=1e-6))
+25emb.kernel()
+26
+27# Reference full system CCSD:
+28cc = pyscf.cc.CCSD(mf)
+29cc.kernel()
+30
+31print("E(HF)=            %+16.8f Ha" % mf.e_tot)
+32print("E(CCSD)=          %+16.8f Ha" % cc.e_tot)
+33print("E(Emb. CCSD)[WF]= %+16.8f Ha" % emb.e_tot)
+34print("E(Emb. CCSD)[DM]= %+16.8f Ha" % emb.get_dm_energy())
+
+
+

There are two main differences in setup compared to the DMET embedding class in the definition of the EWF class (lines 24–25).

+
    +
  • The keyword argument bath_options=dict(threshold=1e-6) defines the threshold for the MP2 bath natural orbitals +(the variable \(\eta\) in Ref. 1) [2].

  • +
  • No fragmentation scheme is explicitly provided, which by default results in the system being fully fragmented +into simple atomic fragments as defined by intrinsic atomic orbitals (IAOs). +This is equivalent to adding the following lines before calling the embedding kernel method:

  • +
+
with emb.iao_fragmentation() as f:
+    f.add_all_atomic_fragments()
+
+
+

which, in turn, is equivalent to

+
with emb.iao_fragmentation() as f:
+    for atom in range(mol.natm):
+        f.add_atomic_fragment(atom)
+
+
+

Other fragmentations schemes can still be used, but have to be specified manually.

+
+
+

Cubic Boron Nitride (cBN)

+

In this example we calculate cubic boron nitride (Zinc Blende structure):

+
+

Note

+

The basis set, auxiliary (density-fitting) basis set, and k-point sampling in this example are much too small +for accurate results and only chosen for demonstration.

+
+
 1import numpy as np
+ 2import pyscf
+ 3import pyscf.pbc
+ 4import pyscf.pbc.scf
+ 5import pyscf.pbc.cc
+ 6import vayesta
+ 7import vayesta.ewf
+ 8
+ 9
+10cell = pyscf.pbc.gto.Cell()
+11a = 3.615
+12cell.atom = 'B 0 0 0 ; N %f %f %f' % (a/4, a/4, a/4)
+13cell.a = np.asarray([
+14    [a/2, a/2, 0],
+15    [0, a/2, a/2],
+16    [a/2, 0, a/2]])
+17cell.basis = 'sto-6g'
+18cell.output = 'pyscf.out'
+19cell.build()
+20
+21# Hartree-Fock with k-points
+22kmesh = [2,2,2]
+23kpts = cell.make_kpts(kmesh)
+24mf = pyscf.pbc.scf.KRHF(cell, kpts)
+25mf = mf.density_fit(auxbasis='sto-6g')
+26mf.kernel()
+27
+28# Full system CCSD
+29cc = pyscf.pbc.cc.KCCSD(mf)
+30cc.kernel()
+31
+32# Embedded calculation will automatically fold the k-point sampled mean-field to the supercell
+33# solve_lambda=True is required, if density-matrix is needed!
+34emb = vayesta.ewf.EWF(mf, bath_options=dict(threshold=1e-6), solver_options=dict(solve_lambda=True))
+35emb.kernel()
+36
+37print("E(HF)=             %+16.8f Ha" % mf.e_tot)
+38print("E(Emb. CCSD)=      %+16.8f Ha" % emb.e_tot)
+39print("E(CCSD)=           %+16.8f Ha" % cc.e_tot)
+40
+41# One-body density matrix in the supercell AO-basis
+42dm1 = emb.make_rdm1(ao_basis=True)
+43# Population analysis (q: charge, s: spin)
+44# Possible options for local_orbitals: 'mulliken', 'lowdin', 'iao+pao', or custom N(AO) x N(AO) coefficient matrix
+45# orbital_resolved=True is used to print orbital resolved (rather than only atom resolved) analysis
+46emb.pop_analysis(dm1, local_orbitals='iao+pao', orbital_resolved=True)
+
+
+

In line 34 the setup of the embedding class is performed in the same way as for molecules. +Vayesta will detect if the mean field object mf has k-points defined. If these are found, then +the k-point sampled mean-field will automatically be folded to the \(\Gamma\)-point of the equivalent +(in this case \(2\times2\times2\)) Born–von Karman supercell.

+
+

Note

+

Only Monkhorst-pack k-point meshes which include the \(\Gamma\)-point are currently supported.

+
+

Note that instantiating the embedding class with a k-point sampled mean-field object +will automatically add the translational symmetry to the symmetry group stored in emb.symmetry. +This assumes that the user will only define fragments within the original primitive unit cell, +which are then copied throughout the supercell using the translational symmetry (and this symmetry will be exploited +to avoid the cost of solving embedded fragments which are symmetrically equivalent to others). +For calculations of fragments across multiple primitive cells or where the primitive cell has not been explicitly +enlarged to encompass the full fragment space, +the translational symmetry should be removed by calling emb.symmetry.clear_translations() +or overwritten via emb.symmetry.set_translations(nimages), as demonstrated in +for the 1D Hubbard model here.

+

Performing the embedding in the supercell allows for optimal utilization of the locality of electron correlation, +as the embedding problems are only restricted to have the periodicity of the supercell, rather than the k-point sampled +primitive cell. +Properties, such as density-matrix calculated in line 42, will recover the full, primitive cell symmetry, +since they are obtained from a summation over all symmetry equivalent fragments in the supercell. +This is confirmed by the population analysis, which shows that the boron atom 2 has the same population than +boron atom 0, despite being part of a different primitive cell within the supercell:

+
Population analysis
+-------------------
+    0 B:       q=  0.17325874  s=  0.00000000
+         0 0 B 1s          =  1.98971008
+         1 0 B 2s          =  0.76417671
+         2 0 B 2px         =  0.69095149
+         3 0 B 2py         =  0.69095149
+         4 0 B 2pz         =  0.69095149
+    1 N:       q= -0.17325874  s=  0.00000000
+         5 1 N 1s          =  1.99053993
+         6 1 N 2s          =  1.17403392
+         7 1 N 2px         =  1.33622830
+         8 1 N 2py         =  1.33622830
+         9 1 N 2pz         =  1.33622830
+    2 B:       q=  0.17325874  s=  0.00000000
+        10 2 B 1s          =  1.98971008
+        11 2 B 2s          =  0.76417671
+        12 2 B 2px         =  0.69095149
+        13 2 B 2py         =  0.69095149
+        14 2 B 2pz         =  0.69095149
+    3 N:       q= -0.17325874  s=  0.00000000
+        15 3 N 1s          =  1.99053993
+        16 3 N 2s          =  1.17403392
+        17 3 N 2px         =  1.33622830
+        18 3 N 2py         =  1.33622830
+        19 3 N 2pz         =  1.33622830
+    ...
+
+
+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/quickstart/fragmentation.html b/quickstart/fragmentation.html new file mode 100644 index 000000000..77c6f65ff --- /dev/null +++ b/quickstart/fragmentation.html @@ -0,0 +1,277 @@ + + + + + + + Defining Fragments — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Defining Fragments

+

Fragments are added within a fragmentation context manager, +which determines in which way orbitals are constructed for particular fragment choices.

+
+

Fragmentation

+

In order to define fragments in an ab initio system, one needs to specify +a set of orthogonal projectors onto subspaces. +There is no unique way to define such projectors—the question where one atom or orbital ‘ends’ and the next one begins +within a molecule or solid is fundamentally ill-posed.

+

Nevertheless, we do not require the projectors to be uniquely defined in order to perform quantum embedding calculations. +Within the embedded wave function (EWF) framework, the systematic improvability to the exact result is +guaranteed via an expansion of the bath space and appropriate choice of property functionals [1]. +The only requirement on the fragments is that they are orthogonal and (when taken together) they span the complete occupied space. +For DMET calculations, it is additionally desirable for the union of the fragment spaces to span the entire virtual space.

+
+

Note

+

To check if a user-defined fragmentation is orthogonal and complete in the occupied/virtual space, +lock for the following line in the output:

+
Fragmentation: orthogonal= True, occupied-complete= True, virtual-complete= False
+
+
+
+

For ab initio systems atomic projectors can be defined in terms of three different types of local atomic orbitals:

+ +

For lattice models, on the other hand, the mapping between the site basis and the sites is clearer and more natural to define.

+

Table 1 shows a comparison of the the different fragmentation types:

+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Comparison of fragmentation types

Type

Context manager

DMET

EWF

Comments

IAO

iao_fragmentation(minao='auto')

No

Yes

Default for EWF

IAO+PAO

iaopao_fragmentation(minao='auto')

Yes

Yes

SAO

sao_fragmentation()

Yes

Yes

Site basis

site_fragmentation()

Yes

Yes

For lattice models only

+

The minimal reference basis for the IAO construction can be selected with the minao +argument. By default a suitable basis set will be chosen automatically 'auto'.

+
+

Note

+

Generally different fragmentations should not be combined, as the resulting fragments are not guaranteed to be orthogonal. +The only exception to this are the IAO and IAO+PAO fragmentation, which can be combined as long as no atom is added twice:

+
with emb.iao_fragmentation() as f:
+    f.add_atomic_fragment(0)
+with emb.iaopao_fragmentation() as f:
+    f.add_atomic_fragment(1)
+
+
+
+
+
+

Adding Fragments

+

Within the fragmentation context manager, fragments can be added using the methods +add_atomic_fragment and add_orbital_fragment.

+

The add_atomic_fragment method can accept both atom indices and symbols and can further filter specific orbital types +with the orbital_filter argument. +The capabilities are best demonstrated in example examples/ewf/molecules/12-custom-fragments.py:

+
 1import pyscf
+ 2import pyscf.gto
+ 3import pyscf.scf
+ 4import pyscf.cc
+ 5
+ 6import vayesta
+ 7import vayesta.ewf
+ 8
+ 9mol = pyscf.gto.Mole()
+10mol.atom = """
+11Se	0.0000	0.0000	0.2807
+12O 	0.0000	1.3464	-0.5965
+13O 	0.0000	-1.3464	-0.5965
+14"""
+15mol.basis = 'cc-pVDZ'
+16mol.output = 'pyscf.out'
+17mol.build()
+18
+19# Hartree-Fock
+20mf = pyscf.scf.RHF(mol)
+21mf.kernel()
+22
+23# Reference full system CCSD:
+24cc = pyscf.cc.CCSD(mf)
+25cc.kernel()
+26
+27# Embedded CCSD
+28emb = vayesta.ewf.EWF(mf, bath_options=dict(threshold=1e-6))
+29with emb.iao_fragmentation() as f:
+30    # Fragment containing the 1s state of O and 1s and 2s states of Se
+31    f.add_atomic_fragment(['Se', 'O'], orbital_filter=['1s', 'Se 2s'])
+32    # Atoms can be specified by labels or indices
+33    # Fragment containing the 2s state at O and 3s and 4s states of Se
+34    f.add_atomic_fragment([0, 1, 2], orbital_filter=['O 2s', '3s', '4s'])
+35    # Fragment containing the 2p x- and y-states on the oxygen and the 2p, 3p y- and z- states on selenium
+36    # Note that the oxygen does not have 3p IAO states, such that it is not necessary to specify the element for these states
+37    f.add_atomic_fragment([0, 1, 2], orbital_filter=['O 2py', 'O 2pz', 'Se 2p', '3py', '3pz'])
+38    # All 4p states on Se and all px states (2px on O, 2-4px on Se)
+39    f.add_atomic_fragment(['Se', 'O'], orbital_filter=['4p', 'px'])
+40    # 3d states on Se
+41    f.add_atomic_fragment(0, orbital_filter=['3d'])
+42emb.kernel()
+43
+44print("E(HF)=        %+16.8f Ha" % mf.e_tot)
+45print("E(CCSD)=      %+16.8f Ha" % cc.e_tot)
+46print("E(Emb. CCSD)= %+16.8f Ha" % emb.e_tot)
+
+
+

The add_orbital_fragment method allows selecting orbitals (IAOs, PAOs, or SAOs) +to define fragments, either via their indices or labels.

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/quickstart/index.html b/quickstart/index.html new file mode 100644 index 000000000..624530214 --- /dev/null +++ b/quickstart/index.html @@ -0,0 +1,132 @@ + + + + + + + Quickstart — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Quickstart

+

Collection of examples showing how to perform calculations with Vayesta. In the following pages, we will present the different capabilities that Vayesta is able to perform the corresponding calculations:

+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/quickstart/mpi.html b/quickstart/mpi.html new file mode 100644 index 000000000..29525d3f0 --- /dev/null +++ b/quickstart/mpi.html @@ -0,0 +1,218 @@ + + + + + + + Parallel Computing with MPI — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Parallel Computing with MPI

+

Vayesta can construct and solve multiple quantum embedding problems (as defined by the fragmentation) in parallel +over distributed memory architecture, +using the Message Passing Interface (MPI) and the Python bindings provided by mpi4py.

+
+

Warning

+

Not all functions have been tested in combinations with MPI. +It is always adviced to perform a smaller test run, in order to verify that parallel and serial excecution yield the same results. +Please open an issue on the GitHub page to report any bugs or unexpected behavior.

+
+
+

Note

+

mpi4py can be installed using pip: [~]$ pip install mpi4py

+
+
+

Running an MPI Job

+

Running a calculation in parallel is as simple as excecuting [~]$ mpirun -np N jobscript.py +in the console, where N is the desired number of MPI processes. +For the best possible parallelization, use as many MPI processes as there are fragments +(for example three for an atomic fragmentation of a water molecule), for which the scaling +with number of MPI processes should be favourable. +When it is necessary to use fewer MPI processes than fragments, the processes will then +calculate their assigned set of embedding problems sequentially. +It is never advised to use more MPI processes than there are fragments; the additional processes +will simply be idle.

+

Note that if a multithreaded BLAS library is linked, then the embedding +problems assigned to each MPI rank will in general still be solved in a multithreaded fashion. +Therefore, a good strategy is to assign the MPI ranks to separate nodes (ideally equal to the number +of fragments) and use a multithreaded (e.g. OpenBLAS) library with multiple threads over the cores of the node for the solution and +manipulation of each embedded problems.

+
+

Note

+

Many multithreaded libraries do not scale well beyond 16 or so threads for typical problem sizes. +For modern CPUs the number of cores can be significantly higher than this and, unless memory is a bottleneck, +it can be beneficial to assign multiple MPI ranks to each node.

+
+
+
+

Additional Considerations

+

While any job script should in principle also work in parallel, +there are some additional considerations, which mainly concern file IO and logging. +They are demonstrated at this example, which can be found at examples/ewf/molecules/90-mpi.py:

+
 1# Run with: mpirun -n 3 python 90-mpi.py
+ 2import pyscf
+ 3import pyscf.gto
+ 4import pyscf.scf
+ 5import pyscf.cc
+ 6import vayesta
+ 7import vayesta.ewf
+ 8from vayesta.mpi import mpi
+ 9
+10mol = pyscf.gto.Mole()
+11mol.atom = """
+12O  0.0000   0.0000   0.1173
+13H  0.0000   0.7572  -0.4692
+14H  0.0000  -0.7572  -0.4692
+15"""
+16mol.basis = 'cc-pVDZ'
+17mol.output = 'pyscf-mpi%d.out' % mpi.rank
+18mol.build()
+19
+20# Hartree-Fock
+21mf = pyscf.scf.RHF(mol)
+22mf = mf.density_fit()
+23mf = mpi.scf(mf)
+24mf.kernel()
+25
+26# Embedded CCSD
+27emb = vayesta.ewf.EWF(mf, bath_options=dict(threshold=1e-6))
+28emb.kernel()
+29
+30# Reference full system CCSD
+31if mpi.is_master:
+32    cc = pyscf.cc.CCSD(mf)
+33    cc.kernel()
+34
+35    print("E(HF)=        %+16.8f Ha" % mf.e_tot)
+36    print("E(CCSD)=      %+16.8f Ha" % cc.e_tot)
+37    print("E(Emb. CCSD)= %+16.8f Ha" % emb.e_tot)
+
+
+
    +
  • Vayesta will generate a separate logging file for each MPI rank, but PySCF does not. To avoid +chaotic logging, it is adviced to give the mol object of each MPI process a unique output name (see line 17).

  • +
  • PySCF does not support MPI by default. The mean-field calculation will thus simple be performed on each MPI process individually, +and Vayesta will discard all solutions, except that obtained on the master process (rank 0). +To save electricy, the function vayesta.mpi.mpi.scf(mf) can be used to restrict the mean-field calculation to +the master process from the beginning (see line 22). Alternatively, for a more efficient workflow in situations with significant mean-field +overheads, the initial mean-field calculation can be performed separately, and the mean-field read in. See the PySCF documentation +for how this can be done.

  • +
  • Output should only be printed on the master process. +The property mpi.is_master (identical to mpi.rank == 0) can be used to check if the current MPI process is the master process (see line 30)

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 000000000..bde66ff1b --- /dev/null +++ b/search.html @@ -0,0 +1,124 @@ + + + + + + Search — Vayesta 1.0.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 000000000..80f0602b2 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["apidoc/modules", "apidoc/vayesta", "apidoc/vayesta.core", "apidoc/vayesta.core.ao2mo", "apidoc/vayesta.core.bath", "apidoc/vayesta.core.fragmentation", "apidoc/vayesta.core.qemb", "apidoc/vayesta.core.scmf", "apidoc/vayesta.core.symmetry", "apidoc/vayesta.core.types", "apidoc/vayesta.core.types.wf", "apidoc/vayesta.dmet", "apidoc/vayesta.edmet", "apidoc/vayesta.ewf", "apidoc/vayesta.lattmod", "apidoc/vayesta.libs", "apidoc/vayesta.misc", "apidoc/vayesta.misc.molecules", "apidoc/vayesta.misc.solids", "apidoc/vayesta.mpi", "apidoc/vayesta.rpa", "apidoc/vayesta.rpa.rirpa", "apidoc/vayesta.solver", "apidoc/vayesta.solver.eb_fci", "apidoc/vayesta.tools", "apidoc/vayesta.tools.plotting", "faq/blas", "faq/env", "faq/index", "faq/mpi4py", "include/links", "index", "install", "intro", "quickstart/1dhubbard", "quickstart/dmet", "quickstart/dumpcluster", "quickstart/edmet", "quickstart/ewf", "quickstart/fragmentation", "quickstart/index", "quickstart/mpi"], "filenames": ["apidoc/modules.rst", "apidoc/vayesta.rst", "apidoc/vayesta.core.rst", "apidoc/vayesta.core.ao2mo.rst", "apidoc/vayesta.core.bath.rst", "apidoc/vayesta.core.fragmentation.rst", "apidoc/vayesta.core.qemb.rst", "apidoc/vayesta.core.scmf.rst", "apidoc/vayesta.core.symmetry.rst", "apidoc/vayesta.core.types.rst", "apidoc/vayesta.core.types.wf.rst", "apidoc/vayesta.dmet.rst", "apidoc/vayesta.edmet.rst", "apidoc/vayesta.ewf.rst", "apidoc/vayesta.lattmod.rst", "apidoc/vayesta.libs.rst", "apidoc/vayesta.misc.rst", "apidoc/vayesta.misc.molecules.rst", "apidoc/vayesta.misc.solids.rst", "apidoc/vayesta.mpi.rst", "apidoc/vayesta.rpa.rst", "apidoc/vayesta.rpa.rirpa.rst", "apidoc/vayesta.solver.rst", "apidoc/vayesta.solver.eb_fci.rst", "apidoc/vayesta.tools.rst", "apidoc/vayesta.tools.plotting.rst", "faq/blas.rst", "faq/env.rst", "faq/index.rst", "faq/mpi4py.rst", "include/links.rst", "index.rst", "install.rst", "intro.rst", "quickstart/1dhubbard.rst", "quickstart/dmet.rst", "quickstart/dumpcluster.rst", "quickstart/edmet.rst", "quickstart/ewf.rst", "quickstart/fragmentation.rst", "quickstart/index.rst", "quickstart/mpi.rst"], "titles": ["API", "vayesta", "vayesta.core", "vayesta.core.ao2mo", "vayesta.core.bath", "vayesta.core.fragmentation", "vayesta.core.qemb", "vayesta.core.scmf", "vayesta.core.symmetry", "vayesta.core.types", "vayesta.core.types.wf", "vayesta.dmet", "vayesta.edmet", "vayesta.ewf", "vayesta.lattmod", "vayesta.libs", "vayesta.misc", "vayesta.misc.molecules", "vayesta.misc.solids", "vayesta.mpi", "vayesta.rpa", "vayesta.rpa.rirpa", "vayesta.solver", "vayesta.solver.eb_fci", "vayesta.tools", "vayesta.tools.plotting", "Installing OpenBLAS from source", "Environment Variables", "FAQ", "Installing mpi4py", "<no title>", "Vayesta Documentation", "Installation", "Introduction", "Custom Hamiltonians", "Density-Matrix Embbeding Theory (DMET)", "Dumping Cluster Hamiltonians", "Extended Density-matrix embedding theory EDMET:", "Wave Function Based Embedding (EWF)", "Defining Fragments", "Quickstart", "Parallel Computing with MPI"], "terms": {"The": [0, 2, 6, 8, 11, 12, 13, 14, 15, 20, 21, 22, 26, 32, 33, 34, 35, 36, 37, 38, 39, 41], "document": [0, 14, 41], "i": [0, 2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 16, 18, 19, 20, 21, 22, 23, 26, 27, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41], "work": [0, 4, 26, 27, 28, 34, 41], "progress": 0, "vayesta": [0, 28, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41], "dmet": [0, 1, 2, 6, 7, 12, 13, 31, 32, 33, 36, 38, 39, 40], "edmet": [0, 1, 31], "ewf": [0, 1, 31, 34, 36, 39, 40, 41], "core": [0, 1, 11, 12, 13, 14, 31, 41], "lattmod": [0, 1, 31, 34, 35], "lib": [0, 1, 2, 14, 23, 27, 31, 32], "misc": [0, 1, 31, 35], "mpi": [0, 1, 2, 6, 9, 10, 11, 12, 13, 22, 31, 32, 40], "rpa": [0, 1, 6, 11, 12, 13, 31], "solver": [0, 1, 2, 5, 6, 11, 12, 13, 14, 21, 31, 32, 33, 35, 36, 37, 39], "ao2mo": [1, 2, 6, 11, 12, 13, 14, 20, 22], "submodul": 1, "helper": 1, "kao2gmo": [1, 2], "postscf_ao2mo": [1, 2], "pyscf_eri": [1, 2], "bath": [1, 2, 6, 11, 12, 13, 33, 38, 39], "bno": [1, 2, 11, 13], "ewdmet": [1, 2], "full": [1, 2, 5, 6, 11, 12, 13, 20, 21, 33, 35, 36, 37, 38, 39, 41], "r2bath": [1, 2], "fragment": [1, 2, 4, 16, 21, 22, 31, 33, 34, 35, 36, 37, 38, 40, 41], "ca": [1, 2, 6, 11, 12, 13, 14, 22], "iao": [1, 2, 6, 11, 12, 13, 33, 38, 39], "iaopao": [1, 2], "sao": [1, 2, 6, 11, 12, 13, 33, 35, 39], "site": [1, 2, 6, 11, 12, 13, 14, 23, 27, 33, 34, 35, 39], "ufragment": [1, 2], "qemb": [1, 2, 11, 12, 13], "corrfunc": [1, 2], "regist": [1, 2, 14, 16, 22], "scrcoulomb": [1, 2], "ufrag": [1, 2], "uqemb": [1, 2], "scmf": [1, 2], "brueckner": [1, 2, 6, 11, 12, 13], "pdmet": [1, 2], "symmetri": [1, 2, 3, 6, 11, 12, 13, 14, 35, 38], "group": [1, 2, 6, 11, 12, 13, 14, 36, 38], "oper": [1, 2, 6, 11, 12, 13, 14, 21, 26], "tsymmetri": [1, 2], "type": [1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 16, 19, 22], "cluster": [1, 2, 4, 6, 11, 12, 13, 21, 22, 31, 33, 34, 40], "ebwf": [1, 2], "orbit": [1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 16, 20, 21, 22, 33, 35, 36, 38, 39], "cmdarg": 1, "parse_cmd_arg": [1, 2], "foldscf": 1, "fold_scf": [1, 2], "foldedscf": [1, 2], "kmf": [1, 2], "kcell": [1, 2, 6], "ncell": [1, 2, 6, 11, 12, 13], "kphase": [1, 2], "e_tot": [1, 2, 6, 7, 11, 12, 13, 14, 16, 20, 21, 22, 34, 35, 37, 38, 39, 41], "get_ovlp": [1, 2, 5, 6, 11, 12, 13, 14], "get_hcor": [1, 2, 6, 11, 12, 13, 14, 35], "get_veff": [1, 2, 6, 11, 12, 13, 14], "foldedrhf": [1, 2], "dii": [1, 2, 7, 11, 12, 14, 16, 22], "add_kei": [1, 2, 14, 22], "analyz": [1, 2, 14], "appli": [1, 2, 6, 11, 12, 13, 14, 22], "as_scann": [1, 2, 14, 22], "build": [1, 2, 6, 14, 22, 29, 32, 33, 35, 37, 38, 39, 41], "canonic": [1, 2, 4, 6, 11, 12, 13, 14, 16], "check_converg": [1, 2, 7, 14], "check_san": [1, 2, 14, 22], "conv_check": [1, 2, 14], "conv_tol": [1, 2, 11, 12, 14, 22, 23], "conv_tol_grad": [1, 2, 14], "convert_from_": [1, 2, 14], "damp": [1, 2, 7, 11, 14, 16], "damp_factor": [1, 2, 14], "density_fit": [1, 2, 14, 22, 37, 38, 41], "diis_fil": [1, 2, 14, 22], "diis_spac": [1, 2, 14, 22], "diis_space_rollback": [1, 2, 14], "diis_start_cycl": [1, 2, 14, 22], "dip_moment": [1, 2, 14], "direct_scf": [1, 2, 14], "direct_scf_tol": [1, 2, 14], "dump_chk": [1, 2, 14, 22], "dump_flag": [1, 2, 14, 22], "dump_scf_summari": [1, 2, 14], "eig": [1, 2, 4, 14], "energy_elec": [1, 2, 14], "energy_nuc": [1, 2, 6, 11, 12, 13, 14], "energy_tot": [1, 2, 3, 14], "from_chk": [1, 2, 14], "gen_respons": [1, 2], "get_band": [1, 2], "get_fock": [1, 2, 3, 4, 6, 11, 12, 13, 14, 22], "get_grad": [1, 2, 14], "get_init_guess": [1, 2, 13, 14, 22], "get_j": [1, 2, 14], "get_jk": [1, 2, 14], "get_jk_incor": [1, 2], "get_k": [1, 2, 14, 20], "get_occ": [1, 2, 14], "get_rho": [1, 2], "hf_energi": [1, 2, 14], "init_direct_scf": [1, 2, 14], "init_guess": [1, 2, 11, 13, 14, 22], "init_guess_by_1": [1, 2, 14], "init_guess_by_atom": [1, 2, 14], "init_guess_by_chkfil": [1, 2, 14], "init_guess_by_huckel": [1, 2, 14], "init_guess_by_minao": [1, 2, 14], "jk_method": [1, 2], "kernel": [1, 2, 4, 5, 6, 7, 11, 12, 13, 14, 16, 20, 21, 22, 23, 34, 35, 36, 37, 38, 39, 41], "kpt": [1, 2, 3, 6, 14, 38], "level_shift": [1, 2, 14, 22], "level_shift_factor": [1, 2, 14], "make_rdm1": [1, 2, 4, 6, 9, 10, 11, 12, 13, 14, 22, 23, 35, 38], "make_rdm2": [1, 2, 9, 10, 11, 12, 13, 14, 22, 23, 35], "max_cycl": [1, 2, 14, 22, 23], "mix_density_fit": [1, 2], "mulliken_meta": [1, 2, 14], "mulliken_pop": [1, 2, 14], "mulliken_pop_meta_lowdin_ao": [1, 2, 14], "newton": [1, 2, 14], "nuc_grad_method": [1, 2, 14, 22], "pop": [1, 2, 6, 11, 12, 13, 14], "post_kernel": [1, 2, 14, 22], "pre_kernel": [1, 2, 14, 22], "remove_soscf": [1, 2, 14], "reset": [1, 2, 6, 11, 12, 13, 14, 22], "rs_density_fit": [1, 2], "run": [1, 2, 11, 12, 13, 14, 19, 22, 23, 31], "scf": [1, 2, 3, 6, 11, 12, 13, 14, 16, 21, 22, 35, 37, 38, 39, 41], "set": [1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 20, 21, 22, 26, 33, 35, 36, 38, 39, 41], "sfx2c1e": [1, 2, 14], "spin_squar": [1, 2, 14, 22], "stabil": [1, 2, 14], "stdout": [1, 2, 14, 22], "to_ghf": [1, 2, 14], "to_gk": [1, 2, 14], "to_k": [1, 2, 14], "to_rhf": [1, 2, 14, 37], "to_rk": [1, 2, 14], "to_uhf": [1, 2, 14], "to_uk": [1, 2, 14], "updat": [1, 2, 6, 12, 13, 14, 16, 22, 23], "update_": [1, 2, 14], "update_from_chk": [1, 2, 14], "update_from_chk_": [1, 2, 14], "verbos": [1, 2, 4, 14, 22, 23], "view": [1, 2, 14, 22], "x2c": [1, 2, 14], "x2c1e": [1, 2, 14], "foldeduhf": [1, 2], "det_ovlp": [1, 2, 14], "make_asym_dm": [1, 2, 14], "mulliken_meta_spin": [1, 2, 14], "mulliken_spin_pop": [1, 2, 14], "nelec": [1, 2, 5, 9, 10, 11, 14, 22, 23], "nelectron_alpha": [1, 2, 14], "fold_mo": [1, 2], "log_error_norm": [1, 2], "make_mo_coeff_r": [1, 2], "make_mo_coeff_real_2": [1, 2], "kpts_to_kmesh": [1, 2], "translation_vectors_for_kmesh": [1, 2], "get_phas": [1, 2], "k2bvk_2d": [1, 2], "bvk2k_2d": [1, 2], "orbital_sign_convent": [1, 2], "get_dtype_int": [1, 2], "get_dtyp": [1, 2, 19], "pack_metadata": [1, 2], "unpack_metadata": [1, 2], "pack_arrai": [1, 2], "unpack_arrai": [1, 2], "linalg": [1, 14, 35], "recursive_block_svd": [1, 2], "spinalg": 1, "add_numb": [1, 2], "hstack_matric": [1, 2], "util": [1, 10, 21, 34, 36, 38], "object": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 34, 35, 37, 38, 41], "optionsbas": [1, 2, 6, 11, 22, 23], "get": [1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 19, 20, 22, 23], "asdict": [1, 2, 6, 11, 12, 13, 22, 23], "kei": [1, 2, 6, 11, 12, 13, 14, 19, 22, 23, 36], "valu": [1, 2, 3, 4, 6, 11, 12, 13, 14, 19, 21, 22, 23, 33, 35, 38], "item": [1, 2, 6, 11, 12, 13, 14, 22, 23, 36], "get_default": [1, 2, 6, 11, 12, 13, 22, 23], "get_default_factori": [1, 2, 6, 11, 12, 13, 22, 23], "replac": [1, 2, 4, 6, 11, 12, 13, 14, 16, 22, 23], "dict_with_default": [1, 2, 6, 11, 12, 13, 22, 23], "change_dict_default": [1, 2, 6, 11, 12, 13, 22, 23], "brang": [1, 2], "deprec": [1, 2, 13, 14], "cach": [1, 2, 6, 11, 12, 13], "call_onc": [1, 2], "with_doc": [1, 2], "dot": [1, 2, 3, 5, 6, 11, 12, 13, 14], "tril_indices_ndim": [1, 2], "einsum": [1, 2, 22, 35], "hstack": [1, 2], "decompress_ax": [1, 2], "abstractmethoderror": [1, 2], "arg": [1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 19, 20, 21, 22], "with_traceback": [1, 2, 11, 12, 20, 21], "convergenceerror": [1, 2], "orthonormalityerror": [1, 2], "imaginaryparterror": [1, 2], "notcalculatederror": [1, 2], "energy_str": [1, 2], "time_str": [1, 2], "memory_str": [1, 2], "timer": [1, 2], "log_tim": [1, 2], "get_used_memori": [1, 2], "log_method": [1, 2], "getattr_recurs": [1, 2], "setattr_recurs": [1, 2], "replace_attr": [1, 2], "break_into_lin": [1, 2], "fix_orbital_sign": [1, 2], "split_into_block": [1, 2], "getif": [1, 2], "callif": [1, 2], "permutations_with_sign": [1, 2], "vlog": 1, "nologg": [1, 2], "levelrangefilt": [1, 2], "filter": [1, 2, 6, 11, 12, 13, 39], "levelincludefilt": [1, 2], "levelexcludefilt": [1, 2], "vformatt": [1, 2], "format": [1, 2, 14], "convert": [1, 2, 5, 14, 37], "default_msec_format": [1, 2], "default_time_format": [1, 2], "formatexcept": [1, 2], "formatmessag": [1, 2], "formatstack": [1, 2], "formattim": [1, 2], "usestim": [1, 2], "vstreamhandl": [1, 2], "acquir": [1, 2], "addfilt": [1, 2], "close": [1, 2, 6, 11, 12, 13, 14], "createlock": [1, 2], "emit": [1, 2], "flush": [1, 2], "get_nam": [1, 2], "handl": [1, 2], "handleerror": [1, 2], "name": [1, 2, 4, 5, 6, 7, 11, 12, 13, 14, 15, 21, 22, 34, 36, 41], "releas": [1, 2, 15], "removefilt": [1, 2], "setformatt": [1, 2], "setlevel": [1, 2], "setstream": [1, 2], "set_nam": [1, 2], "termin": [1, 2], "vfilehandl": [1, 2], "get_lognam": [1, 2], "init_log": [1, 2], "option": [1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 16, 21, 22, 23, 26, 32, 34, 36, 37, 38], "iao_minao": [1, 11, 12, 13], "dm_with_frozen": [1, 2, 6, 11, 12, 13], "maxit": [1, 7, 11, 12, 16, 35], "charge_consist": [1, 11, 12], "max_elec_err": [1, 11, 12], "mixing_param": [1, 11, 12], "mixing_vari": [1, 11, 12], "oneshot": [1, 11, 12, 37], "solver_opt": [1, 2, 6, 11, 12, 13, 36, 38], "global_frag_chempot": [1, 2, 6, 11, 12, 13], "screen": [1, 2, 6, 11, 12, 13, 14, 22], "store_eri": [1, 2, 6, 11, 12, 13], "symmetry_mf_tol": [1, 2, 6, 11, 12, 13], "symmetry_tol": [1, 2, 6, 11, 12, 13], "bath_opt": [1, 2, 6, 11, 12, 13, 38, 39, 41], "dmetresult": [1, 11], "cluster_s": [1, 11, 12], "e_corr": [1, 6, 11, 12, 13, 14, 20, 21], "calc_electron_number_defect": [1, 11, 12], "update_vcorr": [1, 11, 12], "get_impurity_coeff": [1, 11, 12], "print_result": [1, 11, 12], "print_clust": [1, 11, 12], "get_corrfunc": [1, 2, 6, 11, 12, 13], "brueckner_scmf": [1, 2, 6, 11, 12, 13], "build_screened_eri": [1, 2, 6, 11, 12, 13], "cas_fragment": [1, 2, 5, 6, 11, 12, 13], "change_opt": [1, 2, 6, 11, 12, 13], "check_fragment_symmetri": [1, 2, 6, 11, 12, 13], "check_solv": [1, 2, 6, 11, 12, 13], "communicate_clust": [1, 2, 6, 11, 12, 13], "create_invsym_frag": [1, 2, 6, 11, 12, 13], "create_mirrorsym_frag": [1, 2, 6, 11, 12, 13], "create_rotsym_frag": [1, 2, 6, 11, 12, 13], "create_symmetric_frag": [1, 2, 6, 11, 12, 13], "create_transsym_frag": [1, 2, 6, 11, 12, 13], "df": [1, 2, 3, 6, 11, 12, 13, 19, 22], "e_mf": [1, 2, 6, 11, 12, 13, 37], "e_nuc": [1, 2, 6, 11, 12, 13, 35], "get_atomic_charg": [1, 2, 6, 11, 12, 13], "get_average_cluster_s": [1, 2, 6, 11, 12, 13], "get_cderi": [1, 2, 6, 11, 12, 13], "get_corrfunc_mf": [1, 2, 6, 11, 12, 13], "get_dmet_elec_energi": [1, 2, 6, 11, 12, 13], "get_dmet_energi": [1, 2, 6, 11, 12, 13], "get_eris_arrai": [1, 2, 6, 11, 12, 13, 35], "get_eris_object": [1, 2, 6, 11, 12, 13], "get_exxdiv": [1, 2, 6, 11, 12, 13], "get_fock_for_bath": [1, 2, 6, 11, 12, 13], "get_fock_for_energi": [1, 2, 6, 11, 12, 13], "get_fragment_overlap_norm": [1, 2, 6, 11, 12, 13], "get_frag": [1, 2, 6, 11, 12, 13], "get_hcore_for_energi": [1, 2, 6, 11, 12, 13], "get_lo_coeff": [1, 2, 6, 11, 12, 13], "get_max_cluster_s": [1, 2, 6, 11, 12, 13], "get_mean_cluster_s": [1, 2, 6, 11, 12, 13], "get_min_cluster_s": [1, 2, 6, 11, 12, 13], "get_ovlp_pow": [1, 2, 6, 11, 12, 13], "get_symmetry_child_frag": [1, 2, 6, 11, 12, 13], "get_symmetry_parent_frag": [1, 2, 6, 11, 12, 13], "get_veff_for_energi": [1, 2, 6, 11, 12, 13], "has_complete_fragment": [1, 2, 6, 11, 12, 13], "has_complete_occupied_fragment": [1, 2, 6, 11, 12, 13], "has_complete_virtual_fragment": [1, 2, 6, 11, 12, 13], "has_df": [1, 2, 6, 11, 12, 13], "has_exxdiv": [1, 2, 6, 11, 12, 13], "has_orthonormal_fragment": [1, 2, 6, 11, 12, 13], "iao_fragment": [1, 2, 5, 6, 11, 12, 13, 37, 38, 39], "iaopao_fragment": [1, 2, 5, 6, 11, 12, 13, 39], "init_mf": [1, 2, 6, 11, 12, 13], "is_rhf": [1, 2, 6, 11, 12, 13], "is_uhf": [1, 2, 6, 11, 12, 13, 22], "loop": [1, 2, 6, 11, 12, 13, 14, 26], "make_rdm1_demo": [1, 2, 6, 11, 12, 13], "make_rdm2_demo": [1, 2, 6, 11, 12, 13], "mo_coeff": [1, 2, 3, 5, 6, 10, 11, 12, 13, 14, 16, 20, 21, 22], "mo_coeff_occ": [1, 2, 6, 11, 12, 13, 20, 21], "mo_coeff_vir": [1, 2, 6, 11, 12, 13, 20, 21], "mo_energi": [1, 2, 3, 6, 11, 12, 13, 14, 20, 21, 22], "mo_energy_occ": [1, 2, 6, 11, 12, 13, 20, 21], "mo_energy_vir": [1, 2, 6, 11, 12, 13, 20, 21], "mo_occ": [1, 2, 5, 6, 10, 11, 12, 13, 14, 20, 21, 22], "mol": [1, 2, 4, 5, 6, 8, 11, 12, 13, 14, 16, 22, 34, 35, 37, 38, 39, 41], "nao": [1, 2, 5, 6, 8, 11, 12, 13, 14, 20, 35], "nfrag": [1, 2, 6, 11, 12, 13], "nmo": [1, 2, 5, 6, 11, 12, 13, 20, 21, 22], "nocc": [1, 2, 3, 6, 9, 10, 11, 12, 13, 20, 21, 22, 36], "nvir": [1, 2, 6, 9, 10, 11, 12, 13, 20, 21, 36], "optimize_chempot": [1, 2, 6, 11, 12, 13], "pbc_dimens": [1, 2, 6, 11, 12, 13], "pdmet_scmf": [1, 2, 6, 11, 12, 13], "pop_analysi": [1, 2, 6, 11, 12, 13, 38], "require_complete_fragment": [1, 2, 6, 11, 12, 13], "sao_fragment": [1, 2, 5, 6, 11, 12, 13, 35, 39], "set_hcor": [1, 2, 6, 11, 12, 13], "set_ovlp": [1, 2, 6, 11, 12, 13], "set_veff": [1, 2, 6, 11, 12, 13], "site_fragment": [1, 2, 5, 6, 11, 12, 13, 34, 35, 39], "spinsym": [1, 2, 4, 6, 9, 11, 12, 13], "update_mf": [1, 2, 6, 11, 12, 13, 16], "write_popul": [1, 2, 6, 11, 12, 13], "rdmet": [1, 11], "dmetfragmentexit": [1, 11], "dmetfrag": [1, 11, 12], "result": [1, 2, 6, 11, 12, 13, 14, 19, 20, 21, 22, 33, 34, 35, 38, 39, 41], "get_solver_opt": [1, 2, 6, 11, 12, 13], "get_dmet_energy_contrib": [1, 11, 12], "get_frag_hl_dm": [1, 11, 12], "get_nelectron_hl": [1, 11, 12], "flag": [1, 2, 6, 11, 12, 13, 26], "add_tsymmetric_frag": [1, 2, 6, 11, 12, 13], "canonicalize_mo": [1, 2, 6, 11, 12, 13], "contribut": [1, 2, 6, 11, 12, 13, 14, 20, 21, 22], "copi": [1, 2, 6, 9, 10, 11, 12, 13, 14, 22, 35, 38], "couple_to_frag": [1, 2, 6, 11, 12, 13], "diagonalize_cluster_dm": [1, 2, 6, 11, 12, 13], "get_coeff_env": [1, 2, 6, 11, 12, 13], "get_frag_hamil": [1, 2, 6, 11, 12, 13], "get_fragment_dmet_energi": [1, 2, 6, 11, 12, 13], "get_fragment_mf_energi": [1, 2, 6, 11, 12, 13], "get_fragment_mo_energi": [1, 2, 6, 11, 12, 13], "get_fragment_projector": [1, 2, 6, 11, 12, 13], "get_fragments_with_overlap": [1, 2, 6, 11, 12, 13], "get_mo_occup": [1, 2, 6, 11, 12, 13], "get_overlap": [1, 2, 6, 11, 12, 13], "get_solv": [1, 2, 6, 11, 12, 13, 22], "get_symmetry_children": [1, 2, 6, 11, 12, 13], "get_symmetry_error": [1, 2, 6, 11, 12, 13], "get_symmetry_gener": [1, 2, 6, 11, 12, 13], "get_symmetry_oper": [1, 2, 6, 11, 12, 13], "get_symmetry_par": [1, 2, 6, 11, 12, 13], "get_symmetry_tre": [1, 2, 6, 11, 12, 13], "hamil": [1, 2, 6, 11, 12, 13, 22, 23], "id_nam": [1, 2, 6, 11, 12, 13], "log_info": [1, 2, 4, 6, 11, 12, 13], "loop_symmetry_children": [1, 2, 6, 11, 12, 13], "make_bath": [1, 2, 6, 11, 12, 13], "make_clust": [1, 2, 6, 11, 12, 13], "make_counterpoise_mol": [1, 2, 6, 11, 12, 13], "make_tsymmetric_frag": [1, 2, 6, 11, 12, 13], "mf": [1, 2, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 19, 20, 21, 22, 23, 34, 35, 38, 39, 41], "n_frag": [1, 2, 6, 11, 12, 13], "n_symmetry_children": [1, 2, 6, 11, 12, 13], "nelectron": [1, 2, 6, 11, 12, 13, 14, 22, 34, 35], "plot3d": [1, 2, 6, 11, 12, 13], "project_ref_orbit": [1, 2, 6, 11, 12, 13], "symmetry_factor": [1, 2, 6, 11, 12, 13], "trimmed_nam": [1, 2, 6, 11, 12, 13], "sdp_sc": 1, "perform_sdp_fit": [1, 11], "udmet": [1, 12], "get_eris_array_uhf": [1, 2, 6, 11, 12, 13], "udmetfrag": [1, 11, 12], "set_ca": [1, 11, 12, 13], "diisupd": [1, 11], "mixupd": [1, 11], "make_dd_mo": [1, 12, 37], "old_sc_condit": [1, 12], "max_bo": [1, 12], "occ_proj_kernel": [1, 12], "boson_xc_kernel": [1, 12], "bosonic_interact": [1, 12], "edmetresult": [1, 12], "with_df": [1, 2, 12, 14, 22], "ep": [1, 12], "set_up_frag": [1, 12], "get_updated_correlation_kernel": [1, 12], "improve_nl_energi": [1, 12], "run_exact_full_ac": [1, 12], "redmet": [1, 12], "edmetfragmentexit": [1, 12], "auxiliari": [1, 2, 3, 6, 11, 12, 13, 38], "sym_factor": [1, 2, 6, 11, 12, 13, 34], "coupled_frag": [1, 2, 6, 11, 12, 13, 22], "edmetfrag": [1, 12], "ov_act": [1, 12], "ov_active_tot": [1, 12], "ov_mf": [1, 12], "nbo": [1, 12, 22, 23], "r_bo": [1, 12], "r_bos_ao": [1, 12], "r_ao_bo": [1, 12], "energy_coupl": [1, 12], "get_co_act": [1, 12], "get_cv_act": [1, 12], "get_rot_to_mf_ov": [1, 12], "get_fragment_projector_ov": [1, 12], "set_up_fermionic_bath": [1, 12], "define_boson": [1, 12], "construct_boson_hamil": [1, 12], "store_cluster_rpa": [1, 12], "get_eri_coupl": [1, 12], "conv_to_ao": [1, 12], "get_xc_coupl": [1, 12], "get_loc_ep": [1, 12], "proj_hamil_qba": [1, 12], "check_qba_approx": [1, 12], "get_rbos_split": [1, 12], "get_edmet_energy_contrib": [1, 12], "construct_correlation_kernel_contrib": [1, 12], "get_correlation_kernel_contrib": [1, 12], "get_composite_mo": [1, 12], "get_rot_ov_frag": [1, 12], "calc_exact_ac": [1, 12], "test_total_rpa_energi": [1, 12], "ov_active_ab": [1, 12], "nocc_ab": [1, 12], "nclus_ab": [1, 12], "nvir_ab": [1, 12], "split_ov_spin_compon": [1, 12], "bogoliubov_decoupl": [1, 12], "uedmet": 1, "uedmetfrag": [1, 12], "project_eri": [1, 13], "project_init_guess": [1, 13], "energy_funct": [1, 13], "calc_e_wf_corr": [1, 13], "calc_e_dm_corr": [1, 13], "t_as_lambda": [1, 10, 13], "store_wf_typ": [1, 13], "bsse_correct": [1, 13], "bsse_rmax": [1, 13], "nelectron_target": [1, 13], "sc_mode": [1, 13, 22], "coupled_iter": [1, 13], "tailor_all_frag": [1, 13], "get_global_t1": [1, 13], "get_global_t2": [1, 13], "get_global_l1": [1, 13], "get_global_l2": [1, 13], "t1_diagnost": [1, 13], "get_t1": [1, 2, 7, 13], "get_t2": [1, 13], "get_l1": [1, 13], "get_l2": [1, 13], "get_e_corr": [1, 13], "get_wf_corr_energi": [1, 13], "get_proj_corr_energi": [1, 13], "get_dm_corr_energi": [1, 13], "get_dm_corr_energy_e1": [1, 13], "get_dm_corr_energy_e2": [1, 13], "get_ccsd_corr_energi": [1, 13], "get_wf_energi": [1, 13], "get_proj_energi": [1, 13], "get_dm_energi": [1, 13, 38], "get_ccsd_energi": [1, 13], "get_fbc_energi": [1, 13], "get_intercluster_mp2_energi": [1, 13], "get_atomic_ssz_mf": [1, 13], "get_atomic_ssz": [1, 13], "rewf": [1, 13], "get_fragment_mpi_rank": [1, 2, 6, 13], "nelectron_target_atol": [1, 13], "nelectron_target_rtol": [1, 13], "wf_factor": [1, 13], "c_cas_occ": [1, 13, 22], "c_cas_vir": [1, 13, 22], "tcc_fci_opt": [1, 13], "tailor_with_frag": [1, 13, 22], "add_external_correct": [1, 13], "clear_external_correct": [1, 13], "get_fragment_energi": [1, 13], "make_fragment_dm1": [1, 13], "make_fragment_dm2cumul": [1, 13], "make_fragment_dm2cumulant_energi": [1, 13], "get_fragment_bss": [1, 13], "counterpoise_calcul": [1, 13], "orthogonalize_mo": [1, 13], "uewf": 1, "d1_diagnost": [1, 13], "beth": 1, "hubbard1d_bethe_energi": [1, 14], "hubbard1d_bethe_docc": [1, 14], "hubbard1d_bethe_docc_numdiff": [1, 14], "latt": 1, "latticemol": [1, 14], "incore_anywai": [1, 14], "natm": [1, 8, 14, 38], "nao_nr": [1, 2, 14], "ao_label": [1, 14], "atom_symbol": [1, 14], "atom_pure_symbol": [1, 14], "search_ao_label": [1, 14], "gv": [1, 14], "ao_loc": [1, 14], "ao_loc_2c": [1, 14], "ao_loc_nr": [1, 14], "ao_rotation_matrix": [1, 14], "aoslice_2c_by_atom": [1, 14], "aoslice_by_atom": [1, 14], "aoslice_nr_by_atom": [1, 14], "atom_charg": [1, 14], "atom_coord": [1, 2, 8, 14], "atom_mass_list": [1, 14], "atom_nelec_cor": [1, 14], "atom_nshel": [1, 14], "atom_shell_id": [1, 14], "bas_angular": [1, 14], "bas_atom": [1, 14], "bas_coord": [1, 14], "bas_ctr_coeff": [1, 14], "bas_exp": [1, 14], "bas_kappa": [1, 14], "bas_len_cart": [1, 14], "bas_len_spinor": [1, 14], "bas_nctr": [1, 14], "bas_nprim": [1, 14], "bas_rcut": [1, 14], "cart": [1, 14], "cart2sph_coeff": [1, 14], "cart_label": [1, 14], "condense_to_shel": [1, 14], "decontract_basi": [1, 14], "drop_expon": [1, 14], "dump_input": [1, 14, 16], "dump": [1, 14, 31, 33, 40], "element": [1, 6, 8, 11, 12, 13, 14, 22, 36, 39], "etb": [1, 14], "eval_ao": [1, 14], "eval_gto": [1, 14], "ew_cut": [1, 14], "ew_eta": [1, 14], "ewald": [1, 14], "exp_to_discard": [1, 14], "expand_etb": [1, 14], "format_atom": [1, 14], "format_basi": [1, 14], "format_ecp": [1, 14], "format_pseudo": [1, 14], "from_as": [1, 14], "fromfil": [1, 14], "fromstr": [1, 14], "gen_uniform_grid": [1, 14], "get_gv": [1, 14], "get_gv_weight": [1, 14], "get_si": [1, 14], "get_abs_kpt": [1, 14], "get_ao_indic": [1, 14], "get_bounding_spher": [1, 14], "get_enuc": [1, 14], "get_ewald_param": [1, 14], "get_kpt": [1, 14], "get_lattice_l": [1, 14], "get_nimg": [1, 14], "get_overlap_cond": [1, 14], "get_scaled_kpt": [1, 14], "get_scaled_posit": [1, 14], "get_uniform_grid": [1, 14], "g": [1, 2, 3, 5, 14, 21, 22, 23, 41], "gto_norm": [1, 14], "h": [1, 2, 12, 14, 17, 22, 33, 35, 37, 38, 41], "has_ecp": [1, 14], "has_ecp_soc": [1, 14], "inertia_mo": [1, 14], "intor": [1, 2, 14], "intor_asymmetr": [1, 14], "intor_by_shel": [1, 14], "intor_symmetr": [1, 14], "lattice_vector": [1, 2, 8, 14, 16], "load": [1, 3, 14, 15, 24, 37], "loads_": [1, 14], "make_atm_env": [1, 14], "make_bas_env": [1, 14], "make_ecp_env": [1, 14], "make_env": [1, 14], "make_kpt": [1, 14, 38], "mesh": [1, 2, 14, 22, 38], "m": [1, 2, 3, 5, 6, 11, 12, 13, 14, 16, 22, 23, 29], "multipl": [1, 2, 5, 6, 11, 12, 13, 14, 16, 19, 21, 38, 41], "nao_2c": [1, 14], "nao_2c_rang": [1, 14], "nao_cart": [1, 14], "nao_nr_rang": [1, 14], "nba": [1, 14], "nimg": [1, 14], "npgto_nr": [1, 14], "offset_2c_by_atom": [1, 14], "offset_ao_by_atom": [1, 14], "offset_nr_by_atom": [1, 14], "omega": [1, 2, 14], "pack": [1, 2, 9, 10, 14, 38], "pbc_eval_ao": [1, 14], "pbc_eval_gto": [1, 14], "pbc_intor": [1, 14], "precis": [1, 14], "rcut": [1, 4, 6, 14], "reciprocal_vector": [1, 14], "search_ao_nr": [1, 14], "search_ao_r": [1, 14], "search_shell_id": [1, 14], "set_common_orig": [1, 14], "set_common_orig_": [1, 14], "set_common_origin": [1, 14], "set_common_origin_": [1, 14], "set_f12_zeta": [1, 14], "set_geom_": [1, 14], "set_nuc_mod": [1, 14], "set_nuc_mod_": [1, 14], "set_range_coulomb": [1, 14], "set_range_coulomb_": [1, 14], "set_rinv_orig": [1, 14], "set_rinv_orig_": [1, 14], "set_rinv_origin": [1, 14], "set_rinv_origin_": [1, 14], "set_rinv_zeta": [1, 14], "set_rinv_zeta_": [1, 14], "sph2spinor_coeff": [1, 14], "sph_label": [1, 14], "spheric_label": [1, 14], "spinor_label": [1, 14], "symmetrize_mesh": [1, 14], "time_reversal_map": [1, 14], "tmap": [1, 14], "to_mol": [1, 14], "to_uncontracted_cartesian_basi": [1, 14], "tofil": [1, 14], "tostr": [1, 14], "tot_electron": [1, 14], "unit": [1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 16, 17, 38], "unpack": [1, 2, 9, 10, 14], "unpack_": [1, 14], "vol": [1, 14], "with_common_orig": [1, 14], "with_common_origin": [1, 14], "with_integral_screen": [1, 14], "with_long_range_coulomb": [1, 14], "with_range_coulomb": [1, 14], "with_rinv_as_nucleu": [1, 14], "with_rinv_at_nucleu": [1, 14], "with_rinv_orig": [1, 14], "with_rinv_origin": [1, 14], "with_rinv_zeta": [1, 14], "with_short_range_coulomb": [1, 14], "hubbard": [1, 14, 23, 31, 34, 38], "hubbard1d": [1, 14, 34, 35], "get_eri": [1, 14], "get_index": [1, 14], "hubbard2d": [1, 14, 35], "get_tiles_ord": [1, 14], "hubbarddf": [1, 14], "get_naoaux": [1, 14], "latticescf": [1, 14], "cell": [1, 2, 3, 6, 8, 11, 12, 13, 14, 16, 18, 38], "latticerhf": [1, 14], "check_lattice_symmetri": [1, 14], "ccsd": [1, 2, 3, 6, 9, 11, 12, 13, 14, 33, 34, 37, 38, 39, 41], "max_memori": [1, 2, 14, 22], "conv_tol_normt": [1, 14, 22], "iterative_damp": [1, 14, 22], "direct": [1, 6, 8, 11, 12, 13, 14, 16, 21, 22, 35], "async_io": [1, 14, 22], "incore_complet": [1, 14, 22], "frozen": [1, 14, 22], "callback": [1, 14, 22], "cisd": [1, 2, 9, 11, 14, 33], "dfmp2": [1, 3, 14], "mp2": [1, 2, 3, 4, 5, 6, 9, 11, 12, 13, 14, 33, 38], "qcisd": [1, 14], "latticeuhf": [1, 14], "latticemf": [1, 14, 34, 35], "libcor": 1, "load_librari": [1, 15], "molecul": [1, 6, 11, 12, 13, 14, 16, 31, 33, 36, 37, 39, 41], "solid": [1, 16, 31, 33, 35, 39], "update_mo_coeff": [1, 2, 7, 16], "chargecharg": [1, 16], "spin_z": [1, 16], "spin_z_unrestrict": [1, 16], "spinspin_z": [1, 16], "spinspin_z_unrestrict": [1, 16], "chargecharge_mf": [1, 16], "spinspin_z_mf": [1, 16], "spinspin_z_mf_unrestrict": [1, 16], "counterpois": [1, 6, 11, 12, 13], "make_cp_mol": [1, 16], "cptbisect": 1, "chempotbisect": [1, 16], "cubefil": 1, "has_pbc": [1, 2, 8, 16], "get_box_and_origin": [1, 16], "get_coord": [1, 16], "ncoord": [1, 16], "nfield": [1, 16], "save_st": [1, 16], "load_stat": [1, 16], "add_orbit": [1, 16], "add_dens": [1, 16], "add_mep": [1, 16], "write": [1, 6, 11, 12, 13, 14, 16, 21], "write_head": [1, 16], "write_field": [1, 16], "gto_help": 1, "loop_neighbor_cel": [1, 16], "get_atom_dist": [1, 16], "get_atom_shel": [1, 16], "make_counterpoise_frag": [1, 16], "pcdii": 1, "extrapol": [1, 16], "get_err_vec": [1, 16], "get_num_vec": [1, 16], "get_vec": [1, 16], "push_err_vec": [1, 16], "push_vec": [1, 16], "restor": [1, 9, 10, 16, 22], "interfac": [1, 14, 26, 41], "ndarraymetadata": [1, 19], "count": [1, 6, 11, 12, 13, 19], "dtype": [1, 2, 9, 10, 14, 19], "index": [1, 3, 6, 8, 11, 12, 13, 14, 15, 16, 19, 21], "shape": [1, 2, 6, 11, 12, 13, 14, 19, 21, 23, 36], "mpi_interfac": [1, 19], "enabl": [1, 14, 19, 22, 34, 37], "disabl": [1, 19], "is_mast": [1, 19, 41], "get_new_tag": [1, 19], "nreduc": [1, 19], "bcast": [1, 19], "with_reduc": [1, 19], "with_allreduc": [1, 19], "only_mast": [1, 19], "with_send": [1, 19], "create_rma_dict": [1, 19], "gdf": [1, 2, 3, 6, 19], "rma": 1, "rma_dict": [1, 19], "from_dict": [1, 19], "rma_dictel": [1, 19], "readabl": [1, 19], "clear": [1, 19], "writabl": [1, 19], "get_loc": [1, 19], "get_shap": [1, 19], "synchron": [1, 19], "scf_with_mpi": [1, 19], "gdf_with_mpi": [1, 19], "init_mpi": [1, 19], "rirpa": [1, 20], "ni_ev": [1, 20], "riurpa": [1, 20], "energy_ni": [1, 20], "momzero_ni": [1, 20], "ov": [1, 4, 6, 11, 12, 13, 20, 21], "get_interaction_kernel": [1, 20], "ssrpa": 1, "ova": [1, 20], "ovb": [1, 20], "calc_energy_correct": [1, 20], "get_xc_contrib": [1, 20], "gen_mom": [1, 20], "ssrrpa": [1, 20], "ssurpa": 1, "norb": [1, 2, 9, 10, 20, 22, 23, 36], "eb_fci": [1, 22], "ebfci": [1, 12, 37], "ebfci_slow": [1, 22], "uebfci_slow": [1, 22], "rccsd_solver": [1, 22], "get_solver_class": [1, 22], "generate_init_guess": [1, 22], "t_diagnost": [1, 22], "get_callback": [1, 22], "print_extra_info": [1, 22], "calc_v_ext": [1, 22], "optimize_cpt": [1, 22], "v_ext": [1, 22], "uccsd_solv": [1, 22], "uccsd": [1, 3, 22], "eomea": [1, 22], "eomea_ta": [1, 22], "eome": [1, 22], "eomeesinglet": [1, 22], "eomeespinflip": [1, 22], "eomeespinkeep": [1, 22], "eomeetriplet": [1, 22], "eomip": [1, 22], "eomip_ta": [1, 22], "amplitudes_from_rccsd": [1, 22], "amplitudes_to_vector": [1, 22], "cc2": [1, 22], "ccsd_t": [1, 22], "diis_start_energy_diff": [1, 22], "eaccsd": [1, 22], "ecc": [1, 22], "eeccsd": [1, 22], "energi": [1, 2, 3, 6, 9, 11, 12, 13, 14, 20, 21, 22, 24, 33, 34, 35, 37], "eomea_method": [1, 22], "eomee_ccsd": [1, 22], "eomee_ccsd_singlet": [1, 22], "eomee_ccsd_triplet": [1, 22], "eomee_method": [1, 22], "eomip_method": [1, 22], "eomsf_ccsd": [1, 22], "get_d1_diagnost": [1, 22], "get_d2_diagnost": [1, 22], "get_e_hf": [1, 22], "get_frozen_mask": [1, 22], "get_nmo": [1, 22], "get_nocc": [1, 22], "get_t1_diagnost": [1, 22], "init_amp": [1, 22], "ipccsd": [1, 22], "restore_from_diis_": [1, 22], "run_dii": [1, 22], "set_frozen": [1, 14, 22], "solve_lambda": [1, 13, 22, 38], "uccsd_t": [1, 22], "update_amp": [1, 22], "vector_s": [1, 22], "vector_to_amplitud": [1, 22], "ccsdtq": [1, 2, 9], "t2_residual_rhf_t3v": [1, 22], "t_residual_rhf": [1, 22], "t2_residual_uhf_t3v": [1, 22], "t_residual_uhf": [1, 22], "cisd_solv": [1, 22], "rcisd_solv": [1, 22], "ucisd_solv": [1, 22], "ucisd": [1, 22], "amplitudes_to_cisdvec": [1, 22], "cisdvec_to_amplitud": [1, 22], "contract": [1, 3, 6, 11, 12, 13, 14, 21, 22], "from_fcivec": [1, 22], "lindep": [1, 22], "make_diagon": [1, 22], "max_spac": [1, 21, 22], "nstate": [1, 22], "to_fcivec": [1, 22], "trans_rdm1": [1, 22], "coupled_ccsd": 1, "coupledrccsd_solv": [1, 22], "set_coupled_frag": [1, 22], "coupl": [1, 2, 12, 14, 20, 23, 33], "transform_amplitud": [1, 22], "get_amplitude_norm": [1, 22], "project_t2": [1, 22], "project_t2_rspin": [1, 22], "project_t2_uspin": [1, 22], "couple_ccsd_iter": [1, 22], "externally_correct": [1, 22], "dumpsolv": [1, 22], "ebcc": [1, 2, 32], "rebcc_solv": [1, 22], "is_fccsd": [1, 22], "get_nonnull_solver_opt": [1, 22], "construct_wavefunct": [1, 22], "uebcc_solv": [1, 22], "eb_rebcc_solv": [1, 22], "get_coupl": [1, 22], "eb_uebcc_solv": [1, 22], "eb_ebfci_solv": [1, 22], "eb_uebfci_solv": [1, 22], "ext_ccsd": 1, "extrccsd_solv": [1, 22], "extuccsd_solv": [1, 22], "fci": [1, 2, 9, 11, 13, 23, 33, 35], "fci_solv": [1, 22], "ufci_solv": [1, 22], "hamiltonian": [1, 2, 6, 11, 12, 13, 14, 23, 31, 37, 40], "is_ham": [1, 22], "is_uhf_ham": [1, 22], "is_eb_ham": [1, 22], "clusterhamiltonian": [1, 6, 11, 12, 13, 22], "dummyeri": [1, 22], "rclusterhamiltonian": [1, 22], "mo": [1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 16, 20, 21, 22], "nca": [1, 5, 22], "has_screen": [1, 22], "target_space_projector": [1, 22], "get_integr": [1, 22], "get_heff": [1, 22], "get_eris_screen": [1, 22], "get_eris_bar": [1, 22], "get_cderi_bar": [1, 22], "to_pyscf_mf": [1, 22], "get_clus_mf_info": [1, 22], "add_screen": [1, 22], "calc_loc_erpa": [1, 22], "assert_equal_spin_channel": [1, 22], "with_new_clust": [1, 22], "get_dummy_eri_object": [1, 22], "uclusterhamiltonian": [1, 22], "eb_rclusterhamiltonian": [1, 22], "polaritonic_shift": [1, 22], "set_polaritonic_shift": [1, 22], "get_polaritonic_fock_shift": [1, 22], "get_polaritonic_shifted_coupl": [1, 22], "get_eb_dm_polaritonic_shift": [1, 22], "eb_uclusterhamiltonian": [1, 22], "rmp2_solver": [1, 22], "get_ov_eri": [1, 22], "make_t2": [1, 22], "ump2_solv": [1, 22], "clustersolv": [1, 22], "uclustersolv": [1, 22], "tccsd": 1, "trccsd_solver": [1, 22], "check_solver_config": [1, 22], "tool": 1, "plot": [1, 24], "color": [1, 24], "mpl_mol": [1, 24], "plotly_mol": [1, 24], "eo": 1, "parabola": [1, 24], "birch_murnaghan": [1, 24], "fitresult": [1, 24], "e0": [1, 23, 24], "b0": [1, 24], "x0": [1, 24], "v0": [1, 24], "bp": [1, 24], "fit_eo": [1, 24], "fit_from_fil": [1, 24], "cmdline_tool": [1, 24], "import_packag": 1, "requir": [1, 2, 4, 6, 11, 12, 13, 14, 15, 19, 20, 21, 22, 26, 32, 34, 35, 38, 39], "true": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 19, 21, 22, 23, 24, 35, 37, 38, 39], "sourc": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 31], "get_git_hash": 1, "dir": 1, "new_log": 1, "lognam": 1, "fmt": [1, 2, 14, 16], "none": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24], "remove_exist": 1, "get_kconserv": [2, 3], "get_full_arrai": [2, 3], "get_full_array_rhf": [2, 3], "get_full_array_uhf": [2, 3], "get_ovvv": [2, 3], "get_vvvv": [2, 3], "get_block": [2, 3], "pack_ovvv": [2, 3], "pack_vvvv": [2, 3], "contract_dm2_eri": [2, 3], "contract_dm2_eris_rhf": [2, 3], "contract_dm2_eris_uhf": [2, 3], "contract_dm2intermeds_eris_rhf": [2, 3], "contract_dm2intermeds_eris_uhf": [2, 3], "project_ccsd_eri": [2, 3], "kao2gmo_cderi": [2, 3], "postscf_kao2gmo": [2, 3], "postscf_kao2gmo_uhf": [2, 3], "make_ccsd_eri": [2, 3], "make_uccsd_eri": [2, 3], "spin_restrict": [2, 4], "spin_unrestrict": [2, 4], "log": [2, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 19, 20, 21, 22, 41], "base": [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 19, 20, 21, 22, 23, 24, 31, 33, 34, 40], "c_frag": [2, 4, 6, 22, 36], "bno_threshold": [2, 4, 5, 13, 34], "get_numb": [2, 4], "bno_bath": [2, 4], "c_cluster_occ": [2, 4, 6, 11, 12, 13], "c_cluster_vir": [2, 4, 6, 11, 12, 13], "make_bno_coeff": [2, 4], "c_env": [2, 4, 6], "ncluster": [2, 4], "log_histogram": [2, 4], "get_bath": [2, 4], "get_finite_bath_correct": [2, 4], "truncate_bno": [2, 4], "get_active_spac": [2, 4], "bno_bath_uhf": [2, 4], "mp2_bno_bath": [2, 4], "get_eris_or_cderi": [2, 4], "make_delta_dm1": [2, 4], "ump2_bno_bath": [2, 4], "dmet_bath_rhf": [2, 4], "get_cluster_electron": [2, 4], "get_occupied_bath": [2, 4], "get_virtual_bath": [2, 4], "get_environ": [2, 4], "make_dmet_bath": [2, 4], "make_dmet_bath_fast": [2, 4], "use_ref_orbit": [2, 4], "dmet_bath_uhf": [2, 4], "ewdmet_bath_rhf": [2, 4], "full_bath_rhf": [2, 4], "full_bath_uhf": [2, 4], "make_histogram": [2, 4], "make_horizontal_histogram": [2, 4], "transform_mp2_eri": [2, 4], "r2_bath_rhf": [2, 4], "get_r2": [2, 4], "dmet_bath": [2, 4], "ewdmet_bath": [2, 4], "mp2_bath": [2, 4], "r2_bath": [2, 4], "full_bath": [2, 4], "get_coeff": [2, 5], "get_label": [2, 5], "get_atom_indices_symbol": [2, 5], "get_orbital_indices_label": [2, 5], "add_cas_frag": [2, 5], "add_all_atomic_frag": [2, 5, 37, 38], "add_atomic_frag": [2, 5, 34, 35, 38, 39], "add_atomshell_frag": [2, 5], "add_full_system": [2, 5], "add_orbital_frag": [2, 5, 39], "check_orthonorm": [2, 5], "get_atomic_fragment_indic": [2, 5], "get_atom": [2, 5], "get_env_coeff": [2, 5], "get_frag_coeff": [2, 5], "get_orbital_fragment_indic": [2, 5], "inversion_symmetri": [2, 5], "mirror_symmetri": [2, 5], "rotational_symmetri": [2, 5, 35], "search_label": [2, 5], "secondary_frag": [2, 5], "symmetric_orth": [2, 5], "cas_fragmentation_uhf": [2, 5], "log_orbit": [2, 5], "get_default_minao": [2, 5], "n_iao": [2, 5], "check_nelectron": [2, 5], "get_virtual_coeff": [2, 5], "iao_fragmentation_uhf": [2, 5], "get_pao_coeff": [2, 5], "iaopao_fragmentation_uhf": [2, 5], "sao_fragmentation_uhf": [2, 5], "site_fragmentation_uhf": [2, 5], "fragmentation_uhf": [2, 5], "get_corrfunc_unrestrict": [2, 6], "embed": [2, 5, 6, 7, 11, 12, 13, 22, 26, 31, 33, 34, 35, 36, 39, 40, 41], "self": [2, 4, 5, 6, 7, 11, 12, 13, 14, 16, 21, 22, 33, 35], "kdf": [2, 6], "fragmentregist": [2, 6], "get_next_id": [2, 6], "get_next_mpi_rank": [2, 6], "get_next": [2, 6], "get_screened_eris_ful": [2, 6], "get_screened_eris_ccsd": [2, 6], "uembed": [2, 6, 11, 13], "brueckner_rhf": [2, 7], "e_tot_oneshot": [2, 7], "get_dii": [2, 7], "kernel_orig": [2, 7], "brueckner_uhf": [2, 7], "pdmet_rhf": [2, 7], "get_rdm1": [2, 7], "pdmet_uhf": [2, 7], "symmetrygroup": [2, 8], "natom": [2, 8, 17, 35], "dimens": [2, 3, 6, 8, 11, 12, 13, 14, 16, 35, 36], "compare_atom": [2, 8], "get_closest_atom": [2, 8], "add_rot": [2, 8], "set_transl": [2, 8, 35, 38], "clear_transl": [2, 8, 38], "symmetryoper": [2, 8], "xtol": [2, 8], "call_wrapp": [2, 8], "call_kernel": [2, 8], "apply_to_point": [2, 8], "get_atom_reord": [2, 8], "get_ao_reord": [2, 8], "rotate_angular_orbit": [2, 8], "symmetryident": [2, 8], "symmetryinvers": [2, 8], "symmetryreflect": [2, 8], "as_matrix": [2, 8], "symmetryrot": [2, 8], "symmetrytransl": [2, 8], "invers": [2, 6, 8, 11, 12, 13, 21, 22], "inv_lattice_vector": [2, 8], "boundary_phas": [2, 8], "vector_xyz": [2, 8], "inverse_atom_reord": [2, 8], "unit_vector": [2, 8], "angle_between": [2, 8], "natom_uniqu": [2, 8], "get_unique_atom": [2, 8], "primitive_lattice_vector": [2, 8], "pbcndim": [2, 8], "find_subcel": [2, 8], "to_bohr": [2, 8], "get_mesh_tvec": [2, 8], "loop_tvec": [2, 8], "tsymmetric_atom": [2, 8], "reorder_atom": [2, 8], "reorder_atoms2ao": [2, 8], "reorder_ao": [2, 8], "get_tsymmetry_op": [2, 8], "wf": [2, 6, 9, 11, 12, 13, 38], "cisdtq": [2, 9], "hf": [2, 5, 9, 14, 22, 23, 34, 35, 37, 38, 39, 41], "project": [2, 3, 4, 5, 6, 9, 11, 12, 13, 14, 21, 22, 33, 39], "t_to_c": [2, 9], "from_coeff": [2, 9], "norb_act": [2, 9], "nocc_act": [2, 9], "nvir_act": [2, 9], "c_activ": [2, 4, 6, 9, 11, 12, 13], "c_active_occ": [2, 9, 22], "c_active_vir": [2, 9, 22], "coeff": [2, 4, 5, 6, 9, 11, 12, 13, 14, 16, 23], "c_occ": [2, 3, 4, 9, 13], "c_vir": [2, 3, 4, 9, 13], "norb_frozen": [2, 9], "nocc_frozen": [2, 9], "nvir_frozen": [2, 9], "c_frozen": [2, 4, 9], "c_frozen_occ": [2, 9], "c_frozen_vir": [2, 9], "norb_tot": [2, 9], "nocc_tot": [2, 9], "nvir_tot": [2, 9], "c_total": [2, 9], "c_total_occ": [2, 9], "c_total_vir": [2, 9], "basis_transform": [2, 9], "clusterrhf": [2, 9], "get_active_slic": [2, 9], "get_active_indic": [2, 9], "get_frozen_indic": [2, 9], "repr_siz": [2, 9], "clusteruhf": [2, 9], "spatialorbit": [2, 9], "nspin": [2, 9], "coeff_occ": [2, 9], "coeff_vir": [2, 9], "to_spin_orbit": [2, 9], "to_general_orbit": [2, 9], "spinorbit": [2, 9, 10], "from_spatial_orbit": [2, 9], "norba": [2, 9, 10], "norbb": [2, 9, 10], "nocca": [2, 9, 10], "noccb": [2, 9, 10], "nvira": [2, 9, 10], "nvirb": [2, 9, 10], "generalorbit": [2, 9], "from_spin_orbit": [2, 9], "kwarg": [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 19, 20, 21, 22, 23], "fold": [2, 6, 11, 12, 13, 38], "k": [2, 3, 6, 11, 12, 13, 14, 36, 37, 38], "point": [2, 3, 6, 11, 12, 13, 14, 16, 21, 24, 27, 34, 35, 37, 38], "sampl": [2, 6, 11, 12, 13, 14, 38], "mean": [2, 3, 4, 5, 6, 7, 11, 12, 13, 14, 16, 20, 21, 22, 33, 34, 37, 38, 39, 41], "field": [2, 3, 4, 5, 6, 7, 11, 12, 13, 14, 16, 19, 20, 21, 22, 23, 33, 34, 37, 38, 41], "born": [2, 38], "von": [2, 38], "karman": [2, 38], "bvk": 2, "supercel": [2, 3, 6, 8, 11, 12, 13, 38], "see": [2, 6, 11, 12, 13, 14, 18, 21, 22, 35, 41], "also": [2, 6, 11, 12, 13, 14, 21, 22, 33, 35, 41], "class": [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 34, 35, 36, 38], "arrai": [2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 19, 21, 22, 26, 36], "0": [2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 34, 35, 36, 37, 38, 39, 41], "calcul": [2, 3, 4, 6, 7, 10, 11, 12, 13, 14, 16, 20, 21, 22, 23, 32, 34, 35, 36, 38, 39, 40, 41], "thi": [2, 3, 4, 6, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 22, 23, 26, 27, 29, 32, 34, 35, 36, 37, 38, 39, 41], "automat": [2, 5, 6, 8, 11, 12, 13, 14, 22, 32, 34, 38, 39], "attribut": [2, 3, 6, 11, 12, 13, 14, 15, 16, 21, 22, 23, 34], "converg": [2, 6, 11, 12, 13, 14, 16, 21, 35], "It": [2, 14, 22, 33, 37, 41], "overwrit": [2, 4, 6], "method": [2, 3, 5, 6, 7, 11, 12, 13, 14, 22, 33, 34, 35, 38, 39], "call": [2, 14, 15, 22, 26, 32, 34, 35, 37, 38], "its": [2, 14, 21, 33], "more": [2, 14, 16, 20, 21, 35, 38, 39, 41], "effici": [2, 12, 21, 33, 41], "space": [2, 3, 4, 6, 8, 11, 12, 13, 14, 16, 21, 22, 23, 36, 38, 39], "variant": 2, "first": [2, 6, 8, 11, 12, 13, 14, 16, 19, 21, 22, 34, 35, 36], "sinc": [2, 12, 21, 38], "ar": [2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 16, 20, 21, 22, 23, 32, 33, 34, 35, 36, 37, 38, 39, 41], "implement": [2, 7, 13, 14, 20, 21, 22, 33, 35, 37], "support": [2, 5, 14, 16, 33, 38, 41], "inherit": [2, 4, 10, 22], "pyscf": [2, 3, 6, 8, 11, 12, 13, 14, 16, 21, 22, 23, 32, 33, 35, 37, 38, 39, 41], "pbc": [2, 3, 6, 8, 11, 12, 13, 14, 16, 35, 38], "gto": [2, 6, 8, 11, 12, 13, 14, 16, 22, 35, 37, 38, 39, 41], "krhf": [2, 38], "primit": [2, 3, 6, 8, 11, 12, 13, 14, 18, 38], "number": [2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 16, 17, 19, 21, 22, 23, 34, 35, 36, 38, 41], "within": [2, 5, 6, 8, 11, 12, 13, 14, 16, 21, 22, 23, 33, 35, 36, 38, 39], "int": [2, 3, 4, 5, 6, 11, 12, 13, 14, 16, 19, 21, 22, 23], "transform": [2, 3, 4, 8, 11, 14], "matrix": [2, 3, 4, 6, 8, 11, 12, 13, 14, 16, 21, 22, 23, 31, 33, 36, 38, 40], "between": [2, 6, 8, 11, 12, 13, 14, 16, 21, 34, 35, 38, 39], "quantiti": [2, 10, 14, 37], "properti": [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 19, 20, 21, 22, 23, 33, 34, 38, 39, 41], "make_r": [2, 3], "dm": [2, 6, 11, 12, 13, 14, 16, 35, 38], "rhf": [2, 5, 10, 14, 20, 21, 22, 35, 36, 38, 39, 41], "alia": [2, 6, 11, 12, 13, 14, 19, 20, 21, 22], "cdii": [2, 14], "add": [2, 6, 11, 12, 13, 14, 16, 22, 33, 35, 38], "_kei": [2, 14, 22], "with_meta_lowdin": [2, 14], "given": [2, 3, 5, 6, 8, 11, 12, 13, 14, 16, 21, 22], "print": [2, 11, 12, 14, 21, 34, 35, 36, 37, 38, 39, 41], "occup": [2, 4, 6, 11, 12, 13, 14, 38], "coeffici": [2, 3, 4, 5, 6, 7, 11, 12, 13, 14, 16, 20, 21, 22, 36, 38], "mulliken": [2, 6, 11, 12, 13, 14, 38], "popul": [2, 6, 11, 12, 13, 14, 38], "analysi": [2, 6, 11, 12, 13, 14, 38], "diopl": [2, 14], "moment": [2, 12, 14, 16, 21, 23], "fn": [2, 14, 22], "rest": [2, 4, 12, 14, 22], "argument": [2, 5, 6, 11, 12, 13, 14, 16, 19, 22, 34, 35, 37, 38, 39], "return": [2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 16, 19, 21, 22, 23], "itself": [2, 6, 11, 12, 13, 14, 22], "allow": [2, 3, 6, 10, 11, 12, 13, 14, 16, 22, 23, 36, 38, 39], "seri": [2, 14, 22, 26], "function": [2, 6, 8, 10, 11, 12, 13, 14, 15, 16, 19, 21, 22, 23, 24, 28, 31, 33, 34, 37, 39, 40, 41], "execut": [2, 14, 22], "pipe": [2, 14, 22], "gener": [2, 3, 5, 6, 11, 12, 13, 14, 19, 20, 21, 22, 38, 39, 41], "scanner": [2, 14, 22], "pe": [2, 14, 22], "one": [2, 3, 4, 5, 6, 11, 12, 13, 14, 16, 21, 22, 33, 35, 37, 39], "input": [2, 6, 11, 12, 13, 14, 22, 23], "total": [2, 6, 11, 12, 13, 14, 20, 21, 22, 34, 35, 37], "us": [2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 26, 29, 32, 33, 34, 35, 37, 38, 39, 41], "last": [2, 14, 16, 22, 26], "initi": [2, 3, 6, 11, 12, 13, 14, 22, 34, 41], "guess": [2, 3, 14, 22], "new": [2, 3, 6, 7, 11, 12, 13, 14, 16, 21, 22, 32, 34], "all": [2, 6, 8, 10, 11, 12, 13, 14, 16, 19, 20, 21, 22, 23, 32, 34, 35, 36, 38, 39, 41], "paramet": [2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 16, 18, 19, 21, 22, 23, 35], "assign": [2, 14, 21, 22, 41], "etc": [2, 6, 11, 12, 13, 14, 22], "note": [2, 6, 11, 12, 13, 14, 20, 21, 22, 36, 38, 39, 41], "ha": [2, 6, 11, 12, 13, 14, 16, 22, 34, 35, 37, 38, 39, 41], "side": [2, 14, 21, 22], "effect": [2, 6, 11, 12, 13, 14, 16, 21, 22], "mai": [2, 14, 21, 22, 36], "chang": [2, 14, 22, 34, 35], "mani": [2, 4, 14, 22, 41], "underli": [2, 6, 11, 12, 13, 14, 22, 23, 35], "_scf": [2, 3, 14, 22], "with_x2c": [2, 14, 22], "dure": [2, 10, 12, 14, 15, 22], "exampl": [2, 6, 11, 12, 13, 14, 15, 22, 26, 28, 34, 35, 36, 37, 38, 39, 40, 41], "from": [2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 18, 21, 22, 23, 28, 31, 33, 35, 37, 38, 41], "import": [2, 14, 22, 26, 27, 32, 34, 35, 37, 38, 39, 41], "hf_scanner": [2, 14], "mole": [2, 6, 11, 12, 13, 14, 16, 35, 37, 38, 39, 41], "atom": [2, 5, 6, 8, 11, 12, 13, 14, 16, 17, 18, 22, 33, 34, 35, 36, 37, 38, 39, 41], "f": [2, 8, 13, 14, 20, 21, 22, 35, 36, 37, 38, 39], "1": [2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24, 26, 33, 34, 35, 36, 38, 39], "98": [2, 14], "552190448277955": [2, 14], "5": [2, 4, 6, 8, 11, 12, 13, 14, 16, 18, 21, 22, 35, 38], "414750424294368": [2, 14], "fock": [2, 3, 6, 11, 12, 13, 14, 16, 22, 35, 36, 37, 38, 39, 41], "diagon": [2, 3, 4, 6, 11, 12, 13, 14, 16, 21, 22, 23], "occupi": [2, 3, 4, 6, 11, 12, 13, 14, 16, 20, 21, 22, 36, 39], "open": [2, 6, 11, 12, 13, 14, 16, 17, 41], "virtual": [2, 4, 6, 10, 11, 12, 13, 14, 16, 20, 21, 22, 36, 39], "subspac": [2, 3, 6, 11, 12, 13, 14, 16, 39], "separatedli": [2, 14], "without": [2, 4, 6, 11, 12, 13, 14, 22], "check": [2, 3, 5, 6, 10, 11, 12, 13, 14, 21, 22, 39, 41], "whether": [2, 6, 11, 12, 13, 14, 20, 21, 22, 23], "overwritten": [2, 14, 16, 22, 38], "doe": [2, 6, 8, 11, 12, 13, 14, 22, 39, 41], "which": [2, 3, 5, 6, 11, 12, 13, 14, 16, 20, 21, 22, 26, 34, 35, 36, 37, 38, 39, 41], "prefix": [2, 14, 22, 26], "_": [2, 14, 22], "1e": [2, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 21, 22, 23, 34, 37, 38, 39, 41], "09": [2, 14, 17, 22], "auxbasi": [2, 38], "8": [2, 4, 5, 8, 14, 20, 22, 23, 34, 38], "deby": [2, 14], "3": [2, 3, 4, 6, 8, 11, 12, 13, 14, 16, 18, 20, 21, 22, 26, 33, 35, 36, 38, 39, 41], "dipol": [2, 14], "well": [2, 3, 5, 20, 21, 31, 33, 34, 41], "defin": [2, 6, 11, 12, 13, 14, 21, 22, 26, 31, 33, 34, 35, 36, 37, 38, 40, 41], "an": [2, 12, 13, 14, 15, 21, 22, 26, 27, 31, 34, 35, 36, 38, 39], "instanc": [2, 3, 6, 11, 12, 13, 14, 15, 32, 37], "ndarrai": [2, 3, 4, 6, 11, 12, 13, 14, 19, 21], "densiti": [2, 3, 4, 6, 8, 11, 12, 13, 14, 16, 21, 22, 23, 31, 33, 38, 40], "x": [2, 5, 6, 11, 12, 13, 14, 16, 22, 27, 33, 36, 38, 39], "y": [2, 6, 11, 12, 13, 14, 22, 39], "z": [2, 14, 17, 35, 39], "compon": [2, 12, 14, 20, 23], "A": [2, 6, 11, 12, 13, 14, 16, 18, 20, 21, 22, 35, 37], "list": [2, 5, 6, 8, 11, 12, 13, 14, 16, 22, 35], "fals": [2, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 37, 39], "13": [2, 14, 16, 38], "env": [2, 4, 14, 22, 29], "": [2, 6, 11, 12, 13, 14, 16, 22, 23, 34, 36, 38], "eigenvalu": [2, 4, 6, 11, 12, 13, 14, 21, 38], "problem": [2, 4, 6, 14, 26, 33, 35, 36, 38, 41], "hc": [2, 14], "sce": [2, 14], "h1e": [2, 14, 23, 35], "vhf": [2, 6, 11, 12, 13, 14], "electron": [2, 3, 4, 5, 6, 11, 12, 13, 14, 21, 22, 23, 34, 35, 36, 38], "part": [2, 3, 6, 11, 12, 13, 14, 38], "hartre": [2, 6, 11, 12, 13, 14, 35, 37, 38, 39, 41], "potenti": [2, 6, 11, 12, 13, 14, 22, 35, 36], "math": [2, 14], "e": [2, 3, 5, 13, 14, 16, 21, 22, 34, 37, 38, 39, 41], "sum_": [2, 14], "ij": [2, 14, 35, 36], "h_": [2, 14], "gamma_": [2, 14], "ji": [2, 14], "frac": [2, 14], "2": [2, 3, 6, 8, 9, 11, 12, 13, 14, 18, 20, 21, 22, 23, 33, 34, 35, 36, 38, 39], "ijkl": [2, 14, 35], "lk": [2, 14], "langl": [2, 14], "ik": [2, 14], "jl": [2, 14], "rangl": [2, 14], "caus": [2, 14], "scf_summari": [2, 14], "2d": [2, 8, 14, 35], "partic": [2, 14], "coulomb": [2, 6, 11, 12, 13, 14, 21, 22, 36], "5176090667746334": [2, 14], "60917167853723675": [2, 14], "plu": [2, 6, 11, 12, 13, 14, 36], "nuclear": [2, 6, 11, 12, 13, 14], "repulst": [2, 14], "chk": 2, "read": [2, 14, 16, 41], "checkpoint": [2, 14], "file": [2, 6, 11, 12, 13, 14, 16, 32, 33, 34, 36, 41], "basi": [2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 20, 21, 22, 23, 33, 35, 37, 38, 39, 41], "singlet": 2, "hermi": [2, 14], "kpts_band": 2, "band": 2, "arbitrari": [2, 12, 14, 20, 21, 23], "e_n": 2, "psi_n": 2, "s1e": [2, 14], "cycl": [2, 14, 35], "v": [2, 14, 21, 22, 24], "special": [2, 14, 34], "treatment": [2, 14], "level": [2, 6, 11, 12, 13, 14, 20, 22], "shift": [2, 8, 14], "specifi": [2, 6, 11, 12, 13, 14, 16, 20, 23, 32, 35, 38, 39], "two": [2, 3, 6, 8, 11, 12, 13, 14, 16, 20, 21, 22, 35, 37, 38], "pass": [2, 3, 5, 6, 8, 11, 12, 13, 14, 22, 35, 41], "iter": [2, 12, 14, 16, 21, 35], "overlap": [2, 3, 6, 11, 12, 13, 14], "Then": [2, 14], "present": [2, 3, 6, 11, 12, 13, 14, 19, 22, 23, 28, 38, 40], "step": [2, 14, 26, 33, 35, 37], "hold": [2, 6, 14], "intermedi": [2, 3, 10, 14, 16], "error": [2, 6, 11, 12, 13, 14, 16, 21, 22, 35, 39], "vector": [2, 6, 8, 11, 12, 13, 14, 16, 22, 23, 26, 35], "start": [2, 14, 19, 35, 37], "default": [2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 21, 22, 23, 25, 35, 36, 38, 39, 41], "float": [2, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 16, 21, 22, 23, 24], "au": [2, 14], "gradient": [2, 14, 21], "obit": [2, 14], "1d": [2, 8, 14, 17, 22, 31, 38], "fock_ao": [2, 14], "ao": [2, 3, 4, 5, 6, 11, 12, 13, 14, 16, 35, 38], "represent": [2, 3, 4, 6, 11, 12, 13, 14, 16, 21, 22], "num_occ": [2, 14], "num_vir": [2, 14], "minao": [2, 5, 6, 11, 12, 13, 14, 39], "comput": [2, 6, 11, 12, 13, 14, 21, 22, 31, 33, 34, 35, 37, 40], "j": [2, 3, 4, 14, 33, 35, 36], "when": [2, 8, 14, 21, 32, 39, 41], "matric": [2, 6, 11, 12, 13, 14, 16, 20, 21, 22, 23, 31, 33], "evalu": [2, 6, 11, 12, 13, 14, 21], "j_": 2, "pq": [2, 14, 22], "r": [2, 3, 4, 14, 21, 22, 23, 36], "where": [2, 6, 11, 12, 13, 14, 16, 22, 26, 34, 35, 38, 39, 41], "p": [2, 6, 7, 8, 10, 11, 12, 13, 14, 22, 23], "q": [2, 14, 21, 22, 23, 38], "otherwis": [2, 14, 23], "with_j": [2, 14], "with_k": [2, 14], "exchang": [2, 6, 11, 12, 13, 14, 20, 21, 36], "follow": [2, 6, 11, 12, 13, 14, 22, 26, 27, 29, 32, 33, 34, 35, 37, 38, 39, 40], "get_jk_": 2, "particular": [2, 21, 39], "k_": [2, 20], "pr": 2, "sq": 2, "incor": 2, "version": [2, 17, 20, 26, 34], "onli": [2, 3, 6, 10, 11, 12, 13, 14, 16, 19, 20, 21, 22, 23, 35, 38, 39, 41], "current": [2, 6, 10, 11, 12, 13, 14, 16, 22, 34, 38, 41], "alwai": [2, 21, 41], "integr": [2, 3, 6, 10, 11, 12, 13, 14, 21, 22, 33, 35, 36], "unlik": 2, "rk": [2, 14, 37], "label": [2, 4, 5, 8, 9, 14, 16, 39], "each": [2, 5, 6, 8, 11, 12, 13, 14, 16, 21, 22, 33, 35, 36, 41], "numpi": [2, 6, 11, 12, 13, 14, 19, 22, 32, 35, 38], "10": [2, 4, 6, 10, 11, 12, 13, 14, 16, 17, 18, 20, 21, 35, 38], "grid": [2, 14, 21, 22], "real": [2, 3, 8, 14, 36], "superposit": [2, 14], "averag": [2, 6, 11, 12, 13, 14], "huckel": [2, 14], "doi": [2, 4, 10, 11, 14, 16, 17, 18, 20, 21], "1021": [2, 14, 16, 17], "ac": [2, 14, 16, 17], "jctc": [2, 14, 16], "8b01089": [2, 14], "ano": [2, 14], "94758917": [2, 14], "09227308": [2, 14], "fftdf": 2, "up": [2, 12, 21, 22, 23, 33, 35], "scheme": [2, 37, 38], "planewav": [2, 14], "fit": [2, 3, 6, 11, 12, 13, 21, 24, 38], "fast": [2, 4], "fourier": [2, 3], "aftdf": 2, "analyt": [2, 14, 21], "gaussian": [2, 3, 6, 14], "mdf": 2, "mix": [2, 6, 11, 12, 13], "rang": [2, 6, 11, 12, 13, 14, 16, 21, 35, 38], "separ": [2, 6, 11, 12, 13, 14, 20, 21, 23, 36, 41], "jk": 2, "builder": 2, "rsdf": 2, "dm0": [2, 13, 14], "main": [2, 14, 21, 22, 38], "driver": [2, 3, 14, 22], "If": [2, 3, 4, 5, 6, 8, 11, 12, 13, 14, 16, 20, 21, 22, 38], "dm_guess": [2, 14], "ey": [2, 14, 35], "5521904482821": [2, 14], "552190448282104": [2, 14], "One": [2, 6, 11, 12, 13, 14, 22, 35, 38], "particl": [2, 4, 6, 11, 12, 13, 14, 20, 22], "column": [2, 14], "4d": [2, 14], "50": [2, 4, 14, 22], "pre_orth_method": [2, 14], "meta": [2, 14], "lowdin": [2, 6, 11, 12, 13, 14, 38], "In": [2, 10, 12, 13, 14, 16, 20, 22, 34, 35, 37, 38, 39, 40], "three": [2, 3, 6, 11, 12, 13, 14, 21, 35, 39, 41], "valenc": [2, 14], "rydberg": [2, 14], "orthogon": [2, 13, 14, 22, 23, 33, 35, 39], "carreid": [2, 14], "out": [2, 3, 14, 22, 26, 34, 35, 37, 38, 39, 41], "subset": [2, 3, 6, 11, 12, 13, 14], "rohf": [2, 14], "logger": [2, 5, 6, 8, 11, 12, 13, 14], "str": [2, 5, 6, 11, 12, 13, 14, 16, 21, 22], "pre": [2, 8, 14], "local": [2, 6, 11, 12, 13, 14, 21, 23, 26, 27, 29, 38, 39], "To": [2, 14, 21, 23, 26, 29, 32, 34, 36, 37, 39, 41], "obtain": [2, 10, 12, 14, 16, 21, 22, 33, 34, 35, 36, 38, 41], "unoccupi": [2, 14], "shell": [2, 5, 8, 14, 32], "fraction": [2, 14], "charg": [2, 14, 38], "nparrai": [2, 14], "m_": [2, 14], "d_": [2, 14], "s_": [2, 14], "delta_i": [2, 14], "sum_j": [2, 14], "creat": [2, 5, 6, 11, 12, 13, 14, 26, 34], "soscf": [2, 14], "hook": [2, 14, 21, 22], "after": [2, 6, 11, 12, 13, 14, 22, 32], "bodi": [2, 3, 11, 14, 18, 22, 35, 38], "intern": [2, 8, 14, 22], "variabl": [2, 14, 22, 26, 32, 34, 37, 38], "expos": [2, 14, 22], "through": [2, 5, 14, 22], "dictionari": [2, 6, 11, 12, 13, 14, 19, 22, 23], "befor": [2, 14, 22, 35, 38], "remov": [2, 6, 10, 11, 12, 13, 14, 16, 38], "decor": [2, 6, 7, 11, 12, 13, 14], "relev": [2, 12, 14, 37], "associ": [2, 6, 11, 12, 13, 14], "old": [2, 14, 22], "spin": [2, 3, 4, 6, 10, 11, 12, 13, 14, 20, 21, 22, 23, 34, 36, 38], "squar": [2, 6, 11, 12, 13, 14], "determin": [2, 4, 6, 8, 11, 12, 13, 14, 20, 22, 39], "extern": [2, 13, 14, 22, 33, 36, 39], "return_statu": [2, 14], "rhf_stabil": [2, 14], "bool": [2, 3, 6, 8, 11, 12, 13, 14, 16, 21, 22], "optim": [2, 14, 22, 26, 35, 38], "includ": [2, 5, 6, 11, 12, 13, 14, 21, 22, 35, 38], "uhf": [2, 3, 5, 10, 13, 14, 22, 34], "complex": [2, 14], "stable_i": [2, 14], "stable_": [2, 14], "stabl": [2, 14], "condit": [2, 6, 8, 11, 12, 13, 14, 16, 17, 34], "correspond": [2, 5, 6, 11, 12, 13, 14, 21, 22, 34, 35, 36, 40], "second": [2, 6, 8, 11, 12, 13, 14, 16, 21, 33, 35, 36], "els": [2, 3, 6, 11, 12, 13, 14], "anoth": [2, 6, 11, 12, 13, 14, 22], "boolean": [2, 14, 22], "indic": [2, 3, 5, 6, 8, 10, 11, 12, 13, 14, 22, 34, 39], "statu": [2, 14], "unstabl": [2, 14], "_io": [2, 14, 22], "textiowrapp": [2, 14, 22], "mode": [2, 14, 22, 23], "w": [2, 14, 21, 22], "encod": [2, 14, 22], "utf": [2, 14, 22], "ghf": [2, 10, 14], "gk": [2, 14], "xc": [2, 12, 14, 21, 37], "convers": [2, 14], "wave": [2, 10, 13, 14, 22, 31, 33, 39, 40], "same": [2, 6, 11, 12, 13, 14, 19, 20, 21, 22, 38, 41], "them": [2, 14], "rok": [2, 14], "uk": [2, 14], "chkfile": [2, 14], "cl": [2, 14, 18, 22], "mo1": [2, 14], "mo2": [2, 14], "occ1": [2, 14], "occ2": [2, 14], "ovlp": [2, 3, 4, 5, 11, 14, 16], "differ": [2, 6, 11, 12, 13, 14, 16, 21, 33, 34, 35, 36, 37, 38, 39, 40], "product": [2, 14, 21], "singl": [2, 5, 9, 10, 11, 12, 13, 14, 16, 19, 22, 23, 33, 34, 35], "molecular": [2, 6, 11, 12, 13, 14, 16, 17, 21], "12": [2, 12, 14, 21, 22, 23, 33, 37, 38, 39], "psi_a": [2, 14], "psi_b": [2, 14], "mathrm": [2, 14, 35], "det": [2, 14, 22], "mathbf": [2, 14], "u": [2, 12, 14, 18, 21, 22, 23, 35], "dagger": [2, 14, 22], "prod": [2, 14], "limits_": [2, 14], "limit": [2, 14, 21], "2n": [2, 14], "lambda_": [2, 14], "ii": [2, 14], "lambda": [2, 13, 14], "unitari": [2, 14], "decomposit": [2, 14, 21], "svd": [2, 14], "o": [2, 6, 11, 12, 13, 14, 17, 18, 21, 37, 38, 39, 41], "molecualr": [2, 14], "x_a": [2, 14], "x_b": [2, 14], "thei": [2, 6, 11, 12, 13, 14, 21, 38, 39, 41], "asymmetr": [2, 14, 21], "dm_kpt": 2, "unrestrict": [2, 3, 4, 5, 6, 9, 11, 12, 13, 14, 20, 22, 36, 38], "breaksym": [2, 14], "term": [2, 6, 11, 12, 13, 14, 21, 33, 35, 39], "minim": [2, 14, 39], "alpha": [2, 3, 4, 6, 10, 11, 12, 13, 14, 20, 21, 36], "beta": [2, 3, 4, 6, 10, 11, 12, 13, 14, 36], "mf1": [2, 14], "ccpvdz": [2, 14], "mf2": [2, 14], "4": [2, 6, 11, 12, 13, 14, 18, 20, 21, 22, 35, 38, 39], "intor_cross": [2, 14], "int1e_ovlp_sph": [2, 14], "adm": [2, 14], "19": [2, 14, 20, 21, 35, 38], "tupl": [2, 3, 6, 8, 11, 12, 13, 14, 19, 20, 21, 22], "s_z": [2, 6, 11, 12, 13, 14], "sum_i": [2, 14], "There": [2, 14, 38, 39], "possibl": [2, 14, 20, 34, 37, 38, 41], "qp": [2, 14], "n_": [2, 14, 21], "sum": [2, 6, 11, 12, 13, 14, 21], "neq": [2, 14], "n": [2, 3, 4, 5, 6, 11, 12, 13, 14, 16, 17, 20, 21, 38, 41], "As": [2, 14, 33, 34, 37], "similarli": [2, 14, 26], "For": [2, 5, 6, 11, 12, 13, 14, 20, 21, 35, 36, 38, 39, 41], "2s_": [2, 14], "z1": [2, 14], "z2": [2, 14], "expect": [2, 6, 11, 12, 13, 14, 33, 35], "75": [2, 14], "623975516256706": [2, 14], "7f": [2, 14], "7570150": [2, 14], "0070027": [2, 14], "uhf_stabl": [2, 14], "kmo_energi": 2, "kmo_coeff": 2, "kmo_occ": 2, "sort": 2, "msg": 2, "err": 2, "error_tol": 2, "001": [2, 22], "warn_tol": [2, 13], "06": [2, 4, 6, 7, 8, 11, 12, 13, 21, 22], "imag_tol": 2, "hcore": [2, 6, 11, 12, 13, 36], "08": [2, 5, 6, 7, 8, 11, 12, 13, 14, 16], "kmesh": [2, 38], "translat": [2, 6, 8, 11, 12, 13, 14, 35, 38], "construct": [2, 4, 12, 16, 20, 21, 22, 23, 36, 39, 41], "super": 2, "gamma": [2, 3, 14, 38], "ident": [2, 13, 41], "adapt": [2, 20, 21], "order": [2, 4, 5, 6, 8, 11, 12, 13, 14, 20, 21, 23, 24, 33, 35, 36, 39, 41], "k2gamma": 2, "ak": 2, "phase": [2, 8, 20], "ag": 2, "inplac": [2, 9, 10, 11, 14, 16, 22], "obj": [2, 10, 15, 19], "dtint": 2, "maxdim": 2, "data": [2, 6, 9, 10, 11, 12, 13, 14, 16, 19, 24], "commun": [2, 6, 9, 10, 11, 12, 13, 19], "tol": [2, 4, 5, 6, 11, 12, 13, 16, 21, 23], "maxblock": 2, "100": [2, 6, 7, 11, 12, 13, 14, 16, 21, 22, 23], "perform": [2, 3, 6, 8, 11, 12, 13, 14, 21, 23, 31, 32, 33, 34, 35, 38, 39, 40, 41], "rectangular": 2, "offdiagon": 2, "block": [2, 3, 14, 20, 22, 36], "recurs": [2, 6, 11, 12, 13], "row": [2, 8, 14], "singular": [2, 21], "below": [2, 22, 34, 37], "toler": [2, 4, 6, 8, 11, 12, 13, 22, 35], "consid": [2, 6, 8, 11, 12, 13, 14, 21, 35], "uncoupl": 2, "maximum": [2, 6, 11, 12, 13, 21, 23], "sv": 2, "some": [2, 14, 21, 23, 36, 41], "ignore_non": 2, "abstract": [2, 5, 14, 21], "dataclass": 2, "should": [2, 4, 5, 6, 11, 12, 13, 14, 16, 20, 21, 22, 26, 34, 38, 39, 41], "can": [2, 3, 4, 5, 6, 11, 12, 13, 14, 15, 21, 22, 26, 27, 29, 32, 33, 34, 35, 36, 37, 38, 39, 41], "ani": [2, 7, 13, 19, 21, 22, 39, 41], "provid": [2, 6, 11, 12, 13, 14, 21, 34, 35, 37, 38, 41], "like": [2, 6, 11, 12, 13, 14, 22, 23, 37], "attr": [2, 6, 11, 12, 13, 22, 23, 36], "access": [2, 6, 11, 12, 13, 14, 15, 22, 23], "definit": [2, 6, 11, 12, 13, 22, 23, 33, 38], "deepcopi": [2, 6, 11, 12, 13, 14, 22, 23], "classmethod": [2, 6, 9, 10, 11, 12, 13, 14, 16, 19, 22, 23], "static": [2, 6, 9, 10, 11, 12, 13, 14, 21, 22, 23], "minstep": 2, "maxstep": 2, "similar": [2, 13, 14, 16], "prang": 2, "slice": 2, "instead": [2, 3, 6, 11, 12, 13, 21, 34], "stop": [2, 14, 19], "blocksiz": [2, 3], "blk": 2, "messag": [2, 6, 11, 12, 13, 22, 41], "mark": [2, 14], "warn": [2, 6, 11, 12, 13, 16, 20, 21], "being": [2, 6, 11, 12, 13, 38], "maxsize_or_user_funct": 2, "16": [2, 14, 34, 35, 37, 38, 39, 41], "lru": 2, "mutabl": 2, "hit": 2, "been": [2, 6, 11, 12, 13, 16, 22, 38, 41], "modifi": [2, 6, 11, 12, 13, 16, 32], "user": [2, 29, 34, 36, 38, 39], "script": [2, 41], "futur": [2, 21, 27], "avoid": [2, 3, 14, 38, 41], "deep": 2, "http": [2, 4, 10, 14, 16, 17, 20, 21, 32], "stackoverflow": 2, "com": [2, 3, 11, 12, 13, 20, 32], "question": [2, 28, 39], "54909357": 2, "func": [2, 14, 16], "doc": [2, 24], "string": [2, 5, 14], "def": [2, 14], "equival": [2, 8, 11, 38], "__doc__": 2, "multi_dot": 2, "variad": 2, "dim": [2, 14], "include_diagon": 2, "lower": [2, 14, 21], "triangular": 2, "multidimension": 2, "subscript": 2, "operand": 2, "ignor": [2, 4, 6, 11, 12, 13, 14], "improv": [2, 6, 11, 12, 13, 38, 39], "array_flat": 2, "decompress": 2, "flatten": 2, "accord": [2, 6, 11, 12, 13], "permut": 2, "sign": 2, "except": [2, 6, 11, 12, 13, 14, 21, 39, 41], "notimplementederror": 2, "tb": [2, 11, 12, 21], "__traceback__": [2, 11, 12, 21], "runtimeerror": 2, "attributeerror": 2, "rais": [2, 6, 11, 12, 13, 19], "necessari": [2, 4, 39, 41], "show_zero": 2, "nbyte": 2, "6": [2, 4, 6, 8, 11, 12, 13, 14, 18, 20, 21, 22, 35, 38, 39, 41], "2f": 2, "perf_count": 2, "counter": 2, "benchmark": 2, "mintim": 2, "time": [2, 12, 14, 20], "statement": 2, "info": [2, 8], "b": [2, 3, 6, 11, 12, 13, 14, 16, 20, 21, 23, 35, 38], "classnam": 2, "funcnam": 2, "val": 2, "temporari": [2, 14], "linelength": 2, "sep": 2, "newlin": 2, "break": 2, "long": [2, 14, 39], "line": [2, 14, 26, 27, 34, 35, 37, 38, 39, 41], "axi": [2, 5, 6, 8, 11, 12, 13, 14, 35], "1000000000": [2, 22], "cond": 2, "seq": 2, "yield": [2, 6, 11, 12, 13, 41], "equal": [2, 14, 36, 41], "even": [2, 14, 21], "swap": [2, 13], "odd": 2, "low": [2, 13, 21], "high": [2, 13, 14], "event": 2, "interv": [2, 14], "record": 2, "deem": 2, "appropri": [2, 12, 20, 21, 39], "place": [2, 6, 11, 12, 13, 14, 34], "exclud": [2, 14], "exlud": 2, "show_level": 2, "show_mpi_rank": 2, "prefix_sep": 2, "indent": 2, "indent_char": 2, "indent_width": 2, "formatt": 2, "text": 2, "preparatori": 2, "carri": [2, 26, 34], "logrecord": 2, "getmessag": 2, "inform": [2, 11, 12, 22, 35], "append": 2, "localtim": 2, "tm_year": 2, "tm_mon": 2, "tm_mdai": 2, "tm_hour": 2, "tm_min": 2, "tm_sec": 2, "tm_wdai": 2, "tm_ydai": 2, "tm_isdst": 2, "epoch": 2, "express": [2, 6, 10, 11, 12, 13, 14, 20, 21], "03d": 2, "d": [2, 8, 13, 14, 20, 21, 34, 35, 36, 41], "ei": 2, "just": [2, 4, 12, 14, 21, 35], "traceback": 2, "print_except": 2, "stack_info": 2, "extens": [2, 34], "stack": [2, 6, 11, 12, 13], "print_stack": 2, "trail": 2, "datefmt": 2, "creation": [2, 29, 34], "want": [2, 14, 36], "make": [2, 5, 6, 11, 12, 13, 14, 16, 22, 26, 32, 33], "overridden": 2, "specif": [2, 5, 6, 8, 13, 20, 21, 22, 23, 26, 37, 39], "basic": [2, 21, 31], "behaviour": [2, 21], "strftime": 2, "iso8601": 2, "rfc": 2, "3339": 2, "configur": [2, 27, 33, 35], "By": [2, 14, 39], "signatur": 2, "gmtime": 2, "you": [2, 14], "shown": [2, 26, 34, 35, 37], "gmt": 2, "stream": 2, "streamhandl": 2, "handler": 2, "indentedformatt": 2, "thread": [2, 22, 41], "lock": [2, 39], "tidi": 2, "resourc": 2, "map": [2, 14, 39], "_handler": 2, "lookup": 2, "subclass": [2, 6, 11, 12, 13, 21], "ensur": [2, 14, 21, 26, 27, 29, 32], "serial": [2, 14, 41], "written": [2, 14], "how": [2, 4, 14, 21, 40, 41], "do": [2, 6, 11, 12, 13, 14, 20, 21, 34, 39, 41], "output": [2, 14, 23, 34, 35, 37, 38, 39, 41], "loggabl": 2, "consult": 2, "veto": 2, "drop": [2, 35], "zero": [2, 3, 14, 20], "non": [2, 6, 11, 12, 13, 14, 21], "callabl": [2, 15, 22], "condition": 2, "emiss": 2, "depend": [2, 6, 11, 12, 13, 14, 16, 21, 32], "have": [2, 6, 11, 12, 13, 14, 20, 21, 22, 23, 35, 38, 39, 41], "ad": [2, 6, 11, 12, 13, 16, 31, 32, 34, 35, 38], "wrap": 2, "actual": [2, 21], "acquisit": 2, "occur": 2, "encount": 2, "raiseexcept": 2, "silent": 2, "what": [2, 21], "mostli": 2, "system": [2, 3, 5, 6, 11, 12, 13, 14, 16, 23, 33, 34, 35, 36, 38, 39, 41], "most": [2, 6, 11, 12, 13, 14, 21], "care": [2, 14], "about": [2, 11], "interest": [2, 6, 11, 12, 13, 34], "applic": [2, 16, 22], "could": [2, 11, 12], "howev": [2, 14, 20, 28], "custom": [2, 37, 38, 39], "wish": [2, 14], "wa": [2, 22, 36], "process": [2, 8, 19, 33, 41], "must": [2, 6, 7, 11, 12, 13, 21, 22], "wasn": 2, "t": [2, 6, 11, 12, 13, 14, 21, 22, 23, 35], "filenam": [2, 6, 11, 12, 13, 14, 16, 24], "add_mpi_rank": 2, "delai": 2, "filehandl": 2, "becaus": 2, "constructor": [2, 5], "superclass": 2, "ext": 2, "txt": [2, 38], "four": [2, 14], "infov": 2, "debugv": 2, "timingv": 2, "indentlevel": 2, "root": [2, 19], "setindentlevel": 2, "changeindentlevel": 2, "nk": [3, 6, 14], "momentum": [3, 14], "conserv": 3, "l": [3, 14, 36], "kconserv": 3, "satifi": 3, "2npi": 3, "form": [3, 6, 11, 12, 13, 21], "phi": 3, "unless": [3, 6, 11, 12, 13, 14, 41], "satisfi": 3, "abov": [3, 6, 11, 12, 13, 21, 22, 35], "eri": [3, 4, 6, 11, 12, 13, 14, 20, 22, 23, 35, 36], "dens": 3, "_chemisteri": [3, 4], "ovvv": 3, "vvvv": 3, "dm2": [3, 6, 11, 12, 13, 16, 35], "_chemistseri": [3, 6, 11, 12, 13, 22], "ndarri": 3, "e2": [3, 11, 12], "destroy_dm2": 3, "restrict": [3, 4, 5, 6, 9, 11, 12, 13, 14, 20, 35, 38, 41], "check_subspac": 3, "span": [3, 13, 39], "Not": [3, 4, 41], "author": [3, 11, 12, 13, 20], "max": [3, 13, 14, 33, 38], "nusspickel": [3, 13, 33, 38], "email": [3, 11, 12, 13, 20], "gmail": [3, 11, 12, 13, 20], "blksize": [3, 6, 11, 12, 13, 14, 22], "tril_kij": 3, "primtiv": 3, "ka": 3, "c1_": 3, "ra": [3, 12], "c2_": 3, "ri": [3, 21], "both": [3, 4, 5, 6, 11, 12, 13, 14, 20, 21, 22, 34, 39], "c1": [3, 10, 13, 16, 22], "c2": [3, 10, 13, 22], "final": [3, 20, 22, 33, 34, 35], "center": [3, 5, 6, 8, 11, 12, 13, 14, 16, 18], "pair": [3, 6, 11, 12, 13, 20], "c": [3, 6, 8, 11, 12, 13, 14, 15, 17, 18, 22], "python": [3, 15, 29, 31, 32, 33, 35, 41], "compil": [3, 26, 32], "librari": [3, 14, 15, 26, 29, 41], "so": [3, 6, 11, 12, 13, 14, 16, 20, 21, 34, 41], "cderi_mo": 3, "cderi_mo_neg": 3, "neg": [3, 14], "3d": [3, 8, 14, 39], "postscf": [3, 6, 11, 12, 13], "e_hf": 3, "post": [3, 6, 8, 11, 12, 13, 22], "cc": [3, 14, 17, 22, 26, 37, 38, 39, 41], "control": [3, 14], "rccsd": [3, 6, 11, 12, 13], "dfccsd": [3, 6, 11, 12, 13], "activ": [3, 4, 6, 12, 13, 22, 33], "respect": [3, 6, 11, 12, 13, 20, 32, 36], "expens": [3, 20, 21], "smaller": [3, 6, 14, 41], "exist": [3, 12, 14, 22], "ump2": 3, "repuls": [3, 6, 11, 12, 13, 14], "precondit": 3, "threshold": [4, 6, 11, 14, 21, 38, 39, 41], "bno_occup": 4, "electron_tot": 4, "occtyp": 4, "c_buffer": 4, "natur": [4, 6, 33, 38, 39], "n_bno": 4, "split": [4, 22, 35], "NO": 4, "project_dmet_ord": 4, "project_dmet_mod": 4, "project_dmet": 4, "actspac": 4, "t2": [4, 10, 13, 14, 22], "delta": [4, 6, 11, 12, 13, 21], "routin": [4, 11, 12], "c_bno": 4, "dmet_threshold": [4, 6, 13, 37], "addit": [4, 5, 6, 11, 12, 13, 14, 16, 21, 28, 31, 33, 36], "dm1": [4, 6, 7, 11, 12, 13, 14, 16, 22, 23, 35, 38], "c_ref": [4, 6, 11, 12, 13], "nbath": 4, "reftol": 4, "environ": [4, 5, 14, 32, 33, 36], "complet": [4, 6, 11, 12, 13, 14, 39], "refer": [4, 6, 11, 12, 13, 14, 22, 35, 37, 38, 39, 41], "todo": [4, 6, 10, 11, 12, 13, 16, 19, 22], "miss": 4, "take": [4, 12, 14, 16], "largest": [4, 6, 11, 12, 13, 14], "over": [4, 6, 11, 12, 13, 19, 21, 38, 41], "combin": [4, 19, 22, 34, 39, 41], "reduc": [4, 6, 11, 12, 13, 14, 19, 21, 33], "previou": [4, 16, 34, 37], "eigendecomposit": 4, "c_bath": 4, "c_occenv": 4, "occ": [4, 6, 9, 11, 12, 13, 14, 16, 23], "c_virenv": 4, "vir": [4, 6, 11, 12, 13, 16], "ref": [4, 14, 34, 35, 37, 38], "chem": [4, 14, 33, 35], "phy": [4, 33, 35, 38], "151": 4, "064108": 4, "2019": 4, "org": [4, 10, 11, 14, 16, 17, 20, 21], "1063": [4, 10], "5108818": 4, "maintain": 4, "max_ord": 4, "20": [4, 14, 18, 22, 35, 36], "bin": [4, 27], "binwidth": 4, "height": 4, "fill": [4, 34, 35], "show_numb": 4, "invertx": 4, "rstrip": 4, "maxbarlength": 4, "kind": [4, 6, 11, 12, 13], "obsolet": 4, "transform_eri": 4, "ang": [4, 5, 6, 8, 11, 12, 13, 14], "emb": [5, 6, 7, 11, 12, 13, 36, 37, 38, 39, 41], "add_symmetr": 5, "state": [5, 12, 20, 22, 24, 31, 39], "integ": [5, 6, 11, 12, 13, 14, 16, 21, 22, 35], "symbol": [5, 6, 8, 11, 12, 13, 14, 25, 39], "degen_tol": 5, "contain": [5, 6, 8, 11, 12, 13, 14, 16, 22, 34, 35, 36, 39], "spatial": [5, 6, 11, 12, 13, 16, 20, 33], "keyword": [5, 6, 11, 12, 13, 16, 35, 38], "orbital_filt": [5, 6, 11, 12, 13, 39], "solv": [5, 12, 13, 20, 21, 33, 35, 36, 38, 41], "chosen": [5, 38, 39], "atom_filt": 5, "mo_nam": 5, "07": [5, 22], "id": [5, 6, 14, 22, 36], "addition": [5, 35, 39], "2p": [5, 14, 39], "bno_threshold_factor": 5, "15": [5, 14, 38], "np": [5, 6, 11, 12, 13, 14, 21, 35, 38, 41], "orthonorm": [5, 6, 11, 12, 13], "quantum": [5, 6, 7, 11, 12, 13, 14, 31, 33, 34, 35, 38, 39, 41], "ncol": 5, "auto": [5, 6, 11, 12, 13, 14, 22, 39], "add_virtu": 5, "intrins": [5, 33, 38, 39], "c_iao": 5, "iao_label": 5, "nl": [5, 14], "length": [5, 6, 8, 11, 12, 13, 14, 17, 20, 22, 36], "niao": 5, "pao": [5, 6, 11, 12, 13, 33, 38, 39], "iao_coeff": 5, "dm2_with_dm1": [6, 11, 12, 13], "use_symmetri": [6, 11, 12, 13], "projector": [6, 10, 11, 12, 13, 21, 22, 39], "onto": [6, 11, 12, 13, 22, 39], "correl": [6, 11, 12, 13, 14, 16, 20, 21, 22, 33, 35, 38], "sz": [6, 11, 12, 13], "case": [6, 11, 12, 13, 14, 16, 21, 22, 34, 35, 38], "small": [6, 11, 12, 13, 38], "corr": [6, 11, 12, 13], "dict": [6, 11, 12, 13, 14, 22, 36, 38, 39, 41], "union": [6, 11, 12, 13, 22, 39], "nonetyp": [6, 11, 12, 13, 22], "factori": [6, 11, 12, 13, 21, 22], "fid": [6, 11, 12, 13], "sym_par": [6, 11, 12, 13], "sym_op": [6, 11, 12, 13], "mpi_rank": [6, 11, 12, 13, 19], "is_envelop": [6, 11, 12, 13], "is_secfrag": [6, 11, 12, 13], "bath_parent_fragment_id": [6, 11, 12, 13], "wavefunct": [6, 9, 10, 11, 12, 13], "pwf": [6, 11, 12, 13], "add_dot": [6, 11, 12, 13], "trim": [6, 11, 12, 13], "whenev": [6, 11, 12, 13, 14], "uniqu": [6, 11, 12, 13, 39, 41], "need": [6, 11, 12, 13, 14, 16, 21, 22, 26, 32, 35, 37, 38, 39], "frag": [6, 11, 12, 13, 36], "reset_bath": [6, 11, 12, 13], "reset_clust": [6, 11, 12, 13], "reset_eri": [6, 11, 12, 13], "reset_inact": [6, 11, 12, 13], "c_proj": [6, 11, 12, 13], "amplitud": [6, 7, 11, 12, 13, 14, 16, 22], "cost": [6, 11, 12, 13, 21, 38], "rdm": [6, 11, 12, 13, 23], "eigval": [6, 11, 12, 13], "sign_convent": [6, 11, 12, 13], "move": [6, 11, 12, 13], "mo_canon": [6, 11, 12, 13], "rot": [6, 11, 12, 13], "rotat": [6, 8, 11, 12, 13, 14, 21, 35], "norm": [6, 11, 12, 13, 14, 35], "0001": [6, 11, 12, 13], "fulli": [6, 11, 12, 13, 38], "along": [6, 11, 12, 13, 14, 23, 35], "avail": [6, 11, 12, 13, 14, 33], "geometri": [6, 11, 12, 13, 14], "tvec": [6, 8, 11, 12, 13], "symtol": [6, 11, 12, 13], "repres": [6, 8, 11, 12, 13, 14, 15, 22, 33, 36], "a0": [6, 8, 11, 12, 13], "a1": [6, 8, 11, 12, 13, 16], "a2": [6, 8, 11, 12, 13, 16], "lattic": [6, 8, 11, 12, 13, 14, 16, 18, 31, 33, 34, 35, 39], "relat": [6, 11, 12, 13, 21, 22, 35], "absolut": [6, 11, 12, 13, 14, 22, 26], "These": [6, 10, 11, 12, 13, 32, 35], "maxgen": [6, 11, 12, 13], "tree": [6, 11, 12, 13], "children": [6, 11, 12, 13], "ax": [6, 11, 12, 13, 14, 35], "symtre": [6, 11, 12, 13], "include_self": [6, 11, 12, 13], "approxim": [6, 11, 12, 13, 20, 21, 22], "h1e_eff": [6, 11, 12, 13], "part_cumul": [6, 11, 12, 13], "approx_cumul": [6, 10, 11, 12, 13], "whole": [6, 11, 12, 13], "summat": [6, 11, 12, 13, 14, 38], "possibli": [6, 11, 12, 13], "cumul": [6, 11, 12, 13], "partit": [6, 11, 12, 13, 14, 22, 35], "done": [6, 10, 11, 12, 13, 26, 27, 34, 35, 41], "literatur": [6, 11, 12, 13], "recommend": [6, 11, 12, 13, 14], "agreement": [6, 11, 12, 13], "e_dmet": [6, 11, 12, 13, 35], "rmax": [6, 11, 12, 13, 16], "nimag": [6, 8, 11, 12, 13, 16, 35, 38], "counterposis": [6, 11, 12, 13, 16], "test": [6, 11, 12, 13, 16, 21, 31, 41], "period": [6, 8, 11, 12, 13, 14, 16, 35, 38], "far": [6, 11, 12, 13, 16], "ghost": [6, 11, 12, 13, 16], "correct": [6, 11, 12, 13, 14, 16, 21, 22], "neighbor": [6, 11, 12, 13, 16, 35], "boundari": [6, 8, 11, 12, 13, 14, 16, 17, 35], "either": [6, 11, 12, 13, 14, 16, 39], "angstrom": [6, 11, 12, 13, 14, 16], "bohr": [6, 8, 11, 12, 13, 14, 16], "mol_cp": [6, 11, 12, 13, 16], "gridsiz": [6, 11, 12, 13, 16], "cube": [6, 11, 12, 13, 16], "05": [6, 8, 11, 12, 13, 22], "bathtyp": 6, "larger": [6, 21], "than": [6, 14, 20, 21, 35, 38, 41], "truncat": [6, 14], "r2": [6, 14], "cutoff": [6, 14], "origin": [6, 7, 8, 14, 17, 21, 35, 38], "diverg": [6, 11, 12, 13], "exact": [6, 11, 12, 13, 14, 21, 23, 39], "exxdiv": [6, 11, 12, 13], "e_exxdiv": [6, 11, 12, 13], "per": [6, 11, 12, 13, 14, 34], "v_exxdiv": [6, 11, 12, 13], "kinet": [6, 11, 12, 13], "attract": [6, 11, 12, 13], "with_exxdiv": [6, 11, 12, 13, 22], "power": [6, 11, 12, 13], "better": [6, 11, 12, 13], "accuraci": [6, 11, 12, 13, 14, 21], "spow": [6, 11, 12, 13], "compact": [6, 11, 12, 13, 14, 20], "back": [6, 11, 12, 13, 14], "renormalis": [6, 11, 12, 13], "interact": [6, 11, 12, 13, 14, 20, 21, 22, 33, 35, 36], "cderi_ov": [6, 11, 12, 13], "choleski": [6, 11, 12, 13], "decompos": [6, 11, 12, 13], "hole": [6, 11, 12, 13], "channel": [6, 10, 11, 12, 13, 21, 22], "calc_ecorrect": [6, 11, 12, 13], "nonloc": [6, 11, 12, 13], "npoint": [6, 11, 12, 13, 20, 21], "numer": [6, 11, 12, 13, 14, 21, 34], "48": [6, 11, 12, 13, 21], "seris_ov": [6, 11, 12, 13], "erpa": [6, 11, 12, 13], "mf_tol": [6, 11, 12, 13], "check_mf": [6, 11, 12, 13], "rotation": [6, 11, 12, 13], "translation": [6, 8, 11, 12, 13], "symmetr": [6, 8, 11, 12, 13, 14, 33, 35, 38, 39], "opt": [6, 11, 12, 13], "mirror": [6, 11, 12, 13], "parent": [6, 11, 12, 13, 22], "child": [6, 11, 12, 13], "wai": [6, 11, 12, 13, 26, 32, 33, 34, 37, 38, 39], "appear": [6, 11, 12, 13], "include_par": [6, 11, 12, 13], "prepend": [6, 11, 12, 13, 32], "sublist": [6, 11, 12, 13], "outer": [6, 11, 12, 13], "inner": [6, 11, 12, 13, 14], "obei": [6, 11, 12, 13, 21], "rank": [6, 11, 12, 13, 19, 21, 41], "democrat": [6, 11, 12, 13, 35], "reason": [6, 11, 12, 13, 14], "eg": [6, 11, 12, 13], "ao_basi": [6, 10, 11, 12, 13, 22, 35, 38], "with_mf": [6, 10, 11, 12, 13, 22], "doubl": [6, 11, 12, 13, 14, 18, 22, 33, 34], "account": [6, 8, 11, 12, 13, 21], "end": [6, 11, 12, 13, 14, 39], "reshap": [6, 11, 12, 13], "ddm1": [6, 11, 12, 13], "ddm2": [6, 11, 12, 13], "with_dm1": [6, 10, 11, 12, 13, 22], "fcorr": [6, 11, 12, 13], "factor": [6, 10, 11, 12, 13, 14, 38], "give": [6, 11, 12, 13, 14, 20, 21, 22, 35, 41], "via": [6, 9, 10, 11, 12, 13, 21, 23, 27, 36, 38, 39], "with_nuc": [6, 11, 12, 13], "local_orbit": [6, 11, 12, 13, 38], "filemod": [6, 11, 12, 13], "orbital_resolv": [6, 11, 12, 13, 38], "assum": [6, 11, 12, 13, 14, 21, 22, 38], "incl_virtu": [6, 11, 12, 13], "veff": [6, 11, 12, 13], "cpt_init": [6, 11, 12, 13, 16], "dm1func": [6, 11, 12, 13], "dm1kwd": [6, 11, 12, 13], "robust": [6, 11, 12, 13, 16], "mpi_siz": 6, "runtim": [6, 13, 21], "memori": [6, 14, 41], "next": [6, 21, 22, 39], "estim": [6, 12, 14, 21], "free": [6, 19, 39], "calc_": 6, "bare": 6, "add_restore_bar": 6, "mo_coeff2": [6, 11, 12, 13], "charge_tol": [6, 11, 12, 13], "spin_tol": [6, 11, 12, 13], "diis_obj": 7, "global": [7, 13], "t1": [7, 10, 13, 14, 16, 22], "e_last": 7, "dm1_last": 7, "etol": 7, "dtol": 7, "dm_type": 7, "consist": [7, 13, 14, 33, 35, 37], "check_basi": 8, "check_label": 8, "detect": [8, 38], "spglib": 8, "atom1": [8, 14], "atom2": [8, 14], "compar": [8, 21, 37, 38], "coord": [8, 14], "po": 8, "coordin": [8, 14, 17], "imag": [8, 14], "third": [8, 24], "common": [8, 14, 19], "r0": 8, "reorder": [8, 23], "atom_reord": 8, "rotmat": 8, "household": 8, "rotvec": 8, "ao_reord": 8, "atom_reorder_phas": 8, "v1": 8, "v2": 8, "angl": 8, "radian": 8, "5707963267948966": 8, "141592653589793": 8, "No": [8, 38, 39], "respect_label": 8, "respect_basi": 8, "respect_dm1": 8, "r_tol": 8, "dm1_tol": 8, "find": [8, 13, 14], "subcel": 8, "parallel": [8, 31, 32, 40], "h1": 8, "nsubcel": 8, "include_origin": 8, "rvec": 8, "check_el": 8, "identifi": 8, "posit": [8, 14, 16, 21], "lowest": [8, 21], "atm1": 8, "atm2": 8, "atom_phas": 8, "ccsd_wavefunct": [9, 10], "rccsd_wavefunct": [9, 10], "make_rdm2_non_cumul": [9, 10], "multipli": [9, 10], "as_unrestrict": [9, 10], "as_mp2": [9, 10], "as_cisd": [9, 10], "as_ccsd": [9, 10], "as_fci": [9, 10], "from_pyscf": [9, 10], "uccsd_wavefunct": [9, 10], "t1a": [9, 10], "t1b": [9, 10], "t2aa": [9, 10], "t2ab": [9, 10], "t2ba": [9, 10], "t2bb": [9, 10], "l1a": [9, 10], "l1b": [9, 10], "l2aa": [9, 10], "l2ab": [9, 10], "l2ba": [9, 10], "l2bb": [9, 10], "ccsdtq_wavefunct": [9, 10], "rccsdtq_wavefunct": [9, 10], "as_ccsdtq": [9, 10], "uccsdtq_wavefunct": [9, 10], "cisd_wavefunct": [9, 10], "rcisd_wavefunct": [9, 10], "get_cisdvec": [9, 10], "ucisd_wavefunct": [9, 10], "c1a": [9, 10], "c1b": [9, 10], "c2aa": [9, 10], "c2ab": [9, 10], "c2ba": [9, 10], "c2bb": [9, 10], "cisdtq_wavefunct": [9, 10], "rcisdtq_wavefunct": [9, 10], "ucisdtq_wavefunct": [9, 10], "fci_wavefunct": [9, 10], "rfci_wavefunct": [9, 10], "c0": [9, 10, 22], "as_cisdtq": [9, 10], "ufci_wavefunct": [9, 10], "ufci_wavefunction_w_dummi": [9, 10], "ndummi": [9, 10], "dummy_mo": [9, 10], "hf_wavefunct": [9, 10], "rhf_wavefunct": [9, 10], "as_restrict": [9, 10], "uhf_wavefunct": [9, 10], "mp2_wavefunct": [9, 10], "rmp2_wavefunct": [9, 10], "ump2_wavefunct": [9, 10], "project_c1": [9, 10], "project_c2": [9, 10], "project_uc1": [9, 10], "project_uc2": [9, 10], "symmetrize_c2": [9, 10], "symmetrize_uc2": [9, 10], "t1_uhf": [9, 10], "t1_rhf": [9, 10], "t2_uhf": [9, 10], "t2_rhf": [9, 10], "t3_uhf": [9, 10], "t3_rhf": [9, 10], "t4_uhf": [9, 10], "t4_rhf": [9, 10], "active_orbit": 9, "frozen_orbit": 9, "trafo": 9, "maxocc": 9, "molecularorbit": 9, "l1": [10, 13, 14, 22], "l2": [10, 12, 14, 22], "sym": 10, "normal": [10, 14, 16], "t3": [10, 13, 22], "t4": [10, 13, 22], "c3": 10, "c4": 10, "ci": [10, 22], "dummy_orb": 10, "dummi": [10, 22], "balanc": 10, "introduc": [10, 34, 37, 38], "we": [10, 11, 12, 13, 20, 21, 23, 28, 35, 38, 39, 40], "choos": [10, 14], "neglig": [10, 12, 21], "were": [10, 13], "4996044": 10, "packag": [10, 23, 27, 31, 32, 33, 35], "off": [10, 14], "deleg": 10, "30": [11, 14, 16, 41], "hl": [11, 12], "chempot": [11, 12], "nelec_target": [11, 12], "parent_frag": [11, 12], "nsym": [11, 12], "construct_bath": [11, 12], "curr_rdm": [11, 12], "n_activ": [11, 12, 13], "e1": [11, 12], "dmetfragmentresult": 11, "overal": [11, 12], "impurity_projector": 11, "target_rdm": 11, "reproduc": 11, "semidefinit": 11, "program": 11, "describ": [11, 12, 21, 35], "1103": [11, 14, 18, 20, 21], "physrevb": [11, 14, 18, 20, 21], "102": [11, 35], "085123": [11, 35], "sc": 11, "though": 11, "other": [11, 13, 22, 26, 38, 39], "mosek": 11, "issu": [11, 41], "impur": [11, 12], "until": 11, "implicitli": 11, "space_s": 11, "min_space_s": 11, "param": [11, 23, 26], "theori": [11, 12, 31, 33, 40], "charl": [11, 12, 20], "scott": [11, 12, 20], "cjcargillscott": [11, 12, 20], "inspect": [11, 12, 13, 20], "inf": [12, 21], "curr_dd0": 12, "curr_dd1": 12, "sym_children": 12, "our": [12, 20, 21, 22, 23, 35], "use_plasmon": 12, "deg": [12, 21], "adiabat": [12, 21], "connect": [12, 21], "linear": [12, 21, 26], "xc_kernel": [12, 20], "calc_loc": 12, "cluster_constrain": [12, 21], "linearis": 12, "rel": [12, 14, 22], "cheap": 12, "dm_eb": 12, "eb_coupl": 12, "boson_freq": 12, "dd_mom0": 12, "dd_mom1": 12, "e_fb": 12, "proj": [12, 16, 22], "inc_boson": 12, "excit": [12, 13, 21, 22, 33], "portion": 12, "fermion": 12, "rpa_mom": 12, "rot_ov": 12, "zeroth": [12, 14, 21], "boson": [12, 23], "doesn": [12, 21], "don": 12, "yet": 12, "degre": 12, "freedom": 12, "eta0_bo": 12, "remaind": 12, "store": [12, 14, 21, 26, 27, 34, 35, 38], "At": [12, 20, 34], "alreadi": 12, "hand": [12, 39], "realli": 12, "cannot": [12, 14], "highli": [12, 33], "rb": 12, "exchange_between_bo": 12, "quasi": [12, 16], "explicit": 12, "environment": 12, "rdm1": [12, 23], "deviat": [12, 21], "commut": 12, "ground": [12, 22], "hopefulli": 12, "tell": 12, "good": [12, 32, 41], "essenti": 12, "unnecessarili": 12, "pessimist": 12, "chemic": [12, 22, 36], "appendix": [12, 20, 21], "preprint": 12, "epsilon": 12, "m0_new": 12, "m1_new": 12, "svdtol": 12, "aris": 12, "ie": [12, 20, 23], "contrib": 12, "composit": 12, "dd": [12, 21, 23], "plasmon": 12, "formula": 12, "although": 12, "mat": [12, 14], "apb": 12, "amb": 12, "extend": [12, 33], "_debug_wf": 13, "bath_typ": 13, "external_correct": [13, 22], "test_extcorr": 13, "e_corr_dm2cumul": 13, "ip_energi": 13, "ea_energi": 13, "1dm": 13, "2dm": 13, "correction_typ": 13, "tailor": [13, 22], "low_level_coul": [13, 22], "solut": [13, 22, 26, 33, 35, 41], "t3v": 13, "constrain": 13, "constraint": 13, "slight": 13, "speed": 13, "increas": [13, 21], "loss": 13, "practic": 13, "minor": 13, "c2ba_ord": 13, "ba": [13, 14], "axis1": 13, "co": 13, "e_singl": 13, "e_doubl": 13, "sym_t2": 13, "sym_dm2": 13, "full_shap": 13, "get_lambda": 13, "mpi_target": 13, "for_dm2": 13, "allreduc": [13, 19], "warntol": 13, "02": [13, 35], "favor": 13, "due": [13, 22, 34, 36, 39], "full_wf": 13, "prx": 13, "veri": 13, "finit": [13, 20], "fbc": 13, "independ": 13, "skip": [13, 35], "e_fbc": 13, "c_out": 13, "diagnost": [13, 22], "code": [13, 20, 23, 26, 27, 34, 36, 37, 38], "14": [14, 22, 38], "96": [14, 21], "60397409788614": 14, "model": [14, 21, 23, 31, 33, 34, 38, 39], "thermodynam": 14, "77": 14, "045133": 14, "du": 14, "differenti": 14, "ansatz": [14, 21, 22], "nsite": [14, 23, 34, 35], "compat": 14, "notat": 14, "stripe": 14, "charact": 14, "atm_id": 14, "standard": [14, 15, 20, 22], "regular": 14, "pattern": [14, 22], "match": [14, 22], "re": 14, "ccpvtz": 14, "21": [14, 35], "22": [14, 41], "23": 14, "24": [14, 35, 38], "25": [14, 18, 35, 38], "26": 14, "27": 14, "28": [14, 35], "29": 14, "4p": [14, 39], "31": 14, "32": [14, 35], "33": [14, 17], "34": [14, 38], "35": 14, "36": 14, "37": [14, 35], "38": 14, "39": [14, 17], "40": 14, "int2": 14, "erifil": 14, "datanam": 14, "eri_mo": 14, "detali": 14, "kl": [14, 36], "h5py": [14, 32, 36], "dataset": [14, 16, 36], "hierarchi": 14, "hdf5": [14, 33, 36], "www": 14, "hdfgroup": 14, "doc1": 14, "ug": 14, "09_group": 14, "html": 14, "reus": [14, 22], "under": 14, "getints_by_shel": 14, "fileobject": 14, "sto3g": 14, "random": [14, 20], "eri1": 14, "55": 14, "80": 14, "water": [14, 16, 17, 31, 37, 41], "h5": [14, 36], "offset": 14, "everi": [14, 22, 32], "spheric": 14, "spectrum": 14, "entri": [14, 22], "31g": 14, "9": [14, 33, 35, 38], "11": [14, 33, 38], "18": [14, 35, 38], "spinor": 14, "orient": 14, "atom_new_coord": 14, "new_ao": 14, "new_orbitals_coef": 14, "orbitals_coef": 14, "ecp": 14, "17": [14, 35, 38, 41], "asarrai": [14, 38], "07869874": 14, "isotope_avg": 14, "mass": 14, "isotop": 14, "pseudo": 14, "pvdz": [14, 37, 38, 39, 41], "7": [14, 18, 38], "bas_id": 14, "angular": 14, "sit": 14, "03400444": 14, "1188704": 14, "53971186": 14, "expon": [14, 21], "01": [14, 21, 35], "962": 14, "4446": 14, "kappa": 14, "cartesian": 14, "4l": 14, "distanc": [14, 16], "reach": 14, "parse_arg": 14, "ke_cutoff": 14, "low_dim_ft_typ": 14, "space_group_symmetri": 14, "symmorph": 14, "setup": [14, 28, 32, 38], "refresh": 14, "repeat": [14, 35], "produc": 14, "NOT": 14, "radiu": [14, 17, 22], "pseudopotenti": 14, "semi": [14, 21], "empir": 14, "infin": 14, "vacuum": 14, "inf_vacuum": 14, "analytic_2d_1": 14, "explicitli": [14, 38], "0d": 14, "sp": 14, "univers": 14, "convent": [14, 15, 22], "libcint": 14, "s0": 14, "s1": 14, "int1e_ovlp_cart": 14, "ab": [14, 21, 22, 31, 33, 35, 38, 39], "58676826646e": 14, "xyz": 14, "compressor": 14, "delimit": 14, "min": 14, "abssum": 14, "absmax": 14, "absmin": 14, "to_cart": 14, "decontract": 14, "uncontract": 14, "transfer": 14, "ne": 14, "pmol": 14, "ctr_coeff": 14, "scipi": [14, 21, 32], "block_diag": 14, "int1e_ovlp": 14, "json": 14, "reciproc": 14, "formul": [14, 20], "martin": 14, "app": 14, "f2": 14, "temper": 14, "eval_nam": 14, "comp": 14, "shls_slice": 14, "non0tab": 14, "gtoval_sph": 14, "sum_t": 14, "exp": 14, "gtoval_ip_sph": 14, "nabla": 14, "gtoval_cart": 14, "gtoval_ip_cart": 14, "atm": 14, "int32": 14, "float64": 14, "shl_start": 14, "shl_end": 14, "shell_id": 14, "mask": [14, 22], "dft": [14, 22, 37], "gen_grid": 14, "make_mask": 14, "grid_ao_drv": 14, "Or": 14, "he": 14, "ao_valu": 14, "len": 14, "1000": [14, 22, 35], "gtoval_ig_sph": 14, "blank": 14, "spearat": 14, "individu": [14, 33, 41], "new_x": 14, "new_i": 14, "new_z": 14, "around": [14, 35], "53": 14, "preserv": 14, "atomn": 14, "basis_tab": 14, "c_1": 14, "c_2": 14, "nprim": 14, "nctr": 14, "ptr": 14, "gth": 14, "szv": 14, "3744350009": 14, "0283380461": 14, "8058681460": 14, "1333810052": 14, "4852528328": 14, "3995676063": 14, "1658236932": 14, "5531027541": 14, "ecp_tab": 14, "ul": 14, "exp_1": 14, "exp_2": 14, "pseudo_tab": 14, "nelec_": 14, "nele_p": 14, "nelec_d": 14, "rloc": 14, "nexp": 14, "cexp_1": 14, "cexp_2": 14, "cexp_nexp": 14, "nproj_typ": 14, "r1": 14, "nproj1": 14, "hproj1": 14, "nproj2": 14, "hproj2": 14, "blyp": 14, "pade": 14, "19596147": 14, "73049821": 14, "1120234": 14, "69836797": 14, "ase_atom": 14, "ase": 14, "bulk": 14, "diamond": [14, 16, 18], "lattice_const": 14, "wrap_around": 14, "uniform": 14, "samp": 14, "thm": 14, "mh": 14, "ngx": 14, "ngy": 14, "ngz": 14, "dimension": [14, 16], "go": 14, "fft": 14, "ngrid": 14, "weight": [14, 21], "ngri": 14, "structur": [14, 17, 18, 38], "complex128": 14, "si": 14, "scaled_kpt": 14, "scale": [14, 17, 21, 41], "nkpt": 14, "abs_kpt": 14, "bas_list": 14, "di": 14, "continu": 14, "sphere": 14, "parallelipip": 14, "n_x": 14, "85": 14, "cut": 14, "eta": [14, 21, 38], "nucleu": 14, "pi": 14, "choic": [14, 39], "desir": [14, 34, 39, 41], "4pi": 14, "gmax": 14, "erfc": 14, "with_gamma_point": 14, "scaled_cent": 14, "time_reversal_symmetri": 14, "kpoint": 14, "brillouin": 14, "zone": 14, "monkhorst": [14, 38], "revers": 14, "discard": [14, 41], "nearbi": 14, "2alpha": 14, "smallest": [14, 16], "isol": 14, "middl": 14, "box": 14, "safe": 14, "magnitud": [14, 21], "measur": 14, "kpts_in_ibz": 14, "ibz": 14, "bz": 14, "expnt": 14, "radial": 14, "sqrt": 14, "dr": 14, "2l": 14, "2a": 14, "schlegel": 14, "frisch": 14, "quant": 14, "54": [14, 17], "1995": 14, "83": [14, 18], "87": 14, "5264751109842591": 14, "aosym": 14, "2e": 14, "getint": 14, "int1e_ipovlp_sph": 14, "hermitian": [14, 20], "anti": 14, "int1e_grid": 14, "sto": [14, 35, 38], "3g": 14, "int1e_ipnuc_sph": 14, "v_nuc": 14, "10289944": 14, "48176097": 14, "int1e_nuc_spinor": 14, "69771092": 14, "00000000": [14, 38], "67146312": 14, "int1e_ipovlp": 14, "intor_nam": 14, "shl": 14, "3c": 14, "2c2e": 14, "int2e_ip1_sph": 14, "_atm": 14, "_ba": 14, "_env": 14, "08760462": 14, "3x3": 14, "molstr": 14, "deseri": 14, "receiv": 14, "implicit": 14, "declar": [14, 26, 34, 37], "idiom": 14, "arg1": 14, "arg2": 14, "deriv": [14, 21], "impli": 14, "java": 14, "those": 14, "staticmethod": 14, "builtin": 14, "nucmod": 14, "nucprop": 14, "_atom": 14, "basis_add": 14, "atom_id": 14, "_ecp": 14, "pre_env": 14, "_ecpba": 14, "_basi": 14, "bas_id0": 14, "bas_id1": 14, "upper": 14, "tupel": 14, "pickl": 14, "mu": 14, "nu": 14, "norm_to": 14, "283185307179586": 14, "begin": [14, 39, 41], "align": 14, "b_1": 14, "a_2": 14, "a_3": 14, "a_1": 14, "cdot": 14, "b_2": 14, "b_3": 14, "atmshel": 14, "search": [14, 22], "magnet": 14, "princip": 14, "found": [14, 22, 26, 28, 32, 35, 36, 38, 41], "3px": 14, "rxp": 14, "zeta": 14, "yp": 14, "r12": 14, "stg": 14, "atoms_or_coord": 14, "distribut": [14, 41], "rho": 14, "nuc_charg": 14, "ia": 14, "filatov_nuc_mod": 14, "switch": 14, "erf": 14, "short": 14, "r_o": 14, "rinv_origin": 14, "Be": 14, "affect": 14, "behavior": [14, 41], "int1e_rinv_": 14, "sure": 14, "cb": 14, "int1e_ovlp_spinor": 14, "conj": 14, "66133814775e": 14, "3p": [14, 39], "counterpart": 14, "postiv": 14, "th": [14, 21], "idx": [14, 16], "raw": 14, "symobl": 14, "zmat": 14, "moldic": 14, "context": [14, 35, 39], "rquir": 14, "int1e_r": 14, "rinv": 14, "treat": 14, "int1e_rinv": 14, "hubbard_t": 14, "hubbard_u": [14, 34, 35], "v_nn": 14, "save": [14, 41], "tile": 14, "vhfopt": 14, "precomput": 14, "seper": 14, "_vhf": 14, "mb": 14, "size": [14, 19, 21, 22, 34, 36, 41], "asynchron": 14, "stabliz": 14, "freez": [14, 22], "mycc": [14, 22], "ly": 14, "envs_dict": 14, "virt": 14, "canon": [14, 16, 20, 21], "pt": 14, "mp": [14, 21], "e_corr_ss": 14, "opposit": 14, "mu_x": 14, "p_": 14, "sum_a": 14, "q_a": 14, "mu_i": 14, "y_a": 14, "mu_z": 14, "z_a": 14, "dm_last": 14, "vhf_last": 14, "baselin": 14, "increment": 14, "vhf0": 14, "vhf1": 14, "vhf2": 14, "allclos": 14, "alpha_dm": 14, "beta_dm": 14, "v_": 14, "il": 14, "kj": 14, "dmsa": 14, "dmsb": 14, "vstack": 14, "vhfa": 14, "vhfb": 14, "dll": 15, "share": 15, "export": [15, 26, 27, 32], "cdecl": 15, "window": [15, 22], "qsort": 15, "gil": 15, "reacquir": 15, "afterward": [15, 19], "libnam": 15, "alkan": [16, 17], "alken": [16, 17], "aren": [16, 17], "no2": [16, 17], "ethanol": [16, 17], "keten": [16, 17], "ring": [16, 17, 35], "chain": [16, 17, 35], "acetic_acid": [16, 17], "ferrocene_b3lyp": [16, 17], "ferrocen": [16, 17], "propyl": [16, 17], "phenyl": [16, 17], "propanol": [16, 17], "chloroethanol": [16, 17], "neopentan": [16, 17], "boronen": [16, 17], "coronen": [16, 17], "glycin": [16, 17], "bcc": [16, 18], "graphen": [16, 18, 33], "graphit": [16, 18], "rocksalt": [16, 18], "perovskit": [16, 18], "perovskite_tetragon": [16, 18], "proj1": 16, "proj2": 16, "subtract_indep": 16, "a3": 16, "resolut": 16, "titl": 16, "comment": [16, 39], "5e": [16, 35], "crop": 16, "grod": 16, "dset_idx": 16, "unus": 16, "dset_id": 16, "header": 16, "voxel": 16, "decim": 16, "full_basi": 16, "add_rest_frag": 16, "fmol": 16, "pref": 16, "7b00892": 16, "xerr": 16, "push": 16, "target": [16, 19, 21, 22], "nd": 16, "cc_bond": 17, "ch_bond": 17, "ideal": [17, 41], "tetrahedr": 17, "sp3": 17, "ncarbon": 17, "trigon": 17, "planar": 17, "sp2": 17, "bond": 17, "benzen": 17, "oh_bond": 17, "bond_length": [17, 35], "fe": 17, "conform": 17, "eclips": 17, "dfecp": 17, "648": 17, "dcc": 17, "427": 17, "dch": 17, "079": 17, "acph": 17, "52": 17, "pub": 17, "pdf": 17, "ct700152c": 17, "b3lyp": 17, "aug": 17, "pvtz": 17, "cubic": [18, 21, 31], "li": 18, "51": 18, "57": 18, "silicon": 18, "431": 18, "46": 18, "hbn": 18, "5a": 18, "hbeo": 18, "68a": 18, "vasp": 18, "461": 18, "708": 18, "na": 18, "6402": 18, "unitcel": 18, "lih": 18, "0834": 18, "lif": 18, "0351": 18, "sr": 18, "ti": 18, "905": 18, "507": 18, "796": 18, "241": 18, "crystallograph": 18, "quadrupl": 18, "constant": [18, 22], "physic": 18, "review": 18, "materi": 18, "013807": 18, "2018": 18, "physrevmateri": 18, "becom": 18, "522": 18, "2a0": 18, "810": 18, "134108": 18, "occurr": 19, "9223372036854775807": 19, "valueerror": 19, "logfunc": 19, "overhead": [19, 41], "broadcast": 19, "mpi_kwarg": 19, "dest": 19, "tag": 19, "collect": [19, 33, 40], "locat": [19, 32], "local_init": 19, "remote_init": 19, "shared_lock": 19, "rma_lock": 19, "rma_unlock": 19, "rma_put": 19, "rma_get": 19, "buf": 19, "metadata": 19, "master": [19, 41], "node": [19, 41], "use_mpi": 19, "niexcept": [20, 21], "numericalintegratorbas": [20, 21], "get_quad": [20, 21], "eval_contrib": [20, 21], "eval_diag_contrib": [20, 21], "eval_diag_deriv_contrib": [20, 21], "eval_diag_deriv2_contrib": [20, 21], "eval_diag_exact": [20, 21], "eval_ni_approx": [20, 21], "eval_diag_ni_approx": [20, 21], "eval_diag_ni_approx_grad": [20, 21], "eval_diag_ni_approx_deriv2": [20, 21], "test_diag_deriv": [20, 21], "opt_quadrature_diag": [20, 21], "fix_param": [20, 21], "get_offset": [20, 21], "kernel_adapt": [20, 21], "l2_scan": [20, 21], "max_scan": [20, 21], "get_quad_v": [20, 21], "numericalintegratorclencur": [20, 21], "calculate_error": [20, 21], "numericalintegratorclencurinfinit": [20, 21], "numericalintegratorclencursemiinfinit": [20, 21], "numericalintegratorgaussiansemiinfinit": [20, 21], "gen_clencur_quad_inf": [20, 21], "gen_clencur_quad_semiinf": [20, 21], "nicheckinf": [20, 21], "ssrirpa": [20, 21], "naux_eri": [20, 21], "ov_tot": [20, 21], "kernel_mom": [20, 21], "test_eta0_error": [20, 21], "kernel_trmprt": [20, 21], "kernel_energi": [20, 21], "direct_ac_integr": [20, 21], "get_gap": [20, 21], "get_compressed_mp": [20, 21], "check_error": [20, 21], "construct_ri_ab": [20, 21], "compress_low_rank": [20, 21], "get_apb_eri_ri": [20, 21], "get_ab_xc_ri": [20, 21], "get_3c_integr": [20, 21], "test_spectral_rep": [20, 21], "construct_product_ri": [20, 21], "construct_inverse_ri": [20, 21], "ssrirrpa": [20, 21], "ssriurpa": [20, 21], "nierror": [20, 21], "nitrrootmp": [20, 21], "n_aux": [20, 21], "get_f": [20, 21], "get_q": [20, 21], "diagmat1": [20, 21], "diagmat2": [20, 21], "nimomzero": [20, 21], "momzerodeductnon": [20, 21], "momzerodeductd": [20, 21], "momzerodeducthigherord": [20, 21], "basemomzerooffset": [20, 21], "momzerooffsetcalcgausslag": [20, 21], "momzerooffsetcalccc": [20, 21], "diag_sqrt_contrib": [20, 21], "diag_sqrt_grad": [20, 21], "diag_sqrt_deriv2": [20, 21], "straightforward": 20, "upon": [20, 21], "reformul": 20, "tdhf": 20, "approach": [20, 21, 33, 37], "rather": [20, 38], "diagonalis": [20, 23], "hypothet": 20, "comparison": [20, 38], "equat": [20, 21, 24], "succinctli": [20, 21], "furch": [20, 21], "2001": [20, 21], "prb": [20, 21], "64": [20, 21, 26], "195120": [20, 21], "rpax": 20, "respons": [20, 21, 22, 23], "ss": 20, "flip": 20, "sf": 20, "drpa": 20, "trivial": 20, "larg": 20, "tda": 20, "distinct": 20, "aaaa": 20, "aabb": 20, "abab": 20, "abba": 20, "st": 20, "sorri": 20, "clunki": 20, "descript": 20, "ov_rot": 20, "introduct": [20, 22, 31], "lead": [20, 21], "c_o": 20, "c_v": 20, "max_mom": [20, 23], "baseexcept": 21, "out_shap": 21, "diag_shap": 21, "infinit": 21, "quadratur": 21, "__init__": 21, "might": 21, "abl": [21, 22, 40], "ll": 21, "now": [21, 36], "clenshaw": 21, "curti": 21, "freq": [21, 22, 23], "frequenc": 21, "ni": 21, "proport": 21, "ainit": 21, "optimis": 21, "exactli": 21, "opt_quad": 21, "put": 21, "simpli": [21, 41], "fix": 21, "l2norm": 21, "lpha": 21, "n_p": 21, "reli": 21, "cauchi": 21, "schwartz": 21, "inequ": 21, "overestim": 21, "suit": [21, 32], "rapidli": 21, "would": 21, "detail": 21, "arxiv": 21, "2301": 21, "09107": 21, "eq": [21, 22], "104": 21, "understand": 21, "simpler": 21, "domin": 21, "least": 21, "accur": [21, 38], "error_error": 21, "semiinfinit": 21, "dfmf": 21, "rixc": 21, "err_tol": 21, "svd_tol": 21, "lpq": 21, "compress": [21, 22], "left": [21, 22], "right": 21, "variou": [21, 22, 33], "cderi": [21, 22], "thoroughli": 21, "attempt": 21, "onc": 21, "prior": 21, "never": [21, 41], "worthwhil": 21, "aux": 21, "later": 21, "tradeoff": 21, "made": 21, "max_moment": 21, "target_rot": 21, "array_lik": 21, "o_a": 21, "v_a": 21, "o_b": 21, "v_b": 21, "highest": 21, "purpos": [21, 35], "excess": 21, "integral_deduct": 21, "deduct": 21, "ho": 21, "higher": [21, 41], "noth": 21, "discuss": 21, "initialis": 21, "adaptive_quad": 21, "prohibit": 21, "valid": 21, "usual": [21, 35], "ri_decomp": 21, "s_l": 21, "s_r": 21, "contruct": 21, "analytic_lower_bound": 21, "bound": 21, "tar": 21, "err0": 21, "upper_bound": 21, "lower_bound": 21, "mom0": 21, "ri_apb": 21, "ri_amb": 21, "eta0": 21, "99": 21, "tr": 21, "local_rot": 21, "fragment_projector": 21, "prefer": 21, "while": [21, 41], "calc_xi": 21, "tol_eig": 21, "nroot": [21, 22, 23], "gap": 21, "davidson": 21, "psd": 21, "shouldn": 21, "nelement": 21, "ri_l": 21, "ri_r": 21, "ri_1": 21, "ri_2": 21, "modif": [21, 22], "cderi_1": 21, "cderi_2": 21, "nb": 21, "rebfci": [22, 23], "get_hamil": [22, 23], "make_rdm12": [22, 23], "make_rdm_eb": [22, 23], "make_dd_mom": [22, 23], "uebfci": [22, 23], "contract_al": [22, 23], "make_shap": [22, 23], "contract_1": [22, 23], "contract_2": [22, 23], "contract_ep": [22, 23], "contract_pp": [22, 23], "apply_bos_annihil": [22, 23], "apply_bos_cr": [22, 23], "contract_pp_for_futur": [22, 23], "slices_for": [22, 23], "slices_for_cr": [22, 23], "slices_for_d": [22, 23], "slices_for_occ_reduct": [22, 23], "make_hdiag": [22, 23], "kernel_multiroot": [22, 23], "make_eb_rdm": [22, 23], "calc_dd_resp_mom": [22, 23], "run_hub_test": [22, 23], "run_ep_hubbard": [22, 23], "everyth": 22, "v_ext_0": 22, "cpt": 22, "cpt_guess": 22, "atol": 22, "rtol": 22, "cpt_radiu": 22, "eom": 22, "matthew": 22, "stanton": 22, "cc_scanner": 22, "mbpt2": 22, "shot": [22, 35], "t1_t2": 22, "koopman": 22, "corresond": 22, "strictli": 22, "anyth": 22, "ao_repr": 22, "with_frozen": 22, "un": 22, "relax": 22, "dm1a": 22, "dm1b": 22, "istep": 22, "normt": 22, "de": 22, "adii": 22, "include_t3v": 22, "ci_scann": 22, "ci0": [22, 23], "civec": [22, 23], "myci": 22, "poss": 22, "diff": 22, "fcivec": [22, 23], "diag": 22, "slater": 22, "subtract": 22, "substract": 22, "minu": 22, "singli": 22, "d_i": 22, "doubli": 22, "d_ij": 22, "q_alpha": 22, "p_alpha": 22, "q_beta": 22, "p_beta": 22, "pdm": 22, "mcweenei": 22, "book": 22, "dm2aa": 22, "dm2ab": 22, "dm2bb": 22, "s_alpha": 22, "r_alpha": 22, "s_beta": 22, "r_beta": 22, "pqr": [22, 23], "eri_aa": 22, "dm2_aa": 22, "eri_ab": 22, "dm2_ab": 22, "rspq": 22, "eri_ba": 22, "eri_bb": 22, "dm2_bb": 22, "cisdvec": 22, "cibra": 22, "ciket": 22, "u_occ": 22, "u_vir": 22, "u_occ2": 22, "u_vir2": 22, "tailor_t1": 22, "tailor_t2": 22, "ovlp_tol": 22, "tailor_func": 22, "ccsd_solver": 22, "residu": 22, "dumpfil": [22, 36], "200": 22, "max_boson_occ": [22, 23], "300": [22, 26], "solver_spin": 22, "fix_spin": 22, "fix_spin_penalti": 22, "davidson_onli": 22, "init_guess_nois": 22, "ham": 22, "getter": 22, "valid_block": 22, "cache_eri": 22, "bare_eri": 22, "with_vext": 22, "use_seri": 22, "only_ov": 22, "svd_threshold": 22, "allow_dummy_orb": 22, "force_bare_eri": 22, "overwrite_fock": 22, "allow_df": 22, "permit": 22, "forc": [22, 29], "unscreen": 22, "mainli": [22, 41], "clusmf": 22, "orbs_to_freez": 22, "seris_interm": 22, "force_bar": 22, "compress_cderi": 22, "cderi_neg": 22, "workmem": 22, "fci_opt": 22, "built": 22, "is_eb": 22, "home": [23, 26, 27, 32], "runner": 23, "python3": 23, "py": [23, 32, 35, 36, 39, 41], "slow": 23, "fci_slow": 23, "g2e": 23, "hep": 23, "hpp": 23, "nboson": 23, "max_occ": 23, "ecor": 23, "adj_zero_pho": 23, "heb": 23, "phonon": 23, "decoupl": 23, "b_id": 23, "new_max_occ": 23, "returnhop": 23, "dm_pq": 23, "dm_qp": 23, "dm_": 23, "resolv": [23, 38], "nel": 23, "hbb": 23, "trace": [23, 38], "mth": 23, "deal": 23, "preced": 23, "hfba": 23, "pp": 23, "nphonon": 23, "get_atom_color": [24, 25], "quadrat": 24, "birch": 24, "murnaghan": 24, "volum": 24, "fitfunc": 24, "value_at": 24, "xcol": 24, "ycol": 24, "volume_func": 24, "textfil": 24, "ff1493": 25, "multithread": [26, 41], "algebra": 26, "gcc": 26, "directori": [26, 27, 34], "mkdir": [26, 32], "enviroment": 26, "path": [26, 27, 32], "openmp": 26, "firstli": 26, "select": [26, 28, 34, 35, 37, 39], "use_openmp": 26, "no_warmup": 26, "build_relapack": 26, "dynamic_arch": 26, "fc": 26, "gfortran": 26, "hostcc": 26, "gnu": 26, "common_opt": 26, "o3": 26, "ftree": 26, "fprefetch": 26, "prefetch": 26, "latenc": 26, "cflag": 26, "fcommon_opt": 26, "fcflag": 26, "command": [26, 29, 32, 34], "openblas_dir": 26, "j4": 26, "binari": 26, "libnamesuffix": 26, "conclud": 26, "pip": [27, 29, 31, 41], "pythonuserbas": 27, "pythonpath": [27, 32], "pythonx": 27, "instal": [27, 28, 31, 41], "signific": [28, 41], "cover": 28, "quickstart": [28, 31], "section": [28, 35], "much": [28, 38], "here": [28, 38, 39], "few": 28, "openbla": [28, 31, 41], "mpi4pi": [28, 31, 41], "mpicc": 29, "art": 31, "simul": [31, 34, 35], "initio": [31, 33, 38, 39], "featur": [31, 34, 37], "embbed": [31, 37, 40], "simpl": [31, 38, 41], "boron": 31, "nitrid": 31, "cbn": 31, "job": 31, "consider": 31, "faq": 31, "api": 31, "advanc": 31, "simplest": 32, "git": 32, "clone": 32, "github": [32, 41], "boothgroup": 32, "cd": 32, "leverag": 32, "repositori": 32, "cmake": 32, "interpret": 32, "profil": 32, "dirctori": 32, "excecut": [32, 41], "idea": 32, "pytest": 32, "carbon": 33, "With": 33, "flexibl": [33, 34], "develop": 33, "varieti": 33, "reconstruct": 33, "offer": [33, 37], "procedur": [33, 34, 39], "closer": 33, "flexibli": 33, "l\u00f6wdin": [33, 39], "closest": 33, "m\u00f8ller": 33, "plesset": 33, "perturb": 33, "gerald": 33, "knizia": 33, "4834": 33, "2013": 33, "garnet": 33, "kin": 33, "lic": 33, "chan": 33, "rev": [33, 35, 38], "lett": 33, "109": 33, "186404": 33, "2012": 33, "georg": [33, 38], "booth": [33, 38], "011046": [33, 38], "2022": [33, 35, 38], "commonli": 34, "chemistri": 34, "condens": 34, "matter": 34, "studi": 34, "emploi": [34, 37], "modul": [34, 37], "hubbard_1d": 34, "snippet": [34, 36, 37], "folder": 34, "vayesta_output": 34, "log_fil": 34, "error_log": 34, "further": [34, 39], "likewis": 34, "tutori": [34, 37], "sens": 34, "complement": 34, "fragment_typ": 34, "displai": [34, 37], "snipet": 34, "fragement": 34, "8f": [34, 35, 37, 38, 39, 41], "methodologi": [34, 37], "explor": 34, "correspondingli": 34, "dimer": 34, "depict": [34, 35], "figur": 34, "schemat": [34, 35], "half": [34, 35], "textrm": 35, "_6": 35, "h6": 35, "6g": [35, 38], "dmet_sc": 35, "1f": 35, "mha": 35, "instanti": [35, 38], "help": 35, "manag": [35, 39], "compris": 35, "hydrogen": 35, "120": 35, "240": 35, "ill": [35, 39], "sometim": 35, "fail": 35, "difficulti": 35, "cxvpy": 35, "matic": 35, "03": 35, "ten": 35, "6t": 35, "hop": 35, "nimp": 35, "dmet_sym": 35, "n0": 35, "n1": 35, "n2": 35, "v_corr": 35, "vcorr": 35, "fo": 35, "divid": 35, "fig": 35, "inher": 35, "exploit": [35, 38], "thu": [35, 41], "faulstich": 35, "et": 35, "al": 35, "theor": 35, "851": 35, "864": 35, "wu": 35, "2020": 35, "easili": 36, "own": 36, "accomod": 36, "exit": 36, "adjust": 36, "content": 36, "best": [36, 39, 41], "illustr": [36, 37], "fragment_": 36, "nkei": 36, "c_cluster": 36, "heff": 36, "outsid": 36, "s_dmet_clust": 36, "c_dmet_clust": 36, "slighlti": 36, "suffix": 36, "_a": 36, "_b": 36, "c_cluster_a": 36, "c_cluster_b": 36, "c_frag_a": 36, "c_frag_b": 36, "hcore_a": 36, "hcore_b": 36, "heff_a": 36, "heff_b": 36, "fock_a": 36, "fock_b": 36, "aa": 36, "bb": 36, "transpos": 36, "eris_aa": 36, "eris_ab": 36, "eris_bb": 36, "c_dmet_cluster_a": 36, "c_dmet_cluster_b": 36, "capabl": [37, 39, 40], "pertin": 37, "0000": [37, 38, 39, 41], "1173": [37, 38, 41], "7572": [37, 38, 41], "4692": [37, 38, 41], "lda": 37, "svwn": 37, "notic": 37, "characterist": 37, "therefor": [37, 41], "followin": 37, "emb_lda": 37, "ebccsd": 37, "strategi": [37, 41], "algortihm": 37, "perfom": 37, "manner": 37, "submit": 37, "turn": 38, "still": [38, 41], "manual": 38, "zinc": 38, "blend": 38, "too": 38, "demonstr": [38, 39, 41], "615": 38, "kccsd": 38, "times2": 38, "throughout": 38, "across": 38, "enlarg": 38, "encompass": 38, "42": 38, "recov": 38, "confirm": 38, "show": [38, 39, 40], "despit": 38, "17325874": 38, "98971008": 38, "76417671": 38, "2px": [38, 39], "69095149": 38, "2py": [38, 39], "2pz": [38, 39], "99053993": 38, "17403392": 38, "33622830": 38, "against": 38, "wherea": 38, "latter": 38, "fundament": 39, "pose": 39, "nevertheless": 39, "framework": 39, "systemat": 39, "guarante": 39, "expans": 39, "taken": 39, "togeth": 39, "entir": 39, "augment": 39, "clearer": 39, "tabl": 39, "ye": 39, "suitabl": 39, "twice": 39, "accept": 39, "se": 39, "2807": 39, "3464": 39, "5965": 39, "oxygen": 39, "selenium": 39, "3py": 39, "3pz": 39, "px": 39, "4px": 39, "remain": 39, "page": [40, 41], "architectur": 41, "bind": 41, "advic": 41, "verifi": 41, "pleas": 41, "report": 41, "bug": 41, "unexpect": 41, "mpirun": 41, "jobscript": 41, "consol": 41, "favour": 41, "fewer": 41, "sequenti": 41, "advis": 41, "idl": 41, "bla": 41, "link": 41, "fashion": 41, "manipul": 41, "beyond": 41, "typic": 41, "modern": 41, "cpu": 41, "significantli": 41, "bottleneck": 41, "benefici": 41, "principl": 41, "concern": 41, "io": 41, "90": 41, "chaotic": 41, "electrici": 41, "altern": 41, "workflow": 41, "situat": 41}, "objects": {"": [[1, 0, 0, "-", "vayesta"]], "vayesta": [[2, 0, 0, "-", "core"], [11, 0, 0, "-", "dmet"], [12, 0, 0, "-", "edmet"], [13, 0, 0, "-", "ewf"], [1, 1, 1, "", "get_git_hash"], [1, 1, 1, "", "import_package"], [14, 0, 0, "-", "lattmod"], [15, 0, 0, "-", "libs"], [16, 0, 0, "-", "misc"], [19, 0, 0, "-", "mpi"], [1, 1, 1, "", "new_log"], [20, 0, 0, "-", "rpa"], [22, 0, 0, "-", "solver"], [24, 0, 0, "-", "tools"]], "vayesta.core": [[3, 0, 0, "-", "ao2mo"], [4, 0, 0, "-", "bath"], [2, 0, 0, "-", "cmdargs"], [2, 0, 0, "-", "foldscf"], [5, 0, 0, "-", "fragmentation"], [2, 0, 0, "-", "helper"], [2, 0, 0, "-", "linalg"], [6, 0, 0, "-", "qemb"], [7, 0, 0, "-", "scmf"], [2, 0, 0, "-", "spinalg"], [8, 0, 0, "-", "symmetry"], [9, 0, 0, "-", "types"], [2, 0, 0, "-", "util"], [2, 0, 0, "-", "vlog"]], "vayesta.core.ao2mo": [[3, 0, 0, "-", "helper"], [3, 0, 0, "-", "kao2gmo"], [3, 0, 0, "-", "postscf_ao2mo"], [3, 0, 0, "-", "pyscf_eris"]], "vayesta.core.ao2mo.helper": [[3, 1, 1, "", "contract_dm2_eris"], [3, 1, 1, "", "contract_dm2_eris_rhf"], [3, 1, 1, "", "contract_dm2_eris_uhf"], [3, 1, 1, "", "contract_dm2intermeds_eris_rhf"], [3, 1, 1, "", "contract_dm2intermeds_eris_uhf"], [3, 1, 1, "", "get_block"], [3, 1, 1, "", "get_full_array"], [3, 1, 1, "", "get_full_array_rhf"], [3, 1, 1, "", "get_full_array_uhf"], [3, 1, 1, "", "get_kconserv"], [3, 1, 1, "", "get_ovVV"], [3, 1, 1, "", "get_ovvv"], [3, 1, 1, "", "get_vvVV"], [3, 1, 1, "", "get_vvvv"], [3, 1, 1, "", "pack_ovvv"], [3, 1, 1, "", "pack_vvvv"], [3, 1, 1, "", "project_ccsd_eris"]], "vayesta.core.ao2mo.kao2gmo": [[3, 1, 1, "", "kao2gmo_cderi"]], "vayesta.core.ao2mo.postscf_ao2mo": [[3, 1, 1, "", "postscf_ao2mo"], [3, 1, 1, "", "postscf_kao2gmo"], [3, 1, 1, "", "postscf_kao2gmo_uhf"]], "vayesta.core.ao2mo.pyscf_eris": [[3, 1, 1, "", "make_ccsd_eris"], [3, 1, 1, "", "make_uccsd_eris"]], "vayesta.core.bath": [[4, 1, 1, "", "DMET_Bath"], [4, 1, 1, "", "EwDMET_Bath"], [4, 1, 1, "", "Full_Bath"], [4, 1, 1, "", "MP2_Bath"], [4, 1, 1, "", "R2_Bath"], [4, 0, 0, "-", "bath"], [4, 0, 0, "-", "bno"], [4, 0, 0, "-", "dmet"], [4, 0, 0, "-", "ewdmet"], [4, 0, 0, "-", "full"], [4, 0, 0, "-", "helper"], [4, 0, 0, "-", "r2bath"]], "vayesta.core.bath.bath": [[4, 2, 1, "", "Bath"]], "vayesta.core.bath.bath.Bath": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_frag"], [4, 3, 1, "", "log"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"]], "vayesta.core.bath.bno": [[4, 2, 1, "", "BNO_Bath"], [4, 2, 1, "", "BNO_Bath_UHF"], [4, 2, 1, "", "BNO_Threshold"], [4, 2, 1, "", "MP2_BNO_Bath"], [4, 2, 1, "", "UMP2_BNO_Bath"]], "vayesta.core.bath.bno.BNO_Bath": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_cluster_occ"], [4, 3, 1, "", "c_cluster_vir"], [4, 3, 1, "", "c_env"], [4, 3, 1, "", "c_frag"], [4, 4, 1, "", "get_active_space"], [4, 4, 1, "", "get_bath"], [4, 4, 1, "", "get_finite_bath_correction"], [4, 4, 1, "", "kernel"], [4, 3, 1, "", "log"], [4, 4, 1, "", "log_histogram"], [4, 4, 1, "", "make_bno_coeff"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "ncluster"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"], [4, 4, 1, "", "truncate_bno"]], "vayesta.core.bath.bno.BNO_Bath_UHF": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_cluster_occ"], [4, 3, 1, "", "c_cluster_vir"], [4, 3, 1, "", "c_env"], [4, 3, 1, "", "c_frag"], [4, 4, 1, "", "get_active_space"], [4, 4, 1, "", "get_bath"], [4, 4, 1, "", "get_finite_bath_correction"], [4, 4, 1, "", "kernel"], [4, 3, 1, "", "log"], [4, 4, 1, "", "log_histogram"], [4, 4, 1, "", "make_bno_coeff"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "ncluster"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"], [4, 4, 1, "", "truncate_bno"]], "vayesta.core.bath.bno.BNO_Threshold": [[4, 4, 1, "", "get_number"]], "vayesta.core.bath.bno.MP2_BNO_Bath": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_cluster_occ"], [4, 3, 1, "", "c_cluster_vir"], [4, 3, 1, "", "c_env"], [4, 3, 1, "", "c_frag"], [4, 4, 1, "", "get_active_space"], [4, 4, 1, "", "get_bath"], [4, 4, 1, "", "get_eris_or_cderi"], [4, 4, 1, "", "get_finite_bath_correction"], [4, 4, 1, "", "kernel"], [4, 3, 1, "", "log"], [4, 4, 1, "", "log_histogram"], [4, 4, 1, "", "make_bno_coeff"], [4, 4, 1, "", "make_delta_dm1"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "ncluster"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"], [4, 4, 1, "", "truncate_bno"]], "vayesta.core.bath.bno.UMP2_BNO_Bath": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_cluster_occ"], [4, 3, 1, "", "c_cluster_vir"], [4, 3, 1, "", "c_env"], [4, 3, 1, "", "c_frag"], [4, 4, 1, "", "get_active_space"], [4, 4, 1, "", "get_bath"], [4, 4, 1, "", "get_eris_or_cderi"], [4, 4, 1, "", "get_finite_bath_correction"], [4, 4, 1, "", "kernel"], [4, 3, 1, "", "log"], [4, 4, 1, "", "log_histogram"], [4, 4, 1, "", "make_bno_coeff"], [4, 4, 1, "", "make_delta_dm1"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "ncluster"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"], [4, 4, 1, "", "truncate_bno"]], "vayesta.core.bath.dmet": [[4, 2, 1, "", "DMET_Bath_RHF"], [4, 2, 1, "", "DMET_Bath_UHF"]], "vayesta.core.bath.dmet.DMET_Bath_RHF": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_frag"], [4, 4, 1, "", "get_cluster_electrons"], [4, 4, 1, "", "get_environment"], [4, 4, 1, "", "get_occupied_bath"], [4, 4, 1, "", "get_virtual_bath"], [4, 4, 1, "", "kernel"], [4, 3, 1, "", "log"], [4, 4, 1, "", "log_info"], [4, 4, 1, "", "make_dmet_bath"], [4, 4, 1, "", "make_dmet_bath_fast"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"], [4, 4, 1, "", "use_ref_orbitals"]], "vayesta.core.bath.dmet.DMET_Bath_UHF": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_frag"], [4, 4, 1, "", "get_cluster_electrons"], [4, 4, 1, "", "get_environment"], [4, 4, 1, "", "get_occupied_bath"], [4, 4, 1, "", "get_virtual_bath"], [4, 4, 1, "", "kernel"], [4, 3, 1, "", "log"], [4, 4, 1, "", "log_info"], [4, 4, 1, "", "make_dmet_bath"], [4, 4, 1, "", "make_dmet_bath_fast"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"], [4, 4, 1, "", "use_ref_orbitals"]], "vayesta.core.bath.ewdmet": [[4, 2, 1, "", "EwDMET_Bath_RHF"]], "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_env"], [4, 3, 1, "", "c_frag"], [4, 4, 1, "", "get_bath"], [4, 4, 1, "", "get_fock"], [4, 4, 1, "", "kernel"], [4, 3, 1, "", "log"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"]], "vayesta.core.bath.full": [[4, 2, 1, "", "Full_Bath_RHF"], [4, 2, 1, "", "Full_Bath_UHF"]], "vayesta.core.bath.full.Full_Bath_RHF": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_env"], [4, 3, 1, "", "c_frag"], [4, 4, 1, "", "get_bath"], [4, 3, 1, "", "log"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"]], "vayesta.core.bath.full.Full_Bath_UHF": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_env"], [4, 3, 1, "", "c_frag"], [4, 4, 1, "", "get_bath"], [4, 3, 1, "", "log"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"]], "vayesta.core.bath.helper": [[4, 1, 1, "", "make_histogram"], [4, 1, 1, "", "make_horizontal_histogram"], [4, 1, 1, "", "transform_mp2_eris"]], "vayesta.core.bath.r2bath": [[4, 2, 1, "", "R2_Bath_RHF"]], "vayesta.core.bath.r2bath.R2_Bath_RHF": [[4, 3, 1, "", "base"], [4, 3, 1, "", "c_env"], [4, 3, 1, "", "c_frag"], [4, 4, 1, "", "get_bath"], [4, 4, 1, "", "get_r2"], [4, 4, 1, "", "kernel"], [4, 3, 1, "", "log"], [4, 4, 1, "", "log_histogram"], [4, 3, 1, "", "mf"], [4, 3, 1, "", "mol"], [4, 3, 1, "", "spin_restricted"], [4, 3, 1, "", "spin_unrestricted"], [4, 3, 1, "", "spinsym"]], "vayesta.core.cmdargs": [[2, 1, 1, "", "parse_cmd_args"]], "vayesta.core.foldscf": [[2, 2, 1, "", "FoldedRHF"], [2, 2, 1, "", "FoldedSCF"], [2, 2, 1, "", "FoldedUHF"], [2, 1, 1, "", "bvk2k_2d"], [2, 1, 1, "", "fold_mos"], [2, 1, 1, "", "fold_scf"], [2, 1, 1, "", "get_phase"], [2, 1, 1, "", "k2bvk_2d"], [2, 1, 1, "", "kpts_to_kmesh"], [2, 1, 1, "", "log_error_norms"], [2, 1, 1, "", "make_mo_coeff_real"], [2, 1, 1, "", "make_mo_coeff_real_2"], [2, 1, 1, "", "translation_vectors_for_kmesh"]], "vayesta.core.foldscf.FoldedRHF": [[2, 5, 1, "", "DIIS"], [2, 4, 1, "", "add_keys"], [2, 4, 1, "", "analyze"], [2, 4, 1, "", "apply"], [2, 4, 1, "", "as_scanner"], [2, 4, 1, "", "build"], [2, 4, 1, "", "canonicalize"], [2, 5, 1, "", "check_convergence"], [2, 4, 1, "", "check_sanity"], [2, 5, 1, "", "conv_check"], [2, 5, 1, "", "conv_tol"], [2, 5, 1, "", "conv_tol_grad"], [2, 4, 1, "", "convert_from_"], [2, 5, 1, "", "damp"], [2, 3, 1, "", "damp_factor"], [2, 4, 1, "", "density_fit"], [2, 5, 1, "", "diis"], [2, 5, 1, "", "diis_file"], [2, 5, 1, "", "diis_space"], [2, 5, 1, "", "diis_space_rollback"], [2, 5, 1, "", "diis_start_cycle"], [2, 4, 1, "", "dip_moment"], [2, 5, 1, "", "direct_scf"], [2, 5, 1, "", "direct_scf_tol"], [2, 4, 1, "", "dump_chk"], [2, 4, 1, "", "dump_flags"], [2, 4, 1, "", "dump_scf_summary"], [2, 3, 1, "", "e_tot"], [2, 4, 1, "", "eig"], [2, 4, 1, "", "energy_elec"], [2, 4, 1, "", "energy_nuc"], [2, 4, 1, "", "energy_tot"], [2, 4, 1, "", "from_chk"], [2, 4, 1, "", "gen_response"], [2, 4, 1, "", "get_bands"], [2, 4, 1, "", "get_fock"], [2, 4, 1, "", "get_grad"], [2, 4, 1, "", "get_hcore"], [2, 4, 1, "", "get_init_guess"], [2, 4, 1, "", "get_j"], [2, 4, 1, "", "get_jk"], [2, 4, 1, "", "get_jk_incore"], [2, 4, 1, "", "get_k"], [2, 4, 1, "", "get_occ"], [2, 4, 1, "", "get_ovlp"], [2, 4, 1, "", "get_rho"], [2, 4, 1, "", "get_veff"], [2, 3, 1, "", "hf_energy"], [2, 4, 1, "", "init_direct_scf"], [2, 5, 1, "", "init_guess"], [2, 4, 1, "", "init_guess_by_1e"], [2, 4, 1, "", "init_guess_by_atom"], [2, 4, 1, "", "init_guess_by_chkfile"], [2, 4, 1, "", "init_guess_by_huckel"], [2, 4, 1, "", "init_guess_by_minao"], [2, 4, 1, "", "jk_method"], [2, 3, 1, "id6", "kcell"], [2, 4, 1, "", "kernel"], [2, 5, 1, "", "kmf"], [2, 5, 1, "", "kphase"], [2, 3, 1, "", "kpt"], [2, 5, 1, "", "level_shift"], [2, 3, 1, "", "level_shift_factor"], [2, 4, 1, "", "make_rdm1"], [2, 4, 1, "", "make_rdm2"], [2, 5, 1, "", "max_cycle"], [2, 4, 1, "", "mix_density_fit"], [2, 4, 1, "", "mulliken_meta"], [2, 4, 1, "", "mulliken_pop"], [2, 4, 1, "", "mulliken_pop_meta_lowdin_ao"], [2, 3, 1, "id7", "ncells"], [2, 4, 1, "", "newton"], [2, 4, 1, "", "nuc_grad_method"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "post_kernel"], [2, 4, 1, "", "pre_kernel"], [2, 4, 1, "", "remove_soscf"], [2, 4, 1, "", "reset"], [2, 4, 1, "", "rs_density_fit"], [2, 4, 1, "", "run"], [2, 4, 1, "", "scf"], [2, 4, 1, "", "set"], [2, 4, 1, "", "sfx2c1e"], [2, 4, 1, "", "spin_square"], [2, 4, 1, "", "stability"], [2, 5, 1, "", "stdout"], [2, 4, 1, "", "to_ghf"], [2, 4, 1, "", "to_gks"], [2, 4, 1, "", "to_ks"], [2, 4, 1, "", "to_rhf"], [2, 4, 1, "", "to_rks"], [2, 4, 1, "", "to_uhf"], [2, 4, 1, "", "to_uks"], [2, 4, 1, "", "update"], [2, 4, 1, "", "update_"], [2, 4, 1, "", "update_from_chk"], [2, 4, 1, "", "update_from_chk_"], [2, 5, 1, "", "verbose"], [2, 4, 1, "", "view"], [2, 4, 1, "", "x2c"], [2, 4, 1, "", "x2c1e"]], "vayesta.core.foldscf.FoldedSCF": [[2, 3, 1, "", "e_tot"], [2, 4, 1, "", "get_hcore"], [2, 4, 1, "", "get_ovlp"], [2, 4, 1, "", "get_veff"], [2, 3, 1, "id1", "kcell"], [2, 5, 1, "", "kmf"], [2, 5, 1, "", "kphase"], [2, 3, 1, "id0", "ncells"]], "vayesta.core.foldscf.FoldedUHF": [[2, 5, 1, "", "DIIS"], [2, 4, 1, "", "add_keys"], [2, 4, 1, "", "analyze"], [2, 4, 1, "", "apply"], [2, 4, 1, "", "as_scanner"], [2, 4, 1, "", "build"], [2, 4, 1, "", "canonicalize"], [2, 5, 1, "", "check_convergence"], [2, 4, 1, "", "check_sanity"], [2, 5, 1, "", "conv_check"], [2, 5, 1, "", "conv_tol"], [2, 5, 1, "", "conv_tol_grad"], [2, 4, 1, "", "convert_from_"], [2, 5, 1, "", "damp"], [2, 3, 1, "", "damp_factor"], [2, 4, 1, "", "density_fit"], [2, 4, 1, "", "det_ovlp"], [2, 5, 1, "", "diis"], [2, 5, 1, "", "diis_file"], [2, 5, 1, "", "diis_space"], [2, 5, 1, "", "diis_space_rollback"], [2, 5, 1, "", "diis_start_cycle"], [2, 4, 1, "", "dip_moment"], [2, 5, 1, "", "direct_scf"], [2, 5, 1, "", "direct_scf_tol"], [2, 4, 1, "", "dump_chk"], [2, 4, 1, "", "dump_flags"], [2, 4, 1, "", "dump_scf_summary"], [2, 3, 1, "", "e_tot"], [2, 4, 1, "", "eig"], [2, 4, 1, "", "energy_elec"], [2, 4, 1, "", "energy_nuc"], [2, 4, 1, "", "energy_tot"], [2, 4, 1, "", "from_chk"], [2, 4, 1, "", "gen_response"], [2, 4, 1, "", "get_bands"], [2, 4, 1, "", "get_fock"], [2, 4, 1, "", "get_grad"], [2, 4, 1, "", "get_hcore"], [2, 4, 1, "", "get_init_guess"], [2, 4, 1, "", "get_j"], [2, 4, 1, "", "get_jk"], [2, 4, 1, "", "get_jk_incore"], [2, 4, 1, "", "get_k"], [2, 4, 1, "", "get_occ"], [2, 4, 1, "", "get_ovlp"], [2, 4, 1, "", "get_rho"], [2, 4, 1, "", "get_veff"], [2, 3, 1, "", "hf_energy"], [2, 4, 1, "", "init_direct_scf"], [2, 5, 1, "", "init_guess"], [2, 4, 1, "", "init_guess_by_1e"], [2, 4, 1, "", "init_guess_by_atom"], [2, 4, 1, "", "init_guess_by_chkfile"], [2, 4, 1, "", "init_guess_by_huckel"], [2, 4, 1, "", "init_guess_by_minao"], [2, 4, 1, "", "jk_method"], [2, 3, 1, "id12", "kcell"], [2, 4, 1, "", "kernel"], [2, 5, 1, "", "kmf"], [2, 5, 1, "", "kphase"], [2, 3, 1, "", "kpt"], [2, 5, 1, "", "level_shift"], [2, 3, 1, "", "level_shift_factor"], [2, 4, 1, "", "make_asym_dm"], [2, 4, 1, "", "make_rdm1"], [2, 4, 1, "", "make_rdm2"], [2, 5, 1, "", "max_cycle"], [2, 4, 1, "", "mix_density_fit"], [2, 4, 1, "", "mulliken_meta"], [2, 4, 1, "", "mulliken_meta_spin"], [2, 4, 1, "", "mulliken_pop"], [2, 4, 1, "", "mulliken_pop_meta_lowdin_ao"], [2, 4, 1, "", "mulliken_spin_pop"], [2, 3, 1, "id13", "ncells"], [2, 3, 1, "", "nelec"], [2, 3, 1, "", "nelectron_alpha"], [2, 4, 1, "", "newton"], [2, 4, 1, "", "nuc_grad_method"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "post_kernel"], [2, 4, 1, "", "pre_kernel"], [2, 4, 1, "", "remove_soscf"], [2, 4, 1, "", "reset"], [2, 4, 1, "", "rs_density_fit"], [2, 4, 1, "", "run"], [2, 4, 1, "", "scf"], [2, 4, 1, "", "set"], [2, 4, 1, "", "sfx2c1e"], [2, 4, 1, "", "spin_square"], [2, 4, 1, "", "stability"], [2, 5, 1, "", "stdout"], [2, 4, 1, "", "to_ghf"], [2, 4, 1, "", "to_gks"], [2, 4, 1, "", "to_ks"], [2, 4, 1, "", "to_rhf"], [2, 4, 1, "", "to_rks"], [2, 4, 1, "", "to_uhf"], [2, 4, 1, "", "to_uks"], [2, 4, 1, "", "update"], [2, 4, 1, "", "update_"], [2, 4, 1, "", "update_from_chk"], [2, 4, 1, "", "update_from_chk_"], [2, 5, 1, "", "verbose"], [2, 4, 1, "", "view"], [2, 4, 1, "", "x2c"], [2, 4, 1, "", "x2c1e"]], "vayesta.core.fragmentation": [[5, 1, 1, "", "CAS_Fragmentation"], [5, 1, 1, "", "IAOPAO_Fragmentation"], [5, 1, 1, "", "IAO_Fragmentation"], [5, 1, 1, "", "SAO_Fragmentation"], [5, 1, 1, "", "Site_Fragmentation"], [5, 0, 0, "-", "cas"], [5, 0, 0, "-", "fragmentation"], [5, 0, 0, "-", "helper"], [5, 0, 0, "-", "iao"], [5, 0, 0, "-", "iaopao"], [5, 0, 0, "-", "sao"], [5, 0, 0, "-", "site"], [5, 0, 0, "-", "ufragmentation"]], "vayesta.core.fragmentation.cas": [[5, 2, 1, "", "CAS_Fragmentation"], [5, 2, 1, "", "CAS_Fragmentation_UHF"]], "vayesta.core.fragmentation.cas.CAS_Fragmentation": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_cas_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_cas_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.fragmentation": [[5, 2, 1, "", "Fragmentation"], [5, 1, 1, "", "check_orthonormal"]], "vayesta.core.fragmentation.fragmentation.Fragmentation": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.helper": [[5, 1, 1, "", "log_orbitals"]], "vayesta.core.fragmentation.iao": [[5, 2, 1, "", "IAO_Fragmentation"], [5, 2, 1, "", "IAO_Fragmentation_UHF"], [5, 1, 1, "", "get_default_minao"]], "vayesta.core.fragmentation.iao.IAO_Fragmentation": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_nelectron"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "get_virtual_coeff"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 3, 1, "", "n_iao"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_nelectron"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "get_virtual_coeff"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 3, 1, "", "n_iao"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.iaopao": [[5, 2, 1, "", "IAOPAO_Fragmentation"], [5, 2, 1, "", "IAOPAO_Fragmentation_UHF"]], "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_nelectron"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "get_pao_coeff"], [5, 4, 1, "", "get_virtual_coeff"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 3, 1, "", "n_iao"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_nelectron"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "get_pao_coeff"], [5, 4, 1, "", "get_virtual_coeff"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 3, 1, "", "n_iao"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.sao": [[5, 2, 1, "", "SAO_Fragmentation"], [5, 2, 1, "", "SAO_Fragmentation_UHF"]], "vayesta.core.fragmentation.sao.SAO_Fragmentation": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.site": [[5, 2, 1, "", "Site_Fragmentation"], [5, 2, 1, "", "Site_Fragmentation_UHF"]], "vayesta.core.fragmentation.site.Site_Fragmentation": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.site.Site_Fragmentation_UHF": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.fragmentation.ufragmentation": [[5, 2, 1, "", "Fragmentation_UHF"]], "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF": [[5, 4, 1, "", "add_all_atomic_fragments"], [5, 4, 1, "", "add_atomic_fragment"], [5, 4, 1, "", "add_atomshell_fragment"], [5, 4, 1, "", "add_full_system"], [5, 4, 1, "", "add_orbital_fragment"], [5, 4, 1, "", "check_orthonormal"], [5, 4, 1, "", "get_atom_indices_symbols"], [5, 4, 1, "", "get_atomic_fragment_indices"], [5, 4, 1, "", "get_atoms"], [5, 4, 1, "", "get_coeff"], [5, 4, 1, "", "get_env_coeff"], [5, 4, 1, "", "get_frag_coeff"], [5, 4, 1, "", "get_labels"], [5, 4, 1, "", "get_orbital_fragment_indices"], [5, 4, 1, "", "get_orbital_indices_labels"], [5, 4, 1, "", "get_ovlp"], [5, 4, 1, "", "inversion_symmetry"], [5, 4, 1, "", "kernel"], [5, 3, 1, "", "mf"], [5, 4, 1, "", "mirror_symmetry"], [5, 3, 1, "", "mo_coeff"], [5, 3, 1, "", "mo_occ"], [5, 3, 1, "", "mol"], [5, 5, 1, "", "name"], [5, 3, 1, "", "nao"], [5, 3, 1, "", "nmo"], [5, 4, 1, "", "rotational_symmetry"], [5, 4, 1, "", "search_labels"], [5, 4, 1, "", "secondary_fragments"], [5, 4, 1, "", "symmetric_orth"]], "vayesta.core.helper": [[2, 1, 1, "", "get_dtype"], [2, 1, 1, "", "get_dtype_int"], [2, 1, 1, "", "orbital_sign_convention"], [2, 1, 1, "", "pack_arrays"], [2, 1, 1, "", "pack_metadata"], [2, 1, 1, "", "unpack_arrays"], [2, 1, 1, "", "unpack_metadata"]], "vayesta.core.linalg": [[2, 1, 1, "", "recursive_block_svd"]], "vayesta.core.qemb": [[6, 0, 0, "-", "corrfunc"], [6, 0, 0, "-", "fragment"], [6, 0, 0, "-", "qemb"], [6, 0, 0, "-", "register"], [6, 0, 0, "-", "scrcoulomb"], [6, 0, 0, "-", "ufragment"], [6, 0, 0, "-", "uqemb"]], "vayesta.core.qemb.corrfunc": [[6, 1, 1, "", "get_corrfunc"], [6, 1, 1, "", "get_corrfunc_mf"], [6, 1, 1, "", "get_corrfunc_unrestricted"]], "vayesta.core.qemb.fragment": [[6, 2, 1, "", "Fragment"], [6, 2, 1, "", "Options"], [6, 1, 1, "", "get_fragment_mpi_rank"]], "vayesta.core.qemb.fragment.Fragment": [[6, 2, 1, "", "Flags"], [6, 2, 1, "", "Options"], [6, 2, 1, "", "Results"], [6, 4, 1, "", "add_tsymmetric_fragments"], [6, 4, 1, "", "canonicalize_mo"], [6, 4, 1, "", "change_options"], [6, 4, 1, "", "check_solver"], [6, 3, 1, "", "cluster"], [6, 3, 1, "", "contributes"], [6, 4, 1, "", "copy"], [6, 4, 1, "", "couple_to_fragment"], [6, 4, 1, "", "couple_to_fragments"], [6, 4, 1, "", "diagonalize_cluster_dm"], [6, 4, 1, "", "get_coeff_env"], [6, 4, 1, "", "get_frag_hamil"], [6, 4, 1, "", "get_fragment_dmet_energy"], [6, 4, 1, "", "get_fragment_mf_energy"], [6, 4, 1, "", "get_fragment_mo_energy"], [6, 4, 1, "", "get_fragment_projector"], [6, 4, 1, "", "get_fragments_with_overlap"], [6, 4, 1, "", "get_mo_occupation"], [6, 4, 1, "", "get_overlap"], [6, 4, 1, "", "get_solver"], [6, 4, 1, "", "get_solver_options"], [6, 4, 1, "", "get_symmetry_children"], [6, 4, 1, "", "get_symmetry_error"], [6, 4, 1, "", "get_symmetry_generations"], [6, 4, 1, "", "get_symmetry_operation"], [6, 4, 1, "", "get_symmetry_parent"], [6, 4, 1, "", "get_symmetry_tree"], [6, 3, 1, "", "hamil"], [6, 3, 1, "", "id_name"], [6, 4, 1, "", "log_info"], [6, 4, 1, "", "loop_symmetry_children"], [6, 4, 1, "", "make_bath"], [6, 4, 1, "", "make_cluster"], [6, 4, 1, "", "make_counterpoise_mol"], [6, 4, 1, "", "make_tsymmetric_fragments"], [6, 3, 1, "", "mf"], [6, 3, 1, "", "mol"], [6, 3, 1, "", "n_frag"], [6, 3, 1, "", "n_symmetry_children"], [6, 3, 1, "", "nelectron"], [6, 4, 1, "", "plot3d"], [6, 4, 1, "", "pop_analysis"], [6, 4, 1, "", "project_ref_orbitals"], [6, 4, 1, "", "reset"], [6, 3, 1, "", "results"], [6, 3, 1, "", "symmetry_factor"], [6, 4, 1, "", "trimmed_name"]], "vayesta.core.qemb.fragment.Fragment.Flags": [[6, 5, 1, "", "bath_parent_fragment_id"], [6, 5, 1, "", "is_envelop"], [6, 5, 1, "", "is_secfrag"]], "vayesta.core.qemb.fragment.Fragment.Options": [[6, 4, 1, "", "asdict"], [6, 5, 1, "", "auxiliary"], [6, 5, 1, "", "bath_options"], [6, 4, 1, "", "change_dict_defaults"], [6, 5, 1, "", "coupled_fragments"], [6, 4, 1, "", "dict_with_defaults"], [6, 5, 1, "", "dm_with_frozen"], [6, 4, 1, "", "get"], [6, 4, 1, "", "get_default"], [6, 4, 1, "", "get_default_factory"], [6, 4, 1, "", "items"], [6, 4, 1, "", "keys"], [6, 4, 1, "", "replace"], [6, 5, 1, "", "screening"], [6, 5, 1, "", "solver_options"], [6, 5, 1, "", "store_eris"], [6, 5, 1, "", "sym_factor"], [6, 4, 1, "", "update"], [6, 4, 1, "", "values"]], "vayesta.core.qemb.fragment.Fragment.Results": [[6, 5, 1, "", "converged"], [6, 5, 1, "", "e_corr"], [6, 5, 1, "", "fid"], [6, 5, 1, "", "pwf"], [6, 5, 1, "", "wf"]], "vayesta.core.qemb.fragment.Options": [[6, 4, 1, "", "asdict"], [6, 5, 1, "", "auxiliary"], [6, 5, 1, "", "bath_options"], [6, 4, 1, "", "change_dict_defaults"], [6, 5, 1, "", "coupled_fragments"], [6, 4, 1, "", "dict_with_defaults"], [6, 5, 1, "", "dm_with_frozen"], [6, 4, 1, "", "get"], [6, 4, 1, "", "get_default"], [6, 4, 1, "", "get_default_factory"], [6, 4, 1, "", "items"], [6, 4, 1, "", "keys"], [6, 4, 1, "", "replace"], [6, 5, 1, "", "screening"], [6, 5, 1, "", "solver_options"], [6, 5, 1, "", "store_eris"], [6, 5, 1, "", "sym_factor"], [6, 4, 1, "", "update"], [6, 4, 1, "", "values"]], "vayesta.core.qemb.qemb": [[6, 2, 1, "", "Embedding"], [6, 2, 1, "", "Options"]], "vayesta.core.qemb.qemb.Embedding": [[6, 2, 1, "", "Fragment"], [6, 2, 1, "", "Options"], [6, 4, 1, "", "brueckner_scmf"], [6, 4, 1, "", "build_screened_eris"], [6, 4, 1, "", "cas_fragmentation"], [6, 4, 1, "", "change_options"], [6, 4, 1, "", "check_fragment_symmetry"], [6, 4, 1, "", "check_solver"], [6, 4, 1, "", "communicate_clusters"], [6, 4, 1, "", "create_invsym_fragments"], [6, 4, 1, "", "create_mirrorsym_fragments"], [6, 4, 1, "", "create_rotsym_fragments"], [6, 4, 1, "", "create_symmetric_fragments"], [6, 4, 1, "", "create_transsym_fragments"], [6, 3, 1, "", "df"], [6, 3, 1, "id4", "e_mf"], [6, 3, 1, "", "e_nuc"], [6, 4, 1, "", "get_atomic_charges"], [6, 4, 1, "", "get_average_cluster_size"], [6, 4, 1, "", "get_cderi"], [6, 4, 1, "", "get_corrfunc"], [6, 4, 1, "", "get_corrfunc_mf"], [6, 4, 1, "", "get_dmet_elec_energy"], [6, 4, 1, "", "get_dmet_energy"], [6, 4, 1, "", "get_eris_array"], [6, 4, 1, "", "get_eris_object"], [6, 4, 1, "", "get_exxdiv"], [6, 4, 1, "", "get_fock"], [6, 4, 1, "", "get_fock_for_bath"], [6, 4, 1, "", "get_fock_for_energy"], [6, 4, 1, "", "get_fragment_overlap_norm"], [6, 4, 1, "", "get_fragments"], [6, 4, 1, "", "get_hcore"], [6, 4, 1, "", "get_hcore_for_energy"], [6, 4, 1, "", "get_lo_coeff"], [6, 4, 1, "", "get_max_cluster_size"], [6, 4, 1, "", "get_mean_cluster_size"], [6, 4, 1, "", "get_min_cluster_size"], [6, 4, 1, "", "get_ovlp"], [6, 4, 1, "", "get_ovlp_power"], [6, 4, 1, "", "get_symmetry_child_fragments"], [6, 4, 1, "", "get_symmetry_parent_fragments"], [6, 4, 1, "", "get_veff"], [6, 4, 1, "", "get_veff_for_energy"], [6, 4, 1, "", "has_complete_fragmentation"], [6, 4, 1, "", "has_complete_occupied_fragmentation"], [6, 4, 1, "", "has_complete_virtual_fragmentation"], [6, 3, 1, "", "has_df"], [6, 3, 1, "", "has_exxdiv"], [6, 4, 1, "", "has_orthonormal_fragmentation"], [6, 4, 1, "", "iao_fragmentation"], [6, 4, 1, "", "iaopao_fragmentation"], [6, 4, 1, "", "init_mf"], [6, 5, 1, "", "is_rhf"], [6, 5, 1, "", "is_uhf"], [6, 5, 1, "", "log"], [6, 4, 1, "", "loop"], [6, 4, 1, "", "make_rdm1_demo"], [6, 4, 1, "", "make_rdm2_demo"], [6, 3, 1, "", "mo_coeff"], [6, 3, 1, "", "mo_coeff_occ"], [6, 3, 1, "", "mo_coeff_vir"], [6, 3, 1, "", "mo_energy"], [6, 3, 1, "", "mo_energy_occ"], [6, 3, 1, "", "mo_energy_vir"], [6, 3, 1, "", "mo_occ"], [6, 3, 1, "id0", "mol"], [6, 3, 1, "id1", "nao"], [6, 3, 1, "id2", "ncells"], [6, 3, 1, "id5", "nfrag"], [6, 3, 1, "id3", "nmo"], [6, 3, 1, "", "nocc"], [6, 3, 1, "", "nvir"], [6, 4, 1, "", "optimize_chempot"], [6, 3, 1, "", "pbc_dimension"], [6, 4, 1, "", "pdmet_scmf"], [6, 4, 1, "", "pop_analysis"], [6, 4, 1, "", "require_complete_fragmentation"], [6, 4, 1, "", "reset"], [6, 4, 1, "", "sao_fragmentation"], [6, 4, 1, "", "set_hcore"], [6, 4, 1, "", "set_ovlp"], [6, 4, 1, "", "set_veff"], [6, 4, 1, "", "site_fragmentation"], [6, 5, 1, "", "spinsym"], [6, 4, 1, "", "update_mf"], [6, 4, 1, "", "write_population"]], "vayesta.core.qemb.qemb.Embedding.Fragment": [[6, 2, 1, "", "Flags"], [6, 2, 1, "", "Options"], [6, 2, 1, "", "Results"], [6, 4, 1, "", "add_tsymmetric_fragments"], [6, 4, 1, "", "canonicalize_mo"], [6, 4, 1, "", "change_options"], [6, 4, 1, "", "check_solver"], [6, 3, 1, "", "cluster"], [6, 3, 1, "", "contributes"], [6, 4, 1, "", "copy"], [6, 4, 1, "", "couple_to_fragment"], [6, 4, 1, "", "couple_to_fragments"], [6, 4, 1, "", "diagonalize_cluster_dm"], [6, 4, 1, "", "get_coeff_env"], [6, 4, 1, "", "get_frag_hamil"], [6, 4, 1, "", "get_fragment_dmet_energy"], [6, 4, 1, "", "get_fragment_mf_energy"], [6, 4, 1, "", "get_fragment_mo_energy"], [6, 4, 1, "", "get_fragment_projector"], [6, 4, 1, "", "get_fragments_with_overlap"], [6, 4, 1, "", "get_mo_occupation"], [6, 4, 1, "", "get_overlap"], [6, 4, 1, "", "get_solver"], [6, 4, 1, "", "get_solver_options"], [6, 4, 1, "", "get_symmetry_children"], [6, 4, 1, "", "get_symmetry_error"], [6, 4, 1, "", "get_symmetry_generations"], [6, 4, 1, "", "get_symmetry_operation"], [6, 4, 1, "", "get_symmetry_parent"], [6, 4, 1, "", "get_symmetry_tree"], [6, 3, 1, "", "hamil"], [6, 3, 1, "", "id_name"], [6, 4, 1, "", "log_info"], [6, 4, 1, "", "loop_symmetry_children"], [6, 4, 1, "", "make_bath"], [6, 4, 1, "", "make_cluster"], [6, 4, 1, "", "make_counterpoise_mol"], [6, 4, 1, "", "make_tsymmetric_fragments"], [6, 3, 1, "", "mf"], [6, 3, 1, "", "mol"], [6, 3, 1, "", "n_frag"], [6, 3, 1, "", "n_symmetry_children"], [6, 3, 1, "", "nelectron"], [6, 4, 1, "", "plot3d"], [6, 4, 1, "", "pop_analysis"], [6, 4, 1, "", "project_ref_orbitals"], [6, 4, 1, "", "reset"], [6, 3, 1, "", "results"], [6, 3, 1, "", "symmetry_factor"], [6, 4, 1, "", "trimmed_name"]], "vayesta.core.qemb.qemb.Embedding.Fragment.Flags": [[6, 5, 1, "", "bath_parent_fragment_id"], [6, 5, 1, "", "is_envelop"], [6, 5, 1, "", "is_secfrag"]], "vayesta.core.qemb.qemb.Embedding.Fragment.Options": [[6, 4, 1, "", "asdict"], [6, 5, 1, "", "auxiliary"], [6, 5, 1, "", "bath_options"], [6, 4, 1, "", "change_dict_defaults"], [6, 5, 1, "", "coupled_fragments"], [6, 4, 1, "", "dict_with_defaults"], [6, 5, 1, "", "dm_with_frozen"], [6, 4, 1, "", "get"], [6, 4, 1, "", "get_default"], [6, 4, 1, "", "get_default_factory"], [6, 4, 1, "", "items"], [6, 4, 1, "", "keys"], [6, 4, 1, "", "replace"], [6, 5, 1, "", "screening"], [6, 5, 1, "", "solver_options"], [6, 5, 1, "", "store_eris"], [6, 5, 1, "", "sym_factor"], [6, 4, 1, "", "update"], [6, 4, 1, "", "values"]], "vayesta.core.qemb.qemb.Embedding.Fragment.Results": [[6, 5, 1, "", "converged"], [6, 5, 1, "", "e_corr"], [6, 5, 1, "", "fid"], [6, 5, 1, "", "pwf"], [6, 5, 1, "", "wf"]], "vayesta.core.qemb.qemb.Embedding.Options": [[6, 4, 1, "", "asdict"], [6, 5, 1, "", "bath_options"], [6, 4, 1, "", "change_dict_defaults"], [6, 4, 1, "", "dict_with_defaults"], [6, 5, 1, "", "dm_with_frozen"], [6, 4, 1, "", "get"], [6, 4, 1, "", "get_default"], [6, 4, 1, "", "get_default_factory"], [6, 5, 1, "", "global_frag_chempot"], [6, 4, 1, "", "items"], [6, 4, 1, "", "keys"], [6, 4, 1, "", "replace"], [6, 5, 1, "", "screening"], [6, 5, 1, "", "solver_options"], [6, 5, 1, "", "store_eris"], [6, 5, 1, "", "symmetry_mf_tol"], [6, 5, 1, "", "symmetry_tol"], [6, 4, 1, "", "update"], [6, 4, 1, "", "values"]], "vayesta.core.qemb.qemb.Embedding.self": [[6, 5, 1, "", "fragments"], [6, 5, 1, "", "kcell"], [6, 5, 1, "", "kdf"], [6, 5, 1, "", "kpts"], [6, 5, 1, "", "mf"], [6, 5, 1, "", "mo_coeff"], [6, 5, 1, "", "mo_energy"], [6, 5, 1, "", "mo_occ"]], "vayesta.core.qemb.qemb.Options": [[6, 4, 1, "", "asdict"], [6, 5, 1, "", "bath_options"], [6, 4, 1, "", "change_dict_defaults"], [6, 4, 1, "", "dict_with_defaults"], [6, 5, 1, "", "dm_with_frozen"], [6, 4, 1, "", "get"], [6, 4, 1, "", "get_default"], [6, 4, 1, "", "get_default_factory"], [6, 5, 1, "", "global_frag_chempot"], [6, 4, 1, "", "items"], [6, 4, 1, "", "keys"], [6, 4, 1, "", "replace"], [6, 5, 1, "", "screening"], [6, 5, 1, "", "solver_options"], [6, 5, 1, "", "store_eris"], [6, 5, 1, "", "symmetry_mf_tol"], [6, 5, 1, "", "symmetry_tol"], [6, 4, 1, "", "update"], [6, 4, 1, "", "values"]], "vayesta.core.qemb.register": [[6, 2, 1, "", "FragmentRegister"]], "vayesta.core.qemb.register.FragmentRegister": [[6, 4, 1, "", "get_next"], [6, 4, 1, "", "get_next_id"], [6, 4, 1, "", "get_next_mpi_rank"]], "vayesta.core.qemb.scrcoulomb": [[6, 1, 1, "", "build_screened_eris"], [6, 1, 1, "", "get_screened_eris_ccsd"], [6, 1, 1, "", "get_screened_eris_full"]], "vayesta.core.qemb.ufragment": [[6, 2, 1, "", "UFragment"]], "vayesta.core.qemb.ufragment.UFragment": [[6, 2, 1, "", "Flags"], [6, 2, 1, "", "Options"], [6, 2, 1, "", "Results"], [6, 4, 1, "", "add_tsymmetric_fragments"], [6, 4, 1, "", "canonicalize_mo"], [6, 4, 1, "", "change_options"], [6, 4, 1, "", "check_solver"], [6, 3, 1, "", "cluster"], [6, 3, 1, "", "contributes"], [6, 4, 1, "", "copy"], [6, 4, 1, "", "couple_to_fragment"], [6, 4, 1, "", "couple_to_fragments"], [6, 4, 1, "", "diagonalize_cluster_dm"], [6, 4, 1, "", "get_coeff_env"], [6, 4, 1, "", "get_frag_hamil"], [6, 4, 1, "", "get_fragment_dmet_energy"], [6, 4, 1, "", "get_fragment_mf_energy"], [6, 4, 1, "", "get_fragment_mo_energy"], [6, 4, 1, "", "get_fragment_projector"], [6, 4, 1, "", "get_fragments_with_overlap"], [6, 4, 1, "", "get_mo_occupation"], [6, 4, 1, "", "get_overlap"], [6, 4, 1, "", "get_solver"], [6, 4, 1, "", "get_solver_options"], [6, 4, 1, "", "get_symmetry_children"], [6, 4, 1, "", "get_symmetry_error"], [6, 4, 1, "", "get_symmetry_generations"], [6, 4, 1, "", "get_symmetry_operation"], [6, 4, 1, "", "get_symmetry_parent"], [6, 4, 1, "", "get_symmetry_tree"], [6, 3, 1, "", "hamil"], [6, 3, 1, "", "id_name"], [6, 4, 1, "", "log_info"], [6, 4, 1, "", "loop_symmetry_children"], [6, 4, 1, "", "make_bath"], [6, 4, 1, "", "make_cluster"], [6, 4, 1, "", "make_counterpoise_mol"], [6, 4, 1, "", "make_tsymmetric_fragments"], [6, 3, 1, "", "mf"], [6, 3, 1, "", "mol"], [6, 3, 1, "", "n_frag"], [6, 3, 1, "", "n_symmetry_children"], [6, 3, 1, "", "nelectron"], [6, 4, 1, "", "plot3d"], [6, 4, 1, "", "pop_analysis"], [6, 4, 1, "", "project_ref_orbitals"], [6, 4, 1, "", "reset"], [6, 3, 1, "", "results"], [6, 3, 1, "", "symmetry_factor"], [6, 4, 1, "", "trimmed_name"]], "vayesta.core.qemb.ufragment.UFragment.Flags": [[6, 5, 1, "", "bath_parent_fragment_id"], [6, 5, 1, "", "is_envelop"], [6, 5, 1, "", "is_secfrag"]], "vayesta.core.qemb.ufragment.UFragment.Options": [[6, 4, 1, "", "asdict"], [6, 5, 1, "", "auxiliary"], [6, 5, 1, "", "bath_options"], [6, 4, 1, "", "change_dict_defaults"], [6, 5, 1, "", "coupled_fragments"], [6, 4, 1, "", "dict_with_defaults"], [6, 5, 1, "", "dm_with_frozen"], [6, 4, 1, "", "get"], [6, 4, 1, "", "get_default"], [6, 4, 1, "", "get_default_factory"], [6, 4, 1, "", "items"], [6, 4, 1, "", "keys"], [6, 4, 1, "", "replace"], [6, 5, 1, "", "screening"], [6, 5, 1, "", "solver_options"], [6, 5, 1, "", "store_eris"], [6, 5, 1, "", "sym_factor"], [6, 4, 1, "", "update"], [6, 4, 1, "", "values"]], "vayesta.core.qemb.ufragment.UFragment.Results": [[6, 5, 1, "", "converged"], [6, 5, 1, "", "e_corr"], [6, 5, 1, "", "fid"], [6, 5, 1, "", "pwf"], [6, 5, 1, "", "wf"]], "vayesta.core.qemb.uqemb": [[6, 2, 1, "", "UEmbedding"]], "vayesta.core.qemb.uqemb.UEmbedding": [[6, 5, 1, "", "Fragment"], [6, 2, 1, "", "Options"], [6, 4, 1, "", "brueckner_scmf"], [6, 4, 1, "", "build_screened_eris"], [6, 4, 1, "", "cas_fragmentation"], [6, 4, 1, "", "change_options"], [6, 4, 1, "", "check_fragment_symmetry"], [6, 4, 1, "", "check_solver"], [6, 4, 1, "", "communicate_clusters"], [6, 4, 1, "", "create_invsym_fragments"], [6, 4, 1, "", "create_mirrorsym_fragments"], [6, 4, 1, "", "create_rotsym_fragments"], [6, 4, 1, "", "create_symmetric_fragments"], [6, 4, 1, "", "create_transsym_fragments"], [6, 3, 1, "", "df"], [6, 3, 1, "", "e_mf"], [6, 3, 1, "", "e_nuc"], [6, 4, 1, "", "get_atomic_charges"], [6, 4, 1, "", "get_average_cluster_size"], [6, 4, 1, "", "get_cderi"], [6, 4, 1, "", "get_corrfunc"], [6, 4, 1, "", "get_corrfunc_mf"], [6, 4, 1, "", "get_dmet_elec_energy"], [6, 4, 1, "", "get_dmet_energy"], [6, 4, 1, "", "get_eris_array"], [6, 4, 1, "", "get_eris_array_uhf"], [6, 4, 1, "", "get_eris_object"], [6, 4, 1, "", "get_exxdiv"], [6, 4, 1, "", "get_fock"], [6, 4, 1, "", "get_fock_for_bath"], [6, 4, 1, "", "get_fock_for_energy"], [6, 4, 1, "", "get_fragment_overlap_norm"], [6, 4, 1, "", "get_fragments"], [6, 4, 1, "", "get_hcore"], [6, 4, 1, "", "get_hcore_for_energy"], [6, 4, 1, "", "get_lo_coeff"], [6, 4, 1, "", "get_max_cluster_size"], [6, 4, 1, "", "get_mean_cluster_size"], [6, 4, 1, "", "get_min_cluster_size"], [6, 4, 1, "", "get_ovlp"], [6, 4, 1, "", "get_ovlp_power"], [6, 4, 1, "", "get_symmetry_child_fragments"], [6, 4, 1, "", "get_symmetry_parent_fragments"], [6, 4, 1, "", "get_veff"], [6, 4, 1, "", "get_veff_for_energy"], [6, 4, 1, "", "has_complete_fragmentation"], [6, 4, 1, "", "has_complete_occupied_fragmentation"], [6, 4, 1, "", "has_complete_virtual_fragmentation"], [6, 3, 1, "", "has_df"], [6, 3, 1, "", "has_exxdiv"], [6, 4, 1, "", "has_orthonormal_fragmentation"], [6, 4, 1, "", "iao_fragmentation"], [6, 4, 1, "", "iaopao_fragmentation"], [6, 4, 1, "", "init_mf"], [6, 5, 1, "", "is_rhf"], [6, 5, 1, "", "is_uhf"], [6, 4, 1, "", "loop"], [6, 4, 1, "", "make_rdm1_demo"], [6, 4, 1, "", "make_rdm2_demo"], [6, 3, 1, "", "mo_coeff"], [6, 3, 1, "", "mo_coeff_occ"], [6, 3, 1, "", "mo_coeff_vir"], [6, 3, 1, "", "mo_energy"], [6, 3, 1, "", "mo_energy_occ"], [6, 3, 1, "", "mo_energy_vir"], [6, 3, 1, "", "mo_occ"], [6, 3, 1, "", "mol"], [6, 3, 1, "", "nao"], [6, 3, 1, "", "ncells"], [6, 3, 1, "", "nfrag"], [6, 3, 1, "", "nmo"], [6, 3, 1, "", "nocc"], [6, 3, 1, "", "nvir"], [6, 4, 1, "", "optimize_chempot"], [6, 3, 1, "", "pbc_dimension"], [6, 4, 1, "", "pdmet_scmf"], [6, 4, 1, "", "pop_analysis"], [6, 4, 1, "", "require_complete_fragmentation"], [6, 4, 1, "", "reset"], [6, 4, 1, "", "sao_fragmentation"], [6, 4, 1, "", "set_hcore"], [6, 4, 1, "", "set_ovlp"], [6, 4, 1, "", "set_veff"], [6, 4, 1, "", "site_fragmentation"], [6, 5, 1, "", "spinsym"], [6, 4, 1, "", "update_mf"], [6, 4, 1, "", "write_population"]], "vayesta.core.qemb.uqemb.UEmbedding.Options": [[6, 4, 1, "", "asdict"], [6, 5, 1, "", "bath_options"], [6, 4, 1, "", "change_dict_defaults"], [6, 4, 1, "", "dict_with_defaults"], [6, 5, 1, "", "dm_with_frozen"], [6, 4, 1, "", "get"], [6, 4, 1, "", "get_default"], [6, 4, 1, "", "get_default_factory"], [6, 5, 1, "", "global_frag_chempot"], [6, 4, 1, "", "items"], [6, 4, 1, "", "keys"], [6, 4, 1, "", "replace"], [6, 5, 1, "", "screening"], [6, 5, 1, "", "solver_options"], [6, 5, 1, "", "store_eris"], [6, 5, 1, "", "symmetry_mf_tol"], [6, 5, 1, "", "symmetry_tol"], [6, 4, 1, "", "update"], [6, 4, 1, "", "values"]], "vayesta.core.scmf": [[7, 1, 1, "", "Brueckner"], [7, 1, 1, "", "PDMET"], [7, 0, 0, "-", "brueckner"], [7, 0, 0, "-", "pdmet"], [7, 0, 0, "-", "scmf"]], "vayesta.core.scmf.brueckner": [[7, 2, 1, "", "Brueckner_RHF"], [7, 2, 1, "", "Brueckner_UHF"]], "vayesta.core.scmf.brueckner.Brueckner_RHF": [[7, 4, 1, "", "check_convergence"], [7, 3, 1, "", "e_tot"], [7, 3, 1, "", "e_tot_oneshot"], [7, 4, 1, "", "get_diis"], [7, 4, 1, "", "get_t1"], [7, 4, 1, "", "kernel"], [7, 3, 1, "", "kernel_orig"], [7, 3, 1, "", "log"], [7, 3, 1, "", "mf"], [7, 5, 1, "", "name"], [7, 4, 1, "", "update_mo_coeff"]], "vayesta.core.scmf.brueckner.Brueckner_UHF": [[7, 4, 1, "", "check_convergence"], [7, 3, 1, "", "e_tot"], [7, 3, 1, "", "e_tot_oneshot"], [7, 4, 1, "", "get_diis"], [7, 4, 1, "", "get_t1"], [7, 4, 1, "", "kernel"], [7, 3, 1, "", "kernel_orig"], [7, 3, 1, "", "log"], [7, 3, 1, "", "mf"], [7, 5, 1, "", "name"], [7, 4, 1, "", "update_mo_coeff"]], "vayesta.core.scmf.pdmet": [[7, 2, 1, "", "PDMET_RHF"], [7, 2, 1, "", "PDMET_UHF"]], "vayesta.core.scmf.pdmet.PDMET_RHF": [[7, 4, 1, "", "check_convergence"], [7, 3, 1, "", "e_tot"], [7, 3, 1, "", "e_tot_oneshot"], [7, 4, 1, "", "get_diis"], [7, 4, 1, "", "get_rdm1"], [7, 4, 1, "", "kernel"], [7, 3, 1, "", "kernel_orig"], [7, 3, 1, "", "log"], [7, 3, 1, "", "mf"], [7, 5, 1, "", "name"], [7, 4, 1, "", "update_mo_coeff"]], "vayesta.core.scmf.pdmet.PDMET_UHF": [[7, 4, 1, "", "check_convergence"], [7, 3, 1, "", "e_tot"], [7, 3, 1, "", "e_tot_oneshot"], [7, 4, 1, "", "get_diis"], [7, 4, 1, "", "get_rdm1"], [7, 4, 1, "", "kernel"], [7, 3, 1, "", "kernel_orig"], [7, 3, 1, "", "log"], [7, 3, 1, "", "mf"], [7, 5, 1, "", "name"], [7, 4, 1, "", "update_mo_coeff"]], "vayesta.core.scmf.scmf": [[7, 2, 1, "", "SCMF"]], "vayesta.core.scmf.scmf.SCMF": [[7, 4, 1, "", "check_convergence"], [7, 3, 1, "", "e_tot"], [7, 3, 1, "", "e_tot_oneshot"], [7, 4, 1, "", "get_diis"], [7, 4, 1, "", "kernel"], [7, 3, 1, "", "kernel_orig"], [7, 3, 1, "", "log"], [7, 3, 1, "", "mf"], [7, 5, 1, "", "name"], [7, 4, 1, "", "update_mo_coeff"]], "vayesta.core.spinalg": [[2, 1, 1, "", "add_numbers"], [2, 1, 1, "", "hstack_matrices"]], "vayesta.core.symmetry": [[8, 0, 0, "-", "group"], [8, 0, 0, "-", "operation"], [8, 0, 0, "-", "symmetry"], [8, 0, 0, "-", "tsymmetry"]], "vayesta.core.symmetry.group": [[8, 2, 1, "", "SymmetryGroup"]], "vayesta.core.symmetry.group.SymmetryGroup": [[8, 4, 1, "", "add_rotation"], [8, 4, 1, "", "clear_translations"], [8, 4, 1, "", "compare_atoms"], [8, 3, 1, "", "dimension"], [8, 4, 1, "", "get_closest_atom"], [8, 3, 1, "", "nao"], [8, 3, 1, "", "natom"], [8, 4, 1, "", "set_translations"]], "vayesta.core.symmetry.operation": [[8, 2, 1, "", "SymmetryIdentity"], [8, 2, 1, "", "SymmetryInversion"], [8, 2, 1, "", "SymmetryOperation"], [8, 2, 1, "", "SymmetryReflection"], [8, 2, 1, "", "SymmetryRotation"], [8, 2, 1, "", "SymmetryTranslation"]], "vayesta.core.symmetry.operation.SymmetryIdentity": [[8, 4, 1, "", "apply_to_point"], [8, 4, 1, "", "call_kernel"], [8, 4, 1, "", "call_wrapper"], [8, 4, 1, "", "get_ao_reorder"], [8, 4, 1, "", "get_atom_reorder"], [8, 3, 1, "", "mol"], [8, 3, 1, "", "nao"], [8, 3, 1, "", "natom"], [8, 4, 1, "", "rotate_angular_orbitals"], [8, 3, 1, "", "xtol"]], "vayesta.core.symmetry.operation.SymmetryInversion": [[8, 4, 1, "", "apply_to_point"], [8, 4, 1, "", "call_kernel"], [8, 4, 1, "", "call_wrapper"], [8, 4, 1, "", "get_ao_reorder"], [8, 4, 1, "", "get_atom_reorder"], [8, 3, 1, "", "mol"], [8, 3, 1, "", "nao"], [8, 3, 1, "", "natom"], [8, 4, 1, "", "rotate_angular_orbitals"], [8, 3, 1, "", "xtol"]], "vayesta.core.symmetry.operation.SymmetryOperation": [[8, 4, 1, "", "apply_to_point"], [8, 4, 1, "", "call_kernel"], [8, 4, 1, "", "call_wrapper"], [8, 4, 1, "", "get_ao_reorder"], [8, 4, 1, "", "get_atom_reorder"], [8, 3, 1, "", "mol"], [8, 3, 1, "", "nao"], [8, 3, 1, "", "natom"], [8, 4, 1, "", "rotate_angular_orbitals"], [8, 3, 1, "", "xtol"]], "vayesta.core.symmetry.operation.SymmetryReflection": [[8, 4, 1, "", "apply_to_point"], [8, 4, 1, "", "as_matrix"], [8, 4, 1, "", "call_kernel"], [8, 4, 1, "", "call_wrapper"], [8, 4, 1, "", "get_ao_reorder"], [8, 4, 1, "", "get_atom_reorder"], [8, 3, 1, "", "mol"], [8, 3, 1, "", "nao"], [8, 3, 1, "", "natom"], [8, 4, 1, "", "rotate_angular_orbitals"], [8, 3, 1, "", "xtol"]], "vayesta.core.symmetry.operation.SymmetryRotation": [[8, 4, 1, "", "apply_to_point"], [8, 4, 1, "", "as_matrix"], [8, 4, 1, "", "call_kernel"], [8, 4, 1, "", "call_wrapper"], [8, 4, 1, "", "get_ao_reorder"], [8, 4, 1, "", "get_atom_reorder"], [8, 3, 1, "", "mol"], [8, 3, 1, "", "nao"], [8, 3, 1, "", "natom"], [8, 4, 1, "", "rotate_angular_orbitals"], [8, 3, 1, "", "xtol"]], "vayesta.core.symmetry.operation.SymmetryTranslation": [[8, 4, 1, "", "apply_to_point"], [8, 3, 1, "", "boundary_phases"], [8, 4, 1, "", "call_kernel"], [8, 4, 1, "", "call_wrapper"], [8, 4, 1, "", "get_ao_reorder"], [8, 4, 1, "", "get_atom_reorder"], [8, 3, 1, "", "inv_lattice_vectors"], [8, 4, 1, "", "inverse"], [8, 3, 1, "", "inverse_atom_reorder"], [8, 3, 1, "", "lattice_vectors"], [8, 3, 1, "", "mol"], [8, 3, 1, "", "nao"], [8, 3, 1, "", "natom"], [8, 4, 1, "", "rotate_angular_orbitals"], [8, 3, 1, "", "vector_xyz"], [8, 3, 1, "", "xtol"]], "vayesta.core.symmetry.symmetry": [[8, 2, 1, "", "Symmetry"], [8, 1, 1, "", "angle_between"], [8, 1, 1, "", "unit_vector"]], "vayesta.core.symmetry.symmetry.Symmetry": [[8, 4, 1, "", "atom_coords"], [8, 3, 1, "", "cell"], [8, 4, 1, "", "compare_atoms"], [8, 4, 1, "", "find_subcells"], [8, 4, 1, "", "get_unique_atoms"], [8, 3, 1, "", "has_pbc"], [8, 4, 1, "", "lattice_vectors"], [8, 3, 1, "", "mol"], [8, 3, 1, "", "natom"], [8, 3, 1, "", "natom_unique"], [8, 3, 1, "", "pbcndims"], [8, 4, 1, "", "primitive_lattice_vectors"]], "vayesta.core.symmetry.tsymmetry": [[8, 1, 1, "", "compare_atoms"], [8, 1, 1, "", "get_mesh_tvecs"], [8, 1, 1, "", "get_tsymmetry_op"], [8, 1, 1, "", "loop_tvecs"], [8, 1, 1, "", "reorder_aos"], [8, 1, 1, "", "reorder_atoms"], [8, 1, 1, "", "reorder_atoms2aos"], [8, 1, 1, "", "to_bohr"], [8, 1, 1, "", "tsymmetric_atoms"]], "vayesta.core.types": [[9, 0, 0, "-", "cluster"], [9, 0, 0, "-", "orbitals"], [10, 0, 0, "-", "wf"]], "vayesta.core.types.cluster": [[9, 2, 1, "", "Cluster"], [9, 2, 1, "", "ClusterRHF"], [9, 2, 1, "", "ClusterUHF"]], "vayesta.core.types.cluster.Cluster": [[9, 4, 1, "", "basis_transform"], [9, 3, 1, "", "c_active"], [9, 3, 1, "", "c_active_occ"], [9, 3, 1, "", "c_active_vir"], [9, 3, 1, "", "c_frozen"], [9, 3, 1, "", "c_frozen_occ"], [9, 3, 1, "", "c_frozen_vir"], [9, 3, 1, "", "c_occ"], [9, 3, 1, "", "c_total"], [9, 3, 1, "", "c_total_occ"], [9, 3, 1, "", "c_total_vir"], [9, 3, 1, "", "c_vir"], [9, 3, 1, "", "coeff"], [9, 4, 1, "", "copy"], [9, 4, 1, "", "from_coeffs"], [9, 3, 1, "", "nocc"], [9, 3, 1, "", "nocc_active"], [9, 3, 1, "", "nocc_frozen"], [9, 3, 1, "", "nocc_total"], [9, 3, 1, "", "norb"], [9, 3, 1, "", "norb_active"], [9, 3, 1, "", "norb_frozen"], [9, 3, 1, "", "norb_total"], [9, 3, 1, "", "nvir"], [9, 3, 1, "", "nvir_active"], [9, 3, 1, "", "nvir_frozen"], [9, 3, 1, "", "nvir_total"]], "vayesta.core.types.cluster.ClusterRHF": [[9, 4, 1, "", "basis_transform"], [9, 3, 1, "", "c_active"], [9, 3, 1, "", "c_active_occ"], [9, 3, 1, "", "c_active_vir"], [9, 3, 1, "", "c_frozen"], [9, 3, 1, "", "c_frozen_occ"], [9, 3, 1, "", "c_frozen_vir"], [9, 3, 1, "", "c_occ"], [9, 3, 1, "", "c_total"], [9, 3, 1, "", "c_total_occ"], [9, 3, 1, "", "c_total_vir"], [9, 3, 1, "", "c_vir"], [9, 3, 1, "", "coeff"], [9, 4, 1, "", "copy"], [9, 4, 1, "", "from_coeffs"], [9, 4, 1, "", "get_active_indices"], [9, 4, 1, "", "get_active_slice"], [9, 4, 1, "", "get_frozen_indices"], [9, 3, 1, "", "nocc"], [9, 3, 1, "", "nocc_active"], [9, 3, 1, "", "nocc_frozen"], [9, 3, 1, "", "nocc_total"], [9, 3, 1, "", "norb"], [9, 3, 1, "", "norb_active"], [9, 3, 1, "", "norb_frozen"], [9, 3, 1, "", "norb_total"], [9, 3, 1, "", "nvir"], [9, 3, 1, "", "nvir_active"], [9, 3, 1, "", "nvir_frozen"], [9, 3, 1, "", "nvir_total"], [9, 4, 1, "", "repr_size"], [9, 5, 1, "", "spinsym"]], "vayesta.core.types.cluster.ClusterUHF": [[9, 4, 1, "", "basis_transform"], [9, 3, 1, "", "c_active"], [9, 3, 1, "", "c_active_occ"], [9, 3, 1, "", "c_active_vir"], [9, 3, 1, "", "c_frozen"], [9, 3, 1, "", "c_frozen_occ"], [9, 3, 1, "", "c_frozen_vir"], [9, 3, 1, "", "c_occ"], [9, 3, 1, "", "c_total"], [9, 3, 1, "", "c_total_occ"], [9, 3, 1, "", "c_total_vir"], [9, 3, 1, "", "c_vir"], [9, 3, 1, "", "coeff"], [9, 4, 1, "", "copy"], [9, 4, 1, "", "from_coeffs"], [9, 4, 1, "", "get_active_indices"], [9, 4, 1, "", "get_active_slice"], [9, 4, 1, "", "get_frozen_indices"], [9, 3, 1, "", "nocc"], [9, 3, 1, "", "nocc_active"], [9, 3, 1, "", "nocc_frozen"], [9, 3, 1, "", "nocc_total"], [9, 3, 1, "", "norb"], [9, 3, 1, "", "norb_active"], [9, 3, 1, "", "norb_frozen"], [9, 3, 1, "", "norb_total"], [9, 3, 1, "", "nvir"], [9, 3, 1, "", "nvir_active"], [9, 3, 1, "", "nvir_frozen"], [9, 3, 1, "", "nvir_total"], [9, 4, 1, "", "repr_size"], [9, 5, 1, "", "spinsym"]], "vayesta.core.types.orbitals": [[9, 2, 1, "", "GeneralOrbitals"], [9, 1, 1, "", "Orbitals"], [9, 2, 1, "", "SpatialOrbitals"], [9, 2, 1, "", "SpinOrbitals"]], "vayesta.core.types.orbitals.GeneralOrbitals": [[9, 4, 1, "", "basis_transform"], [9, 3, 1, "", "coeff_occ"], [9, 3, 1, "", "coeff_vir"], [9, 4, 1, "", "copy"], [9, 4, 1, "", "from_spatial_orbitals"], [9, 4, 1, "", "from_spin_orbitals"], [9, 3, 1, "", "nelec"], [9, 3, 1, "", "nocc"], [9, 3, 1, "", "norb"], [9, 3, 1, "", "nspin"], [9, 3, 1, "", "nvir"], [9, 4, 1, "", "pack"], [9, 4, 1, "", "to_general_orbitals"], [9, 4, 1, "", "to_spin_orbitals"], [9, 4, 1, "", "unpack"]], "vayesta.core.types.orbitals.SpatialOrbitals": [[9, 4, 1, "", "basis_transform"], [9, 3, 1, "", "coeff_occ"], [9, 3, 1, "", "coeff_vir"], [9, 4, 1, "", "copy"], [9, 3, 1, "", "nelec"], [9, 3, 1, "", "nocc"], [9, 3, 1, "", "norb"], [9, 3, 1, "", "nspin"], [9, 3, 1, "", "nvir"], [9, 4, 1, "", "pack"], [9, 4, 1, "", "to_general_orbitals"], [9, 4, 1, "", "to_spin_orbitals"], [9, 4, 1, "", "unpack"]], "vayesta.core.types.orbitals.SpinOrbitals": [[9, 4, 1, "", "basis_transform"], [9, 4, 1, "", "copy"], [9, 4, 1, "", "from_spatial_orbitals"], [9, 3, 1, "", "nocca"], [9, 3, 1, "", "noccb"], [9, 3, 1, "", "norba"], [9, 3, 1, "", "norbb"], [9, 3, 1, "", "nspin"], [9, 3, 1, "", "nvira"], [9, 3, 1, "", "nvirb"], [9, 4, 1, "", "pack"], [9, 4, 1, "", "to_general_orbitals"], [9, 4, 1, "", "unpack"]], "vayesta.core.types.wf": [[10, 1, 1, "", "CCSDTQ_WaveFunction"], [10, 1, 1, "", "CCSD_WaveFunction"], [10, 1, 1, "", "CISDTQ_WaveFunction"], [10, 1, 1, "", "CISD_WaveFunction"], [10, 1, 1, "", "FCI_WaveFunction"], [10, 1, 1, "", "HF_WaveFunction"], [10, 1, 1, "", "MP2_WaveFunction"], [10, 2, 1, "", "RCCSDTQ_WaveFunction"], [10, 2, 1, "", "RCCSD_WaveFunction"], [10, 2, 1, "", "RCISDTQ_WaveFunction"], [10, 2, 1, "", "RCISD_WaveFunction"], [10, 2, 1, "", "RFCI_WaveFunction"], [10, 2, 1, "", "RHF_WaveFunction"], [10, 2, 1, "", "RMP2_WaveFunction"], [10, 2, 1, "", "UCCSDTQ_WaveFunction"], [10, 2, 1, "", "UCCSD_WaveFunction"], [10, 2, 1, "", "UCISDTQ_WaveFunction"], [10, 2, 1, "", "UCISD_WaveFunction"], [10, 2, 1, "", "UFCI_WaveFunction"], [10, 2, 1, "", "UHF_WaveFunction"], [10, 2, 1, "", "UMP2_WaveFunction"], [10, 2, 1, "", "WaveFunction"], [10, 0, 0, "-", "ccsd"], [10, 0, 0, "-", "ccsdtq"], [10, 0, 0, "-", "cisd"], [10, 0, 0, "-", "cisdtq"], [10, 0, 0, "-", "fci"], [10, 0, 0, "-", "hf"], [10, 0, 0, "-", "mp2"], [10, 0, 0, "-", "project"], [10, 0, 0, "-", "t_to_c"], [10, 0, 0, "-", "wf"]], "vayesta.core.types.wf.RCCSDTQ_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.RCCSD_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 4, 1, "", "make_rdm2_non_cumulant"], [10, 4, 1, "", "multiply"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "pack"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"], [10, 4, 1, "", "unpack"]], "vayesta.core.types.wf.RCISDTQ_WaveFunction": [[10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.RCISD_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "get_cisdvec"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"]], "vayesta.core.types.wf.RFCI_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_cisdtq"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_unrestricted"], [10, 3, 1, "", "c0"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"]], "vayesta.core.types.wf.RHF_WaveFunction": [[10, 4, 1, "", "as_restricted"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.RMP2_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_restricted"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 4, 1, "", "multiply"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "pack"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"], [10, 4, 1, "", "unpack"]], "vayesta.core.types.wf.UCCSDTQ_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.UCCSD_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 3, 1, "", "l1a"], [10, 3, 1, "", "l1b"], [10, 3, 1, "", "l2aa"], [10, 3, 1, "", "l2ab"], [10, 3, 1, "", "l2ba"], [10, 3, 1, "", "l2bb"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 4, 1, "", "make_rdm2_non_cumulant"], [10, 4, 1, "", "multiply"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "pack"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"], [10, 3, 1, "", "t1a"], [10, 3, 1, "", "t1b"], [10, 3, 1, "", "t2aa"], [10, 3, 1, "", "t2ab"], [10, 3, 1, "", "t2ba"], [10, 3, 1, "", "t2bb"], [10, 4, 1, "", "unpack"]], "vayesta.core.types.wf.UCISDTQ_WaveFunction": [[10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.UCISD_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 3, 1, "", "c1a"], [10, 3, 1, "", "c1b"], [10, 3, 1, "", "c2aa"], [10, 3, 1, "", "c2ab"], [10, 3, 1, "", "c2ba"], [10, 3, 1, "", "c2bb"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "get_cisdvec"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"]], "vayesta.core.types.wf.UFCI_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_cisdtq"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_unrestricted"], [10, 3, 1, "", "c0"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"]], "vayesta.core.types.wf.UHF_WaveFunction": [[10, 4, 1, "", "as_restricted"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.UMP2_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_restricted"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 4, 1, "", "multiply"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "pack"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"], [10, 3, 1, "", "t2aa"], [10, 3, 1, "", "t2ab"], [10, 3, 1, "", "t2ba"], [10, 3, 1, "", "t2bb"], [10, 4, 1, "", "unpack"]], "vayesta.core.types.wf.WaveFunction": [[10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.ccsd": [[10, 1, 1, "", "CCSD_WaveFunction"], [10, 2, 1, "", "RCCSD_WaveFunction"], [10, 2, 1, "", "UCCSD_WaveFunction"]], "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 4, 1, "", "make_rdm2_non_cumulant"], [10, 4, 1, "", "multiply"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "pack"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"], [10, 4, 1, "", "unpack"]], "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 3, 1, "", "l1a"], [10, 3, 1, "", "l1b"], [10, 3, 1, "", "l2aa"], [10, 3, 1, "", "l2ab"], [10, 3, 1, "", "l2ba"], [10, 3, 1, "", "l2bb"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 4, 1, "", "make_rdm2_non_cumulant"], [10, 4, 1, "", "multiply"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "pack"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"], [10, 3, 1, "", "t1a"], [10, 3, 1, "", "t1b"], [10, 3, 1, "", "t2aa"], [10, 3, 1, "", "t2ab"], [10, 3, 1, "", "t2ba"], [10, 3, 1, "", "t2bb"], [10, 4, 1, "", "unpack"]], "vayesta.core.types.wf.ccsdtq": [[10, 1, 1, "", "CCSDTQ_WaveFunction"], [10, 2, 1, "", "RCCSDTQ_WaveFunction"], [10, 2, 1, "", "UCCSDTQ_WaveFunction"]], "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.cisd": [[10, 1, 1, "", "CISD_WaveFunction"], [10, 2, 1, "", "RCISD_WaveFunction"], [10, 2, 1, "", "UCISD_WaveFunction"]], "vayesta.core.types.wf.cisd.RCISD_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "get_cisdvec"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"]], "vayesta.core.types.wf.cisd.UCISD_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 3, 1, "", "c1a"], [10, 3, 1, "", "c1b"], [10, 3, 1, "", "c2aa"], [10, 3, 1, "", "c2ab"], [10, 3, 1, "", "c2ba"], [10, 3, 1, "", "c2bb"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "get_cisdvec"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"]], "vayesta.core.types.wf.cisdtq": [[10, 1, 1, "", "CISDTQ_WaveFunction"], [10, 2, 1, "", "RCISDTQ_WaveFunction"], [10, 2, 1, "", "UCISDTQ_WaveFunction"]], "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction": [[10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction": [[10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.fci": [[10, 1, 1, "", "FCI_WaveFunction"], [10, 2, 1, "", "RFCI_WaveFunction"], [10, 2, 1, "", "UFCI_WaveFunction"], [10, 2, 1, "", "UFCI_WaveFunction_w_dummy"]], "vayesta.core.types.wf.fci.RFCI_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_cisdtq"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_unrestricted"], [10, 3, 1, "", "c0"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"]], "vayesta.core.types.wf.fci.UFCI_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_cisdtq"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_unrestricted"], [10, 3, 1, "", "c0"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"]], "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_ccsdtq"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_cisdtq"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_unrestricted"], [10, 3, 1, "", "c0"], [10, 3, 1, "", "dummy_mo"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "ndummy"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"]], "vayesta.core.types.wf.hf": [[10, 1, 1, "", "HF_WaveFunction"], [10, 2, 1, "", "RHF_WaveFunction"], [10, 2, 1, "", "UHF_WaveFunction"]], "vayesta.core.types.wf.hf.RHF_WaveFunction": [[10, 4, 1, "", "as_restricted"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.hf.UHF_WaveFunction": [[10, 4, 1, "", "as_restricted"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.types.wf.mp2": [[10, 1, 1, "", "MP2_WaveFunction"], [10, 2, 1, "", "RMP2_WaveFunction"], [10, 2, 1, "", "UMP2_WaveFunction"]], "vayesta.core.types.wf.mp2.RMP2_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_restricted"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 4, 1, "", "multiply"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "pack"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"], [10, 4, 1, "", "unpack"]], "vayesta.core.types.wf.mp2.UMP2_WaveFunction": [[10, 4, 1, "", "as_ccsd"], [10, 4, 1, "", "as_cisd"], [10, 4, 1, "", "as_fci"], [10, 4, 1, "", "as_mp2"], [10, 4, 1, "", "as_restricted"], [10, 4, 1, "", "as_unrestricted"], [10, 4, 1, "", "copy"], [10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 4, 1, "", "multiply"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"], [10, 4, 1, "", "pack"], [10, 4, 1, "", "project"], [10, 4, 1, "", "restore"], [10, 3, 1, "", "t2aa"], [10, 3, 1, "", "t2ab"], [10, 3, 1, "", "t2ba"], [10, 3, 1, "", "t2bb"], [10, 4, 1, "", "unpack"]], "vayesta.core.types.wf.project": [[10, 1, 1, "", "project_c1"], [10, 1, 1, "", "project_c2"], [10, 1, 1, "", "project_uc1"], [10, 1, 1, "", "project_uc2"], [10, 1, 1, "", "symmetrize_c2"], [10, 1, 1, "", "symmetrize_uc2"]], "vayesta.core.types.wf.t_to_c": [[10, 1, 1, "", "t1_rhf"], [10, 1, 1, "", "t1_uhf"], [10, 1, 1, "", "t2_rhf"], [10, 1, 1, "", "t2_uhf"], [10, 1, 1, "", "t3_rhf"], [10, 1, 1, "", "t3_uhf"], [10, 1, 1, "", "t4_rhf"], [10, 1, 1, "", "t4_uhf"]], "vayesta.core.types.wf.wf": [[10, 2, 1, "", "WaveFunction"]], "vayesta.core.types.wf.wf.WaveFunction": [[10, 4, 1, "", "from_pyscf"], [10, 4, 1, "", "make_rdm1"], [10, 4, 1, "", "make_rdm2"], [10, 3, 1, "", "nelec"], [10, 3, 1, "", "nocc"], [10, 3, 1, "", "nocca"], [10, 3, 1, "", "noccb"], [10, 3, 1, "", "norb"], [10, 3, 1, "", "norba"], [10, 3, 1, "", "norbb"], [10, 3, 1, "", "nvir"], [10, 3, 1, "", "nvira"], [10, 3, 1, "", "nvirb"]], "vayesta.core.util": [[2, 6, 1, "", "AbstractMethodError"], [2, 6, 1, "", "ConvergenceError"], [2, 6, 1, "", "ImaginaryPartError"], [2, 6, 1, "", "NotCalculatedError"], [2, 2, 1, "", "Object"], [2, 2, 1, "", "OptionsBase"], [2, 6, 1, "", "OrthonormalityError"], [2, 1, 1, "", "brange"], [2, 1, 1, "", "break_into_lines"], [2, 1, 1, "", "cache"], [2, 1, 1, "", "call_once"], [2, 1, 1, "", "callif"], [2, 1, 1, "", "decompress_axes"], [2, 1, 1, "", "deprecated"], [2, 1, 1, "", "dot"], [2, 1, 1, "", "einsum"], [2, 1, 1, "", "energy_string"], [2, 1, 1, "", "fix_orbital_sign"], [2, 1, 1, "", "get_used_memory"], [2, 1, 1, "", "getattr_recursive"], [2, 1, 1, "", "getif"], [2, 1, 1, "", "hstack"], [2, 1, 1, "", "log_method"], [2, 1, 1, "", "log_time"], [2, 1, 1, "", "memory_string"], [2, 1, 1, "", "permutations_with_signs"], [2, 1, 1, "", "replace_attr"], [2, 1, 1, "", "setattr_recursive"], [2, 1, 1, "", "split_into_blocks"], [2, 1, 1, "", "time_string"], [2, 1, 1, "", "timer"], [2, 1, 1, "", "tril_indices_ndim"], [2, 1, 1, "", "with_doc"]], "vayesta.core.util.AbstractMethodError": [[2, 5, 1, "", "args"], [2, 4, 1, "", "with_traceback"]], "vayesta.core.util.ConvergenceError": [[2, 5, 1, "", "args"], [2, 4, 1, "", "with_traceback"]], "vayesta.core.util.ImaginaryPartError": [[2, 5, 1, "", "args"], [2, 4, 1, "", "with_traceback"]], "vayesta.core.util.NotCalculatedError": [[2, 5, 1, "", "args"], [2, 4, 1, "", "with_traceback"]], "vayesta.core.util.OptionsBase": [[2, 4, 1, "", "asdict"], [2, 4, 1, "", "change_dict_defaults"], [2, 4, 1, "", "dict_with_defaults"], [2, 4, 1, "", "get"], [2, 4, 1, "", "get_default"], [2, 4, 1, "", "get_default_factory"], [2, 4, 1, "", "items"], [2, 4, 1, "", "keys"], [2, 4, 1, "", "replace"], [2, 4, 1, "", "update"], [2, 4, 1, "", "values"]], "vayesta.core.util.OrthonormalityError": [[2, 5, 1, "", "args"], [2, 4, 1, "", "with_traceback"]], "vayesta.core.vlog": [[2, 2, 1, "", "LevelExcludeFilter"], [2, 2, 1, "", "LevelIncludeFilter"], [2, 2, 1, "", "LevelRangeFilter"], [2, 2, 1, "", "NoLogger"], [2, 2, 1, "", "VFileHandler"], [2, 2, 1, "", "VFormatter"], [2, 2, 1, "", "VStreamHandler"], [2, 1, 1, "", "get_logname"], [2, 1, 1, "", "init_logging"]], "vayesta.core.vlog.LevelExcludeFilter": [[2, 4, 1, "", "filter"]], "vayesta.core.vlog.LevelIncludeFilter": [[2, 4, 1, "", "filter"]], "vayesta.core.vlog.LevelRangeFilter": [[2, 4, 1, "", "filter"]], "vayesta.core.vlog.VFileHandler": [[2, 4, 1, "", "acquire"], [2, 4, 1, "", "addFilter"], [2, 4, 1, "", "close"], [2, 4, 1, "", "createLock"], [2, 4, 1, "", "emit"], [2, 4, 1, "", "filter"], [2, 4, 1, "", "flush"], [2, 4, 1, "", "format"], [2, 4, 1, "", "get_name"], [2, 4, 1, "", "handle"], [2, 4, 1, "", "handleError"], [2, 3, 1, "", "name"], [2, 4, 1, "", "release"], [2, 4, 1, "", "removeFilter"], [2, 4, 1, "", "setFormatter"], [2, 4, 1, "", "setLevel"], [2, 4, 1, "", "setStream"], [2, 4, 1, "", "set_name"], [2, 5, 1, "", "terminator"]], "vayesta.core.vlog.VFormatter": [[2, 4, 1, "", "converter"], [2, 5, 1, "", "default_msec_format"], [2, 5, 1, "", "default_time_format"], [2, 4, 1, "", "format"], [2, 4, 1, "", "formatException"], [2, 4, 1, "", "formatMessage"], [2, 4, 1, "", "formatStack"], [2, 4, 1, "", "formatTime"], [2, 4, 1, "", "usesTime"]], "vayesta.core.vlog.VStreamHandler": [[2, 4, 1, "", "acquire"], [2, 4, 1, "", "addFilter"], [2, 4, 1, "", "close"], [2, 4, 1, "", "createLock"], [2, 4, 1, "", "emit"], [2, 4, 1, "", "filter"], [2, 4, 1, "", "flush"], [2, 4, 1, "", "format"], [2, 4, 1, "", "get_name"], [2, 4, 1, "", "handle"], [2, 4, 1, "", "handleError"], [2, 3, 1, "", "name"], [2, 4, 1, "", "release"], [2, 4, 1, "", "removeFilter"], [2, 4, 1, "", "setFormatter"], [2, 4, 1, "", "setLevel"], [2, 4, 1, "", "setStream"], [2, 4, 1, "", "set_name"], [2, 5, 1, "", "terminator"]], "vayesta.dmet": [[11, 1, 1, "", "DMET"], [11, 0, 0, "-", "dmet"], [11, 0, 0, "-", "fragment"], [11, 0, 0, "-", "pdmet"], [11, 0, 0, "-", "sdp_sc"], [11, 0, 0, "-", "udmet"], [11, 0, 0, "-", "ufragment"], [11, 0, 0, "-", "updates"]], "vayesta.dmet.dmet": [[11, 2, 1, "", "DMET"], [11, 2, 1, "", "DMETResults"], [11, 2, 1, "", "Options"], [11, 5, 1, "", "RDMET"]], "vayesta.dmet.dmet.DMET": [[11, 5, 1, "", "Fragment"], [11, 2, 1, "", "Options"], [11, 4, 1, "", "brueckner_scmf"], [11, 4, 1, "", "build_screened_eris"], [11, 4, 1, "", "calc_electron_number_defect"], [11, 4, 1, "", "cas_fragmentation"], [11, 4, 1, "", "change_options"], [11, 4, 1, "", "check_fragment_symmetry"], [11, 4, 1, "", "check_solver"], [11, 4, 1, "", "communicate_clusters"], [11, 4, 1, "", "create_invsym_fragments"], [11, 4, 1, "", "create_mirrorsym_fragments"], [11, 4, 1, "", "create_rotsym_fragments"], [11, 4, 1, "", "create_symmetric_fragments"], [11, 4, 1, "", "create_transsym_fragments"], [11, 3, 1, "", "df"], [11, 3, 1, "", "e_mf"], [11, 3, 1, "", "e_nuc"], [11, 3, 1, "", "e_tot"], [11, 4, 1, "", "get_atomic_charges"], [11, 4, 1, "", "get_average_cluster_size"], [11, 4, 1, "", "get_cderi"], [11, 4, 1, "", "get_corrfunc"], [11, 4, 1, "", "get_corrfunc_mf"], [11, 4, 1, "", "get_dmet_elec_energy"], [11, 4, 1, "", "get_dmet_energy"], [11, 4, 1, "", "get_eris_array"], [11, 4, 1, "", "get_eris_object"], [11, 4, 1, "", "get_exxdiv"], [11, 4, 1, "", "get_fock"], [11, 4, 1, "", "get_fock_for_bath"], [11, 4, 1, "", "get_fock_for_energy"], [11, 4, 1, "", "get_fragment_overlap_norm"], [11, 4, 1, "", "get_fragments"], [11, 4, 1, "", "get_hcore"], [11, 4, 1, "", "get_hcore_for_energy"], [11, 4, 1, "", "get_impurity_coeffs"], [11, 4, 1, "", "get_lo_coeff"], [11, 4, 1, "", "get_max_cluster_size"], [11, 4, 1, "", "get_mean_cluster_size"], [11, 4, 1, "", "get_min_cluster_size"], [11, 4, 1, "", "get_ovlp"], [11, 4, 1, "", "get_ovlp_power"], [11, 4, 1, "", "get_symmetry_child_fragments"], [11, 4, 1, "", "get_symmetry_parent_fragments"], [11, 4, 1, "", "get_veff"], [11, 4, 1, "", "get_veff_for_energy"], [11, 4, 1, "", "has_complete_fragmentation"], [11, 4, 1, "", "has_complete_occupied_fragmentation"], [11, 4, 1, "", "has_complete_virtual_fragmentation"], [11, 3, 1, "", "has_df"], [11, 3, 1, "", "has_exxdiv"], [11, 4, 1, "", "has_orthonormal_fragmentation"], [11, 4, 1, "", "iao_fragmentation"], [11, 4, 1, "", "iaopao_fragmentation"], [11, 4, 1, "", "init_mf"], [11, 5, 1, "", "is_rhf"], [11, 5, 1, "", "is_uhf"], [11, 4, 1, "", "kernel"], [11, 4, 1, "", "loop"], [11, 4, 1, "", "make_rdm1"], [11, 4, 1, "", "make_rdm1_demo"], [11, 4, 1, "", "make_rdm2"], [11, 4, 1, "", "make_rdm2_demo"], [11, 3, 1, "", "mo_coeff"], [11, 3, 1, "", "mo_coeff_occ"], [11, 3, 1, "", "mo_coeff_vir"], [11, 3, 1, "", "mo_energy"], [11, 3, 1, "", "mo_energy_occ"], [11, 3, 1, "", "mo_energy_vir"], [11, 3, 1, "", "mo_occ"], [11, 3, 1, "", "mol"], [11, 3, 1, "", "nao"], [11, 3, 1, "", "ncells"], [11, 3, 1, "", "nfrag"], [11, 3, 1, "", "nmo"], [11, 3, 1, "", "nocc"], [11, 3, 1, "", "nvir"], [11, 4, 1, "", "optimize_chempot"], [11, 3, 1, "", "pbc_dimension"], [11, 4, 1, "", "pdmet_scmf"], [11, 4, 1, "", "pop_analysis"], [11, 4, 1, "", "print_clusters"], [11, 4, 1, "", "print_results"], [11, 4, 1, "", "require_complete_fragmentation"], [11, 4, 1, "", "reset"], [11, 4, 1, "", "sao_fragmentation"], [11, 4, 1, "", "set_hcore"], [11, 4, 1, "", "set_ovlp"], [11, 4, 1, "", "set_veff"], [11, 4, 1, "", "site_fragmentation"], [11, 5, 1, "", "spinsym"], [11, 4, 1, "", "update_mf"], [11, 4, 1, "", "update_vcorr"], [11, 4, 1, "", "write_population"]], "vayesta.dmet.dmet.DMET.Options": [[11, 4, 1, "", "asdict"], [11, 5, 1, "", "bath_options"], [11, 4, 1, "", "change_dict_defaults"], [11, 5, 1, "", "charge_consistent"], [11, 5, 1, "", "conv_tol"], [11, 4, 1, "", "dict_with_defaults"], [11, 5, 1, "", "diis"], [11, 5, 1, "", "dm_with_frozen"], [11, 4, 1, "", "get"], [11, 4, 1, "", "get_default"], [11, 4, 1, "", "get_default_factory"], [11, 5, 1, "", "global_frag_chempot"], [11, 5, 1, "", "iao_minao"], [11, 4, 1, "", "items"], [11, 4, 1, "", "keys"], [11, 5, 1, "", "max_elec_err"], [11, 5, 1, "", "maxiter"], [11, 5, 1, "", "mixing_param"], [11, 5, 1, "", "mixing_variable"], [11, 5, 1, "", "oneshot"], [11, 4, 1, "", "replace"], [11, 5, 1, "", "screening"], [11, 5, 1, "", "solver_options"], [11, 5, 1, "", "store_eris"], [11, 5, 1, "", "symmetry_mf_tol"], [11, 5, 1, "", "symmetry_tol"], [11, 4, 1, "", "update"], [11, 4, 1, "", "values"]], "vayesta.dmet.dmet.DMETResults": [[11, 5, 1, "", "cluster_sizes"], [11, 5, 1, "", "e_corr"]], "vayesta.dmet.dmet.Options": [[11, 4, 1, "", "asdict"], [11, 5, 1, "", "bath_options"], [11, 4, 1, "", "change_dict_defaults"], [11, 5, 1, "", "charge_consistent"], [11, 5, 1, "", "conv_tol"], [11, 4, 1, "", "dict_with_defaults"], [11, 5, 1, "", "diis"], [11, 5, 1, "", "dm_with_frozen"], [11, 4, 1, "", "get"], [11, 4, 1, "", "get_default"], [11, 4, 1, "", "get_default_factory"], [11, 5, 1, "", "global_frag_chempot"], [11, 5, 1, "", "iao_minao"], [11, 4, 1, "", "items"], [11, 4, 1, "", "keys"], [11, 5, 1, "", "max_elec_err"], [11, 5, 1, "", "maxiter"], [11, 5, 1, "", "mixing_param"], [11, 5, 1, "", "mixing_variable"], [11, 5, 1, "", "oneshot"], [11, 4, 1, "", "replace"], [11, 5, 1, "", "screening"], [11, 5, 1, "", "solver_options"], [11, 5, 1, "", "store_eris"], [11, 5, 1, "", "symmetry_mf_tol"], [11, 5, 1, "", "symmetry_tol"], [11, 4, 1, "", "update"], [11, 4, 1, "", "values"]], "vayesta.dmet.fragment": [[11, 2, 1, "", "DMETFragment"], [11, 6, 1, "", "DMETFragmentExit"]], "vayesta.dmet.fragment.DMETFragment": [[11, 2, 1, "", "Flags"], [11, 2, 1, "", "Options"], [11, 2, 1, "", "Results"], [11, 4, 1, "", "add_tsymmetric_fragments"], [11, 4, 1, "", "canonicalize_mo"], [11, 4, 1, "", "change_options"], [11, 4, 1, "", "check_solver"], [11, 3, 1, "", "cluster"], [11, 3, 1, "", "contributes"], [11, 4, 1, "", "copy"], [11, 4, 1, "", "couple_to_fragment"], [11, 4, 1, "", "couple_to_fragments"], [11, 4, 1, "", "diagonalize_cluster_dm"], [11, 4, 1, "", "get_coeff_env"], [11, 4, 1, "", "get_dmet_energy_contrib"], [11, 4, 1, "", "get_frag_hamil"], [11, 4, 1, "", "get_frag_hl_dm"], [11, 4, 1, "", "get_fragment_dmet_energy"], [11, 4, 1, "", "get_fragment_mf_energy"], [11, 4, 1, "", "get_fragment_mo_energy"], [11, 4, 1, "", "get_fragment_projector"], [11, 4, 1, "", "get_fragments_with_overlap"], [11, 4, 1, "", "get_mo_occupation"], [11, 4, 1, "", "get_nelectron_hl"], [11, 4, 1, "", "get_overlap"], [11, 4, 1, "", "get_solver"], [11, 4, 1, "", "get_solver_options"], [11, 4, 1, "", "get_symmetry_children"], [11, 4, 1, "", "get_symmetry_error"], [11, 4, 1, "", "get_symmetry_generations"], [11, 4, 1, "", "get_symmetry_operation"], [11, 4, 1, "", "get_symmetry_parent"], [11, 4, 1, "", "get_symmetry_tree"], [11, 3, 1, "", "hamil"], [11, 3, 1, "", "id_name"], [11, 4, 1, "", "kernel"], [11, 4, 1, "", "log_info"], [11, 4, 1, "", "loop_symmetry_children"], [11, 4, 1, "", "make_bath"], [11, 4, 1, "", "make_cluster"], [11, 4, 1, "", "make_counterpoise_mol"], [11, 4, 1, "", "make_tsymmetric_fragments"], [11, 3, 1, "", "mf"], [11, 3, 1, "", "mol"], [11, 3, 1, "", "n_frag"], [11, 3, 1, "", "n_symmetry_children"], [11, 3, 1, "", "nelectron"], [11, 4, 1, "", "plot3d"], [11, 4, 1, "", "pop_analysis"], [11, 4, 1, "", "project_ref_orbitals"], [11, 4, 1, "", "reset"], [11, 3, 1, "", "results"], [11, 3, 1, "", "symmetry_factor"], [11, 4, 1, "", "trimmed_name"]], "vayesta.dmet.fragment.DMETFragment.Flags": [[11, 5, 1, "", "bath_parent_fragment_id"], [11, 5, 1, "", "is_envelop"], [11, 5, 1, "", "is_secfrag"]], "vayesta.dmet.fragment.DMETFragment.Options": [[11, 4, 1, "", "asdict"], [11, 5, 1, "", "auxiliary"], [11, 5, 1, "", "bath_options"], [11, 4, 1, "", "change_dict_defaults"], [11, 5, 1, "", "coupled_fragments"], [11, 4, 1, "", "dict_with_defaults"], [11, 5, 1, "", "dm_with_frozen"], [11, 4, 1, "", "get"], [11, 4, 1, "", "get_default"], [11, 4, 1, "", "get_default_factory"], [11, 4, 1, "", "items"], [11, 4, 1, "", "keys"], [11, 4, 1, "", "replace"], [11, 5, 1, "", "screening"], [11, 5, 1, "", "solver_options"], [11, 5, 1, "", "store_eris"], [11, 5, 1, "", "sym_factor"], [11, 4, 1, "", "update"], [11, 4, 1, "", "values"]], "vayesta.dmet.fragment.DMETFragment.Results": [[11, 5, 1, "", "converged"], [11, 5, 1, "", "dm1"], [11, 5, 1, "", "dm2"], [11, 5, 1, "", "e1"], [11, 5, 1, "", "e2"], [11, 5, 1, "", "e_corr"], [11, 5, 1, "", "fid"], [11, 5, 1, "", "n_active"], [11, 5, 1, "", "pwf"], [11, 5, 1, "", "wf"]], "vayesta.dmet.fragment.DMETFragmentExit": [[11, 5, 1, "", "args"], [11, 4, 1, "", "with_traceback"]], "vayesta.dmet.pdmet": [[11, 1, 1, "", "update_mf"]], "vayesta.dmet.sdp_sc": [[11, 1, 1, "", "perform_SDP_fit"]], "vayesta.dmet.udmet": [[11, 2, 1, "", "UDMET"]], "vayesta.dmet.udmet.UDMET": [[11, 5, 1, "", "Fragment"], [11, 2, 1, "", "Options"], [11, 4, 1, "", "brueckner_scmf"], [11, 4, 1, "", "build_screened_eris"], [11, 4, 1, "", "calc_electron_number_defect"], [11, 4, 1, "", "cas_fragmentation"], [11, 4, 1, "", "change_options"], [11, 4, 1, "", "check_fragment_symmetry"], [11, 4, 1, "", "check_solver"], [11, 4, 1, "", "communicate_clusters"], [11, 4, 1, "", "create_invsym_fragments"], [11, 4, 1, "", "create_mirrorsym_fragments"], [11, 4, 1, "", "create_rotsym_fragments"], [11, 4, 1, "", "create_symmetric_fragments"], [11, 4, 1, "", "create_transsym_fragments"], [11, 3, 1, "", "df"], [11, 3, 1, "", "e_mf"], [11, 3, 1, "", "e_nuc"], [11, 3, 1, "", "e_tot"], [11, 4, 1, "", "get_atomic_charges"], [11, 4, 1, "", "get_average_cluster_size"], [11, 4, 1, "", "get_cderi"], [11, 4, 1, "", "get_corrfunc"], [11, 4, 1, "", "get_corrfunc_mf"], [11, 4, 1, "", "get_dmet_elec_energy"], [11, 4, 1, "", "get_dmet_energy"], [11, 4, 1, "", "get_eris_array"], [11, 4, 1, "", "get_eris_array_uhf"], [11, 4, 1, "", "get_eris_object"], [11, 4, 1, "", "get_exxdiv"], [11, 4, 1, "", "get_fock"], [11, 4, 1, "", "get_fock_for_bath"], [11, 4, 1, "", "get_fock_for_energy"], [11, 4, 1, "", "get_fragment_overlap_norm"], [11, 4, 1, "", "get_fragments"], [11, 4, 1, "", "get_hcore"], [11, 4, 1, "", "get_hcore_for_energy"], [11, 4, 1, "", "get_impurity_coeffs"], [11, 4, 1, "", "get_lo_coeff"], [11, 4, 1, "", "get_max_cluster_size"], [11, 4, 1, "", "get_mean_cluster_size"], [11, 4, 1, "", "get_min_cluster_size"], [11, 4, 1, "", "get_ovlp"], [11, 4, 1, "", "get_ovlp_power"], [11, 4, 1, "", "get_symmetry_child_fragments"], [11, 4, 1, "", "get_symmetry_parent_fragments"], [11, 4, 1, "", "get_veff"], [11, 4, 1, "", "get_veff_for_energy"], [11, 4, 1, "", "has_complete_fragmentation"], [11, 4, 1, "", "has_complete_occupied_fragmentation"], [11, 4, 1, "", "has_complete_virtual_fragmentation"], [11, 3, 1, "", "has_df"], [11, 3, 1, "", "has_exxdiv"], [11, 4, 1, "", "has_orthonormal_fragmentation"], [11, 4, 1, "", "iao_fragmentation"], [11, 4, 1, "", "iaopao_fragmentation"], [11, 4, 1, "", "init_mf"], [11, 5, 1, "", "is_rhf"], [11, 5, 1, "", "is_uhf"], [11, 4, 1, "", "kernel"], [11, 4, 1, "", "loop"], [11, 4, 1, "", "make_rdm1"], [11, 4, 1, "", "make_rdm1_demo"], [11, 4, 1, "", "make_rdm2"], [11, 4, 1, "", "make_rdm2_demo"], [11, 3, 1, "", "mo_coeff"], [11, 3, 1, "", "mo_coeff_occ"], [11, 3, 1, "", "mo_coeff_vir"], [11, 3, 1, "", "mo_energy"], [11, 3, 1, "", "mo_energy_occ"], [11, 3, 1, "", "mo_energy_vir"], [11, 3, 1, "", "mo_occ"], [11, 3, 1, "", "mol"], [11, 3, 1, "", "nao"], [11, 3, 1, "", "ncells"], [11, 3, 1, "", "nfrag"], [11, 3, 1, "", "nmo"], [11, 3, 1, "", "nocc"], [11, 3, 1, "", "nvir"], [11, 4, 1, "", "optimize_chempot"], [11, 3, 1, "", "pbc_dimension"], [11, 4, 1, "", "pdmet_scmf"], [11, 4, 1, "", "pop_analysis"], [11, 4, 1, "", "print_clusters"], [11, 4, 1, "", "print_results"], [11, 4, 1, "", "require_complete_fragmentation"], [11, 4, 1, "", "reset"], [11, 4, 1, "", "sao_fragmentation"], [11, 4, 1, "", "set_hcore"], [11, 4, 1, "", "set_ovlp"], [11, 4, 1, "", "set_veff"], [11, 4, 1, "", "site_fragmentation"], [11, 5, 1, "", "spinsym"], [11, 4, 1, "", "update_mf"], [11, 4, 1, "", "update_vcorr"], [11, 4, 1, "", "write_population"]], "vayesta.dmet.udmet.UDMET.Options": [[11, 4, 1, "", "asdict"], [11, 5, 1, "", "bath_options"], [11, 4, 1, "", "change_dict_defaults"], [11, 5, 1, "", "charge_consistent"], [11, 5, 1, "", "conv_tol"], [11, 4, 1, "", "dict_with_defaults"], [11, 5, 1, "", "diis"], [11, 5, 1, "", "dm_with_frozen"], [11, 4, 1, "", "get"], [11, 4, 1, "", "get_default"], [11, 4, 1, "", "get_default_factory"], [11, 5, 1, "", "global_frag_chempot"], [11, 5, 1, "", "iao_minao"], [11, 4, 1, "", "items"], [11, 4, 1, "", "keys"], [11, 5, 1, "", "max_elec_err"], [11, 5, 1, "", "maxiter"], [11, 5, 1, "", "mixing_param"], [11, 5, 1, "", "mixing_variable"], [11, 5, 1, "", "oneshot"], [11, 4, 1, "", "replace"], [11, 5, 1, "", "screening"], [11, 5, 1, "", "solver_options"], [11, 5, 1, "", "store_eris"], [11, 5, 1, "", "symmetry_mf_tol"], [11, 5, 1, "", "symmetry_tol"], [11, 4, 1, "", "update"], [11, 4, 1, "", "values"]], "vayesta.dmet.ufragment": [[11, 2, 1, "", "UDMETFragment"]], "vayesta.dmet.ufragment.UDMETFragment": [[11, 2, 1, "", "Flags"], [11, 2, 1, "", "Options"], [11, 2, 1, "", "Results"], [11, 4, 1, "", "add_tsymmetric_fragments"], [11, 4, 1, "", "canonicalize_mo"], [11, 4, 1, "", "change_options"], [11, 4, 1, "", "check_solver"], [11, 3, 1, "", "cluster"], [11, 3, 1, "", "contributes"], [11, 4, 1, "", "copy"], [11, 4, 1, "", "couple_to_fragment"], [11, 4, 1, "", "couple_to_fragments"], [11, 4, 1, "", "diagonalize_cluster_dm"], [11, 4, 1, "", "get_coeff_env"], [11, 4, 1, "", "get_dmet_energy_contrib"], [11, 4, 1, "", "get_frag_hamil"], [11, 4, 1, "", "get_frag_hl_dm"], [11, 4, 1, "", "get_fragment_dmet_energy"], [11, 4, 1, "", "get_fragment_mf_energy"], [11, 4, 1, "", "get_fragment_mo_energy"], [11, 4, 1, "", "get_fragment_projector"], [11, 4, 1, "", "get_fragments_with_overlap"], [11, 4, 1, "", "get_mo_occupation"], [11, 4, 1, "", "get_nelectron_hl"], [11, 4, 1, "", "get_overlap"], [11, 4, 1, "", "get_solver"], [11, 4, 1, "", "get_solver_options"], [11, 4, 1, "", "get_symmetry_children"], [11, 4, 1, "", "get_symmetry_error"], [11, 4, 1, "", "get_symmetry_generations"], [11, 4, 1, "", "get_symmetry_operation"], [11, 4, 1, "", "get_symmetry_parent"], [11, 4, 1, "", "get_symmetry_tree"], [11, 3, 1, "", "hamil"], [11, 3, 1, "", "id_name"], [11, 4, 1, "", "kernel"], [11, 4, 1, "", "log_info"], [11, 4, 1, "", "loop_symmetry_children"], [11, 4, 1, "", "make_bath"], [11, 4, 1, "", "make_cluster"], [11, 4, 1, "", "make_counterpoise_mol"], [11, 4, 1, "", "make_tsymmetric_fragments"], [11, 3, 1, "", "mf"], [11, 3, 1, "", "mol"], [11, 3, 1, "", "n_frag"], [11, 3, 1, "", "n_symmetry_children"], [11, 3, 1, "", "nelectron"], [11, 4, 1, "", "plot3d"], [11, 4, 1, "", "pop_analysis"], [11, 4, 1, "", "project_ref_orbitals"], [11, 4, 1, "", "reset"], [11, 3, 1, "", "results"], [11, 4, 1, "", "set_cas"], [11, 3, 1, "", "symmetry_factor"], [11, 4, 1, "", "trimmed_name"]], "vayesta.dmet.ufragment.UDMETFragment.Flags": [[11, 5, 1, "", "bath_parent_fragment_id"], [11, 5, 1, "", "is_envelop"], [11, 5, 1, "", "is_secfrag"]], "vayesta.dmet.ufragment.UDMETFragment.Options": [[11, 4, 1, "", "asdict"], [11, 5, 1, "", "auxiliary"], [11, 5, 1, "", "bath_options"], [11, 4, 1, "", "change_dict_defaults"], [11, 5, 1, "", "coupled_fragments"], [11, 4, 1, "", "dict_with_defaults"], [11, 5, 1, "", "dm_with_frozen"], [11, 4, 1, "", "get"], [11, 4, 1, "", "get_default"], [11, 4, 1, "", "get_default_factory"], [11, 4, 1, "", "items"], [11, 4, 1, "", "keys"], [11, 4, 1, "", "replace"], [11, 5, 1, "", "screening"], [11, 5, 1, "", "solver_options"], [11, 5, 1, "", "store_eris"], [11, 5, 1, "", "sym_factor"], [11, 4, 1, "", "update"], [11, 4, 1, "", "values"]], "vayesta.dmet.ufragment.UDMETFragment.Results": [[11, 5, 1, "", "converged"], [11, 5, 1, "", "dm1"], [11, 5, 1, "", "dm2"], [11, 5, 1, "", "e1"], [11, 5, 1, "", "e2"], [11, 5, 1, "", "e_corr"], [11, 5, 1, "", "fid"], [11, 5, 1, "", "n_active"], [11, 5, 1, "", "pwf"], [11, 5, 1, "", "wf"]], "vayesta.dmet.updates": [[11, 2, 1, "", "DIISUpdate"], [11, 2, 1, "", "MixUpdate"], [11, 2, 1, "", "Update"]], "vayesta.dmet.updates.DIISUpdate": [[11, 4, 1, "", "update"]], "vayesta.dmet.updates.MixUpdate": [[11, 4, 1, "", "update"]], "vayesta.edmet": [[12, 1, 1, "", "EDMET"], [12, 0, 0, "-", "edmet"], [12, 0, 0, "-", "fragment"], [12, 0, 0, "-", "uedmet"], [12, 0, 0, "-", "ufragment"]], "vayesta.edmet.edmet": [[12, 2, 1, "", "EDMET"], [12, 2, 1, "", "EDMETResults"], [12, 2, 1, "", "Options"], [12, 5, 1, "", "REDMET"]], "vayesta.edmet.edmet.EDMET": [[12, 5, 1, "", "Fragment"], [12, 2, 1, "", "Options"], [12, 4, 1, "", "brueckner_scmf"], [12, 4, 1, "", "build_screened_eris"], [12, 4, 1, "", "calc_electron_number_defect"], [12, 4, 1, "", "cas_fragmentation"], [12, 4, 1, "", "change_options"], [12, 4, 1, "", "check_fragment_symmetry"], [12, 4, 1, "", "check_solver"], [12, 4, 1, "", "communicate_clusters"], [12, 4, 1, "", "create_invsym_fragments"], [12, 4, 1, "", "create_mirrorsym_fragments"], [12, 4, 1, "", "create_rotsym_fragments"], [12, 4, 1, "", "create_symmetric_fragments"], [12, 4, 1, "", "create_transsym_fragments"], [12, 3, 1, "", "df"], [12, 3, 1, "", "e_mf"], [12, 3, 1, "", "e_nuc"], [12, 3, 1, "", "e_tot"], [12, 3, 1, "", "eps"], [12, 4, 1, "", "get_atomic_charges"], [12, 4, 1, "", "get_average_cluster_size"], [12, 4, 1, "", "get_cderi"], [12, 4, 1, "", "get_corrfunc"], [12, 4, 1, "", "get_corrfunc_mf"], [12, 4, 1, "", "get_dmet_elec_energy"], [12, 4, 1, "", "get_dmet_energy"], [12, 4, 1, "", "get_eris_array"], [12, 4, 1, "", "get_eris_object"], [12, 4, 1, "", "get_exxdiv"], [12, 4, 1, "", "get_fock"], [12, 4, 1, "", "get_fock_for_bath"], [12, 4, 1, "", "get_fock_for_energy"], [12, 4, 1, "", "get_fragment_overlap_norm"], [12, 4, 1, "", "get_fragments"], [12, 4, 1, "", "get_hcore"], [12, 4, 1, "", "get_hcore_for_energy"], [12, 4, 1, "", "get_impurity_coeffs"], [12, 4, 1, "", "get_lo_coeff"], [12, 4, 1, "", "get_max_cluster_size"], [12, 4, 1, "", "get_mean_cluster_size"], [12, 4, 1, "", "get_min_cluster_size"], [12, 4, 1, "", "get_ovlp"], [12, 4, 1, "", "get_ovlp_power"], [12, 4, 1, "", "get_symmetry_child_fragments"], [12, 4, 1, "", "get_symmetry_parent_fragments"], [12, 4, 1, "", "get_updated_correlation_kernel"], [12, 4, 1, "", "get_veff"], [12, 4, 1, "", "get_veff_for_energy"], [12, 4, 1, "", "has_complete_fragmentation"], [12, 4, 1, "", "has_complete_occupied_fragmentation"], [12, 4, 1, "", "has_complete_virtual_fragmentation"], [12, 3, 1, "", "has_df"], [12, 3, 1, "", "has_exxdiv"], [12, 4, 1, "", "has_orthonormal_fragmentation"], [12, 4, 1, "", "iao_fragmentation"], [12, 4, 1, "", "iaopao_fragmentation"], [12, 4, 1, "", "improve_nl_energy"], [12, 4, 1, "", "init_mf"], [12, 5, 1, "", "is_rhf"], [12, 5, 1, "", "is_uhf"], [12, 4, 1, "", "kernel"], [12, 4, 1, "", "loop"], [12, 4, 1, "", "make_rdm1"], [12, 4, 1, "", "make_rdm1_demo"], [12, 4, 1, "", "make_rdm2"], [12, 4, 1, "", "make_rdm2_demo"], [12, 3, 1, "", "mo_coeff"], [12, 3, 1, "", "mo_coeff_occ"], [12, 3, 1, "", "mo_coeff_vir"], [12, 3, 1, "", "mo_energy"], [12, 3, 1, "", "mo_energy_occ"], [12, 3, 1, "", "mo_energy_vir"], [12, 3, 1, "", "mo_occ"], [12, 3, 1, "", "mol"], [12, 3, 1, "", "nao"], [12, 3, 1, "", "ncells"], [12, 3, 1, "", "nfrag"], [12, 3, 1, "", "nmo"], [12, 3, 1, "", "nocc"], [12, 3, 1, "", "nvir"], [12, 4, 1, "", "optimize_chempot"], [12, 3, 1, "", "pbc_dimension"], [12, 4, 1, "", "pdmet_scmf"], [12, 4, 1, "", "pop_analysis"], [12, 4, 1, "", "print_clusters"], [12, 4, 1, "", "print_results"], [12, 4, 1, "", "require_complete_fragmentation"], [12, 4, 1, "", "reset"], [12, 4, 1, "", "run_exact_full_ac"], [12, 4, 1, "", "sao_fragmentation"], [12, 4, 1, "", "set_hcore"], [12, 4, 1, "", "set_ovlp"], [12, 4, 1, "", "set_up_fragments"], [12, 4, 1, "", "set_veff"], [12, 4, 1, "", "site_fragmentation"], [12, 5, 1, "", "spinsym"], [12, 4, 1, "", "update_mf"], [12, 4, 1, "", "update_vcorr"], [12, 3, 1, "", "with_df"], [12, 4, 1, "", "write_population"]], "vayesta.edmet.edmet.EDMET.Options": [[12, 4, 1, "", "asdict"], [12, 5, 1, "", "bath_options"], [12, 5, 1, "", "boson_xc_kernel"], [12, 5, 1, "", "bosonic_interaction"], [12, 4, 1, "", "change_dict_defaults"], [12, 5, 1, "", "charge_consistent"], [12, 5, 1, "", "conv_tol"], [12, 4, 1, "", "dict_with_defaults"], [12, 5, 1, "", "diis"], [12, 5, 1, "", "dm_with_frozen"], [12, 4, 1, "", "get"], [12, 4, 1, "", "get_default"], [12, 4, 1, "", "get_default_factory"], [12, 5, 1, "", "global_frag_chempot"], [12, 5, 1, "", "iao_minao"], [12, 4, 1, "", "items"], [12, 4, 1, "", "keys"], [12, 5, 1, "", "make_dd_moments"], [12, 5, 1, "", "max_bos"], [12, 5, 1, "", "max_elec_err"], [12, 5, 1, "", "maxiter"], [12, 5, 1, "", "mixing_param"], [12, 5, 1, "", "mixing_variable"], [12, 5, 1, "", "occ_proj_kernel"], [12, 5, 1, "", "old_sc_condition"], [12, 5, 1, "", "oneshot"], [12, 4, 1, "", "replace"], [12, 5, 1, "", "screening"], [12, 5, 1, "", "solver_options"], [12, 5, 1, "", "store_eris"], [12, 5, 1, "", "symmetry_mf_tol"], [12, 5, 1, "", "symmetry_tol"], [12, 4, 1, "", "update"], [12, 4, 1, "", "values"]], "vayesta.edmet.edmet.EDMETResults": [[12, 5, 1, "", "cluster_sizes"], [12, 5, 1, "", "e_corr"]], "vayesta.edmet.edmet.Options": [[12, 4, 1, "", "asdict"], [12, 5, 1, "", "bath_options"], [12, 5, 1, "", "boson_xc_kernel"], [12, 5, 1, "", "bosonic_interaction"], [12, 4, 1, "", "change_dict_defaults"], [12, 5, 1, "", "charge_consistent"], [12, 5, 1, "", "conv_tol"], [12, 4, 1, "", "dict_with_defaults"], [12, 5, 1, "", "diis"], [12, 5, 1, "", "dm_with_frozen"], [12, 4, 1, "", "get"], [12, 4, 1, "", "get_default"], [12, 4, 1, "", "get_default_factory"], [12, 5, 1, "", "global_frag_chempot"], [12, 5, 1, "", "iao_minao"], [12, 4, 1, "", "items"], [12, 4, 1, "", "keys"], [12, 5, 1, "", "make_dd_moments"], [12, 5, 1, "", "max_bos"], [12, 5, 1, "", "max_elec_err"], [12, 5, 1, "", "maxiter"], [12, 5, 1, "", "mixing_param"], [12, 5, 1, "", "mixing_variable"], [12, 5, 1, "", "occ_proj_kernel"], [12, 5, 1, "", "old_sc_condition"], [12, 5, 1, "", "oneshot"], [12, 4, 1, "", "replace"], [12, 5, 1, "", "screening"], [12, 5, 1, "", "solver_options"], [12, 5, 1, "", "store_eris"], [12, 5, 1, "", "symmetry_mf_tol"], [12, 5, 1, "", "symmetry_tol"], [12, 4, 1, "", "update"], [12, 4, 1, "", "values"]], "vayesta.edmet.fragment": [[12, 2, 1, "", "EDMETFragment"], [12, 6, 1, "", "EDMETFragmentExit"], [12, 2, 1, "", "Options"], [12, 1, 1, "", "bogoliubov_decouple"]], "vayesta.edmet.fragment.EDMETFragment": [[12, 2, 1, "", "Flags"], [12, 2, 1, "", "Options"], [12, 2, 1, "", "Results"], [12, 4, 1, "", "add_tsymmetric_fragments"], [12, 4, 1, "", "calc_exact_ac"], [12, 4, 1, "", "canonicalize_mo"], [12, 4, 1, "", "change_options"], [12, 4, 1, "", "check_qba_approx"], [12, 4, 1, "", "check_solver"], [12, 3, 1, "", "cluster"], [12, 4, 1, "", "construct_boson_hamil"], [12, 4, 1, "", "construct_correlation_kernel_contrib"], [12, 3, 1, "", "contributes"], [12, 4, 1, "", "conv_to_aos"], [12, 4, 1, "", "copy"], [12, 4, 1, "", "couple_to_fragment"], [12, 4, 1, "", "couple_to_fragments"], [12, 4, 1, "", "define_bosons"], [12, 4, 1, "", "diagonalize_cluster_dm"], [12, 3, 1, "", "energy_couplings"], [12, 4, 1, "", "get_co_active"], [12, 4, 1, "", "get_coeff_env"], [12, 4, 1, "", "get_composite_moments"], [12, 4, 1, "", "get_correlation_kernel_contrib"], [12, 4, 1, "", "get_cv_active"], [12, 4, 1, "", "get_dmet_energy_contrib"], [12, 4, 1, "", "get_edmet_energy_contrib"], [12, 4, 1, "", "get_eri_couplings"], [12, 4, 1, "", "get_fock"], [12, 4, 1, "", "get_frag_hamil"], [12, 4, 1, "", "get_frag_hl_dm"], [12, 4, 1, "", "get_fragment_dmet_energy"], [12, 4, 1, "", "get_fragment_mf_energy"], [12, 4, 1, "", "get_fragment_mo_energy"], [12, 4, 1, "", "get_fragment_projector"], [12, 4, 1, "", "get_fragment_projector_ov"], [12, 4, 1, "", "get_fragments_with_overlap"], [12, 4, 1, "", "get_loc_eps"], [12, 4, 1, "", "get_mo_occupation"], [12, 4, 1, "", "get_nelectron_hl"], [12, 4, 1, "", "get_overlap"], [12, 4, 1, "", "get_rbos_split"], [12, 4, 1, "", "get_rot_ov_frag"], [12, 4, 1, "", "get_rot_to_mf_ov"], [12, 4, 1, "", "get_solver"], [12, 4, 1, "", "get_solver_options"], [12, 4, 1, "", "get_symmetry_children"], [12, 4, 1, "", "get_symmetry_error"], [12, 4, 1, "", "get_symmetry_generations"], [12, 4, 1, "", "get_symmetry_operation"], [12, 4, 1, "", "get_symmetry_parent"], [12, 4, 1, "", "get_symmetry_tree"], [12, 4, 1, "", "get_xc_couplings"], [12, 3, 1, "", "hamil"], [12, 3, 1, "", "id_name"], [12, 4, 1, "", "kernel"], [12, 4, 1, "", "log_info"], [12, 4, 1, "", "loop_symmetry_children"], [12, 4, 1, "", "make_bath"], [12, 4, 1, "", "make_cluster"], [12, 4, 1, "", "make_counterpoise_mol"], [12, 4, 1, "", "make_tsymmetric_fragments"], [12, 3, 1, "", "mf"], [12, 3, 1, "", "mol"], [12, 3, 1, "", "n_frag"], [12, 3, 1, "", "n_symmetry_children"], [12, 3, 1, "", "nbos"], [12, 3, 1, "", "nclus_ab"], [12, 3, 1, "", "nelectron"], [12, 3, 1, "", "nocc_ab"], [12, 3, 1, "", "nvir_ab"], [12, 3, 1, "", "ov_active"], [12, 3, 1, "", "ov_active_ab"], [12, 3, 1, "", "ov_active_tot"], [12, 3, 1, "", "ov_mf"], [12, 4, 1, "", "plot3d"], [12, 4, 1, "", "pop_analysis"], [12, 4, 1, "", "proj_hamil_qba"], [12, 4, 1, "", "project_ref_orbitals"], [12, 3, 1, "", "r_ao_bos"], [12, 3, 1, "", "r_bos"], [12, 3, 1, "", "r_bos_ao"], [12, 4, 1, "", "reset"], [12, 3, 1, "", "results"], [12, 4, 1, "", "set_up_fermionic_bath"], [12, 4, 1, "", "split_ov_spin_components"], [12, 4, 1, "", "store_cluster_rpa"], [12, 3, 1, "", "symmetry_factor"], [12, 4, 1, "", "test_total_rpa_energy"], [12, 4, 1, "", "trimmed_name"]], "vayesta.edmet.fragment.EDMETFragment.Flags": [[12, 5, 1, "", "bath_parent_fragment_id"], [12, 5, 1, "", "is_envelop"], [12, 5, 1, "", "is_secfrag"]], "vayesta.edmet.fragment.EDMETFragment.Options": [[12, 4, 1, "", "asdict"], [12, 5, 1, "", "auxiliary"], [12, 5, 1, "", "bath_options"], [12, 5, 1, "", "boson_xc_kernel"], [12, 5, 1, "", "bosonic_interaction"], [12, 4, 1, "", "change_dict_defaults"], [12, 5, 1, "", "coupled_fragments"], [12, 4, 1, "", "dict_with_defaults"], [12, 5, 1, "", "dm_with_frozen"], [12, 4, 1, "", "get"], [12, 4, 1, "", "get_default"], [12, 4, 1, "", "get_default_factory"], [12, 4, 1, "", "items"], [12, 4, 1, "", "keys"], [12, 5, 1, "", "make_dd_moments"], [12, 5, 1, "", "max_bos"], [12, 5, 1, "", "occ_proj_kernel"], [12, 5, 1, "", "old_sc_condition"], [12, 4, 1, "", "replace"], [12, 5, 1, "", "screening"], [12, 5, 1, "", "solver_options"], [12, 5, 1, "", "store_eris"], [12, 5, 1, "", "sym_factor"], [12, 4, 1, "", "update"], [12, 4, 1, "", "values"]], "vayesta.edmet.fragment.EDMETFragment.Results": [[12, 5, 1, "", "boson_freqs"], [12, 5, 1, "", "converged"], [12, 5, 1, "", "dd_mom0"], [12, 5, 1, "", "dd_mom1"], [12, 5, 1, "", "dm1"], [12, 5, 1, "", "dm2"], [12, 5, 1, "", "dm_eb"], [12, 5, 1, "", "e1"], [12, 5, 1, "", "e2"], [12, 5, 1, "", "e_corr"], [12, 5, 1, "", "e_fb"], [12, 5, 1, "", "eb_couplings"], [12, 5, 1, "", "fid"], [12, 5, 1, "", "n_active"], [12, 5, 1, "", "pwf"], [12, 5, 1, "", "wf"]], "vayesta.edmet.fragment.EDMETFragmentExit": [[12, 5, 1, "", "args"], [12, 4, 1, "", "with_traceback"]], "vayesta.edmet.fragment.Options": [[12, 4, 1, "", "asdict"], [12, 5, 1, "", "auxiliary"], [12, 5, 1, "", "bath_options"], [12, 5, 1, "", "boson_xc_kernel"], [12, 5, 1, "", "bosonic_interaction"], [12, 4, 1, "", "change_dict_defaults"], [12, 5, 1, "", "coupled_fragments"], [12, 4, 1, "", "dict_with_defaults"], [12, 5, 1, "", "dm_with_frozen"], [12, 4, 1, "", "get"], [12, 4, 1, "", "get_default"], [12, 4, 1, "", "get_default_factory"], [12, 4, 1, "", "items"], [12, 4, 1, "", "keys"], [12, 5, 1, "", "make_dd_moments"], [12, 5, 1, "", "max_bos"], [12, 5, 1, "", "occ_proj_kernel"], [12, 5, 1, "", "old_sc_condition"], [12, 4, 1, "", "replace"], [12, 5, 1, "", "screening"], [12, 5, 1, "", "solver_options"], [12, 5, 1, "", "store_eris"], [12, 5, 1, "", "sym_factor"], [12, 4, 1, "", "update"], [12, 4, 1, "", "values"]], "vayesta.edmet.uedmet": [[12, 2, 1, "", "UEDMET"]], "vayesta.edmet.uedmet.UEDMET": [[12, 5, 1, "", "Fragment"], [12, 2, 1, "", "Options"], [12, 4, 1, "", "brueckner_scmf"], [12, 4, 1, "", "build_screened_eris"], [12, 4, 1, "", "calc_electron_number_defect"], [12, 4, 1, "", "cas_fragmentation"], [12, 4, 1, "", "change_options"], [12, 4, 1, "", "check_fragment_symmetry"], [12, 4, 1, "", "check_solver"], [12, 4, 1, "", "communicate_clusters"], [12, 4, 1, "", "create_invsym_fragments"], [12, 4, 1, "", "create_mirrorsym_fragments"], [12, 4, 1, "", "create_rotsym_fragments"], [12, 4, 1, "", "create_symmetric_fragments"], [12, 4, 1, "", "create_transsym_fragments"], [12, 3, 1, "", "df"], [12, 3, 1, "", "e_mf"], [12, 3, 1, "", "e_nuc"], [12, 3, 1, "", "e_tot"], [12, 3, 1, "", "eps"], [12, 4, 1, "", "get_atomic_charges"], [12, 4, 1, "", "get_average_cluster_size"], [12, 4, 1, "", "get_cderi"], [12, 4, 1, "", "get_corrfunc"], [12, 4, 1, "", "get_corrfunc_mf"], [12, 4, 1, "", "get_dmet_elec_energy"], [12, 4, 1, "", "get_dmet_energy"], [12, 4, 1, "", "get_eris_array"], [12, 4, 1, "", "get_eris_array_uhf"], [12, 4, 1, "", "get_eris_object"], [12, 4, 1, "", "get_exxdiv"], [12, 4, 1, "", "get_fock"], [12, 4, 1, "", "get_fock_for_bath"], [12, 4, 1, "", "get_fock_for_energy"], [12, 4, 1, "", "get_fragment_overlap_norm"], [12, 4, 1, "", "get_fragments"], [12, 4, 1, "", "get_hcore"], [12, 4, 1, "", "get_hcore_for_energy"], [12, 4, 1, "", "get_impurity_coeffs"], [12, 4, 1, "", "get_lo_coeff"], [12, 4, 1, "", "get_max_cluster_size"], [12, 4, 1, "", "get_mean_cluster_size"], [12, 4, 1, "", "get_min_cluster_size"], [12, 4, 1, "", "get_ovlp"], [12, 4, 1, "", "get_ovlp_power"], [12, 4, 1, "", "get_symmetry_child_fragments"], [12, 4, 1, "", "get_symmetry_parent_fragments"], [12, 4, 1, "", "get_updated_correlation_kernel"], [12, 4, 1, "", "get_veff"], [12, 4, 1, "", "get_veff_for_energy"], [12, 4, 1, "", "has_complete_fragmentation"], [12, 4, 1, "", "has_complete_occupied_fragmentation"], [12, 4, 1, "", "has_complete_virtual_fragmentation"], [12, 3, 1, "", "has_df"], [12, 3, 1, "", "has_exxdiv"], [12, 4, 1, "", "has_orthonormal_fragmentation"], [12, 4, 1, "", "iao_fragmentation"], [12, 4, 1, "", "iaopao_fragmentation"], [12, 4, 1, "", "improve_nl_energy"], [12, 4, 1, "", "init_mf"], [12, 5, 1, "", "is_rhf"], [12, 5, 1, "", "is_uhf"], [12, 4, 1, "", "kernel"], [12, 4, 1, "", "loop"], [12, 4, 1, "", "make_rdm1"], [12, 4, 1, "", "make_rdm1_demo"], [12, 4, 1, "", "make_rdm2"], [12, 4, 1, "", "make_rdm2_demo"], [12, 3, 1, "", "mo_coeff"], [12, 3, 1, "", "mo_coeff_occ"], [12, 3, 1, "", "mo_coeff_vir"], [12, 3, 1, "", "mo_energy"], [12, 3, 1, "", "mo_energy_occ"], [12, 3, 1, "", "mo_energy_vir"], [12, 3, 1, "", "mo_occ"], [12, 3, 1, "", "mol"], [12, 3, 1, "", "nao"], [12, 3, 1, "", "ncells"], [12, 3, 1, "", "nfrag"], [12, 3, 1, "", "nmo"], [12, 3, 1, "", "nocc"], [12, 3, 1, "", "nvir"], [12, 4, 1, "", "optimize_chempot"], [12, 3, 1, "", "pbc_dimension"], [12, 4, 1, "", "pdmet_scmf"], [12, 4, 1, "", "pop_analysis"], [12, 4, 1, "", "print_clusters"], [12, 4, 1, "", "print_results"], [12, 4, 1, "", "require_complete_fragmentation"], [12, 4, 1, "", "reset"], [12, 4, 1, "", "run_exact_full_ac"], [12, 4, 1, "", "sao_fragmentation"], [12, 4, 1, "", "set_hcore"], [12, 4, 1, "", "set_ovlp"], [12, 4, 1, "", "set_up_fragments"], [12, 4, 1, "", "set_veff"], [12, 4, 1, "", "site_fragmentation"], [12, 5, 1, "", "spinsym"], [12, 4, 1, "", "update_mf"], [12, 4, 1, "", "update_vcorr"], [12, 3, 1, "", "with_df"], [12, 4, 1, "", "write_population"]], "vayesta.edmet.uedmet.UEDMET.Options": [[12, 4, 1, "", "asdict"], [12, 5, 1, "", "bath_options"], [12, 5, 1, "", "boson_xc_kernel"], [12, 5, 1, "", "bosonic_interaction"], [12, 4, 1, "", "change_dict_defaults"], [12, 5, 1, "", "charge_consistent"], [12, 5, 1, "", "conv_tol"], [12, 4, 1, "", "dict_with_defaults"], [12, 5, 1, "", "diis"], [12, 5, 1, "", "dm_with_frozen"], [12, 4, 1, "", "get"], [12, 4, 1, "", "get_default"], [12, 4, 1, "", "get_default_factory"], [12, 5, 1, "", "global_frag_chempot"], [12, 5, 1, "", "iao_minao"], [12, 4, 1, "", "items"], [12, 4, 1, "", "keys"], [12, 5, 1, "", "make_dd_moments"], [12, 5, 1, "", "max_bos"], [12, 5, 1, "", "max_elec_err"], [12, 5, 1, "", "maxiter"], [12, 5, 1, "", "mixing_param"], [12, 5, 1, "", "mixing_variable"], [12, 5, 1, "", "occ_proj_kernel"], [12, 5, 1, "", "old_sc_condition"], [12, 5, 1, "", "oneshot"], [12, 4, 1, "", "replace"], [12, 5, 1, "", "screening"], [12, 5, 1, "", "solver_options"], [12, 5, 1, "", "store_eris"], [12, 5, 1, "", "symmetry_mf_tol"], [12, 5, 1, "", "symmetry_tol"], [12, 4, 1, "", "update"], [12, 4, 1, "", "values"]], "vayesta.edmet.ufragment": [[12, 2, 1, "", "UEDMETFragment"]], "vayesta.edmet.ufragment.UEDMETFragment": [[12, 2, 1, "", "Flags"], [12, 2, 1, "", "Options"], [12, 2, 1, "", "Results"], [12, 4, 1, "", "add_tsymmetric_fragments"], [12, 4, 1, "", "calc_exact_ac"], [12, 4, 1, "", "canonicalize_mo"], [12, 4, 1, "", "change_options"], [12, 4, 1, "", "check_qba_approx"], [12, 4, 1, "", "check_solver"], [12, 3, 1, "", "cluster"], [12, 4, 1, "", "construct_boson_hamil"], [12, 4, 1, "", "construct_correlation_kernel_contrib"], [12, 3, 1, "", "contributes"], [12, 4, 1, "", "conv_to_aos"], [12, 4, 1, "", "copy"], [12, 4, 1, "", "couple_to_fragment"], [12, 4, 1, "", "couple_to_fragments"], [12, 4, 1, "", "define_bosons"], [12, 4, 1, "", "diagonalize_cluster_dm"], [12, 3, 1, "", "energy_couplings"], [12, 4, 1, "", "get_co_active"], [12, 4, 1, "", "get_coeff_env"], [12, 4, 1, "", "get_composite_moments"], [12, 4, 1, "", "get_correlation_kernel_contrib"], [12, 4, 1, "", "get_cv_active"], [12, 4, 1, "", "get_dmet_energy_contrib"], [12, 4, 1, "", "get_edmet_energy_contrib"], [12, 4, 1, "", "get_eri_couplings"], [12, 4, 1, "", "get_fock"], [12, 4, 1, "", "get_frag_hamil"], [12, 4, 1, "", "get_frag_hl_dm"], [12, 4, 1, "", "get_fragment_dmet_energy"], [12, 4, 1, "", "get_fragment_mf_energy"], [12, 4, 1, "", "get_fragment_mo_energy"], [12, 4, 1, "", "get_fragment_projector"], [12, 4, 1, "", "get_fragment_projector_ov"], [12, 4, 1, "", "get_fragments_with_overlap"], [12, 4, 1, "", "get_loc_eps"], [12, 4, 1, "", "get_mo_occupation"], [12, 4, 1, "", "get_nelectron_hl"], [12, 4, 1, "", "get_overlap"], [12, 4, 1, "", "get_rbos_split"], [12, 4, 1, "", "get_rot_ov_frag"], [12, 4, 1, "", "get_rot_to_mf_ov"], [12, 4, 1, "", "get_solver"], [12, 4, 1, "", "get_solver_options"], [12, 4, 1, "", "get_symmetry_children"], [12, 4, 1, "", "get_symmetry_error"], [12, 4, 1, "", "get_symmetry_generations"], [12, 4, 1, "", "get_symmetry_operation"], [12, 4, 1, "", "get_symmetry_parent"], [12, 4, 1, "", "get_symmetry_tree"], [12, 4, 1, "", "get_xc_couplings"], [12, 3, 1, "", "hamil"], [12, 3, 1, "", "id_name"], [12, 4, 1, "", "kernel"], [12, 4, 1, "", "log_info"], [12, 4, 1, "", "loop_symmetry_children"], [12, 4, 1, "", "make_bath"], [12, 4, 1, "", "make_cluster"], [12, 4, 1, "", "make_counterpoise_mol"], [12, 4, 1, "", "make_tsymmetric_fragments"], [12, 3, 1, "", "mf"], [12, 3, 1, "", "mol"], [12, 3, 1, "", "n_frag"], [12, 3, 1, "", "n_symmetry_children"], [12, 3, 1, "", "nbos"], [12, 3, 1, "", "nclus_ab"], [12, 3, 1, "", "nelectron"], [12, 3, 1, "", "nocc_ab"], [12, 3, 1, "", "nvir_ab"], [12, 3, 1, "", "ov_active"], [12, 3, 1, "", "ov_active_ab"], [12, 3, 1, "", "ov_active_tot"], [12, 3, 1, "", "ov_mf"], [12, 4, 1, "", "plot3d"], [12, 4, 1, "", "pop_analysis"], [12, 4, 1, "", "proj_hamil_qba"], [12, 4, 1, "", "project_ref_orbitals"], [12, 3, 1, "", "r_ao_bos"], [12, 3, 1, "", "r_bos"], [12, 3, 1, "", "r_bos_ao"], [12, 4, 1, "", "reset"], [12, 3, 1, "", "results"], [12, 4, 1, "", "set_cas"], [12, 4, 1, "", "set_up_fermionic_bath"], [12, 4, 1, "", "split_ov_spin_components"], [12, 4, 1, "", "store_cluster_rpa"], [12, 3, 1, "", "symmetry_factor"], [12, 4, 1, "", "test_total_rpa_energy"], [12, 4, 1, "", "trimmed_name"]], "vayesta.edmet.ufragment.UEDMETFragment.Flags": [[12, 5, 1, "", "bath_parent_fragment_id"], [12, 5, 1, "", "is_envelop"], [12, 5, 1, "", "is_secfrag"]], "vayesta.edmet.ufragment.UEDMETFragment.Options": [[12, 4, 1, "", "asdict"], [12, 5, 1, "", "auxiliary"], [12, 5, 1, "", "bath_options"], [12, 5, 1, "", "boson_xc_kernel"], [12, 5, 1, "", "bosonic_interaction"], [12, 4, 1, "", "change_dict_defaults"], [12, 5, 1, "", "coupled_fragments"], [12, 4, 1, "", "dict_with_defaults"], [12, 5, 1, "", "dm_with_frozen"], [12, 4, 1, "", "get"], [12, 4, 1, "", "get_default"], [12, 4, 1, "", "get_default_factory"], [12, 4, 1, "", "items"], [12, 4, 1, "", "keys"], [12, 5, 1, "", "make_dd_moments"], [12, 5, 1, "", "max_bos"], [12, 5, 1, "", "occ_proj_kernel"], [12, 5, 1, "", "old_sc_condition"], [12, 4, 1, "", "replace"], [12, 5, 1, "", "screening"], [12, 5, 1, "", "solver_options"], [12, 5, 1, "", "store_eris"], [12, 5, 1, "", "sym_factor"], [12, 4, 1, "", "update"], [12, 4, 1, "", "values"]], "vayesta.edmet.ufragment.UEDMETFragment.Results": [[12, 5, 1, "", "boson_freqs"], [12, 5, 1, "", "converged"], [12, 5, 1, "", "dd_mom0"], [12, 5, 1, "", "dd_mom1"], [12, 5, 1, "", "dm1"], [12, 5, 1, "", "dm2"], [12, 5, 1, "", "dm_eb"], [12, 5, 1, "", "e1"], [12, 5, 1, "", "e2"], [12, 5, 1, "", "e_corr"], [12, 5, 1, "", "e_fb"], [12, 5, 1, "", "eb_couplings"], [12, 5, 1, "", "fid"], [12, 5, 1, "", "n_active"], [12, 5, 1, "", "pwf"], [12, 5, 1, "", "wf"]], "vayesta.ewf": [[13, 1, 1, "", "EWF"], [13, 0, 0, "-", "ewf"], [13, 0, 0, "-", "fragment"], [13, 0, 0, "-", "helper"], [13, 0, 0, "-", "uewf"], [13, 0, 0, "-", "ufragment"]], "vayesta.ewf.ewf": [[13, 2, 1, "", "EWF"], [13, 2, 1, "", "Options"], [13, 5, 1, "", "REWF"]], "vayesta.ewf.ewf.EWF": [[13, 2, 1, "", "Fragment"], [13, 2, 1, "", "Options"], [13, 4, 1, "", "brueckner_scmf"], [13, 4, 1, "", "build_screened_eris"], [13, 4, 1, "", "cas_fragmentation"], [13, 4, 1, "", "change_options"], [13, 4, 1, "", "check_fragment_symmetry"], [13, 4, 1, "", "check_solver"], [13, 4, 1, "", "communicate_clusters"], [13, 4, 1, "", "create_invsym_fragments"], [13, 4, 1, "", "create_mirrorsym_fragments"], [13, 4, 1, "", "create_rotsym_fragments"], [13, 4, 1, "", "create_symmetric_fragments"], [13, 4, 1, "", "create_transsym_fragments"], [13, 3, 1, "", "df"], [13, 3, 1, "", "e_mf"], [13, 3, 1, "", "e_nuc"], [13, 3, 1, "", "e_tot"], [13, 4, 1, "", "fragmentation"], [13, 4, 1, "", "get_atomic_charges"], [13, 4, 1, "", "get_atomic_ssz"], [13, 4, 1, "", "get_atomic_ssz_mf"], [13, 4, 1, "", "get_average_cluster_size"], [13, 4, 1, "", "get_ccsd_corr_energy"], [13, 4, 1, "", "get_ccsd_energy"], [13, 4, 1, "", "get_cderi"], [13, 4, 1, "", "get_corrfunc"], [13, 4, 1, "", "get_corrfunc_mf"], [13, 4, 1, "", "get_dm_corr_energy"], [13, 4, 1, "", "get_dm_corr_energy_e1"], [13, 4, 1, "", "get_dm_corr_energy_e2"], [13, 4, 1, "", "get_dm_energy"], [13, 4, 1, "", "get_dmet_elec_energy"], [13, 4, 1, "", "get_dmet_energy"], [13, 4, 1, "", "get_e_corr"], [13, 4, 1, "", "get_eris_array"], [13, 4, 1, "", "get_eris_object"], [13, 4, 1, "", "get_exxdiv"], [13, 4, 1, "", "get_fbc_energy"], [13, 4, 1, "", "get_fock"], [13, 4, 1, "", "get_fock_for_bath"], [13, 4, 1, "", "get_fock_for_energy"], [13, 4, 1, "", "get_fragment_overlap_norm"], [13, 4, 1, "", "get_fragments"], [13, 4, 1, "", "get_global_l1"], [13, 4, 1, "", "get_global_l2"], [13, 4, 1, "", "get_global_t1"], [13, 4, 1, "", "get_global_t2"], [13, 4, 1, "", "get_hcore"], [13, 4, 1, "", "get_hcore_for_energy"], [13, 4, 1, "", "get_intercluster_mp2_energy"], [13, 4, 1, "", "get_l1"], [13, 4, 1, "", "get_l2"], [13, 4, 1, "", "get_lo_coeff"], [13, 4, 1, "", "get_max_cluster_size"], [13, 4, 1, "", "get_mean_cluster_size"], [13, 4, 1, "", "get_min_cluster_size"], [13, 4, 1, "", "get_ovlp"], [13, 4, 1, "", "get_ovlp_power"], [13, 4, 1, "", "get_proj_corr_energy"], [13, 4, 1, "", "get_proj_energy"], [13, 4, 1, "", "get_symmetry_child_fragments"], [13, 4, 1, "", "get_symmetry_parent_fragments"], [13, 4, 1, "", "get_t1"], [13, 4, 1, "", "get_t2"], [13, 4, 1, "", "get_veff"], [13, 4, 1, "", "get_veff_for_energy"], [13, 4, 1, "", "get_wf_corr_energy"], [13, 4, 1, "", "get_wf_energy"], [13, 4, 1, "", "has_complete_fragmentation"], [13, 4, 1, "", "has_complete_occupied_fragmentation"], [13, 4, 1, "", "has_complete_virtual_fragmentation"], [13, 3, 1, "", "has_df"], [13, 3, 1, "", "has_exxdiv"], [13, 4, 1, "", "has_orthonormal_fragmentation"], [13, 4, 1, "", "iao_fragmentation"], [13, 4, 1, "", "iaopao_fragmentation"], [13, 4, 1, "", "init_mf"], [13, 5, 1, "", "is_rhf"], [13, 5, 1, "", "is_uhf"], [13, 4, 1, "", "kernel"], [13, 4, 1, "", "loop"], [13, 4, 1, "", "make_rdm1"], [13, 4, 1, "", "make_rdm1_demo"], [13, 4, 1, "", "make_rdm2"], [13, 4, 1, "", "make_rdm2_demo"], [13, 3, 1, "", "mo_coeff"], [13, 3, 1, "", "mo_coeff_occ"], [13, 3, 1, "", "mo_coeff_vir"], [13, 3, 1, "", "mo_energy"], [13, 3, 1, "", "mo_energy_occ"], [13, 3, 1, "", "mo_energy_vir"], [13, 3, 1, "", "mo_occ"], [13, 3, 1, "", "mol"], [13, 3, 1, "", "nao"], [13, 3, 1, "", "ncells"], [13, 3, 1, "", "nfrag"], [13, 3, 1, "", "nmo"], [13, 3, 1, "", "nocc"], [13, 3, 1, "", "nvir"], [13, 4, 1, "", "optimize_chempot"], [13, 3, 1, "", "pbc_dimension"], [13, 4, 1, "", "pdmet_scmf"], [13, 4, 1, "", "pop_analysis"], [13, 4, 1, "", "require_complete_fragmentation"], [13, 4, 1, "", "reset"], [13, 4, 1, "", "sao_fragmentation"], [13, 4, 1, "", "set_hcore"], [13, 4, 1, "", "set_ovlp"], [13, 4, 1, "", "set_veff"], [13, 4, 1, "", "site_fragmentation"], [13, 5, 1, "", "spinsym"], [13, 4, 1, "", "t1_diagnostic"], [13, 4, 1, "", "tailor_all_fragments"], [13, 4, 1, "", "update_mf"], [13, 4, 1, "", "write_population"]], "vayesta.ewf.ewf.EWF.Fragment": [[13, 2, 1, "", "Flags"], [13, 2, 1, "", "Options"], [13, 2, 1, "", "Results"], [13, 4, 1, "", "add_external_corrections"], [13, 4, 1, "", "add_tsymmetric_fragments"], [13, 4, 1, "", "canonicalize_mo"], [13, 4, 1, "", "change_options"], [13, 4, 1, "", "check_solver"], [13, 4, 1, "", "clear_external_corrections"], [13, 3, 1, "", "cluster"], [13, 3, 1, "", "contributes"], [13, 4, 1, "", "copy"], [13, 4, 1, "", "counterpoise_calculation"], [13, 4, 1, "", "couple_to_fragment"], [13, 4, 1, "", "couple_to_fragments"], [13, 4, 1, "", "diagonalize_cluster_dm"], [13, 4, 1, "", "get_coeff_env"], [13, 4, 1, "", "get_frag_hamil"], [13, 4, 1, "", "get_fragment_bsse"], [13, 4, 1, "", "get_fragment_dmet_energy"], [13, 4, 1, "", "get_fragment_energy"], [13, 4, 1, "", "get_fragment_mf_energy"], [13, 4, 1, "", "get_fragment_mo_energy"], [13, 4, 1, "", "get_fragment_projector"], [13, 4, 1, "", "get_fragments_with_overlap"], [13, 4, 1, "", "get_init_guess"], [13, 4, 1, "", "get_mo_occupation"], [13, 4, 1, "", "get_overlap"], [13, 4, 1, "", "get_solver"], [13, 4, 1, "", "get_solver_options"], [13, 4, 1, "", "get_symmetry_children"], [13, 4, 1, "", "get_symmetry_error"], [13, 4, 1, "", "get_symmetry_generations"], [13, 4, 1, "", "get_symmetry_operation"], [13, 4, 1, "", "get_symmetry_parent"], [13, 4, 1, "", "get_symmetry_tree"], [13, 3, 1, "", "hamil"], [13, 3, 1, "", "id_name"], [13, 4, 1, "", "kernel"], [13, 4, 1, "", "log_info"], [13, 4, 1, "", "loop_symmetry_children"], [13, 4, 1, "", "make_bath"], [13, 4, 1, "", "make_cluster"], [13, 4, 1, "", "make_counterpoise_mol"], [13, 4, 1, "", "make_fragment_dm1"], [13, 4, 1, "", "make_fragment_dm2cumulant"], [13, 4, 1, "", "make_fragment_dm2cumulant_energy"], [13, 4, 1, "", "make_tsymmetric_fragments"], [13, 3, 1, "", "mf"], [13, 3, 1, "", "mol"], [13, 3, 1, "", "n_frag"], [13, 3, 1, "", "n_symmetry_children"], [13, 3, 1, "", "nelectron"], [13, 4, 1, "", "plot3d"], [13, 4, 1, "", "pop_analysis"], [13, 4, 1, "", "project_ref_orbitals"], [13, 4, 1, "", "reset"], [13, 3, 1, "", "results"], [13, 4, 1, "", "set_cas"], [13, 3, 1, "", "symmetry_factor"], [13, 4, 1, "", "tailor_with_fragments"], [13, 4, 1, "", "trimmed_name"]], "vayesta.ewf.ewf.EWF.Fragment.Flags": [[13, 5, 1, "", "bath_parent_fragment_id"], [13, 5, 1, "", "external_corrections"], [13, 5, 1, "", "is_envelop"], [13, 5, 1, "", "is_secfrag"], [13, 5, 1, "", "test_extcorr"]], "vayesta.ewf.ewf.EWF.Fragment.Options": [[13, 4, 1, "", "asdict"], [13, 5, 1, "", "auxiliary"], [13, 5, 1, "", "bath_options"], [13, 5, 1, "", "bsse_correction"], [13, 5, 1, "", "bsse_rmax"], [13, 5, 1, "", "c_cas_occ"], [13, 5, 1, "", "c_cas_vir"], [13, 5, 1, "", "calc_e_dm_corr"], [13, 5, 1, "", "calc_e_wf_corr"], [13, 4, 1, "", "change_dict_defaults"], [13, 5, 1, "", "coupled_fragments"], [13, 4, 1, "", "dict_with_defaults"], [13, 5, 1, "", "dm_with_frozen"], [13, 4, 1, "", "get"], [13, 4, 1, "", "get_default"], [13, 4, 1, "", "get_default_factory"], [13, 4, 1, "", "items"], [13, 4, 1, "", "keys"], [13, 5, 1, "", "nelectron_target"], [13, 5, 1, "", "nelectron_target_atol"], [13, 5, 1, "", "nelectron_target_rtol"], [13, 4, 1, "", "replace"], [13, 5, 1, "", "sc_mode"], [13, 5, 1, "", "screening"], [13, 5, 1, "", "solver_options"], [13, 5, 1, "", "store_eris"], [13, 5, 1, "", "store_wf_type"], [13, 5, 1, "", "sym_factor"], [13, 5, 1, "", "t_as_lambda"], [13, 5, 1, "", "tcc_fci_opts"], [13, 4, 1, "", "update"], [13, 4, 1, "", "values"], [13, 5, 1, "", "wf_factor"]], "vayesta.ewf.ewf.EWF.Fragment.Results": [[13, 5, 1, "", "converged"], [13, 3, 1, "", "dm1"], [13, 3, 1, "", "dm2"], [13, 5, 1, "", "e_corr"], [13, 5, 1, "", "e_corr_dm2cumulant"], [13, 5, 1, "", "ea_energy"], [13, 5, 1, "", "fid"], [13, 5, 1, "", "ip_energy"], [13, 5, 1, "", "n_active"], [13, 5, 1, "", "pwf"], [13, 5, 1, "", "wf"]], "vayesta.ewf.ewf.EWF.Options": [[13, 4, 1, "", "asdict"], [13, 5, 1, "", "bath_options"], [13, 5, 1, "", "bsse_correction"], [13, 5, 1, "", "bsse_rmax"], [13, 5, 1, "", "calc_e_dm_corr"], [13, 5, 1, "", "calc_e_wf_corr"], [13, 4, 1, "", "change_dict_defaults"], [13, 5, 1, "", "coupled_iterations"], [13, 4, 1, "", "dict_with_defaults"], [13, 5, 1, "", "dm_with_frozen"], [13, 5, 1, "", "energy_functional"], [13, 4, 1, "", "get"], [13, 4, 1, "", "get_default"], [13, 4, 1, "", "get_default_factory"], [13, 5, 1, "", "global_frag_chempot"], [13, 5, 1, "", "iao_minao"], [13, 4, 1, "", "items"], [13, 4, 1, "", "keys"], [13, 5, 1, "", "nelectron_target"], [13, 5, 1, "", "project_eris"], [13, 5, 1, "", "project_init_guess"], [13, 4, 1, "", "replace"], [13, 5, 1, "", "sc_mode"], [13, 5, 1, "", "screening"], [13, 5, 1, "", "solver_options"], [13, 5, 1, "", "store_eris"], [13, 5, 1, "", "store_wf_type"], [13, 5, 1, "", "symmetry_mf_tol"], [13, 5, 1, "", "symmetry_tol"], [13, 5, 1, "", "t_as_lambda"], [13, 4, 1, "", "update"], [13, 4, 1, "", "values"]], "vayesta.ewf.ewf.Options": [[13, 4, 1, "", "asdict"], [13, 5, 1, "", "bath_options"], [13, 5, 1, "", "bsse_correction"], [13, 5, 1, "", "bsse_rmax"], [13, 5, 1, "", "calc_e_dm_corr"], [13, 5, 1, "", "calc_e_wf_corr"], [13, 4, 1, "", "change_dict_defaults"], [13, 5, 1, "", "coupled_iterations"], [13, 4, 1, "", "dict_with_defaults"], [13, 5, 1, "", "dm_with_frozen"], [13, 5, 1, "", "energy_functional"], [13, 4, 1, "", "get"], [13, 4, 1, "", "get_default"], [13, 4, 1, "", "get_default_factory"], [13, 5, 1, "", "global_frag_chempot"], [13, 5, 1, "", "iao_minao"], [13, 4, 1, "", "items"], [13, 4, 1, "", "keys"], [13, 5, 1, "", "nelectron_target"], [13, 5, 1, "", "project_eris"], [13, 5, 1, "", "project_init_guess"], [13, 4, 1, "", "replace"], [13, 5, 1, "", "sc_mode"], [13, 5, 1, "", "screening"], [13, 5, 1, "", "solver_options"], [13, 5, 1, "", "store_eris"], [13, 5, 1, "", "store_wf_type"], [13, 5, 1, "", "symmetry_mf_tol"], [13, 5, 1, "", "symmetry_tol"], [13, 5, 1, "", "t_as_lambda"], [13, 4, 1, "", "update"], [13, 4, 1, "", "values"]], "vayesta.ewf.fragment": [[13, 2, 1, "", "Fragment"], [13, 2, 1, "", "Options"], [13, 1, 1, "", "get_fragment_mpi_rank"]], "vayesta.ewf.fragment.Fragment": [[13, 2, 1, "", "Flags"], [13, 2, 1, "", "Options"], [13, 2, 1, "", "Results"], [13, 4, 1, "", "add_external_corrections"], [13, 4, 1, "", "add_tsymmetric_fragments"], [13, 4, 1, "", "canonicalize_mo"], [13, 4, 1, "", "change_options"], [13, 4, 1, "", "check_solver"], [13, 4, 1, "", "clear_external_corrections"], [13, 3, 1, "", "cluster"], [13, 3, 1, "", "contributes"], [13, 4, 1, "", "copy"], [13, 4, 1, "", "counterpoise_calculation"], [13, 4, 1, "", "couple_to_fragment"], [13, 4, 1, "", "couple_to_fragments"], [13, 4, 1, "", "diagonalize_cluster_dm"], [13, 4, 1, "", "get_coeff_env"], [13, 4, 1, "", "get_frag_hamil"], [13, 4, 1, "", "get_fragment_bsse"], [13, 4, 1, "", "get_fragment_dmet_energy"], [13, 4, 1, "", "get_fragment_energy"], [13, 4, 1, "", "get_fragment_mf_energy"], [13, 4, 1, "", "get_fragment_mo_energy"], [13, 4, 1, "", "get_fragment_projector"], [13, 4, 1, "", "get_fragments_with_overlap"], [13, 4, 1, "", "get_init_guess"], [13, 4, 1, "", "get_mo_occupation"], [13, 4, 1, "", "get_overlap"], [13, 4, 1, "", "get_solver"], [13, 4, 1, "", "get_solver_options"], [13, 4, 1, "", "get_symmetry_children"], [13, 4, 1, "", "get_symmetry_error"], [13, 4, 1, "", "get_symmetry_generations"], [13, 4, 1, "", "get_symmetry_operation"], [13, 4, 1, "", "get_symmetry_parent"], [13, 4, 1, "", "get_symmetry_tree"], [13, 3, 1, "", "hamil"], [13, 3, 1, "", "id_name"], [13, 4, 1, "", "kernel"], [13, 4, 1, "", "log_info"], [13, 4, 1, "", "loop_symmetry_children"], [13, 4, 1, "", "make_bath"], [13, 4, 1, "", "make_cluster"], [13, 4, 1, "", "make_counterpoise_mol"], [13, 4, 1, "", "make_fragment_dm1"], [13, 4, 1, "", "make_fragment_dm2cumulant"], [13, 4, 1, "", "make_fragment_dm2cumulant_energy"], [13, 4, 1, "", "make_tsymmetric_fragments"], [13, 3, 1, "", "mf"], [13, 3, 1, "", "mol"], [13, 3, 1, "", "n_frag"], [13, 3, 1, "", "n_symmetry_children"], [13, 3, 1, "", "nelectron"], [13, 4, 1, "", "plot3d"], [13, 4, 1, "", "pop_analysis"], [13, 4, 1, "", "project_ref_orbitals"], [13, 4, 1, "", "reset"], [13, 3, 1, "", "results"], [13, 4, 1, "", "set_cas"], [13, 3, 1, "", "symmetry_factor"], [13, 4, 1, "", "tailor_with_fragments"], [13, 4, 1, "", "trimmed_name"]], "vayesta.ewf.fragment.Fragment.Flags": [[13, 5, 1, "", "bath_parent_fragment_id"], [13, 5, 1, "", "external_corrections"], [13, 5, 1, "", "is_envelop"], [13, 5, 1, "", "is_secfrag"], [13, 5, 1, "", "test_extcorr"]], "vayesta.ewf.fragment.Fragment.Options": [[13, 4, 1, "", "asdict"], [13, 5, 1, "", "auxiliary"], [13, 5, 1, "", "bath_options"], [13, 5, 1, "", "bsse_correction"], [13, 5, 1, "", "bsse_rmax"], [13, 5, 1, "", "c_cas_occ"], [13, 5, 1, "", "c_cas_vir"], [13, 5, 1, "", "calc_e_dm_corr"], [13, 5, 1, "", "calc_e_wf_corr"], [13, 4, 1, "", "change_dict_defaults"], [13, 5, 1, "", "coupled_fragments"], [13, 4, 1, "", "dict_with_defaults"], [13, 5, 1, "", "dm_with_frozen"], [13, 4, 1, "", "get"], [13, 4, 1, "", "get_default"], [13, 4, 1, "", "get_default_factory"], [13, 4, 1, "", "items"], [13, 4, 1, "", "keys"], [13, 5, 1, "", "nelectron_target"], [13, 5, 1, "", "nelectron_target_atol"], [13, 5, 1, "", "nelectron_target_rtol"], [13, 4, 1, "", "replace"], [13, 5, 1, "", "sc_mode"], [13, 5, 1, "", "screening"], [13, 5, 1, "", "solver_options"], [13, 5, 1, "", "store_eris"], [13, 5, 1, "", "store_wf_type"], [13, 5, 1, "", "sym_factor"], [13, 5, 1, "", "t_as_lambda"], [13, 5, 1, "", "tcc_fci_opts"], [13, 4, 1, "", "update"], [13, 4, 1, "", "values"], [13, 5, 1, "", "wf_factor"]], "vayesta.ewf.fragment.Fragment.Results": [[13, 5, 1, "", "converged"], [13, 3, 1, "", "dm1"], [13, 3, 1, "", "dm2"], [13, 5, 1, "", "e_corr"], [13, 5, 1, "", "e_corr_dm2cumulant"], [13, 5, 1, "", "ea_energy"], [13, 5, 1, "", "fid"], [13, 5, 1, "", "ip_energy"], [13, 5, 1, "", "n_active"], [13, 5, 1, "", "pwf"], [13, 5, 1, "", "wf"]], "vayesta.ewf.fragment.Options": [[13, 4, 1, "", "asdict"], [13, 5, 1, "", "auxiliary"], [13, 5, 1, "", "bath_options"], [13, 5, 1, "", "bsse_correction"], [13, 5, 1, "", "bsse_rmax"], [13, 5, 1, "", "c_cas_occ"], [13, 5, 1, "", "c_cas_vir"], [13, 5, 1, "", "calc_e_dm_corr"], [13, 5, 1, "", "calc_e_wf_corr"], [13, 4, 1, "", "change_dict_defaults"], [13, 5, 1, "", "coupled_fragments"], [13, 4, 1, "", "dict_with_defaults"], [13, 5, 1, "", "dm_with_frozen"], [13, 4, 1, "", "get"], [13, 4, 1, "", "get_default"], [13, 4, 1, "", "get_default_factory"], [13, 4, 1, "", "items"], [13, 4, 1, "", "keys"], [13, 5, 1, "", "nelectron_target"], [13, 5, 1, "", "nelectron_target_atol"], [13, 5, 1, "", "nelectron_target_rtol"], [13, 4, 1, "", "replace"], [13, 5, 1, "", "sc_mode"], [13, 5, 1, "", "screening"], [13, 5, 1, "", "solver_options"], [13, 5, 1, "", "store_eris"], [13, 5, 1, "", "store_wf_type"], [13, 5, 1, "", "sym_factor"], [13, 5, 1, "", "t_as_lambda"], [13, 5, 1, "", "tcc_fci_opts"], [13, 4, 1, "", "update"], [13, 4, 1, "", "values"], [13, 5, 1, "", "wf_factor"]], "vayesta.ewf.helper": [[13, 1, 1, "", "orthogonalize_mo"]], "vayesta.ewf.uewf": [[13, 2, 1, "", "UEWF"]], "vayesta.ewf.uewf.UEWF": [[13, 2, 1, "", "Fragment"], [13, 2, 1, "", "Options"], [13, 4, 1, "", "brueckner_scmf"], [13, 4, 1, "", "build_screened_eris"], [13, 4, 1, "", "cas_fragmentation"], [13, 4, 1, "", "change_options"], [13, 4, 1, "", "check_fragment_symmetry"], [13, 4, 1, "", "check_solver"], [13, 4, 1, "", "communicate_clusters"], [13, 4, 1, "", "create_invsym_fragments"], [13, 4, 1, "", "create_mirrorsym_fragments"], [13, 4, 1, "", "create_rotsym_fragments"], [13, 4, 1, "", "create_symmetric_fragments"], [13, 4, 1, "", "create_transsym_fragments"], [13, 4, 1, "", "d1_diagnostic"], [13, 3, 1, "", "df"], [13, 3, 1, "", "e_mf"], [13, 3, 1, "", "e_nuc"], [13, 3, 1, "", "e_tot"], [13, 4, 1, "", "fragmentation"], [13, 4, 1, "", "get_atomic_charges"], [13, 4, 1, "", "get_atomic_ssz"], [13, 4, 1, "", "get_atomic_ssz_mf"], [13, 4, 1, "", "get_average_cluster_size"], [13, 4, 1, "", "get_ccsd_corr_energy"], [13, 4, 1, "", "get_ccsd_energy"], [13, 4, 1, "", "get_cderi"], [13, 4, 1, "", "get_corrfunc"], [13, 4, 1, "", "get_corrfunc_mf"], [13, 4, 1, "", "get_dm_corr_energy"], [13, 4, 1, "", "get_dm_corr_energy_e1"], [13, 4, 1, "", "get_dm_corr_energy_e2"], [13, 4, 1, "", "get_dm_energy"], [13, 4, 1, "", "get_dmet_elec_energy"], [13, 4, 1, "", "get_dmet_energy"], [13, 4, 1, "", "get_e_corr"], [13, 4, 1, "", "get_eris_array"], [13, 4, 1, "", "get_eris_array_uhf"], [13, 4, 1, "", "get_eris_object"], [13, 4, 1, "", "get_exxdiv"], [13, 4, 1, "", "get_fbc_energy"], [13, 4, 1, "", "get_fock"], [13, 4, 1, "", "get_fock_for_bath"], [13, 4, 1, "", "get_fock_for_energy"], [13, 4, 1, "", "get_fragment_overlap_norm"], [13, 4, 1, "", "get_fragments"], [13, 4, 1, "", "get_global_l1"], [13, 4, 1, "", "get_global_l2"], [13, 4, 1, "", "get_global_t1"], [13, 4, 1, "", "get_global_t2"], [13, 4, 1, "", "get_hcore"], [13, 4, 1, "", "get_hcore_for_energy"], [13, 4, 1, "", "get_intercluster_mp2_energy"], [13, 4, 1, "", "get_l1"], [13, 4, 1, "", "get_l2"], [13, 4, 1, "", "get_lo_coeff"], [13, 4, 1, "", "get_max_cluster_size"], [13, 4, 1, "", "get_mean_cluster_size"], [13, 4, 1, "", "get_min_cluster_size"], [13, 4, 1, "", "get_ovlp"], [13, 4, 1, "", "get_ovlp_power"], [13, 4, 1, "", "get_proj_corr_energy"], [13, 4, 1, "", "get_proj_energy"], [13, 4, 1, "", "get_symmetry_child_fragments"], [13, 4, 1, "", "get_symmetry_parent_fragments"], [13, 4, 1, "", "get_t1"], [13, 4, 1, "", "get_t2"], [13, 4, 1, "", "get_veff"], [13, 4, 1, "", "get_veff_for_energy"], [13, 4, 1, "", "get_wf_corr_energy"], [13, 4, 1, "", "get_wf_energy"], [13, 4, 1, "", "has_complete_fragmentation"], [13, 4, 1, "", "has_complete_occupied_fragmentation"], [13, 4, 1, "", "has_complete_virtual_fragmentation"], [13, 3, 1, "", "has_df"], [13, 3, 1, "", "has_exxdiv"], [13, 4, 1, "", "has_orthonormal_fragmentation"], [13, 4, 1, "", "iao_fragmentation"], [13, 4, 1, "", "iaopao_fragmentation"], [13, 4, 1, "", "init_mf"], [13, 5, 1, "", "is_rhf"], [13, 5, 1, "", "is_uhf"], [13, 4, 1, "", "kernel"], [13, 4, 1, "", "loop"], [13, 4, 1, "", "make_rdm1"], [13, 4, 1, "", "make_rdm1_demo"], [13, 4, 1, "", "make_rdm2"], [13, 4, 1, "", "make_rdm2_demo"], [13, 3, 1, "", "mo_coeff"], [13, 3, 1, "", "mo_coeff_occ"], [13, 3, 1, "", "mo_coeff_vir"], [13, 3, 1, "", "mo_energy"], [13, 3, 1, "", "mo_energy_occ"], [13, 3, 1, "", "mo_energy_vir"], [13, 3, 1, "", "mo_occ"], [13, 3, 1, "", "mol"], [13, 3, 1, "", "nao"], [13, 3, 1, "", "ncells"], [13, 3, 1, "", "nfrag"], [13, 3, 1, "", "nmo"], [13, 3, 1, "", "nocc"], [13, 3, 1, "", "nvir"], [13, 4, 1, "", "optimize_chempot"], [13, 3, 1, "", "pbc_dimension"], [13, 4, 1, "", "pdmet_scmf"], [13, 4, 1, "", "pop_analysis"], [13, 4, 1, "", "require_complete_fragmentation"], [13, 4, 1, "", "reset"], [13, 4, 1, "", "sao_fragmentation"], [13, 4, 1, "", "set_hcore"], [13, 4, 1, "", "set_ovlp"], [13, 4, 1, "", "set_veff"], [13, 4, 1, "", "site_fragmentation"], [13, 5, 1, "", "spinsym"], [13, 4, 1, "", "t1_diagnostic"], [13, 4, 1, "", "tailor_all_fragments"], [13, 4, 1, "", "update_mf"], [13, 4, 1, "", "write_population"]], "vayesta.ewf.uewf.UEWF.Fragment": [[13, 2, 1, "", "Flags"], [13, 2, 1, "", "Options"], [13, 2, 1, "", "Results"], [13, 4, 1, "", "add_external_corrections"], [13, 4, 1, "", "add_tsymmetric_fragments"], [13, 4, 1, "", "canonicalize_mo"], [13, 4, 1, "", "change_options"], [13, 4, 1, "", "check_solver"], [13, 4, 1, "", "clear_external_corrections"], [13, 3, 1, "", "cluster"], [13, 3, 1, "", "contributes"], [13, 4, 1, "", "copy"], [13, 4, 1, "", "counterpoise_calculation"], [13, 4, 1, "", "couple_to_fragment"], [13, 4, 1, "", "couple_to_fragments"], [13, 4, 1, "", "diagonalize_cluster_dm"], [13, 4, 1, "", "get_coeff_env"], [13, 4, 1, "", "get_frag_hamil"], [13, 4, 1, "", "get_fragment_bsse"], [13, 4, 1, "", "get_fragment_dmet_energy"], [13, 4, 1, "", "get_fragment_energy"], [13, 4, 1, "", "get_fragment_mf_energy"], [13, 4, 1, "", "get_fragment_mo_energy"], [13, 4, 1, "", "get_fragment_projector"], [13, 4, 1, "", "get_fragments_with_overlap"], [13, 4, 1, "", "get_init_guess"], [13, 4, 1, "", "get_mo_occupation"], [13, 4, 1, "", "get_overlap"], [13, 4, 1, "", "get_solver"], [13, 4, 1, "", "get_solver_options"], [13, 4, 1, "", "get_symmetry_children"], [13, 4, 1, "", "get_symmetry_error"], [13, 4, 1, "", "get_symmetry_generations"], [13, 4, 1, "", "get_symmetry_operation"], [13, 4, 1, "", "get_symmetry_parent"], [13, 4, 1, "", "get_symmetry_tree"], [13, 3, 1, "", "hamil"], [13, 3, 1, "", "id_name"], [13, 4, 1, "", "kernel"], [13, 4, 1, "", "log_info"], [13, 4, 1, "", "loop_symmetry_children"], [13, 4, 1, "", "make_bath"], [13, 4, 1, "", "make_cluster"], [13, 4, 1, "", "make_counterpoise_mol"], [13, 4, 1, "", "make_fragment_dm1"], [13, 4, 1, "", "make_fragment_dm2cumulant"], [13, 4, 1, "", "make_fragment_dm2cumulant_energy"], [13, 4, 1, "", "make_tsymmetric_fragments"], [13, 3, 1, "", "mf"], [13, 3, 1, "", "mol"], [13, 3, 1, "", "n_frag"], [13, 3, 1, "", "n_symmetry_children"], [13, 3, 1, "", "nelectron"], [13, 4, 1, "", "plot3d"], [13, 4, 1, "", "pop_analysis"], [13, 4, 1, "", "project_ref_orbitals"], [13, 4, 1, "", "reset"], [13, 3, 1, "", "results"], [13, 4, 1, "", "set_cas"], [13, 3, 1, "", "symmetry_factor"], [13, 4, 1, "", "tailor_with_fragments"], [13, 4, 1, "", "trimmed_name"]], "vayesta.ewf.uewf.UEWF.Fragment.Flags": [[13, 5, 1, "", "bath_parent_fragment_id"], [13, 5, 1, "", "external_corrections"], [13, 5, 1, "", "is_envelop"], [13, 5, 1, "", "is_secfrag"], [13, 5, 1, "", "test_extcorr"]], "vayesta.ewf.uewf.UEWF.Fragment.Options": [[13, 4, 1, "", "asdict"], [13, 5, 1, "", "auxiliary"], [13, 5, 1, "", "bath_options"], [13, 5, 1, "", "bsse_correction"], [13, 5, 1, "", "bsse_rmax"], [13, 5, 1, "", "c_cas_occ"], [13, 5, 1, "", "c_cas_vir"], [13, 5, 1, "", "calc_e_dm_corr"], [13, 5, 1, "", "calc_e_wf_corr"], [13, 4, 1, "", "change_dict_defaults"], [13, 5, 1, "", "coupled_fragments"], [13, 4, 1, "", "dict_with_defaults"], [13, 5, 1, "", "dm_with_frozen"], [13, 4, 1, "", "get"], [13, 4, 1, "", "get_default"], [13, 4, 1, "", "get_default_factory"], [13, 4, 1, "", "items"], [13, 4, 1, "", "keys"], [13, 5, 1, "", "nelectron_target"], [13, 5, 1, "", "nelectron_target_atol"], [13, 5, 1, "", "nelectron_target_rtol"], [13, 4, 1, "", "replace"], [13, 5, 1, "", "sc_mode"], [13, 5, 1, "", "screening"], [13, 5, 1, "", "solver_options"], [13, 5, 1, "", "store_eris"], [13, 5, 1, "", "store_wf_type"], [13, 5, 1, "", "sym_factor"], [13, 5, 1, "", "t_as_lambda"], [13, 5, 1, "", "tcc_fci_opts"], [13, 4, 1, "", "update"], [13, 4, 1, "", "values"], [13, 5, 1, "", "wf_factor"]], "vayesta.ewf.uewf.UEWF.Fragment.Results": [[13, 5, 1, "", "converged"], [13, 3, 1, "", "dm1"], [13, 3, 1, "", "dm2"], [13, 5, 1, "", "e_corr"], [13, 5, 1, "", "e_corr_dm2cumulant"], [13, 5, 1, "", "ea_energy"], [13, 5, 1, "", "fid"], [13, 5, 1, "", "ip_energy"], [13, 5, 1, "", "n_active"], [13, 5, 1, "", "pwf"], [13, 5, 1, "", "wf"]], "vayesta.ewf.uewf.UEWF.Options": [[13, 4, 1, "", "asdict"], [13, 5, 1, "", "bath_options"], [13, 5, 1, "", "bsse_correction"], [13, 5, 1, "", "bsse_rmax"], [13, 5, 1, "", "calc_e_dm_corr"], [13, 5, 1, "", "calc_e_wf_corr"], [13, 4, 1, "", "change_dict_defaults"], [13, 5, 1, "", "coupled_iterations"], [13, 4, 1, "", "dict_with_defaults"], [13, 5, 1, "", "dm_with_frozen"], [13, 5, 1, "", "energy_functional"], [13, 4, 1, "", "get"], [13, 4, 1, "", "get_default"], [13, 4, 1, "", "get_default_factory"], [13, 5, 1, "", "global_frag_chempot"], [13, 5, 1, "", "iao_minao"], [13, 4, 1, "", "items"], [13, 4, 1, "", "keys"], [13, 5, 1, "", "nelectron_target"], [13, 5, 1, "", "project_eris"], [13, 5, 1, "", "project_init_guess"], [13, 4, 1, "", "replace"], [13, 5, 1, "", "sc_mode"], [13, 5, 1, "", "screening"], [13, 5, 1, "", "solver_options"], [13, 5, 1, "", "store_eris"], [13, 5, 1, "", "store_wf_type"], [13, 5, 1, "", "symmetry_mf_tol"], [13, 5, 1, "", "symmetry_tol"], [13, 5, 1, "", "t_as_lambda"], [13, 4, 1, "", "update"], [13, 4, 1, "", "values"]], "vayesta.ewf.ufragment": [[13, 2, 1, "", "Fragment"]], "vayesta.ewf.ufragment.Fragment": [[13, 2, 1, "", "Flags"], [13, 2, 1, "", "Options"], [13, 2, 1, "", "Results"], [13, 4, 1, "", "add_external_corrections"], [13, 4, 1, "", "add_tsymmetric_fragments"], [13, 4, 1, "", "canonicalize_mo"], [13, 4, 1, "", "change_options"], [13, 4, 1, "", "check_solver"], [13, 4, 1, "", "clear_external_corrections"], [13, 3, 1, "", "cluster"], [13, 3, 1, "", "contributes"], [13, 4, 1, "", "copy"], [13, 4, 1, "", "counterpoise_calculation"], [13, 4, 1, "", "couple_to_fragment"], [13, 4, 1, "", "couple_to_fragments"], [13, 4, 1, "", "diagonalize_cluster_dm"], [13, 4, 1, "", "get_coeff_env"], [13, 4, 1, "", "get_frag_hamil"], [13, 4, 1, "", "get_fragment_bsse"], [13, 4, 1, "", "get_fragment_dmet_energy"], [13, 4, 1, "", "get_fragment_energy"], [13, 4, 1, "", "get_fragment_mf_energy"], [13, 4, 1, "", "get_fragment_mo_energy"], [13, 4, 1, "", "get_fragment_projector"], [13, 4, 1, "", "get_fragments_with_overlap"], [13, 4, 1, "", "get_init_guess"], [13, 4, 1, "", "get_mo_occupation"], [13, 4, 1, "", "get_overlap"], [13, 4, 1, "", "get_solver"], [13, 4, 1, "", "get_solver_options"], [13, 4, 1, "", "get_symmetry_children"], [13, 4, 1, "", "get_symmetry_error"], [13, 4, 1, "", "get_symmetry_generations"], [13, 4, 1, "", "get_symmetry_operation"], [13, 4, 1, "", "get_symmetry_parent"], [13, 4, 1, "", "get_symmetry_tree"], [13, 3, 1, "", "hamil"], [13, 3, 1, "", "id_name"], [13, 4, 1, "", "kernel"], [13, 4, 1, "", "log_info"], [13, 4, 1, "", "loop_symmetry_children"], [13, 4, 1, "", "make_bath"], [13, 4, 1, "", "make_cluster"], [13, 4, 1, "", "make_counterpoise_mol"], [13, 4, 1, "", "make_fragment_dm1"], [13, 4, 1, "", "make_fragment_dm2cumulant"], [13, 4, 1, "", "make_fragment_dm2cumulant_energy"], [13, 4, 1, "", "make_tsymmetric_fragments"], [13, 3, 1, "", "mf"], [13, 3, 1, "", "mol"], [13, 3, 1, "", "n_frag"], [13, 3, 1, "", "n_symmetry_children"], [13, 3, 1, "", "nelectron"], [13, 4, 1, "", "plot3d"], [13, 4, 1, "", "pop_analysis"], [13, 4, 1, "", "project_ref_orbitals"], [13, 4, 1, "", "reset"], [13, 3, 1, "", "results"], [13, 4, 1, "", "set_cas"], [13, 3, 1, "", "symmetry_factor"], [13, 4, 1, "", "tailor_with_fragments"], [13, 4, 1, "", "trimmed_name"]], "vayesta.ewf.ufragment.Fragment.Flags": [[13, 5, 1, "", "bath_parent_fragment_id"], [13, 5, 1, "", "external_corrections"], [13, 5, 1, "", "is_envelop"], [13, 5, 1, "", "is_secfrag"], [13, 5, 1, "", "test_extcorr"]], "vayesta.ewf.ufragment.Fragment.Options": [[13, 4, 1, "", "asdict"], [13, 5, 1, "", "auxiliary"], [13, 5, 1, "", "bath_options"], [13, 5, 1, "", "bsse_correction"], [13, 5, 1, "", "bsse_rmax"], [13, 5, 1, "", "c_cas_occ"], [13, 5, 1, "", "c_cas_vir"], [13, 5, 1, "", "calc_e_dm_corr"], [13, 5, 1, "", "calc_e_wf_corr"], [13, 4, 1, "", "change_dict_defaults"], [13, 5, 1, "", "coupled_fragments"], [13, 4, 1, "", "dict_with_defaults"], [13, 5, 1, "", "dm_with_frozen"], [13, 4, 1, "", "get"], [13, 4, 1, "", "get_default"], [13, 4, 1, "", "get_default_factory"], [13, 4, 1, "", "items"], [13, 4, 1, "", "keys"], [13, 5, 1, "", "nelectron_target"], [13, 5, 1, "", "nelectron_target_atol"], [13, 5, 1, "", "nelectron_target_rtol"], [13, 4, 1, "", "replace"], [13, 5, 1, "", "sc_mode"], [13, 5, 1, "", "screening"], [13, 5, 1, "", "solver_options"], [13, 5, 1, "", "store_eris"], [13, 5, 1, "", "store_wf_type"], [13, 5, 1, "", "sym_factor"], [13, 5, 1, "", "t_as_lambda"], [13, 5, 1, "", "tcc_fci_opts"], [13, 4, 1, "", "update"], [13, 4, 1, "", "values"], [13, 5, 1, "", "wf_factor"]], "vayesta.ewf.ufragment.Fragment.Results": [[13, 5, 1, "", "converged"], [13, 3, 1, "", "dm1"], [13, 3, 1, "", "dm2"], [13, 5, 1, "", "e_corr"], [13, 5, 1, "", "e_corr_dm2cumulant"], [13, 5, 1, "", "ea_energy"], [13, 5, 1, "", "fid"], [13, 5, 1, "", "ip_energy"], [13, 5, 1, "", "n_active"], [13, 5, 1, "", "pwf"], [13, 5, 1, "", "wf"]], "vayesta.lattmod": [[14, 1, 1, "", "LatticeMF"], [14, 0, 0, "-", "bethe"], [14, 0, 0, "-", "latt"]], "vayesta.lattmod.bethe": [[14, 1, 1, "", "hubbard1d_bethe_docc"], [14, 1, 1, "", "hubbard1d_bethe_docc_numdiff"], [14, 1, 1, "", "hubbard1d_bethe_energy"]], "vayesta.lattmod.latt": [[14, 2, 1, "", "Hubbard"], [14, 2, 1, "", "Hubbard1D"], [14, 2, 1, "", "Hubbard2D"], [14, 2, 1, "", "HubbardDF"], [14, 2, 1, "", "LatticeMole"], [14, 2, 1, "", "LatticeRHF"], [14, 2, 1, "", "LatticeSCF"], [14, 2, 1, "", "LatticeUHF"]], "vayesta.lattmod.latt.Hubbard": [[14, 3, 1, "", "Gv"], [14, 4, 1, "", "add_keys"], [14, 4, 1, "", "ao2mo"], [14, 4, 1, "", "ao_labels"], [14, 3, 1, "", "ao_loc"], [14, 4, 1, "", "ao_loc_2c"], [14, 4, 1, "", "ao_loc_nr"], [14, 4, 1, "", "ao_rotation_matrix"], [14, 4, 1, "", "aoslice_2c_by_atom"], [14, 4, 1, "", "aoslice_by_atom"], [14, 4, 1, "", "aoslice_nr_by_atom"], [14, 4, 1, "", "apply"], [14, 4, 1, "", "atom_charge"], [14, 4, 1, "", "atom_charges"], [14, 4, 1, "", "atom_coord"], [14, 4, 1, "", "atom_coords"], [14, 4, 1, "", "atom_mass_list"], [14, 4, 1, "", "atom_nelec_core"], [14, 4, 1, "", "atom_nshells"], [14, 4, 1, "", "atom_pure_symbol"], [14, 4, 1, "", "atom_shell_ids"], [14, 4, 1, "", "atom_symbol"], [14, 4, 1, "", "bas_angular"], [14, 4, 1, "", "bas_atom"], [14, 4, 1, "", "bas_coord"], [14, 4, 1, "", "bas_ctr_coeff"], [14, 4, 1, "", "bas_exp"], [14, 4, 1, "", "bas_exps"], [14, 4, 1, "", "bas_kappa"], [14, 4, 1, "", "bas_len_cart"], [14, 4, 1, "", "bas_len_spinor"], [14, 4, 1, "", "bas_nctr"], [14, 4, 1, "", "bas_nprim"], [14, 4, 1, "", "bas_rcut"], [14, 4, 1, "", "build"], [14, 5, 1, "", "cart"], [14, 4, 1, "", "cart2sph_coeff"], [14, 4, 1, "", "cart_labels"], [14, 4, 1, "", "check_sanity"], [14, 4, 1, "", "condense_to_shell"], [14, 4, 1, "", "copy"], [14, 4, 1, "", "decontract_basis"], [14, 3, 1, "", "drop_exponent"], [14, 4, 1, "", "dump_input"], [14, 4, 1, "", "dumps"], [14, 3, 1, "", "elements"], [14, 4, 1, "", "energy_nuc"], [14, 4, 1, "", "etbs"], [14, 4, 1, "", "eval_ao"], [14, 4, 1, "", "eval_gto"], [14, 3, 1, "", "ew_cut"], [14, 3, 1, "", "ew_eta"], [14, 4, 1, "", "ewald"], [14, 5, 1, "", "exp_to_discard"], [14, 4, 1, "", "expand_etb"], [14, 4, 1, "", "expand_etbs"], [14, 4, 1, "", "format_atom"], [14, 4, 1, "", "format_basis"], [14, 4, 1, "", "format_ecp"], [14, 4, 1, "", "format_pseudo"], [14, 4, 1, "", "from_ase"], [14, 4, 1, "", "fromfile"], [14, 4, 1, "", "fromstring"], [14, 4, 1, "", "gen_uniform_grids"], [14, 4, 1, "", "get_Gv"], [14, 4, 1, "", "get_Gv_weights"], [14, 4, 1, "", "get_SI"], [14, 4, 1, "", "get_abs_kpts"], [14, 4, 1, "", "get_ao_indices"], [14, 4, 1, "", "get_bounding_sphere"], [14, 4, 1, "", "get_enuc"], [14, 4, 1, "", "get_ewald_params"], [14, 4, 1, "", "get_kpts"], [14, 4, 1, "", "get_lattice_Ls"], [14, 4, 1, "", "get_nimgs"], [14, 4, 1, "", "get_overlap_cond"], [14, 4, 1, "", "get_scaled_kpts"], [14, 4, 1, "", "get_scaled_positions"], [14, 4, 1, "", "get_uniform_grids"], [14, 3, 1, "", "gs"], [14, 4, 1, "", "gto_norm"], [14, 3, 1, "", "h"], [14, 4, 1, "", "has_ecp"], [14, 4, 1, "", "has_ecp_soc"], [14, 5, 1, "", "incore_anyway"], [14, 4, 1, "", "inertia_moment"], [14, 4, 1, "", "intor"], [14, 4, 1, "", "intor_asymmetric"], [14, 4, 1, "", "intor_by_shell"], [14, 4, 1, "", "intor_symmetric"], [14, 4, 1, "", "kernel"], [14, 4, 1, "", "lattice_vectors"], [14, 4, 1, "", "loads"], [14, 4, 1, "", "loads_"], [14, 4, 1, "", "make_atm_env"], [14, 4, 1, "", "make_bas_env"], [14, 4, 1, "", "make_ecp_env"], [14, 4, 1, "", "make_env"], [14, 4, 1, "", "make_kpts"], [14, 3, 1, "", "mesh"], [14, 3, 1, "", "ms"], [14, 3, 1, "", "multiplicity"], [14, 3, 1, "", "nao"], [14, 4, 1, "", "nao_2c"], [14, 4, 1, "", "nao_2c_range"], [14, 4, 1, "", "nao_cart"], [14, 4, 1, "", "nao_nr"], [14, 4, 1, "", "nao_nr_range"], [14, 3, 1, "", "natm"], [14, 3, 1, "", "nbas"], [14, 3, 1, "", "nelec"], [14, 3, 1, "", "nelectron"], [14, 3, 1, "", "nimgs"], [14, 4, 1, "", "npgto_nr"], [14, 4, 1, "", "offset_2c_by_atom"], [14, 4, 1, "", "offset_ao_by_atom"], [14, 4, 1, "", "offset_nr_by_atom"], [14, 3, 1, "", "omega"], [14, 4, 1, "", "pack"], [14, 4, 1, "", "pbc_eval_ao"], [14, 4, 1, "", "pbc_eval_gto"], [14, 4, 1, "", "pbc_intor"], [14, 4, 1, "", "post_kernel"], [14, 4, 1, "", "pre_kernel"], [14, 5, 1, "", "precision"], [14, 3, 1, "", "rcut"], [14, 4, 1, "", "reciprocal_vectors"], [14, 4, 1, "", "run"], [14, 4, 1, "", "search_ao_label"], [14, 4, 1, "", "search_ao_nr"], [14, 4, 1, "", "search_ao_r"], [14, 4, 1, "", "search_shell_id"], [14, 4, 1, "", "set"], [14, 4, 1, "", "set_common_orig"], [14, 4, 1, "", "set_common_orig_"], [14, 4, 1, "", "set_common_origin"], [14, 4, 1, "", "set_common_origin_"], [14, 4, 1, "", "set_f12_zeta"], [14, 4, 1, "", "set_geom_"], [14, 4, 1, "", "set_nuc_mod"], [14, 4, 1, "", "set_nuc_mod_"], [14, 4, 1, "", "set_range_coulomb"], [14, 4, 1, "", "set_range_coulomb_"], [14, 4, 1, "", "set_rinv_orig"], [14, 4, 1, "", "set_rinv_orig_"], [14, 4, 1, "", "set_rinv_origin"], [14, 4, 1, "", "set_rinv_origin_"], [14, 4, 1, "", "set_rinv_zeta"], [14, 4, 1, "", "set_rinv_zeta_"], [14, 4, 1, "", "sph2spinor_coeff"], [14, 4, 1, "", "sph_labels"], [14, 4, 1, "", "spheric_labels"], [14, 4, 1, "", "spinor_labels"], [14, 5, 1, "", "stdout"], [14, 4, 1, "", "symmetrize_mesh"], [14, 4, 1, "", "time_reversal_map"], [14, 4, 1, "", "tmap"], [14, 4, 1, "", "to_mol"], [14, 4, 1, "", "to_uncontracted_cartesian_basis"], [14, 4, 1, "", "tofile"], [14, 4, 1, "", "tostring"], [14, 4, 1, "", "tot_electrons"], [14, 5, 1, "", "unit"], [14, 4, 1, "", "unpack"], [14, 4, 1, "", "unpack_"], [14, 4, 1, "", "update"], [14, 4, 1, "", "update_from_chk"], [14, 5, 1, "", "verbose"], [14, 4, 1, "", "view"], [14, 3, 1, "", "vol"], [14, 4, 1, "", "with_common_orig"], [14, 4, 1, "", "with_common_origin"], [14, 4, 1, "", "with_integral_screen"], [14, 4, 1, "", "with_long_range_coulomb"], [14, 4, 1, "", "with_range_coulomb"], [14, 4, 1, "", "with_rinv_as_nucleus"], [14, 4, 1, "", "with_rinv_at_nucleus"], [14, 4, 1, "", "with_rinv_orig"], [14, 4, 1, "", "with_rinv_origin"], [14, 4, 1, "", "with_rinv_zeta"], [14, 4, 1, "", "with_short_range_coulomb"]], "vayesta.lattmod.latt.Hubbard1D": [[14, 3, 1, "", "Gv"], [14, 4, 1, "", "add_keys"], [14, 4, 1, "", "ao2mo"], [14, 4, 1, "", "ao_labels"], [14, 3, 1, "", "ao_loc"], [14, 4, 1, "", "ao_loc_2c"], [14, 4, 1, "", "ao_loc_nr"], [14, 4, 1, "", "ao_rotation_matrix"], [14, 4, 1, "", "aoslice_2c_by_atom"], [14, 4, 1, "", "aoslice_by_atom"], [14, 4, 1, "", "aoslice_nr_by_atom"], [14, 4, 1, "", "apply"], [14, 4, 1, "", "atom_charge"], [14, 4, 1, "", "atom_charges"], [14, 4, 1, "", "atom_coord"], [14, 4, 1, "", "atom_coords"], [14, 4, 1, "", "atom_mass_list"], [14, 4, 1, "", "atom_nelec_core"], [14, 4, 1, "", "atom_nshells"], [14, 4, 1, "", "atom_pure_symbol"], [14, 4, 1, "", "atom_shell_ids"], [14, 4, 1, "", "atom_symbol"], [14, 4, 1, "", "bas_angular"], [14, 4, 1, "", "bas_atom"], [14, 4, 1, "", "bas_coord"], [14, 4, 1, "", "bas_ctr_coeff"], [14, 4, 1, "", "bas_exp"], [14, 4, 1, "", "bas_exps"], [14, 4, 1, "", "bas_kappa"], [14, 4, 1, "", "bas_len_cart"], [14, 4, 1, "", "bas_len_spinor"], [14, 4, 1, "", "bas_nctr"], [14, 4, 1, "", "bas_nprim"], [14, 4, 1, "", "bas_rcut"], [14, 4, 1, "", "build"], [14, 5, 1, "", "cart"], [14, 4, 1, "", "cart2sph_coeff"], [14, 4, 1, "", "cart_labels"], [14, 4, 1, "", "check_sanity"], [14, 4, 1, "", "condense_to_shell"], [14, 4, 1, "", "copy"], [14, 4, 1, "", "decontract_basis"], [14, 3, 1, "", "drop_exponent"], [14, 4, 1, "", "dump_input"], [14, 4, 1, "", "dumps"], [14, 3, 1, "", "elements"], [14, 4, 1, "", "energy_nuc"], [14, 4, 1, "", "etbs"], [14, 4, 1, "", "eval_ao"], [14, 4, 1, "", "eval_gto"], [14, 3, 1, "", "ew_cut"], [14, 3, 1, "", "ew_eta"], [14, 4, 1, "", "ewald"], [14, 5, 1, "", "exp_to_discard"], [14, 4, 1, "", "expand_etb"], [14, 4, 1, "", "expand_etbs"], [14, 4, 1, "", "format_atom"], [14, 4, 1, "", "format_basis"], [14, 4, 1, "", "format_ecp"], [14, 4, 1, "", "format_pseudo"], [14, 4, 1, "", "from_ase"], [14, 4, 1, "", "fromfile"], [14, 4, 1, "", "fromstring"], [14, 4, 1, "", "gen_uniform_grids"], [14, 4, 1, "", "get_Gv"], [14, 4, 1, "", "get_Gv_weights"], [14, 4, 1, "", "get_SI"], [14, 4, 1, "", "get_abs_kpts"], [14, 4, 1, "", "get_ao_indices"], [14, 4, 1, "", "get_bounding_sphere"], [14, 4, 1, "", "get_enuc"], [14, 4, 1, "", "get_eri"], [14, 4, 1, "", "get_ewald_params"], [14, 4, 1, "", "get_index"], [14, 4, 1, "", "get_kpts"], [14, 4, 1, "", "get_lattice_Ls"], [14, 4, 1, "", "get_nimgs"], [14, 4, 1, "", "get_overlap_cond"], [14, 4, 1, "", "get_scaled_kpts"], [14, 4, 1, "", "get_scaled_positions"], [14, 4, 1, "", "get_uniform_grids"], [14, 3, 1, "", "gs"], [14, 4, 1, "", "gto_norm"], [14, 3, 1, "", "h"], [14, 4, 1, "", "has_ecp"], [14, 4, 1, "", "has_ecp_soc"], [14, 5, 1, "", "incore_anyway"], [14, 4, 1, "", "inertia_moment"], [14, 4, 1, "", "intor"], [14, 4, 1, "", "intor_asymmetric"], [14, 4, 1, "", "intor_by_shell"], [14, 4, 1, "", "intor_symmetric"], [14, 4, 1, "", "kernel"], [14, 4, 1, "", "lattice_vectors"], [14, 4, 1, "", "loads"], [14, 4, 1, "", "loads_"], [14, 4, 1, "", "make_atm_env"], [14, 4, 1, "", "make_bas_env"], [14, 4, 1, "", "make_ecp_env"], [14, 4, 1, "", "make_env"], [14, 4, 1, "", "make_kpts"], [14, 3, 1, "", "mesh"], [14, 3, 1, "", "ms"], [14, 3, 1, "", "multiplicity"], [14, 3, 1, "", "nao"], [14, 4, 1, "", "nao_2c"], [14, 4, 1, "", "nao_2c_range"], [14, 4, 1, "", "nao_cart"], [14, 4, 1, "", "nao_nr"], [14, 4, 1, "", "nao_nr_range"], [14, 3, 1, "", "natm"], [14, 3, 1, "", "nbas"], [14, 3, 1, "", "nelec"], [14, 3, 1, "", "nelectron"], [14, 3, 1, "", "nimgs"], [14, 4, 1, "", "npgto_nr"], [14, 4, 1, "", "offset_2c_by_atom"], [14, 4, 1, "", "offset_ao_by_atom"], [14, 4, 1, "", "offset_nr_by_atom"], [14, 3, 1, "", "omega"], [14, 4, 1, "", "pack"], [14, 4, 1, "", "pbc_eval_ao"], [14, 4, 1, "", "pbc_eval_gto"], [14, 4, 1, "", "pbc_intor"], [14, 4, 1, "", "post_kernel"], [14, 4, 1, "", "pre_kernel"], [14, 5, 1, "", "precision"], [14, 3, 1, "", "rcut"], [14, 4, 1, "", "reciprocal_vectors"], [14, 4, 1, "", "run"], [14, 4, 1, "", "search_ao_label"], [14, 4, 1, "", "search_ao_nr"], [14, 4, 1, "", "search_ao_r"], [14, 4, 1, "", "search_shell_id"], [14, 4, 1, "", "set"], [14, 4, 1, "", "set_common_orig"], [14, 4, 1, "", "set_common_orig_"], [14, 4, 1, "", "set_common_origin"], [14, 4, 1, "", "set_common_origin_"], [14, 4, 1, "", "set_f12_zeta"], [14, 4, 1, "", "set_geom_"], [14, 4, 1, "", "set_nuc_mod"], [14, 4, 1, "", "set_nuc_mod_"], [14, 4, 1, "", "set_range_coulomb"], [14, 4, 1, "", "set_range_coulomb_"], [14, 4, 1, "", "set_rinv_orig"], [14, 4, 1, "", "set_rinv_orig_"], [14, 4, 1, "", "set_rinv_origin"], [14, 4, 1, "", "set_rinv_origin_"], [14, 4, 1, "", "set_rinv_zeta"], [14, 4, 1, "", "set_rinv_zeta_"], [14, 4, 1, "", "sph2spinor_coeff"], [14, 4, 1, "", "sph_labels"], [14, 4, 1, "", "spheric_labels"], [14, 4, 1, "", "spinor_labels"], [14, 5, 1, "", "stdout"], [14, 4, 1, "", "symmetrize_mesh"], [14, 4, 1, "", "time_reversal_map"], [14, 4, 1, "", "tmap"], [14, 4, 1, "", "to_mol"], [14, 4, 1, "", "to_uncontracted_cartesian_basis"], [14, 4, 1, "", "tofile"], [14, 4, 1, "", "tostring"], [14, 4, 1, "", "tot_electrons"], [14, 5, 1, "", "unit"], [14, 4, 1, "", "unpack"], [14, 4, 1, "", "unpack_"], [14, 4, 1, "", "update"], [14, 4, 1, "", "update_from_chk"], [14, 5, 1, "", "verbose"], [14, 4, 1, "", "view"], [14, 3, 1, "", "vol"], [14, 4, 1, "", "with_common_orig"], [14, 4, 1, "", "with_common_origin"], [14, 4, 1, "", "with_integral_screen"], [14, 4, 1, "", "with_long_range_coulomb"], [14, 4, 1, "", "with_range_coulomb"], [14, 4, 1, "", "with_rinv_as_nucleus"], [14, 4, 1, "", "with_rinv_at_nucleus"], [14, 4, 1, "", "with_rinv_orig"], [14, 4, 1, "", "with_rinv_origin"], [14, 4, 1, "", "with_rinv_zeta"], [14, 4, 1, "", "with_short_range_coulomb"]], "vayesta.lattmod.latt.Hubbard2D": [[14, 3, 1, "", "Gv"], [14, 4, 1, "", "add_keys"], [14, 4, 1, "", "ao2mo"], [14, 4, 1, "", "ao_labels"], [14, 3, 1, "", "ao_loc"], [14, 4, 1, "", "ao_loc_2c"], [14, 4, 1, "", "ao_loc_nr"], [14, 4, 1, "", "ao_rotation_matrix"], [14, 4, 1, "", "aoslice_2c_by_atom"], [14, 4, 1, "", "aoslice_by_atom"], [14, 4, 1, "", "aoslice_nr_by_atom"], [14, 4, 1, "", "apply"], [14, 4, 1, "", "atom_charge"], [14, 4, 1, "", "atom_charges"], [14, 4, 1, "", "atom_coord"], [14, 4, 1, "", "atom_coords"], [14, 4, 1, "", "atom_mass_list"], [14, 4, 1, "", "atom_nelec_core"], [14, 4, 1, "", "atom_nshells"], [14, 4, 1, "", "atom_pure_symbol"], [14, 4, 1, "", "atom_shell_ids"], [14, 4, 1, "", "atom_symbol"], [14, 4, 1, "", "bas_angular"], [14, 4, 1, "", "bas_atom"], [14, 4, 1, "", "bas_coord"], [14, 4, 1, "", "bas_ctr_coeff"], [14, 4, 1, "", "bas_exp"], [14, 4, 1, "", "bas_exps"], [14, 4, 1, "", "bas_kappa"], [14, 4, 1, "", "bas_len_cart"], [14, 4, 1, "", "bas_len_spinor"], [14, 4, 1, "", "bas_nctr"], [14, 4, 1, "", "bas_nprim"], [14, 4, 1, "", "bas_rcut"], [14, 4, 1, "", "build"], [14, 5, 1, "", "cart"], [14, 4, 1, "", "cart2sph_coeff"], [14, 4, 1, "", "cart_labels"], [14, 4, 1, "", "check_sanity"], [14, 4, 1, "", "condense_to_shell"], [14, 4, 1, "", "copy"], [14, 4, 1, "", "decontract_basis"], [14, 3, 1, "", "drop_exponent"], [14, 4, 1, "", "dump_input"], [14, 4, 1, "", "dumps"], [14, 3, 1, "", "elements"], [14, 4, 1, "", "energy_nuc"], [14, 4, 1, "", "etbs"], [14, 4, 1, "", "eval_ao"], [14, 4, 1, "", "eval_gto"], [14, 3, 1, "", "ew_cut"], [14, 3, 1, "", "ew_eta"], [14, 4, 1, "", "ewald"], [14, 5, 1, "", "exp_to_discard"], [14, 4, 1, "", "expand_etb"], [14, 4, 1, "", "expand_etbs"], [14, 4, 1, "", "format_atom"], [14, 4, 1, "", "format_basis"], [14, 4, 1, "", "format_ecp"], [14, 4, 1, "", "format_pseudo"], [14, 4, 1, "", "from_ase"], [14, 4, 1, "", "fromfile"], [14, 4, 1, "", "fromstring"], [14, 4, 1, "", "gen_uniform_grids"], [14, 4, 1, "", "get_Gv"], [14, 4, 1, "", "get_Gv_weights"], [14, 4, 1, "", "get_SI"], [14, 4, 1, "", "get_abs_kpts"], [14, 4, 1, "", "get_ao_indices"], [14, 4, 1, "", "get_bounding_sphere"], [14, 4, 1, "", "get_enuc"], [14, 4, 1, "", "get_eri"], [14, 4, 1, "", "get_ewald_params"], [14, 4, 1, "", "get_index"], [14, 4, 1, "", "get_kpts"], [14, 4, 1, "", "get_lattice_Ls"], [14, 4, 1, "", "get_nimgs"], [14, 4, 1, "", "get_overlap_cond"], [14, 4, 1, "", "get_scaled_kpts"], [14, 4, 1, "", "get_scaled_positions"], [14, 4, 1, "", "get_tiles_order"], [14, 4, 1, "", "get_uniform_grids"], [14, 3, 1, "", "gs"], [14, 4, 1, "", "gto_norm"], [14, 3, 1, "", "h"], [14, 4, 1, "", "has_ecp"], [14, 4, 1, "", "has_ecp_soc"], [14, 5, 1, "", "incore_anyway"], [14, 4, 1, "", "inertia_moment"], [14, 4, 1, "", "intor"], [14, 4, 1, "", "intor_asymmetric"], [14, 4, 1, "", "intor_by_shell"], [14, 4, 1, "", "intor_symmetric"], [14, 4, 1, "", "kernel"], [14, 4, 1, "", "lattice_vectors"], [14, 4, 1, "", "loads"], [14, 4, 1, "", "loads_"], [14, 4, 1, "", "make_atm_env"], [14, 4, 1, "", "make_bas_env"], [14, 4, 1, "", "make_ecp_env"], [14, 4, 1, "", "make_env"], [14, 4, 1, "", "make_kpts"], [14, 3, 1, "", "mesh"], [14, 3, 1, "", "ms"], [14, 3, 1, "", "multiplicity"], [14, 3, 1, "", "nao"], [14, 4, 1, "", "nao_2c"], [14, 4, 1, "", "nao_2c_range"], [14, 4, 1, "", "nao_cart"], [14, 4, 1, "", "nao_nr"], [14, 4, 1, "", "nao_nr_range"], [14, 3, 1, "", "natm"], [14, 3, 1, "", "nbas"], [14, 3, 1, "", "nelec"], [14, 3, 1, "", "nelectron"], [14, 3, 1, "", "nimgs"], [14, 4, 1, "", "npgto_nr"], [14, 4, 1, "", "offset_2c_by_atom"], [14, 4, 1, "", "offset_ao_by_atom"], [14, 4, 1, "", "offset_nr_by_atom"], [14, 3, 1, "", "omega"], [14, 4, 1, "", "pack"], [14, 4, 1, "", "pbc_eval_ao"], [14, 4, 1, "", "pbc_eval_gto"], [14, 4, 1, "", "pbc_intor"], [14, 4, 1, "", "post_kernel"], [14, 4, 1, "", "pre_kernel"], [14, 5, 1, "", "precision"], [14, 3, 1, "", "rcut"], [14, 4, 1, "", "reciprocal_vectors"], [14, 4, 1, "", "run"], [14, 4, 1, "", "search_ao_label"], [14, 4, 1, "", "search_ao_nr"], [14, 4, 1, "", "search_ao_r"], [14, 4, 1, "", "search_shell_id"], [14, 4, 1, "", "set"], [14, 4, 1, "", "set_common_orig"], [14, 4, 1, "", "set_common_orig_"], [14, 4, 1, "", "set_common_origin"], [14, 4, 1, "", "set_common_origin_"], [14, 4, 1, "", "set_f12_zeta"], [14, 4, 1, "", "set_geom_"], [14, 4, 1, "", "set_nuc_mod"], [14, 4, 1, "", "set_nuc_mod_"], [14, 4, 1, "", "set_range_coulomb"], [14, 4, 1, "", "set_range_coulomb_"], [14, 4, 1, "", "set_rinv_orig"], [14, 4, 1, "", "set_rinv_orig_"], [14, 4, 1, "", "set_rinv_origin"], [14, 4, 1, "", "set_rinv_origin_"], [14, 4, 1, "", "set_rinv_zeta"], [14, 4, 1, "", "set_rinv_zeta_"], [14, 4, 1, "", "sph2spinor_coeff"], [14, 4, 1, "", "sph_labels"], [14, 4, 1, "", "spheric_labels"], [14, 4, 1, "", "spinor_labels"], [14, 5, 1, "", "stdout"], [14, 4, 1, "", "symmetrize_mesh"], [14, 4, 1, "", "time_reversal_map"], [14, 4, 1, "", "tmap"], [14, 4, 1, "", "to_mol"], [14, 4, 1, "", "to_uncontracted_cartesian_basis"], [14, 4, 1, "", "tofile"], [14, 4, 1, "", "tostring"], [14, 4, 1, "", "tot_electrons"], [14, 5, 1, "", "unit"], [14, 4, 1, "", "unpack"], [14, 4, 1, "", "unpack_"], [14, 4, 1, "", "update"], [14, 4, 1, "", "update_from_chk"], [14, 5, 1, "", "verbose"], [14, 4, 1, "", "view"], [14, 3, 1, "", "vol"], [14, 4, 1, "", "with_common_orig"], [14, 4, 1, "", "with_common_origin"], [14, 4, 1, "", "with_integral_screen"], [14, 4, 1, "", "with_long_range_coulomb"], [14, 4, 1, "", "with_range_coulomb"], [14, 4, 1, "", "with_rinv_as_nucleus"], [14, 4, 1, "", "with_rinv_at_nucleus"], [14, 4, 1, "", "with_rinv_orig"], [14, 4, 1, "", "with_rinv_origin"], [14, 4, 1, "", "with_rinv_zeta"], [14, 4, 1, "", "with_short_range_coulomb"]], "vayesta.lattmod.latt.HubbardDF": [[14, 4, 1, "", "ao2mo"], [14, 4, 1, "", "get_naoaux"], [14, 4, 1, "", "loop"]], "vayesta.lattmod.latt.LatticeMole": [[14, 3, 1, "", "Gv"], [14, 4, 1, "", "add_keys"], [14, 4, 1, "", "ao2mo"], [14, 4, 1, "", "ao_labels"], [14, 3, 1, "", "ao_loc"], [14, 4, 1, "", "ao_loc_2c"], [14, 4, 1, "", "ao_loc_nr"], [14, 4, 1, "", "ao_rotation_matrix"], [14, 4, 1, "", "aoslice_2c_by_atom"], [14, 4, 1, "", "aoslice_by_atom"], [14, 4, 1, "", "aoslice_nr_by_atom"], [14, 4, 1, "", "apply"], [14, 4, 1, "", "atom_charge"], [14, 4, 1, "", "atom_charges"], [14, 4, 1, "", "atom_coord"], [14, 4, 1, "", "atom_coords"], [14, 4, 1, "", "atom_mass_list"], [14, 4, 1, "", "atom_nelec_core"], [14, 4, 1, "", "atom_nshells"], [14, 4, 1, "", "atom_pure_symbol"], [14, 4, 1, "", "atom_shell_ids"], [14, 4, 1, "", "atom_symbol"], [14, 4, 1, "", "bas_angular"], [14, 4, 1, "", "bas_atom"], [14, 4, 1, "", "bas_coord"], [14, 4, 1, "", "bas_ctr_coeff"], [14, 4, 1, "", "bas_exp"], [14, 4, 1, "", "bas_exps"], [14, 4, 1, "", "bas_kappa"], [14, 4, 1, "", "bas_len_cart"], [14, 4, 1, "", "bas_len_spinor"], [14, 4, 1, "", "bas_nctr"], [14, 4, 1, "", "bas_nprim"], [14, 4, 1, "", "bas_rcut"], [14, 4, 1, "", "build"], [14, 5, 1, "", "cart"], [14, 4, 1, "", "cart2sph_coeff"], [14, 4, 1, "", "cart_labels"], [14, 4, 1, "", "check_sanity"], [14, 4, 1, "", "condense_to_shell"], [14, 4, 1, "", "copy"], [14, 4, 1, "", "decontract_basis"], [14, 3, 1, "", "drop_exponent"], [14, 4, 1, "", "dump_input"], [14, 4, 1, "", "dumps"], [14, 3, 1, "", "elements"], [14, 4, 1, "", "energy_nuc"], [14, 4, 1, "", "etbs"], [14, 4, 1, "", "eval_ao"], [14, 4, 1, "", "eval_gto"], [14, 3, 1, "", "ew_cut"], [14, 3, 1, "", "ew_eta"], [14, 4, 1, "", "ewald"], [14, 5, 1, "", "exp_to_discard"], [14, 4, 1, "", "expand_etb"], [14, 4, 1, "", "expand_etbs"], [14, 4, 1, "", "format_atom"], [14, 4, 1, "", "format_basis"], [14, 4, 1, "", "format_ecp"], [14, 4, 1, "", "format_pseudo"], [14, 4, 1, "", "from_ase"], [14, 4, 1, "", "fromfile"], [14, 4, 1, "", "fromstring"], [14, 4, 1, "", "gen_uniform_grids"], [14, 4, 1, "", "get_Gv"], [14, 4, 1, "", "get_Gv_weights"], [14, 4, 1, "", "get_SI"], [14, 4, 1, "", "get_abs_kpts"], [14, 4, 1, "", "get_ao_indices"], [14, 4, 1, "", "get_bounding_sphere"], [14, 4, 1, "", "get_enuc"], [14, 4, 1, "", "get_ewald_params"], [14, 4, 1, "", "get_kpts"], [14, 4, 1, "", "get_lattice_Ls"], [14, 4, 1, "", "get_nimgs"], [14, 4, 1, "", "get_overlap_cond"], [14, 4, 1, "", "get_scaled_kpts"], [14, 4, 1, "", "get_scaled_positions"], [14, 4, 1, "", "get_uniform_grids"], [14, 3, 1, "", "gs"], [14, 4, 1, "", "gto_norm"], [14, 3, 1, "", "h"], [14, 4, 1, "", "has_ecp"], [14, 4, 1, "", "has_ecp_soc"], [14, 5, 1, "", "incore_anyway"], [14, 4, 1, "", "inertia_moment"], [14, 4, 1, "", "intor"], [14, 4, 1, "", "intor_asymmetric"], [14, 4, 1, "", "intor_by_shell"], [14, 4, 1, "", "intor_symmetric"], [14, 4, 1, "", "kernel"], [14, 4, 1, "", "lattice_vectors"], [14, 4, 1, "", "loads"], [14, 4, 1, "", "loads_"], [14, 4, 1, "", "make_atm_env"], [14, 4, 1, "", "make_bas_env"], [14, 4, 1, "", "make_ecp_env"], [14, 4, 1, "", "make_env"], [14, 4, 1, "", "make_kpts"], [14, 3, 1, "", "mesh"], [14, 3, 1, "", "ms"], [14, 3, 1, "", "multiplicity"], [14, 3, 1, "", "nao"], [14, 4, 1, "", "nao_2c"], [14, 4, 1, "", "nao_2c_range"], [14, 4, 1, "", "nao_cart"], [14, 4, 1, "", "nao_nr"], [14, 4, 1, "", "nao_nr_range"], [14, 3, 1, "", "natm"], [14, 3, 1, "", "nbas"], [14, 3, 1, "", "nelec"], [14, 3, 1, "", "nelectron"], [14, 3, 1, "", "nimgs"], [14, 4, 1, "", "npgto_nr"], [14, 4, 1, "", "offset_2c_by_atom"], [14, 4, 1, "", "offset_ao_by_atom"], [14, 4, 1, "", "offset_nr_by_atom"], [14, 3, 1, "", "omega"], [14, 4, 1, "", "pack"], [14, 4, 1, "", "pbc_eval_ao"], [14, 4, 1, "", "pbc_eval_gto"], [14, 4, 1, "", "pbc_intor"], [14, 4, 1, "", "post_kernel"], [14, 4, 1, "", "pre_kernel"], [14, 5, 1, "", "precision"], [14, 3, 1, "", "rcut"], [14, 4, 1, "", "reciprocal_vectors"], [14, 4, 1, "", "run"], [14, 4, 1, "", "search_ao_label"], [14, 4, 1, "", "search_ao_nr"], [14, 4, 1, "", "search_ao_r"], [14, 4, 1, "", "search_shell_id"], [14, 4, 1, "", "set"], [14, 4, 1, "", "set_common_orig"], [14, 4, 1, "", "set_common_orig_"], [14, 4, 1, "", "set_common_origin"], [14, 4, 1, "", "set_common_origin_"], [14, 4, 1, "", "set_f12_zeta"], [14, 4, 1, "", "set_geom_"], [14, 4, 1, "", "set_nuc_mod"], [14, 4, 1, "", "set_nuc_mod_"], [14, 4, 1, "", "set_range_coulomb"], [14, 4, 1, "", "set_range_coulomb_"], [14, 4, 1, "", "set_rinv_orig"], [14, 4, 1, "", "set_rinv_orig_"], [14, 4, 1, "", "set_rinv_origin"], [14, 4, 1, "", "set_rinv_origin_"], [14, 4, 1, "", "set_rinv_zeta"], [14, 4, 1, "", "set_rinv_zeta_"], [14, 4, 1, "", "sph2spinor_coeff"], [14, 4, 1, "", "sph_labels"], [14, 4, 1, "", "spheric_labels"], [14, 4, 1, "", "spinor_labels"], [14, 5, 1, "", "stdout"], [14, 4, 1, "", "symmetrize_mesh"], [14, 4, 1, "", "time_reversal_map"], [14, 4, 1, "", "tmap"], [14, 4, 1, "", "to_mol"], [14, 4, 1, "", "to_uncontracted_cartesian_basis"], [14, 4, 1, "", "tofile"], [14, 4, 1, "", "tostring"], [14, 4, 1, "", "tot_electrons"], [14, 5, 1, "", "unit"], [14, 4, 1, "", "unpack"], [14, 4, 1, "", "unpack_"], [14, 4, 1, "", "update"], [14, 4, 1, "", "update_from_chk"], [14, 5, 1, "", "verbose"], [14, 4, 1, "", "view"], [14, 3, 1, "", "vol"], [14, 4, 1, "", "with_common_orig"], [14, 4, 1, "", "with_common_origin"], [14, 4, 1, "", "with_integral_screen"], [14, 4, 1, "", "with_long_range_coulomb"], [14, 4, 1, "", "with_range_coulomb"], [14, 4, 1, "", "with_rinv_as_nucleus"], [14, 4, 1, "", "with_rinv_at_nucleus"], [14, 4, 1, "", "with_rinv_orig"], [14, 4, 1, "", "with_rinv_origin"], [14, 4, 1, "", "with_rinv_zeta"], [14, 4, 1, "", "with_short_range_coulomb"]], "vayesta.lattmod.latt.LatticeRHF": [[14, 4, 1, "", "CCSD"], [14, 4, 1, "", "CISD"], [14, 4, 1, "", "DFMP2"], [14, 5, 1, "", "DIIS"], [14, 4, 1, "", "MP2"], [14, 4, 1, "", "QCISD"], [14, 4, 1, "", "add_keys"], [14, 4, 1, "", "analyze"], [14, 4, 1, "", "apply"], [14, 4, 1, "", "as_scanner"], [14, 5, 1, "", "async_io"], [14, 4, 1, "", "build"], [14, 5, 1, "", "callback"], [14, 4, 1, "", "canonicalize"], [14, 3, 1, "", "cell"], [14, 5, 1, "", "check_convergence"], [14, 4, 1, "", "check_lattice_symmetry"], [14, 4, 1, "", "check_sanity"], [14, 5, 1, "", "conv_check"], [14, 5, 1, "id156", "conv_tol"], [14, 5, 1, "", "conv_tol_grad"], [14, 5, 1, "id147", "conv_tol_normt"], [14, 4, 1, "", "convert_from_"], [14, 5, 1, "", "damp"], [14, 3, 1, "", "damp_factor"], [14, 4, 1, "", "density_fit"], [14, 5, 1, "", "diis"], [14, 5, 1, "", "diis_file"], [14, 5, 1, "id157", "diis_space"], [14, 5, 1, "", "diis_space_rollback"], [14, 5, 1, "id158", "diis_start_cycle"], [14, 4, 1, "", "dip_moment"], [14, 5, 1, "", "direct"], [14, 5, 1, "", "direct_scf"], [14, 5, 1, "", "direct_scf_tol"], [14, 4, 1, "", "dump_chk"], [14, 4, 1, "", "dump_flags"], [14, 4, 1, "", "dump_scf_summary"], [14, 4, 1, "", "eig"], [14, 4, 1, "", "energy_elec"], [14, 4, 1, "", "energy_nuc"], [14, 4, 1, "", "energy_tot"], [14, 4, 1, "", "from_chk"], [14, 5, 1, "id151", "frozen"], [14, 4, 1, "", "get_fock"], [14, 4, 1, "", "get_grad"], [14, 4, 1, "", "get_hcore"], [14, 4, 1, "", "get_init_guess"], [14, 4, 1, "", "get_j"], [14, 4, 1, "", "get_jk"], [14, 4, 1, "", "get_k"], [14, 4, 1, "", "get_occ"], [14, 4, 1, "", "get_ovlp"], [14, 4, 1, "", "get_veff"], [14, 3, 1, "", "hf_energy"], [14, 5, 1, "", "incore_complete"], [14, 4, 1, "", "init_direct_scf"], [14, 5, 1, "", "init_guess"], [14, 4, 1, "", "init_guess_by_1e"], [14, 4, 1, "", "init_guess_by_atom"], [14, 4, 1, "", "init_guess_by_chkfile"], [14, 4, 1, "", "init_guess_by_huckel"], [14, 4, 1, "", "init_guess_by_minao"], [14, 5, 1, "", "iterative_damping"], [14, 4, 1, "", "kernel"], [14, 5, 1, "id159", "level_shift"], [14, 3, 1, "", "level_shift_factor"], [14, 4, 1, "", "make_rdm1"], [14, 4, 1, "", "make_rdm2"], [14, 5, 1, "id160", "max_cycle"], [14, 5, 1, "id145", "max_memory"], [14, 4, 1, "", "mulliken_meta"], [14, 4, 1, "", "mulliken_pop"], [14, 4, 1, "", "mulliken_pop_meta_lowdin_ao"], [14, 4, 1, "", "newton"], [14, 4, 1, "", "nuc_grad_method"], [14, 4, 1, "", "pop"], [14, 4, 1, "", "post_kernel"], [14, 4, 1, "", "pre_kernel"], [14, 4, 1, "", "remove_soscf"], [14, 4, 1, "", "reset"], [14, 4, 1, "", "run"], [14, 4, 1, "", "scf"], [14, 4, 1, "", "set"], [14, 4, 1, "", "sfx2c1e"], [14, 4, 1, "", "spin_square"], [14, 4, 1, "", "stability"], [14, 5, 1, "", "stdout"], [14, 4, 1, "", "to_ghf"], [14, 4, 1, "", "to_gks"], [14, 4, 1, "", "to_ks"], [14, 4, 1, "", "to_rhf"], [14, 4, 1, "", "to_rks"], [14, 4, 1, "", "to_uhf"], [14, 4, 1, "", "to_uks"], [14, 4, 1, "", "update"], [14, 4, 1, "", "update_"], [14, 4, 1, "", "update_from_chk"], [14, 4, 1, "", "update_from_chk_"], [14, 5, 1, "id161", "verbose"], [14, 4, 1, "", "view"], [14, 4, 1, "", "x2c"], [14, 4, 1, "", "x2c1e"]], "vayesta.lattmod.latt.LatticeSCF": [[14, 3, 1, "", "cell"], [14, 4, 1, "", "density_fit"], [14, 4, 1, "", "get_hcore"], [14, 4, 1, "", "get_ovlp"]], "vayesta.lattmod.latt.LatticeUHF": [[14, 4, 1, "", "CCSD"], [14, 4, 1, "", "CISD"], [14, 5, 1, "", "DFMP2"], [14, 5, 1, "", "DIIS"], [14, 4, 1, "", "MP2"], [14, 4, 1, "", "QCISD"], [14, 4, 1, "", "add_keys"], [14, 4, 1, "", "analyze"], [14, 4, 1, "", "apply"], [14, 4, 1, "", "as_scanner"], [14, 5, 1, "", "async_io"], [14, 4, 1, "", "build"], [14, 5, 1, "", "callback"], [14, 4, 1, "", "canonicalize"], [14, 3, 1, "", "cell"], [14, 5, 1, "", "check_convergence"], [14, 4, 1, "", "check_sanity"], [14, 5, 1, "", "conv_check"], [14, 5, 1, "id166", "conv_tol"], [14, 5, 1, "", "conv_tol_grad"], [14, 5, 1, "", "conv_tol_normt"], [14, 4, 1, "", "convert_from_"], [14, 5, 1, "", "damp"], [14, 3, 1, "", "damp_factor"], [14, 4, 1, "", "density_fit"], [14, 4, 1, "", "det_ovlp"], [14, 5, 1, "", "diis"], [14, 5, 1, "", "diis_file"], [14, 5, 1, "id167", "diis_space"], [14, 5, 1, "", "diis_space_rollback"], [14, 5, 1, "id168", "diis_start_cycle"], [14, 4, 1, "", "dip_moment"], [14, 5, 1, "", "direct"], [14, 5, 1, "", "direct_scf"], [14, 5, 1, "", "direct_scf_tol"], [14, 4, 1, "", "dump_chk"], [14, 4, 1, "", "dump_flags"], [14, 4, 1, "", "dump_scf_summary"], [14, 4, 1, "", "eig"], [14, 4, 1, "", "energy_elec"], [14, 4, 1, "", "energy_nuc"], [14, 4, 1, "", "energy_tot"], [14, 4, 1, "", "from_chk"], [14, 5, 1, "", "frozen"], [14, 4, 1, "", "get_fock"], [14, 4, 1, "", "get_grad"], [14, 4, 1, "", "get_hcore"], [14, 4, 1, "", "get_init_guess"], [14, 4, 1, "", "get_j"], [14, 4, 1, "", "get_jk"], [14, 4, 1, "", "get_k"], [14, 4, 1, "", "get_occ"], [14, 4, 1, "", "get_ovlp"], [14, 4, 1, "", "get_veff"], [14, 3, 1, "", "hf_energy"], [14, 5, 1, "", "incore_complete"], [14, 4, 1, "", "init_direct_scf"], [14, 5, 1, "", "init_guess"], [14, 4, 1, "", "init_guess_by_1e"], [14, 4, 1, "", "init_guess_by_atom"], [14, 4, 1, "", "init_guess_by_chkfile"], [14, 4, 1, "", "init_guess_by_huckel"], [14, 4, 1, "", "init_guess_by_minao"], [14, 5, 1, "", "iterative_damping"], [14, 4, 1, "", "kernel"], [14, 5, 1, "id169", "level_shift"], [14, 3, 1, "", "level_shift_factor"], [14, 4, 1, "", "make_asym_dm"], [14, 4, 1, "", "make_rdm1"], [14, 4, 1, "", "make_rdm2"], [14, 5, 1, "id170", "max_cycle"], [14, 5, 1, "", "max_memory"], [14, 4, 1, "", "mulliken_meta"], [14, 4, 1, "", "mulliken_meta_spin"], [14, 4, 1, "", "mulliken_pop"], [14, 4, 1, "", "mulliken_pop_meta_lowdin_ao"], [14, 4, 1, "", "mulliken_spin_pop"], [14, 3, 1, "", "nelec"], [14, 3, 1, "", "nelectron_alpha"], [14, 4, 1, "", "newton"], [14, 4, 1, "", "nuc_grad_method"], [14, 4, 1, "", "pop"], [14, 4, 1, "", "post_kernel"], [14, 4, 1, "", "pre_kernel"], [14, 4, 1, "", "remove_soscf"], [14, 4, 1, "", "reset"], [14, 4, 1, "", "run"], [14, 4, 1, "", "scf"], [14, 4, 1, "", "set"], [14, 4, 1, "", "sfx2c1e"], [14, 4, 1, "", "spin_square"], [14, 4, 1, "", "stability"], [14, 5, 1, "", "stdout"], [14, 4, 1, "", "to_ghf"], [14, 4, 1, "", "to_gks"], [14, 4, 1, "", "to_ks"], [14, 4, 1, "", "to_rhf"], [14, 4, 1, "", "to_rks"], [14, 4, 1, "", "to_uhf"], [14, 4, 1, "", "to_uks"], [14, 4, 1, "", "update"], [14, 4, 1, "", "update_"], [14, 4, 1, "", "update_from_chk"], [14, 4, 1, "", "update_from_chk_"], [14, 5, 1, "id171", "verbose"], [14, 4, 1, "", "view"], [14, 4, 1, "", "x2c"], [14, 4, 1, "", "x2c1e"]], "vayesta.libs": [[15, 0, 0, "-", "libcore"], [15, 1, 1, "", "load_library"]], "vayesta.misc": [[16, 0, 0, "-", "brueckner"], [16, 0, 0, "-", "corrfunc"], [16, 0, 0, "-", "counterpoise"], [16, 0, 0, "-", "cptbisect"], [16, 0, 0, "-", "cubefile"], [16, 0, 0, "-", "gto_helper"], [17, 0, 0, "-", "molecules"], [16, 0, 0, "-", "pcdiis"], [18, 0, 0, "-", "solids"]], "vayesta.misc.brueckner": [[16, 1, 1, "", "update_mf"], [16, 1, 1, "", "update_mo_coeff"]], "vayesta.misc.corrfunc": [[16, 1, 1, "", "chargecharge"], [16, 1, 1, "", "chargecharge_mf"], [16, 1, 1, "", "spin_z"], [16, 1, 1, "", "spin_z_unrestricted"], [16, 1, 1, "", "spinspin_z"], [16, 1, 1, "", "spinspin_z_mf"], [16, 1, 1, "", "spinspin_z_mf_unrestricted"], [16, 1, 1, "", "spinspin_z_unrestricted"]], "vayesta.misc.counterpoise": [[16, 1, 1, "", "make_cp_mol"]], "vayesta.misc.cptbisect": [[16, 2, 1, "", "ChempotBisection"]], "vayesta.misc.cptbisect.ChempotBisection": [[16, 4, 1, "", "kernel"]], "vayesta.misc.cubefile": [[16, 2, 1, "", "CubeFile"]], "vayesta.misc.cubefile.CubeFile": [[16, 4, 1, "", "add_density"], [16, 4, 1, "", "add_mep"], [16, 4, 1, "", "add_orbital"], [16, 4, 1, "", "get_box_and_origin"], [16, 4, 1, "", "get_coords"], [16, 3, 1, "", "has_pbc"], [16, 4, 1, "", "load_state"], [16, 3, 1, "", "ncoords"], [16, 3, 1, "", "nfields"], [16, 4, 1, "", "save_state"], [16, 4, 1, "", "write"], [16, 4, 1, "", "write_fields"], [16, 4, 1, "", "write_header"]], "vayesta.misc.gto_helper": [[16, 1, 1, "", "get_atom_distances"], [16, 1, 1, "", "get_atom_shells"], [16, 1, 1, "", "loop_neighbor_cells"], [16, 1, 1, "", "make_counterpoise_fragments"]], "vayesta.misc.molecules": [[17, 0, 0, "-", "molecules"]], "vayesta.misc.molecules.molecules": [[17, 1, 1, "", "acetic_acid"], [17, 1, 1, "", "alkane"], [17, 1, 1, "", "alkene"], [17, 1, 1, "", "arene"], [17, 1, 1, "", "boronene"], [17, 1, 1, "", "chain"], [17, 1, 1, "", "chloroethanol"], [17, 1, 1, "", "coronene"], [17, 1, 1, "", "ethanol"], [17, 1, 1, "", "ferrocene"], [17, 1, 1, "", "ferrocene_b3lyp"], [17, 1, 1, "", "glycine"], [17, 1, 1, "", "ketene"], [17, 1, 1, "", "neopentane"], [17, 1, 1, "", "no2"], [17, 1, 1, "", "phenyl"], [17, 1, 1, "", "propanol"], [17, 1, 1, "", "propyl"], [17, 1, 1, "", "ring"], [17, 1, 1, "", "water"]], "vayesta.misc.pcdiis": [[16, 2, 1, "", "PCDIIS"]], "vayesta.misc.pcdiis.PCDIIS": [[16, 4, 1, "", "extrapolate"], [16, 4, 1, "", "get_err_vec"], [16, 4, 1, "", "get_num_vec"], [16, 4, 1, "", "get_vec"], [16, 4, 1, "", "push_err_vec"], [16, 4, 1, "", "push_vec"], [16, 4, 1, "", "restore"], [16, 4, 1, "", "update"]], "vayesta.misc.solids": [[18, 0, 0, "-", "solids"]], "vayesta.misc.solids.solids": [[18, 1, 1, "", "bcc"], [18, 1, 1, "", "diamond"], [18, 1, 1, "", "graphene"], [18, 1, 1, "", "graphite"], [18, 1, 1, "", "perovskite"], [18, 1, 1, "", "perovskite_tetragonal"], [18, 1, 1, "", "rocksalt"]], "vayesta.mpi": [[19, 1, 1, "", "init_mpi"], [19, 0, 0, "-", "interface"], [19, 0, 0, "-", "rma"], [19, 0, 0, "-", "scf"]], "vayesta.mpi.interface": [[19, 2, 1, "", "MPI_Interface"], [19, 2, 1, "", "NdArrayMetadata"]], "vayesta.mpi.interface.MPI_Interface": [[19, 4, 1, "", "bcast"], [19, 4, 1, "", "create_rma_dict"], [19, 3, 1, "", "disabled"], [19, 3, 1, "", "enabled"], [19, 4, 1, "", "gdf"], [19, 4, 1, "", "get_new_tag"], [19, 3, 1, "", "is_master"], [19, 4, 1, "", "nreduce"], [19, 4, 1, "", "only_master"], [19, 4, 1, "", "scf"], [19, 4, 1, "", "with_allreduce"], [19, 4, 1, "", "with_reduce"], [19, 4, 1, "", "with_send"]], "vayesta.mpi.interface.NdArrayMetadata": [[19, 4, 1, "", "count"], [19, 5, 1, "", "dtype"], [19, 4, 1, "", "index"], [19, 5, 1, "", "shape"]], "vayesta.mpi.rma": [[19, 2, 1, "", "RMA_Dict"]], "vayesta.mpi.rma.RMA_Dict": [[19, 2, 1, "", "RMA_DictElement"], [19, 4, 1, "", "clear"], [19, 4, 1, "", "from_dict"], [19, 4, 1, "", "get_dtype"], [19, 4, 1, "", "get_location"], [19, 4, 1, "", "get_shape"], [19, 4, 1, "", "keys"], [19, 3, 1, "", "readable"], [19, 4, 1, "", "synchronize"], [19, 4, 1, "", "values"], [19, 4, 1, "", "writable"]], "vayesta.mpi.rma.RMA_Dict.RMA_DictElement": [[19, 4, 1, "", "free"], [19, 4, 1, "", "get"], [19, 4, 1, "", "local_init"], [19, 3, 1, "", "mpi"], [19, 4, 1, "", "remote_init"], [19, 4, 1, "", "rma_get"], [19, 4, 1, "", "rma_lock"], [19, 4, 1, "", "rma_put"], [19, 4, 1, "", "rma_unlock"], [19, 3, 1, "", "size"]], "vayesta.mpi.scf": [[19, 1, 1, "", "gdf_with_mpi"], [19, 1, 1, "", "scf_with_mpi"]], "vayesta.rpa": [[21, 0, 0, "-", "rirpa"], [20, 0, 0, "-", "rpa"], [20, 1, 1, "", "ssRPA"], [20, 0, 0, "-", "ssrpa"], [20, 0, 0, "-", "ssurpa"]], "vayesta.rpa.rirpa": [[21, 0, 0, "-", "NI_eval"], [21, 0, 0, "-", "RIRPA"], [21, 0, 0, "-", "RIURPA"], [21, 0, 0, "-", "energy_NI"], [21, 0, 0, "-", "momzero_NI"], [21, 1, 1, "", "ssRIRPA"]], "vayesta.rpa.rirpa.NI_eval": [[21, 2, 1, "", "NICheckInf"], [21, 6, 1, "", "NIException"], [21, 2, 1, "", "NumericalIntegratorBase"], [21, 2, 1, "", "NumericalIntegratorClenCur"], [21, 2, 1, "", "NumericalIntegratorClenCurInfinite"], [21, 2, 1, "", "NumericalIntegratorClenCurSemiInfinite"], [21, 2, 1, "", "NumericalIntegratorGaussianSemiInfinite"], [21, 1, 1, "", "gen_ClenCur_quad_inf"], [21, 1, 1, "", "gen_ClenCur_quad_semiinf"]], "vayesta.rpa.rirpa.NI_eval.NICheckInf": [[21, 4, 1, "", "calculate_error"], [21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.NI_eval.NIException": [[21, 5, 1, "", "args"], [21, 4, 1, "", "with_traceback"]], "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase": [[21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur": [[21, 4, 1, "", "calculate_error"], [21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite": [[21, 4, 1, "", "calculate_error"], [21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite": [[21, 4, 1, "", "calculate_error"], [21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite": [[21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.RIRPA": [[21, 1, 1, "", "compress_low_rank"], [21, 1, 1, "", "construct_inverse_RI"], [21, 1, 1, "", "construct_product_RI"], [21, 2, 1, "", "ssRIRPA"], [21, 5, 1, "", "ssRIRRPA"]], "vayesta.rpa.rirpa.RIRPA.ssRIRPA": [[21, 3, 1, "", "D"], [21, 4, 1, "", "check_errors"], [21, 4, 1, "", "compress_low_rank"], [21, 4, 1, "", "construct_RI_AB"], [21, 4, 1, "", "direct_AC_integration"], [21, 3, 1, "", "e_corr"], [21, 3, 1, "", "e_tot"], [21, 4, 1, "", "get_3c_integrals"], [21, 4, 1, "", "get_ab_xc_ri"], [21, 4, 1, "", "get_apb_eri_ri"], [21, 4, 1, "", "get_compressed_MP"], [21, 4, 1, "", "get_gap"], [21, 4, 1, "", "kernel_energy"], [21, 4, 1, "", "kernel_moms"], [21, 4, 1, "", "kernel_trMPrt"], [21, 3, 1, "", "mo_coeff"], [21, 3, 1, "", "mo_coeff_occ"], [21, 3, 1, "", "mo_coeff_vir"], [21, 3, 1, "", "mo_energy"], [21, 3, 1, "", "mo_energy_occ"], [21, 3, 1, "", "mo_energy_vir"], [21, 3, 1, "", "naux_eri"], [21, 3, 1, "", "nocc"], [21, 3, 1, "", "nvir"], [21, 3, 1, "", "ov"], [21, 3, 1, "", "ov_tot"], [21, 4, 1, "", "test_eta0_error"], [21, 4, 1, "", "test_spectral_rep"]], "vayesta.rpa.rirpa.RIURPA": [[21, 2, 1, "", "ssRIURPA"]], "vayesta.rpa.rirpa.RIURPA.ssRIURPA": [[21, 3, 1, "", "D"], [21, 4, 1, "", "check_errors"], [21, 4, 1, "", "compress_low_rank"], [21, 4, 1, "", "construct_RI_AB"], [21, 4, 1, "", "direct_AC_integration"], [21, 3, 1, "", "e_corr"], [21, 3, 1, "", "e_tot"], [21, 4, 1, "", "get_3c_integrals"], [21, 4, 1, "", "get_ab_xc_ri"], [21, 4, 1, "", "get_apb_eri_ri"], [21, 4, 1, "", "get_compressed_MP"], [21, 4, 1, "", "get_gap"], [21, 4, 1, "", "kernel_energy"], [21, 4, 1, "", "kernel_moms"], [21, 4, 1, "", "kernel_trMPrt"], [21, 3, 1, "", "mo_coeff"], [21, 3, 1, "", "mo_coeff_occ"], [21, 3, 1, "", "mo_coeff_vir"], [21, 3, 1, "", "mo_energy"], [21, 3, 1, "", "mo_energy_occ"], [21, 3, 1, "", "mo_energy_vir"], [21, 3, 1, "", "mo_occ"], [21, 3, 1, "", "naux_eri"], [21, 3, 1, "", "nmo"], [21, 3, 1, "", "nocc"], [21, 3, 1, "", "nvir"], [21, 3, 1, "", "ov"], [21, 3, 1, "", "ov_tot"], [21, 4, 1, "", "test_eta0_error"], [21, 4, 1, "", "test_spectral_rep"]], "vayesta.rpa.rirpa.energy_NI": [[21, 6, 1, "", "NIError"], [21, 2, 1, "", "NITrRootMP"]], "vayesta.rpa.rirpa.energy_NI.NIError": [[21, 5, 1, "", "args"], [21, 4, 1, "", "with_traceback"]], "vayesta.rpa.rirpa.energy_NI.NITrRootMP": [[21, 4, 1, "", "calculate_error"], [21, 3, 1, "", "diagmat1"], [21, 3, 1, "", "diagmat2"], [21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_F"], [21, 4, 1, "", "get_Q"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "n_aux"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.momzero_NI": [[21, 2, 1, "", "BaseMomzeroOffset"], [21, 2, 1, "", "MomzeroDeductD"], [21, 2, 1, "", "MomzeroDeductHigherOrder"], [21, 2, 1, "", "MomzeroDeductNone"], [21, 2, 1, "", "MomzeroOffsetCalcCC"], [21, 2, 1, "", "MomzeroOffsetCalcGaussLag"], [21, 2, 1, "", "NIMomZero"], [21, 1, 1, "", "diag_sqrt_contrib"], [21, 1, 1, "", "diag_sqrt_deriv2"], [21, 1, 1, "", "diag_sqrt_grad"]], "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset": [[21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD": [[21, 4, 1, "", "calculate_error"], [21, 3, 1, "", "diagmat1"], [21, 3, 1, "", "diagmat2"], [21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_F"], [21, 4, 1, "", "get_Q"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "n_aux"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder": [[21, 4, 1, "", "calculate_error"], [21, 3, 1, "", "diagmat1"], [21, 3, 1, "", "diagmat2"], [21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_F"], [21, 4, 1, "", "get_Q"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "n_aux"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone": [[21, 4, 1, "", "calculate_error"], [21, 3, 1, "", "diagmat1"], [21, 3, 1, "", "diagmat2"], [21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_F"], [21, 4, 1, "", "get_Q"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "n_aux"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC": [[21, 4, 1, "", "calculate_error"], [21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag": [[21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rirpa.momzero_NI.NIMomZero": [[21, 4, 1, "", "calculate_error"], [21, 3, 1, "", "diagmat1"], [21, 3, 1, "", "diagmat2"], [21, 4, 1, "", "eval_NI_approx"], [21, 4, 1, "", "eval_contrib"], [21, 4, 1, "", "eval_diag_NI_approx"], [21, 4, 1, "", "eval_diag_NI_approx_deriv2"], [21, 4, 1, "", "eval_diag_NI_approx_grad"], [21, 4, 1, "", "eval_diag_contrib"], [21, 4, 1, "", "eval_diag_deriv2_contrib"], [21, 4, 1, "", "eval_diag_deriv_contrib"], [21, 4, 1, "", "eval_diag_exact"], [21, 4, 1, "", "fix_params"], [21, 4, 1, "", "get_F"], [21, 4, 1, "", "get_Q"], [21, 4, 1, "", "get_offset"], [21, 4, 1, "", "get_quad"], [21, 4, 1, "", "get_quad_vals"], [21, 4, 1, "", "kernel"], [21, 4, 1, "", "kernel_adaptive"], [21, 4, 1, "", "l2_scan"], [21, 4, 1, "", "max_scan"], [21, 3, 1, "", "n_aux"], [21, 3, 1, "", "npoints"], [21, 4, 1, "", "opt_quadrature_diag"], [21, 4, 1, "", "test_diag_derivs"]], "vayesta.rpa.rpa": [[20, 2, 1, "", "RPA"]], "vayesta.rpa.rpa.RPA": [[20, 4, 1, "", "ao2mo"], [20, 3, 1, "", "e_corr"], [20, 3, 1, "", "e_tot"], [20, 4, 1, "", "get_interaction_kernel"], [20, 4, 1, "", "kernel"], [20, 3, 1, "", "mo_coeff"], [20, 3, 1, "", "nao"], [20, 3, 1, "", "nocc"], [20, 3, 1, "", "nvir"], [20, 3, 1, "", "ov"]], "vayesta.rpa.ssrpa": [[20, 2, 1, "", "ssRPA"], [20, 5, 1, "", "ssRRPA"]], "vayesta.rpa.ssrpa.ssRPA": [[20, 4, 1, "", "ao2mo"], [20, 4, 1, "", "calc_energy_correction"], [20, 3, 1, "", "e_corr"], [20, 3, 1, "", "e_tot"], [20, 4, 1, "", "gen_moms"], [20, 4, 1, "", "get_k"], [20, 4, 1, "", "get_xc_contribs"], [20, 4, 1, "", "kernel"], [20, 3, 1, "", "mo_coeff"], [20, 3, 1, "", "mo_coeff_occ"], [20, 3, 1, "", "mo_coeff_vir"], [20, 3, 1, "", "nao"], [20, 3, 1, "", "nocc"], [20, 3, 1, "", "nvir"], [20, 3, 1, "", "ov"], [20, 3, 1, "", "ova"], [20, 3, 1, "", "ovb"]], "vayesta.rpa.ssurpa": [[20, 2, 1, "", "ssURPA"]], "vayesta.rpa.ssurpa.ssURPA": [[20, 4, 1, "", "ao2mo"], [20, 4, 1, "", "calc_energy_correction"], [20, 3, 1, "", "e_corr"], [20, 3, 1, "", "e_tot"], [20, 4, 1, "", "gen_moms"], [20, 4, 1, "", "get_k"], [20, 4, 1, "", "get_xc_contribs"], [20, 4, 1, "", "kernel"], [20, 3, 1, "", "mo_coeff"], [20, 3, 1, "", "mo_coeff_occ"], [20, 3, 1, "", "mo_coeff_vir"], [20, 3, 1, "", "nao"], [20, 3, 1, "", "nocc"], [20, 3, 1, "", "norb"], [20, 3, 1, "", "nvir"], [20, 3, 1, "", "ov"], [20, 3, 1, "", "ova"], [20, 3, 1, "", "ovb"]], "vayesta.solver": [[22, 0, 0, "-", "ccsd"], [22, 0, 0, "-", "ccsdtq"], [22, 1, 1, "", "check_solver_config"], [22, 0, 0, "-", "cisd"], [22, 0, 0, "-", "coupled_ccsd"], [22, 0, 0, "-", "coupling"], [22, 0, 0, "-", "dump"], [23, 0, 0, "-", "eb_fci"], [22, 0, 0, "-", "ebcc"], [22, 0, 0, "-", "ebfci"], [22, 0, 0, "-", "ext_ccsd"], [22, 0, 0, "-", "fci"], [22, 1, 1, "", "get_solver_class"], [22, 0, 0, "-", "hamiltonian"], [22, 0, 0, "-", "mp2"], [22, 0, 0, "-", "solver"], [22, 0, 0, "-", "tccsd"]], "vayesta.solver.ccsd": [[22, 2, 1, "", "RCCSD_Solver"], [22, 2, 1, "", "UCCSD"], [22, 2, 1, "", "UCCSD_Solver"]], "vayesta.solver.ccsd.RCCSD_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "generate_init_guess"], [22, 4, 1, "", "get_callback"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver_class"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 4, 1, "", "print_extra_info"], [22, 4, 1, "", "t_diagnostic"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.ccsd.RCCSD_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "dict_with_defaults"], [22, 5, 1, "", "diis_space"], [22, 5, 1, "", "diis_start_cycle"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 5, 1, "", "init_guess"], [22, 4, 1, "", "items"], [22, 5, 1, "", "iterative_damping"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "level_shift"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "sc_mode"], [22, 5, 1, "", "solve_lambda"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.ccsd.UCCSD": [[22, 4, 1, "", "EOMEA"], [22, 4, 1, "", "EOMEA_Ta"], [22, 4, 1, "", "EOMEE"], [22, 4, 1, "", "EOMEESinglet"], [22, 4, 1, "", "EOMEESpinFlip"], [22, 4, 1, "", "EOMEESpinKeep"], [22, 4, 1, "", "EOMEETriplet"], [22, 4, 1, "", "EOMIP"], [22, 4, 1, "", "EOMIP_Ta"], [22, 4, 1, "", "add_keys"], [22, 4, 1, "", "amplitudes_from_rccsd"], [22, 4, 1, "", "amplitudes_to_vector"], [22, 4, 1, "", "ao2mo"], [22, 4, 1, "", "apply"], [22, 4, 1, "", "as_scanner"], [22, 5, 1, "", "async_io"], [22, 5, 1, "", "cc2"], [22, 4, 1, "", "ccsd"], [22, 4, 1, "", "ccsd_t"], [22, 4, 1, "", "check_sanity"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "density_fit"], [22, 5, 1, "", "diis"], [22, 5, 1, "", "diis_file"], [22, 5, 1, "", "diis_space"], [22, 5, 1, "", "diis_start_cycle"], [22, 5, 1, "", "diis_start_energy_diff"], [22, 5, 1, "", "direct"], [22, 4, 1, "", "dump_chk"], [22, 4, 1, "", "dump_flags"], [22, 3, 1, "", "e_tot"], [22, 4, 1, "", "eaccsd"], [22, 3, 1, "", "ecc"], [22, 4, 1, "", "eeccsd"], [22, 4, 1, "", "energy"], [22, 4, 1, "", "eomea_method"], [22, 4, 1, "", "eomee_ccsd"], [22, 4, 1, "", "eomee_ccsd_singlet"], [22, 4, 1, "", "eomee_ccsd_triplet"], [22, 4, 1, "", "eomee_method"], [22, 4, 1, "", "eomip_method"], [22, 4, 1, "", "eomsf_ccsd"], [22, 4, 1, "", "get_d1_diagnostic"], [22, 4, 1, "", "get_d2_diagnostic"], [22, 4, 1, "", "get_e_hf"], [22, 4, 1, "", "get_frozen_mask"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_nmo"], [22, 4, 1, "", "get_nocc"], [22, 4, 1, "", "get_t1_diagnostic"], [22, 5, 1, "", "incore_complete"], [22, 4, 1, "", "init_amps"], [22, 4, 1, "", "ipccsd"], [22, 5, 1, "", "iterative_damping"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "make_rdm1"], [22, 4, 1, "", "make_rdm2"], [22, 5, 1, "", "max_cycle"], [22, 3, 1, "", "nmo"], [22, 3, 1, "", "nocc"], [22, 4, 1, "", "nuc_grad_method"], [22, 4, 1, "", "post_kernel"], [22, 4, 1, "", "pre_kernel"], [22, 4, 1, "", "reset"], [22, 4, 1, "", "restore_from_diis_"], [22, 4, 1, "", "run"], [22, 4, 1, "", "run_diis"], [22, 4, 1, "", "set"], [22, 4, 1, "", "set_frozen"], [22, 4, 1, "", "solve_lambda"], [22, 4, 1, "", "spin_square"], [22, 5, 1, "", "stdout"], [22, 4, 1, "", "uccsd_t"], [22, 4, 1, "", "update_amps"], [22, 4, 1, "", "vector_size"], [22, 4, 1, "", "vector_to_amplitudes"], [22, 5, 1, "", "verbose"], [22, 4, 1, "", "view"]], "vayesta.solver.ccsd.UCCSD_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "generate_init_guess"], [22, 4, 1, "", "get_callback"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver_class"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 4, 1, "", "print_extra_info"], [22, 4, 1, "", "t_diagnostic"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.ccsd.UCCSD_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "dict_with_defaults"], [22, 5, 1, "", "diis_space"], [22, 5, 1, "", "diis_start_cycle"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 5, 1, "", "init_guess"], [22, 4, 1, "", "items"], [22, 5, 1, "", "iterative_damping"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "level_shift"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "sc_mode"], [22, 5, 1, "", "solve_lambda"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.ccsdtq": [[22, 1, 1, "", "t2_residual_rhf_t3v"], [22, 1, 1, "", "t2_residual_uhf_t3v"], [22, 1, 1, "", "t_residual_rhf"], [22, 1, 1, "", "t_residual_uhf"]], "vayesta.solver.cisd": [[22, 1, 1, "", "CISD_Solver"], [22, 2, 1, "", "RCISD_Solver"], [22, 2, 1, "", "UCISD"], [22, 2, 1, "", "UCISD_Solver"]], "vayesta.solver.cisd.RCISD_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver_class"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.cisd.RCISD_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 4, 1, "", "replace"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.cisd.UCISD": [[22, 4, 1, "", "add_keys"], [22, 4, 1, "", "amplitudes_to_cisdvec"], [22, 4, 1, "", "ao2mo"], [22, 4, 1, "", "apply"], [22, 4, 1, "", "as_scanner"], [22, 5, 1, "", "async_io"], [22, 4, 1, "", "check_sanity"], [22, 4, 1, "", "cisd"], [22, 4, 1, "", "cisdvec_to_amplitudes"], [22, 4, 1, "", "contract"], [22, 5, 1, "", "conv_tol"], [22, 4, 1, "", "density_fit"], [22, 5, 1, "", "direct"], [22, 4, 1, "", "dump_chk"], [22, 4, 1, "", "dump_flags"], [22, 3, 1, "", "e_tot"], [22, 4, 1, "", "from_fcivec"], [22, 4, 1, "", "get_e_hf"], [22, 4, 1, "", "get_frozen_mask"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_nmo"], [22, 4, 1, "", "get_nocc"], [22, 4, 1, "", "kernel"], [22, 5, 1, "", "level_shift"], [22, 5, 1, "", "lindep"], [22, 4, 1, "", "make_diagonal"], [22, 4, 1, "", "make_rdm1"], [22, 4, 1, "", "make_rdm2"], [22, 5, 1, "", "max_cycle"], [22, 5, 1, "", "max_space"], [22, 3, 1, "", "nmo"], [22, 3, 1, "", "nocc"], [22, 3, 1, "", "nstates"], [22, 4, 1, "", "nuc_grad_method"], [22, 4, 1, "", "post_kernel"], [22, 4, 1, "", "pre_kernel"], [22, 4, 1, "", "reset"], [22, 4, 1, "", "run"], [22, 4, 1, "", "set"], [22, 5, 1, "", "stdout"], [22, 4, 1, "", "to_fcivec"], [22, 4, 1, "", "trans_rdm1"], [22, 4, 1, "", "vector_size"], [22, 5, 1, "", "verbose"], [22, 4, 1, "", "view"]], "vayesta.solver.cisd.UCISD_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver_class"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.cisd.UCISD_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 4, 1, "", "replace"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.coupled_ccsd": [[22, 2, 1, "", "coupledRCCSD_Solver"]], "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "generate_init_guess"], [22, 4, 1, "", "get_callback"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver_class"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 4, 1, "", "print_extra_info"], [22, 4, 1, "", "set_coupled_fragments"], [22, 4, 1, "", "t_diagnostic"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "dict_with_defaults"], [22, 5, 1, "", "diis_space"], [22, 5, 1, "", "diis_start_cycle"], [22, 5, 1, "", "fragments"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 5, 1, "", "init_guess"], [22, 4, 1, "", "items"], [22, 5, 1, "", "iterative_damping"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "level_shift"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "sc_mode"], [22, 5, 1, "", "solve_lambda"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.coupling": [[22, 1, 1, "", "couple_ccsd_iterations"], [22, 1, 1, "", "externally_correct"], [22, 1, 1, "", "get_amplitude_norm"], [22, 1, 1, "", "project_t2"], [22, 1, 1, "", "project_t2_rspin"], [22, 1, 1, "", "project_t2_uspin"], [22, 1, 1, "", "tailor_with_fragments"], [22, 1, 1, "", "transform_amplitude"]], "vayesta.solver.dump": [[22, 2, 1, "", "DumpSolver"]], "vayesta.solver.dump.DumpSolver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.dump.DumpSolver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 4, 1, "", "dict_with_defaults"], [22, 5, 1, "", "dumpfile"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 4, 1, "", "replace"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.eb_fci": [[23, 0, 0, "-", "ebfci"], [23, 0, 0, "-", "ebfci_slow"], [23, 0, 0, "-", "uebfci_slow"]], "vayesta.solver.eb_fci.ebfci": [[23, 2, 1, "", "REBFCI"], [23, 2, 1, "", "UEBFCI"]], "vayesta.solver.eb_fci.ebfci.REBFCI": [[23, 2, 1, "", "Options"], [23, 4, 1, "", "get_hamil"], [23, 4, 1, "", "kernel"], [23, 4, 1, "", "make_dd_moms"], [23, 4, 1, "", "make_rdm1"], [23, 4, 1, "", "make_rdm12"], [23, 4, 1, "", "make_rdm2"], [23, 4, 1, "", "make_rdm_eb"], [23, 3, 1, "", "nbos"], [23, 3, 1, "", "nelec"], [23, 3, 1, "", "norb"], [23, 5, 1, "", "solver"]], "vayesta.solver.eb_fci.ebfci.REBFCI.Options": [[23, 4, 1, "", "asdict"], [23, 4, 1, "", "change_dict_defaults"], [23, 5, 1, "", "conv_tol"], [23, 4, 1, "", "dict_with_defaults"], [23, 4, 1, "", "get"], [23, 4, 1, "", "get_default"], [23, 4, 1, "", "get_default_factory"], [23, 4, 1, "", "items"], [23, 4, 1, "", "keys"], [23, 5, 1, "", "max_boson_occ"], [23, 5, 1, "", "max_cycle"], [23, 4, 1, "", "replace"], [23, 4, 1, "", "update"], [23, 4, 1, "", "values"]], "vayesta.solver.eb_fci.ebfci.UEBFCI": [[23, 2, 1, "", "Options"], [23, 4, 1, "", "get_hamil"], [23, 4, 1, "", "kernel"], [23, 4, 1, "", "make_dd_moms"], [23, 4, 1, "", "make_rdm1"], [23, 4, 1, "", "make_rdm12"], [23, 4, 1, "", "make_rdm2"], [23, 4, 1, "", "make_rdm_eb"], [23, 3, 1, "", "nbos"], [23, 3, 1, "", "nelec"], [23, 3, 1, "", "norb"], [23, 5, 1, "", "solver"]], "vayesta.solver.eb_fci.ebfci.UEBFCI.Options": [[23, 4, 1, "", "asdict"], [23, 4, 1, "", "change_dict_defaults"], [23, 5, 1, "", "conv_tol"], [23, 4, 1, "", "dict_with_defaults"], [23, 4, 1, "", "get"], [23, 4, 1, "", "get_default"], [23, 4, 1, "", "get_default_factory"], [23, 4, 1, "", "items"], [23, 4, 1, "", "keys"], [23, 5, 1, "", "max_boson_occ"], [23, 5, 1, "", "max_cycle"], [23, 4, 1, "", "replace"], [23, 4, 1, "", "update"], [23, 4, 1, "", "values"]], "vayesta.solver.eb_fci.ebfci_slow": [[23, 1, 1, "", "apply_bos_annihilation"], [23, 1, 1, "", "apply_bos_creation"], [23, 1, 1, "", "calc_dd_resp_mom"], [23, 1, 1, "", "contract_1e"], [23, 1, 1, "", "contract_2e"], [23, 1, 1, "", "contract_all"], [23, 1, 1, "", "contract_ep"], [23, 1, 1, "", "contract_pp"], [23, 1, 1, "", "contract_pp_for_future"], [23, 1, 1, "", "kernel"], [23, 1, 1, "", "kernel_multiroot"], [23, 1, 1, "", "make_eb_rdm"], [23, 1, 1, "", "make_hdiag"], [23, 1, 1, "", "make_rdm1"], [23, 1, 1, "", "make_rdm12"], [23, 1, 1, "", "make_rdm12s"], [23, 1, 1, "", "make_shape"], [23, 1, 1, "", "run"], [23, 1, 1, "", "run_ep_hubbard"], [23, 1, 1, "", "run_hub_test"], [23, 1, 1, "", "slices_for"], [23, 1, 1, "", "slices_for_cre"], [23, 1, 1, "", "slices_for_des"], [23, 1, 1, "", "slices_for_occ_reduction"]], "vayesta.solver.eb_fci.uebfci_slow": [[23, 1, 1, "", "apply_bos_annihilation"], [23, 1, 1, "", "apply_bos_creation"], [23, 1, 1, "", "calc_dd_resp_mom"], [23, 1, 1, "", "contract_1e"], [23, 1, 1, "", "contract_2e"], [23, 1, 1, "", "contract_all"], [23, 1, 1, "", "contract_ep"], [23, 1, 1, "", "contract_pp"], [23, 1, 1, "", "contract_pp_for_future"], [23, 1, 1, "", "kernel"], [23, 1, 1, "", "kernel_multiroot"], [23, 1, 1, "", "make_eb_rdm"], [23, 1, 1, "", "make_hdiag"], [23, 1, 1, "", "make_rdm1"], [23, 1, 1, "", "make_rdm12"], [23, 1, 1, "", "make_rdm12s"], [23, 1, 1, "", "make_shape"], [23, 1, 1, "", "run"], [23, 1, 1, "", "run_ep_hubbard"], [23, 1, 1, "", "run_hub_test"], [23, 1, 1, "", "slices_for"], [23, 1, 1, "", "slices_for_cre"], [23, 1, 1, "", "slices_for_des"], [23, 1, 1, "", "slices_for_occ_reduction"]], "vayesta.solver.ebcc": [[22, 2, 1, "", "EB_REBCC_Solver"], [22, 2, 1, "", "EB_UEBCC_Solver"], [22, 2, 1, "", "REBCC_Solver"], [22, 2, 1, "", "UEBCC_Solver"]], "vayesta.solver.ebcc.EB_REBCC_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "construct_wavefunction"], [22, 4, 1, "", "get_couplings"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_nonnull_solver_opts"], [22, 3, 1, "", "is_fCCSD"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.ebcc.EB_REBCC_Solver.Options": [[22, 5, 1, "", "ansatz"], [22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "solve_lambda"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.ebcc.EB_UEBCC_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "construct_wavefunction"], [22, 4, 1, "", "get_couplings"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_nonnull_solver_opts"], [22, 3, 1, "", "is_fCCSD"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.ebcc.EB_UEBCC_Solver.Options": [[22, 5, 1, "", "ansatz"], [22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "solve_lambda"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.ebcc.REBCC_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "construct_wavefunction"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_nonnull_solver_opts"], [22, 3, 1, "", "is_fCCSD"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.ebcc.REBCC_Solver.Options": [[22, 5, 1, "", "ansatz"], [22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "solve_lambda"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.ebcc.UEBCC_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "construct_wavefunction"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_nonnull_solver_opts"], [22, 3, 1, "", "is_fCCSD"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.ebcc.UEBCC_Solver.Options": [[22, 5, 1, "", "ansatz"], [22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "solve_lambda"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.ebfci": [[22, 2, 1, "", "EB_EBFCI_Solver"], [22, 2, 1, "", "EB_UEBFCI_Solver"]], "vayesta.solver.ebfci.EB_EBFCI_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.ebfci.EB_EBFCI_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "max_boson_occ"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.ebfci.EB_UEBFCI_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "max_boson_occ"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.ext_ccsd": [[22, 2, 1, "", "extRCCSD_Solver"], [22, 2, 1, "", "extUCCSD_Solver"]], "vayesta.solver.ext_ccsd.extRCCSD_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "generate_init_guess"], [22, 4, 1, "", "get_callback"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver_class"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 4, 1, "", "print_extra_info"], [22, 4, 1, "", "t_diagnostic"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "dict_with_defaults"], [22, 5, 1, "", "diis_space"], [22, 5, 1, "", "diis_start_cycle"], [22, 5, 1, "", "external_corrections"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 5, 1, "", "init_guess"], [22, 4, 1, "", "items"], [22, 5, 1, "", "iterative_damping"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "level_shift"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "sc_mode"], [22, 5, 1, "", "solve_lambda"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.ext_ccsd.extUCCSD_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "generate_init_guess"], [22, 4, 1, "", "get_callback"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver_class"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 4, 1, "", "print_extra_info"], [22, 4, 1, "", "t_diagnostic"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "dict_with_defaults"], [22, 5, 1, "", "diis_space"], [22, 5, 1, "", "diis_start_cycle"], [22, 5, 1, "", "external_corrections"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 5, 1, "", "init_guess"], [22, 4, 1, "", "items"], [22, 5, 1, "", "iterative_damping"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "level_shift"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "sc_mode"], [22, 5, 1, "", "solve_lambda"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.fci": [[22, 2, 1, "", "FCI_Solver"], [22, 2, 1, "", "UFCI_Solver"]], "vayesta.solver.fci.FCI_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 5, 1, "", "cisd_solver"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver_class"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.fci.FCI_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "davidson_only"], [22, 4, 1, "", "dict_with_defaults"], [22, 5, 1, "", "fix_spin"], [22, 5, 1, "", "fix_spin_penalty"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 5, 1, "", "init_guess"], [22, 5, 1, "", "init_guess_noise"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "lindep"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "solver_spin"], [22, 5, 1, "", "threads"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.fci.UFCI_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 5, 1, "", "cisd_solver"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver_class"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.fci.UFCI_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "davidson_only"], [22, 4, 1, "", "dict_with_defaults"], [22, 5, 1, "", "fix_spin"], [22, 5, 1, "", "fix_spin_penalty"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 5, 1, "", "init_guess"], [22, 5, 1, "", "init_guess_noise"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "lindep"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "solver_spin"], [22, 5, 1, "", "threads"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.hamiltonian": [[22, 1, 1, "", "ClusterHamiltonian"], [22, 2, 1, "", "DummyERIs"], [22, 2, 1, "", "EB_RClusterHamiltonian"], [22, 2, 1, "", "EB_UClusterHamiltonian"], [22, 2, 1, "", "RClusterHamiltonian"], [22, 2, 1, "", "UClusterHamiltonian"], [22, 1, 1, "", "is_eb_ham"], [22, 1, 1, "", "is_ham"], [22, 1, 1, "", "is_uhf_ham"]], "vayesta.solver.hamiltonian.EB_RClusterHamiltonian": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "add_screening"], [22, 4, 1, "", "assert_equal_spin_channels"], [22, 4, 1, "", "calc_loc_erpa"], [22, 3, 1, "", "cluster"], [22, 3, 1, "", "couplings"], [22, 4, 1, "", "get_cderi_bare"], [22, 4, 1, "", "get_clus_mf_info"], [22, 4, 1, "", "get_dummy_eri_object"], [22, 4, 1, "", "get_eb_dm_polaritonic_shift"], [22, 4, 1, "", "get_eris_bare"], [22, 4, 1, "", "get_eris_screened"], [22, 4, 1, "", "get_fock"], [22, 4, 1, "", "get_heff"], [22, 4, 1, "", "get_integrals"], [22, 4, 1, "", "get_polaritonic_fock_shift"], [22, 4, 1, "", "get_polaritonic_shifted_couplings"], [22, 3, 1, "", "has_screening"], [22, 3, 1, "", "mo"], [22, 3, 1, "", "ncas"], [22, 3, 1, "", "nelec"], [22, 3, 1, "", "polaritonic_shift"], [22, 4, 1, "", "set_polaritonic_shift"], [22, 4, 1, "", "target_space_projector"], [22, 4, 1, "", "to_pyscf_mf"], [22, 4, 1, "", "with_new_cluster"]], "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options": [[22, 4, 1, "", "asdict"], [22, 5, 1, "", "cache_eris"], [22, 4, 1, "", "change_dict_defaults"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "polaritonic_shift"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "screening"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.hamiltonian.EB_UClusterHamiltonian": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "add_screening"], [22, 4, 1, "", "assert_equal_spin_channels"], [22, 4, 1, "", "calc_loc_erpa"], [22, 3, 1, "", "cluster"], [22, 3, 1, "", "couplings"], [22, 4, 1, "", "get_cderi_bare"], [22, 4, 1, "", "get_clus_mf_info"], [22, 4, 1, "", "get_dummy_eri_object"], [22, 4, 1, "", "get_eb_dm_polaritonic_shift"], [22, 4, 1, "", "get_eris_bare"], [22, 4, 1, "", "get_eris_screened"], [22, 4, 1, "", "get_fock"], [22, 4, 1, "", "get_heff"], [22, 4, 1, "", "get_integrals"], [22, 4, 1, "", "get_polaritonic_fock_shift"], [22, 4, 1, "", "get_polaritonic_shifted_couplings"], [22, 3, 1, "", "has_screening"], [22, 3, 1, "", "mo"], [22, 3, 1, "", "ncas"], [22, 3, 1, "", "nelec"], [22, 3, 1, "", "polaritonic_shift"], [22, 4, 1, "", "set_polaritonic_shift"], [22, 4, 1, "", "target_space_projector"], [22, 4, 1, "", "to_pyscf_mf"], [22, 4, 1, "", "with_new_cluster"]], "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options": [[22, 4, 1, "", "asdict"], [22, 5, 1, "", "cache_eris"], [22, 4, 1, "", "change_dict_defaults"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "polaritonic_shift"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "screening"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.hamiltonian.RClusterHamiltonian": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "add_screening"], [22, 4, 1, "", "assert_equal_spin_channels"], [22, 4, 1, "", "calc_loc_erpa"], [22, 3, 1, "", "cluster"], [22, 4, 1, "", "get_cderi_bare"], [22, 4, 1, "", "get_clus_mf_info"], [22, 4, 1, "", "get_dummy_eri_object"], [22, 4, 1, "", "get_eris_bare"], [22, 4, 1, "", "get_eris_screened"], [22, 4, 1, "", "get_fock"], [22, 4, 1, "", "get_heff"], [22, 4, 1, "", "get_integrals"], [22, 3, 1, "", "has_screening"], [22, 3, 1, "", "mo"], [22, 3, 1, "", "ncas"], [22, 3, 1, "", "nelec"], [22, 4, 1, "", "target_space_projector"], [22, 4, 1, "", "to_pyscf_mf"], [22, 4, 1, "", "with_new_cluster"]], "vayesta.solver.hamiltonian.RClusterHamiltonian.Options": [[22, 4, 1, "", "asdict"], [22, 5, 1, "", "cache_eris"], [22, 4, 1, "", "change_dict_defaults"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "screening"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.hamiltonian.UClusterHamiltonian": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "add_screening"], [22, 4, 1, "", "assert_equal_spin_channels"], [22, 4, 1, "", "calc_loc_erpa"], [22, 3, 1, "", "cluster"], [22, 4, 1, "", "get_cderi_bare"], [22, 4, 1, "", "get_clus_mf_info"], [22, 4, 1, "", "get_dummy_eri_object"], [22, 4, 1, "", "get_eris_bare"], [22, 4, 1, "", "get_eris_screened"], [22, 4, 1, "", "get_fock"], [22, 4, 1, "", "get_heff"], [22, 4, 1, "", "get_integrals"], [22, 3, 1, "", "has_screening"], [22, 3, 1, "", "mo"], [22, 3, 1, "", "ncas"], [22, 3, 1, "", "nelec"], [22, 4, 1, "", "target_space_projector"], [22, 4, 1, "", "to_pyscf_mf"], [22, 4, 1, "", "with_new_cluster"]], "vayesta.solver.hamiltonian.UClusterHamiltonian.Options": [[22, 4, 1, "", "asdict"], [22, 5, 1, "", "cache_eris"], [22, 4, 1, "", "change_dict_defaults"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "screening"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.mp2": [[22, 2, 1, "", "RMP2_Solver"], [22, 2, 1, "", "UMP2_Solver"]], "vayesta.solver.mp2.RMP2_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_ov_eris"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "make_t2"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.mp2.RMP2_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "compress_cderi"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 4, 1, "", "replace"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.mp2.UMP2_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_ov_eris"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "make_t2"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.mp2.UMP2_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "compress_cderi"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 4, 1, "", "replace"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.solver": [[22, 2, 1, "", "ClusterSolver"], [22, 2, 1, "", "UClusterSolver"]], "vayesta.solver.solver.ClusterSolver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.solver.ClusterSolver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 4, 1, "", "replace"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.solver.UClusterSolver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.solver.UClusterSolver.Options": [[22, 4, 1, "", "asdict"], [22, 4, 1, "", "change_dict_defaults"], [22, 4, 1, "", "dict_with_defaults"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 4, 1, "", "items"], [22, 4, 1, "", "keys"], [22, 4, 1, "", "replace"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.solver.tccsd": [[22, 2, 1, "", "TRCCSD_Solver"]], "vayesta.solver.tccsd.TRCCSD_Solver": [[22, 2, 1, "", "Options"], [22, 4, 1, "", "calc_v_ext"], [22, 4, 1, "", "generate_init_guess"], [22, 4, 1, "", "get_callback"], [22, 4, 1, "", "get_init_guess"], [22, 4, 1, "", "get_solver_class"], [22, 4, 1, "", "kernel"], [22, 4, 1, "", "optimize_cpt"], [22, 4, 1, "", "print_extra_info"], [22, 4, 1, "", "t_diagnostic"], [22, 3, 1, "", "v_ext"]], "vayesta.solver.tccsd.TRCCSD_Solver.Options": [[22, 4, 1, "", "asdict"], [22, 5, 1, "", "c_cas_occ"], [22, 5, 1, "", "c_cas_vir"], [22, 4, 1, "", "change_dict_defaults"], [22, 5, 1, "", "conv_tol"], [22, 5, 1, "", "conv_tol_normt"], [22, 4, 1, "", "dict_with_defaults"], [22, 5, 1, "", "diis_space"], [22, 5, 1, "", "diis_start_cycle"], [22, 5, 1, "", "fci_opts"], [22, 4, 1, "", "get"], [22, 4, 1, "", "get_default"], [22, 4, 1, "", "get_default_factory"], [22, 5, 1, "", "init_guess"], [22, 4, 1, "", "items"], [22, 5, 1, "", "iterative_damping"], [22, 4, 1, "", "keys"], [22, 5, 1, "", "level_shift"], [22, 5, 1, "", "max_cycle"], [22, 4, 1, "", "replace"], [22, 5, 1, "", "sc_mode"], [22, 5, 1, "", "solve_lambda"], [22, 4, 1, "", "update"], [22, 4, 1, "", "values"]], "vayesta.tools": [[24, 0, 0, "-", "eos"], [25, 0, 0, "-", "plotting"]], "vayesta.tools.eos": [[24, 2, 1, "", "FitResult"], [24, 1, 1, "", "birch_murnaghan"], [24, 1, 1, "", "cmdline_tool"], [24, 1, 1, "", "fit_eos"], [24, 1, 1, "", "fit_from_file"], [24, 1, 1, "", "parabola"]], "vayesta.tools.eos.FitResult": [[24, 5, 1, "", "b0"], [24, 5, 1, "", "bp"], [24, 5, 1, "", "e0"], [24, 5, 1, "", "v0"], [24, 5, 1, "", "x0"]], "vayesta.tools.plotting": [[25, 0, 0, "-", "colors"]], "vayesta.tools.plotting.colors": [[25, 1, 1, "", "get_atom_color"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:property", "4": "py:method", "5": "py:attribute", "6": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "property", "Python property"], "4": ["py", "method", "Python method"], "5": ["py", "attribute", "Python attribute"], "6": ["py", "exception", "Python exception"]}, "titleterms": {"api": 0, "basic": 0, "advanc": 0, "vayesta": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 31], "subpackag": [1, 2, 9, 16, 20, 22, 24], "modul": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "content": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 31], "core": [2, 3, 4, 5, 6, 7, 8, 9, 10], "submodul": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "cmdarg": 2, "foldscf": 2, "helper": [2, 3, 4, 5, 13], "linalg": 2, "spinalg": 2, "util": 2, "vlog": 2, "ao2mo": 3, "kao2gmo": 3, "postscf_ao2mo": 3, "pyscf_eri": 3, "bath": 4, "bno": 4, "dmet": [4, 11, 35], "ewdmet": 4, "full": 4, "r2bath": 4, "fragment": [5, 6, 11, 12, 13, 39], "ca": 5, "iao": 5, "iaopao": 5, "sao": 5, "site": 5, "ufragment": 5, "qemb": 6, "corrfunc": [6, 16], "regist": 6, "scrcoulomb": 6, "ufrag": [6, 11, 12, 13], "uqemb": 6, "scmf": 7, "brueckner": [7, 16], "pdmet": [7, 11], "symmetri": 8, "group": 8, "oper": 8, "tsymmetri": 8, "type": [9, 10, 39], "cluster": [9, 36], "ebwf": 9, "orbit": 9, "wf": 10, "ccsd": [10, 22], "ccsdtq": [10, 22], "cisd": [10, 22], "cisdtq": 10, "fci": [10, 22], "hf": 10, "mp2": [10, 22], "project": 10, "t_to_c": 10, "sdp_sc": 11, "udmet": 11, "updat": 11, "edmet": [12, 37], "uedmet": 12, "ewf": [13, 38], "uewf": 13, "lattmod": 14, "beth": 14, "latt": 14, "lib": 15, "libcor": 15, "misc": [16, 17, 18], "counterpois": 16, "cptbisect": 16, "cubefil": 16, "gto_help": 16, "pcdii": 16, "molecul": [17, 35, 38], "solid": 18, "mpi": [19, 41], "interfac": 19, "rma": 19, "scf": 19, "rpa": [20, 21], "ssrpa": 20, "ssurpa": 20, "rirpa": 21, "ni_ev": 21, "riurpa": 21, "energy_ni": 21, "momzero_ni": 21, "solver": [22, 23], "coupled_ccsd": 22, "coupl": 22, "dump": [22, 36], "ebcc": 22, "ebfci": [22, 23], "ext_ccsd": 22, "hamiltonian": [22, 34, 36], "tccsd": 22, "eb_fci": 23, "ebfci_slow": 23, "uebfci_slow": 23, "tool": [24, 25], "eo": 24, "plot": 25, "color": 25, "mpl_mol": 25, "plotly_mol": 25, "instal": [26, 29, 32], "openbla": 26, "from": [26, 32], "sourc": [26, 32], "environ": 27, "variabl": 27, "faq": 28, "mpi4pi": 29, "document": 31, "pip": 32, "run": [32, 41], "test": 32, "introduct": 33, "featur": 33, "custom": 34, "densiti": [35, 37], "matrix": [35, 37], "embbed": 35, "theori": [35, 37], "simpl": 35, "matric": 35, "hubbard": 35, "model": 35, "1d": 35, "extend": 37, "embed": [37, 38], "finit": 37, "system": 37, "wave": 38, "function": 38, "base": 38, "water": 38, "cubic": 38, "boron": 38, "nitrid": 38, "cbn": 38, "defin": 39, "comparison": 39, "ad": 39, "quickstart": 40, "parallel": 41, "comput": 41, "an": 41, "job": 41, "addit": 41, "consider": 41}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"API": [[0, "api"]], "Basic": [[0, "basic"]], "Advanced": [[0, "advanced"]], "vayesta": [[1, "vayesta"]], "Subpackages": [[1, "subpackages"], [2, "subpackages"], [9, "subpackages"], [16, "subpackages"], [20, "subpackages"], [22, "subpackages"], [24, "subpackages"]], "Module contents": [[1, "module-vayesta"], [2, "module-vayesta.core"], [3, "module-vayesta.core.ao2mo"], [4, "module-vayesta.core.bath"], [5, "module-vayesta.core.fragmentation"], [6, "module-vayesta.core.qemb"], [7, "module-vayesta.core.scmf"], [8, "module-vayesta.core.symmetry"], [9, "module-vayesta.core.types"], [10, "module-vayesta.core.types.wf"], [11, "module-vayesta.dmet"], [12, "module-vayesta.edmet"], [13, "module-vayesta.ewf"], [14, "module-vayesta.lattmod"], [15, "module-vayesta.libs"], [16, "module-vayesta.misc"], [17, "module-vayesta.misc.molecules"], [18, "module-vayesta.misc.solids"], [19, "module-vayesta.mpi"], [20, "module-vayesta.rpa"], [21, "module-vayesta.rpa.rirpa"], [22, "module-vayesta.solver"], [23, "module-vayesta.solver.eb_fci"], [24, "module-vayesta.tools"], [25, "module-vayesta.tools.plotting"]], "vayesta.core": [[2, "vayesta-core"]], "Submodules": [[2, "submodules"], [3, "submodules"], [4, "submodules"], [5, "submodules"], [6, "submodules"], [7, "submodules"], [8, "submodules"], [9, "submodules"], [10, "submodules"], [11, "submodules"], [12, "submodules"], [13, "submodules"], [14, "submodules"], [15, "submodules"], [16, "submodules"], [17, "submodules"], [18, "submodules"], [19, "submodules"], [20, "submodules"], [21, "submodules"], [22, "submodules"], [23, "submodules"], [24, "submodules"], [25, "submodules"]], "vayesta.core.cmdargs": [[2, "module-vayesta.core.cmdargs"]], "vayesta.core.foldscf": [[2, "module-vayesta.core.foldscf"]], "vayesta.core.helper": [[2, "module-vayesta.core.helper"]], "vayesta.core.linalg": [[2, "module-vayesta.core.linalg"]], "vayesta.core.spinalg": [[2, "module-vayesta.core.spinalg"]], "vayesta.core.util": [[2, "module-vayesta.core.util"]], "vayesta.core.vlog": [[2, "module-vayesta.core.vlog"]], "vayesta.core.ao2mo": [[3, "vayesta-core-ao2mo"]], "vayesta.core.ao2mo.helper": [[3, "module-vayesta.core.ao2mo.helper"]], "vayesta.core.ao2mo.kao2gmo": [[3, "module-vayesta.core.ao2mo.kao2gmo"]], "vayesta.core.ao2mo.postscf_ao2mo": [[3, "module-vayesta.core.ao2mo.postscf_ao2mo"]], "vayesta.core.ao2mo.pyscf_eris": [[3, "module-vayesta.core.ao2mo.pyscf_eris"]], "vayesta.core.bath": [[4, "vayesta-core-bath"]], "vayesta.core.bath.bath": [[4, "module-vayesta.core.bath.bath"]], "vayesta.core.bath.bno": [[4, "module-vayesta.core.bath.bno"]], "vayesta.core.bath.dmet": [[4, "module-vayesta.core.bath.dmet"]], "vayesta.core.bath.ewdmet": [[4, "module-vayesta.core.bath.ewdmet"]], "vayesta.core.bath.full": [[4, "module-vayesta.core.bath.full"]], "vayesta.core.bath.helper": [[4, "module-vayesta.core.bath.helper"]], "vayesta.core.bath.r2bath": [[4, "module-vayesta.core.bath.r2bath"]], "vayesta.core.fragmentation": [[5, "vayesta-core-fragmentation"]], "vayesta.core.fragmentation.cas": [[5, "module-vayesta.core.fragmentation.cas"]], "vayesta.core.fragmentation.fragmentation": [[5, "module-vayesta.core.fragmentation.fragmentation"]], "vayesta.core.fragmentation.helper": [[5, "module-vayesta.core.fragmentation.helper"]], "vayesta.core.fragmentation.iao": [[5, "module-vayesta.core.fragmentation.iao"]], "vayesta.core.fragmentation.iaopao": [[5, "module-vayesta.core.fragmentation.iaopao"]], "vayesta.core.fragmentation.sao": [[5, "module-vayesta.core.fragmentation.sao"]], "vayesta.core.fragmentation.site": [[5, "module-vayesta.core.fragmentation.site"]], "vayesta.core.fragmentation.ufragmentation": [[5, "module-vayesta.core.fragmentation.ufragmentation"]], "vayesta.core.qemb": [[6, "vayesta-core-qemb"]], "vayesta.core.qemb.corrfunc": [[6, "module-vayesta.core.qemb.corrfunc"]], "vayesta.core.qemb.fragment": [[6, "module-vayesta.core.qemb.fragment"]], "vayesta.core.qemb.qemb": [[6, "module-vayesta.core.qemb.qemb"]], "vayesta.core.qemb.register": [[6, "module-vayesta.core.qemb.register"]], "vayesta.core.qemb.scrcoulomb": [[6, "module-vayesta.core.qemb.scrcoulomb"]], "vayesta.core.qemb.ufragment": [[6, "module-vayesta.core.qemb.ufragment"]], "vayesta.core.qemb.uqemb": [[6, "module-vayesta.core.qemb.uqemb"]], "vayesta.core.scmf": [[7, "vayesta-core-scmf"]], "vayesta.core.scmf.brueckner": [[7, "module-vayesta.core.scmf.brueckner"]], "vayesta.core.scmf.pdmet": [[7, "module-vayesta.core.scmf.pdmet"]], "vayesta.core.scmf.scmf": [[7, "module-vayesta.core.scmf.scmf"]], "vayesta.core.symmetry": [[8, "vayesta-core-symmetry"]], "vayesta.core.symmetry.group": [[8, "module-vayesta.core.symmetry.group"]], "vayesta.core.symmetry.operation": [[8, "module-vayesta.core.symmetry.operation"]], "vayesta.core.symmetry.symmetry": [[8, "module-vayesta.core.symmetry.symmetry"]], "vayesta.core.symmetry.tsymmetry": [[8, "module-vayesta.core.symmetry.tsymmetry"]], "vayesta.core.types": [[9, "vayesta-core-types"]], "vayesta.core.types.cluster": [[9, "module-vayesta.core.types.cluster"]], "vayesta.core.types.ebwf": [[9, "vayesta-core-types-ebwf"]], "vayesta.core.types.orbitals": [[9, "module-vayesta.core.types.orbitals"]], "vayesta.core.types.wf": [[10, "vayesta-core-types-wf"]], "vayesta.core.types.wf.ccsd": [[10, "module-vayesta.core.types.wf.ccsd"]], "vayesta.core.types.wf.ccsdtq": [[10, "module-vayesta.core.types.wf.ccsdtq"]], "vayesta.core.types.wf.cisd": [[10, "module-vayesta.core.types.wf.cisd"]], "vayesta.core.types.wf.cisdtq": [[10, "module-vayesta.core.types.wf.cisdtq"]], "vayesta.core.types.wf.fci": [[10, "module-vayesta.core.types.wf.fci"]], "vayesta.core.types.wf.hf": [[10, "module-vayesta.core.types.wf.hf"]], "vayesta.core.types.wf.mp2": [[10, "module-vayesta.core.types.wf.mp2"]], "vayesta.core.types.wf.project": [[10, "module-vayesta.core.types.wf.project"]], "vayesta.core.types.wf.t_to_c": [[10, "module-vayesta.core.types.wf.t_to_c"]], "vayesta.core.types.wf.wf": [[10, "module-vayesta.core.types.wf.wf"]], "vayesta.dmet": [[11, "vayesta-dmet"]], "vayesta.dmet.dmet": [[11, "module-vayesta.dmet.dmet"]], "vayesta.dmet.fragment": [[11, "module-vayesta.dmet.fragment"]], "vayesta.dmet.pdmet": [[11, "module-vayesta.dmet.pdmet"]], "vayesta.dmet.sdp_sc": [[11, "module-vayesta.dmet.sdp_sc"]], "vayesta.dmet.udmet": [[11, "module-vayesta.dmet.udmet"]], "vayesta.dmet.ufragment": [[11, "module-vayesta.dmet.ufragment"]], "vayesta.dmet.updates": [[11, "module-vayesta.dmet.updates"]], "vayesta.edmet": [[12, "vayesta-edmet"]], "vayesta.edmet.edmet": [[12, "module-vayesta.edmet.edmet"]], "vayesta.edmet.fragment": [[12, "module-vayesta.edmet.fragment"]], "vayesta.edmet.uedmet": [[12, "module-vayesta.edmet.uedmet"]], "vayesta.edmet.ufragment": [[12, "module-vayesta.edmet.ufragment"]], "vayesta.ewf": [[13, "vayesta-ewf"]], "vayesta.ewf.ewf": [[13, "module-vayesta.ewf.ewf"]], "vayesta.ewf.fragment": [[13, "module-vayesta.ewf.fragment"]], "vayesta.ewf.helper": [[13, "module-vayesta.ewf.helper"]], "vayesta.ewf.uewf": [[13, "module-vayesta.ewf.uewf"]], "vayesta.ewf.ufragment": [[13, "module-vayesta.ewf.ufragment"]], "vayesta.lattmod": [[14, "vayesta-lattmod"]], "vayesta.lattmod.bethe": [[14, "module-vayesta.lattmod.bethe"]], "vayesta.lattmod.latt": [[14, "module-vayesta.lattmod.latt"]], "vayesta.libs": [[15, "vayesta-libs"]], "vayesta.libs.libcore": [[15, "module-vayesta.libs.libcore"]], "vayesta.misc": [[16, "vayesta-misc"]], "vayesta.misc.brueckner": [[16, "module-vayesta.misc.brueckner"]], "vayesta.misc.corrfunc": [[16, "module-vayesta.misc.corrfunc"]], "vayesta.misc.counterpoise": [[16, "module-vayesta.misc.counterpoise"]], "vayesta.misc.cptbisect": [[16, "module-vayesta.misc.cptbisect"]], "vayesta.misc.cubefile": [[16, "module-vayesta.misc.cubefile"]], "vayesta.misc.gto_helper": [[16, "module-vayesta.misc.gto_helper"]], "vayesta.misc.pcdiis": [[16, "module-vayesta.misc.pcdiis"]], "vayesta.misc.molecules": [[17, "vayesta-misc-molecules"]], "vayesta.misc.molecules.molecules": [[17, "module-vayesta.misc.molecules.molecules"]], "vayesta.misc.solids": [[18, "vayesta-misc-solids"]], "vayesta.misc.solids.solids": [[18, "module-vayesta.misc.solids.solids"]], "vayesta.mpi": [[19, "vayesta-mpi"]], "vayesta.mpi.interface": [[19, "module-vayesta.mpi.interface"]], "vayesta.mpi.rma": [[19, "module-vayesta.mpi.rma"]], "vayesta.mpi.scf": [[19, "module-vayesta.mpi.scf"]], "vayesta.rpa": [[20, "vayesta-rpa"]], "vayesta.rpa.rpa": [[20, "module-vayesta.rpa.rpa"]], "vayesta.rpa.ssrpa": [[20, "module-vayesta.rpa.ssrpa"]], "vayesta.rpa.ssurpa": [[20, "module-vayesta.rpa.ssurpa"]], "vayesta.rpa.rirpa": [[21, "vayesta-rpa-rirpa"]], "vayesta.rpa.rirpa.NI_eval": [[21, "module-vayesta.rpa.rirpa.NI_eval"]], "vayesta.rpa.rirpa.RIRPA": [[21, "module-vayesta.rpa.rirpa.RIRPA"]], "vayesta.rpa.rirpa.RIURPA": [[21, "module-vayesta.rpa.rirpa.RIURPA"]], "vayesta.rpa.rirpa.energy_NI": [[21, "module-vayesta.rpa.rirpa.energy_NI"]], "vayesta.rpa.rirpa.momzero_NI": [[21, "module-vayesta.rpa.rirpa.momzero_NI"]], "vayesta.solver": [[22, "vayesta-solver"]], "vayesta.solver.ccsd": [[22, "module-vayesta.solver.ccsd"]], "vayesta.solver.ccsdtq": [[22, "module-vayesta.solver.ccsdtq"]], "vayesta.solver.cisd": [[22, "module-vayesta.solver.cisd"]], "vayesta.solver.coupled_ccsd": [[22, "module-vayesta.solver.coupled_ccsd"]], "vayesta.solver.coupling": [[22, "module-vayesta.solver.coupling"]], "vayesta.solver.dump": [[22, "module-vayesta.solver.dump"]], "vayesta.solver.ebcc": [[22, "module-vayesta.solver.ebcc"]], "vayesta.solver.ebfci": [[22, "module-vayesta.solver.ebfci"]], "vayesta.solver.ext_ccsd": [[22, "module-vayesta.solver.ext_ccsd"]], "vayesta.solver.fci": [[22, "module-vayesta.solver.fci"]], "vayesta.solver.hamiltonian": [[22, "module-vayesta.solver.hamiltonian"]], "vayesta.solver.mp2": [[22, "module-vayesta.solver.mp2"]], "vayesta.solver.solver": [[22, "module-vayesta.solver.solver"]], "vayesta.solver.tccsd": [[22, "module-vayesta.solver.tccsd"]], "vayesta.solver.eb_fci": [[23, "vayesta-solver-eb-fci"]], "vayesta.solver.eb_fci.ebfci": [[23, "module-vayesta.solver.eb_fci.ebfci"]], "vayesta.solver.eb_fci.ebfci_slow": [[23, "module-vayesta.solver.eb_fci.ebfci_slow"]], "vayesta.solver.eb_fci.uebfci_slow": [[23, "module-vayesta.solver.eb_fci.uebfci_slow"]], "vayesta.tools": [[24, "vayesta-tools"]], "vayesta.tools.eos": [[24, "module-vayesta.tools.eos"]], "vayesta.tools.plotting": [[25, "vayesta-tools-plotting"]], "vayesta.tools.plotting.colors": [[25, "module-vayesta.tools.plotting.colors"]], "vayesta.tools.plotting.mpl_mol": [[25, "vayesta-tools-plotting-mpl-mol"]], "vayesta.tools.plotting.plotly_mol": [[25, "vayesta-tools-plotting-plotly-mol"]], "Installing OpenBLAS from source": [[26, "installing-openblas-from-source"]], "Environment Variables": [[27, "environment-variables"]], "FAQ": [[28, "faq"]], "Installing mpi4py": [[29, "installing-mpi4py"]], "Vayesta Documentation": [[31, "vayesta-documentation"]], "Contents:": [[31, null]], "Installation": [[32, "installation"]], "Installing with pip": [[32, "installing-with-pip"]], "Installation from Source": [[32, "installation-from-source"]], "Running Tests": [[32, "running-tests"]], "Introduction": [[33, "introduction"]], "Features": [[33, "features"]], "Custom Hamiltonians": [[34, "custom-hamiltonians"]], "Density-Matrix Embbeding Theory (DMET)": [[35, "density-matrix-embbeding-theory-dmet"]], "Simple Molecule": [[35, "simple-molecule"]], "Density-Matrices": [[35, "density-matrices"]], "Hubbard Model in 1D": [[35, "hubbard-model-in-1d"]], "Dumping Cluster Hamiltonians": [[36, "dumping-cluster-hamiltonians"]], "Extended Density-matrix embedding theory EDMET:": [[37, "extended-density-matrix-embedding-theory-edmet"]], "Finite Systems": [[37, "finite-systems"]], "Wave Function Based Embedding (EWF)": [[38, "wave-function-based-embedding-ewf"]], "Water Molecule": [[38, "water-molecule"]], "Cubic Boron Nitride (cBN)": [[38, "cubic-boron-nitride-cbn"]], "Defining Fragments": [[39, "defining-fragments"]], "Fragmentation": [[39, "fragmentation"]], "Comparison of fragmentation types": [[39, "id3"]], "Adding Fragments": [[39, "adding-fragments"]], "Quickstart": [[40, "quickstart"]], "Parallel Computing with MPI": [[41, "parallel-computing-with-mpi"]], "Running an MPI Job": [[41, "running-an-mpi-job"]], "Additional Considerations": [[41, "additional-considerations"]]}, "indexentries": {"get_git_hash() (in module vayesta)": [[1, "vayesta.get_git_hash"]], "import_package() (in module vayesta)": [[1, "vayesta.import_package"]], "module": [[1, "module-vayesta"], [2, "module-vayesta.core"], [2, "module-vayesta.core.cmdargs"], [2, "module-vayesta.core.foldscf"], [2, "module-vayesta.core.helper"], [2, "module-vayesta.core.linalg"], [2, "module-vayesta.core.spinalg"], [2, "module-vayesta.core.util"], [2, "module-vayesta.core.vlog"], [3, "module-vayesta.core.ao2mo"], [3, "module-vayesta.core.ao2mo.helper"], [3, "module-vayesta.core.ao2mo.kao2gmo"], [3, "module-vayesta.core.ao2mo.postscf_ao2mo"], [3, "module-vayesta.core.ao2mo.pyscf_eris"], [4, "module-vayesta.core.bath"], [4, "module-vayesta.core.bath.bath"], [4, "module-vayesta.core.bath.bno"], [4, "module-vayesta.core.bath.dmet"], [4, "module-vayesta.core.bath.ewdmet"], [4, "module-vayesta.core.bath.full"], [4, "module-vayesta.core.bath.helper"], [4, "module-vayesta.core.bath.r2bath"], [5, "module-vayesta.core.fragmentation"], [5, "module-vayesta.core.fragmentation.cas"], [5, "module-vayesta.core.fragmentation.fragmentation"], [5, "module-vayesta.core.fragmentation.helper"], [5, "module-vayesta.core.fragmentation.iao"], [5, "module-vayesta.core.fragmentation.iaopao"], [5, "module-vayesta.core.fragmentation.sao"], [5, "module-vayesta.core.fragmentation.site"], [5, "module-vayesta.core.fragmentation.ufragmentation"], [6, "module-vayesta.core.qemb"], [6, "module-vayesta.core.qemb.corrfunc"], [6, "module-vayesta.core.qemb.fragment"], [6, "module-vayesta.core.qemb.qemb"], [6, "module-vayesta.core.qemb.register"], [6, "module-vayesta.core.qemb.scrcoulomb"], [6, "module-vayesta.core.qemb.ufragment"], [6, "module-vayesta.core.qemb.uqemb"], [7, "module-vayesta.core.scmf"], [7, "module-vayesta.core.scmf.brueckner"], [7, "module-vayesta.core.scmf.pdmet"], [7, "module-vayesta.core.scmf.scmf"], [8, "module-vayesta.core.symmetry"], [8, "module-vayesta.core.symmetry.group"], [8, "module-vayesta.core.symmetry.operation"], [8, "module-vayesta.core.symmetry.symmetry"], [8, "module-vayesta.core.symmetry.tsymmetry"], [9, "module-vayesta.core.types"], [9, "module-vayesta.core.types.cluster"], [9, "module-vayesta.core.types.orbitals"], [10, "module-vayesta.core.types.wf"], [10, "module-vayesta.core.types.wf.ccsd"], [10, "module-vayesta.core.types.wf.ccsdtq"], [10, "module-vayesta.core.types.wf.cisd"], [10, "module-vayesta.core.types.wf.cisdtq"], [10, "module-vayesta.core.types.wf.fci"], [10, "module-vayesta.core.types.wf.hf"], [10, "module-vayesta.core.types.wf.mp2"], [10, "module-vayesta.core.types.wf.project"], [10, "module-vayesta.core.types.wf.t_to_c"], [10, "module-vayesta.core.types.wf.wf"], [11, "module-vayesta.dmet"], [11, "module-vayesta.dmet.dmet"], [11, "module-vayesta.dmet.fragment"], [11, "module-vayesta.dmet.pdmet"], [11, "module-vayesta.dmet.sdp_sc"], [11, "module-vayesta.dmet.udmet"], [11, "module-vayesta.dmet.ufragment"], [11, "module-vayesta.dmet.updates"], [12, "module-vayesta.edmet"], [12, "module-vayesta.edmet.edmet"], [12, "module-vayesta.edmet.fragment"], [12, "module-vayesta.edmet.uedmet"], [12, "module-vayesta.edmet.ufragment"], [13, "module-vayesta.ewf"], [13, "module-vayesta.ewf.ewf"], [13, "module-vayesta.ewf.fragment"], [13, "module-vayesta.ewf.helper"], [13, "module-vayesta.ewf.uewf"], [13, "module-vayesta.ewf.ufragment"], [14, "module-vayesta.lattmod"], [14, "module-vayesta.lattmod.bethe"], [14, "module-vayesta.lattmod.latt"], [15, "module-vayesta.libs"], [15, "module-vayesta.libs.libcore"], [16, "module-vayesta.misc"], [16, "module-vayesta.misc.brueckner"], [16, "module-vayesta.misc.corrfunc"], [16, "module-vayesta.misc.counterpoise"], [16, "module-vayesta.misc.cptbisect"], [16, "module-vayesta.misc.cubefile"], [16, "module-vayesta.misc.gto_helper"], [16, "module-vayesta.misc.pcdiis"], [17, "module-vayesta.misc.molecules"], [17, "module-vayesta.misc.molecules.molecules"], [18, "module-vayesta.misc.solids"], [18, "module-vayesta.misc.solids.solids"], [19, "module-vayesta.mpi"], [19, "module-vayesta.mpi.interface"], [19, "module-vayesta.mpi.rma"], [19, "module-vayesta.mpi.scf"], [20, "module-vayesta.rpa"], [20, "module-vayesta.rpa.rpa"], [20, "module-vayesta.rpa.ssrpa"], [20, "module-vayesta.rpa.ssurpa"], [21, "module-vayesta.rpa.rirpa"], [21, "module-vayesta.rpa.rirpa.NI_eval"], [21, "module-vayesta.rpa.rirpa.RIRPA"], [21, "module-vayesta.rpa.rirpa.RIURPA"], [21, "module-vayesta.rpa.rirpa.energy_NI"], [21, "module-vayesta.rpa.rirpa.momzero_NI"], [22, "module-vayesta.solver"], [22, "module-vayesta.solver.ccsd"], [22, "module-vayesta.solver.ccsdtq"], [22, "module-vayesta.solver.cisd"], [22, "module-vayesta.solver.coupled_ccsd"], [22, "module-vayesta.solver.coupling"], [22, "module-vayesta.solver.dump"], [22, "module-vayesta.solver.ebcc"], [22, "module-vayesta.solver.ebfci"], [22, "module-vayesta.solver.ext_ccsd"], [22, "module-vayesta.solver.fci"], [22, "module-vayesta.solver.hamiltonian"], [22, "module-vayesta.solver.mp2"], [22, "module-vayesta.solver.solver"], [22, "module-vayesta.solver.tccsd"], [23, "module-vayesta.solver.eb_fci"], [23, "module-vayesta.solver.eb_fci.ebfci"], [23, "module-vayesta.solver.eb_fci.ebfci_slow"], [23, "module-vayesta.solver.eb_fci.uebfci_slow"], [24, "module-vayesta.tools"], [24, "module-vayesta.tools.eos"], [25, "module-vayesta.tools.plotting"], [25, "module-vayesta.tools.plotting.colors"]], "new_log() (in module vayesta)": [[1, "vayesta.new_log"]], "vayesta": [[1, "module-vayesta"]], "abstractmethoderror": [[2, "vayesta.core.util.AbstractMethodError"]], "convergenceerror": [[2, "vayesta.core.util.ConvergenceError"]], "diis (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.DIIS"], [2, "vayesta.core.foldscf.FoldedRHF.diis"]], "diis (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.DIIS"], [2, "vayesta.core.foldscf.FoldedUHF.diis"]], "foldedrhf (class in vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.FoldedRHF"]], "foldedscf (class in vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.FoldedSCF"]], "foldeduhf (class in vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.FoldedUHF"]], "imaginaryparterror": [[2, "vayesta.core.util.ImaginaryPartError"]], "levelexcludefilter (class in vayesta.core.vlog)": [[2, "vayesta.core.vlog.LevelExcludeFilter"]], "levelincludefilter (class in vayesta.core.vlog)": [[2, "vayesta.core.vlog.LevelIncludeFilter"]], "levelrangefilter (class in vayesta.core.vlog)": [[2, "vayesta.core.vlog.LevelRangeFilter"]], "nologger (class in vayesta.core.vlog)": [[2, "vayesta.core.vlog.NoLogger"]], "notcalculatederror": [[2, "vayesta.core.util.NotCalculatedError"]], "object (class in vayesta.core.util)": [[2, "vayesta.core.util.Object"]], "optionsbase (class in vayesta.core.util)": [[2, "vayesta.core.util.OptionsBase"]], "orthonormalityerror": [[2, "vayesta.core.util.OrthonormalityError"]], "vfilehandler (class in vayesta.core.vlog)": [[2, "vayesta.core.vlog.VFileHandler"]], "vformatter (class in vayesta.core.vlog)": [[2, "vayesta.core.vlog.VFormatter"]], "vstreamhandler (class in vayesta.core.vlog)": [[2, "vayesta.core.vlog.VStreamHandler"]], "acquire() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.acquire"]], "acquire() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.acquire"]], "addfilter() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.addFilter"]], "addfilter() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.addFilter"]], "add_keys() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.add_keys"]], "add_keys() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.add_keys"]], "add_numbers() (in module vayesta.core.spinalg)": [[2, "vayesta.core.spinalg.add_numbers"]], "analyze() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.analyze"]], "analyze() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.analyze"]], "apply() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.apply"]], "apply() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.apply"]], "args (vayesta.core.util.abstractmethoderror attribute)": [[2, "vayesta.core.util.AbstractMethodError.args"]], "args (vayesta.core.util.convergenceerror attribute)": [[2, "vayesta.core.util.ConvergenceError.args"]], "args (vayesta.core.util.imaginaryparterror attribute)": [[2, "vayesta.core.util.ImaginaryPartError.args"]], "args (vayesta.core.util.notcalculatederror attribute)": [[2, "vayesta.core.util.NotCalculatedError.args"]], "args (vayesta.core.util.orthonormalityerror attribute)": [[2, "vayesta.core.util.OrthonormalityError.args"]], "as_scanner() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.as_scanner"]], "as_scanner() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.as_scanner"]], "asdict() (vayesta.core.util.optionsbase method)": [[2, "vayesta.core.util.OptionsBase.asdict"]], "brange() (in module vayesta.core.util)": [[2, "vayesta.core.util.brange"]], "break_into_lines() (in module vayesta.core.util)": [[2, "vayesta.core.util.break_into_lines"]], "build() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.build"]], "build() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.build"]], "bvk2k_2d() (in module vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.bvk2k_2d"]], "cache() (in module vayesta.core.util)": [[2, "vayesta.core.util.cache"]], "call_once() (in module vayesta.core.util)": [[2, "vayesta.core.util.call_once"]], "callif() (in module vayesta.core.util)": [[2, "vayesta.core.util.callif"]], "canonicalize() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.canonicalize"]], "canonicalize() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.canonicalize"]], "change_dict_defaults() (vayesta.core.util.optionsbase class method)": [[2, "vayesta.core.util.OptionsBase.change_dict_defaults"]], "check_convergence (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.check_convergence"]], "check_convergence (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.check_convergence"]], "check_sanity() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.check_sanity"]], "check_sanity() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.check_sanity"]], "close() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.close"]], "close() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.close"]], "conv_check (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.conv_check"]], "conv_check (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.conv_check"]], "conv_tol (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.conv_tol"]], "conv_tol (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.conv_tol"]], "conv_tol_grad (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.conv_tol_grad"]], "conv_tol_grad (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.conv_tol_grad"]], "convert_from_() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.convert_from_"]], "convert_from_() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.convert_from_"]], "converter() (vayesta.core.vlog.vformatter method)": [[2, "vayesta.core.vlog.VFormatter.converter"]], "createlock() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.createLock"]], "createlock() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.createLock"]], "damp (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.damp"]], "damp (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.damp"]], "damp_factor (vayesta.core.foldscf.foldedrhf property)": [[2, "vayesta.core.foldscf.FoldedRHF.damp_factor"]], "damp_factor (vayesta.core.foldscf.foldeduhf property)": [[2, "vayesta.core.foldscf.FoldedUHF.damp_factor"]], "decompress_axes() (in module vayesta.core.util)": [[2, "vayesta.core.util.decompress_axes"]], "default_msec_format (vayesta.core.vlog.vformatter attribute)": [[2, "vayesta.core.vlog.VFormatter.default_msec_format"]], "default_time_format (vayesta.core.vlog.vformatter attribute)": [[2, "vayesta.core.vlog.VFormatter.default_time_format"]], "density_fit() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.density_fit"]], "density_fit() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.density_fit"]], "deprecated() (in module vayesta.core.util)": [[2, "vayesta.core.util.deprecated"]], "det_ovlp() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.det_ovlp"]], "dict_with_defaults() (vayesta.core.util.optionsbase static method)": [[2, "vayesta.core.util.OptionsBase.dict_with_defaults"]], "diis_file (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.diis_file"]], "diis_file (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.diis_file"]], "diis_space (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.diis_space"]], "diis_space (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.diis_space"]], "diis_space_rollback (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.diis_space_rollback"]], "diis_space_rollback (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.diis_space_rollback"]], "diis_start_cycle (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.diis_start_cycle"]], "diis_start_cycle (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.diis_start_cycle"]], "dip_moment() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.dip_moment"]], "dip_moment() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.dip_moment"]], "direct_scf (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.direct_scf"]], "direct_scf (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.direct_scf"]], "direct_scf_tol (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.direct_scf_tol"]], "direct_scf_tol (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.direct_scf_tol"]], "dot() (in module vayesta.core.util)": [[2, "vayesta.core.util.dot"]], "dump_chk() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.dump_chk"]], "dump_chk() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.dump_chk"]], "dump_flags() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.dump_flags"]], "dump_flags() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.dump_flags"]], "dump_scf_summary() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.dump_scf_summary"]], "dump_scf_summary() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.dump_scf_summary"]], "e_tot (vayesta.core.foldscf.foldedrhf property)": [[2, "vayesta.core.foldscf.FoldedRHF.e_tot"]], "e_tot (vayesta.core.foldscf.foldedscf property)": [[2, "vayesta.core.foldscf.FoldedSCF.e_tot"]], "e_tot (vayesta.core.foldscf.foldeduhf property)": [[2, "vayesta.core.foldscf.FoldedUHF.e_tot"]], "eig() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.eig"]], "eig() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.eig"]], "einsum() (in module vayesta.core.util)": [[2, "vayesta.core.util.einsum"]], "emit() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.emit"]], "emit() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.emit"]], "energy_elec() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.energy_elec"]], "energy_elec() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.energy_elec"]], "energy_nuc() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.energy_nuc"]], "energy_nuc() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.energy_nuc"]], "energy_string() (in module vayesta.core.util)": [[2, "vayesta.core.util.energy_string"]], "energy_tot() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.energy_tot"]], "energy_tot() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.energy_tot"]], "filter() (vayesta.core.vlog.levelexcludefilter method)": [[2, "vayesta.core.vlog.LevelExcludeFilter.filter"]], "filter() (vayesta.core.vlog.levelincludefilter method)": [[2, "vayesta.core.vlog.LevelIncludeFilter.filter"]], "filter() (vayesta.core.vlog.levelrangefilter method)": [[2, "vayesta.core.vlog.LevelRangeFilter.filter"]], "filter() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.filter"]], "filter() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.filter"]], "fix_orbital_sign() (in module vayesta.core.util)": [[2, "vayesta.core.util.fix_orbital_sign"]], "flush() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.flush"]], "flush() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.flush"]], "fold_mos() (in module vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.fold_mos"]], "fold_scf() (in module vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.fold_scf"]], "format() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.format"]], "format() (vayesta.core.vlog.vformatter method)": [[2, "vayesta.core.vlog.VFormatter.format"]], "format() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.format"]], "formatexception() (vayesta.core.vlog.vformatter method)": [[2, "vayesta.core.vlog.VFormatter.formatException"]], "formatmessage() (vayesta.core.vlog.vformatter method)": [[2, "vayesta.core.vlog.VFormatter.formatMessage"]], "formatstack() (vayesta.core.vlog.vformatter method)": [[2, "vayesta.core.vlog.VFormatter.formatStack"]], "formattime() (vayesta.core.vlog.vformatter method)": [[2, "vayesta.core.vlog.VFormatter.formatTime"]], "from_chk() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.from_chk"]], "from_chk() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.from_chk"]], "gen_response() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.gen_response"]], "gen_response() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.gen_response"]], "get() (vayesta.core.util.optionsbase method)": [[2, "vayesta.core.util.OptionsBase.get"]], "get_bands() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_bands"]], "get_bands() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_bands"]], "get_default() (vayesta.core.util.optionsbase class method)": [[2, "vayesta.core.util.OptionsBase.get_default"]], "get_default_factory() (vayesta.core.util.optionsbase class method)": [[2, "vayesta.core.util.OptionsBase.get_default_factory"]], "get_dtype() (in module vayesta.core.helper)": [[2, "vayesta.core.helper.get_dtype"]], "get_dtype_int() (in module vayesta.core.helper)": [[2, "vayesta.core.helper.get_dtype_int"]], "get_fock() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_fock"]], "get_fock() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_fock"]], "get_grad() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_grad"]], "get_grad() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_grad"]], "get_hcore() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_hcore"]], "get_hcore() (vayesta.core.foldscf.foldedscf method)": [[2, "vayesta.core.foldscf.FoldedSCF.get_hcore"]], "get_hcore() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_hcore"]], "get_init_guess() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_init_guess"]], "get_init_guess() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_init_guess"]], "get_j() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_j"]], "get_j() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_j"]], "get_jk() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_jk"]], "get_jk() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_jk"]], "get_jk_incore() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_jk_incore"]], "get_jk_incore() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_jk_incore"]], "get_k() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_k"]], "get_k() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_k"]], "get_logname() (in module vayesta.core.vlog)": [[2, "vayesta.core.vlog.get_logname"]], "get_name() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.get_name"]], "get_name() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.get_name"]], "get_occ() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_occ"]], "get_occ() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_occ"]], "get_ovlp() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_ovlp"]], "get_ovlp() (vayesta.core.foldscf.foldedscf method)": [[2, "vayesta.core.foldscf.FoldedSCF.get_ovlp"]], "get_ovlp() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_ovlp"]], "get_phase() (in module vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.get_phase"]], "get_rho() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_rho"]], "get_rho() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_rho"]], "get_used_memory() (in module vayesta.core.util)": [[2, "vayesta.core.util.get_used_memory"]], "get_veff() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.get_veff"]], "get_veff() (vayesta.core.foldscf.foldedscf method)": [[2, "vayesta.core.foldscf.FoldedSCF.get_veff"]], "get_veff() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.get_veff"]], "getattr_recursive() (in module vayesta.core.util)": [[2, "vayesta.core.util.getattr_recursive"]], "getif() (in module vayesta.core.util)": [[2, "vayesta.core.util.getif"]], "handle() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.handle"]], "handle() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.handle"]], "handleerror() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.handleError"]], "handleerror() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.handleError"]], "hf_energy (vayesta.core.foldscf.foldedrhf property)": [[2, "vayesta.core.foldscf.FoldedRHF.hf_energy"]], "hf_energy (vayesta.core.foldscf.foldeduhf property)": [[2, "vayesta.core.foldscf.FoldedUHF.hf_energy"]], "hstack() (in module vayesta.core.util)": [[2, "vayesta.core.util.hstack"]], "hstack_matrices() (in module vayesta.core.spinalg)": [[2, "vayesta.core.spinalg.hstack_matrices"]], "init_direct_scf() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.init_direct_scf"]], "init_direct_scf() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.init_direct_scf"]], "init_guess (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.init_guess"]], "init_guess (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.init_guess"]], "init_guess_by_1e() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.init_guess_by_1e"]], "init_guess_by_1e() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.init_guess_by_1e"]], "init_guess_by_atom() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.init_guess_by_atom"]], "init_guess_by_atom() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.init_guess_by_atom"]], "init_guess_by_chkfile() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.init_guess_by_chkfile"]], "init_guess_by_chkfile() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.init_guess_by_chkfile"]], "init_guess_by_huckel() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.init_guess_by_huckel"]], "init_guess_by_huckel() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.init_guess_by_huckel"]], "init_guess_by_minao() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.init_guess_by_minao"]], "init_guess_by_minao() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.init_guess_by_minao"]], "init_logging() (in module vayesta.core.vlog)": [[2, "vayesta.core.vlog.init_logging"]], "items() (vayesta.core.util.optionsbase method)": [[2, "vayesta.core.util.OptionsBase.items"]], "jk_method() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.jk_method"]], "jk_method() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.jk_method"]], "k2bvk_2d() (in module vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.k2bvk_2d"]], "kcell (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.kcell"]], "kcell (vayesta.core.foldscf.foldedrhf property)": [[2, "id6"]], "kcell (vayesta.core.foldscf.foldedscf attribute)": [[2, "vayesta.core.foldscf.FoldedSCF.kcell"]], "kcell (vayesta.core.foldscf.foldedscf property)": [[2, "id1"]], "kcell (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.kcell"]], "kcell (vayesta.core.foldscf.foldeduhf property)": [[2, "id12"]], "kernel() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.kernel"]], "kernel() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.kernel"]], "keys() (vayesta.core.util.optionsbase method)": [[2, "vayesta.core.util.OptionsBase.keys"]], "kmf (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.kmf"]], "kmf (vayesta.core.foldscf.foldedscf attribute)": [[2, "vayesta.core.foldscf.FoldedSCF.kmf"]], "kmf (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.kmf"]], "kphase (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.kphase"]], "kphase (vayesta.core.foldscf.foldedscf attribute)": [[2, "vayesta.core.foldscf.FoldedSCF.kphase"]], "kphase (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.kphase"]], "kpt (vayesta.core.foldscf.foldedrhf property)": [[2, "vayesta.core.foldscf.FoldedRHF.kpt"]], "kpt (vayesta.core.foldscf.foldeduhf property)": [[2, "vayesta.core.foldscf.FoldedUHF.kpt"]], "kpts_to_kmesh() (in module vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.kpts_to_kmesh"]], "level_shift (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.level_shift"]], "level_shift (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.level_shift"]], "level_shift_factor (vayesta.core.foldscf.foldedrhf property)": [[2, "vayesta.core.foldscf.FoldedRHF.level_shift_factor"]], "level_shift_factor (vayesta.core.foldscf.foldeduhf property)": [[2, "vayesta.core.foldscf.FoldedUHF.level_shift_factor"]], "log_error_norms() (in module vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.log_error_norms"]], "log_method() (in module vayesta.core.util)": [[2, "vayesta.core.util.log_method"]], "log_time() (in module vayesta.core.util)": [[2, "vayesta.core.util.log_time"]], "make_asym_dm() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.make_asym_dm"]], "make_mo_coeff_real() (in module vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.make_mo_coeff_real"]], "make_mo_coeff_real_2() (in module vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.make_mo_coeff_real_2"]], "make_rdm1() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.make_rdm1"]], "make_rdm1() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.make_rdm1"]], "make_rdm2() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.make_rdm2"]], "make_rdm2() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.make_rdm2"]], "max_cycle (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.max_cycle"]], "max_cycle (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.max_cycle"]], "memory_string() (in module vayesta.core.util)": [[2, "vayesta.core.util.memory_string"]], "mix_density_fit() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.mix_density_fit"]], "mix_density_fit() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.mix_density_fit"]], "mulliken_meta() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.mulliken_meta"]], "mulliken_meta() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.mulliken_meta"]], "mulliken_meta_spin() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.mulliken_meta_spin"]], "mulliken_pop() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.mulliken_pop"]], "mulliken_pop() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.mulliken_pop"]], "mulliken_pop_meta_lowdin_ao() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.mulliken_pop_meta_lowdin_ao"]], "mulliken_pop_meta_lowdin_ao() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.mulliken_pop_meta_lowdin_ao"]], "mulliken_spin_pop() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.mulliken_spin_pop"]], "name (vayesta.core.vlog.vfilehandler property)": [[2, "vayesta.core.vlog.VFileHandler.name"]], "name (vayesta.core.vlog.vstreamhandler property)": [[2, "vayesta.core.vlog.VStreamHandler.name"]], "ncells (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.ncells"]], "ncells (vayesta.core.foldscf.foldedrhf property)": [[2, "id7"]], "ncells (vayesta.core.foldscf.foldedscf attribute)": [[2, "vayesta.core.foldscf.FoldedSCF.ncells"]], "ncells (vayesta.core.foldscf.foldedscf property)": [[2, "id0"]], "ncells (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.ncells"]], "ncells (vayesta.core.foldscf.foldeduhf property)": [[2, "id13"]], "nelec (vayesta.core.foldscf.foldeduhf property)": [[2, "vayesta.core.foldscf.FoldedUHF.nelec"]], "nelectron_alpha (vayesta.core.foldscf.foldeduhf property)": [[2, "vayesta.core.foldscf.FoldedUHF.nelectron_alpha"]], "newton() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.newton"]], "newton() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.newton"]], "nuc_grad_method() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.nuc_grad_method"]], "nuc_grad_method() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.nuc_grad_method"]], "orbital_sign_convention() (in module vayesta.core.helper)": [[2, "vayesta.core.helper.orbital_sign_convention"]], "pack_arrays() (in module vayesta.core.helper)": [[2, "vayesta.core.helper.pack_arrays"]], "pack_metadata() (in module vayesta.core.helper)": [[2, "vayesta.core.helper.pack_metadata"]], "parse_cmd_args() (in module vayesta.core.cmdargs)": [[2, "vayesta.core.cmdargs.parse_cmd_args"]], "permutations_with_signs() (in module vayesta.core.util)": [[2, "vayesta.core.util.permutations_with_signs"]], "pop() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.pop"]], "pop() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.pop"]], "post_kernel() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.post_kernel"]], "post_kernel() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.post_kernel"]], "pre_kernel() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.pre_kernel"]], "pre_kernel() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.pre_kernel"]], "recursive_block_svd() (in module vayesta.core.linalg)": [[2, "vayesta.core.linalg.recursive_block_svd"]], "release() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.release"]], "release() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.release"]], "removefilter() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.removeFilter"]], "removefilter() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.removeFilter"]], "remove_soscf() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.remove_soscf"]], "remove_soscf() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.remove_soscf"]], "replace() (vayesta.core.util.optionsbase method)": [[2, "vayesta.core.util.OptionsBase.replace"]], "replace_attr() (in module vayesta.core.util)": [[2, "vayesta.core.util.replace_attr"]], "reset() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.reset"]], "reset() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.reset"]], "rs_density_fit() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.rs_density_fit"]], "rs_density_fit() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.rs_density_fit"]], "run() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.run"]], "run() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.run"]], "scf() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.scf"]], "scf() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.scf"]], "set() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.set"]], "set() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.set"]], "setformatter() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.setFormatter"]], "setformatter() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.setFormatter"]], "setlevel() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.setLevel"]], "setlevel() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.setLevel"]], "setstream() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.setStream"]], "setstream() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.setStream"]], "set_name() (vayesta.core.vlog.vfilehandler method)": [[2, "vayesta.core.vlog.VFileHandler.set_name"]], "set_name() (vayesta.core.vlog.vstreamhandler method)": [[2, "vayesta.core.vlog.VStreamHandler.set_name"]], "setattr_recursive() (in module vayesta.core.util)": [[2, "vayesta.core.util.setattr_recursive"]], "sfx2c1e() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.sfx2c1e"]], "sfx2c1e() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.sfx2c1e"]], "spin_square() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.spin_square"]], "spin_square() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.spin_square"]], "split_into_blocks() (in module vayesta.core.util)": [[2, "vayesta.core.util.split_into_blocks"]], "stability() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.stability"]], "stability() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.stability"]], "stdout (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.stdout"]], "stdout (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.stdout"]], "terminator (vayesta.core.vlog.vfilehandler attribute)": [[2, "vayesta.core.vlog.VFileHandler.terminator"]], "terminator (vayesta.core.vlog.vstreamhandler attribute)": [[2, "vayesta.core.vlog.VStreamHandler.terminator"]], "time_string() (in module vayesta.core.util)": [[2, "vayesta.core.util.time_string"]], "timer() (in module vayesta.core.util)": [[2, "vayesta.core.util.timer"]], "to_ghf() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.to_ghf"]], "to_ghf() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.to_ghf"]], "to_gks() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.to_gks"]], "to_gks() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.to_gks"]], "to_ks() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.to_ks"]], "to_ks() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.to_ks"]], "to_rhf() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.to_rhf"]], "to_rhf() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.to_rhf"]], "to_rks() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.to_rks"]], "to_rks() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.to_rks"]], "to_uhf() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.to_uhf"]], "to_uhf() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.to_uhf"]], "to_uks() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.to_uks"]], "to_uks() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.to_uks"]], "translation_vectors_for_kmesh() (in module vayesta.core.foldscf)": [[2, "vayesta.core.foldscf.translation_vectors_for_kmesh"]], "tril_indices_ndim() (in module vayesta.core.util)": [[2, "vayesta.core.util.tril_indices_ndim"]], "unpack_arrays() (in module vayesta.core.helper)": [[2, "vayesta.core.helper.unpack_arrays"]], "unpack_metadata() (in module vayesta.core.helper)": [[2, "vayesta.core.helper.unpack_metadata"]], "update() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.update"]], "update() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.update"]], "update() (vayesta.core.util.optionsbase method)": [[2, "vayesta.core.util.OptionsBase.update"]], "update_() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.update_"]], "update_() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.update_"]], "update_from_chk() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.update_from_chk"]], "update_from_chk() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.update_from_chk"]], "update_from_chk_() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.update_from_chk_"]], "update_from_chk_() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.update_from_chk_"]], "usestime() (vayesta.core.vlog.vformatter method)": [[2, "vayesta.core.vlog.VFormatter.usesTime"]], "values() (vayesta.core.util.optionsbase method)": [[2, "vayesta.core.util.OptionsBase.values"]], "vayesta.core": [[2, "module-vayesta.core"]], "vayesta.core.cmdargs": [[2, "module-vayesta.core.cmdargs"]], "vayesta.core.foldscf": [[2, "module-vayesta.core.foldscf"]], "vayesta.core.helper": [[2, "module-vayesta.core.helper"]], "vayesta.core.linalg": [[2, "module-vayesta.core.linalg"]], "vayesta.core.spinalg": [[2, "module-vayesta.core.spinalg"]], "vayesta.core.util": [[2, "module-vayesta.core.util"]], "vayesta.core.vlog": [[2, "module-vayesta.core.vlog"]], "verbose (vayesta.core.foldscf.foldedrhf attribute)": [[2, "vayesta.core.foldscf.FoldedRHF.verbose"]], "verbose (vayesta.core.foldscf.foldeduhf attribute)": [[2, "vayesta.core.foldscf.FoldedUHF.verbose"]], "view() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.view"]], "view() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.view"]], "with_doc() (in module vayesta.core.util)": [[2, "vayesta.core.util.with_doc"]], "with_traceback() (vayesta.core.util.abstractmethoderror method)": [[2, "vayesta.core.util.AbstractMethodError.with_traceback"]], "with_traceback() (vayesta.core.util.convergenceerror method)": [[2, "vayesta.core.util.ConvergenceError.with_traceback"]], "with_traceback() (vayesta.core.util.imaginaryparterror method)": [[2, "vayesta.core.util.ImaginaryPartError.with_traceback"]], "with_traceback() (vayesta.core.util.notcalculatederror method)": [[2, "vayesta.core.util.NotCalculatedError.with_traceback"]], "with_traceback() (vayesta.core.util.orthonormalityerror method)": [[2, "vayesta.core.util.OrthonormalityError.with_traceback"]], "x2c() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.x2c"]], "x2c() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.x2c"]], "x2c1e() (vayesta.core.foldscf.foldedrhf method)": [[2, "vayesta.core.foldscf.FoldedRHF.x2c1e"]], "x2c1e() (vayesta.core.foldscf.foldeduhf method)": [[2, "vayesta.core.foldscf.FoldedUHF.x2c1e"]], "contract_dm2_eris() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.contract_dm2_eris"]], "contract_dm2_eris_rhf() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.contract_dm2_eris_rhf"]], "contract_dm2_eris_uhf() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.contract_dm2_eris_uhf"]], "contract_dm2intermeds_eris_rhf() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.contract_dm2intermeds_eris_rhf"]], "contract_dm2intermeds_eris_uhf() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.contract_dm2intermeds_eris_uhf"]], "get_block() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.get_block"]], "get_full_array() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.get_full_array"]], "get_full_array_rhf() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.get_full_array_rhf"]], "get_full_array_uhf() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.get_full_array_uhf"]], "get_kconserv() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.get_kconserv"]], "get_ovvv() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.get_ovVV"], [3, "vayesta.core.ao2mo.helper.get_ovvv"]], "get_vvvv() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.get_vvVV"], [3, "vayesta.core.ao2mo.helper.get_vvvv"]], "kao2gmo_cderi() (in module vayesta.core.ao2mo.kao2gmo)": [[3, "vayesta.core.ao2mo.kao2gmo.kao2gmo_cderi"]], "make_ccsd_eris() (in module vayesta.core.ao2mo.pyscf_eris)": [[3, "vayesta.core.ao2mo.pyscf_eris.make_ccsd_eris"]], "make_uccsd_eris() (in module vayesta.core.ao2mo.pyscf_eris)": [[3, "vayesta.core.ao2mo.pyscf_eris.make_uccsd_eris"]], "pack_ovvv() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.pack_ovvv"]], "pack_vvvv() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.pack_vvvv"]], "postscf_ao2mo() (in module vayesta.core.ao2mo.postscf_ao2mo)": [[3, "vayesta.core.ao2mo.postscf_ao2mo.postscf_ao2mo"]], "postscf_kao2gmo() (in module vayesta.core.ao2mo.postscf_ao2mo)": [[3, "vayesta.core.ao2mo.postscf_ao2mo.postscf_kao2gmo"]], "postscf_kao2gmo_uhf() (in module vayesta.core.ao2mo.postscf_ao2mo)": [[3, "vayesta.core.ao2mo.postscf_ao2mo.postscf_kao2gmo_uhf"]], "project_ccsd_eris() (in module vayesta.core.ao2mo.helper)": [[3, "vayesta.core.ao2mo.helper.project_ccsd_eris"]], "vayesta.core.ao2mo": [[3, "module-vayesta.core.ao2mo"]], "vayesta.core.ao2mo.helper": [[3, "module-vayesta.core.ao2mo.helper"]], "vayesta.core.ao2mo.kao2gmo": [[3, "module-vayesta.core.ao2mo.kao2gmo"]], "vayesta.core.ao2mo.postscf_ao2mo": [[3, "module-vayesta.core.ao2mo.postscf_ao2mo"]], "vayesta.core.ao2mo.pyscf_eris": [[3, "module-vayesta.core.ao2mo.pyscf_eris"]], "bno_bath (class in vayesta.core.bath.bno)": [[4, "vayesta.core.bath.bno.BNO_Bath"]], "bno_bath_uhf (class in vayesta.core.bath.bno)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF"]], "bno_threshold (class in vayesta.core.bath.bno)": [[4, "vayesta.core.bath.bno.BNO_Threshold"]], "bath (class in vayesta.core.bath.bath)": [[4, "vayesta.core.bath.bath.Bath"]], "dmet_bath() (in module vayesta.core.bath)": [[4, "vayesta.core.bath.DMET_Bath"]], "dmet_bath_rhf (class in vayesta.core.bath.dmet)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF"]], "dmet_bath_uhf (class in vayesta.core.bath.dmet)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF"]], "ewdmet_bath() (in module vayesta.core.bath)": [[4, "vayesta.core.bath.EwDMET_Bath"]], "ewdmet_bath_rhf (class in vayesta.core.bath.ewdmet)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF"]], "full_bath() (in module vayesta.core.bath)": [[4, "vayesta.core.bath.Full_Bath"]], "full_bath_rhf (class in vayesta.core.bath.full)": [[4, "vayesta.core.bath.full.Full_Bath_RHF"]], "full_bath_uhf (class in vayesta.core.bath.full)": [[4, "vayesta.core.bath.full.Full_Bath_UHF"]], "mp2_bno_bath (class in vayesta.core.bath.bno)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath"]], "mp2_bath() (in module vayesta.core.bath)": [[4, "vayesta.core.bath.MP2_Bath"]], "r2_bath() (in module vayesta.core.bath)": [[4, "vayesta.core.bath.R2_Bath"]], "r2_bath_rhf (class in vayesta.core.bath.r2bath)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF"]], "ump2_bno_bath (class in vayesta.core.bath.bno)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath"]], "base (vayesta.core.bath.bath.bath property)": [[4, "vayesta.core.bath.bath.Bath.base"]], "base (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.base"]], "base (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.base"]], "base (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.base"]], "base (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.base"]], "base (vayesta.core.bath.dmet.dmet_bath_rhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.base"]], "base (vayesta.core.bath.dmet.dmet_bath_uhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.base"]], "base (vayesta.core.bath.ewdmet.ewdmet_bath_rhf property)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.base"]], "base (vayesta.core.bath.full.full_bath_rhf property)": [[4, "vayesta.core.bath.full.Full_Bath_RHF.base"]], "base (vayesta.core.bath.full.full_bath_uhf property)": [[4, "vayesta.core.bath.full.Full_Bath_UHF.base"]], "base (vayesta.core.bath.r2bath.r2_bath_rhf property)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.base"]], "c_cluster_occ (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.c_cluster_occ"]], "c_cluster_occ (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.c_cluster_occ"]], "c_cluster_occ (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.c_cluster_occ"]], "c_cluster_occ (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.c_cluster_occ"]], "c_cluster_vir (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.c_cluster_vir"]], "c_cluster_vir (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.c_cluster_vir"]], "c_cluster_vir (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.c_cluster_vir"]], "c_cluster_vir (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.c_cluster_vir"]], "c_env (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.c_env"]], "c_env (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.c_env"]], "c_env (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.c_env"]], "c_env (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.c_env"]], "c_env (vayesta.core.bath.ewdmet.ewdmet_bath_rhf property)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.c_env"]], "c_env (vayesta.core.bath.full.full_bath_rhf property)": [[4, "vayesta.core.bath.full.Full_Bath_RHF.c_env"]], "c_env (vayesta.core.bath.full.full_bath_uhf property)": [[4, "vayesta.core.bath.full.Full_Bath_UHF.c_env"]], "c_env (vayesta.core.bath.r2bath.r2_bath_rhf property)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.c_env"]], "c_frag (vayesta.core.bath.bath.bath property)": [[4, "vayesta.core.bath.bath.Bath.c_frag"]], "c_frag (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.c_frag"]], "c_frag (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.c_frag"]], "c_frag (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.c_frag"]], "c_frag (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.c_frag"]], "c_frag (vayesta.core.bath.dmet.dmet_bath_rhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.c_frag"]], "c_frag (vayesta.core.bath.dmet.dmet_bath_uhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.c_frag"]], "c_frag (vayesta.core.bath.ewdmet.ewdmet_bath_rhf property)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.c_frag"]], "c_frag (vayesta.core.bath.full.full_bath_rhf property)": [[4, "vayesta.core.bath.full.Full_Bath_RHF.c_frag"]], "c_frag (vayesta.core.bath.full.full_bath_uhf property)": [[4, "vayesta.core.bath.full.Full_Bath_UHF.c_frag"]], "c_frag (vayesta.core.bath.r2bath.r2_bath_rhf property)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.c_frag"]], "get_active_space() (vayesta.core.bath.bno.bno_bath method)": [[4, "vayesta.core.bath.bno.BNO_Bath.get_active_space"]], "get_active_space() (vayesta.core.bath.bno.bno_bath_uhf method)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.get_active_space"]], "get_active_space() (vayesta.core.bath.bno.mp2_bno_bath method)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.get_active_space"]], "get_active_space() (vayesta.core.bath.bno.ump2_bno_bath method)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.get_active_space"]], "get_bath() (vayesta.core.bath.bno.bno_bath method)": [[4, "vayesta.core.bath.bno.BNO_Bath.get_bath"]], "get_bath() (vayesta.core.bath.bno.bno_bath_uhf method)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.get_bath"]], "get_bath() (vayesta.core.bath.bno.mp2_bno_bath method)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.get_bath"]], "get_bath() (vayesta.core.bath.bno.ump2_bno_bath method)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.get_bath"]], "get_bath() (vayesta.core.bath.ewdmet.ewdmet_bath_rhf method)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.get_bath"]], "get_bath() (vayesta.core.bath.full.full_bath_rhf method)": [[4, "vayesta.core.bath.full.Full_Bath_RHF.get_bath"]], "get_bath() (vayesta.core.bath.full.full_bath_uhf method)": [[4, "vayesta.core.bath.full.Full_Bath_UHF.get_bath"]], "get_bath() (vayesta.core.bath.r2bath.r2_bath_rhf method)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.get_bath"]], "get_cluster_electrons() (vayesta.core.bath.dmet.dmet_bath_rhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.get_cluster_electrons"]], "get_cluster_electrons() (vayesta.core.bath.dmet.dmet_bath_uhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.get_cluster_electrons"]], "get_environment() (vayesta.core.bath.dmet.dmet_bath_rhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.get_environment"]], "get_environment() (vayesta.core.bath.dmet.dmet_bath_uhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.get_environment"]], "get_eris_or_cderi() (vayesta.core.bath.bno.mp2_bno_bath method)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.get_eris_or_cderi"]], "get_eris_or_cderi() (vayesta.core.bath.bno.ump2_bno_bath method)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.get_eris_or_cderi"]], "get_finite_bath_correction() (vayesta.core.bath.bno.bno_bath method)": [[4, "vayesta.core.bath.bno.BNO_Bath.get_finite_bath_correction"]], "get_finite_bath_correction() (vayesta.core.bath.bno.bno_bath_uhf method)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.get_finite_bath_correction"]], "get_finite_bath_correction() (vayesta.core.bath.bno.mp2_bno_bath method)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.get_finite_bath_correction"]], "get_finite_bath_correction() (vayesta.core.bath.bno.ump2_bno_bath method)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.get_finite_bath_correction"]], "get_fock() (vayesta.core.bath.ewdmet.ewdmet_bath_rhf method)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.get_fock"]], "get_number() (vayesta.core.bath.bno.bno_threshold method)": [[4, "vayesta.core.bath.bno.BNO_Threshold.get_number"]], "get_occupied_bath() (vayesta.core.bath.dmet.dmet_bath_rhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.get_occupied_bath"]], "get_occupied_bath() (vayesta.core.bath.dmet.dmet_bath_uhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.get_occupied_bath"]], "get_r2() (vayesta.core.bath.r2bath.r2_bath_rhf method)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.get_r2"]], "get_virtual_bath() (vayesta.core.bath.dmet.dmet_bath_rhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.get_virtual_bath"]], "get_virtual_bath() (vayesta.core.bath.dmet.dmet_bath_uhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.get_virtual_bath"]], "kernel() (vayesta.core.bath.bno.bno_bath method)": [[4, "vayesta.core.bath.bno.BNO_Bath.kernel"]], "kernel() (vayesta.core.bath.bno.bno_bath_uhf method)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.kernel"]], "kernel() (vayesta.core.bath.bno.mp2_bno_bath method)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.kernel"]], "kernel() (vayesta.core.bath.bno.ump2_bno_bath method)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.kernel"]], "kernel() (vayesta.core.bath.dmet.dmet_bath_rhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.kernel"]], "kernel() (vayesta.core.bath.dmet.dmet_bath_uhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.kernel"]], "kernel() (vayesta.core.bath.ewdmet.ewdmet_bath_rhf method)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.kernel"]], "kernel() (vayesta.core.bath.r2bath.r2_bath_rhf method)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.kernel"]], "log (vayesta.core.bath.bath.bath property)": [[4, "vayesta.core.bath.bath.Bath.log"]], "log (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.log"]], "log (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.log"]], "log (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.log"]], "log (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.log"]], "log (vayesta.core.bath.dmet.dmet_bath_rhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.log"]], "log (vayesta.core.bath.dmet.dmet_bath_uhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.log"]], "log (vayesta.core.bath.ewdmet.ewdmet_bath_rhf property)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.log"]], "log (vayesta.core.bath.full.full_bath_rhf property)": [[4, "vayesta.core.bath.full.Full_Bath_RHF.log"]], "log (vayesta.core.bath.full.full_bath_uhf property)": [[4, "vayesta.core.bath.full.Full_Bath_UHF.log"]], "log (vayesta.core.bath.r2bath.r2_bath_rhf property)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.log"]], "log_histogram() (vayesta.core.bath.bno.bno_bath method)": [[4, "vayesta.core.bath.bno.BNO_Bath.log_histogram"]], "log_histogram() (vayesta.core.bath.bno.bno_bath_uhf method)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.log_histogram"]], "log_histogram() (vayesta.core.bath.bno.mp2_bno_bath method)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.log_histogram"]], "log_histogram() (vayesta.core.bath.bno.ump2_bno_bath method)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.log_histogram"]], "log_histogram() (vayesta.core.bath.r2bath.r2_bath_rhf method)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.log_histogram"]], "log_info() (vayesta.core.bath.dmet.dmet_bath_rhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.log_info"]], "log_info() (vayesta.core.bath.dmet.dmet_bath_uhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.log_info"]], "make_bno_coeff() (vayesta.core.bath.bno.bno_bath method)": [[4, "vayesta.core.bath.bno.BNO_Bath.make_bno_coeff"]], "make_bno_coeff() (vayesta.core.bath.bno.bno_bath_uhf method)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.make_bno_coeff"]], "make_bno_coeff() (vayesta.core.bath.bno.mp2_bno_bath method)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.make_bno_coeff"]], "make_bno_coeff() (vayesta.core.bath.bno.ump2_bno_bath method)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.make_bno_coeff"]], "make_delta_dm1() (vayesta.core.bath.bno.mp2_bno_bath method)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.make_delta_dm1"]], "make_delta_dm1() (vayesta.core.bath.bno.ump2_bno_bath method)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.make_delta_dm1"]], "make_dmet_bath() (vayesta.core.bath.dmet.dmet_bath_rhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.make_dmet_bath"]], "make_dmet_bath() (vayesta.core.bath.dmet.dmet_bath_uhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.make_dmet_bath"]], "make_dmet_bath_fast() (vayesta.core.bath.dmet.dmet_bath_rhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.make_dmet_bath_fast"]], "make_dmet_bath_fast() (vayesta.core.bath.dmet.dmet_bath_uhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.make_dmet_bath_fast"]], "make_histogram() (in module vayesta.core.bath.helper)": [[4, "vayesta.core.bath.helper.make_histogram"]], "make_horizontal_histogram() (in module vayesta.core.bath.helper)": [[4, "vayesta.core.bath.helper.make_horizontal_histogram"]], "mf (vayesta.core.bath.bath.bath property)": [[4, "vayesta.core.bath.bath.Bath.mf"]], "mf (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.mf"]], "mf (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.mf"]], "mf (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.mf"]], "mf (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.mf"]], "mf (vayesta.core.bath.dmet.dmet_bath_rhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.mf"]], "mf (vayesta.core.bath.dmet.dmet_bath_uhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.mf"]], "mf (vayesta.core.bath.ewdmet.ewdmet_bath_rhf property)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.mf"]], "mf (vayesta.core.bath.full.full_bath_rhf property)": [[4, "vayesta.core.bath.full.Full_Bath_RHF.mf"]], "mf (vayesta.core.bath.full.full_bath_uhf property)": [[4, "vayesta.core.bath.full.Full_Bath_UHF.mf"]], "mf (vayesta.core.bath.r2bath.r2_bath_rhf property)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.mf"]], "mol (vayesta.core.bath.bath.bath property)": [[4, "vayesta.core.bath.bath.Bath.mol"]], "mol (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.mol"]], "mol (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.mol"]], "mol (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.mol"]], "mol (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.mol"]], "mol (vayesta.core.bath.dmet.dmet_bath_rhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.mol"]], "mol (vayesta.core.bath.dmet.dmet_bath_uhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.mol"]], "mol (vayesta.core.bath.ewdmet.ewdmet_bath_rhf property)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.mol"]], "mol (vayesta.core.bath.full.full_bath_rhf property)": [[4, "vayesta.core.bath.full.Full_Bath_RHF.mol"]], "mol (vayesta.core.bath.full.full_bath_uhf property)": [[4, "vayesta.core.bath.full.Full_Bath_UHF.mol"]], "mol (vayesta.core.bath.r2bath.r2_bath_rhf property)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.mol"]], "ncluster (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.ncluster"]], "ncluster (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.ncluster"]], "ncluster (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.ncluster"]], "ncluster (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.ncluster"]], "spin_restricted (vayesta.core.bath.bath.bath property)": [[4, "vayesta.core.bath.bath.Bath.spin_restricted"]], "spin_restricted (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.spin_restricted"]], "spin_restricted (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.spin_restricted"]], "spin_restricted (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.spin_restricted"]], "spin_restricted (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.spin_restricted"]], "spin_restricted (vayesta.core.bath.dmet.dmet_bath_rhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.spin_restricted"]], "spin_restricted (vayesta.core.bath.dmet.dmet_bath_uhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.spin_restricted"]], "spin_restricted (vayesta.core.bath.ewdmet.ewdmet_bath_rhf property)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.spin_restricted"]], "spin_restricted (vayesta.core.bath.full.full_bath_rhf property)": [[4, "vayesta.core.bath.full.Full_Bath_RHF.spin_restricted"]], "spin_restricted (vayesta.core.bath.full.full_bath_uhf property)": [[4, "vayesta.core.bath.full.Full_Bath_UHF.spin_restricted"]], "spin_restricted (vayesta.core.bath.r2bath.r2_bath_rhf property)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.spin_restricted"]], "spin_unrestricted (vayesta.core.bath.bath.bath property)": [[4, "vayesta.core.bath.bath.Bath.spin_unrestricted"]], "spin_unrestricted (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.spin_unrestricted"]], "spin_unrestricted (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.spin_unrestricted"]], "spin_unrestricted (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.spin_unrestricted"]], "spin_unrestricted (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.spin_unrestricted"]], "spin_unrestricted (vayesta.core.bath.dmet.dmet_bath_rhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.spin_unrestricted"]], "spin_unrestricted (vayesta.core.bath.dmet.dmet_bath_uhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.spin_unrestricted"]], "spin_unrestricted (vayesta.core.bath.ewdmet.ewdmet_bath_rhf property)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.spin_unrestricted"]], "spin_unrestricted (vayesta.core.bath.full.full_bath_rhf property)": [[4, "vayesta.core.bath.full.Full_Bath_RHF.spin_unrestricted"]], "spin_unrestricted (vayesta.core.bath.full.full_bath_uhf property)": [[4, "vayesta.core.bath.full.Full_Bath_UHF.spin_unrestricted"]], "spin_unrestricted (vayesta.core.bath.r2bath.r2_bath_rhf property)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.spin_unrestricted"]], "spinsym (vayesta.core.bath.bath.bath property)": [[4, "vayesta.core.bath.bath.Bath.spinsym"]], "spinsym (vayesta.core.bath.bno.bno_bath property)": [[4, "vayesta.core.bath.bno.BNO_Bath.spinsym"]], "spinsym (vayesta.core.bath.bno.bno_bath_uhf property)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.spinsym"]], "spinsym (vayesta.core.bath.bno.mp2_bno_bath property)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.spinsym"]], "spinsym (vayesta.core.bath.bno.ump2_bno_bath property)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.spinsym"]], "spinsym (vayesta.core.bath.dmet.dmet_bath_rhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.spinsym"]], "spinsym (vayesta.core.bath.dmet.dmet_bath_uhf property)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.spinsym"]], "spinsym (vayesta.core.bath.ewdmet.ewdmet_bath_rhf property)": [[4, "vayesta.core.bath.ewdmet.EwDMET_Bath_RHF.spinsym"]], "spinsym (vayesta.core.bath.full.full_bath_rhf property)": [[4, "vayesta.core.bath.full.Full_Bath_RHF.spinsym"]], "spinsym (vayesta.core.bath.full.full_bath_uhf property)": [[4, "vayesta.core.bath.full.Full_Bath_UHF.spinsym"]], "spinsym (vayesta.core.bath.r2bath.r2_bath_rhf property)": [[4, "vayesta.core.bath.r2bath.R2_Bath_RHF.spinsym"]], "transform_mp2_eris() (in module vayesta.core.bath.helper)": [[4, "vayesta.core.bath.helper.transform_mp2_eris"]], "truncate_bno() (vayesta.core.bath.bno.bno_bath method)": [[4, "vayesta.core.bath.bno.BNO_Bath.truncate_bno"]], "truncate_bno() (vayesta.core.bath.bno.bno_bath_uhf method)": [[4, "vayesta.core.bath.bno.BNO_Bath_UHF.truncate_bno"]], "truncate_bno() (vayesta.core.bath.bno.mp2_bno_bath method)": [[4, "vayesta.core.bath.bno.MP2_BNO_Bath.truncate_bno"]], "truncate_bno() (vayesta.core.bath.bno.ump2_bno_bath method)": [[4, "vayesta.core.bath.bno.UMP2_BNO_Bath.truncate_bno"]], "use_ref_orbitals() (vayesta.core.bath.dmet.dmet_bath_rhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_RHF.use_ref_orbitals"]], "use_ref_orbitals() (vayesta.core.bath.dmet.dmet_bath_uhf method)": [[4, "vayesta.core.bath.dmet.DMET_Bath_UHF.use_ref_orbitals"]], "vayesta.core.bath": [[4, "module-vayesta.core.bath"]], "vayesta.core.bath.bath": [[4, "module-vayesta.core.bath.bath"]], "vayesta.core.bath.bno": [[4, "module-vayesta.core.bath.bno"]], "vayesta.core.bath.dmet": [[4, "module-vayesta.core.bath.dmet"]], "vayesta.core.bath.ewdmet": [[4, "module-vayesta.core.bath.ewdmet"]], "vayesta.core.bath.full": [[4, "module-vayesta.core.bath.full"]], "vayesta.core.bath.helper": [[4, "module-vayesta.core.bath.helper"]], "vayesta.core.bath.r2bath": [[4, "module-vayesta.core.bath.r2bath"]], "cas_fragmentation (class in vayesta.core.fragmentation.cas)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation"]], "cas_fragmentation() (in module vayesta.core.fragmentation)": [[5, "vayesta.core.fragmentation.CAS_Fragmentation"]], "cas_fragmentation_uhf (class in vayesta.core.fragmentation.cas)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF"]], "fragmentation (class in vayesta.core.fragmentation.fragmentation)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation"]], "fragmentation_uhf (class in vayesta.core.fragmentation.ufragmentation)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF"]], "iaopao_fragmentation (class in vayesta.core.fragmentation.iaopao)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation"]], "iaopao_fragmentation() (in module vayesta.core.fragmentation)": [[5, "vayesta.core.fragmentation.IAOPAO_Fragmentation"]], "iaopao_fragmentation_uhf (class in vayesta.core.fragmentation.iaopao)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF"]], "iao_fragmentation (class in vayesta.core.fragmentation.iao)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation"]], "iao_fragmentation() (in module vayesta.core.fragmentation)": [[5, "vayesta.core.fragmentation.IAO_Fragmentation"]], "iao_fragmentation_uhf (class in vayesta.core.fragmentation.iao)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF"]], "sao_fragmentation (class in vayesta.core.fragmentation.sao)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation"]], "sao_fragmentation() (in module vayesta.core.fragmentation)": [[5, "vayesta.core.fragmentation.SAO_Fragmentation"]], "sao_fragmentation_uhf (class in vayesta.core.fragmentation.sao)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF"]], "site_fragmentation (class in vayesta.core.fragmentation.site)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation"]], "site_fragmentation() (in module vayesta.core.fragmentation)": [[5, "vayesta.core.fragmentation.Site_Fragmentation"]], "site_fragmentation_uhf (class in vayesta.core.fragmentation.site)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.add_all_atomic_fragments"]], "add_all_atomic_fragments() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.add_all_atomic_fragments"]], "add_atomic_fragment() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.add_atomic_fragment"]], "add_atomic_fragment() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.add_atomic_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.add_atomshell_fragment"]], "add_atomshell_fragment() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.add_atomshell_fragment"]], "add_cas_fragment() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.add_cas_fragment"]], "add_cas_fragment() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.add_cas_fragment"]], "add_full_system() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.add_full_system"]], "add_full_system() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.add_full_system"]], "add_orbital_fragment() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.add_orbital_fragment"]], "add_orbital_fragment() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.add_orbital_fragment"]], "check_nelectron() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.check_nelectron"]], "check_nelectron() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.check_nelectron"]], "check_nelectron() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.check_nelectron"]], "check_nelectron() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.check_nelectron"]], "check_orthonormal() (in module vayesta.core.fragmentation.fragmentation)": [[5, "vayesta.core.fragmentation.fragmentation.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.check_orthonormal"]], "check_orthonormal() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.check_orthonormal"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.get_atom_indices_symbols"]], "get_atom_indices_symbols() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.get_atom_indices_symbols"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.get_atomic_fragment_indices"]], "get_atomic_fragment_indices() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.get_atomic_fragment_indices"]], "get_atoms() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.get_atoms"]], "get_atoms() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.get_atoms"]], "get_coeff() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.get_coeff"]], "get_coeff() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.get_coeff"]], "get_default_minao() (in module vayesta.core.fragmentation.iao)": [[5, "vayesta.core.fragmentation.iao.get_default_minao"]], "get_env_coeff() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.get_env_coeff"]], "get_env_coeff() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.get_env_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.get_frag_coeff"]], "get_frag_coeff() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.get_frag_coeff"]], "get_labels() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.get_labels"]], "get_labels() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.get_labels"]], "get_labels() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.get_labels"]], "get_labels() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_labels"]], "get_labels() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_labels"]], "get_labels() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_labels"]], "get_labels() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_labels"]], "get_labels() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.get_labels"]], "get_labels() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.get_labels"]], "get_labels() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.get_labels"]], "get_labels() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.get_labels"]], "get_labels() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.get_labels"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.get_orbital_fragment_indices"]], "get_orbital_fragment_indices() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.get_orbital_fragment_indices"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.get_orbital_indices_labels"]], "get_orbital_indices_labels() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.get_orbital_indices_labels"]], "get_ovlp() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.get_ovlp"]], "get_ovlp() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.get_ovlp"]], "get_pao_coeff() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_pao_coeff"]], "get_pao_coeff() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_pao_coeff"]], "get_virtual_coeff() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.get_virtual_coeff"]], "get_virtual_coeff() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.get_virtual_coeff"]], "get_virtual_coeff() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.get_virtual_coeff"]], "get_virtual_coeff() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.get_virtual_coeff"]], "inversion_symmetry() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.inversion_symmetry"]], "inversion_symmetry() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.inversion_symmetry"]], "kernel() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.kernel"]], "kernel() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.kernel"]], "kernel() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.kernel"]], "kernel() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.kernel"]], "kernel() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.kernel"]], "kernel() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.kernel"]], "kernel() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.kernel"]], "kernel() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.kernel"]], "kernel() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.kernel"]], "kernel() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.kernel"]], "kernel() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.kernel"]], "kernel() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.kernel"]], "log_orbitals() (in module vayesta.core.fragmentation.helper)": [[5, "vayesta.core.fragmentation.helper.log_orbitals"]], "mf (vayesta.core.fragmentation.cas.cas_fragmentation property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.mf"]], "mf (vayesta.core.fragmentation.cas.cas_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.mf"]], "mf (vayesta.core.fragmentation.fragmentation.fragmentation property)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.mf"]], "mf (vayesta.core.fragmentation.iao.iao_fragmentation property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.mf"]], "mf (vayesta.core.fragmentation.iao.iao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.mf"]], "mf (vayesta.core.fragmentation.iaopao.iaopao_fragmentation property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.mf"]], "mf (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.mf"]], "mf (vayesta.core.fragmentation.sao.sao_fragmentation property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.mf"]], "mf (vayesta.core.fragmentation.sao.sao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.mf"]], "mf (vayesta.core.fragmentation.site.site_fragmentation property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.mf"]], "mf (vayesta.core.fragmentation.site.site_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.mf"]], "mf (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.mf"]], "mirror_symmetry() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.mirror_symmetry"]], "mirror_symmetry() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.mirror_symmetry"]], "mo_coeff (vayesta.core.fragmentation.cas.cas_fragmentation property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.cas.cas_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.fragmentation.fragmentation property)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.iao.iao_fragmentation property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.iao.iao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.iaopao.iaopao_fragmentation property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.sao.sao_fragmentation property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.sao.sao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.site.site_fragmentation property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.site.site_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.mo_coeff"]], "mo_coeff (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.mo_coeff"]], "mo_occ (vayesta.core.fragmentation.cas.cas_fragmentation property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.mo_occ"]], "mo_occ (vayesta.core.fragmentation.cas.cas_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.mo_occ"]], "mo_occ (vayesta.core.fragmentation.fragmentation.fragmentation property)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.mo_occ"]], "mo_occ (vayesta.core.fragmentation.iao.iao_fragmentation property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.mo_occ"]], "mo_occ (vayesta.core.fragmentation.iao.iao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.mo_occ"]], "mo_occ (vayesta.core.fragmentation.iaopao.iaopao_fragmentation property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.mo_occ"]], "mo_occ (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.mo_occ"]], "mo_occ (vayesta.core.fragmentation.sao.sao_fragmentation property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.mo_occ"]], "mo_occ (vayesta.core.fragmentation.sao.sao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.mo_occ"]], "mo_occ (vayesta.core.fragmentation.site.site_fragmentation property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.mo_occ"]], "mo_occ (vayesta.core.fragmentation.site.site_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.mo_occ"]], "mo_occ (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.mo_occ"]], "mol (vayesta.core.fragmentation.cas.cas_fragmentation property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.mol"]], "mol (vayesta.core.fragmentation.cas.cas_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.mol"]], "mol (vayesta.core.fragmentation.fragmentation.fragmentation property)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.mol"]], "mol (vayesta.core.fragmentation.iao.iao_fragmentation property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.mol"]], "mol (vayesta.core.fragmentation.iao.iao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.mol"]], "mol (vayesta.core.fragmentation.iaopao.iaopao_fragmentation property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.mol"]], "mol (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.mol"]], "mol (vayesta.core.fragmentation.sao.sao_fragmentation property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.mol"]], "mol (vayesta.core.fragmentation.sao.sao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.mol"]], "mol (vayesta.core.fragmentation.site.site_fragmentation property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.mol"]], "mol (vayesta.core.fragmentation.site.site_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.mol"]], "mol (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.mol"]], "n_iao (vayesta.core.fragmentation.iao.iao_fragmentation property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.n_iao"]], "n_iao (vayesta.core.fragmentation.iao.iao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.n_iao"]], "n_iao (vayesta.core.fragmentation.iaopao.iaopao_fragmentation property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.n_iao"]], "n_iao (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.n_iao"]], "name (vayesta.core.fragmentation.cas.cas_fragmentation attribute)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.name"]], "name (vayesta.core.fragmentation.cas.cas_fragmentation_uhf attribute)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.name"]], "name (vayesta.core.fragmentation.fragmentation.fragmentation attribute)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.name"]], "name (vayesta.core.fragmentation.iao.iao_fragmentation attribute)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.name"]], "name (vayesta.core.fragmentation.iao.iao_fragmentation_uhf attribute)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.name"]], "name (vayesta.core.fragmentation.iaopao.iaopao_fragmentation attribute)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.name"]], "name (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf attribute)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.name"]], "name (vayesta.core.fragmentation.sao.sao_fragmentation attribute)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.name"]], "name (vayesta.core.fragmentation.sao.sao_fragmentation_uhf attribute)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.name"]], "name (vayesta.core.fragmentation.site.site_fragmentation attribute)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.name"]], "name (vayesta.core.fragmentation.site.site_fragmentation_uhf attribute)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.name"]], "name (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf attribute)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.name"]], "nao (vayesta.core.fragmentation.cas.cas_fragmentation property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.nao"]], "nao (vayesta.core.fragmentation.cas.cas_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.nao"]], "nao (vayesta.core.fragmentation.fragmentation.fragmentation property)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.nao"]], "nao (vayesta.core.fragmentation.iao.iao_fragmentation property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.nao"]], "nao (vayesta.core.fragmentation.iao.iao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.nao"]], "nao (vayesta.core.fragmentation.iaopao.iaopao_fragmentation property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.nao"]], "nao (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.nao"]], "nao (vayesta.core.fragmentation.sao.sao_fragmentation property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.nao"]], "nao (vayesta.core.fragmentation.sao.sao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.nao"]], "nao (vayesta.core.fragmentation.site.site_fragmentation property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.nao"]], "nao (vayesta.core.fragmentation.site.site_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.nao"]], "nao (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.nao"]], "nmo (vayesta.core.fragmentation.cas.cas_fragmentation property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.nmo"]], "nmo (vayesta.core.fragmentation.cas.cas_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.nmo"]], "nmo (vayesta.core.fragmentation.fragmentation.fragmentation property)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.nmo"]], "nmo (vayesta.core.fragmentation.iao.iao_fragmentation property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.nmo"]], "nmo (vayesta.core.fragmentation.iao.iao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.nmo"]], "nmo (vayesta.core.fragmentation.iaopao.iaopao_fragmentation property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.nmo"]], "nmo (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.nmo"]], "nmo (vayesta.core.fragmentation.sao.sao_fragmentation property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.nmo"]], "nmo (vayesta.core.fragmentation.sao.sao_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.nmo"]], "nmo (vayesta.core.fragmentation.site.site_fragmentation property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.nmo"]], "nmo (vayesta.core.fragmentation.site.site_fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.nmo"]], "nmo (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf property)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.nmo"]], "rotational_symmetry() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.rotational_symmetry"]], "rotational_symmetry() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.rotational_symmetry"]], "search_labels() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.search_labels"]], "search_labels() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.search_labels"]], "search_labels() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.search_labels"]], "search_labels() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.search_labels"]], "search_labels() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.search_labels"]], "search_labels() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.search_labels"]], "search_labels() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.search_labels"]], "search_labels() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.search_labels"]], "search_labels() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.search_labels"]], "search_labels() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.search_labels"]], "search_labels() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.search_labels"]], "search_labels() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.search_labels"]], "secondary_fragments() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.secondary_fragments"]], "secondary_fragments() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.secondary_fragments"]], "symmetric_orth() (vayesta.core.fragmentation.cas.cas_fragmentation method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.cas.cas_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.cas.CAS_Fragmentation_UHF.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.fragmentation.fragmentation method)": [[5, "vayesta.core.fragmentation.fragmentation.Fragmentation.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.iao.iao_fragmentation method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.iao.iao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iao.IAO_Fragmentation_UHF.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.iaopao.iaopao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.iaopao.IAOPAO_Fragmentation_UHF.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.sao.sao_fragmentation method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.sao.sao_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.sao.SAO_Fragmentation_UHF.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.site.site_fragmentation method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.site.site_fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.site.Site_Fragmentation_UHF.symmetric_orth"]], "symmetric_orth() (vayesta.core.fragmentation.ufragmentation.fragmentation_uhf method)": [[5, "vayesta.core.fragmentation.ufragmentation.Fragmentation_UHF.symmetric_orth"]], "vayesta.core.fragmentation": [[5, "module-vayesta.core.fragmentation"]], "vayesta.core.fragmentation.cas": [[5, "module-vayesta.core.fragmentation.cas"]], "vayesta.core.fragmentation.fragmentation": [[5, "module-vayesta.core.fragmentation.fragmentation"]], "vayesta.core.fragmentation.helper": [[5, "module-vayesta.core.fragmentation.helper"]], "vayesta.core.fragmentation.iao": [[5, "module-vayesta.core.fragmentation.iao"]], "vayesta.core.fragmentation.iaopao": [[5, "module-vayesta.core.fragmentation.iaopao"]], "vayesta.core.fragmentation.sao": [[5, "module-vayesta.core.fragmentation.sao"]], "vayesta.core.fragmentation.site": [[5, "module-vayesta.core.fragmentation.site"]], "vayesta.core.fragmentation.ufragmentation": [[5, "module-vayesta.core.fragmentation.ufragmentation"]], "embedding (class in vayesta.core.qemb.qemb)": [[6, "vayesta.core.qemb.qemb.Embedding"]], "embedding.fragment (class in vayesta.core.qemb.qemb)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment"]], "embedding.fragment.flags (class in vayesta.core.qemb.qemb)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Flags"]], "embedding.fragment.options (class in vayesta.core.qemb.qemb)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options"]], "embedding.fragment.results (class in vayesta.core.qemb.qemb)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Results"]], "embedding.options (class in vayesta.core.qemb.qemb)": [[6, "vayesta.core.qemb.qemb.Embedding.Options"]], "fragment (class in vayesta.core.qemb.fragment)": [[6, "vayesta.core.qemb.fragment.Fragment"]], "fragment (vayesta.core.qemb.uqemb.uembedding attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Fragment"]], "fragment.flags (class in vayesta.core.qemb.fragment)": [[6, "vayesta.core.qemb.fragment.Fragment.Flags"]], "fragment.options (class in vayesta.core.qemb.fragment)": [[6, "vayesta.core.qemb.fragment.Fragment.Options"]], "fragment.results (class in vayesta.core.qemb.fragment)": [[6, "vayesta.core.qemb.fragment.Fragment.Results"]], "fragmentregister (class in vayesta.core.qemb.register)": [[6, "vayesta.core.qemb.register.FragmentRegister"]], "options (class in vayesta.core.qemb.fragment)": [[6, "vayesta.core.qemb.fragment.Options"]], "options (class in vayesta.core.qemb.qemb)": [[6, "vayesta.core.qemb.qemb.Options"]], "uembedding (class in vayesta.core.qemb.uqemb)": [[6, "vayesta.core.qemb.uqemb.UEmbedding"]], "uembedding.options (class in vayesta.core.qemb.uqemb)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options"]], "ufragment (class in vayesta.core.qemb.ufragment)": [[6, "vayesta.core.qemb.ufragment.UFragment"]], "ufragment.flags (class in vayesta.core.qemb.ufragment)": [[6, "vayesta.core.qemb.ufragment.UFragment.Flags"]], "ufragment.options (class in vayesta.core.qemb.ufragment)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options"]], "ufragment.results (class in vayesta.core.qemb.ufragment)": [[6, "vayesta.core.qemb.ufragment.UFragment.Results"]], "add_tsymmetric_fragments() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.add_tsymmetric_fragments"]], "add_tsymmetric_fragments() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.add_tsymmetric_fragments"]], "add_tsymmetric_fragments() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.add_tsymmetric_fragments"]], "asdict() (vayesta.core.qemb.fragment.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.asdict"]], "asdict() (vayesta.core.qemb.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Options.asdict"]], "asdict() (vayesta.core.qemb.qemb.embedding.fragment.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.asdict"]], "asdict() (vayesta.core.qemb.qemb.embedding.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.asdict"]], "asdict() (vayesta.core.qemb.qemb.options method)": [[6, "vayesta.core.qemb.qemb.Options.asdict"]], "asdict() (vayesta.core.qemb.ufragment.ufragment.options method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.asdict"]], "asdict() (vayesta.core.qemb.uqemb.uembedding.options method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.asdict"]], "auxiliary (vayesta.core.qemb.fragment.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.auxiliary"]], "auxiliary (vayesta.core.qemb.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Options.auxiliary"]], "auxiliary (vayesta.core.qemb.qemb.embedding.fragment.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.auxiliary"]], "auxiliary (vayesta.core.qemb.ufragment.ufragment.options attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.auxiliary"]], "bath_options (vayesta.core.qemb.fragment.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.bath_options"]], "bath_options (vayesta.core.qemb.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Options.bath_options"]], "bath_options (vayesta.core.qemb.qemb.embedding.fragment.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.bath_options"]], "bath_options (vayesta.core.qemb.qemb.embedding.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.bath_options"]], "bath_options (vayesta.core.qemb.qemb.options attribute)": [[6, "vayesta.core.qemb.qemb.Options.bath_options"]], "bath_options (vayesta.core.qemb.ufragment.ufragment.options attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.bath_options"]], "bath_options (vayesta.core.qemb.uqemb.uembedding.options attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.bath_options"]], "bath_parent_fragment_id (vayesta.core.qemb.fragment.fragment.flags attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Flags.bath_parent_fragment_id"]], "bath_parent_fragment_id (vayesta.core.qemb.qemb.embedding.fragment.flags attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Flags.bath_parent_fragment_id"]], "bath_parent_fragment_id (vayesta.core.qemb.ufragment.ufragment.flags attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Flags.bath_parent_fragment_id"]], "brueckner_scmf() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.brueckner_scmf"]], "brueckner_scmf() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.brueckner_scmf"]], "build_screened_eris() (in module vayesta.core.qemb.scrcoulomb)": [[6, "vayesta.core.qemb.scrcoulomb.build_screened_eris"]], "build_screened_eris() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.build_screened_eris"]], "build_screened_eris() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.build_screened_eris"]], "canonicalize_mo() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.canonicalize_mo"]], "canonicalize_mo() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.canonicalize_mo"]], "canonicalize_mo() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.canonicalize_mo"]], "cas_fragmentation() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.cas_fragmentation"]], "cas_fragmentation() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.cas_fragmentation"]], "change_dict_defaults() (vayesta.core.qemb.fragment.fragment.options class method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.core.qemb.fragment.options class method)": [[6, "vayesta.core.qemb.fragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.core.qemb.qemb.embedding.fragment.options class method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.core.qemb.qemb.embedding.options class method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.core.qemb.qemb.options class method)": [[6, "vayesta.core.qemb.qemb.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.core.qemb.ufragment.ufragment.options class method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.core.qemb.uqemb.uembedding.options class method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.change_dict_defaults"]], "change_options() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.change_options"]], "change_options() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.change_options"]], "change_options() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.change_options"]], "change_options() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.change_options"]], "change_options() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.change_options"]], "check_fragment_symmetry() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.check_fragment_symmetry"]], "check_fragment_symmetry() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.check_fragment_symmetry"]], "check_solver() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.check_solver"]], "check_solver() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.check_solver"]], "check_solver() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.check_solver"]], "check_solver() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.check_solver"]], "check_solver() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.check_solver"]], "cluster (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.cluster"]], "cluster (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.cluster"]], "cluster (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.cluster"]], "communicate_clusters() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.communicate_clusters"]], "communicate_clusters() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.communicate_clusters"]], "contributes (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.contributes"]], "contributes (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.contributes"]], "contributes (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.contributes"]], "converged (vayesta.core.qemb.fragment.fragment.results attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Results.converged"]], "converged (vayesta.core.qemb.qemb.embedding.fragment.results attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Results.converged"]], "converged (vayesta.core.qemb.ufragment.ufragment.results attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Results.converged"]], "copy() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.copy"]], "copy() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.copy"]], "copy() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.copy"]], "couple_to_fragment() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.couple_to_fragment"]], "couple_to_fragment() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.couple_to_fragment"]], "couple_to_fragment() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.couple_to_fragment"]], "couple_to_fragments() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.couple_to_fragments"]], "couple_to_fragments() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.couple_to_fragments"]], "couple_to_fragments() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.couple_to_fragments"]], "coupled_fragments (vayesta.core.qemb.fragment.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.coupled_fragments"]], "coupled_fragments (vayesta.core.qemb.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Options.coupled_fragments"]], "coupled_fragments (vayesta.core.qemb.qemb.embedding.fragment.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.coupled_fragments"]], "coupled_fragments (vayesta.core.qemb.ufragment.ufragment.options attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.coupled_fragments"]], "create_invsym_fragments() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.create_invsym_fragments"]], "create_invsym_fragments() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.create_invsym_fragments"]], "create_mirrorsym_fragments() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.create_mirrorsym_fragments"]], "create_mirrorsym_fragments() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.create_mirrorsym_fragments"]], "create_rotsym_fragments() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.create_rotsym_fragments"]], "create_rotsym_fragments() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.create_rotsym_fragments"]], "create_symmetric_fragments() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.create_symmetric_fragments"]], "create_symmetric_fragments() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.create_symmetric_fragments"]], "create_transsym_fragments() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.create_transsym_fragments"]], "create_transsym_fragments() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.create_transsym_fragments"]], "df (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.df"]], "df (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.df"]], "diagonalize_cluster_dm() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.diagonalize_cluster_dm"]], "diagonalize_cluster_dm() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.diagonalize_cluster_dm"]], "diagonalize_cluster_dm() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.diagonalize_cluster_dm"]], "dict_with_defaults() (vayesta.core.qemb.fragment.fragment.options static method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.core.qemb.fragment.options static method)": [[6, "vayesta.core.qemb.fragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.core.qemb.qemb.embedding.fragment.options static method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.core.qemb.qemb.embedding.options static method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.core.qemb.qemb.options static method)": [[6, "vayesta.core.qemb.qemb.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.core.qemb.ufragment.ufragment.options static method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.core.qemb.uqemb.uembedding.options static method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.dict_with_defaults"]], "dm_with_frozen (vayesta.core.qemb.fragment.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.core.qemb.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.core.qemb.qemb.embedding.fragment.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.core.qemb.qemb.embedding.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.core.qemb.qemb.options attribute)": [[6, "vayesta.core.qemb.qemb.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.core.qemb.ufragment.ufragment.options attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.core.qemb.uqemb.uembedding.options attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.dm_with_frozen"]], "e_corr (vayesta.core.qemb.fragment.fragment.results attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Results.e_corr"]], "e_corr (vayesta.core.qemb.qemb.embedding.fragment.results attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Results.e_corr"]], "e_corr (vayesta.core.qemb.ufragment.ufragment.results attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Results.e_corr"]], "e_mf (vayesta.core.qemb.qemb.embedding attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.e_mf"]], "e_mf (vayesta.core.qemb.qemb.embedding property)": [[6, "id4"]], "e_mf (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.e_mf"]], "e_nuc (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.e_nuc"]], "e_nuc (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.e_nuc"]], "fid (vayesta.core.qemb.fragment.fragment.results attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Results.fid"]], "fid (vayesta.core.qemb.qemb.embedding.fragment.results attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Results.fid"]], "fid (vayesta.core.qemb.ufragment.ufragment.results attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Results.fid"]], "fragments (vayesta.core.qemb.qemb.embedding.self attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.self.fragments"]], "get() (vayesta.core.qemb.fragment.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.get"]], "get() (vayesta.core.qemb.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Options.get"]], "get() (vayesta.core.qemb.qemb.embedding.fragment.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.get"]], "get() (vayesta.core.qemb.qemb.embedding.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.get"]], "get() (vayesta.core.qemb.qemb.options method)": [[6, "vayesta.core.qemb.qemb.Options.get"]], "get() (vayesta.core.qemb.ufragment.ufragment.options method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.get"]], "get() (vayesta.core.qemb.uqemb.uembedding.options method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.get"]], "get_atomic_charges() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_atomic_charges"]], "get_atomic_charges() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_atomic_charges"]], "get_average_cluster_size() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_average_cluster_size"]], "get_average_cluster_size() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_average_cluster_size"]], "get_cderi() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_cderi"]], "get_cderi() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_cderi"]], "get_coeff_env() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_coeff_env"]], "get_coeff_env() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_coeff_env"]], "get_coeff_env() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_coeff_env"]], "get_corrfunc() (in module vayesta.core.qemb.corrfunc)": [[6, "vayesta.core.qemb.corrfunc.get_corrfunc"]], "get_corrfunc() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_corrfunc"]], "get_corrfunc() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_corrfunc"]], "get_corrfunc_mf() (in module vayesta.core.qemb.corrfunc)": [[6, "vayesta.core.qemb.corrfunc.get_corrfunc_mf"]], "get_corrfunc_mf() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_corrfunc_mf"]], "get_corrfunc_mf() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_corrfunc_mf"]], "get_corrfunc_unrestricted() (in module vayesta.core.qemb.corrfunc)": [[6, "vayesta.core.qemb.corrfunc.get_corrfunc_unrestricted"]], "get_default() (vayesta.core.qemb.fragment.fragment.options class method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.get_default"]], "get_default() (vayesta.core.qemb.fragment.options class method)": [[6, "vayesta.core.qemb.fragment.Options.get_default"]], "get_default() (vayesta.core.qemb.qemb.embedding.fragment.options class method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.get_default"]], "get_default() (vayesta.core.qemb.qemb.embedding.options class method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.get_default"]], "get_default() (vayesta.core.qemb.qemb.options class method)": [[6, "vayesta.core.qemb.qemb.Options.get_default"]], "get_default() (vayesta.core.qemb.ufragment.ufragment.options class method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.get_default"]], "get_default() (vayesta.core.qemb.uqemb.uembedding.options class method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.get_default"]], "get_default_factory() (vayesta.core.qemb.fragment.fragment.options class method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.get_default_factory"]], "get_default_factory() (vayesta.core.qemb.fragment.options class method)": [[6, "vayesta.core.qemb.fragment.Options.get_default_factory"]], "get_default_factory() (vayesta.core.qemb.qemb.embedding.fragment.options class method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.get_default_factory"]], "get_default_factory() (vayesta.core.qemb.qemb.embedding.options class method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.get_default_factory"]], "get_default_factory() (vayesta.core.qemb.qemb.options class method)": [[6, "vayesta.core.qemb.qemb.Options.get_default_factory"]], "get_default_factory() (vayesta.core.qemb.ufragment.ufragment.options class method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.get_default_factory"]], "get_default_factory() (vayesta.core.qemb.uqemb.uembedding.options class method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.get_default_factory"]], "get_dmet_elec_energy() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_dmet_elec_energy"]], "get_dmet_elec_energy() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_dmet_elec_energy"]], "get_dmet_energy() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_dmet_energy"]], "get_dmet_energy() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_dmet_energy"]], "get_eris_array() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_eris_array"]], "get_eris_array() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_eris_array"]], "get_eris_array_uhf() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_eris_array_uhf"]], "get_eris_object() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_eris_object"]], "get_eris_object() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_eris_object"]], "get_exxdiv() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_exxdiv"]], "get_exxdiv() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_exxdiv"]], "get_fock() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_fock"]], "get_fock() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_fock"]], "get_fock_for_bath() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_fock_for_bath"]], "get_fock_for_bath() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_fock_for_bath"]], "get_fock_for_energy() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_fock_for_energy"]], "get_fock_for_energy() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_fock_for_energy"]], "get_frag_hamil() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_frag_hamil"]], "get_frag_hamil() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_frag_hamil"]], "get_frag_hamil() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_frag_hamil"]], "get_fragment_dmet_energy() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_fragment_dmet_energy"]], "get_fragment_dmet_energy() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_fragment_dmet_energy"]], "get_fragment_dmet_energy() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_fragment_dmet_energy"]], "get_fragment_mf_energy() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_fragment_mf_energy"]], "get_fragment_mf_energy() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_fragment_mf_energy"]], "get_fragment_mf_energy() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_fragment_mf_energy"]], "get_fragment_mo_energy() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_fragment_mo_energy"]], "get_fragment_mo_energy() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_fragment_mo_energy"]], "get_fragment_mo_energy() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_fragment_mo_energy"]], "get_fragment_mpi_rank() (in module vayesta.core.qemb.fragment)": [[6, "vayesta.core.qemb.fragment.get_fragment_mpi_rank"]], "get_fragment_overlap_norm() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_fragment_overlap_norm"]], "get_fragment_overlap_norm() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_fragment_overlap_norm"]], "get_fragment_projector() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_fragment_projector"]], "get_fragment_projector() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_fragment_projector"]], "get_fragment_projector() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_fragment_projector"]], "get_fragments() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_fragments"]], "get_fragments() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_fragments"]], "get_fragments_with_overlap() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_fragments_with_overlap"]], "get_fragments_with_overlap() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_fragments_with_overlap"]], "get_fragments_with_overlap() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_fragments_with_overlap"]], "get_hcore() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_hcore"]], "get_hcore() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_hcore"]], "get_hcore_for_energy() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_hcore_for_energy"]], "get_hcore_for_energy() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_hcore_for_energy"]], "get_lo_coeff() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_lo_coeff"]], "get_lo_coeff() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_lo_coeff"]], "get_max_cluster_size() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_max_cluster_size"]], "get_max_cluster_size() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_max_cluster_size"]], "get_mean_cluster_size() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_mean_cluster_size"]], "get_mean_cluster_size() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_mean_cluster_size"]], "get_min_cluster_size() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_min_cluster_size"]], "get_min_cluster_size() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_min_cluster_size"]], "get_mo_occupation() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_mo_occupation"]], "get_mo_occupation() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_mo_occupation"]], "get_mo_occupation() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_mo_occupation"]], "get_next() (vayesta.core.qemb.register.fragmentregister method)": [[6, "vayesta.core.qemb.register.FragmentRegister.get_next"]], "get_next_id() (vayesta.core.qemb.register.fragmentregister method)": [[6, "vayesta.core.qemb.register.FragmentRegister.get_next_id"]], "get_next_mpi_rank() (vayesta.core.qemb.register.fragmentregister method)": [[6, "vayesta.core.qemb.register.FragmentRegister.get_next_mpi_rank"]], "get_overlap() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_overlap"]], "get_overlap() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_overlap"]], "get_overlap() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_overlap"]], "get_ovlp() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_ovlp"]], "get_ovlp() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_ovlp"]], "get_ovlp_power() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_ovlp_power"]], "get_ovlp_power() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_ovlp_power"]], "get_screened_eris_ccsd() (in module vayesta.core.qemb.scrcoulomb)": [[6, "vayesta.core.qemb.scrcoulomb.get_screened_eris_ccsd"]], "get_screened_eris_full() (in module vayesta.core.qemb.scrcoulomb)": [[6, "vayesta.core.qemb.scrcoulomb.get_screened_eris_full"]], "get_solver() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_solver"]], "get_solver() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_solver"]], "get_solver() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_solver"]], "get_solver_options() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_solver_options"]], "get_solver_options() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_solver_options"]], "get_solver_options() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_solver_options"]], "get_symmetry_child_fragments() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_symmetry_child_fragments"]], "get_symmetry_child_fragments() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_symmetry_child_fragments"]], "get_symmetry_children() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_symmetry_children"]], "get_symmetry_children() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_symmetry_children"]], "get_symmetry_children() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_symmetry_children"]], "get_symmetry_error() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_symmetry_error"]], "get_symmetry_error() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_symmetry_error"]], "get_symmetry_error() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_symmetry_error"]], "get_symmetry_generations() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_symmetry_generations"]], "get_symmetry_generations() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_symmetry_generations"]], "get_symmetry_generations() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_symmetry_generations"]], "get_symmetry_operation() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_symmetry_operation"]], "get_symmetry_operation() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_symmetry_operation"]], "get_symmetry_operation() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_symmetry_operation"]], "get_symmetry_parent() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_symmetry_parent"]], "get_symmetry_parent() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_symmetry_parent"]], "get_symmetry_parent() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_symmetry_parent"]], "get_symmetry_parent_fragments() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_symmetry_parent_fragments"]], "get_symmetry_parent_fragments() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_symmetry_parent_fragments"]], "get_symmetry_tree() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.get_symmetry_tree"]], "get_symmetry_tree() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.get_symmetry_tree"]], "get_symmetry_tree() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.get_symmetry_tree"]], "get_veff() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_veff"]], "get_veff() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_veff"]], "get_veff_for_energy() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.get_veff_for_energy"]], "get_veff_for_energy() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.get_veff_for_energy"]], "global_frag_chempot (vayesta.core.qemb.qemb.embedding.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.global_frag_chempot"]], "global_frag_chempot (vayesta.core.qemb.qemb.options attribute)": [[6, "vayesta.core.qemb.qemb.Options.global_frag_chempot"]], "global_frag_chempot (vayesta.core.qemb.uqemb.uembedding.options attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.global_frag_chempot"]], "hamil (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.hamil"]], "hamil (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.hamil"]], "hamil (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.hamil"]], "has_complete_fragmentation() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.has_complete_fragmentation"]], "has_complete_fragmentation() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.has_complete_fragmentation"]], "has_complete_occupied_fragmentation() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.has_complete_occupied_fragmentation"]], "has_complete_occupied_fragmentation() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.has_complete_occupied_fragmentation"]], "has_complete_virtual_fragmentation() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.has_complete_virtual_fragmentation"]], "has_complete_virtual_fragmentation() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.has_complete_virtual_fragmentation"]], "has_df (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.has_df"]], "has_df (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.has_df"]], "has_exxdiv (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.has_exxdiv"]], "has_exxdiv (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.has_exxdiv"]], "has_orthonormal_fragmentation() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.has_orthonormal_fragmentation"]], "has_orthonormal_fragmentation() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.has_orthonormal_fragmentation"]], "iao_fragmentation() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.iao_fragmentation"]], "iao_fragmentation() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.iao_fragmentation"]], "iaopao_fragmentation() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.iaopao_fragmentation"]], "iaopao_fragmentation() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.iaopao_fragmentation"]], "id_name (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.id_name"]], "id_name (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.id_name"]], "id_name (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.id_name"]], "init_mf() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.init_mf"]], "init_mf() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.init_mf"]], "is_envelop (vayesta.core.qemb.fragment.fragment.flags attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Flags.is_envelop"]], "is_envelop (vayesta.core.qemb.qemb.embedding.fragment.flags attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Flags.is_envelop"]], "is_envelop (vayesta.core.qemb.ufragment.ufragment.flags attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Flags.is_envelop"]], "is_rhf (vayesta.core.qemb.qemb.embedding attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.is_rhf"]], "is_rhf (vayesta.core.qemb.uqemb.uembedding attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.is_rhf"]], "is_secfrag (vayesta.core.qemb.fragment.fragment.flags attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Flags.is_secfrag"]], "is_secfrag (vayesta.core.qemb.qemb.embedding.fragment.flags attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Flags.is_secfrag"]], "is_secfrag (vayesta.core.qemb.ufragment.ufragment.flags attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Flags.is_secfrag"]], "is_uhf (vayesta.core.qemb.qemb.embedding attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.is_uhf"]], "is_uhf (vayesta.core.qemb.uqemb.uembedding attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.is_uhf"]], "items() (vayesta.core.qemb.fragment.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.items"]], "items() (vayesta.core.qemb.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Options.items"]], "items() (vayesta.core.qemb.qemb.embedding.fragment.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.items"]], "items() (vayesta.core.qemb.qemb.embedding.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.items"]], "items() (vayesta.core.qemb.qemb.options method)": [[6, "vayesta.core.qemb.qemb.Options.items"]], "items() (vayesta.core.qemb.ufragment.ufragment.options method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.items"]], "items() (vayesta.core.qemb.uqemb.uembedding.options method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.items"]], "kcell (vayesta.core.qemb.qemb.embedding.self attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.self.kcell"]], "kdf (vayesta.core.qemb.qemb.embedding.self attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.self.kdf"]], "keys() (vayesta.core.qemb.fragment.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.keys"]], "keys() (vayesta.core.qemb.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Options.keys"]], "keys() (vayesta.core.qemb.qemb.embedding.fragment.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.keys"]], "keys() (vayesta.core.qemb.qemb.embedding.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.keys"]], "keys() (vayesta.core.qemb.qemb.options method)": [[6, "vayesta.core.qemb.qemb.Options.keys"]], "keys() (vayesta.core.qemb.ufragment.ufragment.options method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.keys"]], "keys() (vayesta.core.qemb.uqemb.uembedding.options method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.keys"]], "kpts (vayesta.core.qemb.qemb.embedding.self attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.self.kpts"]], "log (vayesta.core.qemb.qemb.embedding attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.log"]], "log_info() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.log_info"]], "log_info() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.log_info"]], "log_info() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.log_info"]], "loop() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.loop"]], "loop() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.loop"]], "loop_symmetry_children() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.loop_symmetry_children"]], "loop_symmetry_children() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.loop_symmetry_children"]], "loop_symmetry_children() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.loop_symmetry_children"]], "make_bath() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.make_bath"]], "make_bath() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.make_bath"]], "make_bath() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.make_bath"]], "make_cluster() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.make_cluster"]], "make_cluster() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.make_cluster"]], "make_cluster() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.make_cluster"]], "make_counterpoise_mol() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.make_counterpoise_mol"]], "make_counterpoise_mol() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.make_counterpoise_mol"]], "make_counterpoise_mol() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.make_counterpoise_mol"]], "make_rdm1_demo() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.make_rdm1_demo"]], "make_rdm1_demo() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.make_rdm1_demo"]], "make_rdm2_demo() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.make_rdm2_demo"]], "make_rdm2_demo() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.make_rdm2_demo"]], "make_tsymmetric_fragments() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.make_tsymmetric_fragments"]], "make_tsymmetric_fragments() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.make_tsymmetric_fragments"]], "make_tsymmetric_fragments() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.make_tsymmetric_fragments"]], "mf (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.mf"]], "mf (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.mf"]], "mf (vayesta.core.qemb.qemb.embedding.self attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.self.mf"]], "mf (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.mf"]], "mo_coeff (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.mo_coeff"]], "mo_coeff (vayesta.core.qemb.qemb.embedding.self attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.self.mo_coeff"]], "mo_coeff (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.mo_coeff"]], "mo_coeff_occ (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.mo_coeff_occ"]], "mo_coeff_occ (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.mo_coeff_occ"]], "mo_coeff_vir (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.mo_coeff_vir"]], "mo_coeff_vir (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.mo_coeff_vir"]], "mo_energy (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.mo_energy"]], "mo_energy (vayesta.core.qemb.qemb.embedding.self attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.self.mo_energy"]], "mo_energy (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.mo_energy"]], "mo_energy_occ (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.mo_energy_occ"]], "mo_energy_occ (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.mo_energy_occ"]], "mo_energy_vir (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.mo_energy_vir"]], "mo_energy_vir (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.mo_energy_vir"]], "mo_occ (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.mo_occ"]], "mo_occ (vayesta.core.qemb.qemb.embedding.self attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.self.mo_occ"]], "mo_occ (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.mo_occ"]], "mol (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.mol"]], "mol (vayesta.core.qemb.qemb.embedding attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.mol"]], "mol (vayesta.core.qemb.qemb.embedding property)": [[6, "id0"]], "mol (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.mol"]], "mol (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.mol"]], "mol (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.mol"]], "n_frag (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.n_frag"]], "n_frag (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.n_frag"]], "n_frag (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.n_frag"]], "n_symmetry_children (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.n_symmetry_children"]], "n_symmetry_children (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.n_symmetry_children"]], "n_symmetry_children (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.n_symmetry_children"]], "nao (vayesta.core.qemb.qemb.embedding attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.nao"]], "nao (vayesta.core.qemb.qemb.embedding property)": [[6, "id1"]], "nao (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.nao"]], "ncells (vayesta.core.qemb.qemb.embedding attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.ncells"]], "ncells (vayesta.core.qemb.qemb.embedding property)": [[6, "id2"]], "ncells (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.ncells"]], "nelectron (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.nelectron"]], "nelectron (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.nelectron"]], "nelectron (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.nelectron"]], "nfrag (vayesta.core.qemb.qemb.embedding attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.nfrag"]], "nfrag (vayesta.core.qemb.qemb.embedding property)": [[6, "id5"]], "nfrag (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.nfrag"]], "nmo (vayesta.core.qemb.qemb.embedding attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.nmo"]], "nmo (vayesta.core.qemb.qemb.embedding property)": [[6, "id3"]], "nmo (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.nmo"]], "nocc (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.nocc"]], "nocc (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.nocc"]], "nvir (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.nvir"]], "nvir (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.nvir"]], "optimize_chempot() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.optimize_chempot"]], "optimize_chempot() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.optimize_chempot"]], "pbc_dimension (vayesta.core.qemb.qemb.embedding property)": [[6, "vayesta.core.qemb.qemb.Embedding.pbc_dimension"]], "pbc_dimension (vayesta.core.qemb.uqemb.uembedding property)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.pbc_dimension"]], "pdmet_scmf() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.pdmet_scmf"]], "pdmet_scmf() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.pdmet_scmf"]], "plot3d() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.plot3d"]], "plot3d() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.plot3d"]], "plot3d() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.plot3d"]], "pop_analysis() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.pop_analysis"]], "pop_analysis() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.pop_analysis"]], "pop_analysis() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.pop_analysis"]], "pop_analysis() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.pop_analysis"]], "pop_analysis() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.pop_analysis"]], "project_ref_orbitals() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.project_ref_orbitals"]], "project_ref_orbitals() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.project_ref_orbitals"]], "project_ref_orbitals() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.project_ref_orbitals"]], "pwf (vayesta.core.qemb.fragment.fragment.results attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Results.pwf"]], "pwf (vayesta.core.qemb.qemb.embedding.fragment.results attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Results.pwf"]], "pwf (vayesta.core.qemb.ufragment.ufragment.results attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Results.pwf"]], "replace() (vayesta.core.qemb.fragment.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.replace"]], "replace() (vayesta.core.qemb.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Options.replace"]], "replace() (vayesta.core.qemb.qemb.embedding.fragment.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.replace"]], "replace() (vayesta.core.qemb.qemb.embedding.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.replace"]], "replace() (vayesta.core.qemb.qemb.options method)": [[6, "vayesta.core.qemb.qemb.Options.replace"]], "replace() (vayesta.core.qemb.ufragment.ufragment.options method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.replace"]], "replace() (vayesta.core.qemb.uqemb.uembedding.options method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.replace"]], "require_complete_fragmentation() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.require_complete_fragmentation"]], "require_complete_fragmentation() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.require_complete_fragmentation"]], "reset() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.reset"]], "reset() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.reset"]], "reset() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.reset"]], "reset() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.reset"]], "reset() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.reset"]], "results (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.results"]], "results (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.results"]], "results (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.results"]], "sao_fragmentation() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.sao_fragmentation"]], "sao_fragmentation() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.sao_fragmentation"]], "screening (vayesta.core.qemb.fragment.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.screening"]], "screening (vayesta.core.qemb.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Options.screening"]], "screening (vayesta.core.qemb.qemb.embedding.fragment.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.screening"]], "screening (vayesta.core.qemb.qemb.embedding.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.screening"]], "screening (vayesta.core.qemb.qemb.options attribute)": [[6, "vayesta.core.qemb.qemb.Options.screening"]], "screening (vayesta.core.qemb.ufragment.ufragment.options attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.screening"]], "screening (vayesta.core.qemb.uqemb.uembedding.options attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.screening"]], "set_hcore() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.set_hcore"]], "set_hcore() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.set_hcore"]], "set_ovlp() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.set_ovlp"]], "set_ovlp() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.set_ovlp"]], "set_veff() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.set_veff"]], "set_veff() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.set_veff"]], "site_fragmentation() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.site_fragmentation"]], "site_fragmentation() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.site_fragmentation"]], "solver_options (vayesta.core.qemb.fragment.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.solver_options"]], "solver_options (vayesta.core.qemb.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Options.solver_options"]], "solver_options (vayesta.core.qemb.qemb.embedding.fragment.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.solver_options"]], "solver_options (vayesta.core.qemb.qemb.embedding.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.solver_options"]], "solver_options (vayesta.core.qemb.qemb.options attribute)": [[6, "vayesta.core.qemb.qemb.Options.solver_options"]], "solver_options (vayesta.core.qemb.ufragment.ufragment.options attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.solver_options"]], "solver_options (vayesta.core.qemb.uqemb.uembedding.options attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.solver_options"]], "spinsym (vayesta.core.qemb.qemb.embedding attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.spinsym"]], "spinsym (vayesta.core.qemb.uqemb.uembedding attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.spinsym"]], "store_eris (vayesta.core.qemb.fragment.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.store_eris"]], "store_eris (vayesta.core.qemb.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Options.store_eris"]], "store_eris (vayesta.core.qemb.qemb.embedding.fragment.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.store_eris"]], "store_eris (vayesta.core.qemb.qemb.embedding.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.store_eris"]], "store_eris (vayesta.core.qemb.qemb.options attribute)": [[6, "vayesta.core.qemb.qemb.Options.store_eris"]], "store_eris (vayesta.core.qemb.ufragment.ufragment.options attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.store_eris"]], "store_eris (vayesta.core.qemb.uqemb.uembedding.options attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.store_eris"]], "sym_factor (vayesta.core.qemb.fragment.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.sym_factor"]], "sym_factor (vayesta.core.qemb.fragment.options attribute)": [[6, "vayesta.core.qemb.fragment.Options.sym_factor"]], "sym_factor (vayesta.core.qemb.qemb.embedding.fragment.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.sym_factor"]], "sym_factor (vayesta.core.qemb.ufragment.ufragment.options attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.sym_factor"]], "symmetry_factor (vayesta.core.qemb.fragment.fragment property)": [[6, "vayesta.core.qemb.fragment.Fragment.symmetry_factor"]], "symmetry_factor (vayesta.core.qemb.qemb.embedding.fragment property)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.symmetry_factor"]], "symmetry_factor (vayesta.core.qemb.ufragment.ufragment property)": [[6, "vayesta.core.qemb.ufragment.UFragment.symmetry_factor"]], "symmetry_mf_tol (vayesta.core.qemb.qemb.embedding.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.symmetry_mf_tol"]], "symmetry_mf_tol (vayesta.core.qemb.qemb.options attribute)": [[6, "vayesta.core.qemb.qemb.Options.symmetry_mf_tol"]], "symmetry_mf_tol (vayesta.core.qemb.uqemb.uembedding.options attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.symmetry_mf_tol"]], "symmetry_tol (vayesta.core.qemb.qemb.embedding.options attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.symmetry_tol"]], "symmetry_tol (vayesta.core.qemb.qemb.options attribute)": [[6, "vayesta.core.qemb.qemb.Options.symmetry_tol"]], "symmetry_tol (vayesta.core.qemb.uqemb.uembedding.options attribute)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.symmetry_tol"]], "trimmed_name() (vayesta.core.qemb.fragment.fragment method)": [[6, "vayesta.core.qemb.fragment.Fragment.trimmed_name"]], "trimmed_name() (vayesta.core.qemb.qemb.embedding.fragment method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.trimmed_name"]], "trimmed_name() (vayesta.core.qemb.ufragment.ufragment method)": [[6, "vayesta.core.qemb.ufragment.UFragment.trimmed_name"]], "update() (vayesta.core.qemb.fragment.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.update"]], "update() (vayesta.core.qemb.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Options.update"]], "update() (vayesta.core.qemb.qemb.embedding.fragment.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.update"]], "update() (vayesta.core.qemb.qemb.embedding.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.update"]], "update() (vayesta.core.qemb.qemb.options method)": [[6, "vayesta.core.qemb.qemb.Options.update"]], "update() (vayesta.core.qemb.ufragment.ufragment.options method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.update"]], "update() (vayesta.core.qemb.uqemb.uembedding.options method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.update"]], "update_mf() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.update_mf"]], "update_mf() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.update_mf"]], "values() (vayesta.core.qemb.fragment.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Fragment.Options.values"]], "values() (vayesta.core.qemb.fragment.options method)": [[6, "vayesta.core.qemb.fragment.Options.values"]], "values() (vayesta.core.qemb.qemb.embedding.fragment.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Options.values"]], "values() (vayesta.core.qemb.qemb.embedding.options method)": [[6, "vayesta.core.qemb.qemb.Embedding.Options.values"]], "values() (vayesta.core.qemb.qemb.options method)": [[6, "vayesta.core.qemb.qemb.Options.values"]], "values() (vayesta.core.qemb.ufragment.ufragment.options method)": [[6, "vayesta.core.qemb.ufragment.UFragment.Options.values"]], "values() (vayesta.core.qemb.uqemb.uembedding.options method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.Options.values"]], "vayesta.core.qemb": [[6, "module-vayesta.core.qemb"]], "vayesta.core.qemb.corrfunc": [[6, "module-vayesta.core.qemb.corrfunc"]], "vayesta.core.qemb.fragment": [[6, "module-vayesta.core.qemb.fragment"]], "vayesta.core.qemb.qemb": [[6, "module-vayesta.core.qemb.qemb"]], "vayesta.core.qemb.register": [[6, "module-vayesta.core.qemb.register"]], "vayesta.core.qemb.scrcoulomb": [[6, "module-vayesta.core.qemb.scrcoulomb"]], "vayesta.core.qemb.ufragment": [[6, "module-vayesta.core.qemb.ufragment"]], "vayesta.core.qemb.uqemb": [[6, "module-vayesta.core.qemb.uqemb"]], "wf (vayesta.core.qemb.fragment.fragment.results attribute)": [[6, "vayesta.core.qemb.fragment.Fragment.Results.wf"]], "wf (vayesta.core.qemb.qemb.embedding.fragment.results attribute)": [[6, "vayesta.core.qemb.qemb.Embedding.Fragment.Results.wf"]], "wf (vayesta.core.qemb.ufragment.ufragment.results attribute)": [[6, "vayesta.core.qemb.ufragment.UFragment.Results.wf"]], "write_population() (vayesta.core.qemb.qemb.embedding method)": [[6, "vayesta.core.qemb.qemb.Embedding.write_population"]], "write_population() (vayesta.core.qemb.uqemb.uembedding method)": [[6, "vayesta.core.qemb.uqemb.UEmbedding.write_population"]], "brueckner() (in module vayesta.core.scmf)": [[7, "vayesta.core.scmf.Brueckner"]], "brueckner_rhf (class in vayesta.core.scmf.brueckner)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF"]], "brueckner_uhf (class in vayesta.core.scmf.brueckner)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF"]], "pdmet() (in module vayesta.core.scmf)": [[7, "vayesta.core.scmf.PDMET"]], "pdmet_rhf (class in vayesta.core.scmf.pdmet)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF"]], "pdmet_uhf (class in vayesta.core.scmf.pdmet)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF"]], "scmf (class in vayesta.core.scmf.scmf)": [[7, "vayesta.core.scmf.scmf.SCMF"]], "check_convergence() (vayesta.core.scmf.brueckner.brueckner_rhf method)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.check_convergence"]], "check_convergence() (vayesta.core.scmf.brueckner.brueckner_uhf method)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.check_convergence"]], "check_convergence() (vayesta.core.scmf.pdmet.pdmet_rhf method)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.check_convergence"]], "check_convergence() (vayesta.core.scmf.pdmet.pdmet_uhf method)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.check_convergence"]], "check_convergence() (vayesta.core.scmf.scmf.scmf method)": [[7, "vayesta.core.scmf.scmf.SCMF.check_convergence"]], "e_tot (vayesta.core.scmf.brueckner.brueckner_rhf property)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.e_tot"]], "e_tot (vayesta.core.scmf.brueckner.brueckner_uhf property)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.e_tot"]], "e_tot (vayesta.core.scmf.pdmet.pdmet_rhf property)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.e_tot"]], "e_tot (vayesta.core.scmf.pdmet.pdmet_uhf property)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.e_tot"]], "e_tot (vayesta.core.scmf.scmf.scmf property)": [[7, "vayesta.core.scmf.scmf.SCMF.e_tot"]], "e_tot_oneshot (vayesta.core.scmf.brueckner.brueckner_rhf property)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.e_tot_oneshot"]], "e_tot_oneshot (vayesta.core.scmf.brueckner.brueckner_uhf property)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.e_tot_oneshot"]], "e_tot_oneshot (vayesta.core.scmf.pdmet.pdmet_rhf property)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.e_tot_oneshot"]], "e_tot_oneshot (vayesta.core.scmf.pdmet.pdmet_uhf property)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.e_tot_oneshot"]], "e_tot_oneshot (vayesta.core.scmf.scmf.scmf property)": [[7, "vayesta.core.scmf.scmf.SCMF.e_tot_oneshot"]], "get_diis() (vayesta.core.scmf.brueckner.brueckner_rhf method)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.get_diis"]], "get_diis() (vayesta.core.scmf.brueckner.brueckner_uhf method)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.get_diis"]], "get_diis() (vayesta.core.scmf.pdmet.pdmet_rhf method)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.get_diis"]], "get_diis() (vayesta.core.scmf.pdmet.pdmet_uhf method)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.get_diis"]], "get_diis() (vayesta.core.scmf.scmf.scmf method)": [[7, "vayesta.core.scmf.scmf.SCMF.get_diis"]], "get_rdm1() (vayesta.core.scmf.pdmet.pdmet_rhf method)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.get_rdm1"]], "get_rdm1() (vayesta.core.scmf.pdmet.pdmet_uhf method)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.get_rdm1"]], "get_t1() (vayesta.core.scmf.brueckner.brueckner_rhf method)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.get_t1"]], "get_t1() (vayesta.core.scmf.brueckner.brueckner_uhf method)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.get_t1"]], "kernel() (vayesta.core.scmf.brueckner.brueckner_rhf method)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.kernel"]], "kernel() (vayesta.core.scmf.brueckner.brueckner_uhf method)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.kernel"]], "kernel() (vayesta.core.scmf.pdmet.pdmet_rhf method)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.kernel"]], "kernel() (vayesta.core.scmf.pdmet.pdmet_uhf method)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.kernel"]], "kernel() (vayesta.core.scmf.scmf.scmf method)": [[7, "vayesta.core.scmf.scmf.SCMF.kernel"]], "kernel_orig (vayesta.core.scmf.brueckner.brueckner_rhf property)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.kernel_orig"]], "kernel_orig (vayesta.core.scmf.brueckner.brueckner_uhf property)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.kernel_orig"]], "kernel_orig (vayesta.core.scmf.pdmet.pdmet_rhf property)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.kernel_orig"]], "kernel_orig (vayesta.core.scmf.pdmet.pdmet_uhf property)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.kernel_orig"]], "kernel_orig (vayesta.core.scmf.scmf.scmf property)": [[7, "vayesta.core.scmf.scmf.SCMF.kernel_orig"]], "log (vayesta.core.scmf.brueckner.brueckner_rhf property)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.log"]], "log (vayesta.core.scmf.brueckner.brueckner_uhf property)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.log"]], "log (vayesta.core.scmf.pdmet.pdmet_rhf property)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.log"]], "log (vayesta.core.scmf.pdmet.pdmet_uhf property)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.log"]], "log (vayesta.core.scmf.scmf.scmf property)": [[7, "vayesta.core.scmf.scmf.SCMF.log"]], "mf (vayesta.core.scmf.brueckner.brueckner_rhf property)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.mf"]], "mf (vayesta.core.scmf.brueckner.brueckner_uhf property)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.mf"]], "mf (vayesta.core.scmf.pdmet.pdmet_rhf property)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.mf"]], "mf (vayesta.core.scmf.pdmet.pdmet_uhf property)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.mf"]], "mf (vayesta.core.scmf.scmf.scmf property)": [[7, "vayesta.core.scmf.scmf.SCMF.mf"]], "name (vayesta.core.scmf.brueckner.brueckner_rhf attribute)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.name"]], "name (vayesta.core.scmf.brueckner.brueckner_uhf attribute)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.name"]], "name (vayesta.core.scmf.pdmet.pdmet_rhf attribute)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.name"]], "name (vayesta.core.scmf.pdmet.pdmet_uhf attribute)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.name"]], "name (vayesta.core.scmf.scmf.scmf attribute)": [[7, "vayesta.core.scmf.scmf.SCMF.name"]], "update_mo_coeff() (vayesta.core.scmf.brueckner.brueckner_rhf method)": [[7, "vayesta.core.scmf.brueckner.Brueckner_RHF.update_mo_coeff"]], "update_mo_coeff() (vayesta.core.scmf.brueckner.brueckner_uhf method)": [[7, "vayesta.core.scmf.brueckner.Brueckner_UHF.update_mo_coeff"]], "update_mo_coeff() (vayesta.core.scmf.pdmet.pdmet_rhf method)": [[7, "vayesta.core.scmf.pdmet.PDMET_RHF.update_mo_coeff"]], "update_mo_coeff() (vayesta.core.scmf.pdmet.pdmet_uhf method)": [[7, "vayesta.core.scmf.pdmet.PDMET_UHF.update_mo_coeff"]], "update_mo_coeff() (vayesta.core.scmf.scmf.scmf method)": [[7, "vayesta.core.scmf.scmf.SCMF.update_mo_coeff"]], "vayesta.core.scmf": [[7, "module-vayesta.core.scmf"]], "vayesta.core.scmf.brueckner": [[7, "module-vayesta.core.scmf.brueckner"]], "vayesta.core.scmf.pdmet": [[7, "module-vayesta.core.scmf.pdmet"]], "vayesta.core.scmf.scmf": [[7, "module-vayesta.core.scmf.scmf"]], "symmetry (class in vayesta.core.symmetry.symmetry)": [[8, "vayesta.core.symmetry.symmetry.Symmetry"]], "symmetrygroup (class in vayesta.core.symmetry.group)": [[8, "vayesta.core.symmetry.group.SymmetryGroup"]], "symmetryidentity (class in vayesta.core.symmetry.operation)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity"]], "symmetryinversion (class in vayesta.core.symmetry.operation)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion"]], "symmetryoperation (class in vayesta.core.symmetry.operation)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation"]], "symmetryreflection (class in vayesta.core.symmetry.operation)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection"]], "symmetryrotation (class in vayesta.core.symmetry.operation)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation"]], "symmetrytranslation (class in vayesta.core.symmetry.operation)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation"]], "add_rotation() (vayesta.core.symmetry.group.symmetrygroup method)": [[8, "vayesta.core.symmetry.group.SymmetryGroup.add_rotation"]], "angle_between() (in module vayesta.core.symmetry.symmetry)": [[8, "vayesta.core.symmetry.symmetry.angle_between"]], "apply_to_point() (vayesta.core.symmetry.operation.symmetryidentity method)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity.apply_to_point"]], "apply_to_point() (vayesta.core.symmetry.operation.symmetryinversion method)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion.apply_to_point"]], "apply_to_point() (vayesta.core.symmetry.operation.symmetryoperation method)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation.apply_to_point"]], "apply_to_point() (vayesta.core.symmetry.operation.symmetryreflection method)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.apply_to_point"]], "apply_to_point() (vayesta.core.symmetry.operation.symmetryrotation method)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.apply_to_point"]], "apply_to_point() (vayesta.core.symmetry.operation.symmetrytranslation method)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.apply_to_point"]], "as_matrix() (vayesta.core.symmetry.operation.symmetryreflection method)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.as_matrix"]], "as_matrix() (vayesta.core.symmetry.operation.symmetryrotation method)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.as_matrix"]], "atom_coords() (vayesta.core.symmetry.symmetry.symmetry method)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.atom_coords"]], "boundary_phases (vayesta.core.symmetry.operation.symmetrytranslation property)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.boundary_phases"]], "call_kernel() (vayesta.core.symmetry.operation.symmetryidentity method)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity.call_kernel"]], "call_kernel() (vayesta.core.symmetry.operation.symmetryinversion method)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion.call_kernel"]], "call_kernel() (vayesta.core.symmetry.operation.symmetryoperation method)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation.call_kernel"]], "call_kernel() (vayesta.core.symmetry.operation.symmetryreflection method)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.call_kernel"]], "call_kernel() (vayesta.core.symmetry.operation.symmetryrotation method)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.call_kernel"]], "call_kernel() (vayesta.core.symmetry.operation.symmetrytranslation method)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.call_kernel"]], "call_wrapper() (vayesta.core.symmetry.operation.symmetryidentity method)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity.call_wrapper"]], "call_wrapper() (vayesta.core.symmetry.operation.symmetryinversion method)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion.call_wrapper"]], "call_wrapper() (vayesta.core.symmetry.operation.symmetryoperation method)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation.call_wrapper"]], "call_wrapper() (vayesta.core.symmetry.operation.symmetryreflection method)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.call_wrapper"]], "call_wrapper() (vayesta.core.symmetry.operation.symmetryrotation method)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.call_wrapper"]], "call_wrapper() (vayesta.core.symmetry.operation.symmetrytranslation method)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.call_wrapper"]], "cell (vayesta.core.symmetry.symmetry.symmetry property)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.cell"]], "clear_translations() (vayesta.core.symmetry.group.symmetrygroup method)": [[8, "vayesta.core.symmetry.group.SymmetryGroup.clear_translations"]], "compare_atoms() (in module vayesta.core.symmetry.tsymmetry)": [[8, "vayesta.core.symmetry.tsymmetry.compare_atoms"]], "compare_atoms() (vayesta.core.symmetry.group.symmetrygroup method)": [[8, "vayesta.core.symmetry.group.SymmetryGroup.compare_atoms"]], "compare_atoms() (vayesta.core.symmetry.symmetry.symmetry method)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.compare_atoms"]], "dimension (vayesta.core.symmetry.group.symmetrygroup property)": [[8, "vayesta.core.symmetry.group.SymmetryGroup.dimension"]], "find_subcells() (vayesta.core.symmetry.symmetry.symmetry method)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.find_subcells"]], "get_ao_reorder() (vayesta.core.symmetry.operation.symmetryidentity method)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity.get_ao_reorder"]], "get_ao_reorder() (vayesta.core.symmetry.operation.symmetryinversion method)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion.get_ao_reorder"]], "get_ao_reorder() (vayesta.core.symmetry.operation.symmetryoperation method)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation.get_ao_reorder"]], "get_ao_reorder() (vayesta.core.symmetry.operation.symmetryreflection method)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.get_ao_reorder"]], "get_ao_reorder() (vayesta.core.symmetry.operation.symmetryrotation method)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.get_ao_reorder"]], "get_ao_reorder() (vayesta.core.symmetry.operation.symmetrytranslation method)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.get_ao_reorder"]], "get_atom_reorder() (vayesta.core.symmetry.operation.symmetryidentity method)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity.get_atom_reorder"]], "get_atom_reorder() (vayesta.core.symmetry.operation.symmetryinversion method)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion.get_atom_reorder"]], "get_atom_reorder() (vayesta.core.symmetry.operation.symmetryoperation method)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation.get_atom_reorder"]], "get_atom_reorder() (vayesta.core.symmetry.operation.symmetryreflection method)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.get_atom_reorder"]], "get_atom_reorder() (vayesta.core.symmetry.operation.symmetryrotation method)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.get_atom_reorder"]], "get_atom_reorder() (vayesta.core.symmetry.operation.symmetrytranslation method)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.get_atom_reorder"]], "get_closest_atom() (vayesta.core.symmetry.group.symmetrygroup method)": [[8, "vayesta.core.symmetry.group.SymmetryGroup.get_closest_atom"]], "get_mesh_tvecs() (in module vayesta.core.symmetry.tsymmetry)": [[8, "vayesta.core.symmetry.tsymmetry.get_mesh_tvecs"]], "get_tsymmetry_op() (in module vayesta.core.symmetry.tsymmetry)": [[8, "vayesta.core.symmetry.tsymmetry.get_tsymmetry_op"]], "get_unique_atoms() (vayesta.core.symmetry.symmetry.symmetry method)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.get_unique_atoms"]], "has_pbc (vayesta.core.symmetry.symmetry.symmetry property)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.has_pbc"]], "inv_lattice_vectors (vayesta.core.symmetry.operation.symmetrytranslation property)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.inv_lattice_vectors"]], "inverse() (vayesta.core.symmetry.operation.symmetrytranslation method)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.inverse"]], "inverse_atom_reorder (vayesta.core.symmetry.operation.symmetrytranslation property)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.inverse_atom_reorder"]], "lattice_vectors (vayesta.core.symmetry.operation.symmetrytranslation property)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.lattice_vectors"]], "lattice_vectors() (vayesta.core.symmetry.symmetry.symmetry method)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.lattice_vectors"]], "loop_tvecs() (in module vayesta.core.symmetry.tsymmetry)": [[8, "vayesta.core.symmetry.tsymmetry.loop_tvecs"]], "mol (vayesta.core.symmetry.operation.symmetryidentity property)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity.mol"]], "mol (vayesta.core.symmetry.operation.symmetryinversion property)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion.mol"]], "mol (vayesta.core.symmetry.operation.symmetryoperation property)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation.mol"]], "mol (vayesta.core.symmetry.operation.symmetryreflection property)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.mol"]], "mol (vayesta.core.symmetry.operation.symmetryrotation property)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.mol"]], "mol (vayesta.core.symmetry.operation.symmetrytranslation property)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.mol"]], "mol (vayesta.core.symmetry.symmetry.symmetry property)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.mol"]], "nao (vayesta.core.symmetry.group.symmetrygroup property)": [[8, "vayesta.core.symmetry.group.SymmetryGroup.nao"]], "nao (vayesta.core.symmetry.operation.symmetryidentity property)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity.nao"]], "nao (vayesta.core.symmetry.operation.symmetryinversion property)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion.nao"]], "nao (vayesta.core.symmetry.operation.symmetryoperation property)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation.nao"]], "nao (vayesta.core.symmetry.operation.symmetryreflection property)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.nao"]], "nao (vayesta.core.symmetry.operation.symmetryrotation property)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.nao"]], "nao (vayesta.core.symmetry.operation.symmetrytranslation property)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.nao"]], "natom (vayesta.core.symmetry.group.symmetrygroup property)": [[8, "vayesta.core.symmetry.group.SymmetryGroup.natom"]], "natom (vayesta.core.symmetry.operation.symmetryidentity property)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity.natom"]], "natom (vayesta.core.symmetry.operation.symmetryinversion property)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion.natom"]], "natom (vayesta.core.symmetry.operation.symmetryoperation property)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation.natom"]], "natom (vayesta.core.symmetry.operation.symmetryreflection property)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.natom"]], "natom (vayesta.core.symmetry.operation.symmetryrotation property)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.natom"]], "natom (vayesta.core.symmetry.operation.symmetrytranslation property)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.natom"]], "natom (vayesta.core.symmetry.symmetry.symmetry property)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.natom"]], "natom_unique (vayesta.core.symmetry.symmetry.symmetry property)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.natom_unique"]], "pbcndims (vayesta.core.symmetry.symmetry.symmetry property)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.pbcndims"]], "primitive_lattice_vectors() (vayesta.core.symmetry.symmetry.symmetry method)": [[8, "vayesta.core.symmetry.symmetry.Symmetry.primitive_lattice_vectors"]], "reorder_aos() (in module vayesta.core.symmetry.tsymmetry)": [[8, "vayesta.core.symmetry.tsymmetry.reorder_aos"]], "reorder_atoms() (in module vayesta.core.symmetry.tsymmetry)": [[8, "vayesta.core.symmetry.tsymmetry.reorder_atoms"]], "reorder_atoms2aos() (in module vayesta.core.symmetry.tsymmetry)": [[8, "vayesta.core.symmetry.tsymmetry.reorder_atoms2aos"]], "rotate_angular_orbitals() (vayesta.core.symmetry.operation.symmetryidentity method)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity.rotate_angular_orbitals"]], "rotate_angular_orbitals() (vayesta.core.symmetry.operation.symmetryinversion method)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion.rotate_angular_orbitals"]], "rotate_angular_orbitals() (vayesta.core.symmetry.operation.symmetryoperation method)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation.rotate_angular_orbitals"]], "rotate_angular_orbitals() (vayesta.core.symmetry.operation.symmetryreflection method)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.rotate_angular_orbitals"]], "rotate_angular_orbitals() (vayesta.core.symmetry.operation.symmetryrotation method)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.rotate_angular_orbitals"]], "rotate_angular_orbitals() (vayesta.core.symmetry.operation.symmetrytranslation method)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.rotate_angular_orbitals"]], "set_translations() (vayesta.core.symmetry.group.symmetrygroup method)": [[8, "vayesta.core.symmetry.group.SymmetryGroup.set_translations"]], "to_bohr() (in module vayesta.core.symmetry.tsymmetry)": [[8, "vayesta.core.symmetry.tsymmetry.to_bohr"]], "tsymmetric_atoms() (in module vayesta.core.symmetry.tsymmetry)": [[8, "vayesta.core.symmetry.tsymmetry.tsymmetric_atoms"]], "unit_vector() (in module vayesta.core.symmetry.symmetry)": [[8, "vayesta.core.symmetry.symmetry.unit_vector"]], "vayesta.core.symmetry": [[8, "module-vayesta.core.symmetry"]], "vayesta.core.symmetry.group": [[8, "module-vayesta.core.symmetry.group"]], "vayesta.core.symmetry.operation": [[8, "module-vayesta.core.symmetry.operation"]], "vayesta.core.symmetry.symmetry": [[8, "module-vayesta.core.symmetry.symmetry"]], "vayesta.core.symmetry.tsymmetry": [[8, "module-vayesta.core.symmetry.tsymmetry"]], "vector_xyz (vayesta.core.symmetry.operation.symmetrytranslation property)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.vector_xyz"]], "xtol (vayesta.core.symmetry.operation.symmetryidentity property)": [[8, "vayesta.core.symmetry.operation.SymmetryIdentity.xtol"]], "xtol (vayesta.core.symmetry.operation.symmetryinversion property)": [[8, "vayesta.core.symmetry.operation.SymmetryInversion.xtol"]], "xtol (vayesta.core.symmetry.operation.symmetryoperation property)": [[8, "vayesta.core.symmetry.operation.SymmetryOperation.xtol"]], "xtol (vayesta.core.symmetry.operation.symmetryreflection property)": [[8, "vayesta.core.symmetry.operation.SymmetryReflection.xtol"]], "xtol (vayesta.core.symmetry.operation.symmetryrotation property)": [[8, "vayesta.core.symmetry.operation.SymmetryRotation.xtol"]], "xtol (vayesta.core.symmetry.operation.symmetrytranslation property)": [[8, "vayesta.core.symmetry.operation.SymmetryTranslation.xtol"]], "cluster (class in vayesta.core.types.cluster)": [[9, "vayesta.core.types.cluster.Cluster"]], "clusterrhf (class in vayesta.core.types.cluster)": [[9, "vayesta.core.types.cluster.ClusterRHF"]], "clusteruhf (class in vayesta.core.types.cluster)": [[9, "vayesta.core.types.cluster.ClusterUHF"]], "generalorbitals (class in vayesta.core.types.orbitals)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals"]], "orbitals() (in module vayesta.core.types.orbitals)": [[9, "vayesta.core.types.orbitals.Orbitals"]], "spatialorbitals (class in vayesta.core.types.orbitals)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals"]], "spinorbitals (class in vayesta.core.types.orbitals)": [[9, "vayesta.core.types.orbitals.SpinOrbitals"]], "basis_transform() (vayesta.core.types.cluster.cluster method)": [[9, "vayesta.core.types.cluster.Cluster.basis_transform"]], "basis_transform() (vayesta.core.types.cluster.clusterrhf method)": [[9, "vayesta.core.types.cluster.ClusterRHF.basis_transform"]], "basis_transform() (vayesta.core.types.cluster.clusteruhf method)": [[9, "vayesta.core.types.cluster.ClusterUHF.basis_transform"]], "basis_transform() (vayesta.core.types.orbitals.generalorbitals method)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.basis_transform"]], "basis_transform() (vayesta.core.types.orbitals.spatialorbitals method)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.basis_transform"]], "basis_transform() (vayesta.core.types.orbitals.spinorbitals method)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.basis_transform"]], "c_active (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_active"]], "c_active (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_active"]], "c_active (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_active"]], "c_active_occ (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_active_occ"]], "c_active_occ (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_active_occ"]], "c_active_occ (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_active_occ"]], "c_active_vir (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_active_vir"]], "c_active_vir (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_active_vir"]], "c_active_vir (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_active_vir"]], "c_frozen (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_frozen"]], "c_frozen (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_frozen"]], "c_frozen (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_frozen"]], "c_frozen_occ (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_frozen_occ"]], "c_frozen_occ (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_frozen_occ"]], "c_frozen_occ (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_frozen_occ"]], "c_frozen_vir (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_frozen_vir"]], "c_frozen_vir (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_frozen_vir"]], "c_frozen_vir (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_frozen_vir"]], "c_occ (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_occ"]], "c_occ (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_occ"]], "c_occ (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_occ"]], "c_total (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_total"]], "c_total (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_total"]], "c_total (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_total"]], "c_total_occ (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_total_occ"]], "c_total_occ (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_total_occ"]], "c_total_occ (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_total_occ"]], "c_total_vir (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_total_vir"]], "c_total_vir (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_total_vir"]], "c_total_vir (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_total_vir"]], "c_vir (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.c_vir"]], "c_vir (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.c_vir"]], "c_vir (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.c_vir"]], "coeff (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.coeff"]], "coeff (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.coeff"]], "coeff (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.coeff"]], "coeff_occ (vayesta.core.types.orbitals.generalorbitals property)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.coeff_occ"]], "coeff_occ (vayesta.core.types.orbitals.spatialorbitals property)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.coeff_occ"]], "coeff_vir (vayesta.core.types.orbitals.generalorbitals property)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.coeff_vir"]], "coeff_vir (vayesta.core.types.orbitals.spatialorbitals property)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.coeff_vir"]], "copy() (vayesta.core.types.cluster.cluster method)": [[9, "vayesta.core.types.cluster.Cluster.copy"]], "copy() (vayesta.core.types.cluster.clusterrhf method)": [[9, "vayesta.core.types.cluster.ClusterRHF.copy"]], "copy() (vayesta.core.types.cluster.clusteruhf method)": [[9, "vayesta.core.types.cluster.ClusterUHF.copy"]], "copy() (vayesta.core.types.orbitals.generalorbitals method)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.copy"]], "copy() (vayesta.core.types.orbitals.spatialorbitals method)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.copy"]], "copy() (vayesta.core.types.orbitals.spinorbitals method)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.copy"]], "from_coeffs() (vayesta.core.types.cluster.cluster static method)": [[9, "vayesta.core.types.cluster.Cluster.from_coeffs"]], "from_coeffs() (vayesta.core.types.cluster.clusterrhf static method)": [[9, "vayesta.core.types.cluster.ClusterRHF.from_coeffs"]], "from_coeffs() (vayesta.core.types.cluster.clusteruhf static method)": [[9, "vayesta.core.types.cluster.ClusterUHF.from_coeffs"]], "from_spatial_orbitals() (vayesta.core.types.orbitals.generalorbitals class method)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.from_spatial_orbitals"]], "from_spatial_orbitals() (vayesta.core.types.orbitals.spinorbitals class method)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.from_spatial_orbitals"]], "from_spin_orbitals() (vayesta.core.types.orbitals.generalorbitals class method)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.from_spin_orbitals"]], "get_active_indices() (vayesta.core.types.cluster.clusterrhf method)": [[9, "vayesta.core.types.cluster.ClusterRHF.get_active_indices"]], "get_active_indices() (vayesta.core.types.cluster.clusteruhf method)": [[9, "vayesta.core.types.cluster.ClusterUHF.get_active_indices"]], "get_active_slice() (vayesta.core.types.cluster.clusterrhf method)": [[9, "vayesta.core.types.cluster.ClusterRHF.get_active_slice"]], "get_active_slice() (vayesta.core.types.cluster.clusteruhf method)": [[9, "vayesta.core.types.cluster.ClusterUHF.get_active_slice"]], "get_frozen_indices() (vayesta.core.types.cluster.clusterrhf method)": [[9, "vayesta.core.types.cluster.ClusterRHF.get_frozen_indices"]], "get_frozen_indices() (vayesta.core.types.cluster.clusteruhf method)": [[9, "vayesta.core.types.cluster.ClusterUHF.get_frozen_indices"]], "nelec (vayesta.core.types.orbitals.generalorbitals property)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.nelec"]], "nelec (vayesta.core.types.orbitals.spatialorbitals property)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.nelec"]], "nocc (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.nocc"]], "nocc (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.nocc"]], "nocc (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.nocc"]], "nocc (vayesta.core.types.orbitals.generalorbitals property)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.nocc"]], "nocc (vayesta.core.types.orbitals.spatialorbitals property)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.nocc"]], "nocc_active (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.nocc_active"]], "nocc_active (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.nocc_active"]], "nocc_active (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.nocc_active"]], "nocc_frozen (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.nocc_frozen"]], "nocc_frozen (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.nocc_frozen"]], "nocc_frozen (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.nocc_frozen"]], "nocc_total (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.nocc_total"]], "nocc_total (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.nocc_total"]], "nocc_total (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.nocc_total"]], "nocca (vayesta.core.types.orbitals.spinorbitals property)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.nocca"]], "noccb (vayesta.core.types.orbitals.spinorbitals property)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.noccb"]], "norb (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.norb"]], "norb (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.norb"]], "norb (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.norb"]], "norb (vayesta.core.types.orbitals.generalorbitals property)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.norb"]], "norb (vayesta.core.types.orbitals.spatialorbitals property)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.norb"]], "norb_active (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.norb_active"]], "norb_active (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.norb_active"]], "norb_active (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.norb_active"]], "norb_frozen (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.norb_frozen"]], "norb_frozen (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.norb_frozen"]], "norb_frozen (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.norb_frozen"]], "norb_total (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.norb_total"]], "norb_total (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.norb_total"]], "norb_total (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.norb_total"]], "norba (vayesta.core.types.orbitals.spinorbitals property)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.norba"]], "norbb (vayesta.core.types.orbitals.spinorbitals property)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.norbb"]], "nspin (vayesta.core.types.orbitals.generalorbitals property)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.nspin"]], "nspin (vayesta.core.types.orbitals.spatialorbitals property)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.nspin"]], "nspin (vayesta.core.types.orbitals.spinorbitals property)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.nspin"]], "nvir (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.nvir"]], "nvir (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.nvir"]], "nvir (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.nvir"]], "nvir (vayesta.core.types.orbitals.generalorbitals property)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.nvir"]], "nvir (vayesta.core.types.orbitals.spatialorbitals property)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.nvir"]], "nvir_active (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.nvir_active"]], "nvir_active (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.nvir_active"]], "nvir_active (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.nvir_active"]], "nvir_frozen (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.nvir_frozen"]], "nvir_frozen (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.nvir_frozen"]], "nvir_frozen (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.nvir_frozen"]], "nvir_total (vayesta.core.types.cluster.cluster property)": [[9, "vayesta.core.types.cluster.Cluster.nvir_total"]], "nvir_total (vayesta.core.types.cluster.clusterrhf property)": [[9, "vayesta.core.types.cluster.ClusterRHF.nvir_total"]], "nvir_total (vayesta.core.types.cluster.clusteruhf property)": [[9, "vayesta.core.types.cluster.ClusterUHF.nvir_total"]], "nvira (vayesta.core.types.orbitals.spinorbitals property)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.nvira"]], "nvirb (vayesta.core.types.orbitals.spinorbitals property)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.nvirb"]], "pack() (vayesta.core.types.orbitals.generalorbitals method)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.pack"]], "pack() (vayesta.core.types.orbitals.spatialorbitals method)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.pack"]], "pack() (vayesta.core.types.orbitals.spinorbitals method)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.pack"]], "repr_size() (vayesta.core.types.cluster.clusterrhf method)": [[9, "vayesta.core.types.cluster.ClusterRHF.repr_size"]], "repr_size() (vayesta.core.types.cluster.clusteruhf method)": [[9, "vayesta.core.types.cluster.ClusterUHF.repr_size"]], "spinsym (vayesta.core.types.cluster.clusterrhf attribute)": [[9, "vayesta.core.types.cluster.ClusterRHF.spinsym"]], "spinsym (vayesta.core.types.cluster.clusteruhf attribute)": [[9, "vayesta.core.types.cluster.ClusterUHF.spinsym"]], "to_general_orbitals() (vayesta.core.types.orbitals.generalorbitals method)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.to_general_orbitals"]], "to_general_orbitals() (vayesta.core.types.orbitals.spatialorbitals method)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.to_general_orbitals"]], "to_general_orbitals() (vayesta.core.types.orbitals.spinorbitals method)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.to_general_orbitals"]], "to_spin_orbitals() (vayesta.core.types.orbitals.generalorbitals method)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.to_spin_orbitals"]], "to_spin_orbitals() (vayesta.core.types.orbitals.spatialorbitals method)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.to_spin_orbitals"]], "unpack() (vayesta.core.types.orbitals.generalorbitals class method)": [[9, "vayesta.core.types.orbitals.GeneralOrbitals.unpack"]], "unpack() (vayesta.core.types.orbitals.spatialorbitals class method)": [[9, "vayesta.core.types.orbitals.SpatialOrbitals.unpack"]], "unpack() (vayesta.core.types.orbitals.spinorbitals class method)": [[9, "vayesta.core.types.orbitals.SpinOrbitals.unpack"]], "vayesta.core.types": [[9, "module-vayesta.core.types"]], "vayesta.core.types.cluster": [[9, "module-vayesta.core.types.cluster"]], "vayesta.core.types.orbitals": [[9, "module-vayesta.core.types.orbitals"]], "ccsdtq_wavefunction() (in module vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.CCSDTQ_WaveFunction"]], "ccsdtq_wavefunction() (in module vayesta.core.types.wf.ccsdtq)": [[10, "vayesta.core.types.wf.ccsdtq.CCSDTQ_WaveFunction"]], "ccsd_wavefunction() (in module vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.CCSD_WaveFunction"]], "ccsd_wavefunction() (in module vayesta.core.types.wf.ccsd)": [[10, "vayesta.core.types.wf.ccsd.CCSD_WaveFunction"]], "cisdtq_wavefunction() (in module vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.CISDTQ_WaveFunction"]], "cisdtq_wavefunction() (in module vayesta.core.types.wf.cisdtq)": [[10, "vayesta.core.types.wf.cisdtq.CISDTQ_WaveFunction"]], "cisd_wavefunction() (in module vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.CISD_WaveFunction"]], "cisd_wavefunction() (in module vayesta.core.types.wf.cisd)": [[10, "vayesta.core.types.wf.cisd.CISD_WaveFunction"]], "fci_wavefunction() (in module vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.FCI_WaveFunction"]], "fci_wavefunction() (in module vayesta.core.types.wf.fci)": [[10, "vayesta.core.types.wf.fci.FCI_WaveFunction"]], "hf_wavefunction() (in module vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.HF_WaveFunction"]], "hf_wavefunction() (in module vayesta.core.types.wf.hf)": [[10, "vayesta.core.types.wf.hf.HF_WaveFunction"]], "mp2_wavefunction() (in module vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.MP2_WaveFunction"]], "mp2_wavefunction() (in module vayesta.core.types.wf.mp2)": [[10, "vayesta.core.types.wf.mp2.MP2_WaveFunction"]], "rccsdtq_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction"]], "rccsdtq_wavefunction (class in vayesta.core.types.wf.ccsdtq)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction"]], "rccsd_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction"]], "rccsd_wavefunction (class in vayesta.core.types.wf.ccsd)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction"]], "rcisdtq_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction"]], "rcisdtq_wavefunction (class in vayesta.core.types.wf.cisdtq)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction"]], "rcisd_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction"]], "rcisd_wavefunction (class in vayesta.core.types.wf.cisd)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction"]], "rfci_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction"]], "rfci_wavefunction (class in vayesta.core.types.wf.fci)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction"]], "rhf_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.RHF_WaveFunction"]], "rhf_wavefunction (class in vayesta.core.types.wf.hf)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction"]], "rmp2_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction"]], "rmp2_wavefunction (class in vayesta.core.types.wf.mp2)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction"]], "uccsdtq_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction"]], "uccsdtq_wavefunction (class in vayesta.core.types.wf.ccsdtq)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction"]], "uccsd_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction"]], "uccsd_wavefunction (class in vayesta.core.types.wf.ccsd)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction"]], "ucisdtq_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction"]], "ucisdtq_wavefunction (class in vayesta.core.types.wf.cisdtq)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction"]], "ucisd_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction"]], "ucisd_wavefunction (class in vayesta.core.types.wf.cisd)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction"]], "ufci_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction"]], "ufci_wavefunction (class in vayesta.core.types.wf.fci)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction"]], "ufci_wavefunction_w_dummy (class in vayesta.core.types.wf.fci)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy"]], "uhf_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.UHF_WaveFunction"]], "uhf_wavefunction (class in vayesta.core.types.wf.hf)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction"]], "ump2_wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction"]], "ump2_wavefunction (class in vayesta.core.types.wf.mp2)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction"]], "wavefunction (class in vayesta.core.types.wf)": [[10, "vayesta.core.types.wf.WaveFunction"]], "wavefunction (class in vayesta.core.types.wf.wf)": [[10, "vayesta.core.types.wf.wf.WaveFunction"]], "as_ccsd() (vayesta.core.types.wf.rccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.uccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.cisd.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.cisd.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.as_ccsd"]], "as_ccsd() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.as_ccsd"]], "as_ccsdtq() (vayesta.core.types.wf.rccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.rcisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.uccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.ucisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.as_ccsdtq"]], "as_ccsdtq() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.as_ccsdtq"]], "as_cisd() (vayesta.core.types.wf.rccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.uccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.cisd.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.cisd.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.as_cisd"]], "as_cisd() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.as_cisd"]], "as_cisd() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.as_cisd"]], "as_cisdtq() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.as_cisdtq"]], "as_cisdtq() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.as_cisdtq"]], "as_cisdtq() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.as_cisdtq"]], "as_cisdtq() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.as_cisdtq"]], "as_cisdtq() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.as_cisdtq"]], "as_fci() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.cisd.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.cisd.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.as_fci"]], "as_fci() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.as_fci"]], "as_fci() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.as_fci"]], "as_mp2() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.cisd.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.cisd.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.as_mp2"]], "as_mp2() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.as_mp2"]], "as_mp2() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.as_mp2"]], "as_restricted() (vayesta.core.types.wf.rhf_wavefunction method)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.as_restricted"]], "as_restricted() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.as_restricted"]], "as_restricted() (vayesta.core.types.wf.uhf_wavefunction method)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.as_restricted"]], "as_restricted() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.as_restricted"]], "as_restricted() (vayesta.core.types.wf.hf.rhf_wavefunction method)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.as_restricted"]], "as_restricted() (vayesta.core.types.wf.hf.uhf_wavefunction method)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.as_restricted"]], "as_restricted() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.as_restricted"]], "as_restricted() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.as_restricted"]], "as_unrestricted() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.rhf_wavefunction method)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.uhf_wavefunction method)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.hf.rhf_wavefunction method)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.hf.uhf_wavefunction method)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.as_unrestricted"]], "as_unrestricted() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.as_unrestricted"]], "c0 (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.c0"]], "c0 (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.c0"]], "c0 (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.c0"]], "c0 (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.c0"]], "c0 (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.c0"]], "c1a (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.c1a"]], "c1a (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.c1a"]], "c1b (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.c1b"]], "c1b (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.c1b"]], "c2aa (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.c2aa"]], "c2aa (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.c2aa"]], "c2ab (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.c2ab"]], "c2ab (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.c2ab"]], "c2ba (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.c2ba"]], "c2ba (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.c2ba"]], "c2bb (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.c2bb"]], "c2bb (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.c2bb"]], "copy() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.cisd.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.cisd.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.copy"]], "copy() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.copy"]], "dummy_mo (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.dummy_mo"]], "from_pyscf() (vayesta.core.types.wf.rccsdtq_wavefunction static method)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.rccsd_wavefunction static method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.rcisdtq_wavefunction static method)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.rcisd_wavefunction static method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.rfci_wavefunction static method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.rhf_wavefunction static method)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.rmp2_wavefunction static method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.uccsdtq_wavefunction static method)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.uccsd_wavefunction static method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.ucisdtq_wavefunction static method)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.ucisd_wavefunction static method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.ufci_wavefunction static method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.uhf_wavefunction static method)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.ump2_wavefunction static method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.wavefunction static method)": [[10, "vayesta.core.types.wf.WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.ccsd.rccsd_wavefunction static method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.ccsd.uccsd_wavefunction static method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction static method)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction static method)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.cisd.rcisd_wavefunction static method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.cisd.ucisd_wavefunction static method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction static method)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction static method)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.fci.rfci_wavefunction static method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.fci.ufci_wavefunction static method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy static method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.hf.rhf_wavefunction static method)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.hf.uhf_wavefunction static method)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.mp2.rmp2_wavefunction static method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.mp2.ump2_wavefunction static method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.from_pyscf"]], "from_pyscf() (vayesta.core.types.wf.wf.wavefunction static method)": [[10, "vayesta.core.types.wf.wf.WaveFunction.from_pyscf"]], "get_cisdvec() (vayesta.core.types.wf.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.get_cisdvec"]], "get_cisdvec() (vayesta.core.types.wf.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.get_cisdvec"]], "get_cisdvec() (vayesta.core.types.wf.cisd.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.get_cisdvec"]], "get_cisdvec() (vayesta.core.types.wf.cisd.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.get_cisdvec"]], "l1a (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.l1a"]], "l1a (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.l1a"]], "l1b (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.l1b"]], "l1b (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.l1b"]], "l2aa (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.l2aa"]], "l2aa (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.l2aa"]], "l2ab (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.l2ab"]], "l2ab (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.l2ab"]], "l2ba (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.l2ba"]], "l2ba (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.l2ba"]], "l2bb (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.l2bb"]], "l2bb (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.l2bb"]], "make_rdm1() (vayesta.core.types.wf.rccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.rcisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.rhf_wavefunction method)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.uccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.ucisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.uhf_wavefunction method)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.wavefunction method)": [[10, "vayesta.core.types.wf.WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.cisd.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.cisd.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.hf.rhf_wavefunction method)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.hf.uhf_wavefunction method)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.make_rdm1"]], "make_rdm1() (vayesta.core.types.wf.wf.wavefunction method)": [[10, "vayesta.core.types.wf.wf.WaveFunction.make_rdm1"]], "make_rdm2() (vayesta.core.types.wf.rccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.rcisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.rhf_wavefunction method)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.uccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.ucisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.uhf_wavefunction method)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.wavefunction method)": [[10, "vayesta.core.types.wf.WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction method)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.cisd.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.cisd.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction method)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.hf.rhf_wavefunction method)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.hf.uhf_wavefunction method)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.make_rdm2"]], "make_rdm2() (vayesta.core.types.wf.wf.wavefunction method)": [[10, "vayesta.core.types.wf.wf.WaveFunction.make_rdm2"]], "make_rdm2_non_cumulant() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.make_rdm2_non_cumulant"]], "make_rdm2_non_cumulant() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.make_rdm2_non_cumulant"]], "make_rdm2_non_cumulant() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.make_rdm2_non_cumulant"]], "make_rdm2_non_cumulant() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.make_rdm2_non_cumulant"]], "multiply() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.multiply"]], "multiply() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.multiply"]], "multiply() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.multiply"]], "multiply() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.multiply"]], "multiply() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.multiply"]], "multiply() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.multiply"]], "multiply() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.multiply"]], "multiply() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.multiply"]], "ndummy (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.ndummy"]], "nelec (vayesta.core.types.wf.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.wavefunction property)": [[10, "vayesta.core.types.wf.WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.ccsd.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.cisd.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.nelec"]], "nelec (vayesta.core.types.wf.hf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.hf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.mp2.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.nelec"]], "nelec (vayesta.core.types.wf.wf.wavefunction property)": [[10, "vayesta.core.types.wf.wf.WaveFunction.nelec"]], "nocc (vayesta.core.types.wf.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.wavefunction property)": [[10, "vayesta.core.types.wf.WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.ccsd.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.cisd.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.nocc"]], "nocc (vayesta.core.types.wf.hf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.hf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.mp2.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.nocc"]], "nocc (vayesta.core.types.wf.wf.wavefunction property)": [[10, "vayesta.core.types.wf.wf.WaveFunction.nocc"]], "nocca (vayesta.core.types.wf.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.wavefunction property)": [[10, "vayesta.core.types.wf.WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.ccsd.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.cisd.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.nocca"]], "nocca (vayesta.core.types.wf.hf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.hf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.mp2.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.nocca"]], "nocca (vayesta.core.types.wf.wf.wavefunction property)": [[10, "vayesta.core.types.wf.wf.WaveFunction.nocca"]], "noccb (vayesta.core.types.wf.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.wavefunction property)": [[10, "vayesta.core.types.wf.WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.ccsd.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.cisd.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.noccb"]], "noccb (vayesta.core.types.wf.hf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.hf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.mp2.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.noccb"]], "noccb (vayesta.core.types.wf.wf.wavefunction property)": [[10, "vayesta.core.types.wf.wf.WaveFunction.noccb"]], "norb (vayesta.core.types.wf.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.norb"]], "norb (vayesta.core.types.wf.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.norb"]], "norb (vayesta.core.types.wf.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.norb"]], "norb (vayesta.core.types.wf.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.norb"]], "norb (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.norb"]], "norb (vayesta.core.types.wf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.norb"]], "norb (vayesta.core.types.wf.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.norb"]], "norb (vayesta.core.types.wf.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.norb"]], "norb (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.norb"]], "norb (vayesta.core.types.wf.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.norb"]], "norb (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.norb"]], "norb (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.norb"]], "norb (vayesta.core.types.wf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.norb"]], "norb (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.norb"]], "norb (vayesta.core.types.wf.wavefunction property)": [[10, "vayesta.core.types.wf.WaveFunction.norb"]], "norb (vayesta.core.types.wf.ccsd.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.norb"]], "norb (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.norb"]], "norb (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.norb"]], "norb (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.norb"]], "norb (vayesta.core.types.wf.cisd.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.norb"]], "norb (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.norb"]], "norb (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.norb"]], "norb (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.norb"]], "norb (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.norb"]], "norb (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.norb"]], "norb (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.norb"]], "norb (vayesta.core.types.wf.hf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.norb"]], "norb (vayesta.core.types.wf.hf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.norb"]], "norb (vayesta.core.types.wf.mp2.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.norb"]], "norb (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.norb"]], "norb (vayesta.core.types.wf.wf.wavefunction property)": [[10, "vayesta.core.types.wf.wf.WaveFunction.norb"]], "norba (vayesta.core.types.wf.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.norba"]], "norba (vayesta.core.types.wf.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.norba"]], "norba (vayesta.core.types.wf.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.norba"]], "norba (vayesta.core.types.wf.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.norba"]], "norba (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.norba"]], "norba (vayesta.core.types.wf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.norba"]], "norba (vayesta.core.types.wf.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.norba"]], "norba (vayesta.core.types.wf.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.norba"]], "norba (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.norba"]], "norba (vayesta.core.types.wf.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.norba"]], "norba (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.norba"]], "norba (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.norba"]], "norba (vayesta.core.types.wf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.norba"]], "norba (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.norba"]], "norba (vayesta.core.types.wf.wavefunction property)": [[10, "vayesta.core.types.wf.WaveFunction.norba"]], "norba (vayesta.core.types.wf.ccsd.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.norba"]], "norba (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.norba"]], "norba (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.norba"]], "norba (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.norba"]], "norba (vayesta.core.types.wf.cisd.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.norba"]], "norba (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.norba"]], "norba (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.norba"]], "norba (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.norba"]], "norba (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.norba"]], "norba (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.norba"]], "norba (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.norba"]], "norba (vayesta.core.types.wf.hf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.norba"]], "norba (vayesta.core.types.wf.hf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.norba"]], "norba (vayesta.core.types.wf.mp2.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.norba"]], "norba (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.norba"]], "norba (vayesta.core.types.wf.wf.wavefunction property)": [[10, "vayesta.core.types.wf.wf.WaveFunction.norba"]], "norbb (vayesta.core.types.wf.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.wavefunction property)": [[10, "vayesta.core.types.wf.WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.ccsd.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.cisd.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.norbb"]], "norbb (vayesta.core.types.wf.hf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.hf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.mp2.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.norbb"]], "norbb (vayesta.core.types.wf.wf.wavefunction property)": [[10, "vayesta.core.types.wf.wf.WaveFunction.norbb"]], "nvir (vayesta.core.types.wf.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.wavefunction property)": [[10, "vayesta.core.types.wf.WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.ccsd.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.cisd.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.nvir"]], "nvir (vayesta.core.types.wf.hf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.hf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.mp2.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.nvir"]], "nvir (vayesta.core.types.wf.wf.wavefunction property)": [[10, "vayesta.core.types.wf.wf.WaveFunction.nvir"]], "nvira (vayesta.core.types.wf.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.wavefunction property)": [[10, "vayesta.core.types.wf.WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.ccsd.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.cisd.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.nvira"]], "nvira (vayesta.core.types.wf.hf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.hf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.mp2.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.nvira"]], "nvira (vayesta.core.types.wf.wf.wavefunction property)": [[10, "vayesta.core.types.wf.wf.WaveFunction.nvira"]], "nvirb (vayesta.core.types.wf.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSDTQ_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.RCISDTQ_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.RHF_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSDTQ_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.UCISDTQ_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.UHF_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.wavefunction property)": [[10, "vayesta.core.types.wf.WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.ccsd.rccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.ccsdtq.rccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.RCCSDTQ_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.ccsdtq.uccsdtq_wavefunction property)": [[10, "vayesta.core.types.wf.ccsdtq.UCCSDTQ_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.cisd.rcisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.cisd.ucisd_wavefunction property)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.cisdtq.rcisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.RCISDTQ_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.cisdtq.ucisdtq_wavefunction property)": [[10, "vayesta.core.types.wf.cisdtq.UCISDTQ_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.fci.rfci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.fci.ufci_wavefunction property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy property)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.nvirb"]], "nvirb (vayesta.core.types.wf.hf.rhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.RHF_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.hf.uhf_wavefunction property)": [[10, "vayesta.core.types.wf.hf.UHF_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.mp2.rmp2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.nvirb"]], "nvirb (vayesta.core.types.wf.wf.wavefunction property)": [[10, "vayesta.core.types.wf.wf.WaveFunction.nvirb"]], "pack() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.pack"]], "pack() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.pack"]], "pack() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.pack"]], "pack() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.pack"]], "pack() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.pack"]], "pack() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.pack"]], "pack() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.pack"]], "pack() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.pack"]], "project() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.project"]], "project() (vayesta.core.types.wf.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.project"]], "project() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.project"]], "project() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.project"]], "project() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.project"]], "project() (vayesta.core.types.wf.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.project"]], "project() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.project"]], "project() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.project"]], "project() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.project"]], "project() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.project"]], "project() (vayesta.core.types.wf.cisd.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.project"]], "project() (vayesta.core.types.wf.cisd.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.project"]], "project() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.project"]], "project() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.project"]], "project() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.project"]], "project() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.project"]], "project() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.project"]], "project_c1() (in module vayesta.core.types.wf.project)": [[10, "vayesta.core.types.wf.project.project_c1"]], "project_c2() (in module vayesta.core.types.wf.project)": [[10, "vayesta.core.types.wf.project.project_c2"]], "project_uc1() (in module vayesta.core.types.wf.project)": [[10, "vayesta.core.types.wf.project.project_uc1"]], "project_uc2() (in module vayesta.core.types.wf.project)": [[10, "vayesta.core.types.wf.project.project_uc2"]], "restore() (vayesta.core.types.wf.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.RCISD_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.RFCI_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.UCISD_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.UFCI_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.ccsd.rccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.ccsd.uccsd_wavefunction method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.cisd.rcisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.RCISD_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.cisd.ucisd_wavefunction method)": [[10, "vayesta.core.types.wf.cisd.UCISD_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.fci.rfci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.RFCI_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.fci.ufci_wavefunction method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.fci.ufci_wavefunction_w_dummy method)": [[10, "vayesta.core.types.wf.fci.UFCI_WaveFunction_w_dummy.restore"]], "restore() (vayesta.core.types.wf.mp2.rmp2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.restore"]], "restore() (vayesta.core.types.wf.mp2.ump2_wavefunction method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.restore"]], "symmetrize_c2() (in module vayesta.core.types.wf.project)": [[10, "vayesta.core.types.wf.project.symmetrize_c2"]], "symmetrize_uc2() (in module vayesta.core.types.wf.project)": [[10, "vayesta.core.types.wf.project.symmetrize_uc2"]], "t1_rhf() (in module vayesta.core.types.wf.t_to_c)": [[10, "vayesta.core.types.wf.t_to_c.t1_rhf"]], "t1_uhf() (in module vayesta.core.types.wf.t_to_c)": [[10, "vayesta.core.types.wf.t_to_c.t1_uhf"]], "t1a (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.t1a"]], "t1a (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.t1a"]], "t1b (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.t1b"]], "t1b (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.t1b"]], "t2_rhf() (in module vayesta.core.types.wf.t_to_c)": [[10, "vayesta.core.types.wf.t_to_c.t2_rhf"]], "t2_uhf() (in module vayesta.core.types.wf.t_to_c)": [[10, "vayesta.core.types.wf.t_to_c.t2_uhf"]], "t2aa (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.t2aa"]], "t2aa (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.t2aa"]], "t2aa (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.t2aa"]], "t2aa (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.t2aa"]], "t2ab (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.t2ab"]], "t2ab (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.t2ab"]], "t2ab (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.t2ab"]], "t2ab (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.t2ab"]], "t2ba (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.t2ba"]], "t2ba (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.t2ba"]], "t2ba (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.t2ba"]], "t2ba (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.t2ba"]], "t2bb (vayesta.core.types.wf.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.t2bb"]], "t2bb (vayesta.core.types.wf.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.t2bb"]], "t2bb (vayesta.core.types.wf.ccsd.uccsd_wavefunction property)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.t2bb"]], "t2bb (vayesta.core.types.wf.mp2.ump2_wavefunction property)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.t2bb"]], "t3_rhf() (in module vayesta.core.types.wf.t_to_c)": [[10, "vayesta.core.types.wf.t_to_c.t3_rhf"]], "t3_uhf() (in module vayesta.core.types.wf.t_to_c)": [[10, "vayesta.core.types.wf.t_to_c.t3_uhf"]], "t4_rhf() (in module vayesta.core.types.wf.t_to_c)": [[10, "vayesta.core.types.wf.t_to_c.t4_rhf"]], "t4_uhf() (in module vayesta.core.types.wf.t_to_c)": [[10, "vayesta.core.types.wf.t_to_c.t4_uhf"]], "unpack() (vayesta.core.types.wf.rccsd_wavefunction class method)": [[10, "vayesta.core.types.wf.RCCSD_WaveFunction.unpack"]], "unpack() (vayesta.core.types.wf.rmp2_wavefunction class method)": [[10, "vayesta.core.types.wf.RMP2_WaveFunction.unpack"]], "unpack() (vayesta.core.types.wf.uccsd_wavefunction class method)": [[10, "vayesta.core.types.wf.UCCSD_WaveFunction.unpack"]], "unpack() (vayesta.core.types.wf.ump2_wavefunction class method)": [[10, "vayesta.core.types.wf.UMP2_WaveFunction.unpack"]], "unpack() (vayesta.core.types.wf.ccsd.rccsd_wavefunction class method)": [[10, "vayesta.core.types.wf.ccsd.RCCSD_WaveFunction.unpack"]], "unpack() (vayesta.core.types.wf.ccsd.uccsd_wavefunction class method)": [[10, "vayesta.core.types.wf.ccsd.UCCSD_WaveFunction.unpack"]], "unpack() (vayesta.core.types.wf.mp2.rmp2_wavefunction class method)": [[10, "vayesta.core.types.wf.mp2.RMP2_WaveFunction.unpack"]], "unpack() (vayesta.core.types.wf.mp2.ump2_wavefunction class method)": [[10, "vayesta.core.types.wf.mp2.UMP2_WaveFunction.unpack"]], "vayesta.core.types.wf": [[10, "module-vayesta.core.types.wf"]], "vayesta.core.types.wf.ccsd": [[10, "module-vayesta.core.types.wf.ccsd"]], "vayesta.core.types.wf.ccsdtq": [[10, "module-vayesta.core.types.wf.ccsdtq"]], "vayesta.core.types.wf.cisd": [[10, "module-vayesta.core.types.wf.cisd"]], "vayesta.core.types.wf.cisdtq": [[10, "module-vayesta.core.types.wf.cisdtq"]], "vayesta.core.types.wf.fci": [[10, "module-vayesta.core.types.wf.fci"]], "vayesta.core.types.wf.hf": [[10, "module-vayesta.core.types.wf.hf"]], "vayesta.core.types.wf.mp2": [[10, "module-vayesta.core.types.wf.mp2"]], "vayesta.core.types.wf.project": [[10, "module-vayesta.core.types.wf.project"]], "vayesta.core.types.wf.t_to_c": [[10, "module-vayesta.core.types.wf.t_to_c"]], "vayesta.core.types.wf.wf": [[10, "module-vayesta.core.types.wf.wf"]], "diisupdate (class in vayesta.dmet.updates)": [[11, "vayesta.dmet.updates.DIISUpdate"]], "dmet (class in vayesta.dmet.dmet)": [[11, "vayesta.dmet.dmet.DMET"]], "dmet() (in module vayesta.dmet)": [[11, "vayesta.dmet.DMET"]], "dmet.options (class in vayesta.dmet.dmet)": [[11, "vayesta.dmet.dmet.DMET.Options"]], "dmetfragment (class in vayesta.dmet.fragment)": [[11, "vayesta.dmet.fragment.DMETFragment"]], "dmetfragment.flags (class in vayesta.dmet.fragment)": [[11, "vayesta.dmet.fragment.DMETFragment.Flags"]], "dmetfragment.options (class in vayesta.dmet.fragment)": [[11, "vayesta.dmet.fragment.DMETFragment.Options"]], "dmetfragment.results (class in vayesta.dmet.fragment)": [[11, "vayesta.dmet.fragment.DMETFragment.Results"]], "dmetfragmentexit": [[11, "vayesta.dmet.fragment.DMETFragmentExit"]], "dmetresults (class in vayesta.dmet.dmet)": [[11, "vayesta.dmet.dmet.DMETResults"]], "fragment (vayesta.dmet.dmet.dmet attribute)": [[11, "vayesta.dmet.dmet.DMET.Fragment"]], "fragment (vayesta.dmet.udmet.udmet attribute)": [[11, "vayesta.dmet.udmet.UDMET.Fragment"]], "mixupdate (class in vayesta.dmet.updates)": [[11, "vayesta.dmet.updates.MixUpdate"]], "options (class in vayesta.dmet.dmet)": [[11, "vayesta.dmet.dmet.Options"]], "rdmet (in module vayesta.dmet.dmet)": [[11, "vayesta.dmet.dmet.RDMET"]], "udmet (class in vayesta.dmet.udmet)": [[11, "vayesta.dmet.udmet.UDMET"]], "udmet.options (class in vayesta.dmet.udmet)": [[11, "vayesta.dmet.udmet.UDMET.Options"]], "udmetfragment (class in vayesta.dmet.ufragment)": [[11, "vayesta.dmet.ufragment.UDMETFragment"]], "udmetfragment.flags (class in vayesta.dmet.ufragment)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Flags"]], "udmetfragment.options (class in vayesta.dmet.ufragment)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options"]], "udmetfragment.results (class in vayesta.dmet.ufragment)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results"]], "update (class in vayesta.dmet.updates)": [[11, "vayesta.dmet.updates.Update"]], "add_tsymmetric_fragments() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.add_tsymmetric_fragments"]], "add_tsymmetric_fragments() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.add_tsymmetric_fragments"]], "args (vayesta.dmet.fragment.dmetfragmentexit attribute)": [[11, "vayesta.dmet.fragment.DMETFragmentExit.args"]], "asdict() (vayesta.dmet.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.DMET.Options.asdict"]], "asdict() (vayesta.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.Options.asdict"]], "asdict() (vayesta.dmet.fragment.dmetfragment.options method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.asdict"]], "asdict() (vayesta.dmet.udmet.udmet.options method)": [[11, "vayesta.dmet.udmet.UDMET.Options.asdict"]], "asdict() (vayesta.dmet.ufragment.udmetfragment.options method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.asdict"]], "auxiliary (vayesta.dmet.fragment.dmetfragment.options attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.auxiliary"]], "auxiliary (vayesta.dmet.ufragment.udmetfragment.options attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.auxiliary"]], "bath_options (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.bath_options"]], "bath_options (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.bath_options"]], "bath_options (vayesta.dmet.fragment.dmetfragment.options attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.bath_options"]], "bath_options (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.bath_options"]], "bath_options (vayesta.dmet.ufragment.udmetfragment.options attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.bath_options"]], "bath_parent_fragment_id (vayesta.dmet.fragment.dmetfragment.flags attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Flags.bath_parent_fragment_id"]], "bath_parent_fragment_id (vayesta.dmet.ufragment.udmetfragment.flags attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Flags.bath_parent_fragment_id"]], "brueckner_scmf() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.brueckner_scmf"]], "brueckner_scmf() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.brueckner_scmf"]], "build_screened_eris() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.build_screened_eris"]], "build_screened_eris() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.build_screened_eris"]], "calc_electron_number_defect() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.calc_electron_number_defect"]], "calc_electron_number_defect() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.calc_electron_number_defect"]], "canonicalize_mo() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.canonicalize_mo"]], "canonicalize_mo() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.canonicalize_mo"]], "cas_fragmentation() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.cas_fragmentation"]], "cas_fragmentation() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.cas_fragmentation"]], "change_dict_defaults() (vayesta.dmet.dmet.dmet.options class method)": [[11, "vayesta.dmet.dmet.DMET.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.dmet.dmet.options class method)": [[11, "vayesta.dmet.dmet.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.dmet.fragment.dmetfragment.options class method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.dmet.udmet.udmet.options class method)": [[11, "vayesta.dmet.udmet.UDMET.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.dmet.ufragment.udmetfragment.options class method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.change_dict_defaults"]], "change_options() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.change_options"]], "change_options() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.change_options"]], "change_options() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.change_options"]], "change_options() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.change_options"]], "charge_consistent (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.charge_consistent"]], "charge_consistent (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.charge_consistent"]], "charge_consistent (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.charge_consistent"]], "check_fragment_symmetry() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.check_fragment_symmetry"]], "check_fragment_symmetry() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.check_fragment_symmetry"]], "check_solver() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.check_solver"]], "check_solver() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.check_solver"]], "check_solver() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.check_solver"]], "check_solver() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.check_solver"]], "cluster (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.cluster"]], "cluster (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.cluster"]], "cluster_sizes (vayesta.dmet.dmet.dmetresults attribute)": [[11, "vayesta.dmet.dmet.DMETResults.cluster_sizes"]], "communicate_clusters() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.communicate_clusters"]], "communicate_clusters() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.communicate_clusters"]], "contributes (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.contributes"]], "contributes (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.contributes"]], "conv_tol (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.conv_tol"]], "conv_tol (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.conv_tol"]], "conv_tol (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.conv_tol"]], "converged (vayesta.dmet.fragment.dmetfragment.results attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Results.converged"]], "converged (vayesta.dmet.ufragment.udmetfragment.results attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results.converged"]], "copy() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.copy"]], "copy() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.copy"]], "couple_to_fragment() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.couple_to_fragment"]], "couple_to_fragment() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.couple_to_fragment"]], "couple_to_fragments() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.couple_to_fragments"]], "couple_to_fragments() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.couple_to_fragments"]], "coupled_fragments (vayesta.dmet.fragment.dmetfragment.options attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.coupled_fragments"]], "coupled_fragments (vayesta.dmet.ufragment.udmetfragment.options attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.coupled_fragments"]], "create_invsym_fragments() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.create_invsym_fragments"]], "create_invsym_fragments() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.create_invsym_fragments"]], "create_mirrorsym_fragments() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.create_mirrorsym_fragments"]], "create_mirrorsym_fragments() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.create_mirrorsym_fragments"]], "create_rotsym_fragments() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.create_rotsym_fragments"]], "create_rotsym_fragments() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.create_rotsym_fragments"]], "create_symmetric_fragments() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.create_symmetric_fragments"]], "create_symmetric_fragments() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.create_symmetric_fragments"]], "create_transsym_fragments() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.create_transsym_fragments"]], "create_transsym_fragments() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.create_transsym_fragments"]], "df (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.df"]], "df (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.df"]], "diagonalize_cluster_dm() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.diagonalize_cluster_dm"]], "diagonalize_cluster_dm() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.diagonalize_cluster_dm"]], "dict_with_defaults() (vayesta.dmet.dmet.dmet.options static method)": [[11, "vayesta.dmet.dmet.DMET.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.dmet.dmet.options static method)": [[11, "vayesta.dmet.dmet.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.dmet.fragment.dmetfragment.options static method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.dmet.udmet.udmet.options static method)": [[11, "vayesta.dmet.udmet.UDMET.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.dmet.ufragment.udmetfragment.options static method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.dict_with_defaults"]], "diis (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.diis"]], "diis (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.diis"]], "diis (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.diis"]], "dm1 (vayesta.dmet.fragment.dmetfragment.results attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Results.dm1"]], "dm1 (vayesta.dmet.ufragment.udmetfragment.results attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results.dm1"]], "dm2 (vayesta.dmet.fragment.dmetfragment.results attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Results.dm2"]], "dm2 (vayesta.dmet.ufragment.udmetfragment.results attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results.dm2"]], "dm_with_frozen (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.dmet.fragment.dmetfragment.options attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.dmet.ufragment.udmetfragment.options attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.dm_with_frozen"]], "e1 (vayesta.dmet.fragment.dmetfragment.results attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Results.e1"]], "e1 (vayesta.dmet.ufragment.udmetfragment.results attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results.e1"]], "e2 (vayesta.dmet.fragment.dmetfragment.results attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Results.e2"]], "e2 (vayesta.dmet.ufragment.udmetfragment.results attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results.e2"]], "e_corr (vayesta.dmet.dmet.dmetresults attribute)": [[11, "vayesta.dmet.dmet.DMETResults.e_corr"]], "e_corr (vayesta.dmet.fragment.dmetfragment.results attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Results.e_corr"]], "e_corr (vayesta.dmet.ufragment.udmetfragment.results attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results.e_corr"]], "e_mf (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.e_mf"]], "e_mf (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.e_mf"]], "e_nuc (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.e_nuc"]], "e_nuc (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.e_nuc"]], "e_tot (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.e_tot"]], "e_tot (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.e_tot"]], "fid (vayesta.dmet.fragment.dmetfragment.results attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Results.fid"]], "fid (vayesta.dmet.ufragment.udmetfragment.results attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results.fid"]], "get() (vayesta.dmet.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.DMET.Options.get"]], "get() (vayesta.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.Options.get"]], "get() (vayesta.dmet.fragment.dmetfragment.options method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.get"]], "get() (vayesta.dmet.udmet.udmet.options method)": [[11, "vayesta.dmet.udmet.UDMET.Options.get"]], "get() (vayesta.dmet.ufragment.udmetfragment.options method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.get"]], "get_atomic_charges() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_atomic_charges"]], "get_atomic_charges() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_atomic_charges"]], "get_average_cluster_size() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_average_cluster_size"]], "get_average_cluster_size() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_average_cluster_size"]], "get_cderi() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_cderi"]], "get_cderi() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_cderi"]], "get_coeff_env() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_coeff_env"]], "get_coeff_env() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_coeff_env"]], "get_corrfunc() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_corrfunc"]], "get_corrfunc() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_corrfunc"]], "get_corrfunc_mf() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_corrfunc_mf"]], "get_corrfunc_mf() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_corrfunc_mf"]], "get_default() (vayesta.dmet.dmet.dmet.options class method)": [[11, "vayesta.dmet.dmet.DMET.Options.get_default"]], "get_default() (vayesta.dmet.dmet.options class method)": [[11, "vayesta.dmet.dmet.Options.get_default"]], "get_default() (vayesta.dmet.fragment.dmetfragment.options class method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.get_default"]], "get_default() (vayesta.dmet.udmet.udmet.options class method)": [[11, "vayesta.dmet.udmet.UDMET.Options.get_default"]], "get_default() (vayesta.dmet.ufragment.udmetfragment.options class method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.get_default"]], "get_default_factory() (vayesta.dmet.dmet.dmet.options class method)": [[11, "vayesta.dmet.dmet.DMET.Options.get_default_factory"]], "get_default_factory() (vayesta.dmet.dmet.options class method)": [[11, "vayesta.dmet.dmet.Options.get_default_factory"]], "get_default_factory() (vayesta.dmet.fragment.dmetfragment.options class method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.get_default_factory"]], "get_default_factory() (vayesta.dmet.udmet.udmet.options class method)": [[11, "vayesta.dmet.udmet.UDMET.Options.get_default_factory"]], "get_default_factory() (vayesta.dmet.ufragment.udmetfragment.options class method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.get_default_factory"]], "get_dmet_elec_energy() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_dmet_elec_energy"]], "get_dmet_elec_energy() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_dmet_elec_energy"]], "get_dmet_energy() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_dmet_energy"]], "get_dmet_energy() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_dmet_energy"]], "get_dmet_energy_contrib() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_dmet_energy_contrib"]], "get_dmet_energy_contrib() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_dmet_energy_contrib"]], "get_eris_array() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_eris_array"]], "get_eris_array() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_eris_array"]], "get_eris_array_uhf() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_eris_array_uhf"]], "get_eris_object() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_eris_object"]], "get_eris_object() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_eris_object"]], "get_exxdiv() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_exxdiv"]], "get_exxdiv() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_exxdiv"]], "get_fock() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_fock"]], "get_fock() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_fock"]], "get_fock_for_bath() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_fock_for_bath"]], "get_fock_for_bath() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_fock_for_bath"]], "get_fock_for_energy() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_fock_for_energy"]], "get_fock_for_energy() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_fock_for_energy"]], "get_frag_hamil() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_frag_hamil"]], "get_frag_hamil() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_frag_hamil"]], "get_frag_hl_dm() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_frag_hl_dm"]], "get_frag_hl_dm() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_frag_hl_dm"]], "get_fragment_dmet_energy() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_fragment_dmet_energy"]], "get_fragment_dmet_energy() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_fragment_dmet_energy"]], "get_fragment_mf_energy() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_fragment_mf_energy"]], "get_fragment_mf_energy() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_fragment_mf_energy"]], "get_fragment_mo_energy() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_fragment_mo_energy"]], "get_fragment_mo_energy() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_fragment_mo_energy"]], "get_fragment_overlap_norm() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_fragment_overlap_norm"]], "get_fragment_overlap_norm() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_fragment_overlap_norm"]], "get_fragment_projector() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_fragment_projector"]], "get_fragment_projector() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_fragment_projector"]], "get_fragments() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_fragments"]], "get_fragments() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_fragments"]], "get_fragments_with_overlap() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_fragments_with_overlap"]], "get_fragments_with_overlap() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_fragments_with_overlap"]], "get_hcore() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_hcore"]], "get_hcore() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_hcore"]], "get_hcore_for_energy() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_hcore_for_energy"]], "get_hcore_for_energy() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_hcore_for_energy"]], "get_impurity_coeffs() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_impurity_coeffs"]], "get_impurity_coeffs() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_impurity_coeffs"]], "get_lo_coeff() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_lo_coeff"]], "get_lo_coeff() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_lo_coeff"]], "get_max_cluster_size() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_max_cluster_size"]], "get_max_cluster_size() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_max_cluster_size"]], "get_mean_cluster_size() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_mean_cluster_size"]], "get_mean_cluster_size() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_mean_cluster_size"]], "get_min_cluster_size() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_min_cluster_size"]], "get_min_cluster_size() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_min_cluster_size"]], "get_mo_occupation() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_mo_occupation"]], "get_mo_occupation() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_mo_occupation"]], "get_nelectron_hl() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_nelectron_hl"]], "get_nelectron_hl() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_nelectron_hl"]], "get_overlap() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_overlap"]], "get_overlap() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_overlap"]], "get_ovlp() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_ovlp"]], "get_ovlp() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_ovlp"]], "get_ovlp_power() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_ovlp_power"]], "get_ovlp_power() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_ovlp_power"]], "get_solver() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_solver"]], "get_solver() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_solver"]], "get_solver_options() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_solver_options"]], "get_solver_options() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_solver_options"]], "get_symmetry_child_fragments() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_symmetry_child_fragments"]], "get_symmetry_child_fragments() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_symmetry_child_fragments"]], "get_symmetry_children() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_symmetry_children"]], "get_symmetry_children() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_symmetry_children"]], "get_symmetry_error() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_symmetry_error"]], "get_symmetry_error() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_symmetry_error"]], "get_symmetry_generations() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_symmetry_generations"]], "get_symmetry_generations() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_symmetry_generations"]], "get_symmetry_operation() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_symmetry_operation"]], "get_symmetry_operation() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_symmetry_operation"]], "get_symmetry_parent() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_symmetry_parent"]], "get_symmetry_parent() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_symmetry_parent"]], "get_symmetry_parent_fragments() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_symmetry_parent_fragments"]], "get_symmetry_parent_fragments() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_symmetry_parent_fragments"]], "get_symmetry_tree() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.get_symmetry_tree"]], "get_symmetry_tree() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.get_symmetry_tree"]], "get_veff() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_veff"]], "get_veff() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_veff"]], "get_veff_for_energy() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.get_veff_for_energy"]], "get_veff_for_energy() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.get_veff_for_energy"]], "global_frag_chempot (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.global_frag_chempot"]], "global_frag_chempot (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.global_frag_chempot"]], "global_frag_chempot (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.global_frag_chempot"]], "hamil (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.hamil"]], "hamil (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.hamil"]], "has_complete_fragmentation() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.has_complete_fragmentation"]], "has_complete_fragmentation() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.has_complete_fragmentation"]], "has_complete_occupied_fragmentation() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.has_complete_occupied_fragmentation"]], "has_complete_occupied_fragmentation() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.has_complete_occupied_fragmentation"]], "has_complete_virtual_fragmentation() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.has_complete_virtual_fragmentation"]], "has_complete_virtual_fragmentation() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.has_complete_virtual_fragmentation"]], "has_df (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.has_df"]], "has_df (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.has_df"]], "has_exxdiv (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.has_exxdiv"]], "has_exxdiv (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.has_exxdiv"]], "has_orthonormal_fragmentation() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.has_orthonormal_fragmentation"]], "has_orthonormal_fragmentation() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.has_orthonormal_fragmentation"]], "iao_fragmentation() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.iao_fragmentation"]], "iao_fragmentation() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.iao_fragmentation"]], "iao_minao (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.iao_minao"]], "iao_minao (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.iao_minao"]], "iao_minao (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.iao_minao"]], "iaopao_fragmentation() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.iaopao_fragmentation"]], "iaopao_fragmentation() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.iaopao_fragmentation"]], "id_name (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.id_name"]], "id_name (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.id_name"]], "init_mf() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.init_mf"]], "init_mf() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.init_mf"]], "is_envelop (vayesta.dmet.fragment.dmetfragment.flags attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Flags.is_envelop"]], "is_envelop (vayesta.dmet.ufragment.udmetfragment.flags attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Flags.is_envelop"]], "is_rhf (vayesta.dmet.dmet.dmet attribute)": [[11, "vayesta.dmet.dmet.DMET.is_rhf"]], "is_rhf (vayesta.dmet.udmet.udmet attribute)": [[11, "vayesta.dmet.udmet.UDMET.is_rhf"]], "is_secfrag (vayesta.dmet.fragment.dmetfragment.flags attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Flags.is_secfrag"]], "is_secfrag (vayesta.dmet.ufragment.udmetfragment.flags attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Flags.is_secfrag"]], "is_uhf (vayesta.dmet.dmet.dmet attribute)": [[11, "vayesta.dmet.dmet.DMET.is_uhf"]], "is_uhf (vayesta.dmet.udmet.udmet attribute)": [[11, "vayesta.dmet.udmet.UDMET.is_uhf"]], "items() (vayesta.dmet.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.DMET.Options.items"]], "items() (vayesta.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.Options.items"]], "items() (vayesta.dmet.fragment.dmetfragment.options method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.items"]], "items() (vayesta.dmet.udmet.udmet.options method)": [[11, "vayesta.dmet.udmet.UDMET.Options.items"]], "items() (vayesta.dmet.ufragment.udmetfragment.options method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.items"]], "kernel() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.kernel"]], "kernel() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.kernel"]], "kernel() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.kernel"]], "kernel() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.kernel"]], "keys() (vayesta.dmet.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.DMET.Options.keys"]], "keys() (vayesta.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.Options.keys"]], "keys() (vayesta.dmet.fragment.dmetfragment.options method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.keys"]], "keys() (vayesta.dmet.udmet.udmet.options method)": [[11, "vayesta.dmet.udmet.UDMET.Options.keys"]], "keys() (vayesta.dmet.ufragment.udmetfragment.options method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.keys"]], "log_info() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.log_info"]], "log_info() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.log_info"]], "loop() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.loop"]], "loop() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.loop"]], "loop_symmetry_children() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.loop_symmetry_children"]], "loop_symmetry_children() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.loop_symmetry_children"]], "make_bath() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.make_bath"]], "make_bath() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.make_bath"]], "make_cluster() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.make_cluster"]], "make_cluster() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.make_cluster"]], "make_counterpoise_mol() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.make_counterpoise_mol"]], "make_counterpoise_mol() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.make_counterpoise_mol"]], "make_rdm1() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.make_rdm1"]], "make_rdm1() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.make_rdm1"]], "make_rdm1_demo() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.make_rdm1_demo"]], "make_rdm1_demo() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.make_rdm1_demo"]], "make_rdm2() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.make_rdm2"]], "make_rdm2() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.make_rdm2"]], "make_rdm2_demo() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.make_rdm2_demo"]], "make_rdm2_demo() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.make_rdm2_demo"]], "make_tsymmetric_fragments() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.make_tsymmetric_fragments"]], "make_tsymmetric_fragments() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.make_tsymmetric_fragments"]], "max_elec_err (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.max_elec_err"]], "max_elec_err (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.max_elec_err"]], "max_elec_err (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.max_elec_err"]], "maxiter (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.maxiter"]], "maxiter (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.maxiter"]], "maxiter (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.maxiter"]], "mf (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.mf"]], "mf (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.mf"]], "mixing_param (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.mixing_param"]], "mixing_param (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.mixing_param"]], "mixing_param (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.mixing_param"]], "mixing_variable (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.mixing_variable"]], "mixing_variable (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.mixing_variable"]], "mixing_variable (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.mixing_variable"]], "mo_coeff (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.mo_coeff"]], "mo_coeff (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.mo_coeff"]], "mo_coeff_occ (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.mo_coeff_occ"]], "mo_coeff_occ (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.mo_coeff_occ"]], "mo_coeff_vir (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.mo_coeff_vir"]], "mo_coeff_vir (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.mo_coeff_vir"]], "mo_energy (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.mo_energy"]], "mo_energy (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.mo_energy"]], "mo_energy_occ (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.mo_energy_occ"]], "mo_energy_occ (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.mo_energy_occ"]], "mo_energy_vir (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.mo_energy_vir"]], "mo_energy_vir (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.mo_energy_vir"]], "mo_occ (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.mo_occ"]], "mo_occ (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.mo_occ"]], "mol (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.mol"]], "mol (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.mol"]], "mol (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.mol"]], "mol (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.mol"]], "n_active (vayesta.dmet.fragment.dmetfragment.results attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Results.n_active"]], "n_active (vayesta.dmet.ufragment.udmetfragment.results attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results.n_active"]], "n_frag (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.n_frag"]], "n_frag (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.n_frag"]], "n_symmetry_children (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.n_symmetry_children"]], "n_symmetry_children (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.n_symmetry_children"]], "nao (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.nao"]], "nao (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.nao"]], "ncells (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.ncells"]], "ncells (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.ncells"]], "nelectron (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.nelectron"]], "nelectron (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.nelectron"]], "nfrag (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.nfrag"]], "nfrag (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.nfrag"]], "nmo (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.nmo"]], "nmo (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.nmo"]], "nocc (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.nocc"]], "nocc (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.nocc"]], "nvir (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.nvir"]], "nvir (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.nvir"]], "oneshot (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.oneshot"]], "oneshot (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.oneshot"]], "oneshot (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.oneshot"]], "optimize_chempot() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.optimize_chempot"]], "optimize_chempot() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.optimize_chempot"]], "pbc_dimension (vayesta.dmet.dmet.dmet property)": [[11, "vayesta.dmet.dmet.DMET.pbc_dimension"]], "pbc_dimension (vayesta.dmet.udmet.udmet property)": [[11, "vayesta.dmet.udmet.UDMET.pbc_dimension"]], "pdmet_scmf() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.pdmet_scmf"]], "pdmet_scmf() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.pdmet_scmf"]], "perform_sdp_fit() (in module vayesta.dmet.sdp_sc)": [[11, "vayesta.dmet.sdp_sc.perform_SDP_fit"]], "plot3d() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.plot3d"]], "plot3d() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.plot3d"]], "pop_analysis() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.pop_analysis"]], "pop_analysis() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.pop_analysis"]], "pop_analysis() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.pop_analysis"]], "pop_analysis() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.pop_analysis"]], "print_clusters() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.print_clusters"]], "print_clusters() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.print_clusters"]], "print_results() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.print_results"]], "print_results() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.print_results"]], "project_ref_orbitals() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.project_ref_orbitals"]], "project_ref_orbitals() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.project_ref_orbitals"]], "pwf (vayesta.dmet.fragment.dmetfragment.results attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Results.pwf"]], "pwf (vayesta.dmet.ufragment.udmetfragment.results attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results.pwf"]], "replace() (vayesta.dmet.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.DMET.Options.replace"]], "replace() (vayesta.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.Options.replace"]], "replace() (vayesta.dmet.fragment.dmetfragment.options method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.replace"]], "replace() (vayesta.dmet.udmet.udmet.options method)": [[11, "vayesta.dmet.udmet.UDMET.Options.replace"]], "replace() (vayesta.dmet.ufragment.udmetfragment.options method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.replace"]], "require_complete_fragmentation() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.require_complete_fragmentation"]], "require_complete_fragmentation() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.require_complete_fragmentation"]], "reset() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.reset"]], "reset() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.reset"]], "reset() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.reset"]], "reset() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.reset"]], "results (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.results"]], "results (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.results"]], "sao_fragmentation() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.sao_fragmentation"]], "sao_fragmentation() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.sao_fragmentation"]], "screening (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.screening"]], "screening (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.screening"]], "screening (vayesta.dmet.fragment.dmetfragment.options attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.screening"]], "screening (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.screening"]], "screening (vayesta.dmet.ufragment.udmetfragment.options attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.screening"]], "set_cas() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.set_cas"]], "set_hcore() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.set_hcore"]], "set_hcore() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.set_hcore"]], "set_ovlp() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.set_ovlp"]], "set_ovlp() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.set_ovlp"]], "set_veff() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.set_veff"]], "set_veff() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.set_veff"]], "site_fragmentation() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.site_fragmentation"]], "site_fragmentation() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.site_fragmentation"]], "solver_options (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.solver_options"]], "solver_options (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.solver_options"]], "solver_options (vayesta.dmet.fragment.dmetfragment.options attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.solver_options"]], "solver_options (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.solver_options"]], "solver_options (vayesta.dmet.ufragment.udmetfragment.options attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.solver_options"]], "spinsym (vayesta.dmet.dmet.dmet attribute)": [[11, "vayesta.dmet.dmet.DMET.spinsym"]], "spinsym (vayesta.dmet.udmet.udmet attribute)": [[11, "vayesta.dmet.udmet.UDMET.spinsym"]], "store_eris (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.store_eris"]], "store_eris (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.store_eris"]], "store_eris (vayesta.dmet.fragment.dmetfragment.options attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.store_eris"]], "store_eris (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.store_eris"]], "store_eris (vayesta.dmet.ufragment.udmetfragment.options attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.store_eris"]], "sym_factor (vayesta.dmet.fragment.dmetfragment.options attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.sym_factor"]], "sym_factor (vayesta.dmet.ufragment.udmetfragment.options attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.sym_factor"]], "symmetry_factor (vayesta.dmet.fragment.dmetfragment property)": [[11, "vayesta.dmet.fragment.DMETFragment.symmetry_factor"]], "symmetry_factor (vayesta.dmet.ufragment.udmetfragment property)": [[11, "vayesta.dmet.ufragment.UDMETFragment.symmetry_factor"]], "symmetry_mf_tol (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.symmetry_mf_tol"]], "symmetry_mf_tol (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.symmetry_mf_tol"]], "symmetry_mf_tol (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.symmetry_mf_tol"]], "symmetry_tol (vayesta.dmet.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.DMET.Options.symmetry_tol"]], "symmetry_tol (vayesta.dmet.dmet.options attribute)": [[11, "vayesta.dmet.dmet.Options.symmetry_tol"]], "symmetry_tol (vayesta.dmet.udmet.udmet.options attribute)": [[11, "vayesta.dmet.udmet.UDMET.Options.symmetry_tol"]], "trimmed_name() (vayesta.dmet.fragment.dmetfragment method)": [[11, "vayesta.dmet.fragment.DMETFragment.trimmed_name"]], "trimmed_name() (vayesta.dmet.ufragment.udmetfragment method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.trimmed_name"]], "update() (vayesta.dmet.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.DMET.Options.update"]], "update() (vayesta.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.Options.update"]], "update() (vayesta.dmet.fragment.dmetfragment.options method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.update"]], "update() (vayesta.dmet.udmet.udmet.options method)": [[11, "vayesta.dmet.udmet.UDMET.Options.update"]], "update() (vayesta.dmet.ufragment.udmetfragment.options method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.update"]], "update() (vayesta.dmet.updates.diisupdate method)": [[11, "vayesta.dmet.updates.DIISUpdate.update"]], "update() (vayesta.dmet.updates.mixupdate method)": [[11, "vayesta.dmet.updates.MixUpdate.update"]], "update_mf() (in module vayesta.dmet.pdmet)": [[11, "vayesta.dmet.pdmet.update_mf"]], "update_mf() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.update_mf"]], "update_mf() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.update_mf"]], "update_vcorr() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.update_vcorr"]], "update_vcorr() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.update_vcorr"]], "values() (vayesta.dmet.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.DMET.Options.values"]], "values() (vayesta.dmet.dmet.options method)": [[11, "vayesta.dmet.dmet.Options.values"]], "values() (vayesta.dmet.fragment.dmetfragment.options method)": [[11, "vayesta.dmet.fragment.DMETFragment.Options.values"]], "values() (vayesta.dmet.udmet.udmet.options method)": [[11, "vayesta.dmet.udmet.UDMET.Options.values"]], "values() (vayesta.dmet.ufragment.udmetfragment.options method)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Options.values"]], "vayesta.dmet": [[11, "module-vayesta.dmet"]], "vayesta.dmet.dmet": [[11, "module-vayesta.dmet.dmet"]], "vayesta.dmet.fragment": [[11, "module-vayesta.dmet.fragment"]], "vayesta.dmet.pdmet": [[11, "module-vayesta.dmet.pdmet"]], "vayesta.dmet.sdp_sc": [[11, "module-vayesta.dmet.sdp_sc"]], "vayesta.dmet.udmet": [[11, "module-vayesta.dmet.udmet"]], "vayesta.dmet.ufragment": [[11, "module-vayesta.dmet.ufragment"]], "vayesta.dmet.updates": [[11, "module-vayesta.dmet.updates"]], "wf (vayesta.dmet.fragment.dmetfragment.results attribute)": [[11, "vayesta.dmet.fragment.DMETFragment.Results.wf"]], "wf (vayesta.dmet.ufragment.udmetfragment.results attribute)": [[11, "vayesta.dmet.ufragment.UDMETFragment.Results.wf"]], "with_traceback() (vayesta.dmet.fragment.dmetfragmentexit method)": [[11, "vayesta.dmet.fragment.DMETFragmentExit.with_traceback"]], "write_population() (vayesta.dmet.dmet.dmet method)": [[11, "vayesta.dmet.dmet.DMET.write_population"]], "write_population() (vayesta.dmet.udmet.udmet method)": [[11, "vayesta.dmet.udmet.UDMET.write_population"]], "edmet (class in vayesta.edmet.edmet)": [[12, "vayesta.edmet.edmet.EDMET"]], "edmet() (in module vayesta.edmet)": [[12, "vayesta.edmet.EDMET"]], "edmet.options (class in vayesta.edmet.edmet)": [[12, "vayesta.edmet.edmet.EDMET.Options"]], "edmetfragment (class in vayesta.edmet.fragment)": [[12, "vayesta.edmet.fragment.EDMETFragment"]], "edmetfragment.flags (class in vayesta.edmet.fragment)": [[12, "vayesta.edmet.fragment.EDMETFragment.Flags"]], "edmetfragment.options (class in vayesta.edmet.fragment)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options"]], "edmetfragment.results (class in vayesta.edmet.fragment)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results"]], "edmetfragmentexit": [[12, "vayesta.edmet.fragment.EDMETFragmentExit"]], "edmetresults (class in vayesta.edmet.edmet)": [[12, "vayesta.edmet.edmet.EDMETResults"]], "fragment (vayesta.edmet.edmet.edmet attribute)": [[12, "vayesta.edmet.edmet.EDMET.Fragment"]], "fragment (vayesta.edmet.uedmet.uedmet attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Fragment"]], "options (class in vayesta.edmet.edmet)": [[12, "vayesta.edmet.edmet.Options"]], "options (class in vayesta.edmet.fragment)": [[12, "vayesta.edmet.fragment.Options"]], "redmet (in module vayesta.edmet.edmet)": [[12, "vayesta.edmet.edmet.REDMET"]], "uedmet (class in vayesta.edmet.uedmet)": [[12, "vayesta.edmet.uedmet.UEDMET"]], "uedmet.options (class in vayesta.edmet.uedmet)": [[12, "vayesta.edmet.uedmet.UEDMET.Options"]], "uedmetfragment (class in vayesta.edmet.ufragment)": [[12, "vayesta.edmet.ufragment.UEDMETFragment"]], "uedmetfragment.flags (class in vayesta.edmet.ufragment)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Flags"]], "uedmetfragment.options (class in vayesta.edmet.ufragment)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options"]], "uedmetfragment.results (class in vayesta.edmet.ufragment)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results"]], "add_tsymmetric_fragments() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.add_tsymmetric_fragments"]], "add_tsymmetric_fragments() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.add_tsymmetric_fragments"]], "args (vayesta.edmet.fragment.edmetfragmentexit attribute)": [[12, "vayesta.edmet.fragment.EDMETFragmentExit.args"]], "asdict() (vayesta.edmet.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.EDMET.Options.asdict"]], "asdict() (vayesta.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.Options.asdict"]], "asdict() (vayesta.edmet.fragment.edmetfragment.options method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.asdict"]], "asdict() (vayesta.edmet.fragment.options method)": [[12, "vayesta.edmet.fragment.Options.asdict"]], "asdict() (vayesta.edmet.uedmet.uedmet.options method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.asdict"]], "asdict() (vayesta.edmet.ufragment.uedmetfragment.options method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.asdict"]], "auxiliary (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.auxiliary"]], "auxiliary (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.auxiliary"]], "auxiliary (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.auxiliary"]], "bath_options (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.bath_options"]], "bath_options (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.bath_options"]], "bath_options (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.bath_options"]], "bath_options (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.bath_options"]], "bath_options (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.bath_options"]], "bath_options (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.bath_options"]], "bath_parent_fragment_id (vayesta.edmet.fragment.edmetfragment.flags attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Flags.bath_parent_fragment_id"]], "bath_parent_fragment_id (vayesta.edmet.ufragment.uedmetfragment.flags attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Flags.bath_parent_fragment_id"]], "bogoliubov_decouple() (in module vayesta.edmet.fragment)": [[12, "vayesta.edmet.fragment.bogoliubov_decouple"]], "boson_freqs (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.boson_freqs"]], "boson_freqs (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.boson_freqs"]], "boson_xc_kernel (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.boson_xc_kernel"]], "boson_xc_kernel (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.boson_xc_kernel"]], "boson_xc_kernel (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.boson_xc_kernel"]], "boson_xc_kernel (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.boson_xc_kernel"]], "boson_xc_kernel (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.boson_xc_kernel"]], "boson_xc_kernel (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.boson_xc_kernel"]], "bosonic_interaction (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.bosonic_interaction"]], "bosonic_interaction (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.bosonic_interaction"]], "bosonic_interaction (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.bosonic_interaction"]], "bosonic_interaction (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.bosonic_interaction"]], "bosonic_interaction (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.bosonic_interaction"]], "bosonic_interaction (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.bosonic_interaction"]], "brueckner_scmf() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.brueckner_scmf"]], "brueckner_scmf() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.brueckner_scmf"]], "build_screened_eris() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.build_screened_eris"]], "build_screened_eris() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.build_screened_eris"]], "calc_electron_number_defect() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.calc_electron_number_defect"]], "calc_electron_number_defect() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.calc_electron_number_defect"]], "calc_exact_ac() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.calc_exact_ac"]], "calc_exact_ac() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.calc_exact_ac"]], "canonicalize_mo() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.canonicalize_mo"]], "canonicalize_mo() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.canonicalize_mo"]], "cas_fragmentation() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.cas_fragmentation"]], "cas_fragmentation() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.cas_fragmentation"]], "change_dict_defaults() (vayesta.edmet.edmet.edmet.options class method)": [[12, "vayesta.edmet.edmet.EDMET.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.edmet.edmet.options class method)": [[12, "vayesta.edmet.edmet.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.edmet.fragment.edmetfragment.options class method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.edmet.fragment.options class method)": [[12, "vayesta.edmet.fragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.edmet.uedmet.uedmet.options class method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.edmet.ufragment.uedmetfragment.options class method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.change_dict_defaults"]], "change_options() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.change_options"]], "change_options() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.change_options"]], "change_options() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.change_options"]], "change_options() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.change_options"]], "charge_consistent (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.charge_consistent"]], "charge_consistent (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.charge_consistent"]], "charge_consistent (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.charge_consistent"]], "check_fragment_symmetry() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.check_fragment_symmetry"]], "check_fragment_symmetry() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.check_fragment_symmetry"]], "check_qba_approx() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.check_qba_approx"]], "check_qba_approx() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.check_qba_approx"]], "check_solver() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.check_solver"]], "check_solver() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.check_solver"]], "check_solver() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.check_solver"]], "check_solver() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.check_solver"]], "cluster (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.cluster"]], "cluster (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.cluster"]], "cluster_sizes (vayesta.edmet.edmet.edmetresults attribute)": [[12, "vayesta.edmet.edmet.EDMETResults.cluster_sizes"]], "communicate_clusters() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.communicate_clusters"]], "communicate_clusters() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.communicate_clusters"]], "construct_boson_hamil() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.construct_boson_hamil"]], "construct_boson_hamil() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.construct_boson_hamil"]], "construct_correlation_kernel_contrib() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.construct_correlation_kernel_contrib"]], "construct_correlation_kernel_contrib() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.construct_correlation_kernel_contrib"]], "contributes (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.contributes"]], "contributes (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.contributes"]], "conv_to_aos() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.conv_to_aos"]], "conv_to_aos() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.conv_to_aos"]], "conv_tol (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.conv_tol"]], "conv_tol (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.conv_tol"]], "conv_tol (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.conv_tol"]], "converged (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.converged"]], "converged (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.converged"]], "copy() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.copy"]], "copy() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.copy"]], "couple_to_fragment() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.couple_to_fragment"]], "couple_to_fragment() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.couple_to_fragment"]], "couple_to_fragments() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.couple_to_fragments"]], "couple_to_fragments() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.couple_to_fragments"]], "coupled_fragments (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.coupled_fragments"]], "coupled_fragments (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.coupled_fragments"]], "coupled_fragments (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.coupled_fragments"]], "create_invsym_fragments() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.create_invsym_fragments"]], "create_invsym_fragments() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.create_invsym_fragments"]], "create_mirrorsym_fragments() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.create_mirrorsym_fragments"]], "create_mirrorsym_fragments() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.create_mirrorsym_fragments"]], "create_rotsym_fragments() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.create_rotsym_fragments"]], "create_rotsym_fragments() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.create_rotsym_fragments"]], "create_symmetric_fragments() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.create_symmetric_fragments"]], "create_symmetric_fragments() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.create_symmetric_fragments"]], "create_transsym_fragments() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.create_transsym_fragments"]], "create_transsym_fragments() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.create_transsym_fragments"]], "dd_mom0 (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.dd_mom0"]], "dd_mom0 (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.dd_mom0"]], "dd_mom1 (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.dd_mom1"]], "dd_mom1 (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.dd_mom1"]], "define_bosons() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.define_bosons"]], "define_bosons() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.define_bosons"]], "df (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.df"]], "df (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.df"]], "diagonalize_cluster_dm() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.diagonalize_cluster_dm"]], "diagonalize_cluster_dm() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.diagonalize_cluster_dm"]], "dict_with_defaults() (vayesta.edmet.edmet.edmet.options static method)": [[12, "vayesta.edmet.edmet.EDMET.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.edmet.edmet.options static method)": [[12, "vayesta.edmet.edmet.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.edmet.fragment.edmetfragment.options static method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.edmet.fragment.options static method)": [[12, "vayesta.edmet.fragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.edmet.uedmet.uedmet.options static method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.edmet.ufragment.uedmetfragment.options static method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.dict_with_defaults"]], "diis (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.diis"]], "diis (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.diis"]], "diis (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.diis"]], "dm1 (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.dm1"]], "dm1 (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.dm1"]], "dm2 (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.dm2"]], "dm2 (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.dm2"]], "dm_eb (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.dm_eb"]], "dm_eb (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.dm_eb"]], "dm_with_frozen (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.dm_with_frozen"]], "e1 (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.e1"]], "e1 (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.e1"]], "e2 (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.e2"]], "e2 (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.e2"]], "e_corr (vayesta.edmet.edmet.edmetresults attribute)": [[12, "vayesta.edmet.edmet.EDMETResults.e_corr"]], "e_corr (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.e_corr"]], "e_corr (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.e_corr"]], "e_fb (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.e_fb"]], "e_fb (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.e_fb"]], "e_mf (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.e_mf"]], "e_mf (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.e_mf"]], "e_nuc (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.e_nuc"]], "e_nuc (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.e_nuc"]], "e_tot (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.e_tot"]], "e_tot (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.e_tot"]], "eb_couplings (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.eb_couplings"]], "eb_couplings (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.eb_couplings"]], "energy_couplings (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.energy_couplings"]], "energy_couplings (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.energy_couplings"]], "eps (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.eps"]], "eps (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.eps"]], "fid (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.fid"]], "fid (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.fid"]], "get() (vayesta.edmet.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.EDMET.Options.get"]], "get() (vayesta.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.Options.get"]], "get() (vayesta.edmet.fragment.edmetfragment.options method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.get"]], "get() (vayesta.edmet.fragment.options method)": [[12, "vayesta.edmet.fragment.Options.get"]], "get() (vayesta.edmet.uedmet.uedmet.options method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.get"]], "get() (vayesta.edmet.ufragment.uedmetfragment.options method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.get"]], "get_atomic_charges() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_atomic_charges"]], "get_atomic_charges() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_atomic_charges"]], "get_average_cluster_size() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_average_cluster_size"]], "get_average_cluster_size() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_average_cluster_size"]], "get_cderi() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_cderi"]], "get_cderi() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_cderi"]], "get_co_active() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_co_active"]], "get_co_active() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_co_active"]], "get_coeff_env() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_coeff_env"]], "get_coeff_env() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_coeff_env"]], "get_composite_moments() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_composite_moments"]], "get_composite_moments() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_composite_moments"]], "get_correlation_kernel_contrib() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_correlation_kernel_contrib"]], "get_correlation_kernel_contrib() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_correlation_kernel_contrib"]], "get_corrfunc() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_corrfunc"]], "get_corrfunc() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_corrfunc"]], "get_corrfunc_mf() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_corrfunc_mf"]], "get_corrfunc_mf() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_corrfunc_mf"]], "get_cv_active() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_cv_active"]], "get_cv_active() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_cv_active"]], "get_default() (vayesta.edmet.edmet.edmet.options class method)": [[12, "vayesta.edmet.edmet.EDMET.Options.get_default"]], "get_default() (vayesta.edmet.edmet.options class method)": [[12, "vayesta.edmet.edmet.Options.get_default"]], "get_default() (vayesta.edmet.fragment.edmetfragment.options class method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.get_default"]], "get_default() (vayesta.edmet.fragment.options class method)": [[12, "vayesta.edmet.fragment.Options.get_default"]], "get_default() (vayesta.edmet.uedmet.uedmet.options class method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.get_default"]], "get_default() (vayesta.edmet.ufragment.uedmetfragment.options class method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.get_default"]], "get_default_factory() (vayesta.edmet.edmet.edmet.options class method)": [[12, "vayesta.edmet.edmet.EDMET.Options.get_default_factory"]], "get_default_factory() (vayesta.edmet.edmet.options class method)": [[12, "vayesta.edmet.edmet.Options.get_default_factory"]], "get_default_factory() (vayesta.edmet.fragment.edmetfragment.options class method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.get_default_factory"]], "get_default_factory() (vayesta.edmet.fragment.options class method)": [[12, "vayesta.edmet.fragment.Options.get_default_factory"]], "get_default_factory() (vayesta.edmet.uedmet.uedmet.options class method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.get_default_factory"]], "get_default_factory() (vayesta.edmet.ufragment.uedmetfragment.options class method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.get_default_factory"]], "get_dmet_elec_energy() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_dmet_elec_energy"]], "get_dmet_elec_energy() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_dmet_elec_energy"]], "get_dmet_energy() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_dmet_energy"]], "get_dmet_energy() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_dmet_energy"]], "get_dmet_energy_contrib() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_dmet_energy_contrib"]], "get_dmet_energy_contrib() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_dmet_energy_contrib"]], "get_edmet_energy_contrib() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_edmet_energy_contrib"]], "get_edmet_energy_contrib() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_edmet_energy_contrib"]], "get_eri_couplings() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_eri_couplings"]], "get_eri_couplings() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_eri_couplings"]], "get_eris_array() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_eris_array"]], "get_eris_array() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_eris_array"]], "get_eris_array_uhf() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_eris_array_uhf"]], "get_eris_object() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_eris_object"]], "get_eris_object() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_eris_object"]], "get_exxdiv() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_exxdiv"]], "get_exxdiv() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_exxdiv"]], "get_fock() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_fock"]], "get_fock() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_fock"]], "get_fock() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_fock"]], "get_fock() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_fock"]], "get_fock_for_bath() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_fock_for_bath"]], "get_fock_for_bath() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_fock_for_bath"]], "get_fock_for_energy() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_fock_for_energy"]], "get_fock_for_energy() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_fock_for_energy"]], "get_frag_hamil() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_frag_hamil"]], "get_frag_hamil() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_frag_hamil"]], "get_frag_hl_dm() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_frag_hl_dm"]], "get_frag_hl_dm() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_frag_hl_dm"]], "get_fragment_dmet_energy() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_fragment_dmet_energy"]], "get_fragment_dmet_energy() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_fragment_dmet_energy"]], "get_fragment_mf_energy() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_fragment_mf_energy"]], "get_fragment_mf_energy() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_fragment_mf_energy"]], "get_fragment_mo_energy() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_fragment_mo_energy"]], "get_fragment_mo_energy() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_fragment_mo_energy"]], "get_fragment_overlap_norm() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_fragment_overlap_norm"]], "get_fragment_overlap_norm() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_fragment_overlap_norm"]], "get_fragment_projector() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_fragment_projector"]], "get_fragment_projector() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_fragment_projector"]], "get_fragment_projector_ov() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_fragment_projector_ov"]], "get_fragment_projector_ov() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_fragment_projector_ov"]], "get_fragments() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_fragments"]], "get_fragments() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_fragments"]], "get_fragments_with_overlap() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_fragments_with_overlap"]], "get_fragments_with_overlap() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_fragments_with_overlap"]], "get_hcore() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_hcore"]], "get_hcore() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_hcore"]], "get_hcore_for_energy() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_hcore_for_energy"]], "get_hcore_for_energy() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_hcore_for_energy"]], "get_impurity_coeffs() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_impurity_coeffs"]], "get_impurity_coeffs() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_impurity_coeffs"]], "get_lo_coeff() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_lo_coeff"]], "get_lo_coeff() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_lo_coeff"]], "get_loc_eps() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_loc_eps"]], "get_loc_eps() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_loc_eps"]], "get_max_cluster_size() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_max_cluster_size"]], "get_max_cluster_size() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_max_cluster_size"]], "get_mean_cluster_size() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_mean_cluster_size"]], "get_mean_cluster_size() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_mean_cluster_size"]], "get_min_cluster_size() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_min_cluster_size"]], "get_min_cluster_size() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_min_cluster_size"]], "get_mo_occupation() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_mo_occupation"]], "get_mo_occupation() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_mo_occupation"]], "get_nelectron_hl() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_nelectron_hl"]], "get_nelectron_hl() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_nelectron_hl"]], "get_overlap() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_overlap"]], "get_overlap() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_overlap"]], "get_ovlp() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_ovlp"]], "get_ovlp() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_ovlp"]], "get_ovlp_power() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_ovlp_power"]], "get_ovlp_power() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_ovlp_power"]], "get_rbos_split() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_rbos_split"]], "get_rbos_split() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_rbos_split"]], "get_rot_ov_frag() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_rot_ov_frag"]], "get_rot_ov_frag() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_rot_ov_frag"]], "get_rot_to_mf_ov() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_rot_to_mf_ov"]], "get_rot_to_mf_ov() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_rot_to_mf_ov"]], "get_solver() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_solver"]], "get_solver() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_solver"]], "get_solver_options() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_solver_options"]], "get_solver_options() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_solver_options"]], "get_symmetry_child_fragments() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_symmetry_child_fragments"]], "get_symmetry_child_fragments() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_symmetry_child_fragments"]], "get_symmetry_children() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_symmetry_children"]], "get_symmetry_children() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_symmetry_children"]], "get_symmetry_error() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_symmetry_error"]], "get_symmetry_error() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_symmetry_error"]], "get_symmetry_generations() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_symmetry_generations"]], "get_symmetry_generations() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_symmetry_generations"]], "get_symmetry_operation() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_symmetry_operation"]], "get_symmetry_operation() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_symmetry_operation"]], "get_symmetry_parent() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_symmetry_parent"]], "get_symmetry_parent() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_symmetry_parent"]], "get_symmetry_parent_fragments() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_symmetry_parent_fragments"]], "get_symmetry_parent_fragments() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_symmetry_parent_fragments"]], "get_symmetry_tree() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_symmetry_tree"]], "get_symmetry_tree() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_symmetry_tree"]], "get_updated_correlation_kernel() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_updated_correlation_kernel"]], "get_updated_correlation_kernel() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_updated_correlation_kernel"]], "get_veff() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_veff"]], "get_veff() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_veff"]], "get_veff_for_energy() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.get_veff_for_energy"]], "get_veff_for_energy() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.get_veff_for_energy"]], "get_xc_couplings() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.get_xc_couplings"]], "get_xc_couplings() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.get_xc_couplings"]], "global_frag_chempot (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.global_frag_chempot"]], "global_frag_chempot (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.global_frag_chempot"]], "global_frag_chempot (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.global_frag_chempot"]], "hamil (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.hamil"]], "hamil (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.hamil"]], "has_complete_fragmentation() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.has_complete_fragmentation"]], "has_complete_fragmentation() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.has_complete_fragmentation"]], "has_complete_occupied_fragmentation() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.has_complete_occupied_fragmentation"]], "has_complete_occupied_fragmentation() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.has_complete_occupied_fragmentation"]], "has_complete_virtual_fragmentation() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.has_complete_virtual_fragmentation"]], "has_complete_virtual_fragmentation() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.has_complete_virtual_fragmentation"]], "has_df (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.has_df"]], "has_df (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.has_df"]], "has_exxdiv (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.has_exxdiv"]], "has_exxdiv (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.has_exxdiv"]], "has_orthonormal_fragmentation() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.has_orthonormal_fragmentation"]], "has_orthonormal_fragmentation() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.has_orthonormal_fragmentation"]], "iao_fragmentation() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.iao_fragmentation"]], "iao_fragmentation() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.iao_fragmentation"]], "iao_minao (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.iao_minao"]], "iao_minao (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.iao_minao"]], "iao_minao (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.iao_minao"]], "iaopao_fragmentation() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.iaopao_fragmentation"]], "iaopao_fragmentation() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.iaopao_fragmentation"]], "id_name (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.id_name"]], "id_name (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.id_name"]], "improve_nl_energy() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.improve_nl_energy"]], "improve_nl_energy() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.improve_nl_energy"]], "init_mf() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.init_mf"]], "init_mf() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.init_mf"]], "is_envelop (vayesta.edmet.fragment.edmetfragment.flags attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Flags.is_envelop"]], "is_envelop (vayesta.edmet.ufragment.uedmetfragment.flags attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Flags.is_envelop"]], "is_rhf (vayesta.edmet.edmet.edmet attribute)": [[12, "vayesta.edmet.edmet.EDMET.is_rhf"]], "is_rhf (vayesta.edmet.uedmet.uedmet attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.is_rhf"]], "is_secfrag (vayesta.edmet.fragment.edmetfragment.flags attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Flags.is_secfrag"]], "is_secfrag (vayesta.edmet.ufragment.uedmetfragment.flags attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Flags.is_secfrag"]], "is_uhf (vayesta.edmet.edmet.edmet attribute)": [[12, "vayesta.edmet.edmet.EDMET.is_uhf"]], "is_uhf (vayesta.edmet.uedmet.uedmet attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.is_uhf"]], "items() (vayesta.edmet.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.EDMET.Options.items"]], "items() (vayesta.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.Options.items"]], "items() (vayesta.edmet.fragment.edmetfragment.options method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.items"]], "items() (vayesta.edmet.fragment.options method)": [[12, "vayesta.edmet.fragment.Options.items"]], "items() (vayesta.edmet.uedmet.uedmet.options method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.items"]], "items() (vayesta.edmet.ufragment.uedmetfragment.options method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.items"]], "kernel() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.kernel"]], "kernel() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.kernel"]], "kernel() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.kernel"]], "kernel() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.kernel"]], "keys() (vayesta.edmet.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.EDMET.Options.keys"]], "keys() (vayesta.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.Options.keys"]], "keys() (vayesta.edmet.fragment.edmetfragment.options method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.keys"]], "keys() (vayesta.edmet.fragment.options method)": [[12, "vayesta.edmet.fragment.Options.keys"]], "keys() (vayesta.edmet.uedmet.uedmet.options method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.keys"]], "keys() (vayesta.edmet.ufragment.uedmetfragment.options method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.keys"]], "log_info() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.log_info"]], "log_info() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.log_info"]], "loop() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.loop"]], "loop() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.loop"]], "loop_symmetry_children() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.loop_symmetry_children"]], "loop_symmetry_children() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.loop_symmetry_children"]], "make_bath() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.make_bath"]], "make_bath() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.make_bath"]], "make_cluster() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.make_cluster"]], "make_cluster() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.make_cluster"]], "make_counterpoise_mol() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.make_counterpoise_mol"]], "make_counterpoise_mol() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.make_counterpoise_mol"]], "make_dd_moments (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.make_dd_moments"]], "make_dd_moments (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.make_dd_moments"]], "make_dd_moments (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.make_dd_moments"]], "make_dd_moments (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.make_dd_moments"]], "make_dd_moments (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.make_dd_moments"]], "make_dd_moments (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.make_dd_moments"]], "make_rdm1() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.make_rdm1"]], "make_rdm1() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.make_rdm1"]], "make_rdm1_demo() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.make_rdm1_demo"]], "make_rdm1_demo() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.make_rdm1_demo"]], "make_rdm2() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.make_rdm2"]], "make_rdm2() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.make_rdm2"]], "make_rdm2_demo() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.make_rdm2_demo"]], "make_rdm2_demo() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.make_rdm2_demo"]], "make_tsymmetric_fragments() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.make_tsymmetric_fragments"]], "make_tsymmetric_fragments() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.make_tsymmetric_fragments"]], "max_bos (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.max_bos"]], "max_bos (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.max_bos"]], "max_bos (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.max_bos"]], "max_bos (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.max_bos"]], "max_bos (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.max_bos"]], "max_bos (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.max_bos"]], "max_elec_err (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.max_elec_err"]], "max_elec_err (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.max_elec_err"]], "max_elec_err (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.max_elec_err"]], "maxiter (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.maxiter"]], "maxiter (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.maxiter"]], "maxiter (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.maxiter"]], "mf (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.mf"]], "mf (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.mf"]], "mixing_param (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.mixing_param"]], "mixing_param (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.mixing_param"]], "mixing_param (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.mixing_param"]], "mixing_variable (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.mixing_variable"]], "mixing_variable (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.mixing_variable"]], "mixing_variable (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.mixing_variable"]], "mo_coeff (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.mo_coeff"]], "mo_coeff (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.mo_coeff"]], "mo_coeff_occ (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.mo_coeff_occ"]], "mo_coeff_occ (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.mo_coeff_occ"]], "mo_coeff_vir (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.mo_coeff_vir"]], "mo_coeff_vir (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.mo_coeff_vir"]], "mo_energy (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.mo_energy"]], "mo_energy (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.mo_energy"]], "mo_energy_occ (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.mo_energy_occ"]], "mo_energy_occ (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.mo_energy_occ"]], "mo_energy_vir (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.mo_energy_vir"]], "mo_energy_vir (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.mo_energy_vir"]], "mo_occ (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.mo_occ"]], "mo_occ (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.mo_occ"]], "mol (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.mol"]], "mol (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.mol"]], "mol (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.mol"]], "mol (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.mol"]], "n_active (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.n_active"]], "n_active (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.n_active"]], "n_frag (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.n_frag"]], "n_frag (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.n_frag"]], "n_symmetry_children (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.n_symmetry_children"]], "n_symmetry_children (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.n_symmetry_children"]], "nao (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.nao"]], "nao (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.nao"]], "nbos (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.nbos"]], "nbos (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.nbos"]], "ncells (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.ncells"]], "ncells (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.ncells"]], "nclus_ab (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.nclus_ab"]], "nclus_ab (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.nclus_ab"]], "nelectron (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.nelectron"]], "nelectron (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.nelectron"]], "nfrag (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.nfrag"]], "nfrag (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.nfrag"]], "nmo (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.nmo"]], "nmo (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.nmo"]], "nocc (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.nocc"]], "nocc (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.nocc"]], "nocc_ab (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.nocc_ab"]], "nocc_ab (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.nocc_ab"]], "nvir (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.nvir"]], "nvir (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.nvir"]], "nvir_ab (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.nvir_ab"]], "nvir_ab (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.nvir_ab"]], "occ_proj_kernel (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.occ_proj_kernel"]], "occ_proj_kernel (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.occ_proj_kernel"]], "occ_proj_kernel (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.occ_proj_kernel"]], "occ_proj_kernel (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.occ_proj_kernel"]], "occ_proj_kernel (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.occ_proj_kernel"]], "occ_proj_kernel (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.occ_proj_kernel"]], "old_sc_condition (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.old_sc_condition"]], "old_sc_condition (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.old_sc_condition"]], "old_sc_condition (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.old_sc_condition"]], "old_sc_condition (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.old_sc_condition"]], "old_sc_condition (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.old_sc_condition"]], "old_sc_condition (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.old_sc_condition"]], "oneshot (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.oneshot"]], "oneshot (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.oneshot"]], "oneshot (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.oneshot"]], "optimize_chempot() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.optimize_chempot"]], "optimize_chempot() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.optimize_chempot"]], "ov_active (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.ov_active"]], "ov_active (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.ov_active"]], "ov_active_ab (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.ov_active_ab"]], "ov_active_ab (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.ov_active_ab"]], "ov_active_tot (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.ov_active_tot"]], "ov_active_tot (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.ov_active_tot"]], "ov_mf (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.ov_mf"]], "ov_mf (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.ov_mf"]], "pbc_dimension (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.pbc_dimension"]], "pbc_dimension (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.pbc_dimension"]], "pdmet_scmf() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.pdmet_scmf"]], "pdmet_scmf() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.pdmet_scmf"]], "plot3d() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.plot3d"]], "plot3d() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.plot3d"]], "pop_analysis() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.pop_analysis"]], "pop_analysis() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.pop_analysis"]], "pop_analysis() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.pop_analysis"]], "pop_analysis() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.pop_analysis"]], "print_clusters() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.print_clusters"]], "print_clusters() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.print_clusters"]], "print_results() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.print_results"]], "print_results() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.print_results"]], "proj_hamil_qba() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.proj_hamil_qba"]], "proj_hamil_qba() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.proj_hamil_qba"]], "project_ref_orbitals() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.project_ref_orbitals"]], "project_ref_orbitals() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.project_ref_orbitals"]], "pwf (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.pwf"]], "pwf (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.pwf"]], "r_ao_bos (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.r_ao_bos"]], "r_ao_bos (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.r_ao_bos"]], "r_bos (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.r_bos"]], "r_bos (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.r_bos"]], "r_bos_ao (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.r_bos_ao"]], "r_bos_ao (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.r_bos_ao"]], "replace() (vayesta.edmet.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.EDMET.Options.replace"]], "replace() (vayesta.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.Options.replace"]], "replace() (vayesta.edmet.fragment.edmetfragment.options method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.replace"]], "replace() (vayesta.edmet.fragment.options method)": [[12, "vayesta.edmet.fragment.Options.replace"]], "replace() (vayesta.edmet.uedmet.uedmet.options method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.replace"]], "replace() (vayesta.edmet.ufragment.uedmetfragment.options method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.replace"]], "require_complete_fragmentation() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.require_complete_fragmentation"]], "require_complete_fragmentation() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.require_complete_fragmentation"]], "reset() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.reset"]], "reset() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.reset"]], "reset() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.reset"]], "reset() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.reset"]], "results (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.results"]], "results (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.results"]], "run_exact_full_ac() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.run_exact_full_ac"]], "run_exact_full_ac() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.run_exact_full_ac"]], "sao_fragmentation() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.sao_fragmentation"]], "sao_fragmentation() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.sao_fragmentation"]], "screening (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.screening"]], "screening (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.screening"]], "screening (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.screening"]], "screening (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.screening"]], "screening (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.screening"]], "screening (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.screening"]], "set_cas() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.set_cas"]], "set_hcore() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.set_hcore"]], "set_hcore() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.set_hcore"]], "set_ovlp() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.set_ovlp"]], "set_ovlp() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.set_ovlp"]], "set_up_fermionic_bath() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.set_up_fermionic_bath"]], "set_up_fermionic_bath() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.set_up_fermionic_bath"]], "set_up_fragments() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.set_up_fragments"]], "set_up_fragments() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.set_up_fragments"]], "set_veff() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.set_veff"]], "set_veff() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.set_veff"]], "site_fragmentation() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.site_fragmentation"]], "site_fragmentation() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.site_fragmentation"]], "solver_options (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.solver_options"]], "solver_options (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.solver_options"]], "solver_options (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.solver_options"]], "solver_options (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.solver_options"]], "solver_options (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.solver_options"]], "solver_options (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.solver_options"]], "spinsym (vayesta.edmet.edmet.edmet attribute)": [[12, "vayesta.edmet.edmet.EDMET.spinsym"]], "spinsym (vayesta.edmet.uedmet.uedmet attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.spinsym"]], "split_ov_spin_components() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.split_ov_spin_components"]], "split_ov_spin_components() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.split_ov_spin_components"]], "store_cluster_rpa() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.store_cluster_rpa"]], "store_cluster_rpa() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.store_cluster_rpa"]], "store_eris (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.store_eris"]], "store_eris (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.store_eris"]], "store_eris (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.store_eris"]], "store_eris (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.store_eris"]], "store_eris (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.store_eris"]], "store_eris (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.store_eris"]], "sym_factor (vayesta.edmet.fragment.edmetfragment.options attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.sym_factor"]], "sym_factor (vayesta.edmet.fragment.options attribute)": [[12, "vayesta.edmet.fragment.Options.sym_factor"]], "sym_factor (vayesta.edmet.ufragment.uedmetfragment.options attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.sym_factor"]], "symmetry_factor (vayesta.edmet.fragment.edmetfragment property)": [[12, "vayesta.edmet.fragment.EDMETFragment.symmetry_factor"]], "symmetry_factor (vayesta.edmet.ufragment.uedmetfragment property)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.symmetry_factor"]], "symmetry_mf_tol (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.symmetry_mf_tol"]], "symmetry_mf_tol (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.symmetry_mf_tol"]], "symmetry_mf_tol (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.symmetry_mf_tol"]], "symmetry_tol (vayesta.edmet.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.EDMET.Options.symmetry_tol"]], "symmetry_tol (vayesta.edmet.edmet.options attribute)": [[12, "vayesta.edmet.edmet.Options.symmetry_tol"]], "symmetry_tol (vayesta.edmet.uedmet.uedmet.options attribute)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.symmetry_tol"]], "test_total_rpa_energy() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.test_total_rpa_energy"]], "test_total_rpa_energy() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.test_total_rpa_energy"]], "trimmed_name() (vayesta.edmet.fragment.edmetfragment method)": [[12, "vayesta.edmet.fragment.EDMETFragment.trimmed_name"]], "trimmed_name() (vayesta.edmet.ufragment.uedmetfragment method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.trimmed_name"]], "update() (vayesta.edmet.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.EDMET.Options.update"]], "update() (vayesta.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.Options.update"]], "update() (vayesta.edmet.fragment.edmetfragment.options method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.update"]], "update() (vayesta.edmet.fragment.options method)": [[12, "vayesta.edmet.fragment.Options.update"]], "update() (vayesta.edmet.uedmet.uedmet.options method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.update"]], "update() (vayesta.edmet.ufragment.uedmetfragment.options method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.update"]], "update_mf() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.update_mf"]], "update_mf() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.update_mf"]], "update_vcorr() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.update_vcorr"]], "update_vcorr() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.update_vcorr"]], "values() (vayesta.edmet.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.EDMET.Options.values"]], "values() (vayesta.edmet.edmet.options method)": [[12, "vayesta.edmet.edmet.Options.values"]], "values() (vayesta.edmet.fragment.edmetfragment.options method)": [[12, "vayesta.edmet.fragment.EDMETFragment.Options.values"]], "values() (vayesta.edmet.fragment.options method)": [[12, "vayesta.edmet.fragment.Options.values"]], "values() (vayesta.edmet.uedmet.uedmet.options method)": [[12, "vayesta.edmet.uedmet.UEDMET.Options.values"]], "values() (vayesta.edmet.ufragment.uedmetfragment.options method)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Options.values"]], "vayesta.edmet": [[12, "module-vayesta.edmet"]], "vayesta.edmet.edmet": [[12, "module-vayesta.edmet.edmet"]], "vayesta.edmet.fragment": [[12, "module-vayesta.edmet.fragment"]], "vayesta.edmet.uedmet": [[12, "module-vayesta.edmet.uedmet"]], "vayesta.edmet.ufragment": [[12, "module-vayesta.edmet.ufragment"]], "wf (vayesta.edmet.fragment.edmetfragment.results attribute)": [[12, "vayesta.edmet.fragment.EDMETFragment.Results.wf"]], "wf (vayesta.edmet.ufragment.uedmetfragment.results attribute)": [[12, "vayesta.edmet.ufragment.UEDMETFragment.Results.wf"]], "with_df (vayesta.edmet.edmet.edmet property)": [[12, "vayesta.edmet.edmet.EDMET.with_df"]], "with_df (vayesta.edmet.uedmet.uedmet property)": [[12, "vayesta.edmet.uedmet.UEDMET.with_df"]], "with_traceback() (vayesta.edmet.fragment.edmetfragmentexit method)": [[12, "vayesta.edmet.fragment.EDMETFragmentExit.with_traceback"]], "write_population() (vayesta.edmet.edmet.edmet method)": [[12, "vayesta.edmet.edmet.EDMET.write_population"]], "write_population() (vayesta.edmet.uedmet.uedmet method)": [[12, "vayesta.edmet.uedmet.UEDMET.write_population"]], "ewf (class in vayesta.ewf.ewf)": [[13, "vayesta.ewf.ewf.EWF"]], "ewf() (in module vayesta.ewf)": [[13, "vayesta.ewf.EWF"]], "ewf.fragment (class in vayesta.ewf.ewf)": [[13, "vayesta.ewf.ewf.EWF.Fragment"]], "ewf.fragment.flags (class in vayesta.ewf.ewf)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Flags"]], "ewf.fragment.options (class in vayesta.ewf.ewf)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options"]], "ewf.fragment.results (class in vayesta.ewf.ewf)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results"]], "ewf.options (class in vayesta.ewf.ewf)": [[13, "vayesta.ewf.ewf.EWF.Options"]], "fragment (class in vayesta.ewf.fragment)": [[13, "vayesta.ewf.fragment.Fragment"]], "fragment (class in vayesta.ewf.ufragment)": [[13, "vayesta.ewf.ufragment.Fragment"]], "fragment.flags (class in vayesta.ewf.fragment)": [[13, "vayesta.ewf.fragment.Fragment.Flags"]], "fragment.flags (class in vayesta.ewf.ufragment)": [[13, "vayesta.ewf.ufragment.Fragment.Flags"]], "fragment.options (class in vayesta.ewf.fragment)": [[13, "vayesta.ewf.fragment.Fragment.Options"]], "fragment.options (class in vayesta.ewf.ufragment)": [[13, "vayesta.ewf.ufragment.Fragment.Options"]], "fragment.results (class in vayesta.ewf.fragment)": [[13, "vayesta.ewf.fragment.Fragment.Results"]], "fragment.results (class in vayesta.ewf.ufragment)": [[13, "vayesta.ewf.ufragment.Fragment.Results"]], "options (class in vayesta.ewf.ewf)": [[13, "vayesta.ewf.ewf.Options"]], "options (class in vayesta.ewf.fragment)": [[13, "vayesta.ewf.fragment.Options"]], "rewf (in module vayesta.ewf.ewf)": [[13, "vayesta.ewf.ewf.REWF"]], "uewf (class in vayesta.ewf.uewf)": [[13, "vayesta.ewf.uewf.UEWF"]], "uewf.fragment (class in vayesta.ewf.uewf)": [[13, "vayesta.ewf.uewf.UEWF.Fragment"]], "uewf.fragment.flags (class in vayesta.ewf.uewf)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Flags"]], "uewf.fragment.options (class in vayesta.ewf.uewf)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options"]], "uewf.fragment.results (class in vayesta.ewf.uewf)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results"]], "uewf.options (class in vayesta.ewf.uewf)": [[13, "vayesta.ewf.uewf.UEWF.Options"]], "add_external_corrections() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.add_external_corrections"]], "add_external_corrections() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.add_external_corrections"]], "add_external_corrections() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.add_external_corrections"]], "add_external_corrections() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.add_external_corrections"]], "add_tsymmetric_fragments() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.add_tsymmetric_fragments"]], "add_tsymmetric_fragments() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.add_tsymmetric_fragments"]], "add_tsymmetric_fragments() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.add_tsymmetric_fragments"]], "add_tsymmetric_fragments() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.add_tsymmetric_fragments"]], "asdict() (vayesta.ewf.ewf.ewf.fragment.options method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.asdict"]], "asdict() (vayesta.ewf.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.EWF.Options.asdict"]], "asdict() (vayesta.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.Options.asdict"]], "asdict() (vayesta.ewf.fragment.fragment.options method)": [[13, "vayesta.ewf.fragment.Fragment.Options.asdict"]], "asdict() (vayesta.ewf.fragment.options method)": [[13, "vayesta.ewf.fragment.Options.asdict"]], "asdict() (vayesta.ewf.uewf.uewf.fragment.options method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.asdict"]], "asdict() (vayesta.ewf.uewf.uewf.options method)": [[13, "vayesta.ewf.uewf.UEWF.Options.asdict"]], "asdict() (vayesta.ewf.ufragment.fragment.options method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.asdict"]], "auxiliary (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.auxiliary"]], "auxiliary (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.auxiliary"]], "auxiliary (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.auxiliary"]], "auxiliary (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.auxiliary"]], "auxiliary (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.auxiliary"]], "bath_options (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.bath_options"]], "bath_options (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.bath_options"]], "bath_options (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.bath_options"]], "bath_options (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.bath_options"]], "bath_options (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.bath_options"]], "bath_options (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.bath_options"]], "bath_options (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.bath_options"]], "bath_options (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.bath_options"]], "bath_parent_fragment_id (vayesta.ewf.ewf.ewf.fragment.flags attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Flags.bath_parent_fragment_id"]], "bath_parent_fragment_id (vayesta.ewf.fragment.fragment.flags attribute)": [[13, "vayesta.ewf.fragment.Fragment.Flags.bath_parent_fragment_id"]], "bath_parent_fragment_id (vayesta.ewf.uewf.uewf.fragment.flags attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Flags.bath_parent_fragment_id"]], "bath_parent_fragment_id (vayesta.ewf.ufragment.fragment.flags attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Flags.bath_parent_fragment_id"]], "brueckner_scmf() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.brueckner_scmf"]], "brueckner_scmf() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.brueckner_scmf"]], "bsse_correction (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.bsse_correction"]], "bsse_correction (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.bsse_correction"]], "bsse_correction (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.bsse_correction"]], "bsse_correction (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.bsse_correction"]], "bsse_correction (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.bsse_correction"]], "bsse_correction (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.bsse_correction"]], "bsse_correction (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.bsse_correction"]], "bsse_correction (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.bsse_correction"]], "bsse_rmax (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.bsse_rmax"]], "bsse_rmax (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.bsse_rmax"]], "bsse_rmax (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.bsse_rmax"]], "bsse_rmax (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.bsse_rmax"]], "bsse_rmax (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.bsse_rmax"]], "bsse_rmax (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.bsse_rmax"]], "bsse_rmax (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.bsse_rmax"]], "bsse_rmax (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.bsse_rmax"]], "build_screened_eris() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.build_screened_eris"]], "build_screened_eris() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.build_screened_eris"]], "c_cas_occ (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.c_cas_occ"]], "c_cas_occ (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.c_cas_occ"]], "c_cas_occ (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.c_cas_occ"]], "c_cas_occ (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.c_cas_occ"]], "c_cas_occ (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.c_cas_occ"]], "c_cas_vir (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.c_cas_vir"]], "c_cas_vir (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.c_cas_vir"]], "c_cas_vir (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.c_cas_vir"]], "c_cas_vir (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.c_cas_vir"]], "c_cas_vir (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.c_cas_vir"]], "calc_e_dm_corr (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.calc_e_dm_corr"]], "calc_e_dm_corr (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.calc_e_dm_corr"]], "calc_e_dm_corr (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.calc_e_dm_corr"]], "calc_e_dm_corr (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.calc_e_dm_corr"]], "calc_e_dm_corr (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.calc_e_dm_corr"]], "calc_e_dm_corr (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.calc_e_dm_corr"]], "calc_e_dm_corr (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.calc_e_dm_corr"]], "calc_e_dm_corr (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.calc_e_dm_corr"]], "calc_e_wf_corr (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.calc_e_wf_corr"]], "calc_e_wf_corr (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.calc_e_wf_corr"]], "calc_e_wf_corr (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.calc_e_wf_corr"]], "calc_e_wf_corr (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.calc_e_wf_corr"]], "calc_e_wf_corr (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.calc_e_wf_corr"]], "calc_e_wf_corr (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.calc_e_wf_corr"]], "calc_e_wf_corr (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.calc_e_wf_corr"]], "calc_e_wf_corr (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.calc_e_wf_corr"]], "canonicalize_mo() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.canonicalize_mo"]], "canonicalize_mo() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.canonicalize_mo"]], "canonicalize_mo() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.canonicalize_mo"]], "canonicalize_mo() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.canonicalize_mo"]], "cas_fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.cas_fragmentation"]], "cas_fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.cas_fragmentation"]], "change_dict_defaults() (vayesta.ewf.ewf.ewf.fragment.options class method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.ewf.ewf.ewf.options class method)": [[13, "vayesta.ewf.ewf.EWF.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.ewf.ewf.options class method)": [[13, "vayesta.ewf.ewf.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.ewf.fragment.fragment.options class method)": [[13, "vayesta.ewf.fragment.Fragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.ewf.fragment.options class method)": [[13, "vayesta.ewf.fragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.ewf.uewf.uewf.fragment.options class method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.ewf.uewf.uewf.options class method)": [[13, "vayesta.ewf.uewf.UEWF.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.ewf.ufragment.fragment.options class method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.change_dict_defaults"]], "change_options() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.change_options"]], "change_options() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.change_options"]], "change_options() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.change_options"]], "change_options() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.change_options"]], "change_options() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.change_options"]], "change_options() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.change_options"]], "check_fragment_symmetry() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.check_fragment_symmetry"]], "check_fragment_symmetry() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.check_fragment_symmetry"]], "check_solver() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.check_solver"]], "check_solver() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.check_solver"]], "check_solver() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.check_solver"]], "check_solver() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.check_solver"]], "check_solver() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.check_solver"]], "check_solver() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.check_solver"]], "clear_external_corrections() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.clear_external_corrections"]], "clear_external_corrections() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.clear_external_corrections"]], "clear_external_corrections() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.clear_external_corrections"]], "clear_external_corrections() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.clear_external_corrections"]], "cluster (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.cluster"]], "cluster (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.cluster"]], "cluster (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.cluster"]], "cluster (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.cluster"]], "communicate_clusters() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.communicate_clusters"]], "communicate_clusters() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.communicate_clusters"]], "contributes (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.contributes"]], "contributes (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.contributes"]], "contributes (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.contributes"]], "contributes (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.contributes"]], "converged (vayesta.ewf.ewf.ewf.fragment.results attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.converged"]], "converged (vayesta.ewf.fragment.fragment.results attribute)": [[13, "vayesta.ewf.fragment.Fragment.Results.converged"]], "converged (vayesta.ewf.uewf.uewf.fragment.results attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.converged"]], "converged (vayesta.ewf.ufragment.fragment.results attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Results.converged"]], "copy() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.copy"]], "copy() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.copy"]], "copy() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.copy"]], "copy() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.copy"]], "counterpoise_calculation() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.counterpoise_calculation"]], "counterpoise_calculation() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.counterpoise_calculation"]], "counterpoise_calculation() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.counterpoise_calculation"]], "counterpoise_calculation() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.counterpoise_calculation"]], "couple_to_fragment() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.couple_to_fragment"]], "couple_to_fragment() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.couple_to_fragment"]], "couple_to_fragment() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.couple_to_fragment"]], "couple_to_fragment() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.couple_to_fragment"]], "couple_to_fragments() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.couple_to_fragments"]], "couple_to_fragments() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.couple_to_fragments"]], "couple_to_fragments() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.couple_to_fragments"]], "couple_to_fragments() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.couple_to_fragments"]], "coupled_fragments (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.coupled_fragments"]], "coupled_fragments (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.coupled_fragments"]], "coupled_fragments (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.coupled_fragments"]], "coupled_fragments (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.coupled_fragments"]], "coupled_fragments (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.coupled_fragments"]], "coupled_iterations (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.coupled_iterations"]], "coupled_iterations (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.coupled_iterations"]], "coupled_iterations (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.coupled_iterations"]], "create_invsym_fragments() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.create_invsym_fragments"]], "create_invsym_fragments() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.create_invsym_fragments"]], "create_mirrorsym_fragments() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.create_mirrorsym_fragments"]], "create_mirrorsym_fragments() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.create_mirrorsym_fragments"]], "create_rotsym_fragments() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.create_rotsym_fragments"]], "create_rotsym_fragments() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.create_rotsym_fragments"]], "create_symmetric_fragments() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.create_symmetric_fragments"]], "create_symmetric_fragments() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.create_symmetric_fragments"]], "create_transsym_fragments() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.create_transsym_fragments"]], "create_transsym_fragments() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.create_transsym_fragments"]], "d1_diagnostic() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.d1_diagnostic"]], "df (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.df"]], "df (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.df"]], "diagonalize_cluster_dm() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.diagonalize_cluster_dm"]], "diagonalize_cluster_dm() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.diagonalize_cluster_dm"]], "diagonalize_cluster_dm() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.diagonalize_cluster_dm"]], "diagonalize_cluster_dm() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.diagonalize_cluster_dm"]], "dict_with_defaults() (vayesta.ewf.ewf.ewf.fragment.options static method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.ewf.ewf.ewf.options static method)": [[13, "vayesta.ewf.ewf.EWF.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.ewf.ewf.options static method)": [[13, "vayesta.ewf.ewf.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.ewf.fragment.fragment.options static method)": [[13, "vayesta.ewf.fragment.Fragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.ewf.fragment.options static method)": [[13, "vayesta.ewf.fragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.ewf.uewf.uewf.fragment.options static method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.ewf.uewf.uewf.options static method)": [[13, "vayesta.ewf.uewf.UEWF.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.ewf.ufragment.fragment.options static method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.dict_with_defaults"]], "dm1 (vayesta.ewf.ewf.ewf.fragment.results property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.dm1"]], "dm1 (vayesta.ewf.fragment.fragment.results property)": [[13, "vayesta.ewf.fragment.Fragment.Results.dm1"]], "dm1 (vayesta.ewf.uewf.uewf.fragment.results property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.dm1"]], "dm1 (vayesta.ewf.ufragment.fragment.results property)": [[13, "vayesta.ewf.ufragment.Fragment.Results.dm1"]], "dm2 (vayesta.ewf.ewf.ewf.fragment.results property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.dm2"]], "dm2 (vayesta.ewf.fragment.fragment.results property)": [[13, "vayesta.ewf.fragment.Fragment.Results.dm2"]], "dm2 (vayesta.ewf.uewf.uewf.fragment.results property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.dm2"]], "dm2 (vayesta.ewf.ufragment.fragment.results property)": [[13, "vayesta.ewf.ufragment.Fragment.Results.dm2"]], "dm_with_frozen (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.dm_with_frozen"]], "dm_with_frozen (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.dm_with_frozen"]], "e_corr (vayesta.ewf.ewf.ewf.fragment.results attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.e_corr"]], "e_corr (vayesta.ewf.fragment.fragment.results attribute)": [[13, "vayesta.ewf.fragment.Fragment.Results.e_corr"]], "e_corr (vayesta.ewf.uewf.uewf.fragment.results attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.e_corr"]], "e_corr (vayesta.ewf.ufragment.fragment.results attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Results.e_corr"]], "e_corr_dm2cumulant (vayesta.ewf.ewf.ewf.fragment.results attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.e_corr_dm2cumulant"]], "e_corr_dm2cumulant (vayesta.ewf.fragment.fragment.results attribute)": [[13, "vayesta.ewf.fragment.Fragment.Results.e_corr_dm2cumulant"]], "e_corr_dm2cumulant (vayesta.ewf.uewf.uewf.fragment.results attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.e_corr_dm2cumulant"]], "e_corr_dm2cumulant (vayesta.ewf.ufragment.fragment.results attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Results.e_corr_dm2cumulant"]], "e_mf (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.e_mf"]], "e_mf (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.e_mf"]], "e_nuc (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.e_nuc"]], "e_nuc (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.e_nuc"]], "e_tot (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.e_tot"]], "e_tot (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.e_tot"]], "ea_energy (vayesta.ewf.ewf.ewf.fragment.results attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.ea_energy"]], "ea_energy (vayesta.ewf.fragment.fragment.results attribute)": [[13, "vayesta.ewf.fragment.Fragment.Results.ea_energy"]], "ea_energy (vayesta.ewf.uewf.uewf.fragment.results attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.ea_energy"]], "ea_energy (vayesta.ewf.ufragment.fragment.results attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Results.ea_energy"]], "energy_functional (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.energy_functional"]], "energy_functional (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.energy_functional"]], "energy_functional (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.energy_functional"]], "external_corrections (vayesta.ewf.ewf.ewf.fragment.flags attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Flags.external_corrections"]], "external_corrections (vayesta.ewf.fragment.fragment.flags attribute)": [[13, "vayesta.ewf.fragment.Fragment.Flags.external_corrections"]], "external_corrections (vayesta.ewf.uewf.uewf.fragment.flags attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Flags.external_corrections"]], "external_corrections (vayesta.ewf.ufragment.fragment.flags attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Flags.external_corrections"]], "fid (vayesta.ewf.ewf.ewf.fragment.results attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.fid"]], "fid (vayesta.ewf.fragment.fragment.results attribute)": [[13, "vayesta.ewf.fragment.Fragment.Results.fid"]], "fid (vayesta.ewf.uewf.uewf.fragment.results attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.fid"]], "fid (vayesta.ewf.ufragment.fragment.results attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Results.fid"]], "fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.fragmentation"]], "fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.fragmentation"]], "get() (vayesta.ewf.ewf.ewf.fragment.options method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.get"]], "get() (vayesta.ewf.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.EWF.Options.get"]], "get() (vayesta.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.Options.get"]], "get() (vayesta.ewf.fragment.fragment.options method)": [[13, "vayesta.ewf.fragment.Fragment.Options.get"]], "get() (vayesta.ewf.fragment.options method)": [[13, "vayesta.ewf.fragment.Options.get"]], "get() (vayesta.ewf.uewf.uewf.fragment.options method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.get"]], "get() (vayesta.ewf.uewf.uewf.options method)": [[13, "vayesta.ewf.uewf.UEWF.Options.get"]], "get() (vayesta.ewf.ufragment.fragment.options method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.get"]], "get_atomic_charges() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_atomic_charges"]], "get_atomic_charges() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_atomic_charges"]], "get_atomic_ssz() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_atomic_ssz"]], "get_atomic_ssz() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_atomic_ssz"]], "get_atomic_ssz_mf() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_atomic_ssz_mf"]], "get_atomic_ssz_mf() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_atomic_ssz_mf"]], "get_average_cluster_size() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_average_cluster_size"]], "get_average_cluster_size() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_average_cluster_size"]], "get_ccsd_corr_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_ccsd_corr_energy"]], "get_ccsd_corr_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_ccsd_corr_energy"]], "get_ccsd_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_ccsd_energy"]], "get_ccsd_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_ccsd_energy"]], "get_cderi() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_cderi"]], "get_cderi() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_cderi"]], "get_coeff_env() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_coeff_env"]], "get_coeff_env() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_coeff_env"]], "get_coeff_env() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_coeff_env"]], "get_coeff_env() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_coeff_env"]], "get_corrfunc() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_corrfunc"]], "get_corrfunc() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_corrfunc"]], "get_corrfunc_mf() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_corrfunc_mf"]], "get_corrfunc_mf() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_corrfunc_mf"]], "get_default() (vayesta.ewf.ewf.ewf.fragment.options class method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.get_default"]], "get_default() (vayesta.ewf.ewf.ewf.options class method)": [[13, "vayesta.ewf.ewf.EWF.Options.get_default"]], "get_default() (vayesta.ewf.ewf.options class method)": [[13, "vayesta.ewf.ewf.Options.get_default"]], "get_default() (vayesta.ewf.fragment.fragment.options class method)": [[13, "vayesta.ewf.fragment.Fragment.Options.get_default"]], "get_default() (vayesta.ewf.fragment.options class method)": [[13, "vayesta.ewf.fragment.Options.get_default"]], "get_default() (vayesta.ewf.uewf.uewf.fragment.options class method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.get_default"]], "get_default() (vayesta.ewf.uewf.uewf.options class method)": [[13, "vayesta.ewf.uewf.UEWF.Options.get_default"]], "get_default() (vayesta.ewf.ufragment.fragment.options class method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.get_default"]], "get_default_factory() (vayesta.ewf.ewf.ewf.fragment.options class method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.get_default_factory"]], "get_default_factory() (vayesta.ewf.ewf.ewf.options class method)": [[13, "vayesta.ewf.ewf.EWF.Options.get_default_factory"]], "get_default_factory() (vayesta.ewf.ewf.options class method)": [[13, "vayesta.ewf.ewf.Options.get_default_factory"]], "get_default_factory() (vayesta.ewf.fragment.fragment.options class method)": [[13, "vayesta.ewf.fragment.Fragment.Options.get_default_factory"]], "get_default_factory() (vayesta.ewf.fragment.options class method)": [[13, "vayesta.ewf.fragment.Options.get_default_factory"]], "get_default_factory() (vayesta.ewf.uewf.uewf.fragment.options class method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.get_default_factory"]], "get_default_factory() (vayesta.ewf.uewf.uewf.options class method)": [[13, "vayesta.ewf.uewf.UEWF.Options.get_default_factory"]], "get_default_factory() (vayesta.ewf.ufragment.fragment.options class method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.get_default_factory"]], "get_dm_corr_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_dm_corr_energy"]], "get_dm_corr_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_dm_corr_energy"]], "get_dm_corr_energy_e1() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_dm_corr_energy_e1"]], "get_dm_corr_energy_e1() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_dm_corr_energy_e1"]], "get_dm_corr_energy_e2() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_dm_corr_energy_e2"]], "get_dm_corr_energy_e2() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_dm_corr_energy_e2"]], "get_dm_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_dm_energy"]], "get_dm_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_dm_energy"]], "get_dmet_elec_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_dmet_elec_energy"]], "get_dmet_elec_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_dmet_elec_energy"]], "get_dmet_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_dmet_energy"]], "get_dmet_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_dmet_energy"]], "get_e_corr() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_e_corr"]], "get_e_corr() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_e_corr"]], "get_eris_array() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_eris_array"]], "get_eris_array() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_eris_array"]], "get_eris_array_uhf() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_eris_array_uhf"]], "get_eris_object() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_eris_object"]], "get_eris_object() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_eris_object"]], "get_exxdiv() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_exxdiv"]], "get_exxdiv() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_exxdiv"]], "get_fbc_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_fbc_energy"]], "get_fbc_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_fbc_energy"]], "get_fock() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_fock"]], "get_fock() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_fock"]], "get_fock_for_bath() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_fock_for_bath"]], "get_fock_for_bath() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_fock_for_bath"]], "get_fock_for_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_fock_for_energy"]], "get_fock_for_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_fock_for_energy"]], "get_frag_hamil() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_frag_hamil"]], "get_frag_hamil() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_frag_hamil"]], "get_frag_hamil() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_frag_hamil"]], "get_frag_hamil() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_frag_hamil"]], "get_fragment_bsse() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_fragment_bsse"]], "get_fragment_bsse() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_fragment_bsse"]], "get_fragment_bsse() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_fragment_bsse"]], "get_fragment_bsse() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_fragment_bsse"]], "get_fragment_dmet_energy() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_fragment_dmet_energy"]], "get_fragment_dmet_energy() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_fragment_dmet_energy"]], "get_fragment_dmet_energy() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_fragment_dmet_energy"]], "get_fragment_dmet_energy() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_fragment_dmet_energy"]], "get_fragment_energy() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_fragment_energy"]], "get_fragment_energy() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_fragment_energy"]], "get_fragment_energy() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_fragment_energy"]], "get_fragment_energy() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_fragment_energy"]], "get_fragment_mf_energy() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_fragment_mf_energy"]], "get_fragment_mf_energy() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_fragment_mf_energy"]], "get_fragment_mf_energy() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_fragment_mf_energy"]], "get_fragment_mf_energy() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_fragment_mf_energy"]], "get_fragment_mo_energy() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_fragment_mo_energy"]], "get_fragment_mo_energy() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_fragment_mo_energy"]], "get_fragment_mo_energy() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_fragment_mo_energy"]], "get_fragment_mo_energy() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_fragment_mo_energy"]], "get_fragment_mpi_rank() (in module vayesta.ewf.fragment)": [[13, "vayesta.ewf.fragment.get_fragment_mpi_rank"]], "get_fragment_overlap_norm() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_fragment_overlap_norm"]], "get_fragment_overlap_norm() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_fragment_overlap_norm"]], "get_fragment_projector() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_fragment_projector"]], "get_fragment_projector() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_fragment_projector"]], "get_fragment_projector() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_fragment_projector"]], "get_fragment_projector() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_fragment_projector"]], "get_fragments() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_fragments"]], "get_fragments() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_fragments"]], "get_fragments_with_overlap() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_fragments_with_overlap"]], "get_fragments_with_overlap() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_fragments_with_overlap"]], "get_fragments_with_overlap() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_fragments_with_overlap"]], "get_fragments_with_overlap() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_fragments_with_overlap"]], "get_global_l1() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_global_l1"]], "get_global_l1() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_global_l1"]], "get_global_l2() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_global_l2"]], "get_global_l2() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_global_l2"]], "get_global_t1() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_global_t1"]], "get_global_t1() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_global_t1"]], "get_global_t2() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_global_t2"]], "get_global_t2() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_global_t2"]], "get_hcore() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_hcore"]], "get_hcore() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_hcore"]], "get_hcore_for_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_hcore_for_energy"]], "get_hcore_for_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_hcore_for_energy"]], "get_init_guess() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_init_guess"]], "get_init_guess() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_init_guess"]], "get_init_guess() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_init_guess"]], "get_init_guess() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_init_guess"]], "get_intercluster_mp2_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_intercluster_mp2_energy"]], "get_intercluster_mp2_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_intercluster_mp2_energy"]], "get_l1() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_l1"]], "get_l1() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_l1"]], "get_l2() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_l2"]], "get_l2() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_l2"]], "get_lo_coeff() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_lo_coeff"]], "get_lo_coeff() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_lo_coeff"]], "get_max_cluster_size() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_max_cluster_size"]], "get_max_cluster_size() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_max_cluster_size"]], "get_mean_cluster_size() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_mean_cluster_size"]], "get_mean_cluster_size() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_mean_cluster_size"]], "get_min_cluster_size() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_min_cluster_size"]], "get_min_cluster_size() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_min_cluster_size"]], "get_mo_occupation() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_mo_occupation"]], "get_mo_occupation() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_mo_occupation"]], "get_mo_occupation() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_mo_occupation"]], "get_mo_occupation() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_mo_occupation"]], "get_overlap() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_overlap"]], "get_overlap() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_overlap"]], "get_overlap() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_overlap"]], "get_overlap() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_overlap"]], "get_ovlp() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_ovlp"]], "get_ovlp() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_ovlp"]], "get_ovlp_power() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_ovlp_power"]], "get_ovlp_power() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_ovlp_power"]], "get_proj_corr_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_proj_corr_energy"]], "get_proj_corr_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_proj_corr_energy"]], "get_proj_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_proj_energy"]], "get_proj_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_proj_energy"]], "get_solver() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_solver"]], "get_solver() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_solver"]], "get_solver() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_solver"]], "get_solver() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_solver"]], "get_solver_options() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_solver_options"]], "get_solver_options() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_solver_options"]], "get_solver_options() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_solver_options"]], "get_solver_options() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_solver_options"]], "get_symmetry_child_fragments() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_symmetry_child_fragments"]], "get_symmetry_child_fragments() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_symmetry_child_fragments"]], "get_symmetry_children() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_symmetry_children"]], "get_symmetry_children() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_symmetry_children"]], "get_symmetry_children() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_symmetry_children"]], "get_symmetry_children() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_symmetry_children"]], "get_symmetry_error() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_symmetry_error"]], "get_symmetry_error() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_symmetry_error"]], "get_symmetry_error() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_symmetry_error"]], "get_symmetry_error() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_symmetry_error"]], "get_symmetry_generations() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_symmetry_generations"]], "get_symmetry_generations() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_symmetry_generations"]], "get_symmetry_generations() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_symmetry_generations"]], "get_symmetry_generations() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_symmetry_generations"]], "get_symmetry_operation() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_symmetry_operation"]], "get_symmetry_operation() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_symmetry_operation"]], "get_symmetry_operation() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_symmetry_operation"]], "get_symmetry_operation() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_symmetry_operation"]], "get_symmetry_parent() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_symmetry_parent"]], "get_symmetry_parent() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_symmetry_parent"]], "get_symmetry_parent() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_symmetry_parent"]], "get_symmetry_parent() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_symmetry_parent"]], "get_symmetry_parent_fragments() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_symmetry_parent_fragments"]], "get_symmetry_parent_fragments() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_symmetry_parent_fragments"]], "get_symmetry_tree() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.get_symmetry_tree"]], "get_symmetry_tree() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.get_symmetry_tree"]], "get_symmetry_tree() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.get_symmetry_tree"]], "get_symmetry_tree() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.get_symmetry_tree"]], "get_t1() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_t1"]], "get_t1() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_t1"]], "get_t2() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_t2"]], "get_t2() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_t2"]], "get_veff() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_veff"]], "get_veff() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_veff"]], "get_veff_for_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_veff_for_energy"]], "get_veff_for_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_veff_for_energy"]], "get_wf_corr_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_wf_corr_energy"]], "get_wf_corr_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_wf_corr_energy"]], "get_wf_energy() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.get_wf_energy"]], "get_wf_energy() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.get_wf_energy"]], "global_frag_chempot (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.global_frag_chempot"]], "global_frag_chempot (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.global_frag_chempot"]], "global_frag_chempot (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.global_frag_chempot"]], "hamil (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.hamil"]], "hamil (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.hamil"]], "hamil (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.hamil"]], "hamil (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.hamil"]], "has_complete_fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.has_complete_fragmentation"]], "has_complete_fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.has_complete_fragmentation"]], "has_complete_occupied_fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.has_complete_occupied_fragmentation"]], "has_complete_occupied_fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.has_complete_occupied_fragmentation"]], "has_complete_virtual_fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.has_complete_virtual_fragmentation"]], "has_complete_virtual_fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.has_complete_virtual_fragmentation"]], "has_df (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.has_df"]], "has_df (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.has_df"]], "has_exxdiv (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.has_exxdiv"]], "has_exxdiv (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.has_exxdiv"]], "has_orthonormal_fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.has_orthonormal_fragmentation"]], "has_orthonormal_fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.has_orthonormal_fragmentation"]], "iao_fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.iao_fragmentation"]], "iao_fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.iao_fragmentation"]], "iao_minao (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.iao_minao"]], "iao_minao (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.iao_minao"]], "iao_minao (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.iao_minao"]], "iaopao_fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.iaopao_fragmentation"]], "iaopao_fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.iaopao_fragmentation"]], "id_name (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.id_name"]], "id_name (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.id_name"]], "id_name (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.id_name"]], "id_name (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.id_name"]], "init_mf() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.init_mf"]], "init_mf() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.init_mf"]], "ip_energy (vayesta.ewf.ewf.ewf.fragment.results attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.ip_energy"]], "ip_energy (vayesta.ewf.fragment.fragment.results attribute)": [[13, "vayesta.ewf.fragment.Fragment.Results.ip_energy"]], "ip_energy (vayesta.ewf.uewf.uewf.fragment.results attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.ip_energy"]], "ip_energy (vayesta.ewf.ufragment.fragment.results attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Results.ip_energy"]], "is_envelop (vayesta.ewf.ewf.ewf.fragment.flags attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Flags.is_envelop"]], "is_envelop (vayesta.ewf.fragment.fragment.flags attribute)": [[13, "vayesta.ewf.fragment.Fragment.Flags.is_envelop"]], "is_envelop (vayesta.ewf.uewf.uewf.fragment.flags attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Flags.is_envelop"]], "is_envelop (vayesta.ewf.ufragment.fragment.flags attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Flags.is_envelop"]], "is_rhf (vayesta.ewf.ewf.ewf attribute)": [[13, "vayesta.ewf.ewf.EWF.is_rhf"]], "is_rhf (vayesta.ewf.uewf.uewf attribute)": [[13, "vayesta.ewf.uewf.UEWF.is_rhf"]], "is_secfrag (vayesta.ewf.ewf.ewf.fragment.flags attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Flags.is_secfrag"]], "is_secfrag (vayesta.ewf.fragment.fragment.flags attribute)": [[13, "vayesta.ewf.fragment.Fragment.Flags.is_secfrag"]], "is_secfrag (vayesta.ewf.uewf.uewf.fragment.flags attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Flags.is_secfrag"]], "is_secfrag (vayesta.ewf.ufragment.fragment.flags attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Flags.is_secfrag"]], "is_uhf (vayesta.ewf.ewf.ewf attribute)": [[13, "vayesta.ewf.ewf.EWF.is_uhf"]], "is_uhf (vayesta.ewf.uewf.uewf attribute)": [[13, "vayesta.ewf.uewf.UEWF.is_uhf"]], "items() (vayesta.ewf.ewf.ewf.fragment.options method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.items"]], "items() (vayesta.ewf.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.EWF.Options.items"]], "items() (vayesta.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.Options.items"]], "items() (vayesta.ewf.fragment.fragment.options method)": [[13, "vayesta.ewf.fragment.Fragment.Options.items"]], "items() (vayesta.ewf.fragment.options method)": [[13, "vayesta.ewf.fragment.Options.items"]], "items() (vayesta.ewf.uewf.uewf.fragment.options method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.items"]], "items() (vayesta.ewf.uewf.uewf.options method)": [[13, "vayesta.ewf.uewf.UEWF.Options.items"]], "items() (vayesta.ewf.ufragment.fragment.options method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.items"]], "kernel() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.kernel"]], "kernel() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.kernel"]], "kernel() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.kernel"]], "kernel() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.kernel"]], "kernel() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.kernel"]], "kernel() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.kernel"]], "keys() (vayesta.ewf.ewf.ewf.fragment.options method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.keys"]], "keys() (vayesta.ewf.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.EWF.Options.keys"]], "keys() (vayesta.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.Options.keys"]], "keys() (vayesta.ewf.fragment.fragment.options method)": [[13, "vayesta.ewf.fragment.Fragment.Options.keys"]], "keys() (vayesta.ewf.fragment.options method)": [[13, "vayesta.ewf.fragment.Options.keys"]], "keys() (vayesta.ewf.uewf.uewf.fragment.options method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.keys"]], "keys() (vayesta.ewf.uewf.uewf.options method)": [[13, "vayesta.ewf.uewf.UEWF.Options.keys"]], "keys() (vayesta.ewf.ufragment.fragment.options method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.keys"]], "log_info() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.log_info"]], "log_info() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.log_info"]], "log_info() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.log_info"]], "log_info() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.log_info"]], "loop() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.loop"]], "loop() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.loop"]], "loop_symmetry_children() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.loop_symmetry_children"]], "loop_symmetry_children() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.loop_symmetry_children"]], "loop_symmetry_children() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.loop_symmetry_children"]], "loop_symmetry_children() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.loop_symmetry_children"]], "make_bath() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.make_bath"]], "make_bath() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.make_bath"]], "make_bath() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.make_bath"]], "make_bath() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.make_bath"]], "make_cluster() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.make_cluster"]], "make_cluster() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.make_cluster"]], "make_cluster() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.make_cluster"]], "make_cluster() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.make_cluster"]], "make_counterpoise_mol() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.make_counterpoise_mol"]], "make_counterpoise_mol() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.make_counterpoise_mol"]], "make_counterpoise_mol() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.make_counterpoise_mol"]], "make_counterpoise_mol() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.make_counterpoise_mol"]], "make_fragment_dm1() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.make_fragment_dm1"]], "make_fragment_dm1() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.make_fragment_dm1"]], "make_fragment_dm1() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.make_fragment_dm1"]], "make_fragment_dm1() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.make_fragment_dm1"]], "make_fragment_dm2cumulant() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.make_fragment_dm2cumulant"]], "make_fragment_dm2cumulant() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.make_fragment_dm2cumulant"]], "make_fragment_dm2cumulant() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.make_fragment_dm2cumulant"]], "make_fragment_dm2cumulant() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.make_fragment_dm2cumulant"]], "make_fragment_dm2cumulant_energy() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.make_fragment_dm2cumulant_energy"]], "make_fragment_dm2cumulant_energy() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.make_fragment_dm2cumulant_energy"]], "make_fragment_dm2cumulant_energy() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.make_fragment_dm2cumulant_energy"]], "make_fragment_dm2cumulant_energy() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.make_fragment_dm2cumulant_energy"]], "make_rdm1() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.make_rdm1"]], "make_rdm1() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.make_rdm1"]], "make_rdm1_demo() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.make_rdm1_demo"]], "make_rdm1_demo() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.make_rdm1_demo"]], "make_rdm2() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.make_rdm2"]], "make_rdm2() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.make_rdm2"]], "make_rdm2_demo() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.make_rdm2_demo"]], "make_rdm2_demo() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.make_rdm2_demo"]], "make_tsymmetric_fragments() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.make_tsymmetric_fragments"]], "make_tsymmetric_fragments() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.make_tsymmetric_fragments"]], "make_tsymmetric_fragments() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.make_tsymmetric_fragments"]], "make_tsymmetric_fragments() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.make_tsymmetric_fragments"]], "mf (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.mf"]], "mf (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.mf"]], "mf (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.mf"]], "mf (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.mf"]], "mo_coeff (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.mo_coeff"]], "mo_coeff (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.mo_coeff"]], "mo_coeff_occ (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.mo_coeff_occ"]], "mo_coeff_occ (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.mo_coeff_occ"]], "mo_coeff_vir (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.mo_coeff_vir"]], "mo_coeff_vir (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.mo_coeff_vir"]], "mo_energy (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.mo_energy"]], "mo_energy (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.mo_energy"]], "mo_energy_occ (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.mo_energy_occ"]], "mo_energy_occ (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.mo_energy_occ"]], "mo_energy_vir (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.mo_energy_vir"]], "mo_energy_vir (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.mo_energy_vir"]], "mo_occ (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.mo_occ"]], "mo_occ (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.mo_occ"]], "mol (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.mol"]], "mol (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.mol"]], "mol (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.mol"]], "mol (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.mol"]], "mol (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.mol"]], "mol (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.mol"]], "n_active (vayesta.ewf.ewf.ewf.fragment.results attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.n_active"]], "n_active (vayesta.ewf.fragment.fragment.results attribute)": [[13, "vayesta.ewf.fragment.Fragment.Results.n_active"]], "n_active (vayesta.ewf.uewf.uewf.fragment.results attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.n_active"]], "n_active (vayesta.ewf.ufragment.fragment.results attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Results.n_active"]], "n_frag (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.n_frag"]], "n_frag (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.n_frag"]], "n_frag (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.n_frag"]], "n_frag (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.n_frag"]], "n_symmetry_children (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.n_symmetry_children"]], "n_symmetry_children (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.n_symmetry_children"]], "n_symmetry_children (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.n_symmetry_children"]], "n_symmetry_children (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.n_symmetry_children"]], "nao (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.nao"]], "nao (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.nao"]], "ncells (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.ncells"]], "ncells (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.ncells"]], "nelectron (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.nelectron"]], "nelectron (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.nelectron"]], "nelectron (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.nelectron"]], "nelectron (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.nelectron"]], "nelectron_target (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.nelectron_target"]], "nelectron_target (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.nelectron_target"]], "nelectron_target (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.nelectron_target"]], "nelectron_target (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.nelectron_target"]], "nelectron_target (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.nelectron_target"]], "nelectron_target (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.nelectron_target"]], "nelectron_target (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.nelectron_target"]], "nelectron_target (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.nelectron_target"]], "nelectron_target_atol (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.nelectron_target_atol"]], "nelectron_target_atol (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.nelectron_target_atol"]], "nelectron_target_atol (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.nelectron_target_atol"]], "nelectron_target_atol (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.nelectron_target_atol"]], "nelectron_target_atol (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.nelectron_target_atol"]], "nelectron_target_rtol (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.nelectron_target_rtol"]], "nelectron_target_rtol (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.nelectron_target_rtol"]], "nelectron_target_rtol (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.nelectron_target_rtol"]], "nelectron_target_rtol (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.nelectron_target_rtol"]], "nelectron_target_rtol (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.nelectron_target_rtol"]], "nfrag (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.nfrag"]], "nfrag (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.nfrag"]], "nmo (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.nmo"]], "nmo (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.nmo"]], "nocc (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.nocc"]], "nocc (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.nocc"]], "nvir (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.nvir"]], "nvir (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.nvir"]], "optimize_chempot() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.optimize_chempot"]], "optimize_chempot() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.optimize_chempot"]], "orthogonalize_mo() (in module vayesta.ewf.helper)": [[13, "vayesta.ewf.helper.orthogonalize_mo"]], "pbc_dimension (vayesta.ewf.ewf.ewf property)": [[13, "vayesta.ewf.ewf.EWF.pbc_dimension"]], "pbc_dimension (vayesta.ewf.uewf.uewf property)": [[13, "vayesta.ewf.uewf.UEWF.pbc_dimension"]], "pdmet_scmf() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.pdmet_scmf"]], "pdmet_scmf() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.pdmet_scmf"]], "plot3d() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.plot3d"]], "plot3d() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.plot3d"]], "plot3d() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.plot3d"]], "plot3d() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.plot3d"]], "pop_analysis() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.pop_analysis"]], "pop_analysis() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.pop_analysis"]], "pop_analysis() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.pop_analysis"]], "pop_analysis() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.pop_analysis"]], "pop_analysis() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.pop_analysis"]], "pop_analysis() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.pop_analysis"]], "project_eris (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.project_eris"]], "project_eris (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.project_eris"]], "project_eris (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.project_eris"]], "project_init_guess (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.project_init_guess"]], "project_init_guess (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.project_init_guess"]], "project_init_guess (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.project_init_guess"]], "project_ref_orbitals() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.project_ref_orbitals"]], "project_ref_orbitals() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.project_ref_orbitals"]], "project_ref_orbitals() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.project_ref_orbitals"]], "project_ref_orbitals() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.project_ref_orbitals"]], "pwf (vayesta.ewf.ewf.ewf.fragment.results attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.pwf"]], "pwf (vayesta.ewf.fragment.fragment.results attribute)": [[13, "vayesta.ewf.fragment.Fragment.Results.pwf"]], "pwf (vayesta.ewf.uewf.uewf.fragment.results attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.pwf"]], "pwf (vayesta.ewf.ufragment.fragment.results attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Results.pwf"]], "replace() (vayesta.ewf.ewf.ewf.fragment.options method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.replace"]], "replace() (vayesta.ewf.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.EWF.Options.replace"]], "replace() (vayesta.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.Options.replace"]], "replace() (vayesta.ewf.fragment.fragment.options method)": [[13, "vayesta.ewf.fragment.Fragment.Options.replace"]], "replace() (vayesta.ewf.fragment.options method)": [[13, "vayesta.ewf.fragment.Options.replace"]], "replace() (vayesta.ewf.uewf.uewf.fragment.options method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.replace"]], "replace() (vayesta.ewf.uewf.uewf.options method)": [[13, "vayesta.ewf.uewf.UEWF.Options.replace"]], "replace() (vayesta.ewf.ufragment.fragment.options method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.replace"]], "require_complete_fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.require_complete_fragmentation"]], "require_complete_fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.require_complete_fragmentation"]], "reset() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.reset"]], "reset() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.reset"]], "reset() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.reset"]], "reset() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.reset"]], "reset() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.reset"]], "reset() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.reset"]], "results (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.results"]], "results (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.results"]], "results (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.results"]], "results (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.results"]], "sao_fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.sao_fragmentation"]], "sao_fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.sao_fragmentation"]], "sc_mode (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.sc_mode"]], "sc_mode (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.sc_mode"]], "sc_mode (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.sc_mode"]], "sc_mode (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.sc_mode"]], "sc_mode (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.sc_mode"]], "sc_mode (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.sc_mode"]], "sc_mode (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.sc_mode"]], "sc_mode (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.sc_mode"]], "screening (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.screening"]], "screening (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.screening"]], "screening (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.screening"]], "screening (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.screening"]], "screening (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.screening"]], "screening (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.screening"]], "screening (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.screening"]], "screening (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.screening"]], "set_cas() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.set_cas"]], "set_cas() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.set_cas"]], "set_cas() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.set_cas"]], "set_cas() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.set_cas"]], "set_hcore() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.set_hcore"]], "set_hcore() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.set_hcore"]], "set_ovlp() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.set_ovlp"]], "set_ovlp() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.set_ovlp"]], "set_veff() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.set_veff"]], "set_veff() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.set_veff"]], "site_fragmentation() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.site_fragmentation"]], "site_fragmentation() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.site_fragmentation"]], "solver_options (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.solver_options"]], "solver_options (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.solver_options"]], "solver_options (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.solver_options"]], "solver_options (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.solver_options"]], "solver_options (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.solver_options"]], "solver_options (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.solver_options"]], "solver_options (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.solver_options"]], "solver_options (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.solver_options"]], "spinsym (vayesta.ewf.ewf.ewf attribute)": [[13, "vayesta.ewf.ewf.EWF.spinsym"]], "spinsym (vayesta.ewf.uewf.uewf attribute)": [[13, "vayesta.ewf.uewf.UEWF.spinsym"]], "store_eris (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.store_eris"]], "store_eris (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.store_eris"]], "store_eris (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.store_eris"]], "store_eris (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.store_eris"]], "store_eris (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.store_eris"]], "store_eris (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.store_eris"]], "store_eris (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.store_eris"]], "store_eris (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.store_eris"]], "store_wf_type (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.store_wf_type"]], "store_wf_type (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.store_wf_type"]], "store_wf_type (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.store_wf_type"]], "store_wf_type (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.store_wf_type"]], "store_wf_type (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.store_wf_type"]], "store_wf_type (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.store_wf_type"]], "store_wf_type (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.store_wf_type"]], "store_wf_type (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.store_wf_type"]], "sym_factor (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.sym_factor"]], "sym_factor (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.sym_factor"]], "sym_factor (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.sym_factor"]], "sym_factor (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.sym_factor"]], "sym_factor (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.sym_factor"]], "symmetry_factor (vayesta.ewf.ewf.ewf.fragment property)": [[13, "vayesta.ewf.ewf.EWF.Fragment.symmetry_factor"]], "symmetry_factor (vayesta.ewf.fragment.fragment property)": [[13, "vayesta.ewf.fragment.Fragment.symmetry_factor"]], "symmetry_factor (vayesta.ewf.uewf.uewf.fragment property)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.symmetry_factor"]], "symmetry_factor (vayesta.ewf.ufragment.fragment property)": [[13, "vayesta.ewf.ufragment.Fragment.symmetry_factor"]], "symmetry_mf_tol (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.symmetry_mf_tol"]], "symmetry_mf_tol (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.symmetry_mf_tol"]], "symmetry_mf_tol (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.symmetry_mf_tol"]], "symmetry_tol (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.symmetry_tol"]], "symmetry_tol (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.symmetry_tol"]], "symmetry_tol (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.symmetry_tol"]], "t1_diagnostic() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.t1_diagnostic"]], "t1_diagnostic() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.t1_diagnostic"]], "t_as_lambda (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.t_as_lambda"]], "t_as_lambda (vayesta.ewf.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Options.t_as_lambda"]], "t_as_lambda (vayesta.ewf.ewf.options attribute)": [[13, "vayesta.ewf.ewf.Options.t_as_lambda"]], "t_as_lambda (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.t_as_lambda"]], "t_as_lambda (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.t_as_lambda"]], "t_as_lambda (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.t_as_lambda"]], "t_as_lambda (vayesta.ewf.uewf.uewf.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Options.t_as_lambda"]], "t_as_lambda (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.t_as_lambda"]], "tailor_all_fragments() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.tailor_all_fragments"]], "tailor_all_fragments() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.tailor_all_fragments"]], "tailor_with_fragments() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.tailor_with_fragments"]], "tailor_with_fragments() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.tailor_with_fragments"]], "tailor_with_fragments() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.tailor_with_fragments"]], "tailor_with_fragments() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.tailor_with_fragments"]], "tcc_fci_opts (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.tcc_fci_opts"]], "tcc_fci_opts (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.tcc_fci_opts"]], "tcc_fci_opts (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.tcc_fci_opts"]], "tcc_fci_opts (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.tcc_fci_opts"]], "tcc_fci_opts (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.tcc_fci_opts"]], "test_extcorr (vayesta.ewf.ewf.ewf.fragment.flags attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Flags.test_extcorr"]], "test_extcorr (vayesta.ewf.fragment.fragment.flags attribute)": [[13, "vayesta.ewf.fragment.Fragment.Flags.test_extcorr"]], "test_extcorr (vayesta.ewf.uewf.uewf.fragment.flags attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Flags.test_extcorr"]], "test_extcorr (vayesta.ewf.ufragment.fragment.flags attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Flags.test_extcorr"]], "trimmed_name() (vayesta.ewf.ewf.ewf.fragment method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.trimmed_name"]], "trimmed_name() (vayesta.ewf.fragment.fragment method)": [[13, "vayesta.ewf.fragment.Fragment.trimmed_name"]], "trimmed_name() (vayesta.ewf.uewf.uewf.fragment method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.trimmed_name"]], "trimmed_name() (vayesta.ewf.ufragment.fragment method)": [[13, "vayesta.ewf.ufragment.Fragment.trimmed_name"]], "update() (vayesta.ewf.ewf.ewf.fragment.options method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.update"]], "update() (vayesta.ewf.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.EWF.Options.update"]], "update() (vayesta.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.Options.update"]], "update() (vayesta.ewf.fragment.fragment.options method)": [[13, "vayesta.ewf.fragment.Fragment.Options.update"]], "update() (vayesta.ewf.fragment.options method)": [[13, "vayesta.ewf.fragment.Options.update"]], "update() (vayesta.ewf.uewf.uewf.fragment.options method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.update"]], "update() (vayesta.ewf.uewf.uewf.options method)": [[13, "vayesta.ewf.uewf.UEWF.Options.update"]], "update() (vayesta.ewf.ufragment.fragment.options method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.update"]], "update_mf() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.update_mf"]], "update_mf() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.update_mf"]], "values() (vayesta.ewf.ewf.ewf.fragment.options method)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.values"]], "values() (vayesta.ewf.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.EWF.Options.values"]], "values() (vayesta.ewf.ewf.options method)": [[13, "vayesta.ewf.ewf.Options.values"]], "values() (vayesta.ewf.fragment.fragment.options method)": [[13, "vayesta.ewf.fragment.Fragment.Options.values"]], "values() (vayesta.ewf.fragment.options method)": [[13, "vayesta.ewf.fragment.Options.values"]], "values() (vayesta.ewf.uewf.uewf.fragment.options method)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.values"]], "values() (vayesta.ewf.uewf.uewf.options method)": [[13, "vayesta.ewf.uewf.UEWF.Options.values"]], "values() (vayesta.ewf.ufragment.fragment.options method)": [[13, "vayesta.ewf.ufragment.Fragment.Options.values"]], "vayesta.ewf": [[13, "module-vayesta.ewf"]], "vayesta.ewf.ewf": [[13, "module-vayesta.ewf.ewf"]], "vayesta.ewf.fragment": [[13, "module-vayesta.ewf.fragment"]], "vayesta.ewf.helper": [[13, "module-vayesta.ewf.helper"]], "vayesta.ewf.uewf": [[13, "module-vayesta.ewf.uewf"]], "vayesta.ewf.ufragment": [[13, "module-vayesta.ewf.ufragment"]], "wf (vayesta.ewf.ewf.ewf.fragment.results attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Results.wf"]], "wf (vayesta.ewf.fragment.fragment.results attribute)": [[13, "vayesta.ewf.fragment.Fragment.Results.wf"]], "wf (vayesta.ewf.uewf.uewf.fragment.results attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Results.wf"]], "wf (vayesta.ewf.ufragment.fragment.results attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Results.wf"]], "wf_factor (vayesta.ewf.ewf.ewf.fragment.options attribute)": [[13, "vayesta.ewf.ewf.EWF.Fragment.Options.wf_factor"]], "wf_factor (vayesta.ewf.fragment.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Fragment.Options.wf_factor"]], "wf_factor (vayesta.ewf.fragment.options attribute)": [[13, "vayesta.ewf.fragment.Options.wf_factor"]], "wf_factor (vayesta.ewf.uewf.uewf.fragment.options attribute)": [[13, "vayesta.ewf.uewf.UEWF.Fragment.Options.wf_factor"]], "wf_factor (vayesta.ewf.ufragment.fragment.options attribute)": [[13, "vayesta.ewf.ufragment.Fragment.Options.wf_factor"]], "write_population() (vayesta.ewf.ewf.ewf method)": [[13, "vayesta.ewf.ewf.EWF.write_population"]], "write_population() (vayesta.ewf.uewf.uewf method)": [[13, "vayesta.ewf.uewf.UEWF.write_population"]], "ccsd() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.CCSD"]], "ccsd() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.CCSD"]], "cisd() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.CISD"]], "cisd() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.CISD"]], "dfmp2 (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.DFMP2"]], "dfmp2() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.DFMP2"]], "diis (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.DIIS"], [14, "vayesta.lattmod.latt.LatticeRHF.diis"]], "diis (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.DIIS"], [14, "vayesta.lattmod.latt.LatticeUHF.diis"]], "gv (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.Gv"]], "gv (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.Gv"]], "gv (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.Gv"]], "gv (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.Gv"]], "hubbard (class in vayesta.lattmod.latt)": [[14, "vayesta.lattmod.latt.Hubbard"]], "hubbard1d (class in vayesta.lattmod.latt)": [[14, "vayesta.lattmod.latt.Hubbard1D"]], "hubbard2d (class in vayesta.lattmod.latt)": [[14, "vayesta.lattmod.latt.Hubbard2D"]], "hubbarddf (class in vayesta.lattmod.latt)": [[14, "vayesta.lattmod.latt.HubbardDF"]], "latticemf() (in module vayesta.lattmod)": [[14, "vayesta.lattmod.LatticeMF"]], "latticemole (class in vayesta.lattmod.latt)": [[14, "vayesta.lattmod.latt.LatticeMole"]], "latticerhf (class in vayesta.lattmod.latt)": [[14, "vayesta.lattmod.latt.LatticeRHF"]], "latticescf (class in vayesta.lattmod.latt)": [[14, "vayesta.lattmod.latt.LatticeSCF"]], "latticeuhf (class in vayesta.lattmod.latt)": [[14, "vayesta.lattmod.latt.LatticeUHF"]], "mp2() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.MP2"]], "mp2() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.MP2"]], "qcisd() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.QCISD"]], "qcisd() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.QCISD"]], "add_keys() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.add_keys"]], "add_keys() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.add_keys"]], "add_keys() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.add_keys"]], "add_keys() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.add_keys"]], "add_keys() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.add_keys"]], "add_keys() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.add_keys"]], "analyze() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.analyze"]], "analyze() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.analyze"]], "ao2mo() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.ao2mo"]], "ao2mo() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.ao2mo"]], "ao2mo() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.ao2mo"]], "ao2mo() (vayesta.lattmod.latt.hubbarddf method)": [[14, "vayesta.lattmod.latt.HubbardDF.ao2mo"]], "ao2mo() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.ao2mo"]], "ao_labels() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.ao_labels"]], "ao_labels() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.ao_labels"]], "ao_labels() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.ao_labels"]], "ao_labels() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.ao_labels"]], "ao_loc (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.ao_loc"]], "ao_loc (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.ao_loc"]], "ao_loc (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.ao_loc"]], "ao_loc (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.ao_loc"]], "ao_loc_2c() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.ao_loc_2c"]], "ao_loc_2c() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.ao_loc_2c"]], "ao_loc_2c() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.ao_loc_2c"]], "ao_loc_2c() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.ao_loc_2c"]], "ao_loc_nr() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.ao_loc_nr"]], "ao_loc_nr() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.ao_loc_nr"]], "ao_loc_nr() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.ao_loc_nr"]], "ao_loc_nr() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.ao_loc_nr"]], "ao_rotation_matrix() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.ao_rotation_matrix"]], "ao_rotation_matrix() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.ao_rotation_matrix"]], "ao_rotation_matrix() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.ao_rotation_matrix"]], "ao_rotation_matrix() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.ao_rotation_matrix"]], "aoslice_2c_by_atom() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.aoslice_2c_by_atom"]], "aoslice_2c_by_atom() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.aoslice_2c_by_atom"]], "aoslice_2c_by_atom() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.aoslice_2c_by_atom"]], "aoslice_2c_by_atom() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.aoslice_2c_by_atom"]], "aoslice_by_atom() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.aoslice_by_atom"]], "aoslice_by_atom() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.aoslice_by_atom"]], "aoslice_by_atom() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.aoslice_by_atom"]], "aoslice_by_atom() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.aoslice_by_atom"]], "aoslice_nr_by_atom() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.aoslice_nr_by_atom"]], "aoslice_nr_by_atom() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.aoslice_nr_by_atom"]], "aoslice_nr_by_atom() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.aoslice_nr_by_atom"]], "aoslice_nr_by_atom() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.aoslice_nr_by_atom"]], "apply() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.apply"]], "apply() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.apply"]], "apply() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.apply"]], "apply() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.apply"]], "apply() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.apply"]], "apply() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.apply"]], "as_scanner() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.as_scanner"]], "as_scanner() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.as_scanner"]], "async_io (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.async_io"]], "async_io (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.async_io"]], "atom_charge() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.atom_charge"]], "atom_charge() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.atom_charge"]], "atom_charge() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.atom_charge"]], "atom_charge() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.atom_charge"]], "atom_charges() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.atom_charges"]], "atom_charges() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.atom_charges"]], "atom_charges() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.atom_charges"]], "atom_charges() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.atom_charges"]], "atom_coord() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.atom_coord"]], "atom_coord() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.atom_coord"]], "atom_coord() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.atom_coord"]], "atom_coord() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.atom_coord"]], "atom_coords() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.atom_coords"]], "atom_coords() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.atom_coords"]], "atom_coords() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.atom_coords"]], "atom_coords() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.atom_coords"]], "atom_mass_list() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.atom_mass_list"]], "atom_mass_list() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.atom_mass_list"]], "atom_mass_list() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.atom_mass_list"]], "atom_mass_list() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.atom_mass_list"]], "atom_nelec_core() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.atom_nelec_core"]], "atom_nelec_core() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.atom_nelec_core"]], "atom_nelec_core() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.atom_nelec_core"]], "atom_nelec_core() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.atom_nelec_core"]], "atom_nshells() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.atom_nshells"]], "atom_nshells() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.atom_nshells"]], "atom_nshells() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.atom_nshells"]], "atom_nshells() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.atom_nshells"]], "atom_pure_symbol() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.atom_pure_symbol"]], "atom_pure_symbol() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.atom_pure_symbol"]], "atom_pure_symbol() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.atom_pure_symbol"]], "atom_pure_symbol() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.atom_pure_symbol"]], "atom_shell_ids() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.atom_shell_ids"]], "atom_shell_ids() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.atom_shell_ids"]], "atom_shell_ids() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.atom_shell_ids"]], "atom_shell_ids() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.atom_shell_ids"]], "atom_symbol() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.atom_symbol"]], "atom_symbol() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.atom_symbol"]], "atom_symbol() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.atom_symbol"]], "atom_symbol() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.atom_symbol"]], "bas_angular() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_angular"]], "bas_angular() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_angular"]], "bas_angular() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_angular"]], "bas_angular() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_angular"]], "bas_atom() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_atom"]], "bas_atom() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_atom"]], "bas_atom() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_atom"]], "bas_atom() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_atom"]], "bas_coord() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_coord"]], "bas_coord() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_coord"]], "bas_coord() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_coord"]], "bas_coord() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_coord"]], "bas_ctr_coeff() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_ctr_coeff"]], "bas_ctr_coeff() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_ctr_coeff"]], "bas_ctr_coeff() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_ctr_coeff"]], "bas_ctr_coeff() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_ctr_coeff"]], "bas_exp() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_exp"]], "bas_exp() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_exp"]], "bas_exp() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_exp"]], "bas_exp() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_exp"]], "bas_exps() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_exps"]], "bas_exps() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_exps"]], "bas_exps() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_exps"]], "bas_exps() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_exps"]], "bas_kappa() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_kappa"]], "bas_kappa() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_kappa"]], "bas_kappa() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_kappa"]], "bas_kappa() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_kappa"]], "bas_len_cart() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_len_cart"]], "bas_len_cart() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_len_cart"]], "bas_len_cart() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_len_cart"]], "bas_len_cart() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_len_cart"]], "bas_len_spinor() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_len_spinor"]], "bas_len_spinor() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_len_spinor"]], "bas_len_spinor() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_len_spinor"]], "bas_len_spinor() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_len_spinor"]], "bas_nctr() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_nctr"]], "bas_nctr() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_nctr"]], "bas_nctr() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_nctr"]], "bas_nctr() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_nctr"]], "bas_nprim() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_nprim"]], "bas_nprim() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_nprim"]], "bas_nprim() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_nprim"]], "bas_nprim() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_nprim"]], "bas_rcut() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.bas_rcut"]], "bas_rcut() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.bas_rcut"]], "bas_rcut() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.bas_rcut"]], "bas_rcut() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.bas_rcut"]], "build() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.build"]], "build() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.build"]], "build() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.build"]], "build() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.build"]], "build() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.build"]], "build() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.build"]], "callback (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.callback"]], "callback (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.callback"]], "canonicalize() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.canonicalize"]], "canonicalize() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.canonicalize"]], "cart (vayesta.lattmod.latt.hubbard attribute)": [[14, "vayesta.lattmod.latt.Hubbard.cart"]], "cart (vayesta.lattmod.latt.hubbard1d attribute)": [[14, "vayesta.lattmod.latt.Hubbard1D.cart"]], "cart (vayesta.lattmod.latt.hubbard2d attribute)": [[14, "vayesta.lattmod.latt.Hubbard2D.cart"]], "cart (vayesta.lattmod.latt.latticemole attribute)": [[14, "vayesta.lattmod.latt.LatticeMole.cart"]], "cart2sph_coeff() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.cart2sph_coeff"]], "cart2sph_coeff() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.cart2sph_coeff"]], "cart2sph_coeff() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.cart2sph_coeff"]], "cart2sph_coeff() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.cart2sph_coeff"]], "cart_labels() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.cart_labels"]], "cart_labels() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.cart_labels"]], "cart_labels() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.cart_labels"]], "cart_labels() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.cart_labels"]], "cell (vayesta.lattmod.latt.latticerhf property)": [[14, "vayesta.lattmod.latt.LatticeRHF.cell"]], "cell (vayesta.lattmod.latt.latticescf property)": [[14, "vayesta.lattmod.latt.LatticeSCF.cell"]], "cell (vayesta.lattmod.latt.latticeuhf property)": [[14, "vayesta.lattmod.latt.LatticeUHF.cell"]], "check_convergence (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.check_convergence"]], "check_convergence (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.check_convergence"]], "check_lattice_symmetry() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.check_lattice_symmetry"]], "check_sanity() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.check_sanity"]], "check_sanity() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.check_sanity"]], "check_sanity() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.check_sanity"]], "check_sanity() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.check_sanity"]], "check_sanity() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.check_sanity"]], "check_sanity() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.check_sanity"]], "condense_to_shell() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.condense_to_shell"]], "condense_to_shell() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.condense_to_shell"]], "condense_to_shell() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.condense_to_shell"]], "condense_to_shell() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.condense_to_shell"]], "conv_check (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.conv_check"]], "conv_check (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.conv_check"]], "conv_tol (vayesta.lattmod.latt.latticerhf attribute)": [[14, "id146"], [14, "id156"], [14, "vayesta.lattmod.latt.LatticeRHF.conv_tol"]], "conv_tol (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "id166"], [14, "vayesta.lattmod.latt.LatticeUHF.conv_tol"]], "conv_tol_grad (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.conv_tol_grad"]], "conv_tol_grad (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.conv_tol_grad"]], "conv_tol_normt (vayesta.lattmod.latt.latticerhf attribute)": [[14, "id147"], [14, "vayesta.lattmod.latt.LatticeRHF.conv_tol_normt"]], "conv_tol_normt (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.conv_tol_normt"]], "convert_from_() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.convert_from_"]], "convert_from_() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.convert_from_"]], "copy() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.copy"]], "copy() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.copy"]], "copy() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.copy"]], "copy() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.copy"]], "damp (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.damp"]], "damp (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.damp"]], "damp_factor (vayesta.lattmod.latt.latticerhf property)": [[14, "vayesta.lattmod.latt.LatticeRHF.damp_factor"]], "damp_factor (vayesta.lattmod.latt.latticeuhf property)": [[14, "vayesta.lattmod.latt.LatticeUHF.damp_factor"]], "decontract_basis() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.decontract_basis"]], "decontract_basis() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.decontract_basis"]], "decontract_basis() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.decontract_basis"]], "decontract_basis() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.decontract_basis"]], "density_fit() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.density_fit"]], "density_fit() (vayesta.lattmod.latt.latticescf method)": [[14, "vayesta.lattmod.latt.LatticeSCF.density_fit"]], "density_fit() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.density_fit"]], "det_ovlp() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.det_ovlp"]], "diis_file (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.diis_file"]], "diis_file (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.diis_file"]], "diis_space (vayesta.lattmod.latt.latticerhf attribute)": [[14, "id149"], [14, "id157"], [14, "vayesta.lattmod.latt.LatticeRHF.diis_space"]], "diis_space (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "id167"], [14, "vayesta.lattmod.latt.LatticeUHF.diis_space"]], "diis_space_rollback (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.diis_space_rollback"]], "diis_space_rollback (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.diis_space_rollback"]], "diis_start_cycle (vayesta.lattmod.latt.latticerhf attribute)": [[14, "id158"], [14, "vayesta.lattmod.latt.LatticeRHF.diis_start_cycle"]], "diis_start_cycle (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "id168"], [14, "vayesta.lattmod.latt.LatticeUHF.diis_start_cycle"]], "dip_moment() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.dip_moment"]], "dip_moment() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.dip_moment"]], "direct (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.direct"]], "direct (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.direct"]], "direct_scf (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.direct_scf"]], "direct_scf (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.direct_scf"]], "direct_scf_tol (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.direct_scf_tol"]], "direct_scf_tol (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.direct_scf_tol"]], "drop_exponent (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.drop_exponent"]], "drop_exponent (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.drop_exponent"]], "drop_exponent (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.drop_exponent"]], "drop_exponent (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.drop_exponent"]], "dump_chk() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.dump_chk"]], "dump_chk() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.dump_chk"]], "dump_flags() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.dump_flags"]], "dump_flags() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.dump_flags"]], "dump_input() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.dump_input"]], "dump_input() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.dump_input"]], "dump_input() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.dump_input"]], "dump_input() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.dump_input"]], "dump_scf_summary() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.dump_scf_summary"]], "dump_scf_summary() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.dump_scf_summary"]], "dumps() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.dumps"]], "dumps() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.dumps"]], "dumps() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.dumps"]], "dumps() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.dumps"]], "eig() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.eig"]], "eig() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.eig"]], "elements (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.elements"]], "elements (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.elements"]], "elements (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.elements"]], "elements (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.elements"]], "energy_elec() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.energy_elec"]], "energy_elec() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.energy_elec"]], "energy_nuc() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.energy_nuc"]], "energy_nuc() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.energy_nuc"]], "energy_nuc() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.energy_nuc"]], "energy_nuc() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.energy_nuc"]], "energy_nuc() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.energy_nuc"]], "energy_nuc() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.energy_nuc"]], "energy_tot() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.energy_tot"]], "energy_tot() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.energy_tot"]], "etbs() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.etbs"]], "etbs() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.etbs"]], "etbs() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.etbs"]], "etbs() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.etbs"]], "eval_ao() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.eval_ao"]], "eval_ao() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.eval_ao"]], "eval_ao() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.eval_ao"]], "eval_ao() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.eval_ao"]], "eval_gto() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.eval_gto"]], "eval_gto() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.eval_gto"]], "eval_gto() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.eval_gto"]], "eval_gto() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.eval_gto"]], "ew_cut (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.ew_cut"]], "ew_cut (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.ew_cut"]], "ew_cut (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.ew_cut"]], "ew_cut (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.ew_cut"]], "ew_eta (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.ew_eta"]], "ew_eta (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.ew_eta"]], "ew_eta (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.ew_eta"]], "ew_eta (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.ew_eta"]], "ewald() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.ewald"]], "ewald() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.ewald"]], "ewald() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.ewald"]], "ewald() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.ewald"]], "exp_to_discard (vayesta.lattmod.latt.hubbard attribute)": [[14, "vayesta.lattmod.latt.Hubbard.exp_to_discard"]], "exp_to_discard (vayesta.lattmod.latt.hubbard1d attribute)": [[14, "vayesta.lattmod.latt.Hubbard1D.exp_to_discard"]], "exp_to_discard (vayesta.lattmod.latt.hubbard2d attribute)": [[14, "vayesta.lattmod.latt.Hubbard2D.exp_to_discard"]], "exp_to_discard (vayesta.lattmod.latt.latticemole attribute)": [[14, "vayesta.lattmod.latt.LatticeMole.exp_to_discard"]], "expand_etb() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.expand_etb"]], "expand_etb() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.expand_etb"]], "expand_etb() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.expand_etb"]], "expand_etb() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.expand_etb"]], "expand_etbs() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.expand_etbs"]], "expand_etbs() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.expand_etbs"]], "expand_etbs() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.expand_etbs"]], "expand_etbs() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.expand_etbs"]], "format_atom() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.format_atom"]], "format_atom() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.format_atom"]], "format_atom() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.format_atom"]], "format_atom() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.format_atom"]], "format_basis() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.format_basis"]], "format_basis() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.format_basis"]], "format_basis() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.format_basis"]], "format_basis() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.format_basis"]], "format_ecp() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.format_ecp"]], "format_ecp() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.format_ecp"]], "format_ecp() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.format_ecp"]], "format_ecp() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.format_ecp"]], "format_pseudo() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.format_pseudo"]], "format_pseudo() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.format_pseudo"]], "format_pseudo() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.format_pseudo"]], "format_pseudo() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.format_pseudo"]], "from_ase() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.from_ase"]], "from_ase() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.from_ase"]], "from_ase() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.from_ase"]], "from_ase() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.from_ase"]], "from_chk() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.from_chk"]], "from_chk() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.from_chk"]], "fromfile() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.fromfile"]], "fromfile() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.fromfile"]], "fromfile() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.fromfile"]], "fromfile() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.fromfile"]], "fromstring() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.fromstring"]], "fromstring() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.fromstring"]], "fromstring() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.fromstring"]], "fromstring() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.fromstring"]], "frozen (vayesta.lattmod.latt.latticerhf attribute)": [[14, "id151"], [14, "vayesta.lattmod.latt.LatticeRHF.frozen"]], "frozen (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.frozen"]], "gen_uniform_grids() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.gen_uniform_grids"]], "gen_uniform_grids() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.gen_uniform_grids"]], "gen_uniform_grids() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.gen_uniform_grids"]], "gen_uniform_grids() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.gen_uniform_grids"]], "get_gv() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_Gv"]], "get_gv() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_Gv"]], "get_gv() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_Gv"]], "get_gv() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_Gv"]], "get_gv_weights() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_Gv_weights"]], "get_gv_weights() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_Gv_weights"]], "get_gv_weights() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_Gv_weights"]], "get_gv_weights() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_Gv_weights"]], "get_si() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_SI"]], "get_si() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_SI"]], "get_si() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_SI"]], "get_si() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_SI"]], "get_abs_kpts() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_abs_kpts"]], "get_abs_kpts() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_abs_kpts"]], "get_abs_kpts() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_abs_kpts"]], "get_abs_kpts() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_abs_kpts"]], "get_ao_indices() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_ao_indices"]], "get_ao_indices() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_ao_indices"]], "get_ao_indices() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_ao_indices"]], "get_ao_indices() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_ao_indices"]], "get_bounding_sphere() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_bounding_sphere"]], "get_bounding_sphere() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_bounding_sphere"]], "get_bounding_sphere() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_bounding_sphere"]], "get_bounding_sphere() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_bounding_sphere"]], "get_enuc() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_enuc"]], "get_enuc() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_enuc"]], "get_enuc() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_enuc"]], "get_enuc() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_enuc"]], "get_eri() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_eri"]], "get_eri() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_eri"]], "get_ewald_params() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_ewald_params"]], "get_ewald_params() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_ewald_params"]], "get_ewald_params() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_ewald_params"]], "get_ewald_params() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_ewald_params"]], "get_fock() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.get_fock"]], "get_fock() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.get_fock"]], "get_grad() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.get_grad"]], "get_grad() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.get_grad"]], "get_hcore() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.get_hcore"]], "get_hcore() (vayesta.lattmod.latt.latticescf method)": [[14, "vayesta.lattmod.latt.LatticeSCF.get_hcore"]], "get_hcore() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.get_hcore"]], "get_index() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_index"]], "get_index() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_index"]], "get_init_guess() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.get_init_guess"]], "get_init_guess() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.get_init_guess"]], "get_j() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.get_j"]], "get_j() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.get_j"]], "get_jk() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.get_jk"]], "get_jk() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.get_jk"]], "get_k() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.get_k"]], "get_k() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.get_k"]], "get_kpts() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_kpts"]], "get_kpts() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_kpts"]], "get_kpts() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_kpts"]], "get_kpts() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_kpts"]], "get_lattice_ls() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_lattice_Ls"]], "get_lattice_ls() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_lattice_Ls"]], "get_lattice_ls() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_lattice_Ls"]], "get_lattice_ls() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_lattice_Ls"]], "get_naoaux() (vayesta.lattmod.latt.hubbarddf method)": [[14, "vayesta.lattmod.latt.HubbardDF.get_naoaux"]], "get_nimgs() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_nimgs"]], "get_nimgs() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_nimgs"]], "get_nimgs() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_nimgs"]], "get_nimgs() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_nimgs"]], "get_occ() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.get_occ"]], "get_occ() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.get_occ"]], "get_overlap_cond() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_overlap_cond"]], "get_overlap_cond() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_overlap_cond"]], "get_overlap_cond() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_overlap_cond"]], "get_overlap_cond() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_overlap_cond"]], "get_ovlp() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.get_ovlp"]], "get_ovlp() (vayesta.lattmod.latt.latticescf method)": [[14, "vayesta.lattmod.latt.LatticeSCF.get_ovlp"]], "get_ovlp() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.get_ovlp"]], "get_scaled_kpts() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_scaled_kpts"]], "get_scaled_kpts() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_scaled_kpts"]], "get_scaled_kpts() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_scaled_kpts"]], "get_scaled_kpts() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_scaled_kpts"]], "get_scaled_positions() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_scaled_positions"]], "get_scaled_positions() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_scaled_positions"]], "get_scaled_positions() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_scaled_positions"]], "get_scaled_positions() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_scaled_positions"]], "get_tiles_order() (vayesta.lattmod.latt.hubbard2d static method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_tiles_order"]], "get_uniform_grids() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.get_uniform_grids"]], "get_uniform_grids() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.get_uniform_grids"]], "get_uniform_grids() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.get_uniform_grids"]], "get_uniform_grids() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.get_uniform_grids"]], "get_veff() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.get_veff"]], "get_veff() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.get_veff"]], "gs (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.gs"]], "gs (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.gs"]], "gs (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.gs"]], "gs (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.gs"]], "gto_norm() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.gto_norm"]], "gto_norm() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.gto_norm"]], "gto_norm() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.gto_norm"]], "gto_norm() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.gto_norm"]], "h (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.h"]], "h (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.h"]], "h (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.h"]], "h (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.h"]], "has_ecp() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.has_ecp"]], "has_ecp() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.has_ecp"]], "has_ecp() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.has_ecp"]], "has_ecp() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.has_ecp"]], "has_ecp_soc() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.has_ecp_soc"]], "has_ecp_soc() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.has_ecp_soc"]], "has_ecp_soc() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.has_ecp_soc"]], "has_ecp_soc() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.has_ecp_soc"]], "hf_energy (vayesta.lattmod.latt.latticerhf property)": [[14, "vayesta.lattmod.latt.LatticeRHF.hf_energy"]], "hf_energy (vayesta.lattmod.latt.latticeuhf property)": [[14, "vayesta.lattmod.latt.LatticeUHF.hf_energy"]], "hubbard1d_bethe_docc() (in module vayesta.lattmod.bethe)": [[14, "vayesta.lattmod.bethe.hubbard1d_bethe_docc"]], "hubbard1d_bethe_docc_numdiff() (in module vayesta.lattmod.bethe)": [[14, "vayesta.lattmod.bethe.hubbard1d_bethe_docc_numdiff"]], "hubbard1d_bethe_energy() (in module vayesta.lattmod.bethe)": [[14, "vayesta.lattmod.bethe.hubbard1d_bethe_energy"]], "incore_anyway (vayesta.lattmod.latt.hubbard attribute)": [[14, "vayesta.lattmod.latt.Hubbard.incore_anyway"]], "incore_anyway (vayesta.lattmod.latt.hubbard1d attribute)": [[14, "vayesta.lattmod.latt.Hubbard1D.incore_anyway"]], "incore_anyway (vayesta.lattmod.latt.hubbard2d attribute)": [[14, "vayesta.lattmod.latt.Hubbard2D.incore_anyway"]], "incore_anyway (vayesta.lattmod.latt.latticemole attribute)": [[14, "vayesta.lattmod.latt.LatticeMole.incore_anyway"]], "incore_complete (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.incore_complete"]], "incore_complete (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.incore_complete"]], "inertia_moment() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.inertia_moment"]], "inertia_moment() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.inertia_moment"]], "inertia_moment() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.inertia_moment"]], "inertia_moment() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.inertia_moment"]], "init_direct_scf() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.init_direct_scf"]], "init_direct_scf() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.init_direct_scf"]], "init_guess (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.init_guess"]], "init_guess (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.init_guess"]], "init_guess_by_1e() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.init_guess_by_1e"]], "init_guess_by_1e() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.init_guess_by_1e"]], "init_guess_by_atom() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.init_guess_by_atom"]], "init_guess_by_atom() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.init_guess_by_atom"]], "init_guess_by_chkfile() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.init_guess_by_chkfile"]], "init_guess_by_chkfile() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.init_guess_by_chkfile"]], "init_guess_by_huckel() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.init_guess_by_huckel"]], "init_guess_by_huckel() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.init_guess_by_huckel"]], "init_guess_by_minao() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.init_guess_by_minao"]], "init_guess_by_minao() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.init_guess_by_minao"]], "intor() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.intor"]], "intor() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.intor"]], "intor() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.intor"]], "intor() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.intor"]], "intor_asymmetric() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.intor_asymmetric"]], "intor_asymmetric() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.intor_asymmetric"]], "intor_asymmetric() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.intor_asymmetric"]], "intor_asymmetric() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.intor_asymmetric"]], "intor_by_shell() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.intor_by_shell"]], "intor_by_shell() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.intor_by_shell"]], "intor_by_shell() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.intor_by_shell"]], "intor_by_shell() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.intor_by_shell"]], "intor_symmetric() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.intor_symmetric"]], "intor_symmetric() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.intor_symmetric"]], "intor_symmetric() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.intor_symmetric"]], "intor_symmetric() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.intor_symmetric"]], "iterative_damping (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.iterative_damping"]], "iterative_damping (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.iterative_damping"]], "kernel() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.kernel"]], "kernel() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.kernel"]], "kernel() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.kernel"]], "kernel() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.kernel"]], "kernel() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.kernel"]], "kernel() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.kernel"]], "lattice_vectors() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.lattice_vectors"]], "lattice_vectors() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.lattice_vectors"]], "lattice_vectors() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.lattice_vectors"]], "lattice_vectors() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.lattice_vectors"]], "level_shift (vayesta.lattmod.latt.latticerhf attribute)": [[14, "id150"], [14, "id159"], [14, "vayesta.lattmod.latt.LatticeRHF.level_shift"]], "level_shift (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "id169"], [14, "vayesta.lattmod.latt.LatticeUHF.level_shift"]], "level_shift_factor (vayesta.lattmod.latt.latticerhf property)": [[14, "vayesta.lattmod.latt.LatticeRHF.level_shift_factor"]], "level_shift_factor (vayesta.lattmod.latt.latticeuhf property)": [[14, "vayesta.lattmod.latt.LatticeUHF.level_shift_factor"]], "loads() (vayesta.lattmod.latt.hubbard class method)": [[14, "vayesta.lattmod.latt.Hubbard.loads"]], "loads() (vayesta.lattmod.latt.hubbard1d class method)": [[14, "vayesta.lattmod.latt.Hubbard1D.loads"]], "loads() (vayesta.lattmod.latt.hubbard2d class method)": [[14, "vayesta.lattmod.latt.Hubbard2D.loads"]], "loads() (vayesta.lattmod.latt.latticemole class method)": [[14, "vayesta.lattmod.latt.LatticeMole.loads"]], "loads_() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.loads_"]], "loads_() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.loads_"]], "loads_() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.loads_"]], "loads_() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.loads_"]], "loop() (vayesta.lattmod.latt.hubbarddf method)": [[14, "vayesta.lattmod.latt.HubbardDF.loop"]], "make_asym_dm() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.make_asym_dm"]], "make_atm_env() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.make_atm_env"]], "make_atm_env() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.make_atm_env"]], "make_atm_env() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.make_atm_env"]], "make_atm_env() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.make_atm_env"]], "make_bas_env() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.make_bas_env"]], "make_bas_env() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.make_bas_env"]], "make_bas_env() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.make_bas_env"]], "make_bas_env() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.make_bas_env"]], "make_ecp_env() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.make_ecp_env"]], "make_ecp_env() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.make_ecp_env"]], "make_ecp_env() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.make_ecp_env"]], "make_ecp_env() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.make_ecp_env"]], "make_env() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.make_env"]], "make_env() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.make_env"]], "make_env() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.make_env"]], "make_env() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.make_env"]], "make_kpts() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.make_kpts"]], "make_kpts() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.make_kpts"]], "make_kpts() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.make_kpts"]], "make_kpts() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.make_kpts"]], "make_rdm1() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.make_rdm1"]], "make_rdm1() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.make_rdm1"]], "make_rdm2() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.make_rdm2"]], "make_rdm2() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.make_rdm2"]], "max_cycle (vayesta.lattmod.latt.latticerhf attribute)": [[14, "id148"], [14, "id160"], [14, "vayesta.lattmod.latt.LatticeRHF.max_cycle"]], "max_cycle (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "id170"], [14, "vayesta.lattmod.latt.LatticeUHF.max_cycle"]], "max_memory (vayesta.lattmod.latt.latticerhf attribute)": [[14, "id145"], [14, "vayesta.lattmod.latt.LatticeRHF.max_memory"]], "max_memory (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.max_memory"]], "mesh (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.mesh"]], "mesh (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.mesh"]], "mesh (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.mesh"]], "mesh (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.mesh"]], "ms (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.ms"]], "ms (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.ms"]], "ms (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.ms"]], "ms (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.ms"]], "mulliken_meta() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.mulliken_meta"]], "mulliken_meta() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.mulliken_meta"]], "mulliken_meta_spin() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.mulliken_meta_spin"]], "mulliken_pop() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.mulliken_pop"]], "mulliken_pop() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.mulliken_pop"]], "mulliken_pop_meta_lowdin_ao() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.mulliken_pop_meta_lowdin_ao"]], "mulliken_pop_meta_lowdin_ao() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.mulliken_pop_meta_lowdin_ao"]], "mulliken_spin_pop() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.mulliken_spin_pop"]], "multiplicity (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.multiplicity"]], "multiplicity (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.multiplicity"]], "multiplicity (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.multiplicity"]], "multiplicity (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.multiplicity"]], "nao (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.nao"]], "nao (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.nao"]], "nao (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.nao"]], "nao (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.nao"]], "nao_2c() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.nao_2c"]], "nao_2c() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.nao_2c"]], "nao_2c() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.nao_2c"]], "nao_2c() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.nao_2c"]], "nao_2c_range() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.nao_2c_range"]], "nao_2c_range() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.nao_2c_range"]], "nao_2c_range() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.nao_2c_range"]], "nao_2c_range() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.nao_2c_range"]], "nao_cart() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.nao_cart"]], "nao_cart() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.nao_cart"]], "nao_cart() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.nao_cart"]], "nao_cart() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.nao_cart"]], "nao_nr() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.nao_nr"]], "nao_nr() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.nao_nr"]], "nao_nr() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.nao_nr"]], "nao_nr() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.nao_nr"]], "nao_nr_range() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.nao_nr_range"]], "nao_nr_range() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.nao_nr_range"]], "nao_nr_range() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.nao_nr_range"]], "nao_nr_range() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.nao_nr_range"]], "natm (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.natm"]], "natm (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.natm"]], "natm (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.natm"]], "natm (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.natm"]], "nbas (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.nbas"]], "nbas (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.nbas"]], "nbas (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.nbas"]], "nbas (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.nbas"]], "nelec (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.nelec"]], "nelec (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.nelec"]], "nelec (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.nelec"]], "nelec (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.nelec"]], "nelec (vayesta.lattmod.latt.latticeuhf property)": [[14, "vayesta.lattmod.latt.LatticeUHF.nelec"]], "nelectron (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.nelectron"]], "nelectron (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.nelectron"]], "nelectron (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.nelectron"]], "nelectron (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.nelectron"]], "nelectron_alpha (vayesta.lattmod.latt.latticeuhf property)": [[14, "vayesta.lattmod.latt.LatticeUHF.nelectron_alpha"]], "newton() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.newton"]], "newton() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.newton"]], "nimgs (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.nimgs"]], "nimgs (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.nimgs"]], "nimgs (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.nimgs"]], "nimgs (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.nimgs"]], "npgto_nr() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.npgto_nr"]], "npgto_nr() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.npgto_nr"]], "npgto_nr() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.npgto_nr"]], "npgto_nr() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.npgto_nr"]], "nuc_grad_method() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.nuc_grad_method"]], "nuc_grad_method() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.nuc_grad_method"]], "offset_2c_by_atom() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.offset_2c_by_atom"]], "offset_2c_by_atom() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.offset_2c_by_atom"]], "offset_2c_by_atom() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.offset_2c_by_atom"]], "offset_2c_by_atom() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.offset_2c_by_atom"]], "offset_ao_by_atom() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.offset_ao_by_atom"]], "offset_ao_by_atom() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.offset_ao_by_atom"]], "offset_ao_by_atom() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.offset_ao_by_atom"]], "offset_ao_by_atom() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.offset_ao_by_atom"]], "offset_nr_by_atom() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.offset_nr_by_atom"]], "offset_nr_by_atom() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.offset_nr_by_atom"]], "offset_nr_by_atom() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.offset_nr_by_atom"]], "offset_nr_by_atom() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.offset_nr_by_atom"]], "omega (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.omega"]], "omega (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.omega"]], "omega (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.omega"]], "omega (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.omega"]], "pack() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.pack"]], "pack() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.pack"]], "pack() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.pack"]], "pack() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.pack"]], "pbc_eval_ao() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.pbc_eval_ao"]], "pbc_eval_ao() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.pbc_eval_ao"]], "pbc_eval_ao() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.pbc_eval_ao"]], "pbc_eval_ao() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.pbc_eval_ao"]], "pbc_eval_gto() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.pbc_eval_gto"]], "pbc_eval_gto() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.pbc_eval_gto"]], "pbc_eval_gto() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.pbc_eval_gto"]], "pbc_eval_gto() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.pbc_eval_gto"]], "pbc_intor() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.pbc_intor"]], "pbc_intor() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.pbc_intor"]], "pbc_intor() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.pbc_intor"]], "pbc_intor() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.pbc_intor"]], "pop() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.pop"]], "pop() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.pop"]], "post_kernel() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.post_kernel"]], "post_kernel() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.post_kernel"]], "post_kernel() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.post_kernel"]], "post_kernel() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.post_kernel"]], "post_kernel() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.post_kernel"]], "post_kernel() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.post_kernel"]], "pre_kernel() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.pre_kernel"]], "pre_kernel() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.pre_kernel"]], "pre_kernel() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.pre_kernel"]], "pre_kernel() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.pre_kernel"]], "pre_kernel() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.pre_kernel"]], "pre_kernel() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.pre_kernel"]], "precision (vayesta.lattmod.latt.hubbard attribute)": [[14, "vayesta.lattmod.latt.Hubbard.precision"]], "precision (vayesta.lattmod.latt.hubbard1d attribute)": [[14, "vayesta.lattmod.latt.Hubbard1D.precision"]], "precision (vayesta.lattmod.latt.hubbard2d attribute)": [[14, "vayesta.lattmod.latt.Hubbard2D.precision"]], "precision (vayesta.lattmod.latt.latticemole attribute)": [[14, "vayesta.lattmod.latt.LatticeMole.precision"]], "rcut (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.rcut"]], "rcut (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.rcut"]], "rcut (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.rcut"]], "rcut (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.rcut"]], "reciprocal_vectors() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.reciprocal_vectors"]], "reciprocal_vectors() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.reciprocal_vectors"]], "reciprocal_vectors() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.reciprocal_vectors"]], "reciprocal_vectors() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.reciprocal_vectors"]], "remove_soscf() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.remove_soscf"]], "remove_soscf() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.remove_soscf"]], "reset() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.reset"]], "reset() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.reset"]], "run() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.run"]], "run() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.run"]], "run() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.run"]], "run() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.run"]], "run() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.run"]], "run() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.run"]], "scf() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.scf"]], "scf() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.scf"]], "search_ao_label() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.search_ao_label"]], "search_ao_label() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.search_ao_label"]], "search_ao_label() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.search_ao_label"]], "search_ao_label() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.search_ao_label"]], "search_ao_nr() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.search_ao_nr"]], "search_ao_nr() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.search_ao_nr"]], "search_ao_nr() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.search_ao_nr"]], "search_ao_nr() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.search_ao_nr"]], "search_ao_r() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.search_ao_r"]], "search_ao_r() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.search_ao_r"]], "search_ao_r() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.search_ao_r"]], "search_ao_r() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.search_ao_r"]], "search_shell_id() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.search_shell_id"]], "search_shell_id() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.search_shell_id"]], "search_shell_id() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.search_shell_id"]], "search_shell_id() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.search_shell_id"]], "set() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set"]], "set() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set"]], "set() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set"]], "set() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set"]], "set() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.set"]], "set() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.set"]], "set_common_orig() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_common_orig"]], "set_common_orig() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_common_orig"]], "set_common_orig() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_common_orig"]], "set_common_orig() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_common_orig"]], "set_common_orig_() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_common_orig_"]], "set_common_orig_() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_common_orig_"]], "set_common_orig_() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_common_orig_"]], "set_common_orig_() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_common_orig_"]], "set_common_origin() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_common_origin"]], "set_common_origin() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_common_origin"]], "set_common_origin() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_common_origin"]], "set_common_origin() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_common_origin"]], "set_common_origin_() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_common_origin_"]], "set_common_origin_() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_common_origin_"]], "set_common_origin_() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_common_origin_"]], "set_common_origin_() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_common_origin_"]], "set_f12_zeta() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_f12_zeta"]], "set_f12_zeta() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_f12_zeta"]], "set_f12_zeta() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_f12_zeta"]], "set_f12_zeta() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_f12_zeta"]], "set_geom_() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_geom_"]], "set_geom_() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_geom_"]], "set_geom_() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_geom_"]], "set_geom_() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_geom_"]], "set_nuc_mod() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_nuc_mod"]], "set_nuc_mod() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_nuc_mod"]], "set_nuc_mod() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_nuc_mod"]], "set_nuc_mod() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_nuc_mod"]], "set_nuc_mod_() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_nuc_mod_"]], "set_nuc_mod_() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_nuc_mod_"]], "set_nuc_mod_() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_nuc_mod_"]], "set_nuc_mod_() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_nuc_mod_"]], "set_range_coulomb() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_range_coulomb"]], "set_range_coulomb() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_range_coulomb"]], "set_range_coulomb() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_range_coulomb"]], "set_range_coulomb() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_range_coulomb"]], "set_range_coulomb_() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_range_coulomb_"]], "set_range_coulomb_() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_range_coulomb_"]], "set_range_coulomb_() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_range_coulomb_"]], "set_range_coulomb_() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_range_coulomb_"]], "set_rinv_orig() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_rinv_orig"]], "set_rinv_orig() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_rinv_orig"]], "set_rinv_orig() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_rinv_orig"]], "set_rinv_orig() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_rinv_orig"]], "set_rinv_orig_() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_rinv_orig_"]], "set_rinv_orig_() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_rinv_orig_"]], "set_rinv_orig_() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_rinv_orig_"]], "set_rinv_orig_() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_rinv_orig_"]], "set_rinv_origin() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_rinv_origin"]], "set_rinv_origin() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_rinv_origin"]], "set_rinv_origin() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_rinv_origin"]], "set_rinv_origin() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_rinv_origin"]], "set_rinv_origin_() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_rinv_origin_"]], "set_rinv_origin_() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_rinv_origin_"]], "set_rinv_origin_() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_rinv_origin_"]], "set_rinv_origin_() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_rinv_origin_"]], "set_rinv_zeta() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_rinv_zeta"]], "set_rinv_zeta() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_rinv_zeta"]], "set_rinv_zeta() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_rinv_zeta"]], "set_rinv_zeta() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_rinv_zeta"]], "set_rinv_zeta_() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.set_rinv_zeta_"]], "set_rinv_zeta_() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.set_rinv_zeta_"]], "set_rinv_zeta_() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.set_rinv_zeta_"]], "set_rinv_zeta_() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.set_rinv_zeta_"]], "sfx2c1e() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.sfx2c1e"]], "sfx2c1e() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.sfx2c1e"]], "sph2spinor_coeff() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.sph2spinor_coeff"]], "sph2spinor_coeff() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.sph2spinor_coeff"]], "sph2spinor_coeff() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.sph2spinor_coeff"]], "sph2spinor_coeff() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.sph2spinor_coeff"]], "sph_labels() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.sph_labels"]], "sph_labels() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.sph_labels"]], "sph_labels() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.sph_labels"]], "sph_labels() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.sph_labels"]], "spheric_labels() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.spheric_labels"]], "spheric_labels() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.spheric_labels"]], "spheric_labels() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.spheric_labels"]], "spheric_labels() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.spheric_labels"]], "spin_square() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.spin_square"]], "spin_square() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.spin_square"]], "spinor_labels() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.spinor_labels"]], "spinor_labels() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.spinor_labels"]], "spinor_labels() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.spinor_labels"]], "spinor_labels() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.spinor_labels"]], "stability() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.stability"]], "stability() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.stability"]], "stdout (vayesta.lattmod.latt.hubbard attribute)": [[14, "vayesta.lattmod.latt.Hubbard.stdout"]], "stdout (vayesta.lattmod.latt.hubbard1d attribute)": [[14, "vayesta.lattmod.latt.Hubbard1D.stdout"]], "stdout (vayesta.lattmod.latt.hubbard2d attribute)": [[14, "vayesta.lattmod.latt.Hubbard2D.stdout"]], "stdout (vayesta.lattmod.latt.latticemole attribute)": [[14, "vayesta.lattmod.latt.LatticeMole.stdout"]], "stdout (vayesta.lattmod.latt.latticerhf attribute)": [[14, "vayesta.lattmod.latt.LatticeRHF.stdout"]], "stdout (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "vayesta.lattmod.latt.LatticeUHF.stdout"]], "symmetrize_mesh() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.symmetrize_mesh"]], "symmetrize_mesh() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.symmetrize_mesh"]], "symmetrize_mesh() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.symmetrize_mesh"]], "symmetrize_mesh() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.symmetrize_mesh"]], "time_reversal_map() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.time_reversal_map"]], "time_reversal_map() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.time_reversal_map"]], "time_reversal_map() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.time_reversal_map"]], "time_reversal_map() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.time_reversal_map"]], "tmap() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.tmap"]], "tmap() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.tmap"]], "tmap() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.tmap"]], "tmap() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.tmap"]], "to_ghf() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.to_ghf"]], "to_ghf() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.to_ghf"]], "to_gks() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.to_gks"]], "to_gks() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.to_gks"]], "to_ks() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.to_ks"]], "to_ks() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.to_ks"]], "to_mol() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.to_mol"]], "to_mol() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.to_mol"]], "to_mol() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.to_mol"]], "to_mol() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.to_mol"]], "to_rhf() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.to_rhf"]], "to_rhf() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.to_rhf"]], "to_rks() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.to_rks"]], "to_rks() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.to_rks"]], "to_uhf() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.to_uhf"]], "to_uhf() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.to_uhf"]], "to_uks() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.to_uks"]], "to_uks() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.to_uks"]], "to_uncontracted_cartesian_basis() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.to_uncontracted_cartesian_basis"]], "to_uncontracted_cartesian_basis() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.to_uncontracted_cartesian_basis"]], "to_uncontracted_cartesian_basis() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.to_uncontracted_cartesian_basis"]], "to_uncontracted_cartesian_basis() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.to_uncontracted_cartesian_basis"]], "tofile() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.tofile"]], "tofile() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.tofile"]], "tofile() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.tofile"]], "tofile() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.tofile"]], "tostring() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.tostring"]], "tostring() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.tostring"]], "tostring() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.tostring"]], "tostring() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.tostring"]], "tot_electrons() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.tot_electrons"]], "tot_electrons() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.tot_electrons"]], "tot_electrons() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.tot_electrons"]], "tot_electrons() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.tot_electrons"]], "unit (vayesta.lattmod.latt.hubbard attribute)": [[14, "vayesta.lattmod.latt.Hubbard.unit"]], "unit (vayesta.lattmod.latt.hubbard1d attribute)": [[14, "vayesta.lattmod.latt.Hubbard1D.unit"]], "unit (vayesta.lattmod.latt.hubbard2d attribute)": [[14, "vayesta.lattmod.latt.Hubbard2D.unit"]], "unit (vayesta.lattmod.latt.latticemole attribute)": [[14, "vayesta.lattmod.latt.LatticeMole.unit"]], "unpack() (vayesta.lattmod.latt.hubbard class method)": [[14, "vayesta.lattmod.latt.Hubbard.unpack"]], "unpack() (vayesta.lattmod.latt.hubbard1d class method)": [[14, "vayesta.lattmod.latt.Hubbard1D.unpack"]], "unpack() (vayesta.lattmod.latt.hubbard2d class method)": [[14, "vayesta.lattmod.latt.Hubbard2D.unpack"]], "unpack() (vayesta.lattmod.latt.latticemole class method)": [[14, "vayesta.lattmod.latt.LatticeMole.unpack"]], "unpack_() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.unpack_"]], "unpack_() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.unpack_"]], "unpack_() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.unpack_"]], "unpack_() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.unpack_"]], "update() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.update"]], "update() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.update"]], "update() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.update"]], "update() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.update"]], "update() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.update"]], "update() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.update"]], "update_() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.update_"]], "update_() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.update_"]], "update_from_chk() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.update_from_chk"]], "update_from_chk() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.update_from_chk"]], "update_from_chk() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.update_from_chk"]], "update_from_chk() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.update_from_chk"]], "update_from_chk() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.update_from_chk"]], "update_from_chk() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.update_from_chk"]], "update_from_chk_() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.update_from_chk_"]], "update_from_chk_() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.update_from_chk_"]], "vayesta.lattmod": [[14, "module-vayesta.lattmod"]], "vayesta.lattmod.bethe": [[14, "module-vayesta.lattmod.bethe"]], "vayesta.lattmod.latt": [[14, "module-vayesta.lattmod.latt"]], "verbose (vayesta.lattmod.latt.hubbard attribute)": [[14, "vayesta.lattmod.latt.Hubbard.verbose"]], "verbose (vayesta.lattmod.latt.hubbard1d attribute)": [[14, "vayesta.lattmod.latt.Hubbard1D.verbose"]], "verbose (vayesta.lattmod.latt.hubbard2d attribute)": [[14, "vayesta.lattmod.latt.Hubbard2D.verbose"]], "verbose (vayesta.lattmod.latt.latticemole attribute)": [[14, "vayesta.lattmod.latt.LatticeMole.verbose"]], "verbose (vayesta.lattmod.latt.latticerhf attribute)": [[14, "id0"], [14, "id161"], [14, "vayesta.lattmod.latt.LatticeRHF.verbose"]], "verbose (vayesta.lattmod.latt.latticeuhf attribute)": [[14, "id171"], [14, "vayesta.lattmod.latt.LatticeUHF.verbose"]], "view() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.view"]], "view() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.view"]], "view() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.view"]], "view() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.view"]], "view() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.view"]], "view() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.view"]], "vol (vayesta.lattmod.latt.hubbard property)": [[14, "vayesta.lattmod.latt.Hubbard.vol"]], "vol (vayesta.lattmod.latt.hubbard1d property)": [[14, "vayesta.lattmod.latt.Hubbard1D.vol"]], "vol (vayesta.lattmod.latt.hubbard2d property)": [[14, "vayesta.lattmod.latt.Hubbard2D.vol"]], "vol (vayesta.lattmod.latt.latticemole property)": [[14, "vayesta.lattmod.latt.LatticeMole.vol"]], "with_common_orig() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_common_orig"]], "with_common_orig() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_common_orig"]], "with_common_orig() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_common_orig"]], "with_common_orig() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_common_orig"]], "with_common_origin() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_common_origin"]], "with_common_origin() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_common_origin"]], "with_common_origin() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_common_origin"]], "with_common_origin() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_common_origin"]], "with_integral_screen() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_integral_screen"]], "with_integral_screen() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_integral_screen"]], "with_integral_screen() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_integral_screen"]], "with_integral_screen() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_integral_screen"]], "with_long_range_coulomb() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_long_range_coulomb"]], "with_long_range_coulomb() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_long_range_coulomb"]], "with_long_range_coulomb() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_long_range_coulomb"]], "with_long_range_coulomb() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_long_range_coulomb"]], "with_range_coulomb() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_range_coulomb"]], "with_range_coulomb() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_range_coulomb"]], "with_range_coulomb() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_range_coulomb"]], "with_range_coulomb() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_range_coulomb"]], "with_rinv_as_nucleus() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_rinv_as_nucleus"]], "with_rinv_as_nucleus() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_rinv_as_nucleus"]], "with_rinv_as_nucleus() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_rinv_as_nucleus"]], "with_rinv_as_nucleus() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_rinv_as_nucleus"]], "with_rinv_at_nucleus() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_rinv_at_nucleus"]], "with_rinv_at_nucleus() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_rinv_at_nucleus"]], "with_rinv_at_nucleus() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_rinv_at_nucleus"]], "with_rinv_at_nucleus() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_rinv_at_nucleus"]], "with_rinv_orig() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_rinv_orig"]], "with_rinv_orig() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_rinv_orig"]], "with_rinv_orig() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_rinv_orig"]], "with_rinv_orig() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_rinv_orig"]], "with_rinv_origin() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_rinv_origin"]], "with_rinv_origin() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_rinv_origin"]], "with_rinv_origin() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_rinv_origin"]], "with_rinv_origin() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_rinv_origin"]], "with_rinv_zeta() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_rinv_zeta"]], "with_rinv_zeta() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_rinv_zeta"]], "with_rinv_zeta() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_rinv_zeta"]], "with_rinv_zeta() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_rinv_zeta"]], "with_short_range_coulomb() (vayesta.lattmod.latt.hubbard method)": [[14, "vayesta.lattmod.latt.Hubbard.with_short_range_coulomb"]], "with_short_range_coulomb() (vayesta.lattmod.latt.hubbard1d method)": [[14, "vayesta.lattmod.latt.Hubbard1D.with_short_range_coulomb"]], "with_short_range_coulomb() (vayesta.lattmod.latt.hubbard2d method)": [[14, "vayesta.lattmod.latt.Hubbard2D.with_short_range_coulomb"]], "with_short_range_coulomb() (vayesta.lattmod.latt.latticemole method)": [[14, "vayesta.lattmod.latt.LatticeMole.with_short_range_coulomb"]], "x2c() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.x2c"]], "x2c() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.x2c"]], "x2c1e() (vayesta.lattmod.latt.latticerhf method)": [[14, "vayesta.lattmod.latt.LatticeRHF.x2c1e"]], "x2c1e() (vayesta.lattmod.latt.latticeuhf method)": [[14, "vayesta.lattmod.latt.LatticeUHF.x2c1e"]], "load_library() (in module vayesta.libs)": [[15, "vayesta.libs.load_library"]], "vayesta.libs": [[15, "module-vayesta.libs"]], "vayesta.libs.libcore": [[15, "module-vayesta.libs.libcore"]], "chempotbisection (class in vayesta.misc.cptbisect)": [[16, "vayesta.misc.cptbisect.ChempotBisection"]], "cubefile (class in vayesta.misc.cubefile)": [[16, "vayesta.misc.cubefile.CubeFile"]], "pcdiis (class in vayesta.misc.pcdiis)": [[16, "vayesta.misc.pcdiis.PCDIIS"]], "add_density() (vayesta.misc.cubefile.cubefile method)": [[16, "vayesta.misc.cubefile.CubeFile.add_density"]], "add_mep() (vayesta.misc.cubefile.cubefile method)": [[16, "vayesta.misc.cubefile.CubeFile.add_mep"]], "add_orbital() (vayesta.misc.cubefile.cubefile method)": [[16, "vayesta.misc.cubefile.CubeFile.add_orbital"]], "chargecharge() (in module vayesta.misc.corrfunc)": [[16, "vayesta.misc.corrfunc.chargecharge"]], "chargecharge_mf() (in module vayesta.misc.corrfunc)": [[16, "vayesta.misc.corrfunc.chargecharge_mf"]], "extrapolate() (vayesta.misc.pcdiis.pcdiis method)": [[16, "vayesta.misc.pcdiis.PCDIIS.extrapolate"]], "get_atom_distances() (in module vayesta.misc.gto_helper)": [[16, "vayesta.misc.gto_helper.get_atom_distances"]], "get_atom_shells() (in module vayesta.misc.gto_helper)": [[16, "vayesta.misc.gto_helper.get_atom_shells"]], "get_box_and_origin() (vayesta.misc.cubefile.cubefile method)": [[16, "vayesta.misc.cubefile.CubeFile.get_box_and_origin"]], "get_coords() (vayesta.misc.cubefile.cubefile method)": [[16, "vayesta.misc.cubefile.CubeFile.get_coords"]], "get_err_vec() (vayesta.misc.pcdiis.pcdiis method)": [[16, "vayesta.misc.pcdiis.PCDIIS.get_err_vec"]], "get_num_vec() (vayesta.misc.pcdiis.pcdiis method)": [[16, "vayesta.misc.pcdiis.PCDIIS.get_num_vec"]], "get_vec() (vayesta.misc.pcdiis.pcdiis method)": [[16, "vayesta.misc.pcdiis.PCDIIS.get_vec"]], "has_pbc (vayesta.misc.cubefile.cubefile property)": [[16, "vayesta.misc.cubefile.CubeFile.has_pbc"]], "kernel() (vayesta.misc.cptbisect.chempotbisection method)": [[16, "vayesta.misc.cptbisect.ChempotBisection.kernel"]], "load_state() (vayesta.misc.cubefile.cubefile class method)": [[16, "vayesta.misc.cubefile.CubeFile.load_state"]], "loop_neighbor_cells() (in module vayesta.misc.gto_helper)": [[16, "vayesta.misc.gto_helper.loop_neighbor_cells"]], "make_counterpoise_fragments() (in module vayesta.misc.gto_helper)": [[16, "vayesta.misc.gto_helper.make_counterpoise_fragments"]], "make_cp_mol() (in module vayesta.misc.counterpoise)": [[16, "vayesta.misc.counterpoise.make_cp_mol"]], "ncoords (vayesta.misc.cubefile.cubefile property)": [[16, "vayesta.misc.cubefile.CubeFile.ncoords"]], "nfields (vayesta.misc.cubefile.cubefile property)": [[16, "vayesta.misc.cubefile.CubeFile.nfields"]], "push_err_vec() (vayesta.misc.pcdiis.pcdiis method)": [[16, "vayesta.misc.pcdiis.PCDIIS.push_err_vec"]], "push_vec() (vayesta.misc.pcdiis.pcdiis method)": [[16, "vayesta.misc.pcdiis.PCDIIS.push_vec"]], "restore() (vayesta.misc.pcdiis.pcdiis method)": [[16, "vayesta.misc.pcdiis.PCDIIS.restore"]], "save_state() (vayesta.misc.cubefile.cubefile method)": [[16, "vayesta.misc.cubefile.CubeFile.save_state"]], "spin_z() (in module vayesta.misc.corrfunc)": [[16, "vayesta.misc.corrfunc.spin_z"]], "spin_z_unrestricted() (in module vayesta.misc.corrfunc)": [[16, "vayesta.misc.corrfunc.spin_z_unrestricted"]], "spinspin_z() (in module vayesta.misc.corrfunc)": [[16, "vayesta.misc.corrfunc.spinspin_z"]], "spinspin_z_mf() (in module vayesta.misc.corrfunc)": [[16, "vayesta.misc.corrfunc.spinspin_z_mf"]], "spinspin_z_mf_unrestricted() (in module vayesta.misc.corrfunc)": [[16, "vayesta.misc.corrfunc.spinspin_z_mf_unrestricted"]], "spinspin_z_unrestricted() (in module vayesta.misc.corrfunc)": [[16, "vayesta.misc.corrfunc.spinspin_z_unrestricted"]], "update() (vayesta.misc.pcdiis.pcdiis method)": [[16, "vayesta.misc.pcdiis.PCDIIS.update"]], "update_mf() (in module vayesta.misc.brueckner)": [[16, "vayesta.misc.brueckner.update_mf"]], "update_mo_coeff() (in module vayesta.misc.brueckner)": [[16, "vayesta.misc.brueckner.update_mo_coeff"]], "vayesta.misc": [[16, "module-vayesta.misc"]], "vayesta.misc.brueckner": [[16, "module-vayesta.misc.brueckner"]], "vayesta.misc.corrfunc": [[16, "module-vayesta.misc.corrfunc"]], "vayesta.misc.counterpoise": [[16, "module-vayesta.misc.counterpoise"]], "vayesta.misc.cptbisect": [[16, "module-vayesta.misc.cptbisect"]], "vayesta.misc.cubefile": [[16, "module-vayesta.misc.cubefile"]], "vayesta.misc.gto_helper": [[16, "module-vayesta.misc.gto_helper"]], "vayesta.misc.pcdiis": [[16, "module-vayesta.misc.pcdiis"]], "write() (vayesta.misc.cubefile.cubefile method)": [[16, "vayesta.misc.cubefile.CubeFile.write"]], "write_fields() (vayesta.misc.cubefile.cubefile method)": [[16, "vayesta.misc.cubefile.CubeFile.write_fields"]], "write_header() (vayesta.misc.cubefile.cubefile method)": [[16, "vayesta.misc.cubefile.CubeFile.write_header"]], "acetic_acid() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.acetic_acid"]], "alkane() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.alkane"]], "alkene() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.alkene"]], "arene() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.arene"]], "boronene() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.boronene"]], "chain() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.chain"]], "chloroethanol() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.chloroethanol"]], "coronene() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.coronene"]], "ethanol() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.ethanol"]], "ferrocene() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.ferrocene"]], "ferrocene_b3lyp() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.ferrocene_b3lyp"]], "glycine() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.glycine"]], "ketene() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.ketene"]], "neopentane() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.neopentane"]], "no2() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.no2"]], "phenyl() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.phenyl"]], "propanol() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.propanol"]], "propyl() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.propyl"]], "ring() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.ring"]], "vayesta.misc.molecules": [[17, "module-vayesta.misc.molecules"]], "vayesta.misc.molecules.molecules": [[17, "module-vayesta.misc.molecules.molecules"]], "water() (in module vayesta.misc.molecules.molecules)": [[17, "vayesta.misc.molecules.molecules.water"]], "bcc() (in module vayesta.misc.solids.solids)": [[18, "vayesta.misc.solids.solids.bcc"]], "diamond() (in module vayesta.misc.solids.solids)": [[18, "vayesta.misc.solids.solids.diamond"]], "graphene() (in module vayesta.misc.solids.solids)": [[18, "vayesta.misc.solids.solids.graphene"]], "graphite() (in module vayesta.misc.solids.solids)": [[18, "vayesta.misc.solids.solids.graphite"]], "perovskite() (in module vayesta.misc.solids.solids)": [[18, "vayesta.misc.solids.solids.perovskite"]], "perovskite_tetragonal() (in module vayesta.misc.solids.solids)": [[18, "vayesta.misc.solids.solids.perovskite_tetragonal"]], "rocksalt() (in module vayesta.misc.solids.solids)": [[18, "vayesta.misc.solids.solids.rocksalt"]], "vayesta.misc.solids": [[18, "module-vayesta.misc.solids"]], "vayesta.misc.solids.solids": [[18, "module-vayesta.misc.solids.solids"]], "mpi_interface (class in vayesta.mpi.interface)": [[19, "vayesta.mpi.interface.MPI_Interface"]], "ndarraymetadata (class in vayesta.mpi.interface)": [[19, "vayesta.mpi.interface.NdArrayMetadata"]], "rma_dict (class in vayesta.mpi.rma)": [[19, "vayesta.mpi.rma.RMA_Dict"]], "rma_dict.rma_dictelement (class in vayesta.mpi.rma)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement"]], "bcast() (vayesta.mpi.interface.mpi_interface method)": [[19, "vayesta.mpi.interface.MPI_Interface.bcast"]], "clear() (vayesta.mpi.rma.rma_dict method)": [[19, "vayesta.mpi.rma.RMA_Dict.clear"]], "count() (vayesta.mpi.interface.ndarraymetadata method)": [[19, "vayesta.mpi.interface.NdArrayMetadata.count"]], "create_rma_dict() (vayesta.mpi.interface.mpi_interface method)": [[19, "vayesta.mpi.interface.MPI_Interface.create_rma_dict"]], "disabled (vayesta.mpi.interface.mpi_interface property)": [[19, "vayesta.mpi.interface.MPI_Interface.disabled"]], "dtype (vayesta.mpi.interface.ndarraymetadata attribute)": [[19, "vayesta.mpi.interface.NdArrayMetadata.dtype"]], "enabled (vayesta.mpi.interface.mpi_interface property)": [[19, "vayesta.mpi.interface.MPI_Interface.enabled"]], "free() (vayesta.mpi.rma.rma_dict.rma_dictelement method)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement.free"]], "from_dict() (vayesta.mpi.rma.rma_dict class method)": [[19, "vayesta.mpi.rma.RMA_Dict.from_dict"]], "gdf() (vayesta.mpi.interface.mpi_interface method)": [[19, "vayesta.mpi.interface.MPI_Interface.gdf"]], "gdf_with_mpi() (in module vayesta.mpi.scf)": [[19, "vayesta.mpi.scf.gdf_with_mpi"]], "get() (vayesta.mpi.rma.rma_dict.rma_dictelement method)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement.get"]], "get_dtype() (vayesta.mpi.rma.rma_dict method)": [[19, "vayesta.mpi.rma.RMA_Dict.get_dtype"]], "get_location() (vayesta.mpi.rma.rma_dict method)": [[19, "vayesta.mpi.rma.RMA_Dict.get_location"]], "get_new_tag() (vayesta.mpi.interface.mpi_interface method)": [[19, "vayesta.mpi.interface.MPI_Interface.get_new_tag"]], "get_shape() (vayesta.mpi.rma.rma_dict method)": [[19, "vayesta.mpi.rma.RMA_Dict.get_shape"]], "index() (vayesta.mpi.interface.ndarraymetadata method)": [[19, "vayesta.mpi.interface.NdArrayMetadata.index"]], "init_mpi() (in module vayesta.mpi)": [[19, "vayesta.mpi.init_mpi"]], "is_master (vayesta.mpi.interface.mpi_interface property)": [[19, "vayesta.mpi.interface.MPI_Interface.is_master"]], "keys() (vayesta.mpi.rma.rma_dict method)": [[19, "vayesta.mpi.rma.RMA_Dict.keys"]], "local_init() (vayesta.mpi.rma.rma_dict.rma_dictelement method)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement.local_init"]], "mpi (vayesta.mpi.rma.rma_dict.rma_dictelement property)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement.mpi"]], "nreduce() (vayesta.mpi.interface.mpi_interface method)": [[19, "vayesta.mpi.interface.MPI_Interface.nreduce"]], "only_master() (vayesta.mpi.interface.mpi_interface method)": [[19, "vayesta.mpi.interface.MPI_Interface.only_master"]], "readable (vayesta.mpi.rma.rma_dict property)": [[19, "vayesta.mpi.rma.RMA_Dict.readable"]], "remote_init() (vayesta.mpi.rma.rma_dict.rma_dictelement method)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement.remote_init"]], "rma_get() (vayesta.mpi.rma.rma_dict.rma_dictelement method)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement.rma_get"]], "rma_lock() (vayesta.mpi.rma.rma_dict.rma_dictelement method)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement.rma_lock"]], "rma_put() (vayesta.mpi.rma.rma_dict.rma_dictelement method)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement.rma_put"]], "rma_unlock() (vayesta.mpi.rma.rma_dict.rma_dictelement method)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement.rma_unlock"]], "scf() (vayesta.mpi.interface.mpi_interface method)": [[19, "vayesta.mpi.interface.MPI_Interface.scf"]], "scf_with_mpi() (in module vayesta.mpi.scf)": [[19, "vayesta.mpi.scf.scf_with_mpi"]], "shape (vayesta.mpi.interface.ndarraymetadata attribute)": [[19, "vayesta.mpi.interface.NdArrayMetadata.shape"]], "size (vayesta.mpi.rma.rma_dict.rma_dictelement property)": [[19, "vayesta.mpi.rma.RMA_Dict.RMA_DictElement.size"]], "synchronize() (vayesta.mpi.rma.rma_dict method)": [[19, "vayesta.mpi.rma.RMA_Dict.synchronize"]], "values() (vayesta.mpi.rma.rma_dict method)": [[19, "vayesta.mpi.rma.RMA_Dict.values"]], "vayesta.mpi": [[19, "module-vayesta.mpi"]], "vayesta.mpi.interface": [[19, "module-vayesta.mpi.interface"]], "vayesta.mpi.rma": [[19, "module-vayesta.mpi.rma"]], "vayesta.mpi.scf": [[19, "module-vayesta.mpi.scf"]], "with_allreduce() (vayesta.mpi.interface.mpi_interface method)": [[19, "vayesta.mpi.interface.MPI_Interface.with_allreduce"]], "with_reduce() (vayesta.mpi.interface.mpi_interface method)": [[19, "vayesta.mpi.interface.MPI_Interface.with_reduce"]], "with_send() (vayesta.mpi.interface.mpi_interface method)": [[19, "vayesta.mpi.interface.MPI_Interface.with_send"]], "writable() (vayesta.mpi.rma.rma_dict method)": [[19, "vayesta.mpi.rma.RMA_Dict.writable"]], "rpa (class in vayesta.rpa.rpa)": [[20, "vayesta.rpa.rpa.RPA"]], "ao2mo() (vayesta.rpa.rpa.rpa method)": [[20, "vayesta.rpa.rpa.RPA.ao2mo"]], "ao2mo() (vayesta.rpa.ssrpa.ssrpa method)": [[20, "vayesta.rpa.ssrpa.ssRPA.ao2mo"]], "ao2mo() (vayesta.rpa.ssurpa.ssurpa method)": [[20, "vayesta.rpa.ssurpa.ssURPA.ao2mo"]], "calc_energy_correction() (vayesta.rpa.ssrpa.ssrpa method)": [[20, "vayesta.rpa.ssrpa.ssRPA.calc_energy_correction"]], "calc_energy_correction() (vayesta.rpa.ssurpa.ssurpa method)": [[20, "vayesta.rpa.ssurpa.ssURPA.calc_energy_correction"]], "e_corr (vayesta.rpa.rpa.rpa property)": [[20, "vayesta.rpa.rpa.RPA.e_corr"]], "e_corr (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.e_corr"]], "e_corr (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.e_corr"]], "e_tot (vayesta.rpa.rpa.rpa property)": [[20, "vayesta.rpa.rpa.RPA.e_tot"]], "e_tot (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.e_tot"]], "e_tot (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.e_tot"]], "gen_moms() (vayesta.rpa.ssrpa.ssrpa method)": [[20, "vayesta.rpa.ssrpa.ssRPA.gen_moms"]], "gen_moms() (vayesta.rpa.ssurpa.ssurpa method)": [[20, "vayesta.rpa.ssurpa.ssURPA.gen_moms"]], "get_interaction_kernel() (vayesta.rpa.rpa.rpa method)": [[20, "vayesta.rpa.rpa.RPA.get_interaction_kernel"]], "get_k() (vayesta.rpa.ssrpa.ssrpa method)": [[20, "vayesta.rpa.ssrpa.ssRPA.get_k"]], "get_k() (vayesta.rpa.ssurpa.ssurpa method)": [[20, "vayesta.rpa.ssurpa.ssURPA.get_k"]], "get_xc_contribs() (vayesta.rpa.ssrpa.ssrpa method)": [[20, "vayesta.rpa.ssrpa.ssRPA.get_xc_contribs"]], "get_xc_contribs() (vayesta.rpa.ssurpa.ssurpa method)": [[20, "vayesta.rpa.ssurpa.ssURPA.get_xc_contribs"]], "kernel() (vayesta.rpa.rpa.rpa method)": [[20, "vayesta.rpa.rpa.RPA.kernel"]], "kernel() (vayesta.rpa.ssrpa.ssrpa method)": [[20, "vayesta.rpa.ssrpa.ssRPA.kernel"]], "kernel() (vayesta.rpa.ssurpa.ssurpa method)": [[20, "vayesta.rpa.ssurpa.ssURPA.kernel"]], "mo_coeff (vayesta.rpa.rpa.rpa property)": [[20, "vayesta.rpa.rpa.RPA.mo_coeff"]], "mo_coeff (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.mo_coeff"]], "mo_coeff (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.mo_coeff"]], "mo_coeff_occ (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.mo_coeff_occ"]], "mo_coeff_occ (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.mo_coeff_occ"]], "mo_coeff_vir (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.mo_coeff_vir"]], "mo_coeff_vir (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.mo_coeff_vir"]], "nao (vayesta.rpa.rpa.rpa property)": [[20, "vayesta.rpa.rpa.RPA.nao"]], "nao (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.nao"]], "nao (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.nao"]], "nocc (vayesta.rpa.rpa.rpa property)": [[20, "vayesta.rpa.rpa.RPA.nocc"]], "nocc (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.nocc"]], "nocc (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.nocc"]], "norb (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.norb"]], "nvir (vayesta.rpa.rpa.rpa property)": [[20, "vayesta.rpa.rpa.RPA.nvir"]], "nvir (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.nvir"]], "nvir (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.nvir"]], "ov (vayesta.rpa.rpa.rpa property)": [[20, "vayesta.rpa.rpa.RPA.ov"]], "ov (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.ov"]], "ov (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.ov"]], "ova (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.ova"]], "ova (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.ova"]], "ovb (vayesta.rpa.ssrpa.ssrpa property)": [[20, "vayesta.rpa.ssrpa.ssRPA.ovb"]], "ovb (vayesta.rpa.ssurpa.ssurpa property)": [[20, "vayesta.rpa.ssurpa.ssURPA.ovb"]], "ssrpa (class in vayesta.rpa.ssrpa)": [[20, "vayesta.rpa.ssrpa.ssRPA"]], "ssrpa() (in module vayesta.rpa)": [[20, "vayesta.rpa.ssRPA"]], "ssrrpa (in module vayesta.rpa.ssrpa)": [[20, "vayesta.rpa.ssrpa.ssRRPA"]], "ssurpa (class in vayesta.rpa.ssurpa)": [[20, "vayesta.rpa.ssurpa.ssURPA"]], "vayesta.rpa": [[20, "module-vayesta.rpa"]], "vayesta.rpa.rpa": [[20, "module-vayesta.rpa.rpa"]], "vayesta.rpa.ssrpa": [[20, "module-vayesta.rpa.ssrpa"]], "vayesta.rpa.ssurpa": [[20, "module-vayesta.rpa.ssurpa"]], "basemomzerooffset (class in vayesta.rpa.rirpa.momzero_ni)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset"]], "d (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.D"]], "d (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.D"]], "momzerodeductd (class in vayesta.rpa.rirpa.momzero_ni)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD"]], "momzerodeducthigherorder (class in vayesta.rpa.rirpa.momzero_ni)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder"]], "momzerodeductnone (class in vayesta.rpa.rirpa.momzero_ni)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone"]], "momzerooffsetcalccc (class in vayesta.rpa.rirpa.momzero_ni)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC"]], "momzerooffsetcalcgausslag (class in vayesta.rpa.rirpa.momzero_ni)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag"]], "nicheckinf (class in vayesta.rpa.rirpa.ni_eval)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf"]], "nierror": [[21, "vayesta.rpa.rirpa.energy_NI.NIError"]], "niexception": [[21, "vayesta.rpa.rirpa.NI_eval.NIException"]], "nimomzero (class in vayesta.rpa.rirpa.momzero_ni)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero"]], "nitrrootmp (class in vayesta.rpa.rirpa.energy_ni)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP"]], "numericalintegratorbase (class in vayesta.rpa.rirpa.ni_eval)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase"]], "numericalintegratorclencur (class in vayesta.rpa.rirpa.ni_eval)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur"]], "numericalintegratorclencurinfinite (class in vayesta.rpa.rirpa.ni_eval)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite"]], "numericalintegratorclencursemiinfinite (class in vayesta.rpa.rirpa.ni_eval)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite"]], "numericalintegratorgaussiansemiinfinite (class in vayesta.rpa.rirpa.ni_eval)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite"]], "args (vayesta.rpa.rirpa.ni_eval.niexception attribute)": [[21, "vayesta.rpa.rirpa.NI_eval.NIException.args"]], "args (vayesta.rpa.rirpa.energy_ni.nierror attribute)": [[21, "vayesta.rpa.rirpa.energy_NI.NIError.args"]], "calculate_error() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.calculate_error"]], "calculate_error() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.calculate_error"]], "calculate_error() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.calculate_error"]], "calculate_error() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.calculate_error"]], "calculate_error() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.calculate_error"]], "calculate_error() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.calculate_error"]], "calculate_error() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.calculate_error"]], "calculate_error() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.calculate_error"]], "calculate_error() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.calculate_error"]], "calculate_error() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.calculate_error"]], "check_errors() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.check_errors"]], "check_errors() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.check_errors"]], "compress_low_rank() (in module vayesta.rpa.rirpa.rirpa)": [[21, "vayesta.rpa.rirpa.RIRPA.compress_low_rank"]], "compress_low_rank() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.compress_low_rank"]], "compress_low_rank() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.compress_low_rank"]], "construct_ri_ab() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.construct_RI_AB"]], "construct_ri_ab() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.construct_RI_AB"]], "construct_inverse_ri() (in module vayesta.rpa.rirpa.rirpa)": [[21, "vayesta.rpa.rirpa.RIRPA.construct_inverse_RI"]], "construct_product_ri() (in module vayesta.rpa.rirpa.rirpa)": [[21, "vayesta.rpa.rirpa.RIRPA.construct_product_RI"]], "diag_sqrt_contrib() (in module vayesta.rpa.rirpa.momzero_ni)": [[21, "vayesta.rpa.rirpa.momzero_NI.diag_sqrt_contrib"]], "diag_sqrt_deriv2() (in module vayesta.rpa.rirpa.momzero_ni)": [[21, "vayesta.rpa.rirpa.momzero_NI.diag_sqrt_deriv2"]], "diag_sqrt_grad() (in module vayesta.rpa.rirpa.momzero_ni)": [[21, "vayesta.rpa.rirpa.momzero_NI.diag_sqrt_grad"]], "diagmat1 (vayesta.rpa.rirpa.energy_ni.nitrrootmp property)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.diagmat1"]], "diagmat1 (vayesta.rpa.rirpa.momzero_ni.momzerodeductd property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.diagmat1"]], "diagmat1 (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.diagmat1"]], "diagmat1 (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.diagmat1"]], "diagmat1 (vayesta.rpa.rirpa.momzero_ni.nimomzero property)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.diagmat1"]], "diagmat2 (vayesta.rpa.rirpa.energy_ni.nitrrootmp property)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.diagmat2"]], "diagmat2 (vayesta.rpa.rirpa.momzero_ni.momzerodeductd property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.diagmat2"]], "diagmat2 (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.diagmat2"]], "diagmat2 (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.diagmat2"]], "diagmat2 (vayesta.rpa.rirpa.momzero_ni.nimomzero property)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.diagmat2"]], "direct_ac_integration() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.direct_AC_integration"]], "direct_ac_integration() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.direct_AC_integration"]], "e_corr (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.e_corr"]], "e_corr (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.e_corr"]], "e_tot (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.e_tot"]], "e_tot (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.e_tot"]], "eval_ni_approx() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.eval_NI_approx"]], "eval_ni_approx() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.eval_NI_approx"]], "eval_contrib() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.eval_contrib"]], "eval_contrib() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.eval_contrib"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.eval_diag_NI_approx"]], "eval_diag_ni_approx() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.eval_diag_NI_approx"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_deriv2() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.eval_diag_NI_approx_deriv2"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.eval_diag_NI_approx_grad"]], "eval_diag_ni_approx_grad() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.eval_diag_NI_approx_grad"]], "eval_diag_contrib() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.eval_diag_contrib"]], "eval_diag_contrib() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.eval_diag_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.eval_diag_deriv2_contrib"]], "eval_diag_deriv2_contrib() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.eval_diag_deriv2_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.eval_diag_deriv_contrib"]], "eval_diag_deriv_contrib() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.eval_diag_deriv_contrib"]], "eval_diag_exact() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.eval_diag_exact"]], "eval_diag_exact() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.eval_diag_exact"]], "fix_params() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.fix_params"]], "fix_params() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.fix_params"]], "fix_params() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.fix_params"]], "fix_params() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.fix_params"]], "fix_params() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.fix_params"]], "fix_params() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.fix_params"]], "fix_params() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.fix_params"]], "fix_params() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.fix_params"]], "fix_params() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.fix_params"]], "fix_params() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.fix_params"]], "fix_params() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.fix_params"]], "fix_params() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.fix_params"]], "fix_params() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.fix_params"]], "fix_params() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.fix_params"]], "gen_clencur_quad_inf() (in module vayesta.rpa.rirpa.ni_eval)": [[21, "vayesta.rpa.rirpa.NI_eval.gen_ClenCur_quad_inf"]], "gen_clencur_quad_semiinf() (in module vayesta.rpa.rirpa.ni_eval)": [[21, "vayesta.rpa.rirpa.NI_eval.gen_ClenCur_quad_semiinf"]], "get_3c_integrals() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.get_3c_integrals"]], "get_3c_integrals() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.get_3c_integrals"]], "get_f() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.get_F"]], "get_f() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.get_F"]], "get_f() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.get_F"]], "get_f() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.get_F"]], "get_f() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.get_F"]], "get_q() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.get_Q"]], "get_q() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.get_Q"]], "get_q() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.get_Q"]], "get_q() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.get_Q"]], "get_q() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.get_Q"]], "get_ab_xc_ri() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.get_ab_xc_ri"]], "get_ab_xc_ri() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.get_ab_xc_ri"]], "get_apb_eri_ri() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.get_apb_eri_ri"]], "get_apb_eri_ri() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.get_apb_eri_ri"]], "get_compressed_mp() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.get_compressed_MP"]], "get_compressed_mp() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.get_compressed_MP"]], "get_gap() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.get_gap"]], "get_gap() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.get_gap"]], "get_offset() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.get_offset"]], "get_offset() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.get_offset"]], "get_offset() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.get_offset"]], "get_offset() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.get_offset"]], "get_offset() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.get_offset"]], "get_offset() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.get_offset"]], "get_offset() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.get_offset"]], "get_offset() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.get_offset"]], "get_offset() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.get_offset"]], "get_offset() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.get_offset"]], "get_offset() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.get_offset"]], "get_offset() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.get_offset"]], "get_offset() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.get_offset"]], "get_offset() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.get_offset"]], "get_quad() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.get_quad"]], "get_quad() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.get_quad"]], "get_quad() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.get_quad"]], "get_quad() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.get_quad"]], "get_quad() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.get_quad"]], "get_quad() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.get_quad"]], "get_quad() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.get_quad"]], "get_quad() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.get_quad"]], "get_quad() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.get_quad"]], "get_quad() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.get_quad"]], "get_quad() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.get_quad"]], "get_quad() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.get_quad"]], "get_quad() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.get_quad"]], "get_quad() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.get_quad"]], "get_quad_vals() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.get_quad_vals"]], "get_quad_vals() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.get_quad_vals"]], "kernel() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.kernel"]], "kernel() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.kernel"]], "kernel() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.kernel"]], "kernel() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.kernel"]], "kernel() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.kernel"]], "kernel() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.kernel"]], "kernel() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.kernel"]], "kernel() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.kernel"]], "kernel() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.kernel"]], "kernel() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.kernel"]], "kernel() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.kernel"]], "kernel() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.kernel"]], "kernel() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.kernel"]], "kernel() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.kernel"]], "kernel_adaptive() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.kernel_adaptive"]], "kernel_adaptive() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.kernel_adaptive"]], "kernel_energy() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.kernel_energy"]], "kernel_energy() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.kernel_energy"]], "kernel_moms() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.kernel_moms"]], "kernel_moms() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.kernel_moms"]], "kernel_trmprt() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.kernel_trMPrt"]], "kernel_trmprt() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.kernel_trMPrt"]], "l2_scan() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.l2_scan"]], "l2_scan() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.l2_scan"]], "max_scan() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.max_scan"]], "max_scan() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.max_scan"]], "max_scan() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.max_scan"]], "max_scan() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.max_scan"]], "max_scan() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.max_scan"]], "max_scan() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.max_scan"]], "max_scan() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.max_scan"]], "max_scan() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.max_scan"]], "max_scan() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.max_scan"]], "max_scan() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.max_scan"]], "max_scan() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.max_scan"]], "max_scan() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.max_scan"]], "max_scan() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.max_scan"]], "max_scan() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.max_scan"]], "mo_coeff (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.mo_coeff"]], "mo_coeff (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.mo_coeff"]], "mo_coeff_occ (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.mo_coeff_occ"]], "mo_coeff_occ (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.mo_coeff_occ"]], "mo_coeff_vir (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.mo_coeff_vir"]], "mo_coeff_vir (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.mo_coeff_vir"]], "mo_energy (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.mo_energy"]], "mo_energy (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.mo_energy"]], "mo_energy_occ (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.mo_energy_occ"]], "mo_energy_occ (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.mo_energy_occ"]], "mo_energy_vir (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.mo_energy_vir"]], "mo_energy_vir (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.mo_energy_vir"]], "mo_occ (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.mo_occ"]], "n_aux (vayesta.rpa.rirpa.energy_ni.nitrrootmp property)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.n_aux"]], "n_aux (vayesta.rpa.rirpa.momzero_ni.momzerodeductd property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.n_aux"]], "n_aux (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.n_aux"]], "n_aux (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.n_aux"]], "n_aux (vayesta.rpa.rirpa.momzero_ni.nimomzero property)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.n_aux"]], "naux_eri (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.naux_eri"]], "naux_eri (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.naux_eri"]], "nmo (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.nmo"]], "nocc (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.nocc"]], "nocc (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.nocc"]], "npoints (vayesta.rpa.rirpa.ni_eval.nicheckinf property)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.npoints"]], "npoints (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase property)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.npoints"]], "npoints (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur property)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.npoints"]], "npoints (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite property)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.npoints"]], "npoints (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite property)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.npoints"]], "npoints (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite property)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.npoints"]], "npoints (vayesta.rpa.rirpa.energy_ni.nitrrootmp property)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.npoints"]], "npoints (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset property)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.npoints"]], "npoints (vayesta.rpa.rirpa.momzero_ni.momzerodeductd property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.npoints"]], "npoints (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.npoints"]], "npoints (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.npoints"]], "npoints (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.npoints"]], "npoints (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag property)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.npoints"]], "npoints (vayesta.rpa.rirpa.momzero_ni.nimomzero property)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.npoints"]], "nvir (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.nvir"]], "nvir (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.nvir"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.opt_quadrature_diag"]], "opt_quadrature_diag() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.opt_quadrature_diag"]], "ov (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.ov"]], "ov (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.ov"]], "ov_tot (vayesta.rpa.rirpa.rirpa.ssrirpa property)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.ov_tot"]], "ov_tot (vayesta.rpa.rirpa.riurpa.ssriurpa property)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.ov_tot"]], "ssrirpa (class in vayesta.rpa.rirpa.rirpa)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA"]], "ssrirpa() (in module vayesta.rpa.rirpa)": [[21, "vayesta.rpa.rirpa.ssRIRPA"]], "ssrirrpa (in module vayesta.rpa.rirpa.rirpa)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRRPA"]], "ssriurpa (class in vayesta.rpa.rirpa.riurpa)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA"]], "test_diag_derivs() (vayesta.rpa.rirpa.ni_eval.nicheckinf method)": [[21, "vayesta.rpa.rirpa.NI_eval.NICheckInf.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.ni_eval.numericalintegratorbase method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorBase.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencur method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCur.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencurinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurInfinite.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.ni_eval.numericalintegratorclencursemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorClenCurSemiInfinite.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.ni_eval.numericalintegratorgaussiansemiinfinite method)": [[21, "vayesta.rpa.rirpa.NI_eval.NumericalIntegratorGaussianSemiInfinite.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.energy_ni.nitrrootmp method)": [[21, "vayesta.rpa.rirpa.energy_NI.NITrRootMP.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.momzero_ni.basemomzerooffset method)": [[21, "vayesta.rpa.rirpa.momzero_NI.BaseMomzeroOffset.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.momzero_ni.momzerodeductd method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductD.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.momzero_ni.momzerodeducthigherorder method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductHigherOrder.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.momzero_ni.momzerodeductnone method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroDeductNone.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalccc method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcCC.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.momzero_ni.momzerooffsetcalcgausslag method)": [[21, "vayesta.rpa.rirpa.momzero_NI.MomzeroOffsetCalcGaussLag.test_diag_derivs"]], "test_diag_derivs() (vayesta.rpa.rirpa.momzero_ni.nimomzero method)": [[21, "vayesta.rpa.rirpa.momzero_NI.NIMomZero.test_diag_derivs"]], "test_eta0_error() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.test_eta0_error"]], "test_eta0_error() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.test_eta0_error"]], "test_spectral_rep() (vayesta.rpa.rirpa.rirpa.ssrirpa method)": [[21, "vayesta.rpa.rirpa.RIRPA.ssRIRPA.test_spectral_rep"]], "test_spectral_rep() (vayesta.rpa.rirpa.riurpa.ssriurpa method)": [[21, "vayesta.rpa.rirpa.RIURPA.ssRIURPA.test_spectral_rep"]], "vayesta.rpa.rirpa": [[21, "module-vayesta.rpa.rirpa"]], "vayesta.rpa.rirpa.ni_eval": [[21, "module-vayesta.rpa.rirpa.NI_eval"]], "vayesta.rpa.rirpa.rirpa": [[21, "module-vayesta.rpa.rirpa.RIRPA"]], "vayesta.rpa.rirpa.riurpa": [[21, "module-vayesta.rpa.rirpa.RIURPA"]], "vayesta.rpa.rirpa.energy_ni": [[21, "module-vayesta.rpa.rirpa.energy_NI"]], "vayesta.rpa.rirpa.momzero_ni": [[21, "module-vayesta.rpa.rirpa.momzero_NI"]], "with_traceback() (vayesta.rpa.rirpa.ni_eval.niexception method)": [[21, "vayesta.rpa.rirpa.NI_eval.NIException.with_traceback"]], "with_traceback() (vayesta.rpa.rirpa.energy_ni.nierror method)": [[21, "vayesta.rpa.rirpa.energy_NI.NIError.with_traceback"]], "cisd_solver() (in module vayesta.solver.cisd)": [[22, "vayesta.solver.cisd.CISD_Solver"]], "clusterhamiltonian() (in module vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.ClusterHamiltonian"]], "clustersolver (class in vayesta.solver.solver)": [[22, "vayesta.solver.solver.ClusterSolver"]], "clustersolver.options (class in vayesta.solver.solver)": [[22, "vayesta.solver.solver.ClusterSolver.Options"]], "dummyeris (class in vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.DummyERIs"]], "dumpsolver (class in vayesta.solver.dump)": [[22, "vayesta.solver.dump.DumpSolver"]], "dumpsolver.options (class in vayesta.solver.dump)": [[22, "vayesta.solver.dump.DumpSolver.Options"]], "eb_ebfci_solver (class in vayesta.solver.ebfci)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver"]], "eb_ebfci_solver.options (class in vayesta.solver.ebfci)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options"]], "eb_rclusterhamiltonian (class in vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian"]], "eb_rclusterhamiltonian.options (class in vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options"]], "eb_rebcc_solver (class in vayesta.solver.ebcc)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver"]], "eb_rebcc_solver.options (class in vayesta.solver.ebcc)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options"]], "eb_uclusterhamiltonian (class in vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian"]], "eb_uclusterhamiltonian.options (class in vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options"]], "eb_uebcc_solver (class in vayesta.solver.ebcc)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver"]], "eb_uebcc_solver.options (class in vayesta.solver.ebcc)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options"]], "eb_uebfci_solver (class in vayesta.solver.ebfci)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver"]], "eb_uebfci_solver.options (class in vayesta.solver.ebfci)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options"]], "eomea() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.EOMEA"]], "eomea_ta() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.EOMEA_Ta"]], "eomee() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.EOMEE"]], "eomeesinglet() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.EOMEESinglet"]], "eomeespinflip() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.EOMEESpinFlip"]], "eomeespinkeep() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.EOMEESpinKeep"]], "eomeetriplet() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.EOMEETriplet"]], "eomip() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.EOMIP"]], "eomip_ta() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.EOMIP_Ta"]], "fci_solver (class in vayesta.solver.fci)": [[22, "vayesta.solver.fci.FCI_Solver"]], "fci_solver.options (class in vayesta.solver.fci)": [[22, "vayesta.solver.fci.FCI_Solver.Options"]], "rccsd_solver (class in vayesta.solver.ccsd)": [[22, "vayesta.solver.ccsd.RCCSD_Solver"]], "rccsd_solver.options (class in vayesta.solver.ccsd)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options"]], "rcisd_solver (class in vayesta.solver.cisd)": [[22, "vayesta.solver.cisd.RCISD_Solver"]], "rcisd_solver.options (class in vayesta.solver.cisd)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options"]], "rclusterhamiltonian (class in vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian"]], "rclusterhamiltonian.options (class in vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options"]], "rebcc_solver (class in vayesta.solver.ebcc)": [[22, "vayesta.solver.ebcc.REBCC_Solver"]], "rebcc_solver.options (class in vayesta.solver.ebcc)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options"]], "rmp2_solver (class in vayesta.solver.mp2)": [[22, "vayesta.solver.mp2.RMP2_Solver"]], "rmp2_solver.options (class in vayesta.solver.mp2)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options"]], "trccsd_solver (class in vayesta.solver.tccsd)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver"]], "trccsd_solver.options (class in vayesta.solver.tccsd)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options"]], "uccsd (class in vayesta.solver.ccsd)": [[22, "vayesta.solver.ccsd.UCCSD"]], "uccsd_solver (class in vayesta.solver.ccsd)": [[22, "vayesta.solver.ccsd.UCCSD_Solver"]], "uccsd_solver.options (class in vayesta.solver.ccsd)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options"]], "ucisd (class in vayesta.solver.cisd)": [[22, "vayesta.solver.cisd.UCISD"]], "ucisd_solver (class in vayesta.solver.cisd)": [[22, "vayesta.solver.cisd.UCISD_Solver"]], "ucisd_solver.options (class in vayesta.solver.cisd)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options"]], "uclusterhamiltonian (class in vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian"]], "uclusterhamiltonian.options (class in vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options"]], "uclustersolver (class in vayesta.solver.solver)": [[22, "vayesta.solver.solver.UClusterSolver"]], "uclustersolver.options (class in vayesta.solver.solver)": [[22, "vayesta.solver.solver.UClusterSolver.Options"]], "uebcc_solver (class in vayesta.solver.ebcc)": [[22, "vayesta.solver.ebcc.UEBCC_Solver"]], "uebcc_solver.options (class in vayesta.solver.ebcc)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options"]], "ufci_solver (class in vayesta.solver.fci)": [[22, "vayesta.solver.fci.UFCI_Solver"]], "ufci_solver.options (class in vayesta.solver.fci)": [[22, "vayesta.solver.fci.UFCI_Solver.Options"]], "ump2_solver (class in vayesta.solver.mp2)": [[22, "vayesta.solver.mp2.UMP2_Solver"]], "ump2_solver.options (class in vayesta.solver.mp2)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options"]], "add_keys() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.add_keys"]], "add_keys() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.add_keys"]], "add_screening() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.add_screening"]], "add_screening() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.add_screening"]], "add_screening() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.add_screening"]], "add_screening() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.add_screening"]], "amplitudes_from_rccsd() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.amplitudes_from_rccsd"]], "amplitudes_to_cisdvec() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.amplitudes_to_cisdvec"]], "amplitudes_to_vector() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.amplitudes_to_vector"]], "ansatz (vayesta.solver.ebcc.eb_rebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.ansatz"]], "ansatz (vayesta.solver.ebcc.eb_uebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.ansatz"]], "ansatz (vayesta.solver.ebcc.rebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.ansatz"]], "ansatz (vayesta.solver.ebcc.uebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.ansatz"]], "ao2mo() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.ao2mo"]], "ao2mo() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.ao2mo"]], "apply() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.apply"]], "apply() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.apply"]], "as_scanner() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.as_scanner"]], "as_scanner() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.as_scanner"]], "asdict() (vayesta.solver.ccsd.rccsd_solver.options method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.asdict"]], "asdict() (vayesta.solver.ccsd.uccsd_solver.options method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.asdict"]], "asdict() (vayesta.solver.cisd.rcisd_solver.options method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.asdict"]], "asdict() (vayesta.solver.cisd.ucisd_solver.options method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.asdict"]], "asdict() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.asdict"]], "asdict() (vayesta.solver.dump.dumpsolver.options method)": [[22, "vayesta.solver.dump.DumpSolver.Options.asdict"]], "asdict() (vayesta.solver.ebcc.eb_rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.asdict"]], "asdict() (vayesta.solver.ebcc.eb_uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.asdict"]], "asdict() (vayesta.solver.ebcc.rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.asdict"]], "asdict() (vayesta.solver.ebcc.uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.asdict"]], "asdict() (vayesta.solver.ebfci.eb_ebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.asdict"]], "asdict() (vayesta.solver.ebfci.eb_uebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.asdict"]], "asdict() (vayesta.solver.ext_ccsd.extrccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.asdict"]], "asdict() (vayesta.solver.ext_ccsd.extuccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.asdict"]], "asdict() (vayesta.solver.fci.fci_solver.options method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.asdict"]], "asdict() (vayesta.solver.fci.ufci_solver.options method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.asdict"]], "asdict() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.asdict"]], "asdict() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.asdict"]], "asdict() (vayesta.solver.hamiltonian.rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.asdict"]], "asdict() (vayesta.solver.hamiltonian.uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.asdict"]], "asdict() (vayesta.solver.mp2.rmp2_solver.options method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.asdict"]], "asdict() (vayesta.solver.mp2.ump2_solver.options method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.asdict"]], "asdict() (vayesta.solver.solver.clustersolver.options method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.asdict"]], "asdict() (vayesta.solver.solver.uclustersolver.options method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.asdict"]], "asdict() (vayesta.solver.tccsd.trccsd_solver.options method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.asdict"]], "assert_equal_spin_channels() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.assert_equal_spin_channels"]], "assert_equal_spin_channels() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.assert_equal_spin_channels"]], "assert_equal_spin_channels() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.assert_equal_spin_channels"]], "assert_equal_spin_channels() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.assert_equal_spin_channels"]], "async_io (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.async_io"]], "async_io (vayesta.solver.cisd.ucisd attribute)": [[22, "vayesta.solver.cisd.UCISD.async_io"]], "c_cas_occ (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.c_cas_occ"]], "c_cas_vir (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.c_cas_vir"]], "cache_eris (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options attribute)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.cache_eris"]], "cache_eris (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options attribute)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.cache_eris"]], "cache_eris (vayesta.solver.hamiltonian.rclusterhamiltonian.options attribute)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.cache_eris"]], "cache_eris (vayesta.solver.hamiltonian.uclusterhamiltonian.options attribute)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.cache_eris"]], "calc_loc_erpa() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.calc_loc_erpa"]], "calc_loc_erpa() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.calc_loc_erpa"]], "calc_loc_erpa() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.calc_loc_erpa"]], "calc_loc_erpa() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.calc_loc_erpa"]], "calc_v_ext() (vayesta.solver.ccsd.rccsd_solver method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.ccsd.uccsd_solver method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.cisd.rcisd_solver method)": [[22, "vayesta.solver.cisd.RCISD_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.cisd.ucisd_solver method)": [[22, "vayesta.solver.cisd.UCISD_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.coupled_ccsd.coupledrccsd_solver method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.dump.dumpsolver method)": [[22, "vayesta.solver.dump.DumpSolver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.ebcc.eb_rebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.ebcc.eb_uebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.ebcc.rebcc_solver method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.ebcc.uebcc_solver method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.ebfci.eb_ebfci_solver method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.ebfci.eb_uebfci_solver method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.ext_ccsd.extrccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.ext_ccsd.extuccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.fci.fci_solver method)": [[22, "vayesta.solver.fci.FCI_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.fci.ufci_solver method)": [[22, "vayesta.solver.fci.UFCI_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.mp2.rmp2_solver method)": [[22, "vayesta.solver.mp2.RMP2_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.mp2.ump2_solver method)": [[22, "vayesta.solver.mp2.UMP2_Solver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.solver.clustersolver method)": [[22, "vayesta.solver.solver.ClusterSolver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.solver.uclustersolver method)": [[22, "vayesta.solver.solver.UClusterSolver.calc_v_ext"]], "calc_v_ext() (vayesta.solver.tccsd.trccsd_solver method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.calc_v_ext"]], "cc2 (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.cc2"]], "ccsd() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.ccsd"]], "ccsd_t() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.ccsd_t"]], "change_dict_defaults() (vayesta.solver.ccsd.rccsd_solver.options class method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.ccsd.uccsd_solver.options class method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.cisd.rcisd_solver.options class method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.cisd.ucisd_solver.options class method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options class method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.dump.dumpsolver.options class method)": [[22, "vayesta.solver.dump.DumpSolver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.ebcc.eb_rebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.ebcc.eb_uebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.ebcc.rebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.ebcc.uebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.ebfci.eb_ebfci_solver.options class method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.ebfci.eb_uebfci_solver.options class method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.ext_ccsd.extrccsd_solver.options class method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.ext_ccsd.extuccsd_solver.options class method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.fci.fci_solver.options class method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.fci.ufci_solver.options class method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.hamiltonian.rclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.hamiltonian.uclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.mp2.rmp2_solver.options class method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.mp2.ump2_solver.options class method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.solver.clustersolver.options class method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.solver.uclustersolver.options class method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.tccsd.trccsd_solver.options class method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.change_dict_defaults"]], "check_sanity() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.check_sanity"]], "check_sanity() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.check_sanity"]], "check_solver_config() (in module vayesta.solver)": [[22, "vayesta.solver.check_solver_config"]], "cisd() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.cisd"]], "cisd_solver (vayesta.solver.fci.fci_solver attribute)": [[22, "vayesta.solver.fci.FCI_Solver.cisd_solver"]], "cisd_solver (vayesta.solver.fci.ufci_solver attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.cisd_solver"]], "cisdvec_to_amplitudes() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.cisdvec_to_amplitudes"]], "cluster (vayesta.solver.hamiltonian.eb_rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.cluster"]], "cluster (vayesta.solver.hamiltonian.eb_uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.cluster"]], "cluster (vayesta.solver.hamiltonian.rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.cluster"]], "cluster (vayesta.solver.hamiltonian.uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.cluster"]], "compress_cderi (vayesta.solver.mp2.rmp2_solver.options attribute)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.compress_cderi"]], "compress_cderi (vayesta.solver.mp2.ump2_solver.options attribute)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.compress_cderi"]], "construct_wavefunction() (vayesta.solver.ebcc.eb_rebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.construct_wavefunction"]], "construct_wavefunction() (vayesta.solver.ebcc.eb_uebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.construct_wavefunction"]], "construct_wavefunction() (vayesta.solver.ebcc.rebcc_solver method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.construct_wavefunction"]], "construct_wavefunction() (vayesta.solver.ebcc.uebcc_solver method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.construct_wavefunction"]], "contract() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.contract"]], "conv_tol (vayesta.solver.ccsd.rccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.conv_tol"]], "conv_tol (vayesta.solver.ccsd.uccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.cisd.rcisd_solver.options attribute)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.cisd.ucisd attribute)": [[22, "vayesta.solver.cisd.UCISD.conv_tol"]], "conv_tol (vayesta.solver.cisd.ucisd_solver.options attribute)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.ebcc.eb_rebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.ebcc.eb_uebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.ebcc.rebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.ebcc.uebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.ebfci.eb_ebfci_solver.options attribute)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.ebfci.eb_uebfci_solver.options attribute)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.fci.fci_solver.options attribute)": [[22, "vayesta.solver.fci.FCI_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.fci.ufci_solver.options attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.conv_tol"]], "conv_tol (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.conv_tol"]], "conv_tol_normt (vayesta.solver.ccsd.rccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.conv_tol_normt"]], "conv_tol_normt (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.conv_tol_normt"]], "conv_tol_normt (vayesta.solver.ccsd.uccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.conv_tol_normt"]], "conv_tol_normt (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.conv_tol_normt"]], "conv_tol_normt (vayesta.solver.ebcc.eb_rebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.conv_tol_normt"]], "conv_tol_normt (vayesta.solver.ebcc.eb_uebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.conv_tol_normt"]], "conv_tol_normt (vayesta.solver.ebcc.rebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.conv_tol_normt"]], "conv_tol_normt (vayesta.solver.ebcc.uebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.conv_tol_normt"]], "conv_tol_normt (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.conv_tol_normt"]], "conv_tol_normt (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.conv_tol_normt"]], "conv_tol_normt (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.conv_tol_normt"]], "couple_ccsd_iterations() (in module vayesta.solver.coupling)": [[22, "vayesta.solver.coupling.couple_ccsd_iterations"]], "coupledrccsd_solver (class in vayesta.solver.coupled_ccsd)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver"]], "coupledrccsd_solver.options (class in vayesta.solver.coupled_ccsd)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options"]], "couplings (vayesta.solver.hamiltonian.eb_rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.couplings"]], "couplings (vayesta.solver.hamiltonian.eb_uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.couplings"]], "davidson_only (vayesta.solver.fci.fci_solver.options attribute)": [[22, "vayesta.solver.fci.FCI_Solver.Options.davidson_only"]], "davidson_only (vayesta.solver.fci.ufci_solver.options attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.davidson_only"]], "density_fit() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.density_fit"]], "density_fit() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.density_fit"]], "dict_with_defaults() (vayesta.solver.ccsd.rccsd_solver.options static method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.ccsd.uccsd_solver.options static method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.cisd.rcisd_solver.options static method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.cisd.ucisd_solver.options static method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options static method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.dump.dumpsolver.options static method)": [[22, "vayesta.solver.dump.DumpSolver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.ebcc.eb_rebcc_solver.options static method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.ebcc.eb_uebcc_solver.options static method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.ebcc.rebcc_solver.options static method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.ebcc.uebcc_solver.options static method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.ebfci.eb_ebfci_solver.options static method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.ebfci.eb_uebfci_solver.options static method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.ext_ccsd.extrccsd_solver.options static method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.ext_ccsd.extuccsd_solver.options static method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.fci.fci_solver.options static method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.fci.ufci_solver.options static method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options static method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options static method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.hamiltonian.rclusterhamiltonian.options static method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.hamiltonian.uclusterhamiltonian.options static method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.mp2.rmp2_solver.options static method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.mp2.ump2_solver.options static method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.solver.clustersolver.options static method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.solver.uclustersolver.options static method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.tccsd.trccsd_solver.options static method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.dict_with_defaults"]], "diis (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.diis"]], "diis_file (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.diis_file"]], "diis_space (vayesta.solver.ccsd.rccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.diis_space"]], "diis_space (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.diis_space"]], "diis_space (vayesta.solver.ccsd.uccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.diis_space"]], "diis_space (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.diis_space"]], "diis_space (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.diis_space"]], "diis_space (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.diis_space"]], "diis_space (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.diis_space"]], "diis_start_cycle (vayesta.solver.ccsd.rccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.diis_start_cycle"]], "diis_start_cycle (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.diis_start_cycle"]], "diis_start_cycle (vayesta.solver.ccsd.uccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.diis_start_cycle"]], "diis_start_cycle (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.diis_start_cycle"]], "diis_start_cycle (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.diis_start_cycle"]], "diis_start_cycle (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.diis_start_cycle"]], "diis_start_cycle (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.diis_start_cycle"]], "diis_start_energy_diff (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.diis_start_energy_diff"]], "direct (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.direct"]], "direct (vayesta.solver.cisd.ucisd attribute)": [[22, "vayesta.solver.cisd.UCISD.direct"]], "dump_chk() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.dump_chk"]], "dump_chk() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.dump_chk"]], "dump_flags() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.dump_flags"]], "dump_flags() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.dump_flags"]], "dumpfile (vayesta.solver.dump.dumpsolver.options attribute)": [[22, "vayesta.solver.dump.DumpSolver.Options.dumpfile"]], "e_tot (vayesta.solver.ccsd.uccsd property)": [[22, "vayesta.solver.ccsd.UCCSD.e_tot"]], "e_tot (vayesta.solver.cisd.ucisd property)": [[22, "vayesta.solver.cisd.UCISD.e_tot"]], "eaccsd() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.eaccsd"]], "ecc (vayesta.solver.ccsd.uccsd property)": [[22, "vayesta.solver.ccsd.UCCSD.ecc"]], "eeccsd() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.eeccsd"]], "energy() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.energy"]], "eomea_method() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.eomea_method"]], "eomee_ccsd() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.eomee_ccsd"]], "eomee_ccsd_singlet() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.eomee_ccsd_singlet"]], "eomee_ccsd_triplet() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.eomee_ccsd_triplet"]], "eomee_method() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.eomee_method"]], "eomip_method() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.eomip_method"]], "eomsf_ccsd() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.eomsf_ccsd"]], "extrccsd_solver (class in vayesta.solver.ext_ccsd)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver"]], "extrccsd_solver.options (class in vayesta.solver.ext_ccsd)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options"]], "extuccsd_solver (class in vayesta.solver.ext_ccsd)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver"]], "extuccsd_solver.options (class in vayesta.solver.ext_ccsd)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options"]], "external_corrections (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.external_corrections"]], "external_corrections (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.external_corrections"]], "externally_correct() (in module vayesta.solver.coupling)": [[22, "vayesta.solver.coupling.externally_correct"]], "fci_opts (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.fci_opts"]], "fix_spin (vayesta.solver.fci.fci_solver.options attribute)": [[22, "vayesta.solver.fci.FCI_Solver.Options.fix_spin"]], "fix_spin (vayesta.solver.fci.ufci_solver.options attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.fix_spin"]], "fix_spin_penalty (vayesta.solver.fci.fci_solver.options attribute)": [[22, "vayesta.solver.fci.FCI_Solver.Options.fix_spin_penalty"]], "fix_spin_penalty (vayesta.solver.fci.ufci_solver.options attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.fix_spin_penalty"]], "fragments (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.fragments"]], "from_fcivec() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.from_fcivec"]], "generate_init_guess() (vayesta.solver.ccsd.rccsd_solver method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.generate_init_guess"]], "generate_init_guess() (vayesta.solver.ccsd.uccsd_solver method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.generate_init_guess"]], "generate_init_guess() (vayesta.solver.coupled_ccsd.coupledrccsd_solver method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.generate_init_guess"]], "generate_init_guess() (vayesta.solver.ext_ccsd.extrccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.generate_init_guess"]], "generate_init_guess() (vayesta.solver.ext_ccsd.extuccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.generate_init_guess"]], "generate_init_guess() (vayesta.solver.tccsd.trccsd_solver method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.generate_init_guess"]], "get() (vayesta.solver.ccsd.rccsd_solver.options method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.get"]], "get() (vayesta.solver.ccsd.uccsd_solver.options method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.get"]], "get() (vayesta.solver.cisd.rcisd_solver.options method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.get"]], "get() (vayesta.solver.cisd.ucisd_solver.options method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.get"]], "get() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.get"]], "get() (vayesta.solver.dump.dumpsolver.options method)": [[22, "vayesta.solver.dump.DumpSolver.Options.get"]], "get() (vayesta.solver.ebcc.eb_rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.get"]], "get() (vayesta.solver.ebcc.eb_uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.get"]], "get() (vayesta.solver.ebcc.rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.get"]], "get() (vayesta.solver.ebcc.uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.get"]], "get() (vayesta.solver.ebfci.eb_ebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.get"]], "get() (vayesta.solver.ebfci.eb_uebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.get"]], "get() (vayesta.solver.ext_ccsd.extrccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.get"]], "get() (vayesta.solver.ext_ccsd.extuccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.get"]], "get() (vayesta.solver.fci.fci_solver.options method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.get"]], "get() (vayesta.solver.fci.ufci_solver.options method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.get"]], "get() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.get"]], "get() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.get"]], "get() (vayesta.solver.hamiltonian.rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.get"]], "get() (vayesta.solver.hamiltonian.uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.get"]], "get() (vayesta.solver.mp2.rmp2_solver.options method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.get"]], "get() (vayesta.solver.mp2.ump2_solver.options method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.get"]], "get() (vayesta.solver.solver.clustersolver.options method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.get"]], "get() (vayesta.solver.solver.uclustersolver.options method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.get"]], "get() (vayesta.solver.tccsd.trccsd_solver.options method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.get"]], "get_amplitude_norm() (in module vayesta.solver.coupling)": [[22, "vayesta.solver.coupling.get_amplitude_norm"]], "get_callback() (vayesta.solver.ccsd.rccsd_solver method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.get_callback"]], "get_callback() (vayesta.solver.ccsd.uccsd_solver method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.get_callback"]], "get_callback() (vayesta.solver.coupled_ccsd.coupledrccsd_solver method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.get_callback"]], "get_callback() (vayesta.solver.ext_ccsd.extrccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.get_callback"]], "get_callback() (vayesta.solver.ext_ccsd.extuccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.get_callback"]], "get_callback() (vayesta.solver.tccsd.trccsd_solver method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.get_callback"]], "get_cderi_bare() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_cderi_bare"]], "get_cderi_bare() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_cderi_bare"]], "get_cderi_bare() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.get_cderi_bare"]], "get_cderi_bare() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.get_cderi_bare"]], "get_clus_mf_info() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_clus_mf_info"]], "get_clus_mf_info() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_clus_mf_info"]], "get_clus_mf_info() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.get_clus_mf_info"]], "get_clus_mf_info() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.get_clus_mf_info"]], "get_couplings() (vayesta.solver.ebcc.eb_rebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.get_couplings"]], "get_couplings() (vayesta.solver.ebcc.eb_uebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.get_couplings"]], "get_d1_diagnostic() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.get_d1_diagnostic"]], "get_d2_diagnostic() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.get_d2_diagnostic"]], "get_default() (vayesta.solver.ccsd.rccsd_solver.options class method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.get_default"]], "get_default() (vayesta.solver.ccsd.uccsd_solver.options class method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.get_default"]], "get_default() (vayesta.solver.cisd.rcisd_solver.options class method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.get_default"]], "get_default() (vayesta.solver.cisd.ucisd_solver.options class method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.get_default"]], "get_default() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options class method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.get_default"]], "get_default() (vayesta.solver.dump.dumpsolver.options class method)": [[22, "vayesta.solver.dump.DumpSolver.Options.get_default"]], "get_default() (vayesta.solver.ebcc.eb_rebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.get_default"]], "get_default() (vayesta.solver.ebcc.eb_uebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.get_default"]], "get_default() (vayesta.solver.ebcc.rebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.get_default"]], "get_default() (vayesta.solver.ebcc.uebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.get_default"]], "get_default() (vayesta.solver.ebfci.eb_ebfci_solver.options class method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.get_default"]], "get_default() (vayesta.solver.ebfci.eb_uebfci_solver.options class method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.get_default"]], "get_default() (vayesta.solver.ext_ccsd.extrccsd_solver.options class method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.get_default"]], "get_default() (vayesta.solver.ext_ccsd.extuccsd_solver.options class method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.get_default"]], "get_default() (vayesta.solver.fci.fci_solver.options class method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.get_default"]], "get_default() (vayesta.solver.fci.ufci_solver.options class method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.get_default"]], "get_default() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.get_default"]], "get_default() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.get_default"]], "get_default() (vayesta.solver.hamiltonian.rclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.get_default"]], "get_default() (vayesta.solver.hamiltonian.uclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.get_default"]], "get_default() (vayesta.solver.mp2.rmp2_solver.options class method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.get_default"]], "get_default() (vayesta.solver.mp2.ump2_solver.options class method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.get_default"]], "get_default() (vayesta.solver.solver.clustersolver.options class method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.get_default"]], "get_default() (vayesta.solver.solver.uclustersolver.options class method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.get_default"]], "get_default() (vayesta.solver.tccsd.trccsd_solver.options class method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.get_default"]], "get_default_factory() (vayesta.solver.ccsd.rccsd_solver.options class method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.ccsd.uccsd_solver.options class method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.cisd.rcisd_solver.options class method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.cisd.ucisd_solver.options class method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options class method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.dump.dumpsolver.options class method)": [[22, "vayesta.solver.dump.DumpSolver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.ebcc.eb_rebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.ebcc.eb_uebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.ebcc.rebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.ebcc.uebcc_solver.options class method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.ebfci.eb_ebfci_solver.options class method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.ebfci.eb_uebfci_solver.options class method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.ext_ccsd.extrccsd_solver.options class method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.ext_ccsd.extuccsd_solver.options class method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.fci.fci_solver.options class method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.fci.ufci_solver.options class method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.hamiltonian.rclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.hamiltonian.uclusterhamiltonian.options class method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.mp2.rmp2_solver.options class method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.mp2.ump2_solver.options class method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.solver.clustersolver.options class method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.solver.uclustersolver.options class method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.tccsd.trccsd_solver.options class method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.get_default_factory"]], "get_dummy_eri_object() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_dummy_eri_object"]], "get_dummy_eri_object() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_dummy_eri_object"]], "get_dummy_eri_object() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.get_dummy_eri_object"]], "get_dummy_eri_object() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.get_dummy_eri_object"]], "get_e_hf() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.get_e_hf"]], "get_e_hf() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.get_e_hf"]], "get_eb_dm_polaritonic_shift() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_eb_dm_polaritonic_shift"]], "get_eb_dm_polaritonic_shift() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_eb_dm_polaritonic_shift"]], "get_eris_bare() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_eris_bare"]], "get_eris_bare() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_eris_bare"]], "get_eris_bare() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.get_eris_bare"]], "get_eris_bare() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.get_eris_bare"]], "get_eris_screened() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_eris_screened"]], "get_eris_screened() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_eris_screened"]], "get_eris_screened() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.get_eris_screened"]], "get_eris_screened() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.get_eris_screened"]], "get_fock() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_fock"]], "get_fock() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_fock"]], "get_fock() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.get_fock"]], "get_fock() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.get_fock"]], "get_frozen_mask() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.get_frozen_mask"]], "get_frozen_mask() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.get_frozen_mask"]], "get_heff() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_heff"]], "get_heff() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_heff"]], "get_heff() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.get_heff"]], "get_heff() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.get_heff"]], "get_init_guess() (vayesta.solver.ccsd.rccsd_solver method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.get_init_guess"]], "get_init_guess() (vayesta.solver.ccsd.uccsd_solver method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.cisd.rcisd_solver method)": [[22, "vayesta.solver.cisd.RCISD_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.get_init_guess"]], "get_init_guess() (vayesta.solver.cisd.ucisd_solver method)": [[22, "vayesta.solver.cisd.UCISD_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.coupled_ccsd.coupledrccsd_solver method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.dump.dumpsolver method)": [[22, "vayesta.solver.dump.DumpSolver.get_init_guess"]], "get_init_guess() (vayesta.solver.ebcc.eb_rebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.ebcc.eb_uebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.ebcc.rebcc_solver method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.ebcc.uebcc_solver method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.ebfci.eb_ebfci_solver method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.ebfci.eb_uebfci_solver method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.ext_ccsd.extrccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.ext_ccsd.extuccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.fci.fci_solver method)": [[22, "vayesta.solver.fci.FCI_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.fci.ufci_solver method)": [[22, "vayesta.solver.fci.UFCI_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.mp2.rmp2_solver method)": [[22, "vayesta.solver.mp2.RMP2_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.mp2.ump2_solver method)": [[22, "vayesta.solver.mp2.UMP2_Solver.get_init_guess"]], "get_init_guess() (vayesta.solver.solver.clustersolver method)": [[22, "vayesta.solver.solver.ClusterSolver.get_init_guess"]], "get_init_guess() (vayesta.solver.solver.uclustersolver method)": [[22, "vayesta.solver.solver.UClusterSolver.get_init_guess"]], "get_init_guess() (vayesta.solver.tccsd.trccsd_solver method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.get_init_guess"]], "get_integrals() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_integrals"]], "get_integrals() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_integrals"]], "get_integrals() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.get_integrals"]], "get_integrals() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.get_integrals"]], "get_nmo() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.get_nmo"]], "get_nmo() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.get_nmo"]], "get_nocc() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.get_nocc"]], "get_nocc() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.get_nocc"]], "get_nonnull_solver_opts() (vayesta.solver.ebcc.eb_rebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.get_nonnull_solver_opts"]], "get_nonnull_solver_opts() (vayesta.solver.ebcc.eb_uebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.get_nonnull_solver_opts"]], "get_nonnull_solver_opts() (vayesta.solver.ebcc.rebcc_solver method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.get_nonnull_solver_opts"]], "get_nonnull_solver_opts() (vayesta.solver.ebcc.uebcc_solver method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.get_nonnull_solver_opts"]], "get_ov_eris() (vayesta.solver.mp2.rmp2_solver method)": [[22, "vayesta.solver.mp2.RMP2_Solver.get_ov_eris"]], "get_ov_eris() (vayesta.solver.mp2.ump2_solver method)": [[22, "vayesta.solver.mp2.UMP2_Solver.get_ov_eris"]], "get_polaritonic_fock_shift() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_polaritonic_fock_shift"]], "get_polaritonic_fock_shift() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_polaritonic_fock_shift"]], "get_polaritonic_shifted_couplings() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.get_polaritonic_shifted_couplings"]], "get_polaritonic_shifted_couplings() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.get_polaritonic_shifted_couplings"]], "get_solver() (vayesta.solver.ebfci.eb_ebfci_solver method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.get_solver"]], "get_solver() (vayesta.solver.ebfci.eb_uebfci_solver method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.get_solver"]], "get_solver_class() (in module vayesta.solver)": [[22, "vayesta.solver.get_solver_class"]], "get_solver_class() (vayesta.solver.ccsd.rccsd_solver method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.get_solver_class"]], "get_solver_class() (vayesta.solver.ccsd.uccsd_solver method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.get_solver_class"]], "get_solver_class() (vayesta.solver.cisd.rcisd_solver method)": [[22, "vayesta.solver.cisd.RCISD_Solver.get_solver_class"]], "get_solver_class() (vayesta.solver.cisd.ucisd_solver method)": [[22, "vayesta.solver.cisd.UCISD_Solver.get_solver_class"]], "get_solver_class() (vayesta.solver.coupled_ccsd.coupledrccsd_solver method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.get_solver_class"]], "get_solver_class() (vayesta.solver.ext_ccsd.extrccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.get_solver_class"]], "get_solver_class() (vayesta.solver.ext_ccsd.extuccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.get_solver_class"]], "get_solver_class() (vayesta.solver.fci.fci_solver method)": [[22, "vayesta.solver.fci.FCI_Solver.get_solver_class"]], "get_solver_class() (vayesta.solver.fci.ufci_solver method)": [[22, "vayesta.solver.fci.UFCI_Solver.get_solver_class"]], "get_solver_class() (vayesta.solver.tccsd.trccsd_solver method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.get_solver_class"]], "get_t1_diagnostic() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.get_t1_diagnostic"]], "has_screening (vayesta.solver.hamiltonian.eb_rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.has_screening"]], "has_screening (vayesta.solver.hamiltonian.eb_uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.has_screening"]], "has_screening (vayesta.solver.hamiltonian.rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.has_screening"]], "has_screening (vayesta.solver.hamiltonian.uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.has_screening"]], "incore_complete (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.incore_complete"]], "init_amps() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.init_amps"]], "init_guess (vayesta.solver.ccsd.rccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.init_guess"]], "init_guess (vayesta.solver.ccsd.uccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.init_guess"]], "init_guess (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.init_guess"]], "init_guess (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.init_guess"]], "init_guess (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.init_guess"]], "init_guess (vayesta.solver.fci.fci_solver.options attribute)": [[22, "vayesta.solver.fci.FCI_Solver.Options.init_guess"]], "init_guess (vayesta.solver.fci.ufci_solver.options attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.init_guess"]], "init_guess (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.init_guess"]], "init_guess_noise (vayesta.solver.fci.fci_solver.options attribute)": [[22, "vayesta.solver.fci.FCI_Solver.Options.init_guess_noise"]], "init_guess_noise (vayesta.solver.fci.ufci_solver.options attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.init_guess_noise"]], "ipccsd() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.ipccsd"]], "is_eb_ham() (in module vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.is_eb_ham"]], "is_fccsd (vayesta.solver.ebcc.eb_rebcc_solver property)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.is_fCCSD"]], "is_fccsd (vayesta.solver.ebcc.eb_uebcc_solver property)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.is_fCCSD"]], "is_fccsd (vayesta.solver.ebcc.rebcc_solver property)": [[22, "vayesta.solver.ebcc.REBCC_Solver.is_fCCSD"]], "is_fccsd (vayesta.solver.ebcc.uebcc_solver property)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.is_fCCSD"]], "is_ham() (in module vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.is_ham"]], "is_uhf_ham() (in module vayesta.solver.hamiltonian)": [[22, "vayesta.solver.hamiltonian.is_uhf_ham"]], "items() (vayesta.solver.ccsd.rccsd_solver.options method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.items"]], "items() (vayesta.solver.ccsd.uccsd_solver.options method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.items"]], "items() (vayesta.solver.cisd.rcisd_solver.options method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.items"]], "items() (vayesta.solver.cisd.ucisd_solver.options method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.items"]], "items() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.items"]], "items() (vayesta.solver.dump.dumpsolver.options method)": [[22, "vayesta.solver.dump.DumpSolver.Options.items"]], "items() (vayesta.solver.ebcc.eb_rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.items"]], "items() (vayesta.solver.ebcc.eb_uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.items"]], "items() (vayesta.solver.ebcc.rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.items"]], "items() (vayesta.solver.ebcc.uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.items"]], "items() (vayesta.solver.ebfci.eb_ebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.items"]], "items() (vayesta.solver.ebfci.eb_uebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.items"]], "items() (vayesta.solver.ext_ccsd.extrccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.items"]], "items() (vayesta.solver.ext_ccsd.extuccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.items"]], "items() (vayesta.solver.fci.fci_solver.options method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.items"]], "items() (vayesta.solver.fci.ufci_solver.options method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.items"]], "items() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.items"]], "items() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.items"]], "items() (vayesta.solver.hamiltonian.rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.items"]], "items() (vayesta.solver.hamiltonian.uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.items"]], "items() (vayesta.solver.mp2.rmp2_solver.options method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.items"]], "items() (vayesta.solver.mp2.ump2_solver.options method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.items"]], "items() (vayesta.solver.solver.clustersolver.options method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.items"]], "items() (vayesta.solver.solver.uclustersolver.options method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.items"]], "items() (vayesta.solver.tccsd.trccsd_solver.options method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.items"]], "iterative_damping (vayesta.solver.ccsd.rccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.iterative_damping"]], "iterative_damping (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.iterative_damping"]], "iterative_damping (vayesta.solver.ccsd.uccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.iterative_damping"]], "iterative_damping (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.iterative_damping"]], "iterative_damping (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.iterative_damping"]], "iterative_damping (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.iterative_damping"]], "iterative_damping (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.iterative_damping"]], "kernel() (vayesta.solver.ccsd.rccsd_solver method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.kernel"]], "kernel() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.kernel"]], "kernel() (vayesta.solver.ccsd.uccsd_solver method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.kernel"]], "kernel() (vayesta.solver.cisd.rcisd_solver method)": [[22, "vayesta.solver.cisd.RCISD_Solver.kernel"]], "kernel() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.kernel"]], "kernel() (vayesta.solver.cisd.ucisd_solver method)": [[22, "vayesta.solver.cisd.UCISD_Solver.kernel"]], "kernel() (vayesta.solver.coupled_ccsd.coupledrccsd_solver method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.kernel"]], "kernel() (vayesta.solver.dump.dumpsolver method)": [[22, "vayesta.solver.dump.DumpSolver.kernel"]], "kernel() (vayesta.solver.ebcc.eb_rebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.kernel"]], "kernel() (vayesta.solver.ebcc.eb_uebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.kernel"]], "kernel() (vayesta.solver.ebcc.rebcc_solver method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.kernel"]], "kernel() (vayesta.solver.ebcc.uebcc_solver method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.kernel"]], "kernel() (vayesta.solver.ebfci.eb_ebfci_solver method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.kernel"]], "kernel() (vayesta.solver.ebfci.eb_uebfci_solver method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.kernel"]], "kernel() (vayesta.solver.ext_ccsd.extrccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.kernel"]], "kernel() (vayesta.solver.ext_ccsd.extuccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.kernel"]], "kernel() (vayesta.solver.fci.fci_solver method)": [[22, "vayesta.solver.fci.FCI_Solver.kernel"]], "kernel() (vayesta.solver.fci.ufci_solver method)": [[22, "vayesta.solver.fci.UFCI_Solver.kernel"]], "kernel() (vayesta.solver.mp2.rmp2_solver method)": [[22, "vayesta.solver.mp2.RMP2_Solver.kernel"]], "kernel() (vayesta.solver.mp2.ump2_solver method)": [[22, "vayesta.solver.mp2.UMP2_Solver.kernel"]], "kernel() (vayesta.solver.solver.clustersolver method)": [[22, "vayesta.solver.solver.ClusterSolver.kernel"]], "kernel() (vayesta.solver.solver.uclustersolver method)": [[22, "vayesta.solver.solver.UClusterSolver.kernel"]], "kernel() (vayesta.solver.tccsd.trccsd_solver method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.kernel"]], "keys() (vayesta.solver.ccsd.rccsd_solver.options method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.keys"]], "keys() (vayesta.solver.ccsd.uccsd_solver.options method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.keys"]], "keys() (vayesta.solver.cisd.rcisd_solver.options method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.keys"]], "keys() (vayesta.solver.cisd.ucisd_solver.options method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.keys"]], "keys() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.keys"]], "keys() (vayesta.solver.dump.dumpsolver.options method)": [[22, "vayesta.solver.dump.DumpSolver.Options.keys"]], "keys() (vayesta.solver.ebcc.eb_rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.keys"]], "keys() (vayesta.solver.ebcc.eb_uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.keys"]], "keys() (vayesta.solver.ebcc.rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.keys"]], "keys() (vayesta.solver.ebcc.uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.keys"]], "keys() (vayesta.solver.ebfci.eb_ebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.keys"]], "keys() (vayesta.solver.ebfci.eb_uebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.keys"]], "keys() (vayesta.solver.ext_ccsd.extrccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.keys"]], "keys() (vayesta.solver.ext_ccsd.extuccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.keys"]], "keys() (vayesta.solver.fci.fci_solver.options method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.keys"]], "keys() (vayesta.solver.fci.ufci_solver.options method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.keys"]], "keys() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.keys"]], "keys() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.keys"]], "keys() (vayesta.solver.hamiltonian.rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.keys"]], "keys() (vayesta.solver.hamiltonian.uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.keys"]], "keys() (vayesta.solver.mp2.rmp2_solver.options method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.keys"]], "keys() (vayesta.solver.mp2.ump2_solver.options method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.keys"]], "keys() (vayesta.solver.solver.clustersolver.options method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.keys"]], "keys() (vayesta.solver.solver.uclustersolver.options method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.keys"]], "keys() (vayesta.solver.tccsd.trccsd_solver.options method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.keys"]], "level_shift (vayesta.solver.ccsd.rccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.level_shift"]], "level_shift (vayesta.solver.ccsd.uccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.level_shift"]], "level_shift (vayesta.solver.cisd.ucisd attribute)": [[22, "vayesta.solver.cisd.UCISD.level_shift"]], "level_shift (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.level_shift"]], "level_shift (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.level_shift"]], "level_shift (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.level_shift"]], "level_shift (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.level_shift"]], "lindep (vayesta.solver.cisd.ucisd attribute)": [[22, "vayesta.solver.cisd.UCISD.lindep"]], "lindep (vayesta.solver.fci.fci_solver.options attribute)": [[22, "vayesta.solver.fci.FCI_Solver.Options.lindep"]], "lindep (vayesta.solver.fci.ufci_solver.options attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.lindep"]], "make_diagonal() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.make_diagonal"]], "make_rdm1() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.make_rdm1"]], "make_rdm1() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.make_rdm1"]], "make_rdm2() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.make_rdm2"]], "make_rdm2() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.make_rdm2"]], "make_t2() (vayesta.solver.mp2.rmp2_solver method)": [[22, "vayesta.solver.mp2.RMP2_Solver.make_t2"]], "make_t2() (vayesta.solver.mp2.ump2_solver method)": [[22, "vayesta.solver.mp2.UMP2_Solver.make_t2"]], "max_boson_occ (vayesta.solver.ebfci.eb_ebfci_solver.options attribute)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.max_boson_occ"]], "max_boson_occ (vayesta.solver.ebfci.eb_uebfci_solver.options attribute)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.max_boson_occ"]], "max_cycle (vayesta.solver.ccsd.rccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.max_cycle"]], "max_cycle (vayesta.solver.ccsd.uccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.cisd.ucisd attribute)": [[22, "vayesta.solver.cisd.UCISD.max_cycle"]], "max_cycle (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.ebcc.eb_rebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.ebcc.eb_uebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.ebcc.rebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.ebcc.uebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.ebfci.eb_ebfci_solver.options attribute)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.ebfci.eb_uebfci_solver.options attribute)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.fci.fci_solver.options attribute)": [[22, "vayesta.solver.fci.FCI_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.fci.ufci_solver.options attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.max_cycle"]], "max_cycle (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.max_cycle"]], "max_space (vayesta.solver.cisd.ucisd attribute)": [[22, "vayesta.solver.cisd.UCISD.max_space"]], "mo (vayesta.solver.hamiltonian.eb_rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.mo"]], "mo (vayesta.solver.hamiltonian.eb_uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.mo"]], "mo (vayesta.solver.hamiltonian.rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.mo"]], "mo (vayesta.solver.hamiltonian.uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.mo"]], "ncas (vayesta.solver.hamiltonian.eb_rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.ncas"]], "ncas (vayesta.solver.hamiltonian.eb_uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.ncas"]], "ncas (vayesta.solver.hamiltonian.rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.ncas"]], "ncas (vayesta.solver.hamiltonian.uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.ncas"]], "nelec (vayesta.solver.hamiltonian.eb_rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.nelec"]], "nelec (vayesta.solver.hamiltonian.eb_uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.nelec"]], "nelec (vayesta.solver.hamiltonian.rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.nelec"]], "nelec (vayesta.solver.hamiltonian.uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.nelec"]], "nmo (vayesta.solver.ccsd.uccsd property)": [[22, "vayesta.solver.ccsd.UCCSD.nmo"]], "nmo (vayesta.solver.cisd.ucisd property)": [[22, "vayesta.solver.cisd.UCISD.nmo"]], "nocc (vayesta.solver.ccsd.uccsd property)": [[22, "vayesta.solver.ccsd.UCCSD.nocc"]], "nocc (vayesta.solver.cisd.ucisd property)": [[22, "vayesta.solver.cisd.UCISD.nocc"]], "nstates (vayesta.solver.cisd.ucisd property)": [[22, "vayesta.solver.cisd.UCISD.nstates"]], "nuc_grad_method() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.nuc_grad_method"]], "nuc_grad_method() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.nuc_grad_method"]], "optimize_cpt() (vayesta.solver.ccsd.rccsd_solver method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.ccsd.uccsd_solver method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.cisd.rcisd_solver method)": [[22, "vayesta.solver.cisd.RCISD_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.cisd.ucisd_solver method)": [[22, "vayesta.solver.cisd.UCISD_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.coupled_ccsd.coupledrccsd_solver method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.dump.dumpsolver method)": [[22, "vayesta.solver.dump.DumpSolver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.ebcc.eb_rebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.ebcc.eb_uebcc_solver method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.ebcc.rebcc_solver method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.ebcc.uebcc_solver method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.ebfci.eb_ebfci_solver method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.ebfci.eb_uebfci_solver method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.ext_ccsd.extrccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.ext_ccsd.extuccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.fci.fci_solver method)": [[22, "vayesta.solver.fci.FCI_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.fci.ufci_solver method)": [[22, "vayesta.solver.fci.UFCI_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.mp2.rmp2_solver method)": [[22, "vayesta.solver.mp2.RMP2_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.mp2.ump2_solver method)": [[22, "vayesta.solver.mp2.UMP2_Solver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.solver.clustersolver method)": [[22, "vayesta.solver.solver.ClusterSolver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.solver.uclustersolver method)": [[22, "vayesta.solver.solver.UClusterSolver.optimize_cpt"]], "optimize_cpt() (vayesta.solver.tccsd.trccsd_solver method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.optimize_cpt"]], "polaritonic_shift (vayesta.solver.hamiltonian.eb_rclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.polaritonic_shift"]], "polaritonic_shift (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options attribute)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.polaritonic_shift"]], "polaritonic_shift (vayesta.solver.hamiltonian.eb_uclusterhamiltonian property)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.polaritonic_shift"]], "polaritonic_shift (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options attribute)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.polaritonic_shift"]], "post_kernel() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.post_kernel"]], "post_kernel() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.post_kernel"]], "pre_kernel() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.pre_kernel"]], "pre_kernel() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.pre_kernel"]], "print_extra_info() (vayesta.solver.ccsd.rccsd_solver method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.print_extra_info"]], "print_extra_info() (vayesta.solver.ccsd.uccsd_solver method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.print_extra_info"]], "print_extra_info() (vayesta.solver.coupled_ccsd.coupledrccsd_solver method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.print_extra_info"]], "print_extra_info() (vayesta.solver.ext_ccsd.extrccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.print_extra_info"]], "print_extra_info() (vayesta.solver.ext_ccsd.extuccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.print_extra_info"]], "print_extra_info() (vayesta.solver.tccsd.trccsd_solver method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.print_extra_info"]], "project_t2() (in module vayesta.solver.coupling)": [[22, "vayesta.solver.coupling.project_t2"]], "project_t2_rspin() (in module vayesta.solver.coupling)": [[22, "vayesta.solver.coupling.project_t2_rspin"]], "project_t2_uspin() (in module vayesta.solver.coupling)": [[22, "vayesta.solver.coupling.project_t2_uspin"]], "replace() (vayesta.solver.ccsd.rccsd_solver.options method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.replace"]], "replace() (vayesta.solver.ccsd.uccsd_solver.options method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.replace"]], "replace() (vayesta.solver.cisd.rcisd_solver.options method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.replace"]], "replace() (vayesta.solver.cisd.ucisd_solver.options method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.replace"]], "replace() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.replace"]], "replace() (vayesta.solver.dump.dumpsolver.options method)": [[22, "vayesta.solver.dump.DumpSolver.Options.replace"]], "replace() (vayesta.solver.ebcc.eb_rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.replace"]], "replace() (vayesta.solver.ebcc.eb_uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.replace"]], "replace() (vayesta.solver.ebcc.rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.replace"]], "replace() (vayesta.solver.ebcc.uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.replace"]], "replace() (vayesta.solver.ebfci.eb_ebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.replace"]], "replace() (vayesta.solver.ebfci.eb_uebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.replace"]], "replace() (vayesta.solver.ext_ccsd.extrccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.replace"]], "replace() (vayesta.solver.ext_ccsd.extuccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.replace"]], "replace() (vayesta.solver.fci.fci_solver.options method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.replace"]], "replace() (vayesta.solver.fci.ufci_solver.options method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.replace"]], "replace() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.replace"]], "replace() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.replace"]], "replace() (vayesta.solver.hamiltonian.rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.replace"]], "replace() (vayesta.solver.hamiltonian.uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.replace"]], "replace() (vayesta.solver.mp2.rmp2_solver.options method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.replace"]], "replace() (vayesta.solver.mp2.ump2_solver.options method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.replace"]], "replace() (vayesta.solver.solver.clustersolver.options method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.replace"]], "replace() (vayesta.solver.solver.uclustersolver.options method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.replace"]], "replace() (vayesta.solver.tccsd.trccsd_solver.options method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.replace"]], "reset() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.reset"]], "reset() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.reset"]], "restore_from_diis_() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.restore_from_diis_"]], "run() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.run"]], "run() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.run"]], "run_diis() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.run_diis"]], "sc_mode (vayesta.solver.ccsd.rccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.sc_mode"]], "sc_mode (vayesta.solver.ccsd.uccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.sc_mode"]], "sc_mode (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.sc_mode"]], "sc_mode (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.sc_mode"]], "sc_mode (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.sc_mode"]], "sc_mode (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.sc_mode"]], "screening (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options attribute)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.screening"]], "screening (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options attribute)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.screening"]], "screening (vayesta.solver.hamiltonian.rclusterhamiltonian.options attribute)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.screening"]], "screening (vayesta.solver.hamiltonian.uclusterhamiltonian.options attribute)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.screening"]], "set() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.set"]], "set() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.set"]], "set_coupled_fragments() (vayesta.solver.coupled_ccsd.coupledrccsd_solver method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.set_coupled_fragments"]], "set_frozen() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.set_frozen"]], "set_polaritonic_shift() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.set_polaritonic_shift"]], "set_polaritonic_shift() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.set_polaritonic_shift"]], "solve_lambda (vayesta.solver.ccsd.rccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.solve_lambda"]], "solve_lambda (vayesta.solver.ccsd.uccsd_solver.options attribute)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.solve_lambda"]], "solve_lambda (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options attribute)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.solve_lambda"]], "solve_lambda (vayesta.solver.ebcc.eb_rebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.solve_lambda"]], "solve_lambda (vayesta.solver.ebcc.eb_uebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.solve_lambda"]], "solve_lambda (vayesta.solver.ebcc.rebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.solve_lambda"]], "solve_lambda (vayesta.solver.ebcc.uebcc_solver.options attribute)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.solve_lambda"]], "solve_lambda (vayesta.solver.ext_ccsd.extrccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.solve_lambda"]], "solve_lambda (vayesta.solver.ext_ccsd.extuccsd_solver.options attribute)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.solve_lambda"]], "solve_lambda (vayesta.solver.tccsd.trccsd_solver.options attribute)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.solve_lambda"]], "solve_lambda() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.solve_lambda"]], "solver_spin (vayesta.solver.fci.fci_solver.options attribute)": [[22, "vayesta.solver.fci.FCI_Solver.Options.solver_spin"]], "solver_spin (vayesta.solver.fci.ufci_solver.options attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.solver_spin"]], "spin_square() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.spin_square"]], "stdout (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.stdout"]], "stdout (vayesta.solver.cisd.ucisd attribute)": [[22, "vayesta.solver.cisd.UCISD.stdout"]], "t2_residual_rhf_t3v() (in module vayesta.solver.ccsdtq)": [[22, "vayesta.solver.ccsdtq.t2_residual_rhf_t3v"]], "t2_residual_uhf_t3v() (in module vayesta.solver.ccsdtq)": [[22, "vayesta.solver.ccsdtq.t2_residual_uhf_t3v"]], "t_diagnostic() (vayesta.solver.ccsd.rccsd_solver method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.t_diagnostic"]], "t_diagnostic() (vayesta.solver.ccsd.uccsd_solver method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.t_diagnostic"]], "t_diagnostic() (vayesta.solver.coupled_ccsd.coupledrccsd_solver method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.t_diagnostic"]], "t_diagnostic() (vayesta.solver.ext_ccsd.extrccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.t_diagnostic"]], "t_diagnostic() (vayesta.solver.ext_ccsd.extuccsd_solver method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.t_diagnostic"]], "t_diagnostic() (vayesta.solver.tccsd.trccsd_solver method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.t_diagnostic"]], "t_residual_rhf() (in module vayesta.solver.ccsdtq)": [[22, "vayesta.solver.ccsdtq.t_residual_rhf"]], "t_residual_uhf() (in module vayesta.solver.ccsdtq)": [[22, "vayesta.solver.ccsdtq.t_residual_uhf"]], "tailor_with_fragments() (in module vayesta.solver.coupling)": [[22, "vayesta.solver.coupling.tailor_with_fragments"]], "target_space_projector() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.target_space_projector"]], "target_space_projector() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.target_space_projector"]], "target_space_projector() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.target_space_projector"]], "target_space_projector() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.target_space_projector"]], "threads (vayesta.solver.fci.fci_solver.options attribute)": [[22, "vayesta.solver.fci.FCI_Solver.Options.threads"]], "threads (vayesta.solver.fci.ufci_solver.options attribute)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.threads"]], "to_fcivec() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.to_fcivec"]], "to_pyscf_mf() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.to_pyscf_mf"]], "to_pyscf_mf() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.to_pyscf_mf"]], "to_pyscf_mf() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.to_pyscf_mf"]], "to_pyscf_mf() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.to_pyscf_mf"]], "trans_rdm1() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.trans_rdm1"]], "transform_amplitude() (in module vayesta.solver.coupling)": [[22, "vayesta.solver.coupling.transform_amplitude"]], "uccsd_t() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.uccsd_t"]], "update() (vayesta.solver.ccsd.rccsd_solver.options method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.update"]], "update() (vayesta.solver.ccsd.uccsd_solver.options method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.update"]], "update() (vayesta.solver.cisd.rcisd_solver.options method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.update"]], "update() (vayesta.solver.cisd.ucisd_solver.options method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.update"]], "update() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.update"]], "update() (vayesta.solver.dump.dumpsolver.options method)": [[22, "vayesta.solver.dump.DumpSolver.Options.update"]], "update() (vayesta.solver.ebcc.eb_rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.update"]], "update() (vayesta.solver.ebcc.eb_uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.update"]], "update() (vayesta.solver.ebcc.rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.update"]], "update() (vayesta.solver.ebcc.uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.update"]], "update() (vayesta.solver.ebfci.eb_ebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.update"]], "update() (vayesta.solver.ebfci.eb_uebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.update"]], "update() (vayesta.solver.ext_ccsd.extrccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.update"]], "update() (vayesta.solver.ext_ccsd.extuccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.update"]], "update() (vayesta.solver.fci.fci_solver.options method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.update"]], "update() (vayesta.solver.fci.ufci_solver.options method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.update"]], "update() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.update"]], "update() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.update"]], "update() (vayesta.solver.hamiltonian.rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.update"]], "update() (vayesta.solver.hamiltonian.uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.update"]], "update() (vayesta.solver.mp2.rmp2_solver.options method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.update"]], "update() (vayesta.solver.mp2.ump2_solver.options method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.update"]], "update() (vayesta.solver.solver.clustersolver.options method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.update"]], "update() (vayesta.solver.solver.uclustersolver.options method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.update"]], "update() (vayesta.solver.tccsd.trccsd_solver.options method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.update"]], "update_amps() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.update_amps"]], "v_ext (vayesta.solver.ccsd.rccsd_solver property)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.v_ext"]], "v_ext (vayesta.solver.ccsd.uccsd_solver property)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.v_ext"]], "v_ext (vayesta.solver.cisd.rcisd_solver property)": [[22, "vayesta.solver.cisd.RCISD_Solver.v_ext"]], "v_ext (vayesta.solver.cisd.ucisd_solver property)": [[22, "vayesta.solver.cisd.UCISD_Solver.v_ext"]], "v_ext (vayesta.solver.coupled_ccsd.coupledrccsd_solver property)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.v_ext"]], "v_ext (vayesta.solver.dump.dumpsolver property)": [[22, "vayesta.solver.dump.DumpSolver.v_ext"]], "v_ext (vayesta.solver.ebcc.eb_rebcc_solver property)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.v_ext"]], "v_ext (vayesta.solver.ebcc.eb_uebcc_solver property)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.v_ext"]], "v_ext (vayesta.solver.ebcc.rebcc_solver property)": [[22, "vayesta.solver.ebcc.REBCC_Solver.v_ext"]], "v_ext (vayesta.solver.ebcc.uebcc_solver property)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.v_ext"]], "v_ext (vayesta.solver.ebfci.eb_ebfci_solver property)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.v_ext"]], "v_ext (vayesta.solver.ebfci.eb_uebfci_solver property)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.v_ext"]], "v_ext (vayesta.solver.ext_ccsd.extrccsd_solver property)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.v_ext"]], "v_ext (vayesta.solver.ext_ccsd.extuccsd_solver property)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.v_ext"]], "v_ext (vayesta.solver.fci.fci_solver property)": [[22, "vayesta.solver.fci.FCI_Solver.v_ext"]], "v_ext (vayesta.solver.fci.ufci_solver property)": [[22, "vayesta.solver.fci.UFCI_Solver.v_ext"]], "v_ext (vayesta.solver.mp2.rmp2_solver property)": [[22, "vayesta.solver.mp2.RMP2_Solver.v_ext"]], "v_ext (vayesta.solver.mp2.ump2_solver property)": [[22, "vayesta.solver.mp2.UMP2_Solver.v_ext"]], "v_ext (vayesta.solver.solver.clustersolver property)": [[22, "vayesta.solver.solver.ClusterSolver.v_ext"]], "v_ext (vayesta.solver.solver.uclustersolver property)": [[22, "vayesta.solver.solver.UClusterSolver.v_ext"]], "v_ext (vayesta.solver.tccsd.trccsd_solver property)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.v_ext"]], "values() (vayesta.solver.ccsd.rccsd_solver.options method)": [[22, "vayesta.solver.ccsd.RCCSD_Solver.Options.values"]], "values() (vayesta.solver.ccsd.uccsd_solver.options method)": [[22, "vayesta.solver.ccsd.UCCSD_Solver.Options.values"]], "values() (vayesta.solver.cisd.rcisd_solver.options method)": [[22, "vayesta.solver.cisd.RCISD_Solver.Options.values"]], "values() (vayesta.solver.cisd.ucisd_solver.options method)": [[22, "vayesta.solver.cisd.UCISD_Solver.Options.values"]], "values() (vayesta.solver.coupled_ccsd.coupledrccsd_solver.options method)": [[22, "vayesta.solver.coupled_ccsd.coupledRCCSD_Solver.Options.values"]], "values() (vayesta.solver.dump.dumpsolver.options method)": [[22, "vayesta.solver.dump.DumpSolver.Options.values"]], "values() (vayesta.solver.ebcc.eb_rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_REBCC_Solver.Options.values"]], "values() (vayesta.solver.ebcc.eb_uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.EB_UEBCC_Solver.Options.values"]], "values() (vayesta.solver.ebcc.rebcc_solver.options method)": [[22, "vayesta.solver.ebcc.REBCC_Solver.Options.values"]], "values() (vayesta.solver.ebcc.uebcc_solver.options method)": [[22, "vayesta.solver.ebcc.UEBCC_Solver.Options.values"]], "values() (vayesta.solver.ebfci.eb_ebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_EBFCI_Solver.Options.values"]], "values() (vayesta.solver.ebfci.eb_uebfci_solver.options method)": [[22, "vayesta.solver.ebfci.EB_UEBFCI_Solver.Options.values"]], "values() (vayesta.solver.ext_ccsd.extrccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extRCCSD_Solver.Options.values"]], "values() (vayesta.solver.ext_ccsd.extuccsd_solver.options method)": [[22, "vayesta.solver.ext_ccsd.extUCCSD_Solver.Options.values"]], "values() (vayesta.solver.fci.fci_solver.options method)": [[22, "vayesta.solver.fci.FCI_Solver.Options.values"]], "values() (vayesta.solver.fci.ufci_solver.options method)": [[22, "vayesta.solver.fci.UFCI_Solver.Options.values"]], "values() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.Options.values"]], "values() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.Options.values"]], "values() (vayesta.solver.hamiltonian.rclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.Options.values"]], "values() (vayesta.solver.hamiltonian.uclusterhamiltonian.options method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.Options.values"]], "values() (vayesta.solver.mp2.rmp2_solver.options method)": [[22, "vayesta.solver.mp2.RMP2_Solver.Options.values"]], "values() (vayesta.solver.mp2.ump2_solver.options method)": [[22, "vayesta.solver.mp2.UMP2_Solver.Options.values"]], "values() (vayesta.solver.solver.clustersolver.options method)": [[22, "vayesta.solver.solver.ClusterSolver.Options.values"]], "values() (vayesta.solver.solver.uclustersolver.options method)": [[22, "vayesta.solver.solver.UClusterSolver.Options.values"]], "values() (vayesta.solver.tccsd.trccsd_solver.options method)": [[22, "vayesta.solver.tccsd.TRCCSD_Solver.Options.values"]], "vayesta.solver": [[22, "module-vayesta.solver"]], "vayesta.solver.ccsd": [[22, "module-vayesta.solver.ccsd"]], "vayesta.solver.ccsdtq": [[22, "module-vayesta.solver.ccsdtq"]], "vayesta.solver.cisd": [[22, "module-vayesta.solver.cisd"]], "vayesta.solver.coupled_ccsd": [[22, "module-vayesta.solver.coupled_ccsd"]], "vayesta.solver.coupling": [[22, "module-vayesta.solver.coupling"]], "vayesta.solver.dump": [[22, "module-vayesta.solver.dump"]], "vayesta.solver.ebcc": [[22, "module-vayesta.solver.ebcc"]], "vayesta.solver.ebfci": [[22, "module-vayesta.solver.ebfci"]], "vayesta.solver.ext_ccsd": [[22, "module-vayesta.solver.ext_ccsd"]], "vayesta.solver.fci": [[22, "module-vayesta.solver.fci"]], "vayesta.solver.hamiltonian": [[22, "module-vayesta.solver.hamiltonian"]], "vayesta.solver.mp2": [[22, "module-vayesta.solver.mp2"]], "vayesta.solver.solver": [[22, "module-vayesta.solver.solver"]], "vayesta.solver.tccsd": [[22, "module-vayesta.solver.tccsd"]], "vector_size() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.vector_size"]], "vector_size() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.vector_size"]], "vector_to_amplitudes() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.vector_to_amplitudes"]], "verbose (vayesta.solver.ccsd.uccsd attribute)": [[22, "vayesta.solver.ccsd.UCCSD.verbose"]], "verbose (vayesta.solver.cisd.ucisd attribute)": [[22, "vayesta.solver.cisd.UCISD.verbose"]], "view() (vayesta.solver.ccsd.uccsd method)": [[22, "vayesta.solver.ccsd.UCCSD.view"]], "view() (vayesta.solver.cisd.ucisd method)": [[22, "vayesta.solver.cisd.UCISD.view"]], "with_new_cluster() (vayesta.solver.hamiltonian.eb_rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_RClusterHamiltonian.with_new_cluster"]], "with_new_cluster() (vayesta.solver.hamiltonian.eb_uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.EB_UClusterHamiltonian.with_new_cluster"]], "with_new_cluster() (vayesta.solver.hamiltonian.rclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.RClusterHamiltonian.with_new_cluster"]], "with_new_cluster() (vayesta.solver.hamiltonian.uclusterhamiltonian method)": [[22, "vayesta.solver.hamiltonian.UClusterHamiltonian.with_new_cluster"]], "rebfci (class in vayesta.solver.eb_fci.ebfci)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI"]], "rebfci.options (class in vayesta.solver.eb_fci.ebfci)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options"]], "uebfci (class in vayesta.solver.eb_fci.ebfci)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI"]], "uebfci.options (class in vayesta.solver.eb_fci.ebfci)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options"]], "apply_bos_annihilation() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.apply_bos_annihilation"]], "apply_bos_annihilation() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.apply_bos_annihilation"]], "apply_bos_creation() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.apply_bos_creation"]], "apply_bos_creation() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.apply_bos_creation"]], "asdict() (vayesta.solver.eb_fci.ebfci.rebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.asdict"]], "asdict() (vayesta.solver.eb_fci.ebfci.uebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.asdict"]], "calc_dd_resp_mom() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.calc_dd_resp_mom"]], "calc_dd_resp_mom() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.calc_dd_resp_mom"]], "change_dict_defaults() (vayesta.solver.eb_fci.ebfci.rebfci.options class method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.change_dict_defaults"]], "change_dict_defaults() (vayesta.solver.eb_fci.ebfci.uebfci.options class method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.change_dict_defaults"]], "contract_1e() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.contract_1e"]], "contract_1e() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.contract_1e"]], "contract_2e() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.contract_2e"]], "contract_2e() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.contract_2e"]], "contract_all() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.contract_all"]], "contract_all() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.contract_all"]], "contract_ep() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.contract_ep"]], "contract_ep() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.contract_ep"]], "contract_pp() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.contract_pp"]], "contract_pp() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.contract_pp"]], "contract_pp_for_future() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.contract_pp_for_future"]], "contract_pp_for_future() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.contract_pp_for_future"]], "conv_tol (vayesta.solver.eb_fci.ebfci.rebfci.options attribute)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.conv_tol"]], "conv_tol (vayesta.solver.eb_fci.ebfci.uebfci.options attribute)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.conv_tol"]], "dict_with_defaults() (vayesta.solver.eb_fci.ebfci.rebfci.options static method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.dict_with_defaults"]], "dict_with_defaults() (vayesta.solver.eb_fci.ebfci.uebfci.options static method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.dict_with_defaults"]], "get() (vayesta.solver.eb_fci.ebfci.rebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.get"]], "get() (vayesta.solver.eb_fci.ebfci.uebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.get"]], "get_default() (vayesta.solver.eb_fci.ebfci.rebfci.options class method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.get_default"]], "get_default() (vayesta.solver.eb_fci.ebfci.uebfci.options class method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.get_default"]], "get_default_factory() (vayesta.solver.eb_fci.ebfci.rebfci.options class method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.get_default_factory"]], "get_default_factory() (vayesta.solver.eb_fci.ebfci.uebfci.options class method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.get_default_factory"]], "get_hamil() (vayesta.solver.eb_fci.ebfci.rebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.get_hamil"]], "get_hamil() (vayesta.solver.eb_fci.ebfci.uebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.get_hamil"]], "items() (vayesta.solver.eb_fci.ebfci.rebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.items"]], "items() (vayesta.solver.eb_fci.ebfci.uebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.items"]], "kernel() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.kernel"]], "kernel() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.kernel"]], "kernel() (vayesta.solver.eb_fci.ebfci.rebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.kernel"]], "kernel() (vayesta.solver.eb_fci.ebfci.uebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.kernel"]], "kernel_multiroot() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.kernel_multiroot"]], "kernel_multiroot() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.kernel_multiroot"]], "keys() (vayesta.solver.eb_fci.ebfci.rebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.keys"]], "keys() (vayesta.solver.eb_fci.ebfci.uebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.keys"]], "make_dd_moms() (vayesta.solver.eb_fci.ebfci.rebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.make_dd_moms"]], "make_dd_moms() (vayesta.solver.eb_fci.ebfci.uebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.make_dd_moms"]], "make_eb_rdm() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.make_eb_rdm"]], "make_eb_rdm() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.make_eb_rdm"]], "make_hdiag() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.make_hdiag"]], "make_hdiag() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.make_hdiag"]], "make_rdm1() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.make_rdm1"]], "make_rdm1() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.make_rdm1"]], "make_rdm1() (vayesta.solver.eb_fci.ebfci.rebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.make_rdm1"]], "make_rdm1() (vayesta.solver.eb_fci.ebfci.uebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.make_rdm1"]], "make_rdm12() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.make_rdm12"]], "make_rdm12() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.make_rdm12"]], "make_rdm12() (vayesta.solver.eb_fci.ebfci.rebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.make_rdm12"]], "make_rdm12() (vayesta.solver.eb_fci.ebfci.uebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.make_rdm12"]], "make_rdm12s() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.make_rdm12s"]], "make_rdm12s() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.make_rdm12s"]], "make_rdm2() (vayesta.solver.eb_fci.ebfci.rebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.make_rdm2"]], "make_rdm2() (vayesta.solver.eb_fci.ebfci.uebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.make_rdm2"]], "make_rdm_eb() (vayesta.solver.eb_fci.ebfci.rebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.make_rdm_eb"]], "make_rdm_eb() (vayesta.solver.eb_fci.ebfci.uebfci method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.make_rdm_eb"]], "make_shape() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.make_shape"]], "make_shape() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.make_shape"]], "max_boson_occ (vayesta.solver.eb_fci.ebfci.rebfci.options attribute)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.max_boson_occ"]], "max_boson_occ (vayesta.solver.eb_fci.ebfci.uebfci.options attribute)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.max_boson_occ"]], "max_cycle (vayesta.solver.eb_fci.ebfci.rebfci.options attribute)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.max_cycle"]], "max_cycle (vayesta.solver.eb_fci.ebfci.uebfci.options attribute)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.max_cycle"]], "nbos (vayesta.solver.eb_fci.ebfci.rebfci property)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.nbos"]], "nbos (vayesta.solver.eb_fci.ebfci.uebfci property)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.nbos"]], "nelec (vayesta.solver.eb_fci.ebfci.rebfci property)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.nelec"]], "nelec (vayesta.solver.eb_fci.ebfci.uebfci property)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.nelec"]], "norb (vayesta.solver.eb_fci.ebfci.rebfci property)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.norb"]], "norb (vayesta.solver.eb_fci.ebfci.uebfci property)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.norb"]], "replace() (vayesta.solver.eb_fci.ebfci.rebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.replace"]], "replace() (vayesta.solver.eb_fci.ebfci.uebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.replace"]], "run() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.run"]], "run() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.run"]], "run_ep_hubbard() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.run_ep_hubbard"]], "run_ep_hubbard() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.run_ep_hubbard"]], "run_hub_test() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.run_hub_test"]], "run_hub_test() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.run_hub_test"]], "slices_for() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.slices_for"]], "slices_for() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.slices_for"]], "slices_for_cre() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.slices_for_cre"]], "slices_for_cre() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.slices_for_cre"]], "slices_for_des() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.slices_for_des"]], "slices_for_des() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.slices_for_des"]], "slices_for_occ_reduction() (in module vayesta.solver.eb_fci.ebfci_slow)": [[23, "vayesta.solver.eb_fci.ebfci_slow.slices_for_occ_reduction"]], "slices_for_occ_reduction() (in module vayesta.solver.eb_fci.uebfci_slow)": [[23, "vayesta.solver.eb_fci.uebfci_slow.slices_for_occ_reduction"]], "solver (vayesta.solver.eb_fci.ebfci.rebfci attribute)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.solver"]], "solver (vayesta.solver.eb_fci.ebfci.uebfci attribute)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.solver"]], "update() (vayesta.solver.eb_fci.ebfci.rebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.update"]], "update() (vayesta.solver.eb_fci.ebfci.uebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.update"]], "values() (vayesta.solver.eb_fci.ebfci.rebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.REBFCI.Options.values"]], "values() (vayesta.solver.eb_fci.ebfci.uebfci.options method)": [[23, "vayesta.solver.eb_fci.ebfci.UEBFCI.Options.values"]], "vayesta.solver.eb_fci": [[23, "module-vayesta.solver.eb_fci"]], "vayesta.solver.eb_fci.ebfci": [[23, "module-vayesta.solver.eb_fci.ebfci"]], "vayesta.solver.eb_fci.ebfci_slow": [[23, "module-vayesta.solver.eb_fci.ebfci_slow"]], "vayesta.solver.eb_fci.uebfci_slow": [[23, "module-vayesta.solver.eb_fci.uebfci_slow"]], "fitresult (class in vayesta.tools.eos)": [[24, "vayesta.tools.eos.FitResult"]], "b0 (vayesta.tools.eos.fitresult attribute)": [[24, "vayesta.tools.eos.FitResult.b0"]], "birch_murnaghan() (in module vayesta.tools.eos)": [[24, "vayesta.tools.eos.birch_murnaghan"]], "bp (vayesta.tools.eos.fitresult attribute)": [[24, "vayesta.tools.eos.FitResult.bp"]], "cmdline_tool() (in module vayesta.tools.eos)": [[24, "vayesta.tools.eos.cmdline_tool"]], "e0 (vayesta.tools.eos.fitresult attribute)": [[24, "vayesta.tools.eos.FitResult.e0"]], "fit_eos() (in module vayesta.tools.eos)": [[24, "vayesta.tools.eos.fit_eos"]], "fit_from_file() (in module vayesta.tools.eos)": [[24, "vayesta.tools.eos.fit_from_file"]], "parabola() (in module vayesta.tools.eos)": [[24, "vayesta.tools.eos.parabola"]], "v0 (vayesta.tools.eos.fitresult attribute)": [[24, "vayesta.tools.eos.FitResult.v0"]], "vayesta.tools": [[24, "module-vayesta.tools"]], "vayesta.tools.eos": [[24, "module-vayesta.tools.eos"]], "x0 (vayesta.tools.eos.fitresult attribute)": [[24, "vayesta.tools.eos.FitResult.x0"]], "get_atom_color() (in module vayesta.tools.plotting.colors)": [[25, "vayesta.tools.plotting.colors.get_atom_color"]], "vayesta.tools.plotting": [[25, "module-vayesta.tools.plotting"]], "vayesta.tools.plotting.colors": [[25, "module-vayesta.tools.plotting.colors"]]}}) \ No newline at end of file