1#!/usr/bin/env python 2# Copyright 2014-2018 The PySCF Developers. All Rights Reserved. 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16import unittest 17import copy 18import numpy 19import scipy.linalg 20 21from pyscf import gto, lib 22from pyscf import scf, dft 23from pyscf.scf import addons 24 25mol = gto.Mole() 26mol.verbose = 7 27mol.output = '/dev/null' 28mol.atom = [ 29 ["O" , (0. , 0. , 0.)], 30 [1 , (0. , -0.757 , 0.587)], 31 [1 , (0. , 0.757 , 0.587)] ] 32 33mol.basis = {"H": '6-31g', 34 "O": '6-31g',} 35mol.build() 36mf = scf.RHF(mol).run() 37 38mol_dz = mol.copy() 39mol_dz.basis = 'cc-pvdz' 40mol_dz.cart = True 41mol_dz.build(False, False) 42 43mol1 = mol.copy() 44mol1.spin = 2 45mf_u = scf.UHF(mol1).run() 46 47mol2 = mol.copy() 48mol2.symmetry = True 49mol2.build(0,0) 50sym_mf = scf.RHF(mol2).run() 51 52mol3 = mol1.copy() 53mol3.symmetry = True 54mol3.spin = 2 55mol3.build(0,0) 56sym_mf_u = scf.UHF(mol3).run() 57 58def tearDownModule(): 59 global mol, mf, mol_dz, mol1, mf_u, mol2, sym_mf, mol3, sym_mf_u 60 mol.stdout.close() 61 del mol, mf, mol_dz, mol1, mf_u, mol2, sym_mf, mol3, sym_mf_u 62 63 64class KnownValues(unittest.TestCase): 65 def test_project_mo_nr2nr(self): 66 nao = mol.nao_nr() 67 c = numpy.random.random((nao,nao)) 68 c1 = addons.project_mo_nr2nr(mol, c, mol) 69 self.assertAlmostEqual(abs(c-c1).max(), 0, 12) 70 71 numpy.random.seed(15) 72 nao = mol.nao_nr() 73 mo1 = numpy.random.random((nao,nao)) 74 mo2 = addons.project_mo_nr2nr(mol, [mo1,mo1], mol_dz) 75 self.assertAlmostEqual(abs(mo2[0]).sum(), 83.436359425591888, 11) 76 self.assertAlmostEqual(abs(mo2[1]).sum(), 83.436359425591888, 11) 77 78 def test_project_mo_r2r(self): 79 nao = mol.nao_2c() 80 c = numpy.random.random((nao*2,nao*2)) 81 c = c + numpy.sin(c)*1j 82 c1 = addons.project_mo_r2r(mol, c, mol) 83 self.assertAlmostEqual(abs(c-c1).max(), 0, 12) 84 85 numpy.random.seed(15) 86 n2c = mol.nao_2c() 87 n4c = n2c * 2 88 mo1 = numpy.random.random((n4c,n4c)) + numpy.random.random((n4c,n4c))*1j 89 mo2 = addons.project_mo_r2r(mol, [mo1,mo1], mol_dz) 90 self.assertAlmostEqual(abs(mo2[0]).sum(), 2159.3715489514038, 11) 91 self.assertAlmostEqual(abs(mo2[1]).sum(), 2159.3715489514038, 11) 92 93 def test_project_mo_nr2r(self): 94 numpy.random.seed(15) 95 nao = mol.nao_nr() 96 mo1 = numpy.random.random((nao,nao)) 97 mo2 = addons.project_mo_nr2r(mol, [mo1,mo1], mol_dz) 98 self.assertAlmostEqual(abs(mo2[0]).sum(), 172.66468850263556, 11) 99 self.assertAlmostEqual(abs(mo2[1]).sum(), 172.66468850263556, 11) 100 101 mo2 = addons.project_mo_nr2r(mol, mo1, mol_dz) 102 self.assertAlmostEqual(abs(mo2).sum(), 172.66468850263556, 11) 103 104 def test_project_dm_nr2nr(self): 105 nao = mol.nao_nr() 106 dm = numpy.random.random((nao,nao)) 107 dm = dm + dm.T 108 x1 = addons.project_dm_nr2nr(mol, dm, mol) 109 self.assertAlmostEqual(abs(dm-x1).max(), 0, 12) 110 111 numpy.random.seed(15) 112 mo = numpy.random.random((nao,10)) 113 mo1 = addons.project_mo_nr2nr(mol, mo, mol_dz) 114 dm = numpy.dot(mo, mo.T) 115 dmref = numpy.dot(mo1, mo1.T) 116 dm1 = addons.project_dm_nr2nr(mol, [dm,dm], mol_dz) 117 118 self.assertAlmostEqual(abs(dmref-dm1[0]).max(), 0, 11) 119 self.assertAlmostEqual(abs(dmref-dm1[1]).max(), 0, 11) 120 self.assertAlmostEqual(lib.finger(dm1[0]), 73.603267455214876, 11) 121 122 def test_project_dm_r2r(self): 123 nao = mol.nao_2c() 124 dm = numpy.random.random((nao*2,nao*2)) 125 dm = dm + numpy.sin(dm)*1j 126 x1 = addons.project_dm_r2r(mol, dm, mol) 127 self.assertTrue(numpy.allclose(dm, x1)) 128 129 numpy.random.seed(15) 130 n2c = mol.nao_2c() 131 n4c = n2c * 2 132 mo = numpy.random.random((n4c,10)) + numpy.random.random((n4c,10))*1j 133 mo1 = addons.project_mo_r2r(mol, mo, mol_dz) 134 dm = numpy.dot(mo, mo.T.conj()) 135 dmref = numpy.dot(mo1, mo1.T.conj()) 136 dm1 = addons.project_dm_r2r(mol, [dm,dm], mol_dz) 137 138 self.assertAlmostEqual(abs(dmref-dm1[0]).max(), 0, 11) 139 self.assertAlmostEqual(abs(dmref-dm1[1]).max(), 0, 11) 140 self.assertAlmostEqual(lib.finger(dm1[0]), -5.3701392643370607+15.484616570244016j, 11) 141 142 def test_project_dm_nr2r(self): 143 numpy.random.seed(15) 144 nao = mol.nao_nr() 145 mo = numpy.random.random((nao,10)) 146 mo1 = addons.project_mo_nr2r(mol, mo, mol_dz) 147 dm = numpy.dot(mo, mo.T.conj()) 148 dmref = numpy.dot(mo1, mo1.T.conj()) 149 dm1 = addons.project_dm_nr2r(mol, [dm,dm], mol_dz) 150 151 self.assertAlmostEqual(abs(dmref-dm1[0]).max(), 0, 11) 152 self.assertAlmostEqual(abs(dmref-dm1[1]).max(), 0, 11) 153 self.assertAlmostEqual(lib.finger(dm1[0]), -13.580612999088892-20.209297457056557j, 11) 154 155 dm1 = addons.project_dm_nr2r(mol, dm, mol_dz) 156 self.assertAlmostEqual(abs(dmref-dm1).max(), 0, 11) 157 158 def test_frac_occ(self): 159 mol = gto.Mole() 160 mol.verbose = 5 161 mol.output = '/dev/null' 162 mol.atom = ''' 163 7 0. 0 -0.7 164 7 0. 0 0.7''' 165 mol.basis = 'cc-pvdz' 166 mol.charge = 2 167 mol.build() 168 mf = scf.RHF(mol) 169 mf = addons.frac_occ(mf) 170 self.assertAlmostEqual(mf.scf(), -107.13465364012296, 9) 171 172 mol.charge = -1 173 mol.spin = 1 174 mf = scf.RHF(mol) 175 mf = addons.frac_occ(mf) 176 self.assertAlmostEqual(mf.scf(), -108.3626325837689, 9) 177 178 mol.charge = 1 179 mol.spin = 1 180 mf = scf.rhf.RHF(mol) 181 mf = addons.frac_occ(mf) 182 self.assertAlmostEqual(mf.scf(), -108.10375514714799, 9) 183 184 mol.charge = 1 185 mol.spin = 1 186 mf = scf.UHF(mol) 187 mf = addons.frac_occ(mf) 188 self.assertAlmostEqual(mf.scf(), -108.17458104180083, 9) 189 190 mol.charge = 0 191 mol.spin = 0 192 mf = scf.RHF(mol) 193 mf = addons.frac_occ(mf) 194 self.assertAlmostEqual(mf.scf(), -108.76171800006837, 9) 195 self.assertTrue(numpy.allclose(mf.mo_occ[:7], [2,2,2,2,2,2,2])) 196 mol.stdout.close() 197 198 def test_dynamic_occ(self): 199 mol = gto.Mole() 200 mol.verbose = 5 201 mol.output = '/dev/null' 202 mol.atom = ''' 203 6 0. 0 -0.7 204 6 0. 0 0.7''' 205 mol.basis = 'cc-pvdz' 206 mol.charge = 2 207 mol.build() 208 mf = scf.RHF(mol) 209 mf = addons.dynamic_occ(mf) 210 self.assertAlmostEqual(mf.scf(), -74.214503776693817, 9) 211 mol.stdout.close() 212 213 def test_follow_state(self): 214 mf1 = addons.follow_state(mf).run() 215 self.assertAlmostEqual(mf1.e_tot, mf.e_tot, 9) 216 217 mo0 = mf.mo_coeff[:,[0,1,2,3,5]] 218 mf1 = addons.follow_state(mf, mo0) 219 self.assertAlmostEqual(mf1.scf(), -75.178145727548511, 9) 220 self.assertTrue(numpy.allclose(mf1.mo_occ[:6], [2,2,2,2,0,2])) 221 222 def test_float_occ(self): 223 mol = gto.Mole() 224 mol.verbose = 5 225 mol.output = '/dev/null' 226 mol.atom = ''' 227 C 0. 0 0''' 228 mol.basis = 'cc-pvdz' 229 mol.build() 230 mf = scf.UHF(mol) 231 mf = addons.float_occ(mf) 232 self.assertAlmostEqual(mf.scf(), -37.590712883365917, 9) 233 mol.stdout.close() 234 235 def test_mom_occ(self): 236 mf = dft.UKS(mol) 237 mf.xc = 'b3lyp' 238 mf.scf() 239 mo0 = mf.mo_coeff 240 occ = mf.mo_occ 241 occ[0][4] = 0. 242 occ[0][5] = 1. 243 mf = addons.mom_occ(mf, mo0, occ) 244 dm = mf.make_rdm1(mo0, occ) 245 self.assertAlmostEqual(mf.scf(dm), -76.0606858747, 9) 246 self.assertTrue(numpy.allclose(mf.mo_occ[0][:6], [1,1,1,1,0,1])) 247 248 mf = scf.ROHF(mol).run() 249 mo0 = mf.mo_coeff 250 occ = mf.mo_occ 251 setocc = numpy.zeros((2, occ.size)) 252 setocc[:, occ==2] = 1 253 setocc[0][4] = 0 254 setocc[0][5] = 1 255 newocc = setocc[0][:] + setocc[1][:] 256 mf = addons.mom_occ(mf, mo0, setocc) 257 dm = mf.make_rdm1(mo0, newocc) 258 mf.kernel(dm) 259 self.assertAlmostEqual(mf.e_tot, -75.723654936331542, 9) 260 self.assertTrue(numpy.allclose(mf.mo_occ[:6], [2,2,2,2,1,1])) 261 262 def test_dynamic_level_shift(self): 263 mf = scf.RHF(mol) 264 mf = addons.dynamic_level_shift(mf) 265 mf.init_guess = 'hcore' 266 mf.max_cycle = 4 267 mf.kernel() 268 self.assertAlmostEqual(mf.e_tot, -75.868344714445342, 9) 269 270 def test_convert_to_scf(self): 271 from pyscf.x2c import x2c 272 from pyscf.df import df_jk 273 from pyscf.soscf import newton_ah 274 addons.convert_to_rhf(dft.RKS(mol)) 275 addons.convert_to_uhf(dft.RKS(mol)) 276 addons.convert_to_ghf(dft.RKS(mol)) 277 addons.convert_to_rhf(dft.UKS(mol)) 278 addons.convert_to_uhf(dft.UKS(mol)) 279 addons.convert_to_ghf(dft.UKS(mol)) 280 #addons.convert_to_rhf(dft.GKS(mol)) 281 #addons.convert_to_uhf(dft.GKS(mol)) 282 addons.convert_to_ghf(dft.GKS(mol)) 283 284 self.assertTrue(isinstance(addons.convert_to_rhf(mf), scf.rhf.RHF)) 285 self.assertTrue(isinstance(addons.convert_to_uhf(mf), scf.uhf.UHF)) 286 self.assertTrue(isinstance(addons.convert_to_ghf(mf), scf.ghf.GHF)) 287 self.assertTrue(isinstance(addons.convert_to_rhf(scf.UHF(mol)), scf.rhf.RHF)) 288 self.assertTrue(isinstance(addons.convert_to_rhf(mf_u), scf.rohf.ROHF)) 289 self.assertTrue(isinstance(addons.convert_to_uhf(mf_u), scf.uhf.UHF)) 290 self.assertTrue(isinstance(addons.convert_to_ghf(mf_u), scf.ghf.GHF)) 291 self.assertTrue(isinstance(addons.convert_to_rhf(sym_mf), scf.hf_symm.RHF)) 292 self.assertTrue(isinstance(addons.convert_to_uhf(sym_mf), scf.uhf_symm.UHF)) 293 self.assertTrue(isinstance(addons.convert_to_ghf(sym_mf), scf.ghf_symm.GHF)) 294 self.assertTrue(isinstance(addons.convert_to_rhf(sym_mf_u), scf.hf_symm.ROHF)) 295 self.assertTrue(isinstance(addons.convert_to_uhf(sym_mf_u), scf.uhf_symm.UHF)) 296 self.assertTrue(isinstance(addons.convert_to_ghf(sym_mf_u), scf.ghf_symm.GHF)) 297 298 mf1 = copy.copy(mf) 299 self.assertTrue(isinstance(mf1.convert_from_(mf), scf.rhf.RHF)) 300 self.assertTrue(isinstance(mf1.convert_from_(mf_u), scf.rhf.RHF)) 301 self.assertFalse(isinstance(mf1.convert_from_(mf_u), scf.rohf.ROHF)) 302 self.assertTrue(isinstance(mf1.convert_from_(sym_mf), scf.rhf.RHF)) 303 self.assertTrue(isinstance(mf1.convert_from_(sym_mf_u), scf.rhf.RHF)) 304 self.assertFalse(isinstance(mf1.convert_from_(sym_mf_u), scf.rohf.ROHF)) 305 self.assertFalse(isinstance(mf1.convert_from_(sym_mf), scf.hf_symm.RHF)) 306 self.assertFalse(isinstance(mf1.convert_from_(sym_mf_u), scf.hf_symm.RHF)) 307 mf1 = copy.copy(mf_u) 308 self.assertTrue(isinstance(mf1.convert_from_(mf), scf.uhf.UHF)) 309 self.assertTrue(isinstance(mf1.convert_from_(mf_u), scf.uhf.UHF)) 310 self.assertTrue(isinstance(mf1.convert_from_(sym_mf), scf.uhf.UHF)) 311 self.assertTrue(isinstance(mf1.convert_from_(sym_mf_u), scf.uhf.UHF)) 312 self.assertFalse(isinstance(mf1.convert_from_(sym_mf), scf.uhf_symm.UHF)) 313 self.assertFalse(isinstance(mf1.convert_from_(sym_mf_u), scf.uhf_symm.UHF)) 314 mf1 = scf.GHF(mol) 315 self.assertTrue(isinstance(mf1.convert_from_(mf), scf.ghf.GHF)) 316 self.assertTrue(isinstance(mf1.convert_from_(mf_u), scf.ghf.GHF)) 317 self.assertTrue(isinstance(mf1.convert_from_(sym_mf), scf.ghf.GHF)) 318 self.assertTrue(isinstance(mf1.convert_from_(sym_mf_u), scf.ghf.GHF)) 319 self.assertFalse(isinstance(mf1.convert_from_(sym_mf), scf.ghf_symm.GHF)) 320 self.assertFalse(isinstance(mf1.convert_from_(sym_mf_u), scf.ghf_symm.GHF)) 321 322 self.assertTrue(isinstance(addons.convert_to_rhf(scf.RHF(mol).density_fit(), remove_df=False), df_jk._DFHF)) 323 self.assertTrue(isinstance(addons.convert_to_uhf(scf.RHF(mol).density_fit(), remove_df=False), df_jk._DFHF)) 324 self.assertTrue(isinstance(addons.convert_to_ghf(scf.RHF(mol).density_fit(), remove_df=False), df_jk._DFHF)) 325 self.assertTrue(isinstance(addons.convert_to_rhf(scf.UHF(mol).density_fit(), remove_df=False), df_jk._DFHF)) 326 self.assertTrue(isinstance(addons.convert_to_uhf(scf.UHF(mol).density_fit(), remove_df=False), df_jk._DFHF)) 327 self.assertTrue(isinstance(addons.convert_to_ghf(scf.UHF(mol).density_fit(), remove_df=False), df_jk._DFHF)) 328 #self.assertTrue(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit(), remove_df=False),df_jk. _DFHF)) 329 #self.assertTrue(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit(), remove_df=False),df_jk. _DFHF)) 330 self.assertTrue(isinstance(addons.convert_to_ghf(scf.GHF(mol).density_fit(), remove_df=False), df_jk._DFHF)) 331 self.assertFalse(isinstance(addons.convert_to_rhf(scf.RHF(mol).density_fit(), out=scf.RHF(mol), remove_df=False), df_jk._DFHF)) 332 self.assertFalse(isinstance(addons.convert_to_uhf(scf.RHF(mol).density_fit(), out=scf.UHF(mol), remove_df=False), df_jk._DFHF)) 333 self.assertFalse(isinstance(addons.convert_to_ghf(scf.RHF(mol).density_fit(), out=scf.GHF(mol), remove_df=False), df_jk._DFHF)) 334 self.assertFalse(isinstance(addons.convert_to_rhf(scf.UHF(mol).density_fit(), out=scf.RHF(mol), remove_df=False), df_jk._DFHF)) 335 self.assertFalse(isinstance(addons.convert_to_uhf(scf.UHF(mol).density_fit(), out=scf.UHF(mol), remove_df=False), df_jk._DFHF)) 336 self.assertFalse(isinstance(addons.convert_to_ghf(scf.UHF(mol).density_fit(), out=scf.GHF(mol), remove_df=False), df_jk._DFHF)) 337 #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit(), out=scf.RHF(mol), remove_df=False),df_jk. _DFHF)) 338 #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit(), out=scf.UHF(mol), remove_df=False),df_jk. _DFHF)) 339 self.assertFalse(isinstance(addons.convert_to_ghf(scf.GHF(mol).density_fit(), out=scf.GHF(mol), remove_df=False), df_jk._DFHF)) 340 self.assertFalse(isinstance(addons.convert_to_rhf(scf.RHF(mol).density_fit(), out=scf.RHF(mol), remove_df=True), df_jk._DFHF)) 341 self.assertFalse(isinstance(addons.convert_to_uhf(scf.RHF(mol).density_fit(), out=scf.UHF(mol), remove_df=True), df_jk._DFHF)) 342 self.assertFalse(isinstance(addons.convert_to_ghf(scf.RHF(mol).density_fit(), out=scf.GHF(mol), remove_df=True), df_jk._DFHF)) 343 self.assertFalse(isinstance(addons.convert_to_rhf(scf.UHF(mol).density_fit(), out=scf.RHF(mol), remove_df=True), df_jk._DFHF)) 344 self.assertFalse(isinstance(addons.convert_to_uhf(scf.UHF(mol).density_fit(), out=scf.UHF(mol), remove_df=True), df_jk._DFHF)) 345 self.assertFalse(isinstance(addons.convert_to_ghf(scf.UHF(mol).density_fit(), out=scf.GHF(mol), remove_df=True), df_jk._DFHF)) 346 #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit(), out=scf.RHF(mol), remove_df=True),df_jk. _DFHF)) 347 #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit(), out=scf.UHF(mol), remove_df=True),df_jk. _DFHF)) 348 self.assertFalse(isinstance(addons.convert_to_ghf(scf.GHF(mol).density_fit(), out=scf.GHF(mol), remove_df=True), df_jk._DFHF)) 349 350 addons.convert_to_rhf(scf.RHF(mol).x2c().density_fit()) 351 addons.convert_to_uhf(scf.RHF(mol).x2c().density_fit()) 352 addons.convert_to_ghf(scf.RHF(mol).x2c().density_fit()) 353 addons.convert_to_rhf(scf.UHF(mol).x2c().density_fit()) 354 addons.convert_to_uhf(scf.UHF(mol).x2c().density_fit()) 355 addons.convert_to_ghf(scf.UHF(mol).x2c().density_fit()) 356 #addons.convert_to_rhf(scf.GHF(mol).x2c().density_fit()) 357 #addons.convert_to_uhf(scf.GHF(mol).x2c().density_fit()) 358 addons.convert_to_ghf(scf.GHF(mol).x2c().density_fit()) 359 360 self.assertFalse(isinstance(addons.convert_to_rhf(scf.RHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF)) 361 self.assertFalse(isinstance(addons.convert_to_uhf(scf.RHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF)) 362 self.assertFalse(isinstance(addons.convert_to_ghf(scf.RHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF)) 363 self.assertFalse(isinstance(addons.convert_to_rhf(scf.UHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF)) 364 self.assertFalse(isinstance(addons.convert_to_uhf(scf.UHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF)) 365 self.assertFalse(isinstance(addons.convert_to_ghf(scf.UHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF)) 366 #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF)) 367 #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF)) 368 self.assertFalse(isinstance(addons.convert_to_ghf(scf.GHF(mol).x2c().newton().density_fit()), newton_ah._CIAH_SOSCF)) 369 370 self.assertFalse(isinstance(addons.convert_to_rhf(scf.RHF(mol).newton().density_fit()), df_jk._DFHF)) 371 self.assertFalse(isinstance(addons.convert_to_uhf(scf.RHF(mol).newton().density_fit()), df_jk._DFHF)) 372 self.assertFalse(isinstance(addons.convert_to_ghf(scf.RHF(mol).newton().density_fit()), df_jk._DFHF)) 373 self.assertFalse(isinstance(addons.convert_to_rhf(scf.UHF(mol).newton().density_fit()), df_jk._DFHF)) 374 self.assertFalse(isinstance(addons.convert_to_uhf(scf.UHF(mol).newton().density_fit()), df_jk._DFHF)) 375 self.assertFalse(isinstance(addons.convert_to_ghf(scf.UHF(mol).newton().density_fit()), df_jk._DFHF)) 376 #self.assertFalse(isinstance(addons.convert_to_rhf(scf.GHF(mol).newton().density_fit()), df_jk._DFHF)) 377 #self.assertFalse(isinstance(addons.convert_to_uhf(scf.GHF(mol).newton().density_fit()), df_jk._DFHF)) 378 self.assertFalse(isinstance(addons.convert_to_ghf(scf.GHF(mol).newton().density_fit()), df_jk._DFHF)) 379 380 self.assertTrue(isinstance(addons.convert_to_rhf(scf.RHF(mol).density_fit().newton()), df_jk._DFHF)) 381 self.assertTrue(isinstance(addons.convert_to_uhf(scf.RHF(mol).density_fit().newton()), df_jk._DFHF)) 382 self.assertTrue(isinstance(addons.convert_to_ghf(scf.RHF(mol).density_fit().newton()), df_jk._DFHF)) 383 self.assertTrue(isinstance(addons.convert_to_rhf(scf.UHF(mol).density_fit().newton()), df_jk._DFHF)) 384 self.assertTrue(isinstance(addons.convert_to_uhf(scf.UHF(mol).density_fit().newton()), df_jk._DFHF)) 385 self.assertTrue(isinstance(addons.convert_to_ghf(scf.UHF(mol).density_fit().newton()), df_jk._DFHF)) 386 #self.assertTrue(isinstance(addons.convert_to_rhf(scf.GHF(mol).density_fit().newton()), df_jk._DFHF)) 387 #self.assertTrue(isinstance(addons.convert_to_uhf(scf.GHF(mol).density_fit().newton()), df_jk._DFHF)) 388 self.assertTrue(isinstance(addons.convert_to_ghf(scf.GHF(mol).density_fit().newton()), df_jk._DFHF)) 389 390 def test_get_ghf_orbspin(self): 391 orbspin = addons.get_ghf_orbspin(mf.mo_energy, mf.mo_occ) 392 self.assertEqual(list(orbspin), [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]) 393 394 orbspin = addons.get_ghf_orbspin(mf_u.mo_energy, mf_u.mo_occ, is_rhf=False) 395 self.assertEqual(list(orbspin), [0,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,1]) 396 397 def test_remove_lindep(self): 398 mol = gto.M(verbose = 0, 399 atom = [('H', 0, 0, i*.5) for i in range(4)], 400 basis = ('sto-3g',[[0, [.002,1]]])) 401 mf = addons.remove_linear_dep_(scf.RHF(mol), threshold=1e-8, 402 lindep=1e-9).run() 403 self.assertAlmostEqual(mf.e_tot, -1.6291001503057689, 7) 404 405if __name__ == "__main__": 406 print("Full Tests for addons") 407 unittest.main() 408 409