14
14
# limitations under the License.
15
15
16
16
'''
17
- Interface to geometry optimizer pyberny https://github.com/azag0 /pyberny
17
+ Interface to geometry optimizer pyberny https://github.com/jhrmnn /pyberny
18
18
'''
19
19
20
20
from __future__ import absolute_import
21
+ import pkg_resources
21
22
try :
22
- from berny import Berny , geomlib , Logger , coords
23
- except ImportError :
24
- msg = ('Geometry optimizer pyberny not found.\n pyberny library '
25
- 'can be found on github https://github.com/azag0/pyberny.\n '
26
- 'You can install pyberny with "pip install pyberny"' )
27
- raise ImportError (msg )
23
+ dist = pkg_resources .get_distribution ('pyberny' )
24
+ except pkg_resources .DistributionNotFound :
25
+ dist = None
26
+ if dist is None or [int (x ) for x in dist .version .split ('.' )] < [0 , 6 , 2 ]:
27
+ msg = ('Geometry optimizer Pyberny not found or outdated. Install or update '
28
+ 'with:\n \n \t pip install -U pyberny' )
29
+ raise RuntimeError (msg )
28
30
29
31
import time
30
32
import numpy
33
+ import logging
31
34
from pyscf import lib
32
35
from pyscf .geomopt .addons import (as_pyscf_method , dump_mol_geometry ,
33
36
symmetrize )
34
37
from pyscf import __config__
35
38
from pyscf .grad .rhf import GradientsBasics
36
39
40
+ from berny import Berny , geomlib , coords
41
+
37
42
# Overwrite pyberny's atomic unit
38
43
coords .angstrom = 1. / lib .param .BOHR
39
44
@@ -74,11 +79,14 @@ def _geom_to_atom(mol, geom, include_ghost):
74
79
def to_berny_log (pyscf_log ):
75
80
'''Adapter to allow pyberny to use pyscf.logger
76
81
'''
77
- class BernyLogger (Logger ):
78
- def __call__ (self , msg , level = 0 ):
79
- if level >= - self .verbosity :
80
- pyscf_log .info ('%d %s' , self .n , msg )
81
- return BernyLogger ()
82
+ class PyscfHandler (logging .Handler ):
83
+ def emit (self , record ):
84
+ pyscf_log .info (record .getMessage ())
85
+
86
+ log = logging .getLogger ('{}.{}' .format (__name__ , id (pyscf_log )))
87
+ log .addHandler (PyscfHandler ())
88
+ log .setLevel ('INFO' )
89
+ return log
82
90
83
91
84
92
def kernel (method , assert_convergence = ASSERT_CONV ,
@@ -90,10 +98,10 @@ def kernel(method, assert_convergence=ASSERT_CONV,
90
98
91
99
.. code-block:: python
92
100
conv_params = { # They are default settings
93
- 'gradientmax': 0.45e-3, # Eh/Angstrom
94
- 'gradientrms': 0.15e-3, # Eh/Angstrom
95
- 'stepmax': 1.8e-3, # Angstrom
96
- 'steprms': 1.2e-3, # Angstrom
101
+ 'gradientmax': 0.45e-3, # Eh/[Bohr|rad]
102
+ 'gradientrms': 0.15e-3, # Eh/[Bohr|rad]
103
+ 'stepmax': 1.8e-3, # [Bohr|rad]
104
+ 'steprms': 1.2e-3, # [Bohr|rad]
97
105
}
98
106
from pyscf.geomopt import berny_solver
99
107
opt = berny_solver.GeometryOptimizer(method)
@@ -131,7 +139,7 @@ def kernel(method, assert_convergence=ASSERT_CONV,
131
139
# temporary interface, taken from berny.py optimize function
132
140
berny_log = to_berny_log (log )
133
141
geom = to_berny_geom (mol , include_ghost )
134
- optimizer = Berny (geom , log = berny_log , ** kwargs )
142
+ optimizer = Berny (geom , logger = berny_log , ** kwargs )
135
143
136
144
t1 = t0
137
145
e_last = 0
0 commit comments