pyscf 2.8.0__py3-none-macosx_11_0_arm64.whl → 2.10.0__py3-none-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. pyscf/__init__.py +1 -1
  2. pyscf/adc/radc.py +40 -11
  3. pyscf/adc/radc_amplitudes.py +71 -82
  4. pyscf/adc/radc_ao2mo.py +11 -4
  5. pyscf/adc/radc_ea.py +61 -75
  6. pyscf/adc/radc_ee.py +1218 -0
  7. pyscf/adc/radc_ip.py +18 -19
  8. pyscf/adc/radc_ip_cvs.py +0 -3
  9. pyscf/adc/uadc.py +50 -17
  10. pyscf/adc/uadc_amplitudes.py +105 -146
  11. pyscf/adc/uadc_ao2mo.py +17 -3
  12. pyscf/adc/uadc_ea.py +121 -169
  13. pyscf/adc/uadc_ee.py +23146 -0
  14. pyscf/adc/uadc_ip.py +32 -38
  15. pyscf/adc/uadc_ip_cvs.py +4 -2
  16. pyscf/agf2/chkfile.py +2 -1
  17. pyscf/cc/__init__.py +2 -3
  18. pyscf/cc/ccsd.py +1 -8
  19. pyscf/cc/ccsd_t_lambda.py +200 -0
  20. pyscf/cc/ccsd_t_rdm.py +351 -0
  21. pyscf/cc/dfccsd.py +7 -4
  22. pyscf/cc/dfuccsd.py +313 -0
  23. pyscf/cc/rccsd.py +5 -1
  24. pyscf/cc/uccsd.py +30 -23
  25. pyscf/ci/gcisd.py +2 -2
  26. pyscf/df/addons.py +115 -30
  27. pyscf/df/autoaux.py +1 -1
  28. pyscf/df/df_jk.py +73 -12
  29. pyscf/df/grad/casdm2_util.py +1 -9
  30. pyscf/df/grad/lpdft.py +42 -0
  31. pyscf/df/grad/mcpdft.py +41 -0
  32. pyscf/df/grad/mspdft.py +54 -0
  33. pyscf/df/hessian/rhf.py +9 -2
  34. pyscf/df/hessian/rks.py +6 -2
  35. pyscf/df/hessian/uhf.py +11 -4
  36. pyscf/df/incore.py +11 -1
  37. pyscf/df/outcore.py +11 -0
  38. pyscf/dft/__init__.py +10 -1
  39. pyscf/dft/gen_grid.py +28 -0
  40. pyscf/dft/libxc.py +12 -9
  41. pyscf/dft/numint.py +16 -13
  42. pyscf/dft/numint2c.py +5 -4
  43. pyscf/dft/rkspu.py +327 -0
  44. pyscf/dft/ukspu.py +227 -0
  45. pyscf/dft/xc_deriv.py +1 -1
  46. pyscf/dft/xcfun.py +7 -6
  47. pyscf/fci/direct_spin1.py +81 -0
  48. pyscf/fci/fci_dhf_slow.py +46 -6
  49. pyscf/fci/selected_ci.py +5 -0
  50. pyscf/geomopt/geometric_solver.py +21 -14
  51. pyscf/grad/casci.py +4 -1
  52. pyscf/grad/casscf.py +5 -0
  53. pyscf/grad/ccsd.py +4 -1
  54. pyscf/grad/ccsd_t.py +2 -2
  55. pyscf/grad/ccsd_t_slow.py +149 -0
  56. pyscf/grad/cisd.py +4 -2
  57. pyscf/grad/cmspdft.py +386 -0
  58. pyscf/grad/dhf.py +4 -1
  59. pyscf/grad/lpdft.py +700 -0
  60. pyscf/grad/mcpdft.py +654 -0
  61. pyscf/grad/mp2.py +5 -2
  62. pyscf/grad/mspdft.py +683 -0
  63. pyscf/grad/rhf.py +4 -9
  64. pyscf/grad/sacasscf.py +6 -1
  65. pyscf/grad/tdrhf.py +9 -1
  66. pyscf/grad/tdrks.py +9 -1
  67. pyscf/grad/tduhf.py +1 -1
  68. pyscf/grad/tduks.py +6 -1
  69. pyscf/gto/basis/__init__.py +27 -10
  70. pyscf/gto/basis/bse.py +16 -7
  71. pyscf/gto/basis/bse_meta.json +1 -0
  72. pyscf/gto/basis/ma-def2-qzvp.dat +751 -1
  73. pyscf/gto/basis/ma-def2-qzvpp.dat +751 -1
  74. pyscf/gto/basis/ma-def2-svp.dat +751 -1
  75. pyscf/gto/basis/ma-def2-svpp.dat +751 -1
  76. pyscf/gto/basis/ma-def2-tzvp.dat +751 -1
  77. pyscf/gto/basis/ma-def2-tzvpp.dat +751 -1
  78. pyscf/gto/basis/parse_nwchem.py +3 -1
  79. pyscf/gto/basis/parse_nwchem_ecp.py +4 -5
  80. pyscf/gto/mole.py +130 -23
  81. pyscf/gto/moleintor.py +25 -0
  82. pyscf/gw/gw_ac.py +1 -1
  83. pyscf/gw/ugw_ac.py +1 -1
  84. pyscf/gw/urpa.py +6 -2
  85. pyscf/hessian/rhf.py +4 -1
  86. pyscf/hessian/rks.py +1535 -2
  87. pyscf/hessian/uks.py +1 -1
  88. pyscf/lib/CMakeLists.txt +7 -2
  89. pyscf/lib/cc/CMakeLists.txt +1 -1
  90. pyscf/lib/cc/ccsd_t_lambda.c +149 -0
  91. pyscf/lib/deps/lib/libcint.6.dylib +0 -0
  92. pyscf/lib/dft/CMakeLists.txt +1 -1
  93. pyscf/lib/dft/grid_basis.c +131 -0
  94. pyscf/lib/dft/grid_collocate.c +298 -264
  95. pyscf/lib/dft/grid_common.c +573 -162
  96. pyscf/lib/dft/grid_common.h +111 -56
  97. pyscf/lib/dft/grid_integrate.c +390 -100
  98. pyscf/lib/dft/libxc_itrf.c +21 -17
  99. pyscf/lib/dft/multigrid.c +39 -10
  100. pyscf/lib/dft/nr_numint.c +346 -0
  101. pyscf/lib/libagf2.dylib +0 -0
  102. pyscf/lib/libao2mo.dylib +0 -0
  103. pyscf/lib/libcc.dylib +0 -0
  104. pyscf/lib/libcgto.dylib +0 -0
  105. pyscf/lib/libcvhf.dylib +0 -0
  106. pyscf/lib/libdft.dylib +0 -0
  107. pyscf/lib/libfci.dylib +0 -0
  108. pyscf/lib/libmcscf.dylib +0 -0
  109. pyscf/lib/libmp.dylib +0 -0
  110. pyscf/lib/libnp_helper.dylib +0 -0
  111. pyscf/lib/libpbc.dylib +0 -0
  112. pyscf/lib/libpdft.dylib +0 -0
  113. pyscf/lib/libri.dylib +0 -0
  114. pyscf/lib/libxc_itrf.dylib +0 -0
  115. pyscf/lib/libxcfun_itrf.dylib +0 -0
  116. pyscf/lib/misc.py +14 -11
  117. pyscf/lib/pdft/CMakeLists.txt +8 -0
  118. pyscf/lib/pdft/nr_numint.c +123 -0
  119. pyscf/mcpdft/__init__.py +113 -0
  120. pyscf/mcpdft/_dms.py +258 -0
  121. pyscf/mcpdft/_libxc.py +135 -0
  122. pyscf/mcpdft/chkfile.py +130 -0
  123. pyscf/mcpdft/cmspdft.py +191 -0
  124. pyscf/mcpdft/lpdft.py +768 -0
  125. pyscf/mcpdft/mcpdft.py +885 -0
  126. pyscf/mcpdft/mspdft.py +685 -0
  127. pyscf/mcpdft/otfnal.py +1207 -0
  128. pyscf/mcpdft/otpd.py +300 -0
  129. pyscf/mcpdft/pdft_eff.py +497 -0
  130. pyscf/mcpdft/pdft_feff.py +415 -0
  131. pyscf/mcpdft/pdft_veff.py +390 -0
  132. pyscf/mcpdft/tfnal_derivs.py +830 -0
  133. pyscf/mcpdft/xmspdft.py +193 -0
  134. pyscf/mcscf/__init__.py +1 -1
  135. pyscf/mcscf/casci.py +5 -5
  136. pyscf/mcscf/df.py +6 -2
  137. pyscf/mcscf/mc1step.py +3 -2
  138. pyscf/mcscf/newton_casscf.py +1 -1
  139. pyscf/mp/__init__.py +1 -2
  140. pyscf/mp/dfgmp2.py +27 -33
  141. pyscf/mp/dfmp2.py +8 -46
  142. pyscf/mp/dfmp2_native.py +0 -20
  143. pyscf/mp/dfump2.py +16 -60
  144. pyscf/mp/dfump2_native.py +0 -21
  145. pyscf/mp/gmp2.py +3 -3
  146. pyscf/mp/mp2.py +44 -21
  147. pyscf/mp/ump2.py +13 -2
  148. pyscf/mrpt/nevpt2.py +11 -0
  149. pyscf/nac/mspdft.py +196 -0
  150. pyscf/pbc/df/aft.py +7 -6
  151. pyscf/pbc/df/aft_jk.py +4 -10
  152. pyscf/pbc/df/df.py +47 -13
  153. pyscf/pbc/df/df_jk.py +38 -10
  154. pyscf/pbc/df/fft.py +8 -13
  155. pyscf/pbc/df/fft_jk.py +5 -5
  156. pyscf/pbc/df/incore.py +1 -1
  157. pyscf/pbc/df/mdf.py +7 -7
  158. pyscf/pbc/df/rsdf.py +15 -10
  159. pyscf/pbc/df/rsdf_builder.py +27 -14
  160. pyscf/pbc/dft/gen_grid.py +3 -0
  161. pyscf/pbc/dft/gks.py +1 -1
  162. pyscf/pbc/dft/kgks.py +1 -1
  163. pyscf/pbc/dft/krks.py +152 -77
  164. pyscf/pbc/dft/krks_ksymm.py +35 -94
  165. pyscf/pbc/dft/krkspu.py +138 -18
  166. pyscf/pbc/dft/krkspu_ksymm.py +31 -1
  167. pyscf/pbc/dft/kroks.py +2 -0
  168. pyscf/pbc/dft/kuks.py +75 -72
  169. pyscf/pbc/dft/kuks_ksymm.py +36 -89
  170. pyscf/pbc/dft/kukspu.py +127 -11
  171. pyscf/pbc/dft/kukspu_ksymm.py +18 -1
  172. pyscf/pbc/dft/multigrid/__init__.py +2 -41
  173. pyscf/pbc/dft/multigrid/_backend_c.py +570 -0
  174. pyscf/pbc/dft/multigrid/multigrid.py +270 -247
  175. pyscf/pbc/dft/multigrid/multigrid_pair.py +371 -750
  176. pyscf/pbc/dft/multigrid/pp.py +81 -115
  177. pyscf/pbc/dft/numint.py +35 -13
  178. pyscf/pbc/dft/rks.py +161 -76
  179. pyscf/pbc/dft/roks.py +2 -18
  180. pyscf/pbc/dft/uks.py +80 -89
  181. pyscf/pbc/grad/krhf.py +15 -6
  182. pyscf/pbc/grad/krks.py +17 -7
  183. pyscf/pbc/grad/kuhf.py +10 -5
  184. pyscf/pbc/grad/kuks.py +13 -9
  185. pyscf/pbc/grad/rhf.py +19 -8
  186. pyscf/pbc/grad/uhf.py +19 -8
  187. pyscf/pbc/gto/cell.py +84 -61
  188. pyscf/pbc/gto/eval_gto.py +19 -15
  189. pyscf/pbc/gto/neighborlist.py +23 -25
  190. pyscf/pbc/gto/pseudo/pp_int.py +3 -2
  191. pyscf/pbc/lib/kpts.py +48 -24
  192. pyscf/pbc/mpitools/mpi.py +0 -1
  193. pyscf/pbc/scf/_response_functions.py +0 -448
  194. pyscf/pbc/scf/ghf.py +1 -0
  195. pyscf/pbc/scf/hf.py +62 -21
  196. pyscf/pbc/scf/kghf.py +1 -0
  197. pyscf/pbc/scf/khf.py +29 -8
  198. pyscf/pbc/scf/krohf.py +1 -0
  199. pyscf/pbc/scf/kuhf.py +19 -1
  200. pyscf/pbc/scf/rohf.py +1 -0
  201. pyscf/pbc/scf/uhf.py +22 -0
  202. pyscf/pbc/tdscf/krhf.py +9 -9
  203. pyscf/pbc/tdscf/kuhf.py +9 -7
  204. pyscf/pbc/tdscf/rhf.py +4 -4
  205. pyscf/pbc/tdscf/rks.py +4 -4
  206. pyscf/pbc/tdscf/uhf.py +6 -2
  207. pyscf/pbc/tdscf/uks.py +4 -4
  208. pyscf/pbc/tools/k2gamma.py +8 -14
  209. pyscf/pbc/tools/make_test_cell.py +4 -2
  210. pyscf/pbc/tools/pbc.py +99 -30
  211. pyscf/pbc/x2c/sfx2c1e.py +5 -0
  212. pyscf/scf/_response_functions.py +33 -32
  213. pyscf/scf/addons.py +22 -3
  214. pyscf/scf/dhf.py +50 -25
  215. pyscf/scf/hf.py +30 -1
  216. pyscf/scf/rohf.py +1 -3
  217. pyscf/sgx/sgx.py +16 -8
  218. pyscf/solvent/__init__.py +63 -47
  219. pyscf/solvent/_attach_solvent.py +169 -41
  220. pyscf/solvent/cosmors.py +177 -165
  221. pyscf/solvent/ddcosmo.py +15 -18
  222. pyscf/solvent/ddpcm.py +1 -8
  223. pyscf/solvent/grad/ddcosmo_grad.py +1 -77
  224. pyscf/solvent/{_ddcosmo_tdscf_grad.py → grad/ddcosmo_tdscf_grad.py} +35 -56
  225. pyscf/solvent/grad/pcm.py +112 -37
  226. pyscf/solvent/grad/smd.py +1 -61
  227. pyscf/solvent/hessian/pcm.py +982 -121
  228. pyscf/solvent/hessian/smd.py +0 -111
  229. pyscf/solvent/pcm.py +30 -28
  230. pyscf/solvent/pol_embed.py +54 -9
  231. pyscf/solvent/smd.py +32 -16
  232. pyscf/soscf/ciah.py +14 -7
  233. pyscf/soscf/newton_ah.py +19 -3
  234. pyscf/symm/geom.py +69 -8
  235. pyscf/symm/param.py +1 -1
  236. pyscf/tdscf/__init__.py +13 -13
  237. pyscf/tdscf/_lr_eig.py +14 -7
  238. pyscf/tdscf/dhf.py +23 -16
  239. pyscf/tdscf/ghf.py +72 -39
  240. pyscf/tdscf/gks.py +15 -13
  241. pyscf/tdscf/rhf.py +141 -55
  242. pyscf/tdscf/rks.py +19 -17
  243. pyscf/tdscf/uhf.py +125 -53
  244. pyscf/tdscf/uks.py +20 -18
  245. pyscf/tools/fcidump.py +36 -9
  246. pyscf/tools/finite_diff.py +175 -0
  247. pyscf/x2c/_response_functions.py +3 -2
  248. pyscf/x2c/tdscf.py +10 -18
  249. pyscf/x2c/x2c.py +101 -34
  250. {pyscf-2.8.0.dist-info → pyscf-2.10.0.dist-info}/METADATA +5 -4
  251. {pyscf-2.8.0.dist-info → pyscf-2.10.0.dist-info}/RECORD +255 -219
  252. {pyscf-2.8.0.dist-info → pyscf-2.10.0.dist-info}/WHEEL +2 -1
  253. {pyscf-2.8.0.dist-info → pyscf-2.10.0.dist-info/licenses}/NOTICE +6 -2
  254. pyscf/lib/dft/utils.c +0 -71
  255. pyscf/lib/dft/utils.h +0 -27
  256. {pyscf-2.8.0.dist-info → pyscf-2.10.0.dist-info/licenses}/LICENSE +0 -0
  257. {pyscf-2.8.0.dist-info → pyscf-2.10.0.dist-info}/top_level.txt +0 -0
pyscf/__init__.py CHANGED
@@ -35,7 +35,7 @@ to try out the package::
35
35
 
36
36
  '''
37
37
 
38
- __version__ = '2.8.0'
38
+ __version__ = '2.10.0'
39
39
 
40
40
  import os
41
41
  import sys
pyscf/adc/radc.py CHANGED
@@ -15,7 +15,7 @@
15
15
  # Author: Abdelrahman Ahmed <>
16
16
  # Samragni Banerjee <samragnibanerjee4@gmail.com>
17
17
  # James Serna <jamcar456@gmail.com>
18
- # Terrence Stahl <>
18
+ # Terrence Stahl <terrencestahl1@gmail.com>
19
19
  # Alexander Sokolov <alexander.y.sokolov@gmail.com>
20
20
  #
21
21
 
@@ -23,15 +23,12 @@
23
23
  Restricted algebraic diagrammatic construction
24
24
  '''
25
25
  import numpy as np
26
- import pyscf.ao2mo as ao2mo
27
26
  from pyscf import lib
28
27
  from pyscf.lib import logger
29
28
  from pyscf.adc import radc_ao2mo
30
- from pyscf.adc import dfadc
31
29
  from pyscf.adc import radc_amplitudes
32
30
  from pyscf import __config__
33
31
  from pyscf import df
34
- from pyscf import symm
35
32
 
36
33
 
37
34
  # Excited-state kernel
@@ -50,6 +47,20 @@ def kernel(adc, nroots=1, guess=None, eris=None, verbose=None):
50
47
  if eris is None:
51
48
  eris = adc.transform_integrals()
52
49
 
50
+ if adc.approx_trans_moments:
51
+ if adc.method in ("adc(2)", "adc(2)-x"):
52
+ logger.warn(
53
+ adc,
54
+ "Approximations for transition moments are requested...\n"
55
+ + adc.method
56
+ + " transition properties will neglect second-order amplitudes...")
57
+ else:
58
+ logger.warn(
59
+ adc,
60
+ "Approximations for transition moments are requested...\n"
61
+ + adc.method
62
+ + " transition properties will neglect third-order amplitudes...")
63
+
53
64
  imds = adc.get_imds(eris)
54
65
  matvec, diag = adc.gen_matvec(imds, eris)
55
66
 
@@ -57,24 +68,34 @@ def kernel(adc, nroots=1, guess=None, eris=None, verbose=None):
57
68
 
58
69
  conv, adc.E, U = lib.linalg_helper.davidson_nosym1(
59
70
  lambda xs : [matvec(x) for x in xs],
60
- guess, diag, nroots=nroots, verbose=log, tol=adc.conv_tol,
71
+ guess, diag, nroots=nroots, verbose=log, tol=adc.conv_tol, max_memory=adc.max_memory,
61
72
  max_cycle=adc.max_cycle, max_space=adc.max_space, tol_residual=adc.tol_residual)
62
73
 
63
74
  adc.U = np.array(U).T.copy()
64
75
 
65
- if adc.compute_properties:
76
+ if adc.compute_properties and adc.method_type != "ee":
66
77
  adc.P,adc.X = adc.get_properties(nroots)
78
+ else:
79
+ adc.P = None
80
+ adc.X = None
81
+
67
82
  nfalse = np.shape(conv)[0] - np.sum(conv)
68
83
 
84
+ spin_mult = None
85
+ if adc.method_type in ("ip", "ea"):
86
+ spin_mult = "doublet"
87
+ else:
88
+ spin_mult = "singlet"
89
+
69
90
  header = ("\n*************************************************************"
70
- "\n ADC calculation summary"
91
+ "\n ADC calculation summary (" + spin_mult + " states only)"
71
92
  "\n*************************************************************")
72
93
  logger.info(adc, header)
73
94
 
74
95
  for n in range(nroots):
75
96
  print_string = ('%s root %d | Energy (Eh) = %14.10f | Energy (eV) = %12.8f ' %
76
97
  (adc.method, n, adc.E[n], adc.E[n]*27.2114))
77
- if adc.compute_properties:
98
+ if adc.compute_properties and adc.method_type != "ee":
78
99
  print_string += ("| Spec. factor = %10.8f " % adc.P[n])
79
100
  print_string += ("| conv = %s" % conv[n])
80
101
  logger.info(adc, print_string)
@@ -198,7 +219,6 @@ class RADC(lib.StreamObject):
198
219
  }
199
220
 
200
221
  def __init__(self, mf, frozen=0, mo_coeff=None, mo_occ=None):
201
- from pyscf import gto
202
222
 
203
223
  if 'dft' in str(mf.__module__):
204
224
  raise NotImplementedError('DFT reference for UADC')
@@ -216,8 +236,8 @@ class RADC(lib.StreamObject):
216
236
 
217
237
  self.max_space = getattr(__config__, 'adc_radc_RADC_max_space', 12)
218
238
  self.max_cycle = getattr(__config__, 'adc_radc_RADC_max_cycle', 50)
219
- self.conv_tol = getattr(__config__, 'adc_radc_RADC_conv_tol', 1e-12)
220
- self.tol_residual = getattr(__config__, 'adc_radc_RADC_tol_residual', 1e-6)
239
+ self.conv_tol = getattr(__config__, 'adc_radc_RADC_conv_tol', 1e-8)
240
+ self.tol_residual = getattr(__config__, 'adc_radc_RADC_tol_residual', 1e-5)
221
241
  self.scf_energy = mf.e_tot
222
242
 
223
243
  self.frozen = frozen
@@ -369,6 +389,9 @@ class RADC(lib.StreamObject):
369
389
  if (self.method_type == "ea"):
370
390
  e_exc, v_exc, spec_fac, x, adc_es = self.ea_adc(nroots=nroots, guess=guess, eris=eris)
371
391
 
392
+ elif (self.method_type == "ee"):
393
+ e_exc, v_exc, spec_fac, x, adc_es = self.ee_adc(nroots=nroots, guess=guess, eris=eris)
394
+
372
395
  elif(self.method_type == "ip"):
373
396
  if not isinstance(self.ncvs, type(None)) and self.ncvs > 0:
374
397
  e_exc, v_exc, spec_fac, x, adc_es = self.ip_cvs_adc(
@@ -393,6 +416,12 @@ class RADC(lib.StreamObject):
393
416
  e_exc, v_exc, spec_fac, x = adc_es.kernel(nroots, guess, eris)
394
417
  return e_exc, v_exc, spec_fac, x, adc_es
395
418
 
419
+ def ee_adc(self, nroots=1, guess=None, eris=None):
420
+ from pyscf.adc import radc_ee
421
+ adc_es = radc_ee.RADCEE(self)
422
+ e_exc, v_exc, spec_fac, x = adc_es.kernel(nroots, guess, eris)
423
+ return e_exc, v_exc, spec_fac, x, adc_es
424
+
396
425
  def ip_adc(self, nroots=1, guess=None, eris=None):
397
426
  from pyscf.adc import radc_ip
398
427
  adc_es = radc_ip.RADCIP(self)
@@ -23,14 +23,10 @@
23
23
  Restricted algebraic diagrammatic construction
24
24
  '''
25
25
  import numpy as np
26
- import pyscf.ao2mo as ao2mo
27
26
  from pyscf import lib
28
27
  from pyscf.lib import logger
29
28
  from pyscf.adc import radc_ao2mo
30
29
  from pyscf.adc import dfadc
31
- from pyscf import __config__
32
- from pyscf import df
33
- from pyscf import symm
34
30
  import h5py
35
31
  import tempfile
36
32
 
@@ -91,18 +87,15 @@ def compute_amplitudes(myadc, eris):
91
87
 
92
88
  if isinstance(eris.ovvv, type(None)):
93
89
  chnk_size = radc_ao2mo.calculate_chunk_size(myadc)
94
- a = 0
95
- for p in range(0,nocc,chnk_size):
90
+ for a,b in lib.prange(0,nocc,chnk_size):
96
91
  eris_ovvv = dfadc.get_ovvv_df(
97
- myadc, eris.Lov, eris.Lvv, p, chnk_size).reshape(-1,nvir,nvir,nvir)
98
- k = eris_ovvv.shape[0]
99
- t1_2 += 1.5*lib.einsum('kdac,ikcd->ia',eris_ovvv,t2_1[:,a:a+k],optimize=True)
100
- t1_2 -= 0.5*lib.einsum('kdac,kicd->ia',eris_ovvv,t2_1[a:a+k,:],optimize=True)
101
- t1_2 -= 0.5*lib.einsum('kcad,ikcd->ia',eris_ovvv,t2_1[:,a:a+k],optimize=True)
102
- t1_2 += 0.5*lib.einsum('kcad,kicd->ia',eris_ovvv,t2_1[a:a+k,:],optimize=True)
92
+ myadc, eris.Lov, eris.Lvv, a, chnk_size).reshape(-1,nvir,nvir,nvir)
93
+ t1_2 += 1.5*lib.einsum('kdac,ikcd->ia',eris_ovvv,t2_1[:,a:b],optimize=True)
94
+ t1_2 -= 0.5*lib.einsum('kdac,kicd->ia',eris_ovvv,t2_1[a:b,:],optimize=True)
95
+ t1_2 -= 0.5*lib.einsum('kcad,ikcd->ia',eris_ovvv,t2_1[:,a:b],optimize=True)
96
+ t1_2 += 0.5*lib.einsum('kcad,kicd->ia',eris_ovvv,t2_1[a:b,:],optimize=True)
103
97
 
104
98
  del eris_ovvv
105
- a += k
106
99
  else :
107
100
  eris_ovvv = radc_ao2mo.unpack_eri_1(eris.ovvv, nvir)
108
101
  t1_2 += 1.5*lib.einsum('kdac,ikcd->ia',eris_ovvv,t2_1,optimize=True)
@@ -135,6 +128,7 @@ def compute_amplitudes(myadc, eris):
135
128
  eris_vvvv = eris.vvvv
136
129
  temp = t2_1.reshape(nocc*nocc,nvir*nvir)
137
130
  t2_1_vvvv = np.dot(temp,eris_vvvv.T).reshape(nocc,nocc,nvir,nvir)
131
+ del temp
138
132
  elif isinstance(eris.vvvv, list):
139
133
  t2_1_vvvv = contract_ladder(myadc,t2_1[:],eris.vvvv)
140
134
  else:
@@ -201,146 +195,143 @@ def compute_amplitudes(myadc, eris):
201
195
 
202
196
  if isinstance(eris.ovvv, type(None)):
203
197
  chnk_size = radc_ao2mo.calculate_chunk_size(myadc)
204
- a = 0
205
- for p in range(0,nocc,chnk_size):
198
+ for a,b in lib.prange(0,nocc,chnk_size):
206
199
  eris_ovvv = dfadc.get_ovvv_df(
207
- myadc, eris.Lov, eris.Lvv, p, chnk_size).reshape(-1,nvir,nvir,nvir)
208
- k = eris_ovvv.shape[0]
200
+ myadc, eris.Lov, eris.Lvv, a, chnk_size).reshape(-1,nvir,nvir,nvir)
209
201
 
210
- t1_3 += 0.5*lib.einsum('ilde,lead->ia', t2_2[:,a:a+k],eris_ovvv,optimize=True)
211
- t1_3 -= 0.5*lib.einsum('lide,lead->ia', t2_2[a:a+k],eris_ovvv,optimize=True)
202
+ t1_3 += 0.5*lib.einsum('ilde,lead->ia', t2_2[:,a:b],eris_ovvv,optimize=True)
203
+ t1_3 -= 0.5*lib.einsum('lide,lead->ia', t2_2[a:b],eris_ovvv,optimize=True)
212
204
 
213
- t1_3 -= 0.5*lib.einsum('ilde,ldae->ia', t2_2[:,a:a+k],eris_ovvv,optimize=True)
214
- t1_3 += 0.5*lib.einsum('lide,ldae->ia', t2_2[a:a+k],eris_ovvv,optimize=True)
205
+ t1_3 -= 0.5*lib.einsum('ilde,ldae->ia', t2_2[:,a:b],eris_ovvv,optimize=True)
206
+ t1_3 += 0.5*lib.einsum('lide,ldae->ia', t2_2[a:b],eris_ovvv,optimize=True)
215
207
 
216
208
  t1_3 -= lib.einsum('ildf,mefa,lmde->ia',
217
- t2_1[:], eris_ovvv, t2_1[:,a:a+k] ,optimize=True)
209
+ t2_1[:], eris_ovvv, t2_1[:,a:b] ,optimize=True)
218
210
  t1_3 += lib.einsum('ildf,mefa,mlde->ia',
219
- t2_1[:], eris_ovvv, t2_1[a:a+k] ,optimize=True)
211
+ t2_1[:], eris_ovvv, t2_1[a:b] ,optimize=True)
220
212
  t1_3 += lib.einsum('lidf,mefa,lmde->ia',
221
- t2_1[:], eris_ovvv, t2_1[:,a:a+k] ,optimize=True)
213
+ t2_1[:], eris_ovvv, t2_1[:,a:b] ,optimize=True)
222
214
  t1_3 -= lib.einsum('lidf,mefa,mlde->ia',
223
- t2_1[:], eris_ovvv, t2_1[a:a+k] ,optimize=True)
215
+ t2_1[:], eris_ovvv, t2_1[a:b] ,optimize=True)
224
216
 
225
217
  t1_3 += lib.einsum('ildf,mafe,lmde->ia',
226
- t2_1[:], eris_ovvv, t2_1[:,a:a+k] ,optimize=True)
218
+ t2_1[:], eris_ovvv, t2_1[:,a:b] ,optimize=True)
227
219
  t1_3 -= lib.einsum('ildf,mafe,mlde->ia',
228
- t2_1[:], eris_ovvv, t2_1[a:a+k] ,optimize=True)
220
+ t2_1[:], eris_ovvv, t2_1[a:b] ,optimize=True)
229
221
  t1_3 -= lib.einsum('lidf,mafe,lmde->ia',
230
- t2_1[:], eris_ovvv, t2_1[:,a:a+k] ,optimize=True)
222
+ t2_1[:], eris_ovvv, t2_1[:,a:b] ,optimize=True)
231
223
  t1_3 += lib.einsum('lidf,mafe,mlde->ia',
232
- t2_1[:], eris_ovvv, t2_1[a:a+k] ,optimize=True)
224
+ t2_1[:], eris_ovvv, t2_1[a:b] ,optimize=True)
233
225
 
234
226
  t1_3 += lib.einsum('ilfd,mefa,mled->ia',
235
- t2_1[:],eris_ovvv, t2_1[a:a+k],optimize=True)
227
+ t2_1[:],eris_ovvv, t2_1[a:b],optimize=True)
236
228
  t1_3 -= lib.einsum('ilfd,mafe,mled->ia',
237
- t2_1[:],eris_ovvv, t2_1[a:a+k],optimize=True)
229
+ t2_1[:],eris_ovvv, t2_1[a:b],optimize=True)
238
230
 
239
231
  t1_3 += 0.5*lib.einsum('ilaf,mefd,lmde->ia',
240
- t2_1[:],eris_ovvv,t2_1[:,a:a+k],optimize=True)
232
+ t2_1[:],eris_ovvv,t2_1[:,a:b],optimize=True)
241
233
  t1_3 -= 0.5*lib.einsum('ilaf,mefd,mlde->ia',
242
- t2_1[:],eris_ovvv,t2_1[a:a+k],optimize=True)
234
+ t2_1[:],eris_ovvv,t2_1[a:b],optimize=True)
243
235
  t1_3 -= 0.5*lib.einsum('liaf,mefd,lmde->ia',
244
- t2_1[:],eris_ovvv,t2_1[:,a:a+k],optimize=True)
236
+ t2_1[:],eris_ovvv,t2_1[:,a:b],optimize=True)
245
237
  t1_3 += 0.5*lib.einsum('liaf,mefd,mlde->ia',
246
- t2_1[:],eris_ovvv,t2_1[a:a+k],optimize=True)
238
+ t2_1[:],eris_ovvv,t2_1[a:b],optimize=True)
247
239
 
248
240
  t1_3 -= 0.5*lib.einsum('ilaf,mdfe,lmde->ia',
249
- t2_1[:],eris_ovvv,t2_1[:,a:a+k],optimize=True)
241
+ t2_1[:],eris_ovvv,t2_1[:,a:b],optimize=True)
250
242
  t1_3 += 0.5*lib.einsum('ilaf,mdfe,mlde->ia',
251
- t2_1[:],eris_ovvv,t2_1[a:a+k],optimize=True)
243
+ t2_1[:],eris_ovvv,t2_1[a:b],optimize=True)
252
244
  t1_3 += 0.5*lib.einsum('liaf,mdfe,lmde->ia',
253
- t2_1[:],eris_ovvv,t2_1[:,a:a+k],optimize=True)
245
+ t2_1[:],eris_ovvv,t2_1[:,a:b],optimize=True)
254
246
  t1_3 -= 0.5*lib.einsum('liaf,mdfe,mlde->ia',
255
- t2_1[:],eris_ovvv,t2_1[a:a+k],optimize=True)
247
+ t2_1[:],eris_ovvv,t2_1[a:b],optimize=True)
256
248
 
257
- t1_3[a:a+k] += 0.5*lib.einsum('lmdf,iaef,lmde->ia',
249
+ t1_3[a:b] += 0.5*lib.einsum('lmdf,iaef,lmde->ia',
258
250
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
259
- t1_3[a:a+k] -= 0.5*lib.einsum('lmdf,iaef,mlde->ia',
251
+ t1_3[a:b] -= 0.5*lib.einsum('lmdf,iaef,mlde->ia',
260
252
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
261
- t1_3[a:a+k] -= 0.5*lib.einsum('mldf,iaef,lmde->ia',
253
+ t1_3[a:b] -= 0.5*lib.einsum('mldf,iaef,lmde->ia',
262
254
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
263
- t1_3[a:a+k] += 0.5*lib.einsum('mldf,iaef,mlde->ia',
255
+ t1_3[a:b] += 0.5*lib.einsum('mldf,iaef,mlde->ia',
264
256
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
265
257
 
266
- t1_3[a:a+k] -= 0.5*lib.einsum('lmdf,ifea,lmde->ia',
258
+ t1_3[a:b] -= 0.5*lib.einsum('lmdf,ifea,lmde->ia',
267
259
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
268
- t1_3[a:a+k] += 0.5*lib.einsum('lmdf,ifea,mlde->ia',
260
+ t1_3[a:b] += 0.5*lib.einsum('lmdf,ifea,mlde->ia',
269
261
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
270
- t1_3[a:a+k] += 0.5*lib.einsum('mldf,ifea,lmde->ia',
262
+ t1_3[a:b] += 0.5*lib.einsum('mldf,ifea,lmde->ia',
271
263
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
272
- t1_3[a:a+k] -= 0.5*lib.einsum('mldf,ifea,mlde->ia',
264
+ t1_3[a:b] -= 0.5*lib.einsum('mldf,ifea,mlde->ia',
273
265
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
274
266
 
275
- t1_3[a:a+k] += lib.einsum('mlfd,iaef,mled->ia',t2_1[:],
267
+ t1_3[a:b] += lib.einsum('mlfd,iaef,mled->ia',t2_1[:],
276
268
  eris_ovvv,t2_1[:],optimize=True)
277
- t1_3[a:a+k] -= lib.einsum('mlfd,ifea,mled->ia',t2_1[:],
269
+ t1_3[a:b] -= lib.einsum('mlfd,ifea,mled->ia',t2_1[:],
278
270
  eris_ovvv,t2_1[:],optimize=True)
279
271
 
280
- t1_3[a:a+k] -= 0.25*lib.einsum('lmef,iedf,lmad->ia',
272
+ t1_3[a:b] -= 0.25*lib.einsum('lmef,iedf,lmad->ia',
281
273
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
282
- t1_3[a:a+k] += 0.25*lib.einsum('lmef,iedf,mlad->ia',
274
+ t1_3[a:b] += 0.25*lib.einsum('lmef,iedf,mlad->ia',
283
275
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
284
- t1_3[a:a+k] += 0.25*lib.einsum('mlef,iedf,lmad->ia',
276
+ t1_3[a:b] += 0.25*lib.einsum('mlef,iedf,lmad->ia',
285
277
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
286
- t1_3[a:a+k] -= 0.25*lib.einsum('mlef,iedf,mlad->ia',
278
+ t1_3[a:b] -= 0.25*lib.einsum('mlef,iedf,mlad->ia',
287
279
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
288
280
 
289
- t1_3[a:a+k] += 0.25*lib.einsum('lmef,ifde,lmad->ia',
281
+ t1_3[a:b] += 0.25*lib.einsum('lmef,ifde,lmad->ia',
290
282
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
291
- t1_3[a:a+k] -= 0.25*lib.einsum('lmef,ifde,mlad->ia',
283
+ t1_3[a:b] -= 0.25*lib.einsum('lmef,ifde,mlad->ia',
292
284
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
293
- t1_3[a:a+k] -= 0.25*lib.einsum('mlef,ifde,lmad->ia',
285
+ t1_3[a:b] -= 0.25*lib.einsum('mlef,ifde,lmad->ia',
294
286
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
295
- t1_3[a:a+k] += 0.25*lib.einsum('mlef,ifde,mlad->ia',
287
+ t1_3[a:b] += 0.25*lib.einsum('mlef,ifde,mlad->ia',
296
288
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
297
289
 
298
290
  t1_3 += 0.5*lib.einsum('ilaf,mefd,lmde->ia',
299
- t2_1[:],eris_ovvv,t2_1[:,a:a+k],optimize=True)
291
+ t2_1[:],eris_ovvv,t2_1[:,a:b],optimize=True)
300
292
  t1_3 -= 0.5*lib.einsum('ilaf,mefd,mlde->ia',
301
- t2_1[:],eris_ovvv,t2_1[a:a+k],optimize=True)
293
+ t2_1[:],eris_ovvv,t2_1[a:b],optimize=True)
302
294
 
303
295
  t1_3 -= 0.5*lib.einsum('ilaf,mdfe,lmde->ia',
304
- t2_1[:],eris_ovvv,t2_1[:,a:a+k],optimize=True)
296
+ t2_1[:],eris_ovvv,t2_1[:,a:b],optimize=True)
305
297
  t1_3 += 0.5*lib.einsum('ilaf,mdfe,mlde->ia',
306
- t2_1[:],eris_ovvv,t2_1[a:a+k],optimize=True)
298
+ t2_1[:],eris_ovvv,t2_1[a:b],optimize=True)
307
299
 
308
- t1_3 -= lib.einsum('ildf,mafe,mlde->ia',t2_1[:],eris_ovvv,t2_1[a:a+k],optimize=True)
309
- t1_3 += lib.einsum('ilaf,mefd,mled->ia',t2_1[:],eris_ovvv,t2_1[a:a+k],optimize=True)
300
+ t1_3 -= lib.einsum('ildf,mafe,mlde->ia',t2_1[:],eris_ovvv,t2_1[a:b],optimize=True)
301
+ t1_3 += lib.einsum('ilaf,mefd,mled->ia',t2_1[:],eris_ovvv,t2_1[a:b],optimize=True)
310
302
 
311
- t1_3[a:a+k] += 0.5*lib.einsum('lmdf,iaef,lmde->ia',
303
+ t1_3[a:b] += 0.5*lib.einsum('lmdf,iaef,lmde->ia',
312
304
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
313
- t1_3[a:a+k] -= 0.5*lib.einsum('lmdf,iaef,mlde->ia',
305
+ t1_3[a:b] -= 0.5*lib.einsum('lmdf,iaef,mlde->ia',
314
306
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
315
- t1_3[a:a+k] -= 0.5*lib.einsum('mldf,iaef,lmde->ia',
307
+ t1_3[a:b] -= 0.5*lib.einsum('mldf,iaef,lmde->ia',
316
308
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
317
- t1_3[a:a+k] += 0.5*lib.einsum('mldf,iaef,mlde->ia',
309
+ t1_3[a:b] += 0.5*lib.einsum('mldf,iaef,mlde->ia',
318
310
  t2_1[:],eris_ovvv,t2_1[:],optimize=True)
319
311
 
320
- t1_3[a:a+k] += lib.einsum('lmdf,iaef,lmde->ia',t2_1[:],
312
+ t1_3[a:b] += lib.einsum('lmdf,iaef,lmde->ia',t2_1[:],
321
313
  eris_ovvv,t2_1[:],optimize=True)
322
- t1_3[a:a+k] -= lib.einsum('lmef,iedf,lmad->ia',t2_1[:],
314
+ t1_3[a:b] -= lib.einsum('lmef,iedf,lmad->ia',t2_1[:],
323
315
  eris_ovvv,t2_1[:],optimize=True)
324
316
 
325
- t1_3 += lib.einsum('ilde,lead->ia',t2_2[:,a:a+k],eris_ovvv,optimize=True)
317
+ t1_3 += lib.einsum('ilde,lead->ia',t2_2[:,a:b],eris_ovvv,optimize=True)
326
318
 
327
319
  t1_3 -= lib.einsum('ildf,mefa,lmde->ia',
328
- t2_1[:],eris_ovvv, t2_1[:,a:a+k],optimize=True)
320
+ t2_1[:],eris_ovvv, t2_1[:,a:b],optimize=True)
329
321
  t1_3 += lib.einsum('lidf,mefa,lmde->ia',
330
- t2_1[:],eris_ovvv, t2_1[:,a:a+k],optimize=True)
322
+ t2_1[:],eris_ovvv, t2_1[:,a:b],optimize=True)
331
323
 
332
324
  t1_3 += lib.einsum('ilfd,mefa,lmde->ia',
333
- t2_1[:],eris_ovvv,t2_1[:,a:a+k] ,optimize=True)
325
+ t2_1[:],eris_ovvv,t2_1[:,a:b] ,optimize=True)
334
326
  t1_3 -= lib.einsum('ilfd,mefa,mlde->ia',
335
- t2_1[:],eris_ovvv,t2_1[a:a+k] ,optimize=True)
327
+ t2_1[:],eris_ovvv,t2_1[a:b] ,optimize=True)
336
328
 
337
329
  t1_3 += lib.einsum('ilaf,mefd,lmde->ia',
338
- t2_1[:],eris_ovvv,t2_1[:,a:a+k],optimize=True)
330
+ t2_1[:],eris_ovvv,t2_1[:,a:b],optimize=True)
339
331
  t1_3 -= lib.einsum('liaf,mefd,lmde->ia',
340
- t2_1[:],eris_ovvv,t2_1[:,a:a+k],optimize=True)
332
+ t2_1[:],eris_ovvv,t2_1[:,a:b],optimize=True)
341
333
 
342
334
  del eris_ovvv
343
- a += k
344
335
 
345
336
  else :
346
337
  eris_ovvv = radc_ao2mo.unpack_eri_1(eris.ovvv, nvir)
@@ -553,13 +544,11 @@ def contract_ladder(myadc,t_amp,vvvv):
553
544
  t[a:a+k] = np.dot(dataset,t_amp).reshape(-1,nvir,nocc*nocc)
554
545
  a += k
555
546
  elif getattr(myadc, 'with_df', None):
556
- for p in range(0,nvir,chnk_size):
557
- vvvv_p = dfadc.get_vvvv_df(myadc, vvvv, p, chnk_size)
558
- k = vvvv_p.shape[0]
547
+ for a,b in lib.prange(0,nvir,chnk_size):
548
+ vvvv_p = dfadc.get_vvvv_df(myadc, vvvv, a, chnk_size)
559
549
  vvvv_p = vvvv_p.reshape(-1,nvir*nvir)
560
- t[a:a+k] = np.dot(vvvv_p,t_amp).reshape(-1,nvir,nocc*nocc)
550
+ t[a:b] = np.dot(vvvv_p,t_amp).reshape(-1,nvir,nocc*nocc)
561
551
  del vvvv_p
562
- a += k
563
552
  else:
564
553
  raise Exception("Unknown vvvv type")
565
554
 
pyscf/adc/radc_ao2mo.py CHANGED
@@ -22,8 +22,6 @@ import numpy as np
22
22
  import pyscf.ao2mo as ao2mo
23
23
  from pyscf import lib
24
24
  from pyscf.lib import logger
25
- import h5py
26
- import tempfile
27
25
 
28
26
  ### Incore integral transformation for integrals in Chemists' notation###
29
27
  def transform_integrals_incore(myadc):
@@ -44,8 +42,11 @@ def transform_integrals_incore(myadc):
44
42
  eris.oovv = ao2mo.general(myadc._scf._eri, (occ, occ, vir, vir), compact=False).reshape(nocc, nocc, nvir, nvir).copy() # noqa: E501
45
43
  eris.ovvo = ao2mo.general(myadc._scf._eri, (occ, vir, vir, occ), compact=False).reshape(nocc, nvir, nvir, nocc).copy() # noqa: E501
46
44
  eris.ovvv = ao2mo.general(myadc._scf._eri, (occ, vir, vir, vir), compact=True).reshape(nocc, nvir, -1).copy() # noqa: E501
45
+ eris.vvvv = None
47
46
 
48
- if (myadc.method == "adc(2)-x" and myadc.approx_trans_moments is False) or (myadc.method == "adc(3)"):
47
+ if ((myadc.method == "adc(2)-x" and myadc.approx_trans_moments is False)
48
+ or (myadc.method == "adc(2)-x" and myadc.method_type == "ee")
49
+ or (myadc.method == "adc(3)")):
49
50
  eris.vvvv = ao2mo.general(myadc._scf._eri, (vir, vir, vir, vir),
50
51
  compact=False).reshape(nvir, nvir, nvir, nvir)
51
52
  eris.vvvv = np.ascontiguousarray(eris.vvvv.transpose(0,2,1,3))
@@ -85,6 +86,8 @@ def transform_integrals_outcore(myadc):
85
86
  'ovvo', (nocc,nvir,nvir,nocc), 'f8', chunks=(nocc,1,nvir,nocc))
86
87
  eris.ovvv = eris.feri1.create_dataset('ovvv', (nocc,nvir,nvpair), 'f8')
87
88
 
89
+ eris.vvvv = None
90
+
88
91
  def save_occ_frac(p0, p1, eri):
89
92
  eri = eri.reshape(p1-p0,nocc,nmo,nmo)
90
93
  eris.oooo[p0:p1] = eri[:,:,:nocc,:nocc]
@@ -117,6 +120,7 @@ def transform_integrals_outcore(myadc):
117
120
  fload = ao2mo.outcore._load_from_h5g
118
121
  buf = np.empty((blksize*nocc,nao_pair))
119
122
  buf_prefetch = np.empty_like(buf)
123
+
120
124
  def load(buf_prefetch, p0, rowmax):
121
125
  if p0 < rowmax:
122
126
  p1 = min(rowmax, p0+blksize)
@@ -151,7 +155,10 @@ def transform_integrals_outcore(myadc):
151
155
 
152
156
  ############### forming eris_vvvv ########################################
153
157
 
154
- if (myadc.method == "adc(2)-x" and myadc.approx_trans_moments is False) or (myadc.method == "adc(3)"):
158
+ if ((myadc.method == "adc(2)-x" and myadc.approx_trans_moments is False)
159
+ or (myadc.method == "adc(2)-x" and myadc.method_type == "ee")
160
+ or (myadc.method == "adc(3)")):
161
+
155
162
  eris.vvvv = []
156
163
 
157
164
  cput3 = logger.process_clock(), logger.perf_counter()