annotate DEPENDENCIES/mingw32/Python27/Lib/site-packages/numpy/f2py/common_rules.py @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2a2c65a20a8b
children
rev   line source
Chris@87 1 #!/usr/bin/env python
Chris@87 2 """
Chris@87 3
Chris@87 4 Build common block mechanism for f2py2e.
Chris@87 5
Chris@87 6 Copyright 2000 Pearu Peterson all rights reserved,
Chris@87 7 Pearu Peterson <pearu@ioc.ee>
Chris@87 8 Permission to use, modify, and distribute this software is given under the
Chris@87 9 terms of the NumPy License
Chris@87 10
Chris@87 11 NO WARRANTY IS EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
Chris@87 12 $Date: 2005/05/06 10:57:33 $
Chris@87 13 Pearu Peterson
Chris@87 14
Chris@87 15 """
Chris@87 16 from __future__ import division, absolute_import, print_function
Chris@87 17
Chris@87 18 __version__ = "$Revision: 1.19 $"[10:-1]
Chris@87 19
Chris@87 20 from . import __version__
Chris@87 21 f2py_version = __version__.version
Chris@87 22
Chris@87 23 import pprint
Chris@87 24 import sys
Chris@87 25 errmess=sys.stderr.write
Chris@87 26 outmess=sys.stdout.write
Chris@87 27 show=pprint.pprint
Chris@87 28
Chris@87 29 from .auxfuncs import *
Chris@87 30 from . import capi_maps
Chris@87 31 from . import func2subr
Chris@87 32 from .crackfortran import rmbadname
Chris@87 33 ##############
Chris@87 34
Chris@87 35 def findcommonblocks(block,top=1):
Chris@87 36 ret = []
Chris@87 37 if hascommon(block):
Chris@87 38 for n in block['common'].keys():
Chris@87 39 vars={}
Chris@87 40 for v in block['common'][n]:
Chris@87 41 vars[v]=block['vars'][v]
Chris@87 42 ret.append((n, block['common'][n], vars))
Chris@87 43 elif hasbody(block):
Chris@87 44 for b in block['body']:
Chris@87 45 ret=ret+findcommonblocks(b, 0)
Chris@87 46 if top:
Chris@87 47 tret=[]
Chris@87 48 names=[]
Chris@87 49 for t in ret:
Chris@87 50 if t[0] not in names:
Chris@87 51 names.append(t[0])
Chris@87 52 tret.append(t)
Chris@87 53 return tret
Chris@87 54 return ret
Chris@87 55
Chris@87 56 def buildhooks(m):
Chris@87 57 ret = {'commonhooks':[],'initcommonhooks':[],'docs':['"COMMON blocks:\\n"']}
Chris@87 58 fwrap = ['']
Chris@87 59 def fadd(line,s=fwrap): s[0] = '%s\n %s'%(s[0], line)
Chris@87 60 chooks = ['']
Chris@87 61 def cadd(line,s=chooks): s[0] = '%s\n%s'%(s[0], line)
Chris@87 62 ihooks = ['']
Chris@87 63 def iadd(line,s=ihooks): s[0] = '%s\n%s'%(s[0], line)
Chris@87 64 doc = ['']
Chris@87 65 def dadd(line,s=doc): s[0] = '%s\n%s'%(s[0], line)
Chris@87 66 for (name, vnames, vars) in findcommonblocks(m):
Chris@87 67 lower_name = name.lower()
Chris@87 68 hnames, inames = [], []
Chris@87 69 for n in vnames:
Chris@87 70 if isintent_hide(vars[n]): hnames.append(n)
Chris@87 71 else: inames.append(n)
Chris@87 72 if hnames:
Chris@87 73 outmess('\t\tConstructing COMMON block support for "%s"...\n\t\t %s\n\t\t Hidden: %s\n'%(name, ','.join(inames), ','.join(hnames)))
Chris@87 74 else:
Chris@87 75 outmess('\t\tConstructing COMMON block support for "%s"...\n\t\t %s\n'%(name, ','.join(inames)))
Chris@87 76 fadd('subroutine f2pyinit%s(setupfunc)'%name)
Chris@87 77 fadd('external setupfunc')
Chris@87 78 for n in vnames:
Chris@87 79 fadd(func2subr.var2fixfortran(vars, n))
Chris@87 80 if name=='_BLNK_':
Chris@87 81 fadd('common %s'%(','.join(vnames)))
Chris@87 82 else:
Chris@87 83 fadd('common /%s/ %s'%(name, ','.join(vnames)))
Chris@87 84 fadd('call setupfunc(%s)'%(','.join(inames)))
Chris@87 85 fadd('end\n')
Chris@87 86 cadd('static FortranDataDef f2py_%s_def[] = {'%(name))
Chris@87 87 idims=[]
Chris@87 88 for n in inames:
Chris@87 89 ct = capi_maps.getctype(vars[n])
Chris@87 90 at = capi_maps.c2capi_map[ct]
Chris@87 91 dm = capi_maps.getarrdims(n, vars[n])
Chris@87 92 if dm['dims']: idims.append('(%s)'%(dm['dims']))
Chris@87 93 else: idims.append('')
Chris@87 94 dms=dm['dims'].strip()
Chris@87 95 if not dms: dms='-1'
Chris@87 96 cadd('\t{\"%s\",%s,{{%s}},%s},'%(n, dm['rank'], dms, at))
Chris@87 97 cadd('\t{NULL}\n};')
Chris@87 98 inames1 = rmbadname(inames)
Chris@87 99 inames1_tps = ','.join(['char *'+s for s in inames1])
Chris@87 100 cadd('static void f2py_setup_%s(%s) {'%(name, inames1_tps))
Chris@87 101 cadd('\tint i_f2py=0;')
Chris@87 102 for n in inames1:
Chris@87 103 cadd('\tf2py_%s_def[i_f2py++].data = %s;'%(name, n))
Chris@87 104 cadd('}')
Chris@87 105 if '_' in lower_name:
Chris@87 106 F_FUNC='F_FUNC_US'
Chris@87 107 else:
Chris@87 108 F_FUNC='F_FUNC'
Chris@87 109 cadd('extern void %s(f2pyinit%s,F2PYINIT%s)(void(*)(%s));'\
Chris@87 110 %(F_FUNC, lower_name, name.upper(),
Chris@87 111 ','.join(['char*']*len(inames1))))
Chris@87 112 cadd('static void f2py_init_%s(void) {'%name)
Chris@87 113 cadd('\t%s(f2pyinit%s,F2PYINIT%s)(f2py_setup_%s);'\
Chris@87 114 %(F_FUNC, lower_name, name.upper(), name))
Chris@87 115 cadd('}\n')
Chris@87 116 iadd('\tF2PyDict_SetItemString(d, \"%s\", PyFortranObject_New(f2py_%s_def,f2py_init_%s));'%(name, name, name))
Chris@87 117 tname = name.replace('_', '\\_')
Chris@87 118 dadd('\\subsection{Common block \\texttt{%s}}\n'%(tname))
Chris@87 119 dadd('\\begin{description}')
Chris@87 120 for n in inames:
Chris@87 121 dadd('\\item[]{{}\\verb@%s@{}}'%(capi_maps.getarrdocsign(n, vars[n])))
Chris@87 122 if hasnote(vars[n]):
Chris@87 123 note = vars[n]['note']
Chris@87 124 if isinstance(note, list): note='\n'.join(note)
Chris@87 125 dadd('--- %s'%(note))
Chris@87 126 dadd('\\end{description}')
Chris@87 127 ret['docs'].append('"\t/%s/ %s\\n"'%(name, ','.join(map(lambda v, d:v+d, inames, idims))))
Chris@87 128 ret['commonhooks']=chooks
Chris@87 129 ret['initcommonhooks']=ihooks
Chris@87 130 ret['latexdoc']=doc[0]
Chris@87 131 if len(ret['docs'])<=1: ret['docs']=''
Chris@87 132 return ret, fwrap[0]