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