123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/usr/bin/env python3
- """
- 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`'
- from .auxfuncs import (
- applyrules, dictappend, gentitle, hasnote, outmess
- )
- 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(repr(i), nummap[i])
- if hasnote(vars[realname]):
- vrd['note'] = vars[realname]['note']
- rd = dictappend({}, vrd)
- print(name, realname, vars[realname])
- ret = applyrules(usemodule_rules, rd)
- return ret
|