10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-06-22 21:22:17 +02:00

Modif ezfio_default for reflection the new change in default. Add ezfio_generate_provider who is the new version of the program

This commit is contained in:
Thomas Applencourt 2015-03-26 20:04:05 +01:00
parent 7e1c45bedd
commit 3c368023e9
3 changed files with 246 additions and 96 deletions

View File

@ -0,0 +1,142 @@
#!/usr/bin/env python
__author__ = "Anthony Scemama and Applencourt for the amazing PEP8"
__date__ = "jeudi 26 mars 2015, 12:49:35 (UTC+0100)"
"""
Creates the provider of a variable that has to be
fetched from the EZFIO file.
"""
import sys
import os
class EZFIO_Provider(object):
data = """BEGIN_PROVIDER [ %(type)s, %(name)s ]
implicit none
BEGIN_DOC
! %(doc)s
END_DOC
logical :: has
PROVIDE ezfio_filename
call ezfio_has_%(ezfio_dir)s_%(ezfio_name)s(has)
if (has) then
call ezfio_get_%(ezfio_dir)s_%(ezfio_name)s(%(name)s)
else
%(default)s
endif
%(write)s
END_PROVIDER
"""
write_correspondance = {"integer": "write_int",
"logical": "write_bool",
"double precision": "write_double"}
def __init__(self):
self.values = "type doc default name ezfio_dir ezfio_name write output".split()
for v in self.values:
exec "self.%s = None" % (v) in locals()
def __repr__(self):
if not self.default:
self.get_default()
self.set_write()
for v in self.values:
exec "test = self.%s is None" % (v) in locals()
if test:
msg = "Error : %s is not set in ezfio_with_default.py" % (v)
print >>sys.stderr, msg
for v in self.values:
exec "x = str(self.%s)" % (v) in locals()
print >>sys.stderr, "%s : %s" % (v, x)
sys.exit(1)
return self.data % self.__dict__
def set_write(self):
self.write = ""
if self.type in self.write_correspondance:
write = self.write_correspondance[self.type]
output = self.output
name = self.name
self.write = """
call write_time(%(output)s)
call %(write)s(%(output)s, %(name)s, &
'%(name)s')""" % locals()
def set_type(self, t):
self.type = t.lower()
def set_doc(self, t):
self.doc = t.replace('\n', '\n! ')
def set_name(self, t):
self.name = t
def set_ezfio_dir(self, t):
self.ezfio_dir = t.lower()
def set_ezfio_name(self, t):
self.ezfio_name = t.lower()
def set_output(self, t):
self.output = t
def set_default(self, t):
self.default = t
def get_default(self):
filename = '/'.join([os.environ['QPACKAGE_ROOT'],
'data',
'ezfio_defaults'])
with open(filename, 'r') as f:
lines = f.readlines()
# Search directory
for k, line in enumerate(lines):
if line[0] != ' ':
if line.strip().lower() == self.ezfio_dir:
break
if k + 1 == len(lines):
return
# Search name
while k < len(lines):
k += 1
buffer = lines[k].split()
if len(buffer) == 0:
return
if buffer[0].lower() == self.ezfio_name:
break
v = buffer[1]
name = self.name
try:
v_eval = eval(v)
if isinstance(v_eval, bool):
v = '.%s.' % (v)
elif isinstance(v_eval, float):
v = v.replace('e', 'd')
v = v.replace('E', 'D')
v = "%(name)s = %(v)s" % locals()
except:
v = "call ezfio_get_%(v)s(%(name)s)" % locals()
self.default = v
def test_module():
T = EZFIO_Provider()
T.set_type("double precision")
T.set_name("thresh_SCF")
T.set_doc("Threshold on the convergence of the Hartree Fock energy")
T.set_ezfio_dir("Hartree_Fock")
T.set_ezfio_name("thresh_SCF")
T.set_output("output_Hartree_Fock")
print T
if __name__ == '__main__':
test_module()

View File

@ -260,7 +260,7 @@ def create_ezfio_provider(dict_ezfio_cfg):
create the a list who containt all the code for the provider create the a list who containt all the code for the provider
return [code, ...] return [code, ...]
""" """
from ezfio_with_default import EZFIO_Provider from ezfio_generate_provider import EZFIO_Provider
dict_code_provider = dict() dict_code_provider = dict()
@ -274,11 +274,11 @@ def create_ezfio_provider(dict_ezfio_cfg):
ez_p.set_ezfio_name(dict_info['ezfio_name']) ez_p.set_ezfio_name(dict_info['ezfio_name'])
str_ = "\n".join([" print *, '{0}/{1} not found in EZFIO file'", str_ = "\n".join([" print *, '{0}/{1} not found in EZFIO file'",
" stop 1" ]) " stop 1"])
str_ = str_.format(dict_info['ezfio_dir'], str_ = str_.format(dict_info['ezfio_dir'],
dict_info['ezfio_name']) dict_info['ezfio_name'])
ez_p.set_default(str_) ez_p.set_default(str_)
ez_p.set_output("output_%s" % dict_info['ezfio_dir']) ez_p.set_output("output_%s" % dict_info['ezfio_dir'])

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
__author__ = "Anthony Scemama and Applencourt for the amazing PEP8" __author__ = "Anthony Scemama"
__date__ = "jeudi 26 mars 2015, 12:49:35 (UTC+0100)" __date__ = "Tue Jul 29 12:20:00 CEST 2014"
""" """
Creates the provider of a variable that has to be Creates the provider of a variable that has to be
@ -14,9 +14,9 @@ import os
class EZFIO_Provider(object): class EZFIO_Provider(object):
data = """BEGIN_PROVIDER [ %(type)s, %(name)s ] data = """BEGIN_PROVIDER [ %(type)s, %(name)s ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! %(doc)s ! %(doc)s
END_DOC END_DOC
@ -33,110 +33,118 @@ class EZFIO_Provider(object):
END_PROVIDER END_PROVIDER
""" """
write_correspondance = {"integer": "write_int", write_correspondance = {
"logical": "write_bool", "integer" : "write_int",
"double precision": "write_double"} "logical" : "write_bool",
"double precision" : "write_double" }
def __init__(self): def __init__(self):
self.values = "type doc default name ezfio_dir ezfio_name write output".split() self.values = "type doc default name ezfio_dir ezfio_name write output".split()
for v in self.values:
exec "self.%s = None"%(v) in locals()
def __repr__(self):
self.get_default()
self.set_write()
for v in self.values:
exec "test = self.%s is None"%(v) in locals()
if test:
print >>sys.stderr, "Error : %s is not set in ezfio_with_default.py"%(v)
for v in self.values: for v in self.values:
exec "self.%s = None" % (v) in locals() exec "x = str(self.%s)"%(v) in locals()
print >>sys.stderr, "%s : %s"%(v, x)
sys.exit(1)
return self.data%self.__dict__
def __repr__(self): def set_write(self):
if not self.default: self.write = ""
self.get_default() if self.type in self.write_correspondance:
self.set_write() write = self.write_correspondance[self.type]
for v in self.values: output = self.output
exec "test = self.%s is None" % (v) in locals() name = self.name
if test: self.write = """
msg = "Error : %s is not set in ezfio_with_default.py" % (v)
print >>sys.stderr, msg
for v in self.values:
exec "x = str(self.%s)" % (v) in locals()
print >>sys.stderr, "%s : %s" % (v, x)
sys.exit(1)
return self.data % self.__dict__
def set_write(self):
self.write = ""
if self.type in self.write_correspondance:
write = self.write_correspondance[self.type]
output = self.output
name = self.name
self.write = """
call write_time(%(output)s) call write_time(%(output)s)
call %(write)s(%(output)s, %(name)s, & call %(write)s(%(output)s, %(name)s, &
'%(name)s')""" % locals() '%(name)s')
"""%locals()
def set_type(self, t): def set_type(self,t):
self.type = t.lower() self.type = t.lower()
def set_doc(self, t): def set_doc(self,t):
self.doc = t.replace('\n', '\n! ') self.doc = t.replace('\n', '\n! ')
def set_name(self, t): def set_name(self,t):
self.name = t self.name = t
def set_ezfio_dir(self, t): def set_ezfio_dir(self,t):
self.ezfio_dir = t.lower() self.ezfio_dir = t.lower()
def set_ezfio_name(self, t): def set_ezfio_name(self,t):
self.ezfio_name = t.lower() self.ezfio_name = t.lower()
def set_output(self, t): def set_output(self,t):
self.output = t self.output = t
def set_default(self, t): def set_default(self,t):
self.default = t self.default = t
def get_default(self): def get_default(self):
filename = '/'.join([os.environ['QPACKAGE_ROOT'],
'data',
'ezfio_defaults'])
with open(filename, 'r') as f: from os import listdir
lines = f.readlines() from os.path import isfile, join
# Search directory mypath = '/'.join( [os.environ['QPACKAGE_ROOT'], 'data', 'ezfio_defaults','/'])
for k, line in enumerate(lines): onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
if line[0] != ' ':
if line.strip().lower() == self.ezfio_dir: lines= []
break for filename in onlyfiles:
if k + 1 == len(lines): file = open(mypath+filename,'r')
return lines.extend(file.readlines()[:])
# Search name file.close()
while k < len(lines):
k += 1 # Search directory
buffer = lines[k].split() for k,line in enumerate(lines):
if len(buffer) == 0: if line[0] != ' ':
return if line.strip().lower() == self.ezfio_dir:
if buffer[0].lower() == self.ezfio_name: break
break if k+1 == len(lines):
v = buffer[1] return
name = self.name # Search name
try: while k < len(lines):
v_eval = eval(v) k+=1
if isinstance(v_eval, bool): buffer = lines[k].split()
v = '.%s.' % (v) if len(buffer) == 0:
elif isinstance(v_eval, float): return
v = v.replace('e', 'd') if buffer[0].lower() == self.ezfio_name:
v = v.replace('E', 'D') break
v = "%(name)s = %(v)s" % locals() v = buffer[1]
except: name = self.name
v = "call ezfio_get_%(v)s(%(name)s)" % locals() try:
self.default = v v_eval = eval(v)
if type(v_eval) == bool:
v = '.%s.'%(v)
elif type(v_eval) == float:
v = v.replace('e','d')
v = v.replace('E','D')
v = "%(name)s = %(v)s"%locals()
except:
v = "call ezfio_get_%(v)s(%(name)s)"%locals()
self.default = v
def test_module(): def test_module():
T = EZFIO_Provider() T = EZFIO_Provider()
T.set_type("double precision") T.set_type ( "double precision" )
T.set_name("thresh_SCF") T.set_name ( "thresh_SCF" )
T.set_doc("Threshold on the convergence of the Hartree Fock energy") T.set_doc ( "Threshold on the convergence of the Hartree Fock energy" )
T.set_ezfio_dir("Hartree_Fock") T.set_ezfio_dir ( "Hartree_Fock" )
T.set_ezfio_name("thresh_SCF") T.set_ezfio_name( "thresh_SCF" )
T.set_output("output_Hartree_Fock") T.set_output ( "output_Hartree_Fock" )
print T print T
if __name__ == '__main__': if __name__ == '__main__':
test_module() test_module()