Skip to content

Commit ea0729a

Browse files
committed
Automatically initialize base.run in Gradients and Hessian methods
1 parent feaea35 commit ea0729a

File tree

11 files changed

+43
-13
lines changed

11 files changed

+43
-13
lines changed

pyscf/geomopt/geometric_solver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ def _make_hessian(g_scanner, hessian_option, tmpdir):
217217
h = method.Hessian().kernel()
218218
except (TypeError, NotImplementedError):
219219
logger.warn(g_scanner, 'Analytical hessian for %s is not available', method)
220-
hessian_option = False
220+
hessian_option = None
221221
else:
222222
h = h.transpose(0,2,1,3).reshape(3*natm, 3*natm)
223223
numpy.savetxt(hessian_file, h)

pyscf/grad/casci.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,10 @@ def dump_flags(self, verbose=None):
288288
def kernel(self, mo_coeff=None, ci=None, atmlst=None,
289289
state=None, verbose=None):
290290
log = logger.new_logger(self, verbose)
291-
if ci is None: ci = self.base.ci
291+
if ci is None:
292+
if self.base.ci is None:
293+
self.base.ci.run()
294+
ci = self.base.ci
292295
if self.state is None: # state average MCSCF calculations
293296
assert (state is None)
294297
elif isinstance(ci, (list, tuple, RANGE_TYPE)):

pyscf/grad/casscf.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,11 @@ class Gradients(casci_grad.Gradients):
194194

195195
def kernel(self, mo_coeff=None, ci=None, atmlst=None, verbose=None):
196196
log = logger.new_logger(self, verbose)
197+
if ci is None:
198+
if self.base.ci is None:
199+
self.base.ci.run()
200+
ci = self.base.ci
201+
197202
if atmlst is None:
198203
atmlst = self.atmlst
199204
else:

pyscf/grad/ccsd.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,10 @@ def kernel(self, t1=None, t2=None, l1=None, l2=None, eris=None,
422422
atmlst=None, verbose=None):
423423
log = logger.new_logger(self, verbose)
424424
mycc = self.base
425-
if t1 is None: t1 = mycc.t1
425+
if t1 is None:
426+
if mycc.t1 is None:
427+
mycc.run()
428+
t1 = mycc.t1
426429
if t2 is None: t2 = mycc.t2
427430
if l1 is None: l1 = mycc.l1
428431
if l2 is None: l2 = mycc.l2

pyscf/grad/cisd.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,10 @@ def kernel(self, civec=None, eris=None, atmlst=None, state=None,
158158
verbose=None):
159159
log = logger.new_logger(self, verbose)
160160
myci = self.base
161-
if civec is None: civec = myci.ci
162-
if civec is None: civec = myci.kernel(eris=eris)
161+
if civec is None:
162+
if myci.ci is None:
163+
myci.kernel(eris=eris)
164+
civec = myci.ci
163165
if (isinstance(civec, (list, tuple)) or
164166
(isinstance(civec, numpy.ndarray) and civec.ndim > 1)):
165167
if state is None:

pyscf/grad/dhf.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,10 @@ def extra_force(self, atom_id, envs):
194194

195195
def kernel(self, mo_energy=None, mo_coeff=None, mo_occ=None, atmlst=None):
196196
cput0 = (logger.process_clock(), logger.perf_counter())
197-
if mo_energy is None: mo_energy = self.base.mo_energy
197+
if mo_energy is None:
198+
if self.base.mo_energy is None:
199+
self.base.run()
200+
mo_energy = self.base.mo_energy
198201
if mo_coeff is None: mo_coeff = self.base.mo_coeff
199202
if mo_occ is None: mo_occ = self.base.mo_occ
200203
if atmlst is None:

pyscf/grad/mp2.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,11 @@ class Gradients(rhf_grad.GradientsBase):
296296

297297
def kernel(self, t2=None, atmlst=None, verbose=None):
298298
log = logger.new_logger(self, verbose)
299-
if t2 is None: t2 = self.base.t2
300-
if t2 is None: t2 = self.base.kernel()[1]
299+
if t2 is None:
300+
if self.base.t2 is None:
301+
t2 = self.base.kernel()[1]
302+
else:
303+
t2 = self.base.t2
301304
if atmlst is None:
302305
atmlst = self.atmlst
303306
else:

pyscf/grad/rhf.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,10 @@ def extra_force(self, atom_id, envs):
399399

400400
def kernel(self, mo_energy=None, mo_coeff=None, mo_occ=None, atmlst=None):
401401
cput0 = (logger.process_clock(), logger.perf_counter())
402-
if mo_energy is None: mo_energy = self.base.mo_energy
402+
if mo_energy is None:
403+
if self.base.mo_energy is None:
404+
self.base.run()
405+
mo_energy = self.base.mo_energy
403406
if mo_coeff is None: mo_coeff = self.base.mo_coeff
404407
if mo_occ is None: mo_occ = self.base.mo_occ
405408
if atmlst is None:

pyscf/grad/sacasscf.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -564,13 +564,16 @@ def make_fcasscf_sa (self, casscf_attr={}, fcisolver_attr={}):
564564

565565
def kernel (self, state=None, atmlst=None, verbose=None, mo=None, ci=None, eris=None,
566566
mf_grad=None, e_states=None, level_shift=None, **kwargs):
567+
if eris is None:
568+
eris = self.eris = self.base.ao2mo (mo)
569+
if ci is None:
570+
if self.base.ci is None:
571+
self.base.run()
572+
ci = self.base.ci
567573
if state is None: state = self.state
568574
if atmlst is None: atmlst = self.atmlst
569575
if verbose is None: verbose = self.verbose
570576
if mo is None: mo = self.base.mo_coeff
571-
if ci is None: ci = self.base.ci
572-
if eris is None:
573-
eris = self.eris = self.base.ao2mo (mo)
574577
if mf_grad is None: mf_grad = self.base._scf.nuc_grad_method ()
575578
if state is None:
576579
return casscf_grad.Gradients (self.base).kernel (

pyscf/grad/tdrhf.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,8 @@ def kernel(self, xy=None, state=None, singlet=None, atmlst=None):
290290
'Gradients of ground state is computed.')
291291
return self.base._scf.nuc_grad_method().kernel(atmlst=atmlst)
292292

293+
if self.base.xy is None:
294+
self.base.run()
293295
xy = self.base.xy[state-1]
294296

295297
if singlet is None: singlet = self.base.singlet

pyscf/hessian/rhf.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,10 @@ def hess_nuc(self, mol=None, atmlst=None):
554554
return hess_nuc(mol, atmlst)
555555

556556
def kernel(self, mo_energy=None, mo_coeff=None, mo_occ=None, atmlst=None):
557-
if mo_energy is None: mo_energy = self.base.mo_energy
557+
if mo_energy is None:
558+
if self.base.mo_energy is None:
559+
self.base.run()
560+
mo_energy = self.base.mo_energy
558561
if mo_coeff is None: mo_coeff = self.base.mo_coeff
559562
if mo_occ is None: mo_occ = self.base.mo_occ
560563
if atmlst is None:

0 commit comments

Comments
 (0)