tmp
/
pip-install-ghxuqwgs
/numpy_78e94bf2b6094bf9a1f3d92042f9bf46
/numpy
/f2py
/tests
/test_callback.py
from __future__ import division, absolute_import, print_function | |
from numpy.testing import * | |
from numpy import array | |
import math | |
import util | |
import textwrap | |
class TestF77Callback(util.F2PyTest): | |
code = """ | |
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 | |
subroutine string_callback(callback, a) | |
external callback | |
double precision callback | |
double precision a | |
character*1 r | |
cf2py intent(out) a | |
r = 'r' | |
a = callback(r) | |
end | |
""" | |
def test_all(self): | |
for name in "t,t2".split(","): | |
self.check_function(name) | |
def test_docstring(self): | |
expected = """ | |
a = t(fun,[fun_extra_args]) | |
Wrapper for ``t``. | |
Parameters | |
---------- | |
fun : call-back function | |
Other Parameters | |
---------------- | |
fun_extra_args : input tuple, optional | |
Default: () | |
Returns | |
------- | |
a : int | |
Notes | |
----- | |
Call-back functions:: | |
def fun(): return a | |
Return objects: | |
a : int | |
""" | |
assert_equal(self.module.t.__doc__, textwrap.dedent(expected).lstrip()) | |
def check_function(self, name): | |
t = getattr(self.module, name) | |
r = t(lambda : 4) | |
assert_( r==4, repr(r)) | |
r = t(lambda a:5, fun_extra_args=(6,)) | |
assert_( r==5, repr(r)) | |
r = t(lambda a:a, fun_extra_args=(6,)) | |
assert_( r==6, repr(r)) | |
r = t(lambda a:5+a, fun_extra_args=(7,)) | |
assert_( r==12, repr(r)) | |
r = t(lambda a:math.degrees(a), fun_extra_args=(math.pi,)) | |
assert_( r==180, repr(r)) | |
r = t(math.degrees, fun_extra_args=(math.pi,)) | |
assert_( r==180, repr(r)) | |
r = t(self.module.func, fun_extra_args=(6,)) | |
assert_( r==17, repr(r)) | |
r = t(self.module.func0) | |
assert_( r==11, repr(r)) | |
r = t(self.module.func0._cpointer) | |
assert_( r==11, repr(r)) | |
class A(object): | |
def __call__(self): | |
return 7 | |
def mth(self): | |
return 9 | |
a = A() | |
r = t(a) | |
assert_( r==7, repr(r)) | |
r = t(a.mth) | |
assert_( r==9, repr(r)) | |
def test_string_callback(self): | |
def callback(code): | |
if code == 'r': | |
return 0 | |
else: | |
return 1 | |
f = getattr(self.module, 'string_callback') | |
r = f(callback) | |
assert_(r == 0, repr(r)) | |
if __name__ == "__main__": | |
import nose | |
nose.runmodule() | |