Exemplo n.º 1
0
 def convert_from_(self, mf):
     '''Create GHF object based on the RHF/UHF object'''
     from pyscf.scf import addons
     return addons.convert_to_ghf(mf, out=self)
Exemplo n.º 2
0
    def test_convert_to_scf(self):
        from pyscf.x2c import x2c
        from pyscf.df import df_jk
        from pyscf.soscf import newton_ah
        addons.convert_to_rhf(dft.RKS(mol))
        addons.convert_to_uhf(dft.RKS(mol))
        addons.convert_to_ghf(dft.RKS(mol))
        addons.convert_to_rhf(dft.UKS(mol))
        addons.convert_to_uhf(dft.UKS(mol))
        addons.convert_to_ghf(dft.UKS(mol))
        #addons.convert_to_rhf(dft.GKS(mol))
        #addons.convert_to_uhf(dft.GKS(mol))
        addons.convert_to_ghf(dft.GKS(mol))

        self.assertTrue(isinstance(addons.convert_to_rhf(mf), scf.rhf.RHF))
        self.assertTrue(isinstance(addons.convert_to_uhf(mf), scf.uhf.UHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(mf), scf.ghf.GHF))
        self.assertTrue(
            isinstance(addons.convert_to_rhf(scf.UHF(mol)), scf.rhf.RHF))
        self.assertTrue(isinstance(addons.convert_to_rhf(mf_u), scf.rohf.ROHF))
        self.assertTrue(isinstance(addons.convert_to_uhf(mf_u), scf.uhf.UHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(mf_u), scf.ghf.GHF))
        self.assertTrue(
            isinstance(addons.convert_to_rhf(sym_mf), scf.hf_symm.RHF))
        self.assertTrue(
            isinstance(addons.convert_to_uhf(sym_mf), scf.uhf_symm.UHF))
        self.assertTrue(
            isinstance(addons.convert_to_ghf(sym_mf), scf.ghf_symm.GHF))
        self.assertTrue(
            isinstance(addons.convert_to_rhf(sym_mf_u), scf.hf_symm.ROHF))
        self.assertTrue(
            isinstance(addons.convert_to_uhf(sym_mf_u), scf.uhf_symm.UHF))
        self.assertTrue(
            isinstance(addons.convert_to_ghf(sym_mf_u), scf.ghf_symm.GHF))

        mf1 = copy.copy(mf)
        self.assertTrue(isinstance(mf1.convert_from_(mf), scf.rhf.RHF))
        self.assertTrue(isinstance(mf1.convert_from_(mf_u), scf.rhf.RHF))
        self.assertFalse(isinstance(mf1.convert_from_(mf_u), scf.rohf.ROHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf), scf.rhf.RHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf_u), scf.rhf.RHF))
        self.assertFalse(isinstance(mf1.convert_from_(sym_mf_u),
                                    scf.rohf.ROHF))
        self.assertFalse(isinstance(mf1.convert_from_(sym_mf),
                                    scf.hf_symm.RHF))
        self.assertFalse(
            isinstance(mf1.convert_from_(sym_mf_u), scf.hf_symm.RHF))
        mf1 = copy.copy(mf_u)
        self.assertTrue(isinstance(mf1.convert_from_(mf), scf.uhf.UHF))
        self.assertTrue(isinstance(mf1.convert_from_(mf_u), scf.uhf.UHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf), scf.uhf.UHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf_u), scf.uhf.UHF))
        self.assertFalse(
            isinstance(mf1.convert_from_(sym_mf), scf.uhf_symm.UHF))
        self.assertFalse(
            isinstance(mf1.convert_from_(sym_mf_u), scf.uhf_symm.UHF))
        mf1 = scf.GHF(mol)
        self.assertTrue(isinstance(mf1.convert_from_(mf), scf.ghf.GHF))
        self.assertTrue(isinstance(mf1.convert_from_(mf_u), scf.ghf.GHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf), scf.ghf.GHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf_u), scf.ghf.GHF))
        self.assertFalse(
            isinstance(mf1.convert_from_(sym_mf), scf.ghf_symm.GHF))
        self.assertFalse(
            isinstance(mf1.convert_from_(sym_mf_u), scf.ghf_symm.GHF))

        self.assertTrue(
            isinstance(
                addons.convert_to_rhf(scf.RHF(mol).density_fit(),
                                      remove_df=False), df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_uhf(scf.RHF(mol).density_fit(),
                                      remove_df=False), df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_ghf(scf.RHF(mol).density_fit(),
                                      remove_df=False), df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_rhf(scf.UHF(mol).density_fit(),
                                      remove_df=False), df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_uhf(scf.UHF(mol).density_fit(),
                                      remove_df=False), df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_ghf(scf.UHF(mol).density_fit(),
                                      remove_df=False), df_jk._DFHF))
        #self.assertTrue(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit(), remove_df=False),df_jk. _DFHF))
        #self.assertTrue(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit(), remove_df=False),df_jk. _DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_ghf(scf.GHF(mol).density_fit(),
                                      remove_df=False), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_rhf(scf.RHF(mol).density_fit(),
                                      out=scf.RHF(mol),
                                      remove_df=False), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_uhf(scf.RHF(mol).density_fit(),
                                      out=scf.UHF(mol),
                                      remove_df=False), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(scf.RHF(mol).density_fit(),
                                      out=scf.GHF(mol),
                                      remove_df=False), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_rhf(scf.UHF(mol).density_fit(),
                                      out=scf.RHF(mol),
                                      remove_df=False), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_uhf(scf.UHF(mol).density_fit(),
                                      out=scf.UHF(mol),
                                      remove_df=False), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(scf.UHF(mol).density_fit(),
                                      out=scf.GHF(mol),
                                      remove_df=False), df_jk._DFHF))
        #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit(), out=scf.RHF(mol), remove_df=False),df_jk. _DFHF))
        #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit(), out=scf.UHF(mol), remove_df=False),df_jk. _DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(scf.GHF(mol).density_fit(),
                                      out=scf.GHF(mol),
                                      remove_df=False), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_rhf(scf.RHF(mol).density_fit(),
                                      out=scf.RHF(mol),
                                      remove_df=True), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_uhf(scf.RHF(mol).density_fit(),
                                      out=scf.UHF(mol),
                                      remove_df=True), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(scf.RHF(mol).density_fit(),
                                      out=scf.GHF(mol),
                                      remove_df=True), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_rhf(scf.UHF(mol).density_fit(),
                                      out=scf.RHF(mol),
                                      remove_df=True), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_uhf(scf.UHF(mol).density_fit(),
                                      out=scf.UHF(mol),
                                      remove_df=True), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(scf.UHF(mol).density_fit(),
                                      out=scf.GHF(mol),
                                      remove_df=True), df_jk._DFHF))
        #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit(), out=scf.RHF(mol), remove_df=True),df_jk. _DFHF))
        #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit(), out=scf.UHF(mol), remove_df=True),df_jk. _DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(scf.GHF(mol).density_fit(),
                                      out=scf.GHF(mol),
                                      remove_df=True), df_jk._DFHF))

        addons.convert_to_rhf(scf.RHF(mol).x2c().density_fit())
        addons.convert_to_uhf(scf.RHF(mol).x2c().density_fit())
        addons.convert_to_ghf(scf.RHF(mol).x2c().density_fit())
        addons.convert_to_rhf(scf.UHF(mol).x2c().density_fit())
        addons.convert_to_uhf(scf.UHF(mol).x2c().density_fit())
        addons.convert_to_ghf(scf.UHF(mol).x2c().density_fit())
        #addons.convert_to_rhf(scf.GHF(mol).x2c().density_fit())
        #addons.convert_to_uhf(scf.GHF(mol).x2c().density_fit())
        addons.convert_to_ghf(scf.GHF(mol).x2c().density_fit())

        self.assertFalse(
            isinstance(
                addons.convert_to_rhf(
                    scf.RHF(mol).x2c().newton().density_fit()),
                newton_ah._CIAH_SOSCF))
        self.assertFalse(
            isinstance(
                addons.convert_to_uhf(
                    scf.RHF(mol).x2c().newton().density_fit()),
                newton_ah._CIAH_SOSCF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(
                    scf.RHF(mol).x2c().newton().density_fit()),
                newton_ah._CIAH_SOSCF))
        self.assertFalse(
            isinstance(
                addons.convert_to_rhf(
                    scf.UHF(mol).x2c().newton().density_fit()),
                newton_ah._CIAH_SOSCF))
        self.assertFalse(
            isinstance(
                addons.convert_to_uhf(
                    scf.UHF(mol).x2c().newton().density_fit()),
                newton_ah._CIAH_SOSCF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(
                    scf.UHF(mol).x2c().newton().density_fit()),
                newton_ah._CIAH_SOSCF))
        #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))
        #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(
                    scf.GHF(mol).x2c().newton().density_fit()),
                newton_ah._CIAH_SOSCF))

        self.assertFalse(
            isinstance(
                addons.convert_to_rhf(scf.RHF(mol).newton().density_fit()),
                df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_uhf(scf.RHF(mol).newton().density_fit()),
                df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(scf.RHF(mol).newton().density_fit()),
                df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_rhf(scf.UHF(mol).newton().density_fit()),
                df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_uhf(scf.UHF(mol).newton().density_fit()),
                df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(scf.UHF(mol).newton().density_fit()),
                df_jk._DFHF))
        #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).newton().density_fit()), df_jk._DFHF))
        #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).newton().density_fit()), df_jk._DFHF))
        self.assertFalse(
            isinstance(
                addons.convert_to_ghf(scf.GHF(mol).newton().density_fit()),
                df_jk._DFHF))

        self.assertTrue(
            isinstance(
                addons.convert_to_rhf(scf.RHF(mol).density_fit().newton()),
                df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_uhf(scf.RHF(mol).density_fit().newton()),
                df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_ghf(scf.RHF(mol).density_fit().newton()),
                df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_rhf(scf.UHF(mol).density_fit().newton()),
                df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_uhf(scf.UHF(mol).density_fit().newton()),
                df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_ghf(scf.UHF(mol).density_fit().newton()),
                df_jk._DFHF))
        #self.assertTrue(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit().newton()), df_jk._DFHF))
        #self.assertTrue(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit().newton()), df_jk._DFHF))
        self.assertTrue(
            isinstance(
                addons.convert_to_ghf(scf.GHF(mol).density_fit().newton()),
                df_jk._DFHF))
Exemplo n.º 3
0
    def test_convert_to_scf(self):
        from pyscf.x2c import x2c
        from pyscf.df import df_jk
        from pyscf.soscf import newton_ah
        addons.convert_to_rhf(dft.RKS(mol))
        addons.convert_to_uhf(dft.RKS(mol))
        #addons.convert_to_ghf(dft.RKS(mol))
        addons.convert_to_rhf(dft.UKS(mol))
        addons.convert_to_uhf(dft.UKS(mol))
        #addons.convert_to_ghf(dft.UKS(mol))
        #addons.convert_to_rhf(dft.GKS(mol))
        #addons.convert_to_uhf(dft.GKS(mol))
        #addons.convert_to_ghf(dft.GKS(mol))

        self.assertTrue(isinstance(addons.convert_to_rhf(mf), scf.rhf.RHF))
        self.assertTrue(isinstance(addons.convert_to_uhf(mf), scf.uhf.UHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(mf), scf.ghf.GHF))
        self.assertTrue(isinstance(addons.convert_to_rhf(scf.UHF(mol)), scf.rhf.RHF))
        self.assertTrue(isinstance(addons.convert_to_rhf(mf_u), scf.rohf.ROHF))
        self.assertTrue(isinstance(addons.convert_to_uhf(mf_u), scf.uhf.UHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(mf_u), scf.ghf.GHF))
        self.assertTrue(isinstance(addons.convert_to_rhf(sym_mf), scf.hf_symm.RHF))
        self.assertTrue(isinstance(addons.convert_to_uhf(sym_mf), scf.uhf_symm.UHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(sym_mf), scf.ghf_symm.GHF))
        self.assertTrue(isinstance(addons.convert_to_rhf(sym_mf_u), scf.hf_symm.ROHF))
        self.assertTrue(isinstance(addons.convert_to_uhf(sym_mf_u), scf.uhf_symm.UHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(sym_mf_u), scf.ghf_symm.GHF))

        mf1 = copy.copy(mf)
        self.assertTrue(isinstance(mf1.convert_from_(mf), scf.rhf.RHF))
        self.assertTrue(isinstance(mf1.convert_from_(mf_u), scf.rhf.RHF))
        self.assertFalse(isinstance(mf1.convert_from_(mf_u), scf.rohf.ROHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf), scf.rhf.RHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf_u), scf.rhf.RHF))
        self.assertFalse(isinstance(mf1.convert_from_(sym_mf_u), scf.rohf.ROHF))
        self.assertFalse(isinstance(mf1.convert_from_(sym_mf), scf.hf_symm.RHF))
        self.assertFalse(isinstance(mf1.convert_from_(sym_mf_u), scf.hf_symm.RHF))
        mf1 = copy.copy(mf_u)
        self.assertTrue(isinstance(mf1.convert_from_(mf), scf.uhf.UHF))
        self.assertTrue(isinstance(mf1.convert_from_(mf_u), scf.uhf.UHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf), scf.uhf.UHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf_u), scf.uhf.UHF))
        self.assertFalse(isinstance(mf1.convert_from_(sym_mf), scf.uhf_symm.UHF))
        self.assertFalse(isinstance(mf1.convert_from_(sym_mf_u), scf.uhf_symm.UHF))
        mf1 = scf.GHF(mol)
        self.assertTrue(isinstance(mf1.convert_from_(mf), scf.ghf.GHF))
        self.assertTrue(isinstance(mf1.convert_from_(mf_u), scf.ghf.GHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf), scf.ghf.GHF))
        self.assertTrue(isinstance(mf1.convert_from_(sym_mf_u), scf.ghf.GHF))
        self.assertFalse(isinstance(mf1.convert_from_(sym_mf), scf.ghf_symm.GHF))
        self.assertFalse(isinstance(mf1.convert_from_(sym_mf_u), scf.ghf_symm.GHF))

        self.assertTrue(isinstance(addons.convert_to_rhf(scf.RHF(mol).density_fit(), remove_df=False), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_uhf(scf.RHF(mol).density_fit(), remove_df=False), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(scf.RHF(mol).density_fit(), remove_df=False), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_rhf(scf.UHF(mol).density_fit(), remove_df=False), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_uhf(scf.UHF(mol).density_fit(), remove_df=False), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(scf.UHF(mol).density_fit(), remove_df=False), df_jk._DFHF))
        #self.assertTrue(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit(), remove_df=False),df_jk. _DFHF))
        #self.assertTrue(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit(), remove_df=False),df_jk. _DFHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(scf.GHF(mol).density_fit(), remove_df=False), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_rhf(scf.RHF(mol).density_fit(), out=scf.RHF(mol), remove_df=False), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_uhf(scf.RHF(mol).density_fit(), out=scf.UHF(mol), remove_df=False), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.RHF(mol).density_fit(), out=scf.GHF(mol), remove_df=False), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_rhf(scf.UHF(mol).density_fit(), out=scf.RHF(mol), remove_df=False), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_uhf(scf.UHF(mol).density_fit(), out=scf.UHF(mol), remove_df=False), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.UHF(mol).density_fit(), out=scf.GHF(mol), remove_df=False), df_jk._DFHF))
        #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit(), out=scf.RHF(mol), remove_df=False),df_jk. _DFHF))
        #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit(), out=scf.UHF(mol), remove_df=False),df_jk. _DFHF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.GHF(mol).density_fit(), out=scf.GHF(mol), remove_df=False), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_rhf(scf.RHF(mol).density_fit(), out=scf.RHF(mol), remove_df=True), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_uhf(scf.RHF(mol).density_fit(), out=scf.UHF(mol), remove_df=True), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.RHF(mol).density_fit(), out=scf.GHF(mol), remove_df=True), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_rhf(scf.UHF(mol).density_fit(), out=scf.RHF(mol), remove_df=True), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_uhf(scf.UHF(mol).density_fit(), out=scf.UHF(mol), remove_df=True), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.UHF(mol).density_fit(), out=scf.GHF(mol), remove_df=True), df_jk._DFHF))
        #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit(), out=scf.RHF(mol), remove_df=True),df_jk. _DFHF))
        #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit(), out=scf.UHF(mol), remove_df=True),df_jk. _DFHF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.GHF(mol).density_fit(), out=scf.GHF(mol), remove_df=True), df_jk._DFHF))

        addons.convert_to_rhf(scf.RHF(mol).x2c().density_fit())
        addons.convert_to_uhf(scf.RHF(mol).x2c().density_fit())
        addons.convert_to_ghf(scf.RHF(mol).x2c().density_fit())
        addons.convert_to_rhf(scf.UHF(mol).x2c().density_fit())
        addons.convert_to_uhf(scf.UHF(mol).x2c().density_fit())
        addons.convert_to_ghf(scf.UHF(mol).x2c().density_fit())
        #addons.convert_to_rhf(scf.GHF(mol).x2c().density_fit())
        #addons.convert_to_uhf(scf.GHF(mol).x2c().density_fit())
        addons.convert_to_ghf(scf.GHF(mol).x2c().density_fit())

        self.assertFalse(isinstance(addons.convert_to_rhf(scf.RHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))
        self.assertFalse(isinstance(addons.convert_to_uhf(scf.RHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.RHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))
        self.assertFalse(isinstance(addons.convert_to_rhf(scf.UHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))
        self.assertFalse(isinstance(addons.convert_to_uhf(scf.UHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.UHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))
        #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))
        #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.GHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF))

        self.assertFalse(isinstance(addons.convert_to_rhf(scf.RHF(mol).newton().density_fit()), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_uhf(scf.RHF(mol).newton().density_fit()), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.RHF(mol).newton().density_fit()), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_rhf(scf.UHF(mol).newton().density_fit()), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_uhf(scf.UHF(mol).newton().density_fit()), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.UHF(mol).newton().density_fit()), df_jk._DFHF))
        #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).newton().density_fit()), df_jk._DFHF))
        #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).newton().density_fit()), df_jk._DFHF))
        self.assertFalse(isinstance(addons.convert_to_ghf(scf.GHF(mol).newton().density_fit()), df_jk._DFHF))

        self.assertTrue(isinstance(addons.convert_to_rhf(scf.RHF(mol).density_fit().newton()), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_uhf(scf.RHF(mol).density_fit().newton()), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(scf.RHF(mol).density_fit().newton()), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_rhf(scf.UHF(mol).density_fit().newton()), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_uhf(scf.UHF(mol).density_fit().newton()), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(scf.UHF(mol).density_fit().newton()), df_jk._DFHF))
        #self.assertTrue(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit().newton()), df_jk._DFHF))
        #self.assertTrue(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit().newton()), df_jk._DFHF))
        self.assertTrue(isinstance(addons.convert_to_ghf(scf.GHF(mol).density_fit().newton()), df_jk._DFHF))
Exemplo n.º 4
0
def convert_to_ghf(mf, out=None):
    '''Convert the given mean-field object to the generalized HF/KS object

    Args:
        mf : SCF object

    Returns:
        An generalized SCF object
    '''
    from pyscf.pbc import scf

    if out is not None:
        assert (isinstance(out, (scf.ghf.GHF, scf.kghf.KGHF)))
        if isinstance(mf, scf.khf.KSCF):
            assert (isinstance(out, scf.khf.KSCF))
        else:
            assert (not isinstance(out, scf.khf.KSCF))

    if isinstance(mf, scf.ghf.GHF):
        if out is None:
            return copy.copy(mf)
        else:
            out.__dict__.update(mf.__dict__)
            return out

    elif isinstance(mf, scf.khf.KSCF):

        def update_mo_(mf, mf1):
            _keys = mf._keys.union(mf1._keys)
            mf1.__dict__.update(mf.__dict__)
            mf1._keys = _keys
            if mf.mo_energy is not None:
                mf1.mo_energy = []
                mf1.mo_occ = []
                mf1.mo_coeff = []
                nkpts = len(mf.kpts)
                is_rhf = isinstance(mf, scf.hf.RHF)
                for k in range(nkpts):
                    if is_rhf:
                        mo_a = mo_b = mf.mo_coeff[k]
                        ea = getattr(mf.mo_energy[k], 'mo_ea', mf.mo_energy[k])
                        eb = getattr(mf.mo_energy[k], 'mo_eb', mf.mo_energy[k])
                        occa = mf.mo_occ[k] > 0
                        occb = mf.mo_occ[k] == 2
                        orbspin = mol_addons.get_ghf_orbspin(
                            ea, mf.mo_occ[k], True)
                    else:
                        mo_a = mf.mo_coeff[0][k]
                        mo_b = mf.mo_coeff[1][k]
                        ea = mf.mo_energy[0][k]
                        eb = mf.mo_energy[1][k]
                        occa = mf.mo_occ[0][k]
                        occb = mf.mo_occ[1][k]
                        orbspin = mol_addons.get_ghf_orbspin(
                            (ea, eb), (occa, occb), False)

                    nao, nmo = mo_a.shape

                    mo_energy = numpy.empty(nmo * 2)
                    mo_energy[orbspin == 0] = ea
                    mo_energy[orbspin == 1] = eb
                    mo_occ = numpy.empty(nmo * 2)
                    mo_occ[orbspin == 0] = occa
                    mo_occ[orbspin == 1] = occb

                    mo_coeff = numpy.zeros((nao * 2, nmo * 2),
                                           dtype=mo_a.dtype)
                    mo_coeff[:nao, orbspin == 0] = mo_a
                    mo_coeff[nao:, orbspin == 1] = mo_b
                    mo_coeff = lib.tag_array(mo_coeff, orbspin=orbspin)

                    mf1.mo_energy.append(mo_energy)
                    mf1.mo_occ.append(mo_occ)
                    mf1.mo_coeff.append(mo_coeff)

            return mf1

        if out is None:
            out = scf.kghf.KGHF(mf.cell)
        return update_mo_(mf, out)

    else:
        if out is None:
            out = scf.ghf.GHF(mf.cell)
        out = mol_addons.convert_to_ghf(mf, out, remove_df=False)
        # Manually update .with_df because this attribute may not be passed to the
        # output object correctly in molecular convert function
        out.with_df = mf.with_df
        return out
Exemplo n.º 5
0
def convert_to_ghf(mf, out=None):
    '''Convert the given mean-field object to the generalized HF/KS object

    Args:
        mf : SCF object

    Returns:
        An generalized SCF object
    '''
    from pyscf.scf import addons as mol_addons
    from pyscf.pbc import scf

    if out is not None:
        assert(isinstance(out, (scf.ghf.GHF, scf.kghf.KGHF)))
        if isinstance(mf, scf.khf.KSCF):
            assert(isinstance(out, scf.khf.KSCF))
        else:
            assert(not isinstance(out, scf.khf.KSCF))

    if isinstance(mf, scf.ghf.GHF):
        if out is None:
            return copy.copy(mf)
        else:
            out.__dict__.update(mf.__dict__)
            return out

    elif isinstance(mf, scf.khf.KSCF):

        def update_mo_(mf, mf1):
            _keys = mf._keys.union(mf1._keys)
            mf1.__dict__.update(mf.__dict__)
            mf1._keys = _keys
            if mf.mo_energy is not None:
                mf1.mo_energy = []
                mf1.mo_occ = []
                mf1.mo_coeff = []
                nkpts = len(mf.kpts)
                is_rhf = isinstance(mf, scf.hf.RHF)
                for k in range(nkpts):
                    if is_rhf:
                        mo_a = mo_b = mf.mo_coeff[k]
                        ea = eb = mf.mo_energy[k]
                        occa = mf.mo_occ[k] > 0
                        occb = mf.mo_occ[k] == 2
                        orbspin = mol_addons.get_ghf_orbspin(ea, mf.mo_occ[k], True)
                    else:
                        mo_a = mf.mo_coeff[0][k]
                        mo_b = mf.mo_coeff[1][k]
                        ea = mf.mo_energy[0][k]
                        eb = mf.mo_energy[1][k]
                        occa = mf.mo_occ[0][k]
                        occb = mf.mo_occ[1][k]
                        orbspin = mol_addons.get_ghf_orbspin((ea, eb), (occa, occb), False)

                    nao, nmo = mo_a.shape

                    mo_energy = numpy.empty(nmo*2)
                    mo_energy[orbspin==0] = ea
                    mo_energy[orbspin==1] = eb
                    mo_occ = numpy.empty(nmo*2)
                    mo_occ[orbspin==0] = occa
                    mo_occ[orbspin==1] = occb

                    mo_coeff = numpy.zeros((nao*2,nmo*2), dtype=mo_a.dtype)
                    mo_coeff[:nao,orbspin==0] = mo_a
                    mo_coeff[nao:,orbspin==1] = mo_b
                    mo_coeff = lib.tag_array(mo_coeff, orbspin=orbspin)

                    mf1.mo_energy.append(mo_energy)
                    mf1.mo_occ.append(mo_occ)
                    mf1.mo_coeff.append(mo_coeff)

            return mf1

        if out is None:
            out = scf.kghf.KGHF(mf.cell)
        return update_mo_(mf, out)

    else:
        if out is None:
            out = scf.ghf.GHF(mf.cell)
        return mol_addons.convert_to_ghf(mf, out, False)