1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
__usage__ = """
Run:
python callback.py [<f2py options>]
Examples:
python callback.py --fcompiler=Gnu --no-wrap-functions
python callback.py --quiet
"""
import f2py2e
import math
import sys
from Numeric import array
def build(f2py_opts):
try:
import f77_ext_callback
except ImportError:
assert not f2py2e.compile('''\
subroutine t(fun,a)
integer a
cf2py intent(out) a
external fun
call fun(a)
end
subroutine func(a)
cf2py intent(in,out) a
integer a
a = a + 11
end
subroutine func0(a)
cf2py intent(out) a
integer a
a = 11
end
subroutine t2(a)
cf2py intent(callback) fun
integer a
cf2py intent(out) a
external fun
call fun(a)
end
''','f77_ext_callback',f2py_opts,source_fn='f77_callback.f')
from f77_ext_callback import t,t2
test_functions = [t,t2]
return test_functions
def runtest(t):
r = t(lambda : 4)
assert r==4,`r`
r = t(lambda a:5,fun_extra_args=(6,))
assert r==5,`r`
r = t(lambda a:a,fun_extra_args=(6,))
assert r==6,`r`
r = t(lambda a:5+a,fun_extra_args=(7,))
assert r==12,`r`
if sys.version[:3]>='2.3':
r = t(lambda a:math.degrees(a),fun_extra_args=(math.pi,))
assert r==180,`r`
r = t(math.degrees,fun_extra_args=(math.pi,))
assert r==180,`r`
from f77_ext_callback import func,func0
r = t(func,fun_extra_args=(6,))
assert r==17,`r`
r = t(func0)
assert r==11,`r`
r = t(func0._cpointer)
assert r==11,`r`
class A:
def __call__(self):
return 7
def mth(self):
return 9
a = A()
r = t(a)
assert r==7,`r`
r = t(a.mth)
assert r==9,`r`
if __name__=='__main__':
#import libwadpy
status = 1
try:
repeat,f2py_opts = f2py2e.f2py_testing.cmdline()
test_functions = build(f2py_opts)
f2py2e.f2py_testing.run(runtest,test_functions,repeat)
print 'ok'
status = 0
finally:
if status:
print '*'*20
print 'Running f2py2e.diagnose'
import f2py2e.diagnose
f2py2e.diagnose.run()
|