diff DEPENDENCIES/mingw32/Python27/Lib/site-packages/numpy/f2py/common_rules.py @ 87:2a2c65a20a8b

Add Python libs and headers
author Chris Cannam
date Wed, 25 Feb 2015 14:05:22 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DEPENDENCIES/mingw32/Python27/Lib/site-packages/numpy/f2py/common_rules.py	Wed Feb 25 14:05:22 2015 +0000
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+"""
+
+Build common block mechanism for f2py2e.
+
+Copyright 2000 Pearu Peterson all rights reserved,
+Pearu Peterson <pearu@ioc.ee>
+Permission to use, modify, and distribute this software is given under the
+terms of the NumPy License
+
+NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
+$Date: 2005/05/06 10:57:33 $
+Pearu Peterson
+
+"""
+from __future__ import division, absolute_import, print_function
+
+__version__ = "$Revision: 1.19 $"[10:-1]
+
+from . import __version__
+f2py_version = __version__.version
+
+import pprint
+import sys
+errmess=sys.stderr.write
+outmess=sys.stdout.write
+show=pprint.pprint
+
+from .auxfuncs import *
+from . import capi_maps
+from . import func2subr
+from .crackfortran import rmbadname
+##############
+
+def findcommonblocks(block,top=1):
+    ret = []
+    if hascommon(block):
+        for n in block['common'].keys():
+            vars={}
+            for v in block['common'][n]:
+                vars[v]=block['vars'][v]
+            ret.append((n, block['common'][n], vars))
+    elif hasbody(block):
+        for b in block['body']:
+            ret=ret+findcommonblocks(b, 0)
+    if top:
+        tret=[]
+        names=[]
+        for t in ret:
+            if t[0] not in names:
+                names.append(t[0])
+                tret.append(t)
+        return tret
+    return ret
+
+def buildhooks(m):
+    ret = {'commonhooks':[],'initcommonhooks':[],'docs':['"COMMON blocks:\\n"']}
+    fwrap = ['']
+    def fadd(line,s=fwrap): s[0] = '%s\n      %s'%(s[0], line)
+    chooks = ['']
+    def cadd(line,s=chooks): s[0] = '%s\n%s'%(s[0], line)
+    ihooks = ['']
+    def iadd(line,s=ihooks): s[0] = '%s\n%s'%(s[0], line)
+    doc = ['']
+    def dadd(line,s=doc): s[0] = '%s\n%s'%(s[0], line)
+    for (name, vnames, vars) in findcommonblocks(m):
+        lower_name = name.lower()
+        hnames, inames = [], []
+        for n in vnames:
+            if isintent_hide(vars[n]): hnames.append(n)
+            else: inames.append(n)
+        if hnames:
+            outmess('\t\tConstructing COMMON block support for "%s"...\n\t\t  %s\n\t\t  Hidden: %s\n'%(name, ','.join(inames), ','.join(hnames)))
+        else:
+            outmess('\t\tConstructing COMMON block support for "%s"...\n\t\t  %s\n'%(name, ','.join(inames)))
+        fadd('subroutine f2pyinit%s(setupfunc)'%name)
+        fadd('external setupfunc')
+        for n in vnames:
+            fadd(func2subr.var2fixfortran(vars, n))
+        if name=='_BLNK_':
+            fadd('common %s'%(','.join(vnames)))
+        else:
+            fadd('common /%s/ %s'%(name, ','.join(vnames)))
+        fadd('call setupfunc(%s)'%(','.join(inames)))
+        fadd('end\n')
+        cadd('static FortranDataDef f2py_%s_def[] = {'%(name))
+        idims=[]
+        for n in inames:
+            ct = capi_maps.getctype(vars[n])
+            at = capi_maps.c2capi_map[ct]
+            dm = capi_maps.getarrdims(n, vars[n])
+            if dm['dims']: idims.append('(%s)'%(dm['dims']))
+            else: idims.append('')
+            dms=dm['dims'].strip()
+            if not dms: dms='-1'
+            cadd('\t{\"%s\",%s,{{%s}},%s},'%(n, dm['rank'], dms, at))
+        cadd('\t{NULL}\n};')
+        inames1 = rmbadname(inames)
+        inames1_tps = ','.join(['char *'+s for s in inames1])
+        cadd('static void f2py_setup_%s(%s) {'%(name, inames1_tps))
+        cadd('\tint i_f2py=0;')
+        for n in inames1:
+            cadd('\tf2py_%s_def[i_f2py++].data = %s;'%(name, n))
+        cadd('}')
+        if '_' in lower_name:
+            F_FUNC='F_FUNC_US'
+        else:
+            F_FUNC='F_FUNC'
+        cadd('extern void %s(f2pyinit%s,F2PYINIT%s)(void(*)(%s));'\
+             %(F_FUNC, lower_name, name.upper(),
+               ','.join(['char*']*len(inames1))))
+        cadd('static void f2py_init_%s(void) {'%name)
+        cadd('\t%s(f2pyinit%s,F2PYINIT%s)(f2py_setup_%s);'\
+             %(F_FUNC, lower_name, name.upper(), name))
+        cadd('}\n')
+        iadd('\tF2PyDict_SetItemString(d, \"%s\", PyFortranObject_New(f2py_%s_def,f2py_init_%s));'%(name, name, name))
+        tname = name.replace('_', '\\_')
+        dadd('\\subsection{Common block \\texttt{%s}}\n'%(tname))
+        dadd('\\begin{description}')
+        for n in inames:
+            dadd('\\item[]{{}\\verb@%s@{}}'%(capi_maps.getarrdocsign(n, vars[n])))
+            if hasnote(vars[n]):
+                note = vars[n]['note']
+                if isinstance(note, list): note='\n'.join(note)
+                dadd('--- %s'%(note))
+        dadd('\\end{description}')
+        ret['docs'].append('"\t/%s/ %s\\n"'%(name, ','.join(map(lambda v, d:v+d, inames, idims))))
+    ret['commonhooks']=chooks
+    ret['initcommonhooks']=ihooks
+    ret['latexdoc']=doc[0]
+    if len(ret['docs'])<=1: ret['docs']=''
+    return ret, fwrap[0]