summaryrefslogtreecommitdiff
path: root/numpy/f2py/crackfortran.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/f2py/crackfortran.py')
-rwxr-xr-xnumpy/f2py/crackfortran.py800
1 files changed, 400 insertions, 400 deletions
diff --git a/numpy/f2py/crackfortran.py b/numpy/f2py/crackfortran.py
index 8b455c8ad..34b6192e4 100755
--- a/numpy/f2py/crackfortran.py
+++ b/numpy/f2py/crackfortran.py
@@ -204,21 +204,21 @@ for c in "ijklmn": defaultimplicitrules[c]={'typespec':'integer'}
del c
badnames={}
invbadnames={}
-for n in ['int','double','float','char','short','long','void','case','while',
- 'return','signed','unsigned','if','for','typedef','sizeof','union',
- 'struct','static','register','new','break','do','goto','switch',
- 'continue','else','inline','extern','delete','const','auto',
- 'len','rank','shape','index','slen','size','_i',
+for n in ['int', 'double', 'float', 'char', 'short', 'long', 'void', 'case', 'while',
+ 'return', 'signed', 'unsigned', 'if', 'for', 'typedef', 'sizeof', 'union',
+ 'struct', 'static', 'register', 'new', 'break', 'do', 'goto', 'switch',
+ 'continue', 'else', 'inline', 'extern', 'delete', 'const', 'auto',
+ 'len', 'rank', 'shape', 'index', 'slen', 'size', '_i',
'max', 'min',
- 'flen','fshape',
- 'string','complex_double','float_double','stdin','stderr','stdout',
- 'type','default']:
+ 'flen', 'fshape',
+ 'string', 'complex_double', 'float_double', 'stdin', 'stderr', 'stdout',
+ 'type', 'default']:
badnames[n]=n+'_bn'
invbadnames[n+'_bn']=n
def rmbadname1(name):
if name in badnames:
- errmess('rmbadname1: Replacing "%s" with "%s".\n'%(name,badnames[name]))
+ errmess('rmbadname1: Replacing "%s" with "%s".\n'%(name, badnames[name]))
return badnames[name]
return name
@@ -227,7 +227,7 @@ def rmbadname(names): return [rmbadname1(_m) for _m in names]
def undo_rmbadname1(name):
if name in invbadnames:
errmess('undo_rmbadname1: Replacing "%s" with "%s".\n'\
- %(name,invbadnames[name]))
+ %(name, invbadnames[name]))
return invbadnames[name]
return name
@@ -240,17 +240,17 @@ def getextension(name):
if '/' in name[i:]: return ''
return name[i+1:]
-is_f_file = re.compile(r'.*[.](for|ftn|f77|f)\Z',re.I).match
-_has_f_header = re.compile(r'-[*]-\s*fortran\s*-[*]-',re.I).search
-_has_f90_header = re.compile(r'-[*]-\s*f90\s*-[*]-',re.I).search
-_has_fix_header = re.compile(r'-[*]-\s*fix\s*-[*]-',re.I).search
-_free_f90_start = re.compile(r'[^c*]\s*[^\s\d\t]',re.I).match
+is_f_file = re.compile(r'.*[.](for|ftn|f77|f)\Z', re.I).match
+_has_f_header = re.compile(r'-[*]-\s*fortran\s*-[*]-', re.I).search
+_has_f90_header = re.compile(r'-[*]-\s*f90\s*-[*]-', re.I).search
+_has_fix_header = re.compile(r'-[*]-\s*fix\s*-[*]-', re.I).search
+_free_f90_start = re.compile(r'[^c*]\s*[^\s\d\t]', re.I).match
def is_free_format(file):
"""Check if file is in free format Fortran."""
# f90 allows both fixed and free format, assuming fixed unless
# signs of free format are detected.
result = 0
- f = open(file,'r')
+ f = open(file, 'r')
line = f.readline()
n = 15 # the number of non-comment lines to scan for hints
if _has_f_header(line):
@@ -277,23 +277,23 @@ def readfortrancode(ffile,dowithline=show,istop=1):
2) Call dowithline(line) on every line.
3) Recursively call itself when statement \"include '<filename>'\" is met.
"""
- global gotnextfile,filepositiontext,currentfilename,sourcecodeform,strictf77,\
- beginpattern,quiet,verbose,dolowercase,include_paths
+ global gotnextfile, filepositiontext, currentfilename, sourcecodeform, strictf77,\
+ beginpattern, quiet, verbose, dolowercase, include_paths
if not istop:
- saveglobals=gotnextfile,filepositiontext,currentfilename,sourcecodeform,strictf77,\
- beginpattern,quiet,verbose,dolowercase
+ saveglobals=gotnextfile, filepositiontext, currentfilename, sourcecodeform, strictf77,\
+ beginpattern, quiet, verbose, dolowercase
if ffile==[]: return
localdolowercase = dolowercase
cont=0
finalline=''
ll=''
commentline=re.compile(r'(?P<line>([^"]*["][^"]*["][^"!]*|[^\']*\'[^\']*\'[^\'!]*|[^!\'"]*))!{1}(?P<rest>.*)')
- includeline=re.compile(r'\s*include\s*(\'|")(?P<name>[^\'"]*)(\'|")',re.I)
+ includeline=re.compile(r'\s*include\s*(\'|")(?P<name>[^\'"]*)(\'|")', re.I)
cont1=re.compile(r'(?P<line>.*)&\s*\Z')
cont2=re.compile(r'(\s*&|)(?P<line>.*)')
mline_mark = re.compile(r".*?'''")
- if istop: dowithline('',-1)
- ll,l1='',''
+ if istop: dowithline('', -1)
+ ll, l1='', ''
spacedigits=[' '] + [str(_m) for _m in range(10)]
filepositiontext=''
fin=fileinput.FileInput(ffile)
@@ -316,10 +316,10 @@ def readfortrancode(ffile,dowithline=show,istop=1):
if strictf77: beginpattern=beginpattern77
else: beginpattern=beginpattern90
outmess('\tReading file %s (format:%s%s)\n'\
- %(repr(currentfilename),sourcecodeform,
+ %(repr(currentfilename), sourcecodeform,
strictf77 and ',strict' or ''))
- l=l.expandtabs().replace('\xa0',' ')
+ l=l.expandtabs().replace('\xa0', ' ')
while not l=='': # Get rid of newline characters
if l[-1] not in "\n\r\f": break
l=l[:-1]
@@ -337,7 +337,7 @@ def readfortrancode(ffile,dowithline=show,istop=1):
cont=0
continue
if sourcecodeform=='fix':
- if l[0] in ['*','c','!','C','#']:
+ if l[0] in ['*', 'c', '!', 'C', '#']:
if l[1:5].lower()=='f2py': # f2py directive
l=' '+l[5:]
else: # Skip comment line
@@ -404,20 +404,20 @@ def readfortrancode(ffile,dowithline=show,istop=1):
cont=(r is not None)
else:
raise ValueError("Flag sourcecodeform must be either 'fix' or 'free': %s"%repr(sourcecodeform))
- filepositiontext='Line #%d in %s:"%s"\n\t' % (fin.filelineno()-1,currentfilename,l1)
+ filepositiontext='Line #%d in %s:"%s"\n\t' % (fin.filelineno()-1, currentfilename, l1)
m=includeline.match(origfinalline)
if m:
fn=m.group('name')
if os.path.isfile(fn):
- readfortrancode(fn,dowithline=dowithline,istop=0)
+ readfortrancode(fn, dowithline=dowithline, istop=0)
else:
include_dirs = [os.path.dirname(currentfilename)] + include_paths
foundfile = 0
for inc_dir in include_dirs:
- fn1 = os.path.join(inc_dir,fn)
+ fn1 = os.path.join(inc_dir, fn)
if os.path.isfile(fn1):
foundfile = 1
- readfortrancode(fn1,dowithline=dowithline,istop=0)
+ readfortrancode(fn1, dowithline=dowithline, istop=0)
break
if not foundfile:
outmess('readfortrancode: could not find include file %s in %s. Ignoring.\n'%(repr(fn), os.pathsep.join(include_dirs)))
@@ -428,20 +428,20 @@ def readfortrancode(ffile,dowithline=show,istop=1):
finalline=ll.lower()
else: finalline=ll
origfinalline = ll
- filepositiontext='Line #%d in %s:"%s"\n\t' % (fin.filelineno()-1,currentfilename,l1)
+ filepositiontext='Line #%d in %s:"%s"\n\t' % (fin.filelineno()-1, currentfilename, l1)
m=includeline.match(origfinalline)
if m:
fn=m.group('name')
if os.path.isfile(fn):
- readfortrancode(fn,dowithline=dowithline,istop=0)
+ readfortrancode(fn, dowithline=dowithline, istop=0)
else:
include_dirs = [os.path.dirname(currentfilename)] + include_paths
foundfile = 0
for inc_dir in include_dirs:
- fn1 = os.path.join(inc_dir,fn)
+ fn1 = os.path.join(inc_dir, fn)
if os.path.isfile(fn1):
foundfile = 1
- readfortrancode(fn1,dowithline=dowithline,istop=0)
+ readfortrancode(fn1, dowithline=dowithline, istop=0)
break
if not foundfile:
outmess('readfortrancode: could not find include file %s in %s. Ignoring.\n'%(repr(fn), os.pathsep.join(include_dirs)))
@@ -449,10 +449,10 @@ def readfortrancode(ffile,dowithline=show,istop=1):
dowithline(finalline)
filepositiontext=''
fin.close()
- if istop: dowithline('',1)
+ if istop: dowithline('', 1)
else:
- gotnextfile,filepositiontext,currentfilename,sourcecodeform,strictf77,\
- beginpattern,quiet,verbose,dolowercase=saveglobals
+ gotnextfile, filepositiontext, currentfilename, sourcecodeform, strictf77,\
+ beginpattern, quiet, verbose, dolowercase=saveglobals
########### Crack line
beforethisafter=r'\s*(?P<before>%s(?=\s*(\b(%s)\b)))'+ \
@@ -460,55 +460,55 @@ beforethisafter=r'\s*(?P<before>%s(?=\s*(\b(%s)\b)))'+ \
r'\s*(?P<after>%s)\s*\Z'
##
fortrantypes='character|logical|integer|real|complex|double\s*(precision\s*(complex|)|complex)|type(?=\s*\([\w\s,=(*)]*\))|byte'
-typespattern=re.compile(beforethisafter%('',fortrantypes,fortrantypes,'.*'),re.I),'type'
-typespattern4implicit=re.compile(beforethisafter%('',fortrantypes+'|static|automatic|undefined',fortrantypes+'|static|automatic|undefined','.*'),re.I)
+typespattern=re.compile(beforethisafter%('', fortrantypes, fortrantypes, '.*'), re.I), 'type'
+typespattern4implicit=re.compile(beforethisafter%('', fortrantypes+'|static|automatic|undefined', fortrantypes+'|static|automatic|undefined', '.*'), re.I)
#
-functionpattern=re.compile(beforethisafter%('([a-z]+[\w\s(=*+-/)]*?|)','function','function','.*'),re.I),'begin'
-subroutinepattern=re.compile(beforethisafter%('[a-z\s]*?','subroutine','subroutine','.*'),re.I),'begin'
+functionpattern=re.compile(beforethisafter%('([a-z]+[\w\s(=*+-/)]*?|)', 'function', 'function', '.*'), re.I), 'begin'
+subroutinepattern=re.compile(beforethisafter%('[a-z\s]*?', 'subroutine', 'subroutine', '.*'), re.I), 'begin'
#modulepattern=re.compile(beforethisafter%('[a-z\s]*?','module','module','.*'),re.I),'begin'
#
groupbegins77=r'program|block\s*data'
-beginpattern77=re.compile(beforethisafter%('',groupbegins77,groupbegins77,'.*'),re.I),'begin'
+beginpattern77=re.compile(beforethisafter%('', groupbegins77, groupbegins77, '.*'), re.I), 'begin'
groupbegins90=groupbegins77+r'|module(?!\s*procedure)|python\s*module|interface|type(?!\s*\()'
-beginpattern90=re.compile(beforethisafter%('',groupbegins90,groupbegins90,'.*'),re.I),'begin'
+beginpattern90=re.compile(beforethisafter%('', groupbegins90, groupbegins90, '.*'), re.I), 'begin'
groupends=r'end|endprogram|endblockdata|endmodule|endpythonmodule|endinterface'
-endpattern=re.compile(beforethisafter%('',groupends,groupends,'[\w\s]*'),re.I),'end'
+endpattern=re.compile(beforethisafter%('', groupends, groupends, '[\w\s]*'), re.I), 'end'
#endifs='end\s*(if|do|where|select|while|forall)'
endifs='(end\s*(if|do|where|select|while|forall))|(module\s*procedure)'
-endifpattern=re.compile(beforethisafter%('[\w]*?',endifs,endifs,'[\w\s]*'),re.I),'endif'
+endifpattern=re.compile(beforethisafter%('[\w]*?', endifs, endifs, '[\w\s]*'), re.I), 'endif'
#
-implicitpattern=re.compile(beforethisafter%('','implicit','implicit','.*'),re.I),'implicit'
-dimensionpattern=re.compile(beforethisafter%('','dimension|virtual','dimension|virtual','.*'),re.I),'dimension'
-externalpattern=re.compile(beforethisafter%('','external','external','.*'),re.I),'external'
-optionalpattern=re.compile(beforethisafter%('','optional','optional','.*'),re.I),'optional'
-requiredpattern=re.compile(beforethisafter%('','required','required','.*'),re.I),'required'
-publicpattern=re.compile(beforethisafter%('','public','public','.*'),re.I),'public'
-privatepattern=re.compile(beforethisafter%('','private','private','.*'),re.I),'private'
-intrisicpattern=re.compile(beforethisafter%('','intrisic','intrisic','.*'),re.I),'intrisic'
-intentpattern=re.compile(beforethisafter%('','intent|depend|note|check','intent|depend|note|check','\s*\(.*?\).*'),re.I),'intent'
-parameterpattern=re.compile(beforethisafter%('','parameter','parameter','\s*\(.*'),re.I),'parameter'
-datapattern=re.compile(beforethisafter%('','data','data','.*'),re.I),'data'
-callpattern=re.compile(beforethisafter%('','call','call','.*'),re.I),'call'
-entrypattern=re.compile(beforethisafter%('','entry','entry','.*'),re.I),'entry'
-callfunpattern=re.compile(beforethisafter%('','callfun','callfun','.*'),re.I),'callfun'
-commonpattern=re.compile(beforethisafter%('','common','common','.*'),re.I),'common'
-usepattern=re.compile(beforethisafter%('','use','use','.*'),re.I),'use'
-containspattern=re.compile(beforethisafter%('','contains','contains',''),re.I),'contains'
-formatpattern=re.compile(beforethisafter%('','format','format','.*'),re.I),'format'
+implicitpattern=re.compile(beforethisafter%('', 'implicit', 'implicit', '.*'), re.I), 'implicit'
+dimensionpattern=re.compile(beforethisafter%('', 'dimension|virtual', 'dimension|virtual', '.*'), re.I), 'dimension'
+externalpattern=re.compile(beforethisafter%('', 'external', 'external', '.*'), re.I), 'external'
+optionalpattern=re.compile(beforethisafter%('', 'optional', 'optional', '.*'), re.I), 'optional'
+requiredpattern=re.compile(beforethisafter%('', 'required', 'required', '.*'), re.I), 'required'
+publicpattern=re.compile(beforethisafter%('', 'public', 'public', '.*'), re.I), 'public'
+privatepattern=re.compile(beforethisafter%('', 'private', 'private', '.*'), re.I), 'private'
+intrisicpattern=re.compile(beforethisafter%('', 'intrisic', 'intrisic', '.*'), re.I), 'intrisic'
+intentpattern=re.compile(beforethisafter%('', 'intent|depend|note|check', 'intent|depend|note|check', '\s*\(.*?\).*'), re.I), 'intent'
+parameterpattern=re.compile(beforethisafter%('', 'parameter', 'parameter', '\s*\(.*'), re.I), 'parameter'
+datapattern=re.compile(beforethisafter%('', 'data', 'data', '.*'), re.I), 'data'
+callpattern=re.compile(beforethisafter%('', 'call', 'call', '.*'), re.I), 'call'
+entrypattern=re.compile(beforethisafter%('', 'entry', 'entry', '.*'), re.I), 'entry'
+callfunpattern=re.compile(beforethisafter%('', 'callfun', 'callfun', '.*'), re.I), 'callfun'
+commonpattern=re.compile(beforethisafter%('', 'common', 'common', '.*'), re.I), 'common'
+usepattern=re.compile(beforethisafter%('', 'use', 'use', '.*'), re.I), 'use'
+containspattern=re.compile(beforethisafter%('', 'contains', 'contains', ''), re.I), 'contains'
+formatpattern=re.compile(beforethisafter%('', 'format', 'format', '.*'), re.I), 'format'
## Non-fortran and f2py-specific statements
-f2pyenhancementspattern=re.compile(beforethisafter%('','threadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddef','threadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddef','.*'),re.I|re.S),'f2pyenhancements'
-multilinepattern = re.compile(r"\s*(?P<before>''')(?P<this>.*?)(?P<after>''')\s*\Z",re.S),'multiline'
+f2pyenhancementspattern=re.compile(beforethisafter%('', 'threadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddef', 'threadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddef', '.*'), re.I|re.S), 'f2pyenhancements'
+multilinepattern = re.compile(r"\s*(?P<before>''')(?P<this>.*?)(?P<after>''')\s*\Z", re.S), 'multiline'
##
def _simplifyargs(argsline):
a = []
for n in markoutercomma(argsline).split('@,@'):
for r in '(),':
- n = n.replace(r,'_')
+ n = n.replace(r, '_')
a.append(n)
return ','.join(a)
-crackline_re_1 = re.compile(r'\s*(?P<result>\b[a-z]+[\w]*\b)\s*[=].*',re.I)
+crackline_re_1 = re.compile(r'\s*(?P<result>\b[a-z]+[\w]*\b)\s*[=].*', re.I)
def crackline(line,reset=0):
"""
reset=-1 --- initialize
@@ -517,14 +517,14 @@ def crackline(line,reset=0):
Cracked data is saved in grouplist[0].
"""
- global beginpattern,groupcounter,groupname,groupcache,grouplist,gotnextfile,\
- filepositiontext,currentfilename,neededmodule,expectbegin,skipblocksuntil,\
- skipemptyends,previous_context
+ global beginpattern, groupcounter, groupname, groupcache, grouplist, gotnextfile,\
+ filepositiontext, currentfilename, neededmodule, expectbegin, skipblocksuntil,\
+ skipemptyends, previous_context
if ';' in line and not (f2pyenhancementspattern[0].match(line) or
multilinepattern[0].match(line)):
for l in line.split(';'):
- assert reset==0,repr(reset) # XXX: non-zero reset values need testing
- crackline(l,reset)
+ assert reset==0, repr(reset) # XXX: non-zero reset values need testing
+ crackline(l, reset)
return
if reset<0:
groupcounter=0
@@ -542,7 +542,7 @@ def crackline(line,reset=0):
fl=0
if f77modulename and neededmodule==groupcounter: fl=2
while groupcounter>fl:
- outmess('crackline: groupcounter=%s groupname=%s\n'%(repr(groupcounter),repr(groupname)))
+ outmess('crackline: groupcounter=%s groupname=%s\n'%(repr(groupcounter), repr(groupname)))
outmess('crackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.\n')
grouplist[groupcounter-1].append(groupcache[groupcounter])
grouplist[groupcounter-1][-1]['body']=grouplist[groupcounter]
@@ -561,15 +561,15 @@ def crackline(line,reset=0):
return
if line=='': return
flag=0
- for pat in [dimensionpattern,externalpattern,intentpattern,optionalpattern,
+ for pat in [dimensionpattern, externalpattern, intentpattern, optionalpattern,
requiredpattern,
- parameterpattern,datapattern,publicpattern,privatepattern,
+ parameterpattern, datapattern, publicpattern, privatepattern,
intrisicpattern,
- endifpattern,endpattern,
+ endifpattern, endpattern,
formatpattern,
- beginpattern,functionpattern,subroutinepattern,
- implicitpattern,typespattern,commonpattern,
- callpattern,usepattern,containspattern,
+ beginpattern, functionpattern, subroutinepattern,
+ implicitpattern, typespattern, commonpattern,
+ callpattern, usepattern, containspattern,
entrypattern,
f2pyenhancementspattern,
multilinepattern
@@ -587,18 +587,18 @@ def crackline(line,reset=0):
name=invbadnames[name]
if 'interfaced' in groupcache[groupcounter] and name in groupcache[groupcounter]['interfaced']:
continue
- m1=re.match(r'(?P<before>[^"]*)\b%s\b\s*@\(@(?P<args>[^@]*)@\)@.*\Z'%name,markouterparen(line),re.I)
+ m1=re.match(r'(?P<before>[^"]*)\b%s\b\s*@\(@(?P<args>[^@]*)@\)@.*\Z'%name, markouterparen(line), re.I)
if m1:
m2 = re_1.match(m1.group('before'))
a = _simplifyargs(m1.group('args'))
if m2:
- line='callfun %s(%s) result (%s)'%(name,a,m2.group('result'))
- else: line='callfun %s(%s)'%(name,a)
+ line='callfun %s(%s) result (%s)'%(name, a, m2.group('result'))
+ else: line='callfun %s(%s)'%(name, a)
m = callfunpattern[0].match(line)
if not m:
outmess('crackline: could not resolve function call for line=%s.\n'%repr(line))
return
- analyzeline(m,'callfun',line)
+ analyzeline(m, 'callfun', line)
return
if verbose>1 or (verbose==1 and currentfilename.lower().endswith('.pyf')):
previous_context = None
@@ -632,7 +632,7 @@ def crackline(line,reset=0):
groupcounter=groupcounter+1
return
gotnextfile=0
- analyzeline(m,pat[1],line)
+ analyzeline(m, pat[1], line)
expectbegin=0
elif pat[1]=='endif':
pass
@@ -642,7 +642,7 @@ def crackline(line,reset=0):
skipblocksuntil=groupcounter
else:
if 0<=skipblocksuntil<=groupcounter:return
- analyzeline(m,pat[1],line)
+ analyzeline(m, pat[1], line)
def markouterparen(line):
l='';f=0
@@ -673,10 +673,10 @@ def markoutercomma(line,comma=','):
l=l+'@'+comma+'@'
continue
l=l+c
- assert not f,repr((f,line,l,cc))
+ assert not f, repr((f, line, l, cc))
return l
def unmarkouterparen(line):
- r = line.replace('@(@','(').replace('@)@',')')
+ r = line.replace('@(@', '(').replace('@)@', ')')
return r
def appenddecl(decl,decl2,force=1):
if not decl: decl={}
@@ -688,32 +688,32 @@ def appenddecl(decl,decl2,force=1):
decl[k]=decl2[k]
elif k=='attrspec':
for l in decl2[k]:
- decl=setattrspec(decl,l,force)
+ decl=setattrspec(decl, l, force)
elif k=='kindselector':
- decl=setkindselector(decl,decl2[k],force)
+ decl=setkindselector(decl, decl2[k], force)
elif k=='charselector':
- decl=setcharselector(decl,decl2[k],force)
- elif k in ['=','typename']:
+ decl=setcharselector(decl, decl2[k], force)
+ elif k in ['=', 'typename']:
if force or k not in decl:
decl[k]=decl2[k]
elif k=='note':
pass
- elif k in ['intent','check','dimension','optional','required']:
+ elif k in ['intent', 'check', 'dimension', 'optional', 'required']:
errmess('appenddecl: "%s" not implemented.\n'%k)
else:
raise Exception('appenddecl: Unknown variable definition key:' + \
str(k))
return decl
-selectpattern=re.compile(r'\s*(?P<this>(@\(@.*?@\)@|[*][\d*]+|[*]\s*@\(@.*?@\)@|))(?P<after>.*)\Z',re.I)
-nameargspattern=re.compile(r'\s*(?P<name>\b[\w$]+\b)\s*(@\(@\s*(?P<args>[\w\s,]*)\s*@\)@|)\s*((result(\s*@\(@\s*(?P<result>\b[\w$]+\b)\s*@\)@|))|(bind\s*@\(@\s*(?P<bind>.*)\s*@\)@))*\s*\Z',re.I)
-callnameargspattern=re.compile(r'\s*(?P<name>\b[\w$]+\b)\s*@\(@\s*(?P<args>.*)\s*@\)@\s*\Z',re.I)
+selectpattern=re.compile(r'\s*(?P<this>(@\(@.*?@\)@|[*][\d*]+|[*]\s*@\(@.*?@\)@|))(?P<after>.*)\Z', re.I)
+nameargspattern=re.compile(r'\s*(?P<name>\b[\w$]+\b)\s*(@\(@\s*(?P<args>[\w\s,]*)\s*@\)@|)\s*((result(\s*@\(@\s*(?P<result>\b[\w$]+\b)\s*@\)@|))|(bind\s*@\(@\s*(?P<bind>.*)\s*@\)@))*\s*\Z', re.I)
+callnameargspattern=re.compile(r'\s*(?P<name>\b[\w$]+\b)\s*@\(@\s*(?P<args>.*)\s*@\)@\s*\Z', re.I)
real16pattern = re.compile(r'([-+]?(?:\d+(?:\.\d*)?|\d*\.\d+))[dD]((?:[-+]?\d+)?)')
real8pattern = re.compile(r'([-+]?((?:\d+(?:\.\d*)?|\d*\.\d+))[eE]((?:[-+]?\d+)?)|(\d+\.\d*))')
-_intentcallbackpattern = re.compile(r'intent\s*\(.*?\bcallback\b',re.I)
+_intentcallbackpattern = re.compile(r'intent\s*\(.*?\bcallback\b', re.I)
def _is_intent_callback(vdecl):
- for a in vdecl.get('attrspec',[]):
+ for a in vdecl.get('attrspec', []):
if _intentcallbackpattern.match(a):
return 1
return 0
@@ -722,20 +722,20 @@ def _resolvenameargspattern(line):
line = markouterparen(line)
m1=nameargspattern.match(line)
if m1:
- return m1.group('name'),m1.group('args'),m1.group('result'), m1.group('bind')
+ return m1.group('name'), m1.group('args'), m1.group('result'), m1.group('bind')
m1=callnameargspattern.match(line)
if m1:
- return m1.group('name'),m1.group('args'),None, None
- return None,[],None, None
+ return m1.group('name'), m1.group('args'), None, None
+ return None, [], None, None
-def analyzeline(m,case,line):
- global groupcounter,groupname,groupcache,grouplist,filepositiontext,\
- currentfilename,f77modulename,neededinterface,neededmodule,expectbegin,\
- gotnextfile,previous_context
+def analyzeline(m, case, line):
+ global groupcounter, groupname, groupcache, grouplist, filepositiontext,\
+ currentfilename, f77modulename, neededinterface, neededmodule, expectbegin,\
+ gotnextfile, previous_context
block=m.group('this')
if case != 'multiline':
previous_context = None
- if expectbegin and case not in ['begin','call','callfun','type'] \
+ if expectbegin and case not in ['begin', 'call', 'callfun', 'type'] \
and not skipemptyends and groupcounter<1:
newname=os.path.basename(currentfilename).split('.')[0]
outmess('analyzeline: no group yet. Creating program group with name "%s".\n'%newname)
@@ -750,21 +750,21 @@ def analyzeline(m,case,line):
groupcache[groupcounter]['name']=newname
groupcache[groupcounter]['from']='fromsky'
expectbegin=0
- if case in ['begin','call','callfun']:
+ if case in ['begin', 'call', 'callfun']:
# Crack line => block,name,args,result
block = block.lower()
- if re.match(r'block\s*data',block,re.I): block='block data'
- if re.match(r'python\s*module',block,re.I): block='python module'
- name,args,result,bind = _resolvenameargspattern(m.group('after'))
+ if re.match(r'block\s*data', block, re.I): block='block data'
+ if re.match(r'python\s*module', block, re.I): block='python module'
+ name, args, result, bind = _resolvenameargspattern(m.group('after'))
if name is None:
if block=='block data':
name = '_BLOCK_DATA_'
else:
name = ''
- if block not in ['interface','block data']:
+ if block not in ['interface', 'block data']:
outmess('analyzeline: No name/args pattern found for line.\n')
- previous_context = (block,name,groupcounter)
+ previous_context = (block, name, groupcounter)
if args: args=rmbadname([x.strip() for x in markoutercomma(args).split('@,@')])
else: args=[]
if '' in args:
@@ -776,7 +776,7 @@ def analyzeline(m,case,line):
needmodule=0
needinterface=0
- if case in ['call','callfun']:
+ if case in ['call', 'callfun']:
needinterface=1
if 'args' not in groupcache[groupcounter]:
return
@@ -799,7 +799,7 @@ def analyzeline(m,case,line):
grouplist[groupcounter]=[]
if needmodule:
if verbose>1:
- outmess('analyzeline: Creating module block %s\n'%repr(f77modulename),0)
+ outmess('analyzeline: Creating module block %s\n'%repr(f77modulename), 0)
groupname[groupcounter]='module'
groupcache[groupcounter]['block']='python module'
groupcache[groupcounter]['name']=f77modulename
@@ -813,11 +813,11 @@ def analyzeline(m,case,line):
grouplist[groupcounter]=[]
if needinterface:
if verbose>1:
- outmess('analyzeline: Creating additional interface block (groupcounter=%s).\n' % (groupcounter),0)
+ outmess('analyzeline: Creating additional interface block (groupcounter=%s).\n' % (groupcounter), 0)
groupname[groupcounter]='interface'
groupcache[groupcounter]['block']='interface'
groupcache[groupcounter]['name']='unknown_interface'
- groupcache[groupcounter]['from']='%s:%s'%(groupcache[groupcounter-1]['from'],groupcache[groupcounter-1]['name'])
+ groupcache[groupcounter]['from']='%s:%s'%(groupcache[groupcounter-1]['from'], groupcache[groupcounter-1]['name'])
groupcache[groupcounter]['body']=[]
groupcache[groupcounter]['externals']=[]
groupcache[groupcounter]['interfaced']=[]
@@ -835,9 +835,9 @@ def analyzeline(m,case,line):
groupcache[groupcounter]['from']=currentfilename
else:
if f77modulename and groupcounter==3:
- groupcache[groupcounter]['from']='%s:%s'%(groupcache[groupcounter-1]['from'],currentfilename)
+ groupcache[groupcounter]['from']='%s:%s'%(groupcache[groupcounter-1]['from'], currentfilename)
else:
- groupcache[groupcounter]['from']='%s:%s'%(groupcache[groupcounter-1]['from'],groupcache[groupcounter-1]['name'])
+ groupcache[groupcounter]['from']='%s:%s'%(groupcache[groupcounter-1]['from'], groupcache[groupcounter-1]['name'])
for k in list(groupcache[groupcounter].keys()):
if not groupcache[groupcounter][k]:
del groupcache[groupcounter][k]
@@ -852,7 +852,7 @@ def analyzeline(m,case,line):
if block=='type':
groupcache[groupcounter]['varnames'] = []
- if case in ['call','callfun']: # set parents variables
+ if case in ['call', 'callfun']: # set parents variables
if name not in groupcache[groupcounter-2]['externals']:
groupcache[groupcounter-2]['externals'].append(name)
groupcache[groupcounter]['vars']=copy.deepcopy(groupcache[groupcounter-2]['vars'])
@@ -860,23 +860,23 @@ def analyzeline(m,case,line):
#except: pass
try: del groupcache[groupcounter]['vars'][name][groupcache[groupcounter]['vars'][name]['attrspec'].index('external')]
except: pass
- if block in ['function','subroutine']: # set global attributes
- try: groupcache[groupcounter]['vars'][name]=appenddecl(groupcache[groupcounter]['vars'][name],groupcache[groupcounter-2]['vars'][''])
+ if block in ['function', 'subroutine']: # set global attributes
+ try: groupcache[groupcounter]['vars'][name]=appenddecl(groupcache[groupcounter]['vars'][name], groupcache[groupcounter-2]['vars'][''])
except: pass
if case=='callfun': # return type
if result and result in groupcache[groupcounter]['vars']:
if not name==result:
- groupcache[groupcounter]['vars'][name]=appenddecl(groupcache[groupcounter]['vars'][name],groupcache[groupcounter]['vars'][result])
+ groupcache[groupcounter]['vars'][name]=appenddecl(groupcache[groupcounter]['vars'][name], groupcache[groupcounter]['vars'][result])
#if groupcounter>1: # name is interfaced
try: groupcache[groupcounter-2]['interfaced'].append(name)
except: pass
if block=='function':
t=typespattern[0].match(m.group('before')+' '+name)
if t:
- typespec,selector,attr,edecl=cracktypespec0(t.group('this'),t.group('after'))
- updatevars(typespec,selector,attr,edecl)
+ typespec, selector, attr, edecl=cracktypespec0(t.group('this'), t.group('after'))
+ updatevars(typespec, selector, attr, edecl)
- if case in ['call','callfun']:
+ if case in ['call', 'callfun']:
grouplist[groupcounter-1].append(groupcache[groupcounter])
grouplist[groupcounter-1][-1]['body']=grouplist[groupcounter]
del grouplist[groupcounter]
@@ -887,20 +887,20 @@ def analyzeline(m,case,line):
groupcounter=groupcounter-1 # end interface
elif case=='entry':
- name,args,result,bind=_resolvenameargspattern(m.group('after'))
+ name, args, result, bind=_resolvenameargspattern(m.group('after'))
if name is not None:
if args:
args=rmbadname([x.strip() for x in markoutercomma(args).split('@,@')])
else: args=[]
- assert result is None,repr(result)
+ assert result is None, repr(result)
groupcache[groupcounter]['entry'][name] = args
- previous_context = ('entry',name,groupcounter)
+ previous_context = ('entry', name, groupcounter)
elif case=='type':
- typespec,selector,attr,edecl=cracktypespec0(block,m.group('after'))
- last_name = updatevars(typespec,selector,attr,edecl)
+ typespec, selector, attr, edecl=cracktypespec0(block, m.group('after'))
+ last_name = updatevars(typespec, selector, attr, edecl)
if last_name is not None:
- previous_context = ('variable',last_name,groupcounter)
- elif case in ['dimension','intent','optional','required','external','public','private','intrisic']:
+ previous_context = ('variable', last_name, groupcounter)
+ elif case in ['dimension', 'intent', 'optional', 'required', 'external', 'public', 'private', 'intrisic']:
edecl=groupcache[groupcounter]['vars']
ll=m.group('after').strip()
i=ll.find('::')
@@ -909,7 +909,7 @@ def analyzeline(m,case,line):
ll=ll[:i+1]+'::'+ll[i+1:]
i=ll.find('::')
if ll[i:]=='::' and 'args' in groupcache[groupcounter]:
- outmess('All arguments will have attribute %s%s\n'%(m.group('this'),ll[:i]))
+ outmess('All arguments will have attribute %s%s\n'%(m.group('this'), ll[:i]))
ll = ll + ','.join(groupcache[groupcounter]['args'])
if i<0:i=0;pl=''
else: pl=ll[:i].strip();ll=ll[i+2:]
@@ -922,10 +922,10 @@ def analyzeline(m,case,line):
for e in [x.strip() for x in markoutercomma(ll).split('@,@')]:
m1=namepattern.match(e)
if not m1:
- if case in ['public','private']: k=''
+ if case in ['public', 'private']: k=''
else:
print(m.groupdict())
- outmess('analyzeline: no name pattern found in %s statement for %s. Skipping.\n'%(case,repr(e)))
+ outmess('analyzeline: no name pattern found in %s statement for %s. Skipping.\n'%(case, repr(e)))
continue
else:
k=rmbadname1(m1.group('name'))
@@ -942,14 +942,14 @@ def analyzeline(m,case,line):
outmess('analyzeline: missing __user__ module (could be nothing)\n')
if k!=groupcache[groupcounter]['name']: # fixes ticket 1693
outmess('analyzeline: appending intent(callback) %s'\
- ' to %s arguments\n' % (k,groupcache[groupcounter]['name']))
+ ' to %s arguments\n' % (k, groupcache[groupcounter]['name']))
groupcache[groupcounter]['args'].append(k)
else:
errmess('analyzeline: intent(callback) %s is ignored' % (k))
else:
errmess('analyzeline: intent(callback) %s is already'\
' in argument list' % (k))
- if case in ['optional','required','public','external','private','intrisic']:
+ if case in ['optional', 'required', 'public', 'external', 'private', 'intrisic']:
ap=case
if 'attrspec' in edecl[k]:
edecl[k]['attrspec'].append(ap)
@@ -968,23 +968,23 @@ def analyzeline(m,case,line):
last_name = k
groupcache[groupcounter]['vars']=edecl
if last_name is not None:
- previous_context = ('variable',last_name,groupcounter)
+ previous_context = ('variable', last_name, groupcounter)
elif case=='parameter':
edecl=groupcache[groupcounter]['vars']
ll=m.group('after').strip()[1:-1]
last_name = None
for e in markoutercomma(ll).split('@,@'):
try:
- k,initexpr=[x.strip() for x in e.split('=')]
+ k, initexpr=[x.strip() for x in e.split('=')]
except:
- outmess('analyzeline: could not extract name,expr in parameter statement "%s" of "%s"\n'%(e,ll));continue
+ outmess('analyzeline: could not extract name,expr in parameter statement "%s" of "%s"\n'%(e, ll));continue
params = get_parameters(edecl)
k=rmbadname1(k)
if k not in edecl:
edecl[k]={}
if '=' in edecl[k] and (not edecl[k]['=']==initexpr):
- outmess('analyzeline: Overwriting the value of parameter "%s" ("%s") with "%s".\n'%(k,edecl[k]['='],initexpr))
- t = determineexprtype(initexpr,params)
+ outmess('analyzeline: Overwriting the value of parameter "%s" ("%s") with "%s".\n'%(k, edecl[k]['='], initexpr))
+ t = determineexprtype(initexpr, params)
if t:
if t.get('typespec')=='real':
tt = list(initexpr)
@@ -993,11 +993,11 @@ def analyzeline(m,case,line):
initexpr[m.start():m.end()].lower().replace('d', 'e'))
initexpr = ''.join(tt)
elif t.get('typespec')=='complex':
- initexpr = initexpr[1:].lower().replace('d','e').\
- replace(',','+1j*(')
+ initexpr = initexpr[1:].lower().replace('d', 'e').\
+ replace(',', '+1j*(')
try:
- v = eval(initexpr,{},params)
- except (SyntaxError,NameError,TypeError) as msg:
+ v = eval(initexpr, {}, params)
+ except (SyntaxError, NameError, TypeError) as msg:
errmess('analyzeline: Failed to evaluate %r. Ignoring: %s\n'\
% (initexpr, msg))
continue
@@ -1008,7 +1008,7 @@ def analyzeline(m,case,line):
last_name = k
groupcache[groupcounter]['vars']=edecl
if last_name is not None:
- previous_context = ('variable',last_name,groupcounter)
+ previous_context = ('variable', last_name, groupcounter)
elif case=='implicit':
if m.group('after').strip().lower()=='none':
groupcache[groupcounter]['implicit']=None
@@ -1021,14 +1021,14 @@ def analyzeline(m,case,line):
impl={}
for e in markoutercomma(m.group('after')).split('@,@'):
decl={}
- m1=re.match(r'\s*(?P<this>.*?)\s*(\(\s*(?P<after>[a-z-, ]+)\s*\)\s*|)\Z',e,re.I)
+ m1=re.match(r'\s*(?P<this>.*?)\s*(\(\s*(?P<after>[a-z-, ]+)\s*\)\s*|)\Z', e, re.I)
if not m1:
outmess('analyzeline: could not extract info of implicit statement part "%s"\n'%(e));continue
m2=typespattern4implicit.match(m1.group('this'))
if not m2:
outmess('analyzeline: could not extract types pattern of implicit statement part "%s"\n'%(e));continue
- typespec,selector,attr,edecl=cracktypespec0(m2.group('this'),m2.group('after'))
- kindselect,charselect,typename=cracktypespec(typespec,selector)
+ typespec, selector, attr, edecl=cracktypespec0(m2.group('this'), m2.group('after'))
+ kindselect, charselect, typename=cracktypespec(typespec, selector)
decl['typespec']=typespec
decl['kindselector']=kindselect
decl['charselector']=charselect
@@ -1037,13 +1037,13 @@ def analyzeline(m,case,line):
if not decl[k]: del decl[k]
for r in markoutercomma(m1.group('after')).split('@,@'):
if '-' in r:
- try: begc,endc=[x.strip() for x in r.split('-')]
+ try: begc, endc=[x.strip() for x in r.split('-')]
except:
outmess('analyzeline: expected "<char>-<char>" instead of "%s" in range list of implicit statement\n'%r);continue
else: begc=endc=r.strip()
if not len(begc)==len(endc)==1:
outmess('analyzeline: expected "<char>-<char>" instead of "%s" in range list of implicit statement (2)\n'%r);continue
- for o in range(ord(begc),ord(endc)+1):
+ for o in range(ord(begc), ord(endc)+1):
impl[chr(o)]=decl
groupcache[groupcounter]['implicit']=impl
elif case=='data':
@@ -1061,13 +1061,13 @@ def analyzeline(m,case,line):
dl = dl.strip()
if dl.startswith(','):
dl = dl[1:].strip()
- ll.append([dl,il])
+ ll.append([dl, il])
dl=c;il='';f=0
if f==2:
dl = dl.strip()
if dl.startswith(','):
dl = dl[1:].strip()
- ll.append([dl,il])
+ ll.append([dl, il])
vars={}
if 'vars' in groupcache[groupcounter]:
vars=groupcache[groupcounter]['vars']
@@ -1097,13 +1097,13 @@ def analyzeline(m,case,line):
if v not in vars:
vars[v]={}
if '=' in vars[v] and not vars[v]['=']==l[1][j:i-1]:
- outmess('analyzeline: changing init expression of "%s" ("%s") to "%s"\n'%(v,vars[v]['='],l[1][j:i-1]))
+ outmess('analyzeline: changing init expression of "%s" ("%s") to "%s"\n'%(v, vars[v]['='], l[1][j:i-1]))
vars[v]['=']=l[1][j:i-1]
j=i
last_name = v
groupcache[groupcounter]['vars']=vars
if last_name is not None:
- previous_context = ('variable',last_name,groupcounter)
+ previous_context = ('variable', last_name, groupcounter)
elif case=='common':
line=m.group('after').strip()
if not line[0]=='/':line='//'+line
@@ -1114,13 +1114,13 @@ def analyzeline(m,case,line):
if f>=3:
bn = bn.strip()
if not bn: bn='_BLNK_'
- cl.append([bn,ol])
+ cl.append([bn, ol])
f=f-2;bn='';ol=''
if f%2: bn=bn+c
else: ol=ol+c
bn = bn.strip()
if not bn: bn='_BLNK_'
- cl.append([bn,ol])
+ cl.append([bn, ol])
commonkey={}
if 'common' in groupcache[groupcounter]:
commonkey=groupcache[groupcounter]['common']
@@ -1132,9 +1132,9 @@ def analyzeline(m,case,line):
for i in [x.strip() for x in markoutercomma(c[1]).split('@,@')]:
if i: commonkey[c[0]].append(i)
groupcache[groupcounter]['common']=commonkey
- previous_context = ('common',bn,groupcounter)
+ previous_context = ('common', bn, groupcounter)
elif case=='use':
- m1=re.match(r'\A\s*(?P<name>\b[\w]+\b)\s*((,(\s*\bonly\b\s*:|(?P<notonly>))\s*(?P<list>.*))|)\s*\Z',m.group('after'),re.I)
+ m1=re.match(r'\A\s*(?P<name>\b[\w]+\b)\s*((,(\s*\bonly\b\s*:|(?P<notonly>))\s*(?P<list>.*))|)\s*\Z', m.group('after'), re.I)
if m1:
mm=m1.groupdict()
if 'use' not in groupcache[groupcounter]:
@@ -1150,7 +1150,7 @@ def analyzeline(m,case,line):
rl={}
for l in ll:
if '=' in l:
- m2=re.match(r'\A\s*(?P<local>\b[\w]+\b)\s*=\s*>\s*(?P<use>\b[\w]+\b)\s*\Z',l,re.I)
+ m2=re.match(r'\A\s*(?P<local>\b[\w]+\b)\s*=\s*>\s*(?P<use>\b[\w]+\b)\s*\Z', l, re.I)
if m2: rl[m2.group('local').strip()]=m2.group('use').strip()
else:
outmess('analyzeline: Not local=>use pattern found in %s\n'%repr(l))
@@ -1187,7 +1187,7 @@ def analyzeline(m,case,line):
print(m.groupdict())
outmess('analyzeline: No code implemented for line.\n')
-def appendmultiline(group, context_name,ml):
+def appendmultiline(group, context_name, ml):
if 'f2pymultilines' not in group:
group['f2pymultilines'] = {}
d = group['f2pymultilines']
@@ -1196,11 +1196,11 @@ def appendmultiline(group, context_name,ml):
d[context_name].append(ml)
return
-def cracktypespec0(typespec,ll):
+def cracktypespec0(typespec, ll):
selector=None
attr=None
- if re.match(r'double\s*complex',typespec,re.I): typespec='double complex'
- elif re.match(r'double\s*precision',typespec,re.I): typespec='double precision'
+ if re.match(r'double\s*complex', typespec, re.I): typespec='double complex'
+ elif re.match(r'double\s*precision', typespec, re.I): typespec='double precision'
else: typespec=typespec.strip().lower()
m1=selectpattern.match(markouterparen(ll))
if not m1:
@@ -1208,25 +1208,25 @@ def cracktypespec0(typespec,ll):
return
d=m1.groupdict()
for k in list(d.keys()): d[k]=unmarkouterparen(d[k])
- if typespec in ['complex','integer','logical','real','character','type']:
+ if typespec in ['complex', 'integer', 'logical', 'real', 'character', 'type']:
selector=d['this']
ll=d['after']
i=ll.find('::')
if i>=0:
attr=ll[:i].strip()
ll=ll[i+2:]
- return typespec,selector,attr,ll
+ return typespec, selector, attr, ll
#####
-namepattern=re.compile(r'\s*(?P<name>\b[\w]+\b)\s*(?P<after>.*)\s*\Z',re.I)
-kindselector=re.compile(r'\s*(\(\s*(kind\s*=)?\s*(?P<kind>.*)\s*\)|[*]\s*(?P<kind2>.*?))\s*\Z',re.I)
-charselector=re.compile(r'\s*(\((?P<lenkind>.*)\)|[*]\s*(?P<charlen>.*))\s*\Z',re.I)
-lenkindpattern=re.compile(r'\s*(kind\s*=\s*(?P<kind>.*?)\s*(@,@\s*len\s*=\s*(?P<len>.*)|)|(len\s*=\s*|)(?P<len2>.*?)\s*(@,@\s*(kind\s*=\s*|)(?P<kind2>.*)|))\s*\Z',re.I)
-lenarraypattern=re.compile(r'\s*(@\(@\s*(?!/)\s*(?P<array>.*?)\s*@\)@\s*[*]\s*(?P<len>.*?)|([*]\s*(?P<len2>.*?)|)\s*(@\(@\s*(?!/)\s*(?P<array2>.*?)\s*@\)@|))\s*(=\s*(?P<init>.*?)|(@\(@|)/\s*(?P<init2>.*?)\s*/(@\)@|)|)\s*\Z',re.I)
+namepattern=re.compile(r'\s*(?P<name>\b[\w]+\b)\s*(?P<after>.*)\s*\Z', re.I)
+kindselector=re.compile(r'\s*(\(\s*(kind\s*=)?\s*(?P<kind>.*)\s*\)|[*]\s*(?P<kind2>.*?))\s*\Z', re.I)
+charselector=re.compile(r'\s*(\((?P<lenkind>.*)\)|[*]\s*(?P<charlen>.*))\s*\Z', re.I)
+lenkindpattern=re.compile(r'\s*(kind\s*=\s*(?P<kind>.*?)\s*(@,@\s*len\s*=\s*(?P<len>.*)|)|(len\s*=\s*|)(?P<len2>.*?)\s*(@,@\s*(kind\s*=\s*|)(?P<kind2>.*)|))\s*\Z', re.I)
+lenarraypattern=re.compile(r'\s*(@\(@\s*(?!/)\s*(?P<array>.*?)\s*@\)@\s*[*]\s*(?P<len>.*?)|([*]\s*(?P<len2>.*?)|)\s*(@\(@\s*(?!/)\s*(?P<array2>.*?)\s*@\)@|))\s*(=\s*(?P<init>.*?)|(@\(@|)/\s*(?P<init2>.*?)\s*/(@\)@|)|)\s*\Z', re.I)
def removespaces(expr):
expr=expr.strip()
if len(expr)<=1: return expr
expr2=expr[0]
- for i in range(1,len(expr)-1):
+ for i in range(1, len(expr)-1):
if expr[i]==' ' and \
((expr[i+1] in "()[]{}=+-/* ") or (expr[i-1] in "()[]{}=+-/* ")): continue
expr2=expr2+expr[i]
@@ -1238,20 +1238,20 @@ def markinnerspaces(line):
cc1='"'
cb=''
for c in line:
- if cb=='\\' and c in ['\\','\'','"']:
+ if cb=='\\' and c in ['\\', '\'', '"']:
l=l+c;
cb=c
continue
- if f==0 and c in ['\'','"']: cc=c; cc1={'\'':'"','"':'\''}[c]
+ if f==0 and c in ['\'', '"']: cc=c; cc1={'\'':'"','"':'\''}[c]
if c==cc:f=f+1
elif c==cc:f=f-1
elif c==' ' and f==1: l=l+'@_@'; continue
l=l+c;cb=c
return l
-def updatevars(typespec,selector,attrspec,entitydecl):
- global groupcache,groupcounter
+def updatevars(typespec, selector, attrspec, entitydecl):
+ global groupcache, groupcounter
last_name = None
- kindselect,charselect,typename=cracktypespec(typespec,selector)
+ kindselect, charselect, typename=cracktypespec(typespec, selector)
if attrspec:
attrspec=[x.strip() for x in markoutercomma(attrspec).split('@,@')]
l = []
@@ -1268,8 +1268,8 @@ def updatevars(typespec,selector,attrspec,entitydecl):
el=[x.strip() for x in markoutercomma(entitydecl).split('@,@')]
el1=[]
for e in el:
- for e1 in [x.strip() for x in markoutercomma(removespaces(markinnerspaces(e)),comma=' ').split('@ @')]:
- if e1: el1.append(e1.replace('@_@',' '))
+ for e1 in [x.strip() for x in markoutercomma(removespaces(markinnerspaces(e)), comma=' ').split('@ @')]:
+ if e1: el1.append(e1.replace('@_@', ' '))
for e in el1:
m=namepattern.match(e)
if not m:
@@ -1283,29 +1283,29 @@ def updatevars(typespec,selector,attrspec,entitydecl):
if not_has_typespec:
edecl['typespec']=typespec
elif typespec and (not typespec==edecl['typespec']):
- outmess('updatevars: attempt to change the type of "%s" ("%s") to "%s". Ignoring.\n' % (ename,edecl['typespec'],typespec))
+ outmess('updatevars: attempt to change the type of "%s" ("%s") to "%s". Ignoring.\n' % (ename, edecl['typespec'], typespec))
if 'kindselector' not in edecl:
edecl['kindselector']=copy.copy(kindselect)
elif kindselect:
for k in list(kindselect.keys()):
if k in edecl['kindselector'] and (not kindselect[k]==edecl['kindselector'][k]):
- outmess('updatevars: attempt to change the kindselector "%s" of "%s" ("%s") to "%s". Ignoring.\n' % (k,ename,edecl['kindselector'][k],kindselect[k]))
+ outmess('updatevars: attempt to change the kindselector "%s" of "%s" ("%s") to "%s". Ignoring.\n' % (k, ename, edecl['kindselector'][k], kindselect[k]))
else: edecl['kindselector'][k]=copy.copy(kindselect[k])
if 'charselector' not in edecl and charselect:
if not_has_typespec:
edecl['charselector']=charselect
else:
errmess('updatevars:%s: attempt to change empty charselector to %r. Ignoring.\n' \
- %(ename,charselect))
+ %(ename, charselect))
elif charselect:
for k in list(charselect.keys()):
if k in edecl['charselector'] and (not charselect[k]==edecl['charselector'][k]):
- outmess('updatevars: attempt to change the charselector "%s" of "%s" ("%s") to "%s". Ignoring.\n' % (k,ename,edecl['charselector'][k],charselect[k]))
+ outmess('updatevars: attempt to change the charselector "%s" of "%s" ("%s") to "%s". Ignoring.\n' % (k, ename, edecl['charselector'][k], charselect[k]))
else: edecl['charselector'][k]=copy.copy(charselect[k])
if 'typename' not in edecl:
edecl['typename']=typename
elif typename and (not edecl['typename']==typename):
- outmess('updatevars: attempt to change the typename of "%s" ("%s") to "%s". Ignoring.\n' % (ename,edecl['typename'],typename))
+ outmess('updatevars: attempt to change the typename of "%s" ("%s") to "%s". Ignoring.\n' % (ename, edecl['typename'], typename))
if 'attrspec' not in edecl:
edecl['attrspec']=copy.copy(attrspec)
elif attrspec:
@@ -1322,7 +1322,7 @@ def updatevars(typespec,selector,attrspec,entitydecl):
m1=lenarraypattern.match(markouterparen(m.group('after')))
if m1:
d1=m1.groupdict()
- for lk in ['len','array','init']:
+ for lk in ['len', 'array', 'init']:
if d1[lk+'2'] is not None: d1[lk]=d1[lk+'2']; del d1[lk+'2']
for k in list(d1.keys()):
if d1[k] is not None: d1[k]=unmarkouterparen(d1[k])
@@ -1334,7 +1334,7 @@ def updatevars(typespec,selector,attrspec,entitydecl):
else:
d1['array']=d1['array']+','+d1['len']
del d1['len']
- errmess('updatevars: "%s %s" is mapped to "%s %s(%s)"\n'%(typespec,e,typespec,ename,d1['array']))
+ errmess('updatevars: "%s %s" is mapped to "%s %s(%s)"\n'%(typespec, e, typespec, ename, d1['array']))
if 'array' in d1:
dm = 'dimension(%s)'%d1['array']
if 'attrspec' not in edecl or (not edecl['attrspec']):
@@ -1345,11 +1345,11 @@ def updatevars(typespec,selector,attrspec,entitydecl):
if dm1[:9]=='dimension' and dm1!=dm:
del edecl['attrspec'][-1]
errmess('updatevars:%s: attempt to change %r to %r. Ignoring.\n' \
- % (ename,dm1,dm))
+ % (ename, dm1, dm))
break
if 'len' in d1:
- if typespec in ['complex','integer','logical','real']:
+ if typespec in ['complex', 'integer', 'logical', 'real']:
if ('kindselector' not in edecl) or (not edecl['kindselector']):
edecl['kindselector']={}
edecl['kindselector']['*']=d1['len']
@@ -1361,7 +1361,7 @@ def updatevars(typespec,selector,attrspec,entitydecl):
edecl['charselector']['*']=d1['len']
if 'init' in d1:
if '=' in edecl and (not edecl['=']==d1['init']):
- outmess('updatevars: attempt to change the init expression of "%s" ("%s") to "%s". Ignoring.\n' % (ename,edecl['='],d1['init']))
+ outmess('updatevars: attempt to change the init expression of "%s" ("%s") to "%s". Ignoring.\n' % (ename, edecl['='], d1['init']))
else:
edecl['=']=d1['init']
else:
@@ -1375,12 +1375,12 @@ def updatevars(typespec,selector,attrspec,entitydecl):
last_name = ename
return last_name
-def cracktypespec(typespec,selector):
+def cracktypespec(typespec, selector):
kindselect=None
charselect=None
typename=None
if selector:
- if typespec in ['complex','integer','logical','real']:
+ if typespec in ['complex', 'integer', 'logical', 'real']:
kindselect=kindselector.match(selector)
if not kindselect:
outmess('cracktypespec: no kindselector pattern found for %s\n'%(repr(selector)))
@@ -1390,7 +1390,7 @@ def cracktypespec(typespec,selector):
del kindselect['kind2']
for k in list(kindselect.keys()):
if not kindselect[k]: del kindselect[k]
- for k,i in list(kindselect.items()):
+ for k, i in list(kindselect.items()):
kindselect[k] = rmbadname1(i)
elif typespec=='character':
charselect=charselector.match(selector)
@@ -1403,7 +1403,7 @@ def cracktypespec(typespec,selector):
if charselect['lenkind']:
lenkind=lenkindpattern.match(markoutercomma(charselect['lenkind']))
lenkind=lenkind.groupdict()
- for lk in ['len','kind']:
+ for lk in ['len', 'kind']:
if lenkind[lk+'2']:
lenkind[lk]=lenkind[lk+'2']
charselect[lk]=lenkind[lk]
@@ -1411,15 +1411,15 @@ def cracktypespec(typespec,selector):
del charselect['lenkind']
for k in list(charselect.keys()):
if not charselect[k]: del charselect[k]
- for k,i in list(charselect.items()):
+ for k, i in list(charselect.items()):
charselect[k] = rmbadname1(i)
elif typespec=='type':
- typename=re.match(r'\s*\(\s*(?P<name>\w+)\s*\)',selector,re.I)
+ typename=re.match(r'\s*\(\s*(?P<name>\w+)\s*\)', selector, re.I)
if typename: typename=typename.group('name')
else: outmess('cracktypespec: no typename found in %s\n'%(repr(typespec+selector)))
else:
outmess('cracktypespec: no selector used for %s\n'%(repr(selector)))
- return kindselect,charselect,typename
+ return kindselect, charselect, typename
######
def setattrspec(decl,attr,force=0):
if not decl:
@@ -1479,7 +1479,7 @@ def getblockname(block,unknown='unknown'):
def setmesstext(block):
global filepositiontext
try:
- filepositiontext='In: %s:%s\n'%(block['from'],block['name'])
+ filepositiontext='In: %s:%s\n'%(block['from'], block['name'])
except:
pass
@@ -1498,7 +1498,7 @@ def get_useparameters(block, param_map=None):
usedict = get_usedict(block)
if not usedict:
return param_map
- for usename,mapping in list(usedict.items()):
+ for usename, mapping in list(usedict.items()):
usename = usename.lower()
if usename not in f90modulevars:
outmess('get_useparameters: no module %s info used by %s\n' % (usename, block.get('name')))
@@ -1510,10 +1510,10 @@ def get_useparameters(block, param_map=None):
# XXX: apply mapping
if mapping:
errmess('get_useparameters: mapping for %s not impl.' % (mapping))
- for k,v in list(params.items()):
+ for k, v in list(params.items()):
if k in param_map:
outmess('get_useparameters: overriding parameter %s with'\
- ' value from module %s' % (repr(k),repr(usename)))
+ ' value from module %s' % (repr(k), repr(usename)))
param_map[k] = v
return param_map
@@ -1525,11 +1525,11 @@ def postcrack2(block,tab='',param_map=None):
if isinstance(block, list):
ret = []
for g in block:
- g = postcrack2(g,tab=tab+'\t',param_map=param_map)
+ g = postcrack2(g, tab=tab+'\t', param_map=param_map)
ret.append(g)
return ret
setmesstext(block)
- outmess('%sBlock: %s\n'%(tab,block['name']),0)
+ outmess('%sBlock: %s\n'%(tab, block['name']), 0)
if param_map is None:
param_map = get_useparameters(block)
@@ -1546,7 +1546,7 @@ def postcrack2(block,tab='',param_map=None):
kind['kind'] = param_map[val]
new_body = []
for b in block['body']:
- b = postcrack2(b,tab=tab+'\t',param_map=param_map)
+ b = postcrack2(b, tab=tab+'\t', param_map=param_map)
new_body.append(b)
block['body'] = new_body
@@ -1558,13 +1558,13 @@ def postcrack(block,args=None,tab=''):
function return values
determine expression types if in argument list
"""
- global usermodules,onlyfunctions
+ global usermodules, onlyfunctions
if isinstance(block, list):
gret=[]
uret=[]
for g in block:
setmesstext(g)
- g=postcrack(g,tab=tab+'\t')
+ g=postcrack(g, tab=tab+'\t')
if 'name' in g and '__user__' in g['name']: # sort user routines to appear first
uret.append(g)
else:
@@ -1575,7 +1575,7 @@ def postcrack(block,args=None,tab=''):
raise Exception('postcrack: Expected block dictionary instead of ' + \
str(block))
if 'name' in block and not block['name']=='unknown_interface':
- outmess('%sBlock: %s\n'%(tab,block['name']),0)
+ outmess('%sBlock: %s\n'%(tab, block['name']), 0)
blocktype=block['block']
block=analyzeargs(block)
block=analyzecommon(block)
@@ -1583,7 +1583,7 @@ def postcrack(block,args=None,tab=''):
block['sortvars']=sortvarnames(block['vars'])
if 'args' in block and block['args']:
args=block['args']
- block['body']=analyzebody(block,args,tab=tab)
+ block['body']=analyzebody(block, args, tab=tab)
userisdefined=[]
## fromuser = []
@@ -1610,8 +1610,8 @@ def postcrack(block,args=None,tab=''):
mname='unknown__user__routines'
if mname in userisdefined:
i=1
- while '%s_%i'%(mname,i) in userisdefined: i=i+1
- mname='%s_%i'%(mname,i)
+ while '%s_%i'%(mname, i) in userisdefined: i=i+1
+ mname='%s_%i'%(mname, i)
interface={'block':'interface','body':[],'vars':{},'name':name+'_user_interface'}
for e in block['externals']:
## if e in fromuser:
@@ -1687,7 +1687,7 @@ def analyzecommon(block):
for k in list(block['common'].keys()):
comvars=[]
for e in block['common'][k]:
- m=re.match(r'\A\s*\b(?P<name>.*?)\b\s*(\((?P<dims>.*?)\)|)\s*\Z',e,re.I)
+ m=re.match(r'\A\s*\b(?P<name>.*?)\b\s*(\((?P<dims>.*?)\)|)\s*\Z', e, re.I)
if m:
dims=[]
if m.group('dims'):
@@ -1705,7 +1705,7 @@ def analyzecommon(block):
if n not in commonvars: commonvars.append(n)
else:
n=e
- errmess('analyzecommon: failed to extract "<name>[(<dims>)]" from "%s" in common /%s/.\n'%(e,k))
+ errmess('analyzecommon: failed to extract "<name>[(<dims>)]" from "%s" in common /%s/.\n'%(e, k))
comvars.append(n)
block['common'][k]=comvars
if 'commonvars' not in block:
@@ -1715,12 +1715,12 @@ def analyzecommon(block):
return block
def analyzebody(block,args,tab=''):
- global usermodules,skipfuncs,onlyfuncs,f90modulevars
+ global usermodules, skipfuncs, onlyfuncs, f90modulevars
setmesstext(block)
body=[]
for b in block['body']:
b['parent_block'] = block
- if b['block'] in ['function','subroutine']:
+ if b['block'] in ['function', 'subroutine']:
if args is not None and b['name'] not in args:
continue
else:
@@ -1732,11 +1732,11 @@ def analyzebody(block,args,tab=''):
b['saved_interface'] = crack2fortrangen(b, '\n'+' '*6, as_interface=True)
else: as_=args
- b=postcrack(b,as_,tab=tab+'\t')
+ b=postcrack(b, as_, tab=tab+'\t')
if b['block']=='interface' and not b['body']:
if 'f2pyenhancements' not in b:
continue
- if b['block'].replace(' ','')=='pythonmodule':
+ if b['block'].replace(' ', '')=='pythonmodule':
usermodules.append(b)
else:
if b['block']=='module':
@@ -1755,113 +1755,113 @@ def buildimplicitrules(block):
outmess('buildimplicitrules: no implicit rules for routine %s.\n'%repr(block['name']))
else:
for k in list(block['implicit'].keys()):
- if block['implicit'][k].get('typespec') not in ['static','automatic']:
+ if block['implicit'][k].get('typespec') not in ['static', 'automatic']:
implicitrules[k]=block['implicit'][k]
else:
attrrules[k]=block['implicit'][k]['typespec']
- return implicitrules,attrrules
+ return implicitrules, attrrules
def myeval(e,g=None,l=None):
- r = eval(e,g,l)
- if type(r) in [type(0),type(0.0)]:
+ r = eval(e, g, l)
+ if type(r) in [type(0), type(0.0)]:
return r
raise ValueError('r=%r' % (r))
-getlincoef_re_1 = re.compile(r'\A\b\w+\b\Z',re.I)
-def getlincoef(e,xset): # e = a*x+b ; x in xset
+getlincoef_re_1 = re.compile(r'\A\b\w+\b\Z', re.I)
+def getlincoef(e, xset): # e = a*x+b ; x in xset
try:
- c = int(myeval(e,{},{}))
- return 0,c,None
+ c = int(myeval(e, {}, {}))
+ return 0, c, None
except: pass
if getlincoef_re_1.match(e):
- return 1,0,e
+ return 1, 0, e
len_e = len(e)
for x in xset:
if len(x)>len_e: continue
if re.search(r'\w\s*\([^)]*\b'+x+r'\b', e):
# skip function calls having x as an argument, e.g max(1, x)
continue
- re_1 = re.compile(r'(?P<before>.*?)\b'+x+r'\b(?P<after>.*)',re.I)
+ re_1 = re.compile(r'(?P<before>.*?)\b'+x+r'\b(?P<after>.*)', re.I)
m = re_1.match(e)
if m:
try:
m1 = re_1.match(e)
while m1:
- ee = '%s(%s)%s'%(m1.group('before'),0,m1.group('after'))
+ ee = '%s(%s)%s'%(m1.group('before'), 0, m1.group('after'))
m1 = re_1.match(ee)
- b = myeval(ee,{},{})
+ b = myeval(ee, {}, {})
m1 = re_1.match(e)
while m1:
- ee = '%s(%s)%s'%(m1.group('before'),1,m1.group('after'))
+ ee = '%s(%s)%s'%(m1.group('before'), 1, m1.group('after'))
m1 = re_1.match(ee)
- a = myeval(ee,{},{}) - b
+ a = myeval(ee, {}, {}) - b
m1 = re_1.match(e)
while m1:
- ee = '%s(%s)%s'%(m1.group('before'),0.5,m1.group('after'))
+ ee = '%s(%s)%s'%(m1.group('before'), 0.5, m1.group('after'))
m1 = re_1.match(ee)
- c = myeval(ee,{},{})
+ c = myeval(ee, {}, {})
# computing another point to be sure that expression is linear
m1 = re_1.match(e)
while m1:
- ee = '%s(%s)%s'%(m1.group('before'),1.5,m1.group('after'))
+ ee = '%s(%s)%s'%(m1.group('before'), 1.5, m1.group('after'))
m1 = re_1.match(ee)
- c2 = myeval(ee,{},{})
+ c2 = myeval(ee, {}, {})
if (a*0.5+b==c and a*1.5+b==c2):
- return a,b,x
+ return a, b, x
except: pass
break
- return None,None,None
+ return None, None, None
_varname_match = re.compile(r'\A[a-z]\w*\Z').match
def getarrlen(dl,args,star='*'):
edl = []
- try: edl.append(myeval(dl[0],{},{}))
+ try: edl.append(myeval(dl[0], {}, {}))
except: edl.append(dl[0])
- try: edl.append(myeval(dl[1],{},{}))
+ try: edl.append(myeval(dl[1], {}, {}))
except: edl.append(dl[1])
if isinstance(edl[0], int):
p1 = 1-edl[0]
if p1==0: d = str(dl[1])
- elif p1<0: d = '%s-%s'%(dl[1],-p1)
- else: d = '%s+%s'%(dl[1],p1)
+ elif p1<0: d = '%s-%s'%(dl[1], -p1)
+ else: d = '%s+%s'%(dl[1], p1)
elif isinstance(edl[1], int):
p1 = 1+edl[1]
if p1==0: d='-(%s)' % (dl[0])
- else: d='%s-(%s)' % (p1,dl[0])
- else: d = '%s-(%s)+1'%(dl[1],dl[0])
- try: return repr(myeval(d,{},{})),None,None
+ else: d='%s-(%s)' % (p1, dl[0])
+ else: d = '%s-(%s)+1'%(dl[1], dl[0])
+ try: return repr(myeval(d, {}, {})), None, None
except: pass
- d1,d2=getlincoef(dl[0],args),getlincoef(dl[1],args)
- if None not in [d1[0],d2[0]]:
- if (d1[0],d2[0])==(0,0):
- return repr(d2[1]-d1[1]+1),None,None
+ d1, d2=getlincoef(dl[0], args), getlincoef(dl[1], args)
+ if None not in [d1[0], d2[0]]:
+ if (d1[0], d2[0])==(0, 0):
+ return repr(d2[1]-d1[1]+1), None, None
b = d2[1] - d1[1] + 1
- d1 = (d1[0],0,d1[2])
- d2 = (d2[0],b,d2[2])
+ d1 = (d1[0], 0, d1[2])
+ d2 = (d2[0], b, d2[2])
if d1[0]==0 and d2[2] in args:
- if b<0: return '%s * %s - %s'%(d2[0],d2[2],-b),d2[2],'+%s)/(%s)'%(-b,d2[0])
- elif b: return '%s * %s + %s'%(d2[0],d2[2],b),d2[2],'-%s)/(%s)'%(b,d2[0])
- else: return '%s * %s'%(d2[0],d2[2]),d2[2],')/(%s)'%(d2[0])
+ if b<0: return '%s * %s - %s'%(d2[0], d2[2], -b), d2[2], '+%s)/(%s)'%(-b, d2[0])
+ elif b: return '%s * %s + %s'%(d2[0], d2[2], b), d2[2], '-%s)/(%s)'%(b, d2[0])
+ else: return '%s * %s'%(d2[0], d2[2]), d2[2], ')/(%s)'%(d2[0])
if d2[0]==0 and d1[2] in args:
- if b<0: return '%s * %s - %s'%(-d1[0],d1[2],-b),d1[2],'+%s)/(%s)'%(-b,-d1[0])
- elif b: return '%s * %s + %s'%(-d1[0],d1[2],b),d1[2],'-%s)/(%s)'%(b,-d1[0])
- else: return '%s * %s'%(-d1[0],d1[2]),d1[2],')/(%s)'%(-d1[0])
+ if b<0: return '%s * %s - %s'%(-d1[0], d1[2], -b), d1[2], '+%s)/(%s)'%(-b, -d1[0])
+ elif b: return '%s * %s + %s'%(-d1[0], d1[2], b), d1[2], '-%s)/(%s)'%(b, -d1[0])
+ else: return '%s * %s'%(-d1[0], d1[2]), d1[2], ')/(%s)'%(-d1[0])
if d1[2]==d2[2] and d1[2] in args:
a = d2[0] - d1[0]
- if not a: return repr(b),None,None
- if b<0: return '%s * %s - %s'%(a,d1[2],-b),d2[2],'+%s)/(%s)'%(-b,a)
- elif b: return '%s * %s + %s'%(a,d1[2],b),d2[2],'-%s)/(%s)'%(b,a)
- else: return '%s * %s'%(a,d1[2]),d2[2],')/(%s)'%(a)
+ if not a: return repr(b), None, None
+ if b<0: return '%s * %s - %s'%(a, d1[2], -b), d2[2], '+%s)/(%s)'%(-b, a)
+ elif b: return '%s * %s + %s'%(a, d1[2], b), d2[2], '-%s)/(%s)'%(b, a)
+ else: return '%s * %s'%(a, d1[2]), d2[2], ')/(%s)'%(a)
if d1[0]==d2[0]==1:
c = str(d1[2])
if c not in args:
if _varname_match(c):
outmess('\tgetarrlen:variable "%s" undefined\n' % (c))
c = '(%s)'%c
- if b==0: d='%s-%s' % (d2[2],c)
- elif b<0: d='%s-%s-%s' % (d2[2],c,-b)
- else: d='%s-%s+%s' % (d2[2],c,b)
+ if b==0: d='%s-%s' % (d2[2], c)
+ elif b<0: d='%s-%s-%s' % (d2[2], c, -b)
+ else: d='%s-%s+%s' % (d2[2], c, b)
elif d1[0]==0:
c2 = str(d2[2])
if c2 not in args:
@@ -1870,11 +1870,11 @@ def getarrlen(dl,args,star='*'):
c2 = '(%s)'%c2
if d2[0]==1: pass
elif d2[0]==-1: c2='-%s' %c2
- else: c2='%s*%s'%(d2[0],c2)
+ else: c2='%s*%s'%(d2[0], c2)
if b==0: d=c2
- elif b<0: d='%s-%s' % (c2,-b)
- else: d='%s+%s' % (c2,b)
+ elif b<0: d='%s-%s' % (c2, -b)
+ else: d='%s+%s' % (c2, b)
elif d2[0]==0:
c1 = str(d1[2])
if c1 not in args:
@@ -1883,12 +1883,12 @@ def getarrlen(dl,args,star='*'):
c1 = '(%s)'%c1
if d1[0]==1: c1='-%s'%c1
elif d1[0]==-1: c1='+%s'%c1
- elif d1[0]<0: c1='+%s*%s'%(-d1[0],c1)
- else: c1 = '-%s*%s' % (d1[0],c1)
+ elif d1[0]<0: c1='+%s*%s'%(-d1[0], c1)
+ else: c1 = '-%s*%s' % (d1[0], c1)
if b==0: d=c1
- elif b<0: d='%s-%s' % (c1,-b)
- else: d='%s+%s' % (c1,b)
+ elif b<0: d='%s-%s' % (c1, -b)
+ else: d='%s+%s' % (c1, b)
else:
c1 = str(d1[2])
if c1 not in args:
@@ -1897,8 +1897,8 @@ def getarrlen(dl,args,star='*'):
c1 = '(%s)'%c1
if d1[0]==1: c1='-%s'%c1
elif d1[0]==-1: c1='+%s'%c1
- elif d1[0]<0: c1='+%s*%s'%(-d1[0],c1)
- else: c1 = '-%s*%s' % (d1[0],c1)
+ elif d1[0]<0: c1='+%s*%s'%(-d1[0], c1)
+ else: c1 = '-%s*%s' % (d1[0], c1)
c2 = str(d2[2])
if c2 not in args:
@@ -1907,25 +1907,25 @@ def getarrlen(dl,args,star='*'):
c2 = '(%s)'%c2
if d2[0]==1: pass
elif d2[0]==-1: c2='-%s' %c2
- else: c2='%s*%s'%(d2[0],c2)
+ else: c2='%s*%s'%(d2[0], c2)
- if b==0: d='%s%s' % (c2,c1)
- elif b<0: d='%s%s-%s' % (c2,c1,-b)
- else: d='%s%s+%s' % (c2,c1,b)
- return d,None,None
+ if b==0: d='%s%s' % (c2, c1)
+ elif b<0: d='%s%s-%s' % (c2, c1, -b)
+ else: d='%s%s+%s' % (c2, c1, b)
+ return d, None, None
-word_pattern = re.compile(r'\b[a-z][\w$]*\b',re.I)
+word_pattern = re.compile(r'\b[a-z][\w$]*\b', re.I)
def _get_depend_dict(name, vars, deps):
if name in vars:
- words = vars[name].get('depend',[])
+ words = vars[name].get('depend', [])
if '=' in vars[name] and not isstring(vars[name]):
for word in word_pattern.findall(vars[name]['=']):
if word not in words and word in vars:
words.append(word)
for word in words[:]:
- for w in deps.get(word,[]) \
+ for w in deps.get(word, []) \
or _get_depend_dict(word, vars, deps):
if w not in words:
words.append(w)
@@ -1999,9 +1999,9 @@ def _selected_real_kind_func(p, r=0, radix=0):
def get_parameters(vars, global_params={}):
params = copy.copy(global_params)
g_params = copy.copy(global_params)
- for name,func in [('kind',_kind_func),
- ('selected_int_kind',_selected_int_kind_func),
- ('selected_real_kind',_selected_real_kind_func),
+ for name, func in [('kind', _kind_func),
+ ('selected_int_kind', _selected_int_kind_func),
+ ('selected_real_kind', _selected_real_kind_func),
]:
if name not in g_params:
g_params[name] = func
@@ -2009,22 +2009,22 @@ def get_parameters(vars, global_params={}):
for n in get_sorted_names(vars):
if 'attrspec' in vars[n] and 'parameter' in vars[n]['attrspec']:
param_names.append(n)
- kind_re = re.compile(r'\bkind\s*\(\s*(?P<value>.*)\s*\)',re.I)
- selected_int_kind_re = re.compile(r'\bselected_int_kind\s*\(\s*(?P<value>.*)\s*\)',re.I)
- selected_kind_re = re.compile(r'\bselected_(int|real)_kind\s*\(\s*(?P<value>.*)\s*\)',re.I)
+ kind_re = re.compile(r'\bkind\s*\(\s*(?P<value>.*)\s*\)', re.I)
+ selected_int_kind_re = re.compile(r'\bselected_int_kind\s*\(\s*(?P<value>.*)\s*\)', re.I)
+ selected_kind_re = re.compile(r'\bselected_(int|real)_kind\s*\(\s*(?P<value>.*)\s*\)', re.I)
for n in param_names:
if '=' in vars[n]:
v = vars[n]['=']
if islogical(vars[n]):
v = v.lower()
for repl in [
- ('.false.','False'),
- ('.true.','True'),
+ ('.false.', 'False'),
+ ('.true.', 'True'),
#TODO: test .eq., .neq., etc replacements.
]:
v = v.replace(*repl)
- v = kind_re.sub(r'kind("\1")',v)
- v = selected_int_kind_re.sub(r'selected_int_kind(\1)',v)
+ v = kind_re.sub(r'kind("\1")', v)
+ v = selected_int_kind_re.sub(r'selected_int_kind(\1)', v)
if isinteger(vars[n]) and not selected_kind_re.match(v):
v = v.split('_')[0]
if isdouble(vars[n]):
@@ -2037,11 +2037,11 @@ def get_parameters(vars, global_params={}):
if v[0]=='(' and v[-1]==')':
l = markoutercomma(v[1:-1]).split('@,@')
try:
- params[n] = eval(v,g_params,params)
+ params[n] = eval(v, g_params, params)
except Exception as msg:
params[n] = v
#print params
- outmess('get_parameters: got "%s" on %s\n' % (msg,repr(v)))
+ outmess('get_parameters: got "%s" on %s\n' % (msg, repr(v)))
if isstring(vars[n]) and isinstance(params[n], int):
params[n] = chr(params[n])
nl = n.lower()
@@ -2052,30 +2052,30 @@ def get_parameters(vars, global_params={}):
outmess('get_parameters:parameter %s does not have value?!\n'%(repr(n)))
return params
-def _eval_length(length,params):
- if length in ['(:)','(*)','*']:
+def _eval_length(length, params):
+ if length in ['(:)', '(*)', '*']:
return '(*)'
- return _eval_scalar(length,params)
+ return _eval_scalar(length, params)
_is_kind_number = re.compile(r'\d+_').match
-def _eval_scalar(value,params):
+def _eval_scalar(value, params):
if _is_kind_number(value):
value = value.split('_')[0]
try:
- value = str(eval(value,{},params))
+ value = str(eval(value, {}, params))
except (NameError, SyntaxError):
return value
except Exception as msg:
errmess('"%s" in evaluating %r '\
'(available names: %s)\n' \
- % (msg,value,list(params.keys())))
+ % (msg, value, list(params.keys())))
return value
def analyzevars(block):
global f90modulevars
setmesstext(block)
- implicitrules,attrrules=buildimplicitrules(block)
+ implicitrules, attrrules=buildimplicitrules(block)
vars=copy.copy(block['vars'])
if block['block']=='function' and block['name'] not in vars:
vars[block['name']]={}
@@ -2084,9 +2084,9 @@ def analyzevars(block):
if 'attrspec' in block['vars']['']:
gen=block['vars']['']['attrspec']
for n in list(vars.keys()):
- for k in ['public','private']:
+ for k in ['public', 'private']:
if k in gen:
- vars[n]=setattrspec(vars[n],k)
+ vars[n]=setattrspec(vars[n], k)
svars=[]
args = block['args']
for a in args:
@@ -2109,10 +2109,10 @@ def analyzevars(block):
try:
dep_matches[n]
except KeyError:
- dep_matches[n] = re.compile(r'.*\b%s\b'%(v),re.I).match
+ dep_matches[n] = re.compile(r'.*\b%s\b'%(v), re.I).match
for n in svars:
if n[0] in list(attrrules.keys()):
- vars[n]=setattrspec(vars[n],attrrules[n[0]])
+ vars[n]=setattrspec(vars[n], attrrules[n[0]])
if 'typespec' not in vars[n]:
if not('attrspec' in vars[n] and 'external' in vars[n]['attrspec']):
if implicitrules:
@@ -2124,15 +2124,15 @@ def analyzevars(block):
vars[n][k]=implicitrules[ln0][k]
elif k=='attrspec':
for l in implicitrules[ln0][k]:
- vars[n]=setattrspec(vars[n],l)
+ vars[n]=setattrspec(vars[n], l)
elif n in block['args']:
- outmess('analyzevars: typespec of variable %s is not defined in routine %s.\n'%(repr(n),block['name']))
+ outmess('analyzevars: typespec of variable %s is not defined in routine %s.\n'%(repr(n), block['name']))
if 'charselector' in vars[n]:
if 'len' in vars[n]['charselector']:
l = vars[n]['charselector']['len']
try:
- l = str(eval(l,{},params))
+ l = str(eval(l, {}, params))
except:
pass
vars[n]['charselector']['len'] = l
@@ -2141,7 +2141,7 @@ def analyzevars(block):
if 'kind' in vars[n]['kindselector']:
l = vars[n]['kindselector']['kind']
try:
- l = str(eval(l,{},params))
+ l = str(eval(l, {}, params))
except:
pass
vars[n]['kindselector']['kind'] = l
@@ -2151,14 +2151,14 @@ def analyzevars(block):
attr=vars[n]['attrspec']
attr.reverse()
vars[n]['attrspec']=[]
- dim,intent,depend,check,note=None,None,None,None,None
+ dim, intent, depend, check, note=None, None, None, None, None
for a in attr:
if a[:9]=='dimension': dim=(a[9:].strip())[1:-1]
elif a[:6]=='intent': intent=(a[6:].strip())[1:-1]
elif a[:6]=='depend': depend=(a[6:].strip())[1:-1]
elif a[:5]=='check': check=(a[5:].strip())[1:-1]
elif a[:4]=='note': note=(a[4:].strip())[1:-1]
- else: vars[n]=setattrspec(vars[n],a)
+ else: vars[n]=setattrspec(vars[n], a)
if intent:
if 'intent' not in vars[n]:
vars[n]['intent']=[]
@@ -2167,8 +2167,8 @@ def analyzevars(block):
vars[n]['intent'].append(c)
intent=None
if note:
- note=note.replace('\\n\\n','\n\n')
- note=note.replace('\\n ','\n')
+ note=note.replace('\\n\\n', '\n\n')
+ note=note.replace('\\n ', '\n')
if 'note' not in vars[n]:
vars[n]['note']=[note]
else:
@@ -2197,23 +2197,23 @@ def analyzevars(block):
if d in params:
d = str(params[d])
for p in list(params.keys()):
- m = re.match(r'(?P<before>.*?)\b'+p+r'\b(?P<after>.*)',d,re.I)
+ m = re.match(r'(?P<before>.*?)\b'+p+r'\b(?P<after>.*)', d, re.I)
if m:
#outmess('analyzevars:replacing parameter %s in %s (dimension of %s) with %s\n'%(`p`,`d`,`n`,`params[p]`))
d = m.group('before')+str(params[p])+m.group('after')
if d==star:
dl = [star]
else:
- dl=markoutercomma(d,':').split('@:@')
+ dl=markoutercomma(d, ':').split('@:@')
if len(dl)==2 and '*' in dl: # e.g. dimension(5:*)
dl = ['*']
d = '*'
- if len(dl)==1 and not dl[0]==star: dl = ['1',dl[0]]
+ if len(dl)==1 and not dl[0]==star: dl = ['1', dl[0]]
if len(dl)==2:
- d,v,di = getarrlen(dl,list(block['vars'].keys()))
+ d, v, di = getarrlen(dl, list(block['vars'].keys()))
if d[:4] == '1 * ': d = d[4:]
if di and di[-4:] == '/(1)': di = di[:-4]
- if v: savelindims[d] = v,di
+ if v: savelindims[d] = v, di
vars[n]['dimension'].append(d)
if 'dimension' in vars[n]:
if isintent_c(vars[n]):
@@ -2226,9 +2226,9 @@ def analyzevars(block):
if '*' in d:
d = d['*']
errmess('analyzevars: character array "character*%s %s(%s)" is considered as "character %s(%s)"; "intent(c)" is forced.\n'\
- %(d,n,
+ %(d, n,
','.join(vars[n]['dimension']),
- n,','.join(vars[n]['dimension']+[d])))
+ n, ','.join(vars[n]['dimension']+[d])))
vars[n]['dimension'].append(d)
del vars[n]['charselector']
if 'intent' not in vars[n]:
@@ -2253,14 +2253,14 @@ def analyzevars(block):
#origd = d
if d not in vars:
if d in savelindims:
- pd,ad='(',savelindims[d][1]
+ pd, ad='(', savelindims[d][1]
d = savelindims[d][0]
else:
for r in block['args']:
#for r in block['vars'].iterkeys():
if r not in vars:
continue
- if re.match(r'.*?\b'+r+r'\b',d,re.I):
+ if re.match(r'.*?\b'+r+r'\b', d, re.I):
ddeps.append(r)
if d in vars:
if 'attrspec' in vars[d]:
@@ -2275,22 +2275,22 @@ def analyzevars(block):
and l_or(isintent_in, isintent_inout, isintent_inplace)(vars[n]):
vars[d]['depend']=[n]
if ni>1:
- vars[d]['=']='%s%s(%s,%s)%s'% (pd,shape_macro,n,i,ad)
+ vars[d]['=']='%s%s(%s,%s)%s'% (pd, shape_macro, n, i, ad)
else:
- vars[d]['=']='%slen(%s)%s'% (pd,n,ad)
+ vars[d]['=']='%slen(%s)%s'% (pd, n, ad)
# /---< no check
if 1 and 'check' not in vars[d]:
if ni>1:
vars[d]['check']=['%s%s(%s,%i)%s==%s'\
- %(pd,shape_macro,n,i,ad,d)]
+ %(pd, shape_macro, n, i, ad, d)]
else:
- vars[d]['check']=['%slen(%s)%s>=%s'%(pd,n,ad,d)]
+ vars[d]['check']=['%slen(%s)%s>=%s'%(pd, n, ad, d)]
if 'attrspec' not in vars[d]:
vars[d]['attrspec']=['optional']
if ('optional' not in vars[d]['attrspec']) and\
('required' not in vars[d]['attrspec']):
vars[d]['attrspec'].append('optional')
- elif d not in ['*',':']:
+ elif d not in ['*', ':']:
#/----< no check
#if ni>1: vars[n]['check'].append('shape(%s,%i)==%s'%(n,i,d))
#else: vars[n]['check'].append('len(%s)>=%s'%(n,d))
@@ -2325,11 +2325,11 @@ def analyzevars(block):
vars[n]['attrspec'].append('optional')
if 'depend' not in vars[n]:
vars[n]['depend']=[]
- for v,m in list(dep_matches.items()):
+ for v, m in list(dep_matches.items()):
if m(vars[n]['=']): vars[n]['depend'].append(v)
if not vars[n]['depend']: del vars[n]['depend']
if isscalar(vars[n]):
- vars[n]['='] = _eval_scalar(vars[n]['='],params)
+ vars[n]['='] = _eval_scalar(vars[n]['='], params)
for n in list(vars.keys()):
if n==block['name']: # n is block name
@@ -2337,38 +2337,38 @@ def analyzevars(block):
block['note']=vars[n]['note']
if block['block']=='function':
if 'result' in block and block['result'] in vars:
- vars[n]=appenddecl(vars[n],vars[block['result']])
+ vars[n]=appenddecl(vars[n], vars[block['result']])
if 'prefix' in block:
pr=block['prefix']; ispure=0; isrec=1
- pr1=pr.replace('pure','')
+ pr1=pr.replace('pure', '')
ispure=(not pr==pr1)
- pr=pr1.replace('recursive','')
+ pr=pr1.replace('recursive', '')
isrec=(not pr==pr1)
m=typespattern[0].match(pr)
if m:
- typespec,selector,attr,edecl=cracktypespec0(m.group('this'),m.group('after'))
- kindselect,charselect,typename=cracktypespec(typespec,selector)
+ typespec, selector, attr, edecl=cracktypespec0(m.group('this'), m.group('after'))
+ kindselect, charselect, typename=cracktypespec(typespec, selector)
vars[n]['typespec']=typespec
if kindselect:
if 'kind' in kindselect:
try:
- kindselect['kind'] = eval(kindselect['kind'],{},params)
+ kindselect['kind'] = eval(kindselect['kind'], {}, params)
except:
pass
vars[n]['kindselector']=kindselect
if charselect: vars[n]['charselector']=charselect
if typename: vars[n]['typename']=typename
- if ispure: vars[n]=setattrspec(vars[n],'pure')
- if isrec: vars[n]=setattrspec(vars[n],'recursive')
+ if ispure: vars[n]=setattrspec(vars[n], 'pure')
+ if isrec: vars[n]=setattrspec(vars[n], 'recursive')
else:
outmess('analyzevars: prefix (%s) were not used\n'%repr(block['prefix']))
- if not block['block'] in ['module','pythonmodule','python module','block data']:
+ if not block['block'] in ['module', 'pythonmodule', 'python module', 'block data']:
if 'commonvars' in block:
neededvars=copy.copy(block['args']+block['commonvars'])
else:
neededvars=copy.copy(block['args'])
for n in list(vars.keys()):
- if l_or(isintent_callback,isintent_aux)(vars[n]):
+ if l_or(isintent_callback, isintent_aux)(vars[n]):
neededvars.append(n)
if 'entry' in block:
neededvars.extend(list(block['entry'].keys()))
@@ -2381,7 +2381,7 @@ def analyzevars(block):
neededvars.append(block['result'])
else:
neededvars.append(block['name'])
- if block['block'] in ['subroutine','function']:
+ if block['block'] in ['subroutine', 'function']:
name = block['name']
if name in vars and 'intent' in vars[name]:
block['intent'] = vars[name]['intent']
@@ -2392,13 +2392,13 @@ def analyzevars(block):
del vars[n]
return vars
-analyzeargs_re_1 = re.compile(r'\A[a-z]+[\w$]*\Z',re.I)
+analyzeargs_re_1 = re.compile(r'\A[a-z]+[\w$]*\Z', re.I)
def expr2name(a, block, args=[]):
orig_a = a
a_is_expr = not analyzeargs_re_1.match(a)
if a_is_expr: # `a` is an expression
- implicitrules,attrrules=buildimplicitrules(block)
- at=determineexprtype(a,block['vars'],implicitrules)
+ implicitrules, attrrules=buildimplicitrules(block)
+ at=determineexprtype(a, block['vars'], implicitrules)
na='e_'
for c in a:
c = c.lower()
@@ -2423,12 +2423,12 @@ def expr2name(a, block, args=[]):
else:
block['vars'][a]={}
if 'externals' in block and orig_a in block['externals']+block['interfaced']:
- block['vars'][a]=setattrspec(block['vars'][a],'external')
+ block['vars'][a]=setattrspec(block['vars'][a], 'external')
return a
def analyzeargs(block):
setmesstext(block)
- implicitrules,attrrules=buildimplicitrules(block)
+ implicitrules, attrrules=buildimplicitrules(block)
if 'args' not in block:
block['args']=[]
args=[]
@@ -2437,7 +2437,7 @@ def analyzeargs(block):
args.append(a)
block['args']=args
if 'entry' in block:
- for k,args1 in list(block['entry'].items()):
+ for k, args1 in list(block['entry'].items()):
for a in args1:
if a not in block['vars']:
block['vars'][a]={}
@@ -2452,11 +2452,11 @@ def analyzeargs(block):
block['vars'][block['result']]={}
return block
-determineexprtype_re_1 = re.compile(r'\A\(.+?[,].+?\)\Z',re.I)
-determineexprtype_re_2 = re.compile(r'\A[+-]?\d+(_(P<name>[\w]+)|)\Z',re.I)
-determineexprtype_re_3 = re.compile(r'\A[+-]?[\d.]+[\d+-de.]*(_(P<name>[\w]+)|)\Z',re.I)
-determineexprtype_re_4 = re.compile(r'\A\(.*\)\Z',re.I)
-determineexprtype_re_5 = re.compile(r'\A(?P<name>\w+)\s*\(.*?\)\s*\Z',re.I)
+determineexprtype_re_1 = re.compile(r'\A\(.+?[,].+?\)\Z', re.I)
+determineexprtype_re_2 = re.compile(r'\A[+-]?\d+(_(P<name>[\w]+)|)\Z', re.I)
+determineexprtype_re_3 = re.compile(r'\A[+-]?[\d.]+[\d+-de.]*(_(P<name>[\w]+)|)\Z', re.I)
+determineexprtype_re_4 = re.compile(r'\A\(.*\)\Z', re.I)
+determineexprtype_re_5 = re.compile(r'\A(?P<name>\w+)\s*\(.*?\)\s*\Z', re.I)
def _ensure_exprdict(r):
if isinstance(r, int):
return {'typespec':'integer'}
@@ -2484,18 +2484,18 @@ def determineexprtype(expr,vars,rules={}):
if 'name' in m.groupdict() and m.group('name'):
outmess('determineexprtype: selected kind types not supported (%s)\n'%repr(expr))
return {'typespec':'real'}
- for op in ['+','-','*','/']:
- for e in [x.strip() for x in markoutercomma(expr,comma=op).split('@'+op+'@')]:
+ for op in ['+', '-', '*', '/']:
+ for e in [x.strip() for x in markoutercomma(expr, comma=op).split('@'+op+'@')]:
if e in vars:
return _ensure_exprdict(vars[e])
t={}
if determineexprtype_re_4.match(expr): # in parenthesis
- t=determineexprtype(expr[1:-1],vars,rules)
+ t=determineexprtype(expr[1:-1], vars, rules)
else:
m = determineexprtype_re_5.match(expr)
if m:
rn=m.group('name')
- t=determineexprtype(m.group('name'),vars,rules)
+ t=determineexprtype(m.group('name'), vars, rules)
if t and 'attrspec' in t:
del t['attrspec']
if not t:
@@ -2514,12 +2514,12 @@ def crack2fortrangen(block,tab='\n', as_interface=False):
ret=''
if isinstance(block, list):
for g in block:
- if g and g['block'] in ['function','subroutine']:
+ if g and g['block'] in ['function', 'subroutine']:
if g['name'] in skipfuncs:
continue
if onlyfuncs and g['name'] not in onlyfuncs:
continue
- ret=ret+crack2fortrangen(g,tab,as_interface=as_interface)
+ ret=ret+crack2fortrangen(g, tab, as_interface=as_interface)
return ret
prefix=''
name=''
@@ -2540,20 +2540,20 @@ def crack2fortrangen(block,tab='\n', as_interface=False):
f2pyenhancements = ''
if 'f2pyenhancements' in block:
for k in list(block['f2pyenhancements'].keys()):
- f2pyenhancements = '%s%s%s %s'%(f2pyenhancements,tab+tabchar,k,block['f2pyenhancements'][k])
- intent_lst = block.get('intent',[])[:]
+ f2pyenhancements = '%s%s%s %s'%(f2pyenhancements, tab+tabchar, k, block['f2pyenhancements'][k])
+ intent_lst = block.get('intent', [])[:]
if blocktype=='function' and 'callback' in intent_lst:
intent_lst.remove('callback')
if intent_lst:
f2pyenhancements = '%s%sintent(%s) %s'%\
- (f2pyenhancements,tab+tabchar,
- ','.join(intent_lst),name)
+ (f2pyenhancements, tab+tabchar,
+ ','.join(intent_lst), name)
use=''
if 'use' in block:
- use=use2fortran(block['use'],tab+tabchar)
+ use=use2fortran(block['use'], tab+tabchar)
common=''
if 'common' in block:
- common=common2fortran(block['common'],tab+tabchar)
+ common=common2fortran(block['common'], tab+tabchar)
if name=='unknown_interface': name=''
result=''
if 'result' in block:
@@ -2562,35 +2562,35 @@ def crack2fortrangen(block,tab='\n', as_interface=False):
argsl.append(block['result'])
#if 'prefix' in block:
# prefix=block['prefix']+' '
- body=crack2fortrangen(block['body'],tab+tabchar)
- vars=vars2fortran(block,block['vars'],argsl,tab+tabchar, as_interface=as_interface)
+ body=crack2fortrangen(block['body'], tab+tabchar)
+ vars=vars2fortran(block, block['vars'], argsl, tab+tabchar, as_interface=as_interface)
mess=''
if 'from' in block and not as_interface:
mess='! in %s'%block['from']
if 'entry' in block:
entry_stmts = ''
- for k,i in list(block['entry'].items()):
+ for k, i in list(block['entry'].items()):
entry_stmts = '%s%sentry %s(%s)' \
- % (entry_stmts,tab+tabchar,k,','.join(i))
+ % (entry_stmts, tab+tabchar, k, ','.join(i))
body = body + entry_stmts
if blocktype=='block data' and name=='_BLOCK_DATA_':
name = ''
- ret='%s%s%s %s%s%s %s%s%s%s%s%s%send %s %s'%(tab,prefix,blocktype,name,args,result,mess,f2pyenhancements,use,vars,common,body,tab,blocktype,name)
+ ret='%s%s%s %s%s%s %s%s%s%s%s%s%send %s %s'%(tab, prefix, blocktype, name, args, result, mess, f2pyenhancements, use, vars, common, body, tab, blocktype, name)
return ret
def common2fortran(common,tab=''):
ret=''
for k in list(common.keys()):
if k=='_BLNK_':
- ret='%s%scommon %s'%(ret,tab,','.join(common[k]))
+ ret='%s%scommon %s'%(ret, tab, ','.join(common[k]))
else:
- ret='%s%scommon /%s/ %s'%(ret,tab,k,','.join(common[k]))
+ ret='%s%scommon /%s/ %s'%(ret, tab, k, ','.join(common[k]))
return ret
def use2fortran(use,tab=''):
ret=''
for m in list(use.keys()):
- ret='%s%suse %s,'%(ret,tab,m)
+ ret='%s%suse %s,'%(ret, tab, m)
if use[m]=={}:
if ret and ret[-1]==',': ret=ret[:-1]
continue
@@ -2600,9 +2600,9 @@ def use2fortran(use,tab=''):
c=' '
for k in list(use[m]['map'].keys()):
if k==use[m]['map'][k]:
- ret='%s%s%s'%(ret,c,k); c=','
+ ret='%s%s%s'%(ret, c, k); c=','
else:
- ret='%s%s%s=>%s'%(ret,c,k,use[m]['map'][k]); c=','
+ ret='%s%s%s=>%s'%(ret, c, k, use[m]['map'][k]); c=','
if ret and ret[-1]==',': ret=ret[:-1]
return ret
@@ -2647,13 +2647,13 @@ def vars2fortran(block,vars,args,tab='', as_interface=False):
if 'depend' in vars[a]:
for d in vars[a]['depend']:
if d in vars and 'depend' in vars[d] and a in vars[d]['depend']:
- errmess('vars2fortran: Warning: cross-dependence between variables "%s" and "%s"\n'%(a,d))
+ errmess('vars2fortran: Warning: cross-dependence between variables "%s" and "%s"\n'%(a, d))
if 'externals' in block and a in block['externals']:
if isintent_callback(vars[a]):
- ret='%s%sintent(callback) %s'%(ret,tab,a)
- ret='%s%sexternal %s'%(ret,tab,a)
+ ret='%s%sintent(callback) %s'%(ret, tab, a)
+ ret='%s%sexternal %s'%(ret, tab, a)
if isoptional(vars[a]):
- ret='%s%soptional %s'%(ret,tab,a)
+ ret='%s%soptional %s'%(ret, tab, a)
if a in vars and 'typespec' not in vars[a]:
continue
cont=1
@@ -2671,33 +2671,33 @@ def vars2fortran(block,vars,args,tab='', as_interface=False):
if 'typespec' not in vars[a]:
if 'attrspec' in vars[a] and 'external' in vars[a]['attrspec']:
if a in args:
- ret='%s%sexternal %s'%(ret,tab,a)
+ ret='%s%sexternal %s'%(ret, tab, a)
continue
show(vars[a])
outmess('vars2fortran: No typespec for argument "%s".\n'%a)
continue
vardef=vars[a]['typespec']
if vardef=='type' and 'typename' in vars[a]:
- vardef='%s(%s)'%(vardef,vars[a]['typename'])
+ vardef='%s(%s)'%(vardef, vars[a]['typename'])
selector={}
if 'kindselector' in vars[a]:
selector=vars[a]['kindselector']
elif 'charselector' in vars[a]:
selector=vars[a]['charselector']
if '*' in selector:
- if selector['*'] in ['*',':']:
- vardef='%s*(%s)'%(vardef,selector['*'])
+ if selector['*'] in ['*', ':']:
+ vardef='%s*(%s)'%(vardef, selector['*'])
else:
- vardef='%s*%s'%(vardef,selector['*'])
+ vardef='%s*%s'%(vardef, selector['*'])
else:
if 'len' in selector:
- vardef='%s(len=%s'%(vardef,selector['len'])
+ vardef='%s(len=%s'%(vardef, selector['len'])
if 'kind' in selector:
- vardef='%s,kind=%s)'%(vardef,selector['kind'])
+ vardef='%s,kind=%s)'%(vardef, selector['kind'])
else:
vardef='%s)'%(vardef)
elif 'kind' in selector:
- vardef='%s(kind=%s)'%(vardef,selector['kind'])
+ vardef='%s(kind=%s)'%(vardef, selector['kind'])
c=' '
if 'attrspec' in vars[a]:
attr=[]
@@ -2705,47 +2705,47 @@ def vars2fortran(block,vars,args,tab='', as_interface=False):
if l not in ['external']:
attr.append(l)
if attr:
- vardef='%s, %s'%(vardef,','.join(attr))
+ vardef='%s, %s'%(vardef, ','.join(attr))
c=','
if 'dimension' in vars[a]:
# if not isintent_c(vars[a]):
# vars[a]['dimension'].reverse()
- vardef='%s%sdimension(%s)'%(vardef,c,','.join(vars[a]['dimension']))
+ vardef='%s%sdimension(%s)'%(vardef, c, ','.join(vars[a]['dimension']))
c=','
if 'intent' in vars[a]:
lst = true_intent_list(vars[a])
if lst:
- vardef='%s%sintent(%s)'%(vardef,c,','.join(lst))
+ vardef='%s%sintent(%s)'%(vardef, c, ','.join(lst))
c=','
if 'check' in vars[a]:
- vardef='%s%scheck(%s)'%(vardef,c,','.join(vars[a]['check']))
+ vardef='%s%scheck(%s)'%(vardef, c, ','.join(vars[a]['check']))
c=','
if 'depend' in vars[a]:
- vardef='%s%sdepend(%s)'%(vardef,c,','.join(vars[a]['depend']))
+ vardef='%s%sdepend(%s)'%(vardef, c, ','.join(vars[a]['depend']))
c=','
if '=' in vars[a]:
v = vars[a]['=']
- if vars[a]['typespec'] in ['complex','double complex']:
+ if vars[a]['typespec'] in ['complex', 'double complex']:
try:
v = eval(v)
- v = '(%s,%s)' % (v.real,v.imag)
+ v = '(%s,%s)' % (v.real, v.imag)
except:
pass
- vardef='%s :: %s=%s'%(vardef,a,v)
+ vardef='%s :: %s=%s'%(vardef, a, v)
else:
- vardef='%s :: %s'%(vardef,a)
- ret='%s%s%s'%(ret,tab,vardef)
+ vardef='%s :: %s'%(vardef, a)
+ ret='%s%s%s'%(ret, tab, vardef)
return ret
######
def crackfortran(files):
global usermodules
- outmess('Reading fortran codes...\n',0)
- readfortrancode(files,crackline)
- outmess('Post-processing...\n',0)
+ outmess('Reading fortran codes...\n', 0)
+ readfortrancode(files, crackline)
+ outmess('Post-processing...\n', 0)
usermodules=[]
postlist=postcrack(grouplist[0])
- outmess('Post-processing (stage 2)...\n',0)
+ outmess('Post-processing (stage 2)...\n', 0)
postlist=postcrack2(postlist)
return usermodules+postlist
@@ -2778,7 +2778,7 @@ if __name__ == "__main__":
quiet=0
elif l=='-fix':
if strictf77:
- outmess('Use option -f90 before -fix if Fortran 90 code is in fix form.\n',0)
+ outmess('Use option -f90 before -fix if Fortran 90 code is in fix form.\n', 0)
skipemptyends=1
sourcecodeform='fix'
elif l=='-skipemptyends':
@@ -2820,13 +2820,13 @@ if __name__ == "__main__":
that should not need one (expect if you are scanning F90 code
for non module blocks but then you should use flag -skipemptyends
and also be sure that the files do not contain programs without program statement).
-""",0)
+""", 0)
- postlist=crackfortran(files,funcs)
+ postlist=crackfortran(files, funcs)
if pyffilename:
- outmess('Writing fortran code to file %s\n'%repr(pyffilename),0)
+ outmess('Writing fortran code to file %s\n'%repr(pyffilename), 0)
pyf=crack2fortran(postlist)
- f=open(pyffilename,'w')
+ f=open(pyffilename, 'w')
f.write(pyf)
f.close()
if showblocklist: