def test_FunctionPrototype_and_FunctionDefinition(): vx = Variable(x, type=real) vn = Variable(n, type=integer) fp1 = FunctionPrototype(real, 'power', [vx, vn]) assert fp1.return_type == real assert fp1.name == String('power') assert fp1.parameters == Tuple(vx, vn) assert fp1 == FunctionPrototype(real, 'power', [vx, vn]) assert fp1 != FunctionPrototype(real, 'power', [vn, vx]) assert fp1.func(*fp1.args) == fp1 body = [Assignment(x, x**n), Return(x)] fd1 = FunctionDefinition(real, 'power', [vx, vn], body) assert fd1.return_type == real assert str(fd1.name) == 'power' assert fd1.parameters == Tuple(vx, vn) assert fd1.body == CodeBlock(*body) assert fd1 == FunctionDefinition(real, 'power', [vx, vn], body) assert fd1 != FunctionDefinition(real, 'power', [vx, vn], body[::-1]) assert fd1.func(*fd1.args) == fd1 fp2 = FunctionPrototype.from_FunctionDefinition(fd1) assert fp2 == fp1 fd2 = FunctionDefinition.from_FunctionPrototype(fp1, body) assert fd2 == fd1
def _render_compile_import(funcdef, build_dir): code_str = render_as_source_file(funcdef, settings=dict(contract=False)) declar = ccode(FunctionPrototype.from_FunctionDefinition(funcdef)) return compile_link_import_strings( [('our_test_func.c', code_str), ('_our_test_func.pyx', ("cdef extern {declar}\n" "def _{fname}({typ}[:] inp, {typ}[:] out):\n" " {fname}(inp.size, &inp[0], &out[0])").format( declar=declar, fname=funcdef.name, typ='double'))], build_dir=build_dir)
def _render_compile_import(funcdef, build_dir): code_str = render_as_source_file(funcdef, settings=dict(contract=False)) declar = ccode(FunctionPrototype.from_FunctionDefinition(funcdef)) return compile_link_import_strings([ ('our_test_func.c', code_str), ('_our_test_func.pyx', ("cdef extern {declar}\n" "def _{fname}({typ}[:] inp, {typ}[:] out):\n" " {fname}(inp.size, &inp[0], &out[0])").format( declar=declar, fname=funcdef.name, typ='double' )) ], build_dir=build_dir)
def _render_compile_import(funcdef, build_dir): code_str = render_as_source_file(funcdef, settings=dict(contract=False)) declar = ccode(FunctionPrototype.from_FunctionDefinition(funcdef)) return compile_link_import_strings( [ ("our_test_func.c", code_str), ( "_our_test_func.pyx", ("#cython: language_level={}\n".format("3") + "cdef extern {declar}\n" "def _{fname}({typ}[:] inp, {typ}[:] out):\n" " {fname}(inp.size, &inp[0], &out[0])").format( declar=declar, fname=funcdef.name, typ="double"), ), ], build_dir=build_dir, )