108 lines
3.3 KiB
Python
108 lines
3.3 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
|
|
Build 'use others module data' mechanism for f2py2e.
|
|
|
|
Unfinished.
|
|
|
|
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: 2000/09/10 12:35:43 $
|
|
Pearu Peterson
|
|
"""
|
|
|
|
__version__ = "$Revision: 1.3 $"[10:-1]
|
|
|
|
f2py_version='See `f2py -v`'
|
|
|
|
import pprint
|
|
import sys
|
|
errmess=sys.stderr.write
|
|
outmess=sys.stdout.write
|
|
show=pprint.pprint
|
|
|
|
from auxfuncs import *
|
|
##############
|
|
|
|
usemodule_rules={
|
|
'body':"""
|
|
#begintitle#
|
|
static char doc_#apiname#[] = \"\\\nVariable wrapper signature:\\n\\
|
|
\t #name# = get_#name#()\\n\\
|
|
Arguments:\\n\\
|
|
#docstr#\";
|
|
extern F_MODFUNC(#usemodulename#,#USEMODULENAME#,#realname#,#REALNAME#);
|
|
static PyObject *#apiname#(PyObject *capi_self, PyObject *capi_args) {
|
|
/*#decl#*/
|
|
\tif (!PyArg_ParseTuple(capi_args, \"\")) goto capi_fail;
|
|
printf(\"c: %d\\n\",F_MODFUNC(#usemodulename#,#USEMODULENAME#,#realname#,#REALNAME#));
|
|
\treturn Py_BuildValue(\"\");
|
|
capi_fail:
|
|
\treturn NULL;
|
|
}
|
|
""",
|
|
'method':'\t{\"get_#name#\",#apiname#,METH_VARARGS|METH_KEYWORDS,doc_#apiname#},',
|
|
'need':['F_MODFUNC']
|
|
}
|
|
|
|
################
|
|
|
|
def buildusevars(m,r):
|
|
ret={}
|
|
outmess('\t\tBuilding use variable hooks for module "%s" (feature only for F90/F95)...\n'%(m['name']))
|
|
varsmap={}
|
|
revmap={}
|
|
if 'map' in r:
|
|
for k in r['map'].keys():
|
|
if r['map'][k] in revmap:
|
|
outmess('\t\t\tVariable "%s<=%s" is already mapped by "%s". Skipping.\n'%(r['map'][k],k,revmap[r['map'][k]]))
|
|
else:
|
|
revmap[r['map'][k]]=k
|
|
if 'only' in r and r['only']:
|
|
for v in r['map'].keys():
|
|
if r['map'][v] in m['vars']:
|
|
|
|
if revmap[r['map'][v]]==v:
|
|
varsmap[v]=r['map'][v]
|
|
else:
|
|
outmess('\t\t\tIgnoring map "%s=>%s". See above.\n'%(v,r['map'][v]))
|
|
else:
|
|
outmess('\t\t\tNo definition for variable "%s=>%s". Skipping.\n'%(v,r['map'][v]))
|
|
else:
|
|
for v in m['vars'].keys():
|
|
if v in revmap:
|
|
varsmap[v]=revmap[v]
|
|
else:
|
|
varsmap[v]=v
|
|
for v in varsmap.keys():
|
|
ret=dictappend(ret,buildusevar(v,varsmap[v],m['vars'],m['name']))
|
|
return ret
|
|
def buildusevar(name,realname,vars,usemodulename):
|
|
outmess('\t\t\tConstructing wrapper function for variable "%s=>%s"...\n'%(name,realname))
|
|
ret={}
|
|
vrd={'name':name,
|
|
'realname':realname,
|
|
'REALNAME':realname.upper(),
|
|
'usemodulename':usemodulename,
|
|
'USEMODULENAME':usemodulename.upper(),
|
|
'texname':name.replace('_','\\_'),
|
|
'begintitle':gentitle('%s=>%s'%(name,realname)),
|
|
'endtitle':gentitle('end of %s=>%s'%(name,realname)),
|
|
'apiname':'#modulename#_use_%s_from_%s'%(realname,usemodulename)
|
|
}
|
|
nummap={0:'Ro',1:'Ri',2:'Rii',3:'Riii',4:'Riv',5:'Rv',6:'Rvi',7:'Rvii',8:'Rviii',9:'Rix'}
|
|
vrd['texnamename']=name
|
|
for i in nummap.keys():
|
|
vrd['texnamename']=vrd['texnamename'].replace(`i`,nummap[i])
|
|
if hasnote(vars[realname]): vrd['note']=vars[realname]['note']
|
|
rd=dictappend({},vrd)
|
|
var=vars[realname]
|
|
|
|
print name,realname,vars[realname]
|
|
ret=applyrules(usemodule_rules,rd)
|
|
return ret
|