diff options
30 files changed, 1391 insertions, 1685 deletions
diff --git a/numpy/f2py/setup.py b/numpy/f2py/setup.py index de53569a2..500ab58ec 100644 --- a/numpy/f2py/setup.py +++ b/numpy/f2py/setup.py @@ -31,6 +31,7 @@ def configuration(parent_package='',top_path=None): config = Configuration('f2py', parent_package, top_path) config.add_data_dir('docs') + config.add_data_dir('tests') config.add_data_files('src/fortranobject.c', 'src/fortranobject.h', diff --git a/numpy/f2py/tests/array_from_pyobj/__init__.py b/numpy/f2py/tests/array_from_pyobj/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/numpy/f2py/tests/array_from_pyobj/__init__.py +++ /dev/null diff --git a/numpy/f2py/tests/array_from_pyobj/setup.py b/numpy/f2py/tests/array_from_pyobj/setup.py deleted file mode 100644 index 520e3dd94..000000000 --- a/numpy/f2py/tests/array_from_pyobj/setup.py +++ /dev/null @@ -1,25 +0,0 @@ -import os -def configuration(parent_name='',top_path=None): - from numpy.distutils.misc_util import Configuration - - config = Configuration('array_from_pyobj',parent_name,top_path) - #import numpy.f2py as f2py - #f2pydir=os.path.dirname(os.path.abspath(f2py.__file__)) - f2pydir=os.path.join(config.local_path,'..','..') - fobjhsrc = os.path.join(f2pydir,'src','fortranobject.h') - fobjcsrc = os.path.join(f2pydir,'src','fortranobject.c') - config.add_extension('wrap', - sources = ['wrapmodule.c',fobjcsrc], - include_dirs = [os.path.dirname(fobjhsrc)], - depends = [fobjhsrc,fobjcsrc], - define_macros = [('DEBUG_COPY_ND_ARRAY',1), - #('F2PY_REPORT_ON_ARRAY_COPY',1), - #('F2PY_REPORT_ATEXIT',1) - ] - ) - - return config - -if __name__ == "__main__": - from numpy.distutils.core import setup - setup(configuration=configuration) diff --git a/numpy/f2py/tests/c/return_real.py b/numpy/f2py/tests/c/return_real.py deleted file mode 100644 index 62dbd2f74..000000000 --- a/numpy/f2py/tests/c/return_real.py +++ /dev/null @@ -1,107 +0,0 @@ -__usage__ = """ -Run: - python return_real.py [<f2py options>] -Examples: - python return_real.py --fcompiler=Gnu --no-wrap-functions - python return_real.py --quiet -""" - -import f2py2e -from Numeric import array - -def build(f2py_opts): - try: - import c_ext_return_real - except ImportError: - assert not f2py2e.compile('''\ -python module c_ext_return_real -usercode \'\'\' -float t4(float value) { return value; } -void s4(float *t4, float value) { *t4 = value; } -double t8(double value) { return value; } -void s8(double *t8, double value) { *t8 = value; } -\'\'\' -interface - function t4(value) - real*4 intent(c) :: t4,value - end - function t8(value) - real*8 intent(c) :: t8,value - end - subroutine s4(t4,value) - intent(c) s4 - real*4 intent(out) :: t4 - real*4 intent(c) :: value - end - subroutine s8(t8,value) - intent(c) s8 - real*8 intent(out) :: t8 - real*8 intent(c) :: value - end -end interface -end python module c_ext_return_real -''','c_ext_return_real',f2py_opts,source_fn='c_ret_real.pyf') - - from c_ext_return_real import t4,t8,s4,s8 - test_functions = [t4,t8,s4,s8] - return test_functions - -def runtest(t): - import sys - if t.__doc__.split()[0] in ['t0','t4','s0','s4']: - err = 1e-5 - else: - err = 0.0 - assert abs(t(234)-234.0)<=err - assert abs(t(234.6)-234.6)<=err - assert abs(t(234l)-234.0)<=err - if sys.version[:3]<'2.3': - assert abs(t(234.6+3j)-234.6)<=err - assert abs(t('234')-234)<=err - assert abs(t('234.6')-234.6)<=err - assert abs(t(-234)+234)<=err - assert abs(t([234])-234)<=err - assert abs(t((234,))-234.)<=err - assert abs(t(array(234))-234.)<=err - assert abs(t(array([234]))-234.)<=err - assert abs(t(array([[234]]))-234.)<=err - assert abs(t(array([234],'1'))+22)<=err - assert abs(t(array([234],'s'))-234.)<=err - assert abs(t(array([234],'i'))-234.)<=err - assert abs(t(array([234],'l'))-234.)<=err - assert abs(t(array([234],'b'))-234.)<=err - assert abs(t(array([234],'f'))-234.)<=err - assert abs(t(array([234],'d'))-234.)<=err - if sys.version[:3]<'2.3': - assert abs(t(array([234+3j],'F'))-234.)<=err - assert abs(t(array([234],'D'))-234.)<=err - if t.__doc__.split()[0] in ['t0','t4','s0','s4']: - assert t(1e200)==t(1e300) # inf - - try: raise RuntimeError,`t(array([234],'c'))` - except ValueError: pass - try: raise RuntimeError,`t('abc')` - except ValueError: pass - - try: raise RuntimeError,`t([])` - except IndexError: pass - try: raise RuntimeError,`t(())` - except IndexError: pass - - try: raise RuntimeError,`t(t)` - except TypeError: pass - try: raise RuntimeError,`t({})` - except TypeError: pass - - try: - try: raise RuntimeError,`t(10l**400)` - except OverflowError: pass - except RuntimeError: - r = t(10l**400); assert `r` in ['inf','Infinity'],`r` - -if __name__=='__main__': - #import libwadpy - repeat,f2py_opts = f2py2e.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py2e.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' diff --git a/numpy/f2py/tests/f77/callback.py b/numpy/f2py/tests/f77/callback.py deleted file mode 100644 index bfe4eb547..000000000 --- a/numpy/f2py/tests/f77/callback.py +++ /dev/null @@ -1,98 +0,0 @@ -__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() diff --git a/numpy/f2py/tests/f77/return_character.py b/numpy/f2py/tests/f77/return_character.py deleted file mode 100644 index b44b6ee70..000000000 --- a/numpy/f2py/tests/f77/return_character.py +++ /dev/null @@ -1,99 +0,0 @@ -__usage__ = """ -Run: - python return_character.py [<f2py options>] -Examples: - python return_character.py --fcompiler=Gnu --no-wrap-functions - python return_character.py --quiet -""" - -import sys -import f2py2e -from Numeric import array - -def build(f2py_opts): - try: - import f77_ext_return_character - except ImportError: - assert not f2py2e.compile('''\ - function t0(value) - character value - character t0 - t0 = value - end - function t1(value) - character*1 value - character*1 t1 - t1 = value - end - function t5(value) - character*5 value - character*5 t5 - t5 = value - end - function ts(value) - character*(*) value - character*(*) ts - ts = value - end - - subroutine s0(t0,value) - character value - character t0 -cf2py intent(out) t0 - t0 = value - end - subroutine s1(t1,value) - character*1 value - character*1 t1 -cf2py intent(out) t1 - t1 = value - end - subroutine s5(t5,value) - character*5 value - character*5 t5 -cf2py intent(out) t5 - t5 = value - end - subroutine ss(ts,value) - character*(*) value - character*10 ts -cf2py intent(out) ts - ts = value - end -''','f77_ext_return_character',f2py_opts,source_fn='f77_ret_char.f') - - from f77_ext_return_character import t0,t1,t5,s0,s1,s5,ss - test_functions = [t0,t1,t5,s0,s1,s5,ss] - if sys.platform!='win32': # this is acctually compiler dependent case - from f77_ext_return_character import ts - test_functions.append(ts) - - return test_functions - -def runtest(t): - tname = t.__doc__.split()[0] - if tname in ['t0','t1','s0','s1']: - assert t(23)=='2' - r = t('ab');assert r=='a',`r` - r = t(array('ab'));assert r=='a',`r` - r = t(array(77,'1'));assert r=='M',`r` - try: raise RuntimeError,`t(array([77,87]))` - except ValueError: pass - try: raise RuntimeError,`t(array(77))` - except ValueError: pass - elif tname in ['ts','ss']: - assert t(23)=='23 ',`t(23)` - assert t('123456789abcdef')=='123456789a' - elif tname in ['t5','s5']: - assert t(23)=='23 ',`t(23)` - assert t('ab')=='ab ',`t('ab')` - assert t('123456789abcdef')=='12345' - else: - raise NotImplementedError - -if __name__=='__main__': - #import libwadpy - repeat,f2py_opts = f2py2e.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py2e.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' diff --git a/numpy/f2py/tests/f77/return_complex.py b/numpy/f2py/tests/f77/return_complex.py deleted file mode 100644 index e182902b3..000000000 --- a/numpy/f2py/tests/f77/return_complex.py +++ /dev/null @@ -1,124 +0,0 @@ -__usage__ = """ -Run: - python return_complex.py [<f2py options>] -Examples: - python return_complex.py --fcompiler=Gnu --no-wrap-functions - python return_complex.py --quiet -""" - -import f2py2e -from Numeric import array - -def build(f2py_opts): - try: - import f77_ext_return_complex - except ImportError: - assert not f2py2e.compile('''\ - function t0(value) - complex value - complex t0 - t0 = value - end - function t8(value) - complex*8 value - complex*8 t8 - t8 = value - end - function t16(value) - complex*16 value - complex*16 t16 - t16 = value - end - function td(value) - double complex value - double complex td - td = value - end - - subroutine s0(t0,value) - complex value - complex t0 -cf2py intent(out) t0 - t0 = value - end - subroutine s8(t8,value) - complex*8 value - complex*8 t8 -cf2py intent(out) t8 - t8 = value - end - subroutine s16(t16,value) - complex*16 value - complex*16 t16 -cf2py intent(out) t16 - t16 = value - end - subroutine sd(td,value) - double complex value - double complex td -cf2py intent(out) td - td = value - end -''','f77_ext_return_complex',f2py_opts) - - from f77_ext_return_complex import t0,t8,t16,td,s0,s8,s16,sd - test_functions = [t0,t8,t16,td,s0,s8,s16,sd] - return test_functions - - -def runtest(t): - tname = t.__doc__.split()[0] - if tname in ['t0','t8','s0','s8']: - err = 1e-5 - else: - err = 0.0 - assert abs(t(234j)-234.0j)<=err - assert abs(t(234.6)-234.6)<=err - assert abs(t(234l)-234.0)<=err - assert abs(t(234.6+3j)-(234.6+3j))<=err - #assert abs(t('234')-234.)<=err - #assert abs(t('234.6')-234.6)<=err - assert abs(t(-234)+234.)<=err - assert abs(t([234])-234.)<=err - assert abs(t((234,))-234.)<=err - assert abs(t(array(234))-234.)<=err - assert abs(t(array(23+4j,'F'))-(23+4j))<=err - assert abs(t(array([234]))-234.)<=err - assert abs(t(array([[234]]))-234.)<=err - assert abs(t(array([234],'1'))+22.)<=err - assert abs(t(array([234],'s'))-234.)<=err - assert abs(t(array([234],'i'))-234.)<=err - assert abs(t(array([234],'l'))-234.)<=err - assert abs(t(array([234],'b'))-234.)<=err - assert abs(t(array([234],'f'))-234.)<=err - assert abs(t(array([234],'d'))-234.)<=err - assert abs(t(array([234+3j],'F'))-(234+3j))<=err - assert abs(t(array([234],'D'))-234.)<=err - - try: raise RuntimeError,`t(array([234],'c'))` - except TypeError: pass - try: raise RuntimeError,`t('abc')` - except TypeError: pass - - try: raise RuntimeError,`t([])` - except IndexError: pass - try: raise RuntimeError,`t(())` - except IndexError: pass - - try: raise RuntimeError,`t(t)` - except TypeError: pass - try: raise RuntimeError,`t({})` - except TypeError: pass - - try: - try: raise RuntimeError,`t(10l**400)` - except OverflowError: pass - except RuntimeError: - r = t(10l**400); assert `r` in ['(inf+0j)','(Infinity+0j)'],`r` - -if __name__=='__main__': - #import libwadpy - repeat,f2py_opts = f2py2e.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py2e.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' diff --git a/numpy/f2py/tests/f77/return_integer.py b/numpy/f2py/tests/f77/return_integer.py deleted file mode 100644 index fe9e70fda..000000000 --- a/numpy/f2py/tests/f77/return_integer.py +++ /dev/null @@ -1,147 +0,0 @@ -__usage__ = """ -Run: - python return_integer.py [<f2py options>] -Examples: - python return_integer.py --fcompiler=Gnu --no-wrap-functions - python return_integer.py --quiet -""" - -import numpy.f2py as f2py2e -from numpy import array - -def build(f2py_opts): - try: - import f77_ext_return_integer - except ImportError: - assert not f2py2e.compile('''\ - function t0(value) - integer value - integer t0 - t0 = value - end - function t1(value) - integer*1 value - integer*1 t1 - t1 = value - end - function t2(value) - integer*2 value - integer*2 t2 - t2 = value - end - function t4(value) - integer*4 value - integer*4 t4 - t4 = value - end - function t8(value) - integer*8 value - integer*8 t8 - t8 = value - end - - subroutine s0(t0,value) - integer value - integer t0 -cf2py intent(out) t0 - t0 = value - end - subroutine s1(t1,value) - integer*1 value - integer*1 t1 -cf2py intent(out) t1 - t1 = value - end - subroutine s2(t2,value) - integer*2 value - integer*2 t2 -cf2py intent(out) t2 - t2 = value - end - subroutine s4(t4,value) - integer*4 value - integer*4 t4 -cf2py intent(out) t4 - t4 = value - end - subroutine s8(t8,value) - integer*8 value - integer*8 t8 -cf2py intent(out) t8 - t8 = value - end - -''','f77_ext_return_integer',f2py_opts,source_fn='f77_ret_int.f') - - from f77_ext_return_integer import t0,t1,t2,t4,t8,s0,s1,s2,s4,s8 - test_functions = [t0,t1,t2,t4,t8,s0,s1,s2,s4,s8] - return test_functions - -def runtest(t): - import sys - assert t(123)==123,`t(123)` - assert t(123.6)==123 - assert t(123l)==123 - if sys.version[:3]<'2.3': - assert t(123.6+3j)==123 - assert t('123')==123 - assert t(-123)==-123 - assert t([123])==123 - assert t((123,))==123 - assert t(array(123))==123 - assert t(array([123]))==123 - assert t(array([[123]]))==123 - assert t(array([123],'b'))==123 - assert t(array([123],'h'))==123 - assert t(array([123],'i'))==123 - assert t(array([123],'l'))==123 - assert t(array([123],'B'))==123 - assert t(array([123],'f'))==123 - assert t(array([123],'d'))==123 - if sys.version[:3]<'2.3': - assert t(array([123+3j],'F'))==123 - assert t(array([123],'D'))==123 - - - try: raise RuntimeError,`t(array([123],'c'))` - except ValueError: pass - try: raise RuntimeError,`t('abc')` - except ValueError: pass - - try: raise RuntimeError,`t([])` - except IndexError: pass - try: raise RuntimeError,`t(())` - except IndexError: pass - - try: raise RuntimeError,`t(t)` - except TypeError: pass - try: raise RuntimeError,`t({})` - except TypeError: pass - - if t.__doc__.split()[0] in ['t8','s8']: - try: raise RuntimeError,`t(100000000000000000000000l)` - except OverflowError: pass - try: raise RuntimeError,`t(10000000011111111111111.23)` - except OverflowError: pass - else: - if sys.version[:3]<'2.3': - try: raise RuntimeError,`t(10000000000000l)` - except OverflowError: pass - try: raise RuntimeError,`t(10000000000.23)` - except OverflowError: pass - -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 numpy.f2py.diagnose as diagnose - #diagnose.run() diff --git a/numpy/f2py/tests/f77/return_logical.py b/numpy/f2py/tests/f77/return_logical.py deleted file mode 100644 index cc5f9cb05..000000000 --- a/numpy/f2py/tests/f77/return_logical.py +++ /dev/null @@ -1,133 +0,0 @@ -__usage__ = """ -Run: - python return_logical.py [<f2py options>] -Examples: - python return_logical.py --fcompiler=Gnu --no-wrap-functions - python return_logical.py --quiet -""" - -import f2py2e -from Numeric import array -try: True -except NameError: - True = 1 - False = 0 - -def build(f2py_opts): - try: - import f77_ext_return_logical - except ImportError: - assert not f2py2e.compile('''\ - function t0(value) - logical value - logical t0 - t0 = value - end - function t1(value) - logical*1 value - logical*1 t1 - t1 = value - end - function t2(value) - logical*2 value - logical*2 t2 - t2 = value - end - function t4(value) - logical*4 value - logical*4 t4 - t4 = value - end -c function t8(value) -c logical*8 value -c logical*8 t8 -c t8 = value -c end - - subroutine s0(t0,value) - logical value - logical t0 -cf2py intent(out) t0 - t0 = value - end - subroutine s1(t1,value) - logical*1 value - logical*1 t1 -cf2py intent(out) t1 - t1 = value - end - subroutine s2(t2,value) - logical*2 value - logical*2 t2 -cf2py intent(out) t2 - t2 = value - end - subroutine s4(t4,value) - logical*4 value - logical*4 t4 -cf2py intent(out) t4 - t4 = value - end -c subroutine s8(t8,value) -c logical*8 value -c logical*8 t8 -cf2py intent(out) t8 -c t8 = value -c end -''','f77_ext_return_logical',f2py_opts) - - #from f77_ext_return_logical import t0,t1,t2,t4,t8,s0,s1,s2,s4,s8 - #test_functions = [t0,t1,t2,t4,t8,s0,s1,s2,s4,s8] - from f77_ext_return_logical import t0,t1,t2,t4,s0,s1,s2,s4 - test_functions = [t0,t1,t2,t4,s0,s1,s2,s4] - return test_functions - -def runtest(t): - assert t(True)==1,`t(True)` - assert t(False)==0,`t(False)` - assert t(0)==0 - assert t(None)==0 - assert t(0.0)==0 - assert t(0j)==0 - assert t(1j)==1 - assert t(234)==1 - assert t(234.6)==1 - assert t(234l)==1 - assert t(234.6+3j)==1 - assert t('234')==1 - assert t('aaa')==1 - assert t('')==0 - assert t([])==0 - assert t(())==0 - assert t({})==0 - assert t(t)==1 - assert t(-234)==1 - assert t(10l**100)==1 - assert t([234])==1 - assert t((234,))==1 - assert t(array(234))==1 - assert t(array([234]))==1 - assert t(array([[234]]))==1 - assert t(array([234],'1'))==1 - assert t(array([234],'s'))==1 - assert t(array([234],'i'))==1 - assert t(array([234],'l'))==1 - assert t(array([234],'b'))==1 - assert t(array([234],'f'))==1 - assert t(array([234],'d'))==1 - assert t(array([234+3j],'F'))==1 - assert t(array([234],'D'))==1 - assert t(array(0))==0 - assert t(array([0]))==0 - assert t(array([[0]]))==0 - assert t(array([0j]))==0 - assert t(array([1]))==1 - assert t(array([0,0]))==0 - assert t(array([0,1]))==1 #XXX: is this expected? - -if __name__=='__main__': - #import libwadpy - repeat,f2py_opts = f2py2e.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py2e.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' diff --git a/numpy/f2py/tests/f77/return_real.py b/numpy/f2py/tests/f77/return_real.py deleted file mode 100644 index a751743e9..000000000 --- a/numpy/f2py/tests/f77/return_real.py +++ /dev/null @@ -1,126 +0,0 @@ -__usage__ = """ -Run: - python return_real.py [<f2py options>] -Examples: - python return_real.py --fcompiler=Gnu --no-wrap-functions - python return_real.py --quiet -""" - -import numpy.f2py as f2py2e -from numpy import array - -def build(f2py_opts): - try: - import f77_ext_return_real - except ImportError: - assert not f2py2e.compile('''\ - function t0(value) - real value - real t0 - t0 = value - end - function t4(value) - real*4 value - real*4 t4 - t4 = value - end - function t8(value) - real*8 value - real*8 t8 - t8 = value - end - function td(value) - double precision value - double precision td - td = value - end - - subroutine s0(t0,value) - real value - real t0 -cf2py intent(out) t0 - t0 = value - end - subroutine s4(t4,value) - real*4 value - real*4 t4 -cf2py intent(out) t4 - t4 = value - end - subroutine s8(t8,value) - real*8 value - real*8 t8 -cf2py intent(out) t8 - t8 = value - end - subroutine sd(td,value) - double precision value - double precision td -cf2py intent(out) td - td = value - end -''','f77_ext_return_real',f2py_opts,source_fn='f77_ret_real.f') - - from f77_ext_return_real import t0,t4,t8,td,s0,s4,s8,sd - test_functions = [t0,t4,t8,td,s0,s4,s8,sd] - return test_functions - -def runtest(t): - import sys - if t.__doc__.split()[0] in ['t0','t4','s0','s4']: - err = 1e-5 - else: - err = 0.0 - assert abs(t(234)-234.0)<=err - assert abs(t(234.6)-234.6)<=err - assert abs(t(234l)-234.0)<=err - if sys.version[:3]<'2.3': - assert abs(t(234.6+3j)-234.6)<=err - assert abs(t('234')-234)<=err - assert abs(t('234.6')-234.6)<=err - assert abs(t(-234)+234)<=err - assert abs(t([234])-234)<=err - assert abs(t((234,))-234.)<=err - assert abs(t(array(234))-234.)<=err - assert abs(t(array([234]))-234.)<=err - assert abs(t(array([[234]]))-234.)<=err - assert abs(t(array([234],'b'))+22)<=err - assert abs(t(array([234],'h'))-234.)<=err - assert abs(t(array([234],'i'))-234.)<=err - assert abs(t(array([234],'l'))-234.)<=err - assert abs(t(array([234],'B'))-234.)<=err - assert abs(t(array([234],'f'))-234.)<=err - assert abs(t(array([234],'d'))-234.)<=err - if sys.version[:3]<'2.3': - assert abs(t(array([234+3j],'F'))-234.)<=err - assert abs(t(array([234],'D'))-234.)<=err - if t.__doc__.split()[0] in ['t0','t4','s0','s4']: - assert t(1e200)==t(1e300) # inf - - try: raise RuntimeError,`t(array([234],'c'))` - except ValueError: pass - try: raise RuntimeError,`t('abc')` - except ValueError: pass - - try: raise RuntimeError,`t([])` - except IndexError: pass - try: raise RuntimeError,`t(())` - except IndexError: pass - - try: raise RuntimeError,`t(t)` - except TypeError: pass - try: raise RuntimeError,`t({})` - except TypeError: pass - - try: - try: raise RuntimeError,`t(10l**400)` - except OverflowError: pass - except RuntimeError: - r = t(10l**400); assert `r` in ['inf','Infinity'],`r` - -if __name__=='__main__': - #import libwadpy - repeat,f2py_opts = f2py2e.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py2e.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' diff --git a/numpy/f2py/tests/f90/return_character.py b/numpy/f2py/tests/f90/return_character.py deleted file mode 100644 index b7384bd36..000000000 --- a/numpy/f2py/tests/f90/return_character.py +++ /dev/null @@ -1,105 +0,0 @@ -__usage__ = """ -Run: - python return_character.py [<f2py options>] -Examples: - python return_character.py --fcompiler=Gnu --no-wrap-functions - python return_character.py --quiet -""" - -import numpy.f2py as f2py -from numpy import array - -def build(f2py_opts): - try: - import f90_ext_return_character - except ImportError: - assert not f2py.compile('''\ -module f90_return_char - contains - function t0(value) - character :: value - character :: t0 - t0 = value - end function t0 - function t1(value) - character(len=1) :: value - character(len=1) :: t1 - t1 = value - end function t1 - function t5(value) - character(len=5) :: value - character(len=5) :: t5 - t5 = value - end function t5 - function ts(value) - character(len=*) :: value - character(len=10) :: ts - ts = value - end function ts - - subroutine s0(t0,value) - character :: value - character :: t0 -!f2py intent(out) t0 - t0 = value - end subroutine s0 - subroutine s1(t1,value) - character(len=1) :: value - character(len=1) :: t1 -!f2py intent(out) t1 - t1 = value - end subroutine s1 - subroutine s5(t5,value) - character(len=5) :: value - character(len=5) :: t5 -!f2py intent(out) t5 - t5 = value - end subroutine s5 - subroutine ss(ts,value) - character(len=*) :: value - character(len=10) :: ts -!f2py intent(out) ts - ts = value - end subroutine ss -end module f90_return_char -''','f90_ext_return_character',f2py_opts,source_fn='f90_ret_char.f90') - - from f90_ext_return_character import f90_return_char as m - test_functions = [m.t0,m.t1,m.t5,m.ts,m.s0,m.s1,m.s5,m.ss] - return test_functions - - -def runtest(t): - tname = t.__doc__.split()[0] - if tname in ['t0','t1','s0','s1']: - assert t(23)=='2' - r = t('ab');assert r=='a',`r` - r = t(array('ab'));assert r=='a',`r` - r = t(array(77,'l'));assert r=='M',`r` - - try: raise RuntimeError,`t(array([77,87]))` - except ValueError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 1" - - try: raise RuntimeError,`t(array(77))` - except ValueError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 2" - - elif tname in ['ts','ss']: - assert t(23)=='23 ',`t(23)` - assert t('123456789abcdef')=='123456789a',`t('123456789abcdef')` - elif tname in ['t5','s5']: - assert t(23)=='23 ' - assert t('ab')=='ab ' - assert t('123456789abcdef')=='12345' - else: - raise NotImplementedError - -if __name__=='__main__': - #import libwadpy - repeat,f2py_opts = f2py.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' diff --git a/numpy/f2py/tests/f90/return_complex.py b/numpy/f2py/tests/f90/return_complex.py deleted file mode 100644 index fa513dcb0..000000000 --- a/numpy/f2py/tests/f90/return_complex.py +++ /dev/null @@ -1,141 +0,0 @@ -__usage__ = """ -Run: - python return_complex.py [<f2py options>] -Examples: - python return_complex.py --quiet -""" - -import numpy.f2py as f2py -from numpy import array - -def build(f2py_opts): - try: - import f90_ext_return_complex - except ImportError: - assert not f2py.compile('''\ -module f90_return_complex - contains - function t0(value) - complex :: value - complex :: t0 - t0 = value - end function t0 - function t8(value) - complex(kind=4) :: value - complex(kind=4) :: t8 - t8 = value - end function t8 - function t16(value) - complex(kind=8) :: value - complex(kind=8) :: t16 - t16 = value - end function t16 - function td(value) - double complex :: value - double complex :: td - td = value - end function td - - subroutine s0(t0,value) - complex :: value - complex :: t0 -!f2py intent(out) t0 - t0 = value - end subroutine s0 - subroutine s8(t8,value) - complex(kind=4) :: value - complex(kind=4) :: t8 -!f2py intent(out) t8 - t8 = value - end subroutine s8 - subroutine s16(t16,value) - complex(kind=8) :: value - complex(kind=8) :: t16 -!f2py intent(out) t16 - t16 = value - end subroutine s16 - subroutine sd(td,value) - double complex :: value - double complex :: td -!f2py intent(out) td - td = value - end subroutine sd -end module f90_return_complex -''','f90_ext_return_complex',f2py_opts,source_fn='f90_ret_cmlx.f90') - - from f90_ext_return_complex import f90_return_complex as m - test_functions = [m.t0,m.t8,m.t16,m.td,m.s0,m.s8,m.s16,m.sd] - return test_functions - - -def runtest(t): - tname = t.__doc__.split()[0] - if tname in ['t0','t8','s0','s8']: - err = 1e-5 - else: - err = 0.0 - #assert abs(t(234j)-234.0j)<=err - assert abs(t(234.6)-234.6)<=err - assert abs(t(234l)-234.0)<=err - assert abs(t(234.6+3j)-(234.6+3j))<=err - #assert abs(t('234')-234.)<=err - #assert abs(t('234.6')-234.6)<=err - assert abs(t(-234)+234.)<=err - assert abs(t([234])-234.)<=err - assert abs(t((234,))-234.)<=err - assert abs(t(array(234))-234.)<=err - assert abs(t(array(23+4j,'F'))-(23+4j))<=err - assert abs(t(array([234]))-234.)<=err - assert abs(t(array([[234]]))-234.)<=err - assert abs(t(array([234],'b'))+22.)<=err - assert abs(t(array([234],'h'))-234.)<=err - assert abs(t(array([234],'i'))-234.)<=err - assert abs(t(array([234],'l'))-234.)<=err - assert abs(t(array([234],'q'))-234.)<=err - assert abs(t(array([234],'f'))-234.)<=err - assert abs(t(array([234],'d'))-234.)<=err - assert abs(t(array([234+3j],'F'))-(234+3j))<=err - assert abs(t(array([234],'D'))-234.)<=err - - try: raise RuntimeError,`t(array([234],'c'))` - except TypeError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 1" - - try: raise RuntimeError,`t('abc')` - except TypeError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 2" - - try: raise RuntimeError,`t([])` - except IndexError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 3" - - try: raise RuntimeError,`t(())` - except IndexError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 4" - - try: raise RuntimeError,`t(t)` - except TypeError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 5" - - try: raise RuntimeError,`t({})` - except TypeError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 6" - - try: - try: raise RuntimeError,`t(10l**400)` - except OverflowError: pass - except RuntimeError: - r = t(10l**400); assert `r` in ['(inf+0j)','(Infinity+0j)'],`r` - -if __name__=='__main__': - #import libwadpy - repeat,f2py_opts = f2py.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' diff --git a/numpy/f2py/tests/f90/return_integer.py b/numpy/f2py/tests/f90/return_integer.py deleted file mode 100644 index de77e4dfb..000000000 --- a/numpy/f2py/tests/f90/return_integer.py +++ /dev/null @@ -1,165 +0,0 @@ -# XXX: investigate cases that are disabled under win32 -# - -__usage__ = """ -Run: - python return_integer.py [<f2py options>] -Examples: - python return_integer.py --quiet -""" - -import sys -import numpy.f2py as f2py -from numpy import array - -def build(f2py_opts): - try: - import f90_ext_return_integer - except ImportError: - assert not f2py.compile('''\ -module f90_return_integer - contains - function t0(value) - integer :: value - integer :: t0 - t0 = value - end function t0 - function t1(value) - integer(kind=1) :: value - integer(kind=1) :: t1 - t1 = value - end function t1 - function t2(value) - integer(kind=2) :: value - integer(kind=2) :: t2 - t2 = value - end function t2 - function t4(value) - integer(kind=4) :: value - integer(kind=4) :: t4 - t4 = value - end function t4 - function t8(value) - integer(kind=8) :: value - integer(kind=8) :: t8 - t8 = value - end function t8 - - subroutine s0(t0,value) - integer :: value - integer :: t0 -!f2py intent(out) t0 - t0 = value - end subroutine s0 - subroutine s1(t1,value) - integer(kind=1) :: value - integer(kind=1) :: t1 -!f2py intent(out) t1 - t1 = value - end subroutine s1 - subroutine s2(t2,value) - integer(kind=2) :: value - integer(kind=2) :: t2 -!f2py intent(out) t2 - t2 = value - end subroutine s2 - subroutine s4(t4,value) - integer(kind=4) :: value - integer(kind=4) :: t4 -!f2py intent(out) t4 - t4 = value - end subroutine s4 - subroutine s8(t8,value) - integer(kind=8) :: value - integer(kind=8) :: t8 -!f2py intent(out) t8 - t8 = value - end subroutine s8 -end module f90_return_integer -''','f90_ext_return_integer',f2py_opts,source_fn='f90_ret_int.f90') - - from f90_ext_return_integer import f90_return_integer as m - test_functions = [m.t0,m.t1,m.t2,m.t4,m.t8,m.s0,m.s1,m.s2,m.s4,m.s8] - return test_functions - -def runtest(t): - tname = t.__doc__.split()[0] - assert t(123)==123 - assert t(123.6)==123 - assert t(123l)==123 - if sys.version[:3]<='2.2': - assert t(123.6+3j)==123 - assert t('123')==123 - assert t(-123)==-123 - assert t([123])==123 - assert t((123,))==123 - assert t(array(123))==123 - assert t(array([123]))==123 - assert t(array([[123]]))==123 - assert t(array([123],'b'))==123 - assert t(array([123],'h'))==123 - assert t(array([123],'i'))==123 - assert t(array([123],'l'))==123 - assert t(array([123],'q'))==123 - assert t(array([123],'f'))==123 - assert t(array([123],'d'))==123 - if sys.version[:3]<='2.2': - assert t(array([123+3j],'F'))==123 - assert t(array([123],'D'))==123 - - try: raise RuntimeError,`t(array([123],'c'))` - except ValueError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 1" - - try: raise RuntimeError,`t('abc')` - except ValueError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 2" - - try: raise RuntimeError,`t([])` - except IndexError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 3" - - try: raise RuntimeError,`t(())` - except IndexError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 4" - - try: raise RuntimeError,`t(t)` - except TypeError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 5" - - try: raise RuntimeError,`t({})` - except TypeError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 6" - - if tname in ['t8','s8']: - try: raise RuntimeError,`t(100000000000000000000000l)` - except OverflowError: pass - try: raise RuntimeError,`t(10000000011111111111111.23)` - except OverflowError: pass - else: - if sys.version[:3]<='2.2': - try: raise RuntimeError,`t(10000000000000l)` - except OverflowError: pass - try: raise RuntimeError,`t(10000000000.23)` - except OverflowError: pass - -if __name__=='__main__': - #import libwadpy - status = 1 - try: - repeat,f2py_opts = f2py.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' - status = 0 - finally: - if status: - print '*'*20 - print 'Running f2py.diagnose' - f2py.diagnose.run() diff --git a/numpy/f2py/tests/f90/return_logical.py b/numpy/f2py/tests/f90/return_logical.py deleted file mode 100644 index 27d7f7d35..000000000 --- a/numpy/f2py/tests/f90/return_logical.py +++ /dev/null @@ -1,138 +0,0 @@ -__usage__ = """ -Run: - python return_logical.py [<f2py options>] -Examples: - python return_logical.py --quiet -""" - -import numpy.f2py as f2py -from numpy import array - -try: True -except NameError: - True = 1 - False = 0 - -def build(f2py_opts): - try: - import f90_ext_return_logical - except ImportError: - assert not f2py.compile('''\ -module f90_return_logical - contains - function t0(value) - logical :: value - logical :: t0 - t0 = value - end function t0 - function t1(value) - logical(kind=1) :: value - logical(kind=1) :: t1 - t1 = value - end function t1 - function t2(value) - logical(kind=2) :: value - logical(kind=2) :: t2 - t2 = value - end function t2 - function t4(value) - logical(kind=4) :: value - logical(kind=4) :: t4 - t4 = value - end function t4 - function t8(value) - logical(kind=8) :: value - logical(kind=8) :: t8 - t8 = value - end function t8 - - subroutine s0(t0,value) - logical :: value - logical :: t0 -!f2py intent(out) t0 - t0 = value - end subroutine s0 - subroutine s1(t1,value) - logical(kind=1) :: value - logical(kind=1) :: t1 -!f2py intent(out) t1 - t1 = value - end subroutine s1 - subroutine s2(t2,value) - logical(kind=2) :: value - logical(kind=2) :: t2 -!f2py intent(out) t2 - t2 = value - end subroutine s2 - subroutine s4(t4,value) - logical(kind=4) :: value - logical(kind=4) :: t4 -!f2py intent(out) t4 - t4 = value - end subroutine s4 - subroutine s8(t8,value) - logical(kind=8) :: value - logical(kind=8) :: t8 -!f2py intent(out) t8 - t8 = value - end subroutine s8 -end module f90_return_logical -''','f90_ext_return_logical',f2py_opts,source_fn='f90_ret_log.f90') - - from f90_ext_return_logical import f90_return_logical as m - test_functions = [m.t0,m.t1,m.t2,m.t4,m.t8,m.s0,m.s1,m.s2,m.s4,m.s8] - return test_functions - - - - -def runtest(t): - assert t(True)==1,`t(True)` - assert t(False)==0,`t(False)` - assert t(0)==0 - assert t(None)==0 - assert t(0.0)==0 - assert t(0j)==0 - assert t(1j)==1 - assert t(234)==1 - assert t(234.6)==1 - assert t(234l)==1 - assert t(234.6+3j)==1 - assert t('234')==1 - assert t('aaa')==1 - assert t('')==0 - assert t([])==0 - assert t(())==0 - assert t({})==0 - assert t(t)==1 - assert t(-234)==1 - assert t(10l**100)==1 - assert t([234])==1 - assert t((234,))==1 - assert t(array(234))==1 - assert t(array([234]))==1 - assert t(array([[234]]))==1 - assert t(array([234],'b'))==1 - assert t(array([234],'h'))==1 - assert t(array([234],'i'))==1 - assert t(array([234],'l'))==1 - assert t(array([234],'q'))==1 - assert t(array([234],'f'))==1 - assert t(array([234],'d'))==1 - assert t(array([234+3j],'F'))==1 - assert t(array([234],'D'))==1 - assert t(array(0))==0 - assert t(array([0]))==0 - assert t(array([[0]]))==0 - assert t(array([0j]))==0 - assert t(array([1]))==1 - # The call itself raises an error. - #assert t(array([0,0])) == 0 # fails - #assert t(array([1,1])) == 1 # fails - -if __name__=='__main__': - #import libwadpy - repeat,f2py_opts = f2py.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' diff --git a/numpy/f2py/tests/f90/return_real.py b/numpy/f2py/tests/f90/return_real.py deleted file mode 100644 index 5a7e2b249..000000000 --- a/numpy/f2py/tests/f90/return_real.py +++ /dev/null @@ -1,144 +0,0 @@ -__usage__ = """ -Run: - python return_real.py [<f2py options>] -Examples: - python return_real.py --quiet -""" - -import sys -import numpy.f2py as f2py -from numpy import array - -def build(f2py_opts): - try: - import f90_ext_return_real - except ImportError: - assert not f2py.compile('''\ -module f90_return_real - contains - function t0(value) - real :: value - real :: t0 - t0 = value - end function t0 - function t4(value) - real(kind=4) :: value - real(kind=4) :: t4 - t4 = value - end function t4 - function t8(value) - real(kind=8) :: value - real(kind=8) :: t8 - t8 = value - end function t8 - function td(value) - double precision :: value - double precision :: td - td = value - end function td - - subroutine s0(t0,value) - real :: value - real :: t0 -!f2py intent(out) t0 - t0 = value - end subroutine s0 - subroutine s4(t4,value) - real(kind=4) :: value - real(kind=4) :: t4 -!f2py intent(out) t4 - t4 = value - end subroutine s4 - subroutine s8(t8,value) - real(kind=8) :: value - real(kind=8) :: t8 -!f2py intent(out) t8 - t8 = value - end subroutine s8 - subroutine sd(td,value) - double precision :: value - double precision :: td -!f2py intent(out) td - td = value - end subroutine sd -end module f90_return_real -''','f90_ext_return_real',f2py_opts,source_fn='f90_ret_real.f90') - - from f90_ext_return_real import f90_return_real as m - test_functions = [m.t0,m.t4,m.t8,m.td,m.s0,m.s4,m.s8,m.sd] - return test_functions - -def runtest(t): - tname = t.__doc__.split()[0] - if tname in ['t0','t4','s0','s4']: - err = 1e-5 - else: - err = 0.0 - assert abs(t(234)-234.0)<=err - assert abs(t(234.6)-234.6)<=err - assert abs(t(234l)-234.0)<=err - if sys.version[:3]<='2.2': - assert abs(t(234.6+3j)-234.6)<=err,`t(234.6+3j)` - assert abs(t('234')-234)<=err - assert abs(t('234.6')-234.6)<=err - assert abs(t(-234)+234)<=err - assert abs(t([234])-234)<=err - assert abs(t((234,))-234.)<=err - assert abs(t(array(234))-234.)<=err - assert abs(t(array([234]))-234.)<=err - assert abs(t(array([[234]]))-234.)<=err - assert abs(t(array([234],'b'))+22)<=err - assert abs(t(array([234],'h'))-234.)<=err - assert abs(t(array([234],'i'))-234.)<=err - assert abs(t(array([234],'l'))-234.)<=err - assert abs(t(array([234],'q'))-234.)<=err - assert abs(t(array([234],'f'))-234.)<=err - assert abs(t(array([234],'d'))-234.)<=err - if sys.version[:3]<='2.2': - assert abs(t(array([234+3j],'F'))-234.)<=err,`t(array([234+3j],'F'))` - assert abs(t(array([234],'D'))-234.)<=err,`t(array([234],'D'))` - if tname in ['t0','t4','s0','s4']: - assert t(1e200)==t(1e300) # inf - - try: raise RuntimeError,`t(array([234],'c'))` - except ValueError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 1" - - try: raise RuntimeError,`t('abc')` - except ValueError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 2" - - try: raise RuntimeError,`t([])` - except IndexError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 3" - - try: raise RuntimeError,`t(())` - except IndexError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 4" - - try: raise RuntimeError,`t(t)` - except TypeError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 5" - - try: raise RuntimeError,`t({})` - except TypeError: pass - except RuntimeError: print "Failed Error" - except: print "Wrong Error Type 6" - - try: - try: raise RuntimeError,`t(10l**400)` - except OverflowError: pass - except RuntimeError: - r = t(10l**400); assert `r` in ['inf','Infinity'],`r` - -if __name__=='__main__': - #import libwadpy - repeat,f2py_opts = f2py.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' diff --git a/numpy/f2py/tests/mixed/run.py b/numpy/f2py/tests/mixed/run.py deleted file mode 100644 index 8dbbf21f2..000000000 --- a/numpy/f2py/tests/mixed/run.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env python -__usage__ = """ -Run: - python run.py [<f2py options>] -Examples: - python run.py --quiet -""" - -import os -import sys -import f2py2e -from Numeric import array - -def build(f2py_opts): - try: - import mixed_f77_f90 - except: - d,b=os.path.split(sys.argv[0]) - files = ['foo.f','foo_fixed.f90','foo_free.f90'] - files = [os.path.join(d,f) for f in files] - files = ' '.join(files) - args = ' -c -m mixed_f77_f90 %s %s'%(files,f2py_opts) - c = '%s -c "import f2py2e;f2py2e.main()" %s' %(sys.executable,args) - s = os.system(c) - assert not s - from mixed_f77_f90 import bar11 - test_functions = [bar11] - from mixed_f77_f90 import foo_fixed as m - test_functions.append(m.bar12) - from mixed_f77_f90 import foo_free as m - test_functions.append(m.bar13) - return test_functions - -def runtest(t): - tname = t.__doc__.split()[0] - if tname=='bar11': - assert t()==11 - elif tname=='bar12': - assert t()==12 - elif tname=='bar13': - assert t()==13 - else: - raise NotImplementedError - -if __name__=='__main__': - repeat,f2py_opts = f2py2e.f2py_testing.cmdline() - test_functions = build(f2py_opts) - f2py2e.f2py_testing.run(runtest,test_functions,repeat) - print 'ok' diff --git a/numpy/f2py/tests/run_all.py b/numpy/f2py/tests/run_all.py deleted file mode 100755 index 016e68c29..000000000 --- a/numpy/f2py/tests/run_all.py +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python - -import os,sys - -opts = sys.argv[1:] -if not opts: - opts = ['10','--quiet'] - -NUMARRAY = "-DNUMARRAY" in sys.argv - -test_f77_files = [\ - 'f77/return_integer.py', - 'f77/return_logical.py', - 'f77/return_real.py', - 'f77/return_complex.py', - 'f77/callback.py', - ] - -if not NUMARRAY: # no support for character yet in numarray - test_f77_files.append('f77/return_character.py') - -test_f90_files = [\ - 'f90/return_integer.py', - 'f90/return_logical.py', - 'f90/return_real.py', - 'f90/return_complex.py', - 'f90/return_character.py', - 'mixed/run.py', - ] - -test_files = test_f77_files - -if NUMARRAY: - print >>sys.stderr,"NOTE: f2py for numarray does not support"\ - " f90 or character arrays." -else: - test_files += test_f90_files - -py_path = os.environ.get('PYTHONPATH') -if py_path is None: - py_path = '.' -else: - py_path = os.pathsep.join(['.',py_path]) -os.environ['PYTHONPATH'] = py_path - -for f in test_files: - print "**********************************************" - ff = os.path.join(sys.path[0],f) - args = [sys.executable,ff]+opts - print "Running",' '.join(args) - status = os.spawnve(os.P_WAIT,sys.executable,args,os.environ) - if status: - print 'TEST FAILURE (status=%s)' % (status) - if f=='f90/return_integer.py': - sys.exit() diff --git a/numpy/f2py/tests/array_from_pyobj/wrapmodule.c b/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c index 38a794a7d..df316c2b5 100644 --- a/numpy/f2py/tests/array_from_pyobj/wrapmodule.c +++ b/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c @@ -36,7 +36,7 @@ static PyObject *f2py_rout_wrap_call(PyObject *capi_self, PyObject *capi_args) { PyObject * volatile capi_buildvalue = NULL; int type_num = 0; - intp *dims = NULL; + npy_intp *dims = NULL; PyObject *dims_capi = Py_None; int rank = 0; int intent = 0; @@ -48,9 +48,9 @@ static PyObject *f2py_rout_wrap_call(PyObject *capi_self, &type_num,&dims_capi,&intent,&arr_capi)) return NULL; rank = PySequence_Length(dims_capi); - dims = malloc(rank*sizeof(intp)); + dims = malloc(rank*sizeof(npy_intp)); for (i=0;i<rank;++i) - dims[i] = (intp)PyInt_AsLong(PySequence_GetItem(dims_capi,i)); + dims[i] = (npy_intp)PyInt_AsLong(PySequence_GetItem(dims_capi,i)); capi_arr_tmp = array_from_pyobj(type_num,dims,rank,intent|F2PY_INTENT_OUT,arr_capi); if (capi_arr_tmp == NULL) @@ -114,9 +114,9 @@ static PyMethodDef f2py_module_methods[] = { {NULL,NULL} }; -PyMODINIT_FUNC initwrap(void) { +PyMODINIT_FUNC inittest_array_from_pyobj_ext(void) { PyObject *m,*d, *s; - m = wrap_module = Py_InitModule("wrap", f2py_module_methods); + m = wrap_module = Py_InitModule("test_array_from_pyobj_ext", f2py_module_methods); PyFortran_Type.ob_type = &PyType_Type; import_array(); if (PyErr_Occurred()) @@ -164,15 +164,15 @@ PyMODINIT_FUNC initwrap(void) { PyDict_SetItemString(d, "PyArray_NOTYPE", PyInt_FromLong(PyArray_NOTYPE)); PyDict_SetItemString(d, "PyArray_UDERDEF", PyInt_FromLong(PyArray_USERDEF)); - PyDict_SetItemString(d, "CONTIGUOUS", PyInt_FromLong(CONTIGUOUS)); - PyDict_SetItemString(d, "FORTRAN", PyInt_FromLong(FORTRAN)); - PyDict_SetItemString(d, "OWNDATA", PyInt_FromLong(OWNDATA)); - PyDict_SetItemString(d, "FORCECAST", PyInt_FromLong(FORCECAST)); - PyDict_SetItemString(d, "ENSURECOPY", PyInt_FromLong(ENSURECOPY)); - PyDict_SetItemString(d, "ENSUREARRAY", PyInt_FromLong(ENSUREARRAY)); - PyDict_SetItemString(d, "ALIGNED", PyInt_FromLong(ALIGNED)); - PyDict_SetItemString(d, "WRITEABLE", PyInt_FromLong(WRITEABLE)); - PyDict_SetItemString(d, "UPDATEIFCOPY", PyInt_FromLong(UPDATEIFCOPY)); + PyDict_SetItemString(d, "CONTIGUOUS", PyInt_FromLong(NPY_CONTIGUOUS)); + PyDict_SetItemString(d, "FORTRAN", PyInt_FromLong(NPY_FORTRAN)); + PyDict_SetItemString(d, "OWNDATA", PyInt_FromLong(NPY_OWNDATA)); + PyDict_SetItemString(d, "FORCECAST", PyInt_FromLong(NPY_FORCECAST)); + PyDict_SetItemString(d, "ENSURECOPY", PyInt_FromLong(NPY_ENSURECOPY)); + PyDict_SetItemString(d, "ENSUREARRAY", PyInt_FromLong(NPY_ENSUREARRAY)); + PyDict_SetItemString(d, "ALIGNED", PyInt_FromLong(NPY_ALIGNED)); + PyDict_SetItemString(d, "WRITEABLE", PyInt_FromLong(NPY_WRITEABLE)); + PyDict_SetItemString(d, "UPDATEIFCOPY", PyInt_FromLong(NPY_UPDATEIFCOPY)); PyDict_SetItemString(d, "BEHAVED", PyInt_FromLong(NPY_BEHAVED)); PyDict_SetItemString(d, "BEHAVED_NS", PyInt_FromLong(NPY_BEHAVED_NS)); diff --git a/numpy/f2py/tests/mixed/foo.f b/numpy/f2py/tests/src/mixed/foo.f index c34742578..c34742578 100644 --- a/numpy/f2py/tests/mixed/foo.f +++ b/numpy/f2py/tests/src/mixed/foo.f diff --git a/numpy/f2py/tests/mixed/foo_fixed.f90 b/numpy/f2py/tests/src/mixed/foo_fixed.f90 index 7543a6acb..7543a6acb 100644 --- a/numpy/f2py/tests/mixed/foo_fixed.f90 +++ b/numpy/f2py/tests/src/mixed/foo_fixed.f90 diff --git a/numpy/f2py/tests/mixed/foo_free.f90 b/numpy/f2py/tests/src/mixed/foo_free.f90 index c1b641f13..c1b641f13 100644 --- a/numpy/f2py/tests/mixed/foo_free.f90 +++ b/numpy/f2py/tests/src/mixed/foo_free.f90 diff --git a/numpy/f2py/tests/array_from_pyobj/tests/test_array_from_pyobj.py b/numpy/f2py/tests/test_array_from_pyobj.py index c43c3eaba..7db481981 100644 --- a/numpy/f2py/tests/array_from_pyobj/tests/test_array_from_pyobj.py +++ b/numpy/f2py/tests/test_array_from_pyobj.py @@ -1,11 +1,33 @@ import unittest +import os import sys import copy from numpy.testing import * from numpy import array, alltrue, ndarray, asarray, can_cast,zeros, dtype from numpy.core.multiarray import typeinfo -from array_from_pyobj import wrap + +import util + +wrap = None +def setup(): + """ + Build the required testing extension module + + """ + global wrap + if wrap is None: + config_code = """ + config.add_extension('test_array_from_pyobj_ext', + sources=['wrapmodule.c', 'fortranobject.c'], + define_macros=[]) + """ + d = os.path.dirname(__file__) + src = [os.path.join(d, 'src', 'array_from_pyobj', 'wrapmodule.c'), + os.path.join(d, '..', 'src', 'fortranobject.c'), + os.path.join(d, '..', 'src', 'fortranobject.h')] + wrap = util.build_module_distutils(src, config_code, + 'test_array_from_pyobj_ext') def flags_info(arr): flags = wrap.array_attrs(arr)[6] @@ -51,7 +73,6 @@ class Intent: intent = Intent() class Type(object): - _type_names = ['BOOL','BYTE','UBYTE','SHORT','USHORT','INT','UINT', 'LONG','ULONG','LONGLONG','ULONGLONG', 'FLOAT','DOUBLE','LONGDOUBLE','CFLOAT','CDOUBLE', @@ -170,15 +191,14 @@ class Array: if intent.is_intent('cache'): assert isinstance(obj,ndarray),`type(obj)` - self.pyarr = array(obj).reshape(*dims) - + self.pyarr = array(obj).reshape(*dims).copy() else: self.pyarr = array(array(obj, dtype = typ.dtypechar).reshape(*dims), - fortran=not self.intent.is_intent('c')) - assert self.pyarr.dtype.char==typ.dtypechar,\ - `self.pyarr.dtype.char,typ.dtypechar` - assert self.pyarr.flags['OWNDATA'] + order=self.intent.is_intent('c') and 'C' or 'F') + assert self.pyarr.dtype == typ, \ + `self.pyarr.dtype,typ` + assert self.pyarr.flags['OWNDATA'], (obj, intent) self.pyarr_attr = wrap.array_attrs(self.pyarr) if len(dims)>1: @@ -275,12 +295,12 @@ class _test_shared_memory: raise SystemError,'intent(inout) should have failed on sequence' def test_f_inout_23seq(self): - obj = array(self.num23seq,dtype=self.type.dtype,fortran=1) + obj = array(self.num23seq,dtype=self.type.dtype,order='F') shape = (len(self.num23seq),len(self.num23seq[0])) a = self.array(shape,intent.in_.inout,obj) assert a.has_shared_memory() - obj = array(self.num23seq,dtype=self.type.dtype,fortran=0) + obj = array(self.num23seq,dtype=self.type.dtype,order='C') shape = (len(self.num23seq),len(self.num23seq[0])) try: a = self.array(shape,intent.in_.inout,obj) @@ -316,7 +336,7 @@ class _test_shared_memory: def test_f_in_from_23casttype(self): for t in self.type.cast_types(): - obj = array(self.num23seq,dtype=t.dtype,fortran=1) + obj = array(self.num23seq,dtype=t.dtype,order='F') a = self.array([len(self.num23seq),len(self.num23seq[0])], intent.in_,obj) if t.elsize==self.type.elsize: @@ -336,7 +356,7 @@ class _test_shared_memory: def test_f_copy_in_from_23casttype(self): for t in self.type.cast_types(): - obj = array(self.num23seq,dtype=t.dtype,fortran=1) + obj = array(self.num23seq,dtype=t.dtype,order='F') a = self.array([len(self.num23seq),len(self.num23seq[0])], intent.in_.copy,obj) assert not a.has_shared_memory(),`t.dtype` @@ -360,7 +380,7 @@ class _test_shared_memory: a = self.array(shape,intent.in_.cache,obj) assert a.has_shared_memory(),`t.dtype` - obj = array(self.num2seq,dtype=t.dtype,fortran=1) + obj = array(self.num2seq,dtype=t.dtype,order='F') a = self.array(shape,intent.in_.c.cache,obj) assert a.has_shared_memory(),`t.dtype` @@ -505,9 +525,11 @@ for t in Type._type_names: class test_%s_gen(unittest.TestCase, _test_shared_memory ): - type = Type(%r) + def setUp(self): + self.type = Type(%r) array = lambda self,dims,intent,obj: Array(Type(%r),dims,intent,obj) ''' % (t,t,t) if __name__ == "__main__": - run_module_suite() + import nose + nose.runmodule() diff --git a/numpy/f2py/tests/test_callback.py b/numpy/f2py/tests/test_callback.py new file mode 100644 index 000000000..f2c99d7a4 --- /dev/null +++ b/numpy/f2py/tests/test_callback.py @@ -0,0 +1,74 @@ +from numpy.testing import * +from numpy import array +import math +import util + +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 + """ + + def test_all(self): + for name in "t,t2".split(","): + yield self.check_function, name + + def check_function(self, name): + t = getattr(self.module, name) + 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` + 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` + + r = t(self.module.func, fun_extra_args=(6,)) + assert r==17,`r` + r = t(self.module.func0) + assert r==11,`r` + r = t(self.module.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 nose + nose.runmodule() diff --git a/numpy/f2py/tests/test_mixed.py b/numpy/f2py/tests/test_mixed.py new file mode 100644 index 000000000..53534c114 --- /dev/null +++ b/numpy/f2py/tests/test_mixed.py @@ -0,0 +1,24 @@ +import os +import math + +from numpy.testing import * +from numpy import array + +import util + +def _path(*a): + return os.path.join(*((os.path.dirname(__file__),) + a)) + +class TestMixed(util.F2PyTest): + sources = [_path('src', 'mixed', 'foo.f'), + _path('src', 'mixed', 'foo_fixed.f90'), + _path('src', 'mixed', 'foo_free.f90')] + + def test_all(self): + assert self.module.bar11() == 11 + assert self.module.foo_fixed.bar12() == 12 + assert self.module.foo_free.bar13() == 13 + +if __name__ == "__main__": + import nose + nose.runmodule() diff --git a/numpy/f2py/tests/test_return_character.py b/numpy/f2py/tests/test_return_character.py new file mode 100644 index 000000000..166ed1f54 --- /dev/null +++ b/numpy/f2py/tests/test_return_character.py @@ -0,0 +1,146 @@ +from numpy.testing import * +from numpy import array +import util + +class TestReturnCharacter(util.F2PyTest): + def _check_function(self, t): + tname = t.__doc__.split()[0] + if tname in ['t0','t1','s0','s1']: + assert t(23)=='2' + r = t('ab');assert r=='a',`r` + r = t(array('ab'));assert r=='a',`r` + r = t(array(77,'u1'));assert r=='M',`r` + #assert_raises(ValueError, t, array([77,87])) + #assert_raises(ValueError, t, array(77)) + elif tname in ['ts','ss']: + assert t(23)=='23 ',`t(23)` + assert t('123456789abcdef')=='123456789a' + elif tname in ['t5','s5']: + assert t(23)=='23 ',`t(23)` + assert t('ab')=='ab ',`t('ab')` + assert t('123456789abcdef')=='12345' + else: + raise NotImplementedError + +class TestF77ReturnCharacter(TestReturnCharacter): + code = """ + function t0(value) + character value + character t0 + t0 = value + end + function t1(value) + character*1 value + character*1 t1 + t1 = value + end + function t5(value) + character*5 value + character*5 t5 + t5 = value + end + function ts(value) + character*(*) value + character*(*) ts + ts = value + end + + subroutine s0(t0,value) + character value + character t0 +cf2py intent(out) t0 + t0 = value + end + subroutine s1(t1,value) + character*1 value + character*1 t1 +cf2py intent(out) t1 + t1 = value + end + subroutine s5(t5,value) + character*5 value + character*5 t5 +cf2py intent(out) t5 + t5 = value + end + subroutine ss(ts,value) + character*(*) value + character*10 ts +cf2py intent(out) ts + ts = value + end + """ + + def test_all(self): + for name in "t0,t1,t5,s0,s1,s5,ss".split(","): + yield self.check_function, name + + def check_function(self, name): + t = getattr(self.module, name) + self._check_function(t) + + +class TestF90ReturnCharacter(TestReturnCharacter): + suffix = ".f90" + code = """ +module f90_return_char + contains + function t0(value) + character :: value + character :: t0 + t0 = value + end function t0 + function t1(value) + character(len=1) :: value + character(len=1) :: t1 + t1 = value + end function t1 + function t5(value) + character(len=5) :: value + character(len=5) :: t5 + t5 = value + end function t5 + function ts(value) + character(len=*) :: value + character(len=10) :: ts + ts = value + end function ts + + subroutine s0(t0,value) + character :: value + character :: t0 +!f2py intent(out) t0 + t0 = value + end subroutine s0 + subroutine s1(t1,value) + character(len=1) :: value + character(len=1) :: t1 +!f2py intent(out) t1 + t1 = value + end subroutine s1 + subroutine s5(t5,value) + character(len=5) :: value + character(len=5) :: t5 +!f2py intent(out) t5 + t5 = value + end subroutine s5 + subroutine ss(ts,value) + character(len=*) :: value + character(len=10) :: ts +!f2py intent(out) ts + ts = value + end subroutine ss +end module f90_return_char + """ + + def test_all(self): + for name in "t0,t1,t5,ts,s0,s1,s5,ss".split(","): + yield self.check_function, name + + def check_function(self, name): + t = getattr(self.module.f90_return_char, name) + self._check_function(t) + +if __name__ == "__main__": + import nose + nose.runmodule() diff --git a/numpy/f2py/tests/test_return_complex.py b/numpy/f2py/tests/test_return_complex.py new file mode 100644 index 000000000..ce5355a62 --- /dev/null +++ b/numpy/f2py/tests/test_return_complex.py @@ -0,0 +1,172 @@ +from numpy.testing import * +from numpy import array +import util + +class TestReturnComplex(util.F2PyTest): + def _check_function(self, t): + tname = t.__doc__.split()[0] + if tname in ['t0','t8','s0','s8']: + err = 1e-5 + else: + err = 0.0 + assert abs(t(234j)-234.0j)<=err + assert abs(t(234.6)-234.6)<=err + assert abs(t(234l)-234.0)<=err + assert abs(t(234.6+3j)-(234.6+3j))<=err + #assert abs(t('234')-234.)<=err + #assert abs(t('234.6')-234.6)<=err + assert abs(t(-234)+234.)<=err + assert abs(t([234])-234.)<=err + assert abs(t((234,))-234.)<=err + assert abs(t(array(234))-234.)<=err + assert abs(t(array(23+4j,'F'))-(23+4j))<=err + assert abs(t(array([234]))-234.)<=err + assert abs(t(array([[234]]))-234.)<=err + assert abs(t(array([234],'b'))+22.)<=err + assert abs(t(array([234],'h'))-234.)<=err + assert abs(t(array([234],'i'))-234.)<=err + assert abs(t(array([234],'l'))-234.)<=err + assert abs(t(array([234],'q'))-234.)<=err + assert abs(t(array([234],'f'))-234.)<=err + assert abs(t(array([234],'d'))-234.)<=err + assert abs(t(array([234+3j],'F'))-(234+3j))<=err + assert abs(t(array([234],'D'))-234.)<=err + + #assert_raises(TypeError, t, array([234], 'a1')) + assert_raises(TypeError, t, 'abc') + + assert_raises(IndexError, t, []) + assert_raises(IndexError, t, ()) + + assert_raises(TypeError, t, t) + assert_raises(TypeError, t, {}) + + try: + r = t(10l**400) + assert `r` in ['(inf+0j)','(Infinity+0j)'],`r` + except OverflowError: + pass + + +class TestF77ReturnComplex(TestReturnComplex): + code = """ + function t0(value) + complex value + complex t0 + t0 = value + end + function t8(value) + complex*8 value + complex*8 t8 + t8 = value + end + function t16(value) + complex*16 value + complex*16 t16 + t16 = value + end + function td(value) + double complex value + double complex td + td = value + end + + subroutine s0(t0,value) + complex value + complex t0 +cf2py intent(out) t0 + t0 = value + end + subroutine s8(t8,value) + complex*8 value + complex*8 t8 +cf2py intent(out) t8 + t8 = value + end + subroutine s16(t16,value) + complex*16 value + complex*16 t16 +cf2py intent(out) t16 + t16 = value + end + subroutine sd(td,value) + double complex value + double complex td +cf2py intent(out) td + td = value + end + """ + + def test_all(self): + for name in "t0,t8,t16,td,s0,s8,s16,sd".split(","): + yield self.check_function, name + + def check_function(self, name): + t = getattr(self.module, name) + self._check_function(t) + + +class TestF90ReturnComplex(TestReturnComplex): + suffix = ".f90" + code = """ +module f90_return_complex + contains + function t0(value) + complex :: value + complex :: t0 + t0 = value + end function t0 + function t8(value) + complex(kind=4) :: value + complex(kind=4) :: t8 + t8 = value + end function t8 + function t16(value) + complex(kind=8) :: value + complex(kind=8) :: t16 + t16 = value + end function t16 + function td(value) + double complex :: value + double complex :: td + td = value + end function td + + subroutine s0(t0,value) + complex :: value + complex :: t0 +!f2py intent(out) t0 + t0 = value + end subroutine s0 + subroutine s8(t8,value) + complex(kind=4) :: value + complex(kind=4) :: t8 +!f2py intent(out) t8 + t8 = value + end subroutine s8 + subroutine s16(t16,value) + complex(kind=8) :: value + complex(kind=8) :: t16 +!f2py intent(out) t16 + t16 = value + end subroutine s16 + subroutine sd(td,value) + double complex :: value + double complex :: td +!f2py intent(out) td + td = value + end subroutine sd +end module f90_return_complex + """ + + def test_all(self): + for name in "t0,t8,t16,td,s0,s8,s16,sd".split(","): + yield self.check_function, name + + def check_function(self, name): + t = getattr(self.module.f90_return_complex, name) + self._check_function(t) + +if __name__ == "__main__": + import nose + nose.runmodule() diff --git a/numpy/f2py/tests/test_return_integer.py b/numpy/f2py/tests/test_return_integer.py new file mode 100644 index 000000000..fbda46e08 --- /dev/null +++ b/numpy/f2py/tests/test_return_integer.py @@ -0,0 +1,181 @@ +from numpy.testing import * +from numpy import array +import util + +class TestReturnInteger(util.F2PyTest): + def _check_function(self, t): + assert t(123)==123,`t(123)` + assert t(123.6)==123 + assert t(123l)==123 + assert t('123')==123 + assert t(-123)==-123 + assert t([123])==123 + assert t((123,))==123 + assert t(array(123))==123 + assert t(array([123]))==123 + assert t(array([[123]]))==123 + assert t(array([123],'b'))==123 + assert t(array([123],'h'))==123 + assert t(array([123],'i'))==123 + assert t(array([123],'l'))==123 + assert t(array([123],'B'))==123 + assert t(array([123],'f'))==123 + assert t(array([123],'d'))==123 + + #assert_raises(ValueError, t, array([123],'S3')) + assert_raises(ValueError, t, 'abc') + + assert_raises(IndexError, t, []) + assert_raises(IndexError, t, ()) + + assert_raises(Exception, t, t) + assert_raises(Exception, t, {}) + + if t.__doc__.split()[0] in ['t8','s8']: + assert_raises(OverflowError, t, 100000000000000000000000l) + assert_raises(OverflowError, t, 10000000011111111111111.23) + +class TestF77ReturnInteger(TestReturnInteger): + code = """ + function t0(value) + integer value + integer t0 + t0 = value + end + function t1(value) + integer*1 value + integer*1 t1 + t1 = value + end + function t2(value) + integer*2 value + integer*2 t2 + t2 = value + end + function t4(value) + integer*4 value + integer*4 t4 + t4 = value + end + function t8(value) + integer*8 value + integer*8 t8 + t8 = value + end + + subroutine s0(t0,value) + integer value + integer t0 +cf2py intent(out) t0 + t0 = value + end + subroutine s1(t1,value) + integer*1 value + integer*1 t1 +cf2py intent(out) t1 + t1 = value + end + subroutine s2(t2,value) + integer*2 value + integer*2 t2 +cf2py intent(out) t2 + t2 = value + end + subroutine s4(t4,value) + integer*4 value + integer*4 t4 +cf2py intent(out) t4 + t4 = value + end + subroutine s8(t8,value) + integer*8 value + integer*8 t8 +cf2py intent(out) t8 + t8 = value + end + """ + + def test_all(self): + for name in "t0,t1,t2,t4,t8,s0,s1,s2,s4,s8".split(","): + yield self.check_function, name + + def check_function(self, name): + t = getattr(self.module, name) + self._check_function(t) + + +class TestF90ReturnInteger(TestReturnInteger): + suffix = ".f90" + code = """ +module f90_return_integer + contains + function t0(value) + integer :: value + integer :: t0 + t0 = value + end function t0 + function t1(value) + integer(kind=1) :: value + integer(kind=1) :: t1 + t1 = value + end function t1 + function t2(value) + integer(kind=2) :: value + integer(kind=2) :: t2 + t2 = value + end function t2 + function t4(value) + integer(kind=4) :: value + integer(kind=4) :: t4 + t4 = value + end function t4 + function t8(value) + integer(kind=8) :: value + integer(kind=8) :: t8 + t8 = value + end function t8 + + subroutine s0(t0,value) + integer :: value + integer :: t0 +!f2py intent(out) t0 + t0 = value + end subroutine s0 + subroutine s1(t1,value) + integer(kind=1) :: value + integer(kind=1) :: t1 +!f2py intent(out) t1 + t1 = value + end subroutine s1 + subroutine s2(t2,value) + integer(kind=2) :: value + integer(kind=2) :: t2 +!f2py intent(out) t2 + t2 = value + end subroutine s2 + subroutine s4(t4,value) + integer(kind=4) :: value + integer(kind=4) :: t4 +!f2py intent(out) t4 + t4 = value + end subroutine s4 + subroutine s8(t8,value) + integer(kind=8) :: value + integer(kind=8) :: t8 +!f2py intent(out) t8 + t8 = value + end subroutine s8 +end module f90_return_integer + """ + + def test_all(self): + for name in "t0,t1,t2,t4,t8,s0,s1,s2,s4,s8".split(","): + yield self.check_function, name + + def check_function(self, name): + t = getattr(self.module.f90_return_integer, name) + self._check_function(t) + +if __name__ == "__main__": + import nose + nose.runmodule() diff --git a/numpy/f2py/tests/test_return_logical.py b/numpy/f2py/tests/test_return_logical.py new file mode 100644 index 000000000..f75a5a0ac --- /dev/null +++ b/numpy/f2py/tests/test_return_logical.py @@ -0,0 +1,190 @@ +from numpy.testing import * +from numpy import array +import util + +class TestReturnLogical(util.F2PyTest): + def _check_function(self, t): + assert t(True)==1,`t(True)` + assert t(False)==0,`t(False)` + assert t(0)==0 + assert t(None)==0 + assert t(0.0)==0 + assert t(0j)==0 + assert t(1j)==1 + assert t(234)==1 + assert t(234.6)==1 + assert t(234l)==1 + assert t(234.6+3j)==1 + assert t('234')==1 + assert t('aaa')==1 + assert t('')==0 + assert t([])==0 + assert t(())==0 + assert t({})==0 + assert t(t)==1 + assert t(-234)==1 + assert t(10l**100)==1 + assert t([234])==1 + assert t((234,))==1 + assert t(array(234))==1 + assert t(array([234]))==1 + assert t(array([[234]]))==1 + assert t(array([234],'b'))==1 + assert t(array([234],'h'))==1 + assert t(array([234],'i'))==1 + assert t(array([234],'l'))==1 + assert t(array([234],'f'))==1 + assert t(array([234],'d'))==1 + assert t(array([234+3j],'F'))==1 + assert t(array([234],'D'))==1 + assert t(array(0))==0 + assert t(array([0]))==0 + assert t(array([[0]]))==0 + assert t(array([0j]))==0 + assert t(array([1]))==1 + assert_raises(ValueError, t, array([0,0])) + + +class TestF77ReturnLogical(TestReturnLogical): + code = """ + function t0(value) + logical value + logical t0 + t0 = value + end + function t1(value) + logical*1 value + logical*1 t1 + t1 = value + end + function t2(value) + logical*2 value + logical*2 t2 + t2 = value + end + function t4(value) + logical*4 value + logical*4 t4 + t4 = value + end +c function t8(value) +c logical*8 value +c logical*8 t8 +c t8 = value +c end + + subroutine s0(t0,value) + logical value + logical t0 +cf2py intent(out) t0 + t0 = value + end + subroutine s1(t1,value) + logical*1 value + logical*1 t1 +cf2py intent(out) t1 + t1 = value + end + subroutine s2(t2,value) + logical*2 value + logical*2 t2 +cf2py intent(out) t2 + t2 = value + end + subroutine s4(t4,value) + logical*4 value + logical*4 t4 +cf2py intent(out) t4 + t4 = value + end +c subroutine s8(t8,value) +c logical*8 value +c logical*8 t8 +cf2py intent(out) t8 +c t8 = value +c end + """ + + def test_all(self): + for name in "t0,t1,t2,t4,s0,s1,s2,s4".split(","): + yield self.check_function, name + + def check_function(self, name): + t = getattr(self.module, name) + self._check_function(t) + +class TestF90ReturnLogical(TestReturnLogical): + suffix = ".f90" + code = """ +module f90_return_logical + contains + function t0(value) + logical :: value + logical :: t0 + t0 = value + end function t0 + function t1(value) + logical(kind=1) :: value + logical(kind=1) :: t1 + t1 = value + end function t1 + function t2(value) + logical(kind=2) :: value + logical(kind=2) :: t2 + t2 = value + end function t2 + function t4(value) + logical(kind=4) :: value + logical(kind=4) :: t4 + t4 = value + end function t4 + function t8(value) + logical(kind=8) :: value + logical(kind=8) :: t8 + t8 = value + end function t8 + + subroutine s0(t0,value) + logical :: value + logical :: t0 +!f2py intent(out) t0 + t0 = value + end subroutine s0 + subroutine s1(t1,value) + logical(kind=1) :: value + logical(kind=1) :: t1 +!f2py intent(out) t1 + t1 = value + end subroutine s1 + subroutine s2(t2,value) + logical(kind=2) :: value + logical(kind=2) :: t2 +!f2py intent(out) t2 + t2 = value + end subroutine s2 + subroutine s4(t4,value) + logical(kind=4) :: value + logical(kind=4) :: t4 +!f2py intent(out) t4 + t4 = value + end subroutine s4 + subroutine s8(t8,value) + logical(kind=8) :: value + logical(kind=8) :: t8 +!f2py intent(out) t8 + t8 = value + end subroutine s8 +end module f90_return_logical + """ + + def test_all(self): + for name in "t0,t1,t2,t4,t8,s0,s1,s2,s4,s8".split(","): + yield self.check_function, name + + def check_function(self, name): + t = getattr(self.module.f90_return_logical, name) + self._check_function(t) + +if __name__ == "__main__": + import nose + nose.runmodule() diff --git a/numpy/f2py/tests/test_return_real.py b/numpy/f2py/tests/test_return_real.py new file mode 100644 index 000000000..dd4c93fb9 --- /dev/null +++ b/numpy/f2py/tests/test_return_real.py @@ -0,0 +1,206 @@ +from numpy.testing import * +from numpy import array +import math +import util + +class TestReturnReal(util.F2PyTest): + def _check_function(self, t): + if t.__doc__.split()[0] in ['t0','t4','s0','s4']: + err = 1e-5 + else: + err = 0.0 + assert abs(t(234)-234.0)<=err + assert abs(t(234.6)-234.6)<=err + assert abs(t(234l)-234.0)<=err + assert abs(t('234')-234)<=err + assert abs(t('234.6')-234.6)<=err + assert abs(t(-234)+234)<=err + assert abs(t([234])-234)<=err + assert abs(t((234,))-234.)<=err + assert abs(t(array(234))-234.)<=err + assert abs(t(array([234]))-234.)<=err + assert abs(t(array([[234]]))-234.)<=err + assert abs(t(array([234],'b'))+22)<=err + assert abs(t(array([234],'h'))-234.)<=err + assert abs(t(array([234],'i'))-234.)<=err + assert abs(t(array([234],'l'))-234.)<=err + assert abs(t(array([234],'B'))-234.)<=err + assert abs(t(array([234],'f'))-234.)<=err + assert abs(t(array([234],'d'))-234.)<=err + if t.__doc__.split()[0] in ['t0','t4','s0','s4']: + assert t(1e200)==t(1e300) # inf + + #assert_raises(ValueError, t, array([234], 'S1')) + assert_raises(ValueError, t, 'abc') + + assert_raises(IndexError, t, []) + assert_raises(IndexError, t, ()) + + assert_raises(Exception, t, t) + assert_raises(Exception, t, {}) + + try: + r = t(10l**400) + assert `r` in ['inf','Infinity'],`r` + except OverflowError: + pass + +class TestCReturnReal(TestReturnReal): + suffix = ".pyf" + module_name = "c_ext_return_real" + code = """ +python module c_ext_return_real +usercode \'\'\' +float t4(float value) { return value; } +void s4(float *t4, float value) { *t4 = value; } +double t8(double value) { return value; } +void s8(double *t8, double value) { *t8 = value; } +\'\'\' +interface + function t4(value) + real*4 intent(c) :: t4,value + end + function t8(value) + real*8 intent(c) :: t8,value + end + subroutine s4(t4,value) + intent(c) s4 + real*4 intent(out) :: t4 + real*4 intent(c) :: value + end + subroutine s8(t8,value) + intent(c) s8 + real*8 intent(out) :: t8 + real*8 intent(c) :: value + end +end interface +end python module c_ext_return_real + """ + + def test_all(self): + for name in "t4,t8,s4,s8".split(","): + yield self.check_function, name + + def check_function(self, name): + self._check_function(getattr(self.module, name)) + +class TestF77ReturnReal(TestReturnReal): + code = """ + function t0(value) + real value + real t0 + t0 = value + end + function t4(value) + real*4 value + real*4 t4 + t4 = value + end + function t8(value) + real*8 value + real*8 t8 + t8 = value + end + function td(value) + double precision value + double precision td + td = value + end + + subroutine s0(t0,value) + real value + real t0 +cf2py intent(out) t0 + t0 = value + end + subroutine s4(t4,value) + real*4 value + real*4 t4 +cf2py intent(out) t4 + t4 = value + end + subroutine s8(t8,value) + real*8 value + real*8 t8 +cf2py intent(out) t8 + t8 = value + end + subroutine sd(td,value) + double precision value + double precision td +cf2py intent(out) td + td = value + end + """ + + def test_all(self): + for name in "t0,t4,t8,td,s0,s4,s8,sd".split(","): + yield self.check_function, name + + def check_function(self, name): + self._check_function(getattr(self.module, name)) + +class TestF90ReturnReal(TestReturnReal): + suffix = ".f90" + code = """ +module f90_return_real + contains + function t0(value) + real :: value + real :: t0 + t0 = value + end function t0 + function t4(value) + real(kind=4) :: value + real(kind=4) :: t4 + t4 = value + end function t4 + function t8(value) + real(kind=8) :: value + real(kind=8) :: t8 + t8 = value + end function t8 + function td(value) + double precision :: value + double precision :: td + td = value + end function td + + subroutine s0(t0,value) + real :: value + real :: t0 +!f2py intent(out) t0 + t0 = value + end subroutine s0 + subroutine s4(t4,value) + real(kind=4) :: value + real(kind=4) :: t4 +!f2py intent(out) t4 + t4 = value + end subroutine s4 + subroutine s8(t8,value) + real(kind=8) :: value + real(kind=8) :: t8 +!f2py intent(out) t8 + t8 = value + end subroutine s8 + subroutine sd(td,value) + double precision :: value + double precision :: td +!f2py intent(out) td + td = value + end subroutine sd +end module f90_return_real + """ + + def test_all(self): + for name in "t0,t4,t8,td,s0,s4,s8,sd".split(","): + yield self.check_function, name + + def check_function(self, name): + self._check_function(getattr(self.module.f90_return_real, name)) + + +if __name__ == "__main__": + import nose + nose.runmodule() diff --git a/numpy/f2py/tests/util.py b/numpy/f2py/tests/util.py new file mode 100644 index 000000000..4895dc7ca --- /dev/null +++ b/numpy/f2py/tests/util.py @@ -0,0 +1,346 @@ +""" +Utility functions for + +- building and importing modules on test time, using a temporary location +- detecting if compilers are present + +""" + +import os +import sys +import subprocess +import tempfile +import shutil +import atexit +import textwrap +import re +import random + +import nose + +from numpy.compat import asbytes +import numpy.f2py + +try: + from hashlib import md5 +except ImportError: + from md5 import new as md5 + +# +# Maintaining a temporary module directory +# + +_module_dir = None + +def _cleanup(): + global _module_dir + if _module_dir is not None: + try: + sys.path.remove(_module_dir) + except ValueError: + pass + try: + shutil.rmtree(_module_dir) + except (IOError, OSError): + pass + _module_dir = None + +def get_module_dir(): + global _module_dir + if _module_dir is None: + _module_dir = tempfile.mkdtemp() + atexit.register(_cleanup) + if _module_dir not in sys.path: + sys.path.insert(0, _module_dir) + return _module_dir + +def get_temp_module_name(): + # Assume single-threaded, and the module dir usable only by this thread + d = get_module_dir() + for j in xrange(5403, 9999999): + name = "_test_ext_module_%d" % j + fn = os.path.join(d, name) + if name not in sys.modules and not os.path.isfile(fn+'.py'): + return name + raise RuntimeError("Failed to create a temporary module name") + +def _memoize(func): + memo = {} + def wrapper(*a, **kw): + key = repr((a, kw)) + if key not in memo: + try: + memo[key] = func(*a, **kw) + except Exception, e: + memo[key] = e + raise + ret = memo[key] + if isinstance(ret, Exception): + raise ret + return ret + wrapper.__name__ = func.__name__ + return wrapper + +# +# Building modules +# + +@_memoize +def build_module(source_files, options=[], skip=[], only=[], module_name=None): + """ + Compile and import a f2py module, built from the given files. + + """ + + code = ("import sys; sys.path = %s; import numpy.f2py as f2py2e; " + "f2py2e.main()" % repr(sys.path)) + + d = get_module_dir() + + # Copy files + dst_sources = [] + for fn in source_files: + if not os.path.isfile(fn): + raise RuntimeError("%s is not a file" % fn) + dst = os.path.join(d, os.path.basename(fn)) + shutil.copyfile(fn, dst) + dst_sources.append(dst) + + # Prepare options + if module_name is None: + module_name = get_temp_module_name() + f2py_opts = ['-c', '-m', module_name] + options + dst_sources + if skip: + f2py_opts += ['skip:'] + skip + if only: + f2py_opts += ['only:'] + only + + # Build + cwd = os.getcwd() + try: + os.chdir(d) + cmd = [sys.executable, '-c', code] + f2py_opts + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + out, err = p.communicate() + if p.returncode != 0: + raise RuntimeError("Running f2py failed: %s\n%s" + % (cmd[4:], out)) + finally: + os.chdir(cwd) + + # Partial cleanup + for fn in dst_sources: + os.unlink(fn) + + # Import + __import__(module_name) + return sys.modules[module_name] + +@_memoize +def build_code(source_code, options=[], skip=[], only=[], suffix=None, + module_name=None): + """ + Compile and import Fortran code using f2py. + + """ + if suffix is None: + suffix = '.f' + + fd, tmp_fn = tempfile.mkstemp(suffix=suffix) + os.write(fd, asbytes(source_code)) + os.close(fd) + + try: + return build_module([tmp_fn], options=options, skip=skip, only=only, + module_name=module_name) + finally: + os.unlink(tmp_fn) + +# +# Check if compilers are available at all... +# + +_compiler_status = None +def _get_compiler_status(): + global _compiler_status + if _compiler_status is not None: + return _compiler_status + + _compiler_status = (False, False, False) + + # XXX: this is really ugly. But I don't know how to invoke Distutils + # in a safer way... + code = """ +import os +import sys +sys.path = %(syspath)s + +def configuration(parent_name='',top_path=None): + global config + from numpy.distutils.misc_util import Configuration + config = Configuration('', parent_name, top_path) + return config + +from numpy.distutils.core import setup +setup(configuration=configuration) + +config_cmd = config.get_config_cmd() +have_c = config_cmd.try_compile('void foo() {}') +print('COMPILERS:%%d,%%d,%%d' %% (have_c, + config.have_f77c(), + config.have_f90c())) +sys.exit(99) +""" + code = code % dict(syspath=repr(sys.path)) + + fd, script = tempfile.mkstemp(suffix='.py') + os.write(fd, asbytes(code)) + os.close(fd) + + try: + cmd = [sys.executable, script, 'config'] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + out, err = p.communicate() + m = re.search(r'COMPILERS:(\d+),(\d+),(\d+)', out) + if m: + _compiler_status = (bool(m.group(1)), bool(m.group(2)), + bool(m.group(3))) + finally: + os.unlink(script) + + # Finished + return _compiler_status + +def has_c_compiler(): + return _get_compiler_status()[0] + +def has_f77_compiler(): + return _get_compiler_status()[1] + +def has_f90_compiler(): + return _get_compiler_status()[2] + +# +# Building with distutils +# + +@_memoize +def build_module_distutils(source_files, config_code, module_name, **kw): + """ + Build a module via distutils and import it. + + """ + from numpy.distutils.misc_util import Configuration + from numpy.distutils.core import setup + + d = get_module_dir() + + # Copy files + dst_sources = [] + for fn in source_files: + if not os.path.isfile(fn): + raise RuntimeError("%s is not a file" % fn) + dst = os.path.join(d, os.path.basename(fn)) + shutil.copyfile(fn, dst) + dst_sources.append(dst) + + # Build script + config_code = textwrap.dedent(config_code).replace("\n", "\n ") + + code = """\ +import os +import sys +sys.path = %(syspath)s + +def configuration(parent_name='',top_path=None): + from numpy.distutils.misc_util import Configuration + config = Configuration('', parent_name, top_path) + %(config_code)s + return config + +if __name__ == "__main__": + from numpy.distutils.core import setup + setup(configuration=configuration) +""" % dict(config_code=config_code, syspath = repr(sys.path)) + + script = os.path.join(d, get_temp_module_name() + '.py') + dst_sources.append(script) + f = open(script, 'wb') + f.write(asbytes(code)) + f.close() + + # Build + cwd = os.getcwd() + try: + os.chdir(d) + cmd = [sys.executable, script, 'build_ext', '-i'] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + out, err = p.communicate() + if p.returncode != 0: + raise RuntimeError("Running distutils build failed: %s\n%s" + % (cmd[4:], out)) + finally: + os.chdir(cwd) + + # Partial cleanup + for fn in dst_sources: + os.unlink(fn) + + # Import + __import__(module_name) + return sys.modules[module_name] + +# +# Unittest convenience +# + +class F2PyTest(object): + code = None + sources = None + options = [] + skip = [] + only = [] + suffix = '.f' + module = None + module_name = None + + def setUp(self): + if self.module is not None: + return + + # Check compiler availability first + if not has_c_compiler(): + raise nose.SkipTest("No C compiler available") + + codes = [] + if self.sources: + codes.extend(self.sources) + if self.code is not None: + codes.append(self.suffix) + + needs_f77 = False + needs_f90 = False + for fn in codes: + if fn.endswith('.f'): + needs_f77 = True + elif fn.endswith('.f90'): + needs_f90 = True + if needs_f77 and not has_f77_compiler(): + raise nose.SkipTest("No Fortran 77 compiler available") + if needs_f90 and not has_f90_compiler(): + raise nose.SkipTest("No Fortran 90 compiler available") + + # Build the module + if self.code is not None: + self.module = build_code(self.code, options=self.options, + skip=self.skip, only=self.only, + suffix=self.suffix, + module_name=self.module_name) + + if self.sources is not None: + self.module = build_module(self.sources, options=self.options, + skip=self.skip, only=self.only, + module_name=self.module_name) |