~ubuntu-branches/ubuntu/feisty/python-numpy/feisty

« back to all changes in this revision

Viewing changes to numpy/f2py/use_rules.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2006-07-12 10:00:24 UTC
  • Revision ID: james.westby@ubuntu.com-20060712100024-5lw9q2yczlisqcrt
Tags: upstream-0.9.8
ImportĀ upstreamĀ versionĀ 0.9.8

Show diffs side-by-side

added added

removed removed

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