annotate DEPENDENCIES/mingw32/Python27/Lib/site-packages/numpy/f2py/tests/test_callback.py @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2a2c65a20a8b
children
rev   line source
Chris@87 1 from __future__ import division, absolute_import, print_function
Chris@87 2
Chris@87 3 from numpy.testing import *
Chris@87 4 from numpy import array
Chris@87 5 import math
Chris@87 6 import util
Chris@87 7 import textwrap
Chris@87 8
Chris@87 9 class TestF77Callback(util.F2PyTest):
Chris@87 10 code = """
Chris@87 11 subroutine t(fun,a)
Chris@87 12 integer a
Chris@87 13 cf2py intent(out) a
Chris@87 14 external fun
Chris@87 15 call fun(a)
Chris@87 16 end
Chris@87 17
Chris@87 18 subroutine func(a)
Chris@87 19 cf2py intent(in,out) a
Chris@87 20 integer a
Chris@87 21 a = a + 11
Chris@87 22 end
Chris@87 23
Chris@87 24 subroutine func0(a)
Chris@87 25 cf2py intent(out) a
Chris@87 26 integer a
Chris@87 27 a = 11
Chris@87 28 end
Chris@87 29
Chris@87 30 subroutine t2(a)
Chris@87 31 cf2py intent(callback) fun
Chris@87 32 integer a
Chris@87 33 cf2py intent(out) a
Chris@87 34 external fun
Chris@87 35 call fun(a)
Chris@87 36 end
Chris@87 37
Chris@87 38 subroutine string_callback(callback, a)
Chris@87 39 external callback
Chris@87 40 double precision callback
Chris@87 41 double precision a
Chris@87 42 character*1 r
Chris@87 43 cf2py intent(out) a
Chris@87 44 r = 'r'
Chris@87 45 a = callback(r)
Chris@87 46 end
Chris@87 47
Chris@87 48 """
Chris@87 49
Chris@87 50 @dec.slow
Chris@87 51 def test_all(self):
Chris@87 52 for name in "t,t2".split(","):
Chris@87 53 self.check_function(name)
Chris@87 54
Chris@87 55 @dec.slow
Chris@87 56 def test_docstring(self):
Chris@87 57 expected = """
Chris@87 58 a = t(fun,[fun_extra_args])
Chris@87 59
Chris@87 60 Wrapper for ``t``.
Chris@87 61
Chris@87 62 Parameters
Chris@87 63 ----------
Chris@87 64 fun : call-back function
Chris@87 65
Chris@87 66 Other Parameters
Chris@87 67 ----------------
Chris@87 68 fun_extra_args : input tuple, optional
Chris@87 69 Default: ()
Chris@87 70
Chris@87 71 Returns
Chris@87 72 -------
Chris@87 73 a : int
Chris@87 74
Chris@87 75 Notes
Chris@87 76 -----
Chris@87 77 Call-back functions::
Chris@87 78
Chris@87 79 def fun(): return a
Chris@87 80 Return objects:
Chris@87 81 a : int
Chris@87 82 """
Chris@87 83 assert_equal(self.module.t.__doc__, textwrap.dedent(expected).lstrip())
Chris@87 84
Chris@87 85 def check_function(self, name):
Chris@87 86 t = getattr(self.module, name)
Chris@87 87 r = t(lambda : 4)
Chris@87 88 assert_( r==4, repr(r))
Chris@87 89 r = t(lambda a:5, fun_extra_args=(6,))
Chris@87 90 assert_( r==5, repr(r))
Chris@87 91 r = t(lambda a:a, fun_extra_args=(6,))
Chris@87 92 assert_( r==6, repr(r))
Chris@87 93 r = t(lambda a:5+a, fun_extra_args=(7,))
Chris@87 94 assert_( r==12, repr(r))
Chris@87 95 r = t(lambda a:math.degrees(a), fun_extra_args=(math.pi,))
Chris@87 96 assert_( r==180, repr(r))
Chris@87 97 r = t(math.degrees, fun_extra_args=(math.pi,))
Chris@87 98 assert_( r==180, repr(r))
Chris@87 99
Chris@87 100 r = t(self.module.func, fun_extra_args=(6,))
Chris@87 101 assert_( r==17, repr(r))
Chris@87 102 r = t(self.module.func0)
Chris@87 103 assert_( r==11, repr(r))
Chris@87 104 r = t(self.module.func0._cpointer)
Chris@87 105 assert_( r==11, repr(r))
Chris@87 106 class A(object):
Chris@87 107 def __call__(self):
Chris@87 108 return 7
Chris@87 109 def mth(self):
Chris@87 110 return 9
Chris@87 111 a = A()
Chris@87 112 r = t(a)
Chris@87 113 assert_( r==7, repr(r))
Chris@87 114 r = t(a.mth)
Chris@87 115 assert_( r==9, repr(r))
Chris@87 116
Chris@87 117 def test_string_callback(self):
Chris@87 118
Chris@87 119 def callback(code):
Chris@87 120 if code == 'r':
Chris@87 121 return 0
Chris@87 122 else:
Chris@87 123 return 1
Chris@87 124
Chris@87 125 f = getattr(self.module, 'string_callback')
Chris@87 126 r = f(callback)
Chris@87 127 assert_(r == 0, repr(r))
Chris@87 128
Chris@87 129
Chris@87 130 if __name__ == "__main__":
Chris@87 131 import nose
Chris@87 132 nose.runmodule()