Chris@87
|
1 #!/usr/bin/env python
|
Chris@87
|
2 """
|
Chris@87
|
3
|
Chris@87
|
4 Build 'use others module data' mechanism for f2py2e.
|
Chris@87
|
5
|
Chris@87
|
6 Unfinished.
|
Chris@87
|
7
|
Chris@87
|
8 Copyright 2000 Pearu Peterson all rights reserved,
|
Chris@87
|
9 Pearu Peterson <pearu@ioc.ee>
|
Chris@87
|
10 Permission to use, modify, and distribute this software is given under the
|
Chris@87
|
11 terms of the NumPy License.
|
Chris@87
|
12
|
Chris@87
|
13 NO WARRANTY IS EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
|
Chris@87
|
14 $Date: 2000/09/10 12:35:43 $
|
Chris@87
|
15 Pearu Peterson
|
Chris@87
|
16
|
Chris@87
|
17 """
|
Chris@87
|
18 from __future__ import division, absolute_import, print_function
|
Chris@87
|
19
|
Chris@87
|
20 __version__ = "$Revision: 1.3 $"[10:-1]
|
Chris@87
|
21
|
Chris@87
|
22 f2py_version='See `f2py -v`'
|
Chris@87
|
23
|
Chris@87
|
24 import pprint
|
Chris@87
|
25 import sys
|
Chris@87
|
26 errmess=sys.stderr.write
|
Chris@87
|
27 outmess=sys.stdout.write
|
Chris@87
|
28 show=pprint.pprint
|
Chris@87
|
29
|
Chris@87
|
30 from .auxfuncs import *
|
Chris@87
|
31 ##############
|
Chris@87
|
32
|
Chris@87
|
33 usemodule_rules={
|
Chris@87
|
34 'body':"""
|
Chris@87
|
35 #begintitle#
|
Chris@87
|
36 static char doc_#apiname#[] = \"\\\nVariable wrapper signature:\\n\\
|
Chris@87
|
37 \t #name# = get_#name#()\\n\\
|
Chris@87
|
38 Arguments:\\n\\
|
Chris@87
|
39 #docstr#\";
|
Chris@87
|
40 extern F_MODFUNC(#usemodulename#,#USEMODULENAME#,#realname#,#REALNAME#);
|
Chris@87
|
41 static PyObject *#apiname#(PyObject *capi_self, PyObject *capi_args) {
|
Chris@87
|
42 /*#decl#*/
|
Chris@87
|
43 \tif (!PyArg_ParseTuple(capi_args, \"\")) goto capi_fail;
|
Chris@87
|
44 printf(\"c: %d\\n\",F_MODFUNC(#usemodulename#,#USEMODULENAME#,#realname#,#REALNAME#));
|
Chris@87
|
45 \treturn Py_BuildValue(\"\");
|
Chris@87
|
46 capi_fail:
|
Chris@87
|
47 \treturn NULL;
|
Chris@87
|
48 }
|
Chris@87
|
49 """,
|
Chris@87
|
50 'method':'\t{\"get_#name#\",#apiname#,METH_VARARGS|METH_KEYWORDS,doc_#apiname#},',
|
Chris@87
|
51 'need':['F_MODFUNC']
|
Chris@87
|
52 }
|
Chris@87
|
53
|
Chris@87
|
54 ################
|
Chris@87
|
55
|
Chris@87
|
56 def buildusevars(m, r):
|
Chris@87
|
57 ret={}
|
Chris@87
|
58 outmess('\t\tBuilding use variable hooks for module "%s" (feature only for F90/F95)...\n'%(m['name']))
|
Chris@87
|
59 varsmap={}
|
Chris@87
|
60 revmap={}
|
Chris@87
|
61 if 'map' in r:
|
Chris@87
|
62 for k in r['map'].keys():
|
Chris@87
|
63 if r['map'][k] in revmap:
|
Chris@87
|
64 outmess('\t\t\tVariable "%s<=%s" is already mapped by "%s". Skipping.\n'%(r['map'][k], k, revmap[r['map'][k]]))
|
Chris@87
|
65 else:
|
Chris@87
|
66 revmap[r['map'][k]]=k
|
Chris@87
|
67 if 'only' in r and r['only']:
|
Chris@87
|
68 for v in r['map'].keys():
|
Chris@87
|
69 if r['map'][v] in m['vars']:
|
Chris@87
|
70
|
Chris@87
|
71 if revmap[r['map'][v]]==v:
|
Chris@87
|
72 varsmap[v]=r['map'][v]
|
Chris@87
|
73 else:
|
Chris@87
|
74 outmess('\t\t\tIgnoring map "%s=>%s". See above.\n'%(v, r['map'][v]))
|
Chris@87
|
75 else:
|
Chris@87
|
76 outmess('\t\t\tNo definition for variable "%s=>%s". Skipping.\n'%(v, r['map'][v]))
|
Chris@87
|
77 else:
|
Chris@87
|
78 for v in m['vars'].keys():
|
Chris@87
|
79 if v in revmap:
|
Chris@87
|
80 varsmap[v]=revmap[v]
|
Chris@87
|
81 else:
|
Chris@87
|
82 varsmap[v]=v
|
Chris@87
|
83 for v in varsmap.keys():
|
Chris@87
|
84 ret=dictappend(ret, buildusevar(v, varsmap[v], m['vars'], m['name']))
|
Chris@87
|
85 return ret
|
Chris@87
|
86 def buildusevar(name, realname, vars, usemodulename):
|
Chris@87
|
87 outmess('\t\t\tConstructing wrapper function for variable "%s=>%s"...\n'%(name, realname))
|
Chris@87
|
88 ret={}
|
Chris@87
|
89 vrd={'name':name,
|
Chris@87
|
90 'realname':realname,
|
Chris@87
|
91 'REALNAME':realname.upper(),
|
Chris@87
|
92 'usemodulename':usemodulename,
|
Chris@87
|
93 'USEMODULENAME':usemodulename.upper(),
|
Chris@87
|
94 'texname':name.replace('_', '\\_'),
|
Chris@87
|
95 'begintitle':gentitle('%s=>%s'%(name, realname)),
|
Chris@87
|
96 'endtitle':gentitle('end of %s=>%s'%(name, realname)),
|
Chris@87
|
97 'apiname':'#modulename#_use_%s_from_%s'%(realname, usemodulename)
|
Chris@87
|
98 }
|
Chris@87
|
99 nummap={0:'Ro',1:'Ri',2:'Rii',3:'Riii',4:'Riv',5:'Rv',6:'Rvi',7:'Rvii',8:'Rviii',9:'Rix'}
|
Chris@87
|
100 vrd['texnamename']=name
|
Chris@87
|
101 for i in nummap.keys():
|
Chris@87
|
102 vrd['texnamename']=vrd['texnamename'].replace(repr(i), nummap[i])
|
Chris@87
|
103 if hasnote(vars[realname]): vrd['note']=vars[realname]['note']
|
Chris@87
|
104 rd=dictappend({}, vrd)
|
Chris@87
|
105 var=vars[realname]
|
Chris@87
|
106
|
Chris@87
|
107 print(name, realname, vars[realname])
|
Chris@87
|
108 ret=applyrules(usemodule_rules, rd)
|
Chris@87
|
109 return ret
|