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()
|