def test_lang_version(self): # GH-3419. Caching for inline code didn't always respect compiler directives. inline_divcode = "def f(int a, int b): return a/b" self.assertEqual( inline(inline_divcode, language_level=2)['f'](5, 2), 2) self.assertEqual( inline(inline_divcode, language_level=3)['f'](5, 2), 2.5)
def test_repeated_use(self): inline_mulcode = "def f(int a, int b): return a * b" self.assertEqual(inline(inline_mulcode)['f'](5, 2), 10) self.assertEqual(inline(inline_mulcode)['f'](5, 3), 15) self.assertEqual(inline(inline_mulcode)['f'](6, 2), 12) self.assertEqual(inline(inline_mulcode)['f'](5, 2), 10) f = inline(inline_mulcode)['f'] self.assertEqual(f(5, 2), 10) self.assertEqual(f(5, 3), 15)
def test_compiler_directives(self): self.assertEqual( inline('return sum(x)', x=[1, 2, 3], cython_compiler_directives={'boundscheck': False}), 6 )
def test_numpy(self): import numpy a = numpy.ndarray((10, 20)) a[0, 0] = 10 self.assertEqual(safe_type(a), 'numpy.ndarray[numpy.float64_t, ndim=2]') self.assertEqual(inline("return a[0,0]", a=a, **self.test_kwds), 10.0)
def test_numpy(self): import numpy a = numpy.ndarray((10, 20)) a[0, 0] = 10 self.assertEquals(safe_type(a), "numpy.ndarray[numpy.float64_t, ndim=2]") self.assertEquals(inline("return a[0,0]", a=a, **self.test_kwds), 10.0)
def test_pure(self): import cython as cy b = inline(""" b = cy.declare(float, a) c = cy.declare(cy.pointer(cy.float), &b) return b """, a=3, **self.test_kwds) self.assertEquals(type(b), float)
def test_no_return(self): self.assertEqual( inline( """ a = 1 cdef double b = 2 cdef c = [] """, **self.test_kwds), dict(a=1, b=2.0, c=[]))
def test_types(self): self.assertEqual( inline(""" cimport cython return cython.typeof(a), cython.typeof(b) """, a=1.0, b=[], **self.test_kwds), ('double', 'list object'))
def test_no_return(self): self.assertEquals( inline( """ a = 1 cdef double b = 2 cdef c = [] """, **self.test_kwds ), dict(a=1, b=2.0, c=[]), )
def test_types(self): self.assertEquals( inline( """ cimport cython return cython.typeof(a), cython.typeof(b) """, a=1.0, b=[], **self.test_kwds ), ("double", "list object"), )
def exec(code_string, l, g): from Cython.Compiler.Errors import CompileError from Cython.Shadow import inline try: from StringIO import StringIO except ImportError: from io import StringIO old_stderr = sys.stderr try: sys.stderr = StringIO() ns = inline(code_string, locals=l, globals=g, lib_dir=os.path.dirname(__file__)) except CompileError as exc: raise SyntaxError(str(exc)) finally: sys.stderr = old_stderr g.update(ns)
def test_simple(self): self.assertEquals(inline("return 1+2", **self.test_kwds), 3)
def test_class_ref(self): class Type(object): pass tp = inline("Type")['Type'] self.assertEqual(tp, Type)
def test_no_return(self): self.assertEqual(inline(""" a = 1 cdef double b = 2 cdef c = [] """), dict(a=1, b=2.0, c=[]))
def test_def_node(self): foo = inline("def foo(x): return x * x")['foo'] self.assertEqual(foo(7), 49)
def test_def_node(self): foo = inline("def foo(x): return x * x", **self.test_kwds)['foo'] self.assertEqual(foo(7), 49)
def test_locals(self): a = 1 b = 2 self.assertEqual(inline("return a+b", **self.test_kwds), 3)
def test_globals(self): self.assertEqual(inline("return global_value + 1", **self.test_kwds), global_value + 1)
def test_simple(self): self.assertEqual(inline("return 1+2", **self.test_kwds), 3)
def test_def_node(self): foo = inline("def foo(x): return x * x")['foo'] self.assertEquals(foo(7), 49)
def test_types(self): self.assertEquals(inline(""" cimport cython return cython.typeof(a), cython.typeof(b) """, a=1.0, b=[], **test_kwds), ('double', 'list object'))
def test_def_node(self): foo = inline("def foo(x): return x * x", **self.test_kwds)['foo'] self.assertEquals(foo(7), 49)
def test_globals(self): self.assertEquals(inline("return global_value + 1", **self.test_kwds), global_value + 1)
def test_locals(self): a = 1 b = 2 self.assertEquals(inline("return a+b", **self.test_kwds), 3)