Beispiel #1
0
def get(f, argtypes):
    f = jit(f)
    env = environment.fresh_env(f, argtypes, "cpu")
    func, env = phase.typing(f, env)
    context = env['flypy.typing.context']
    signature = env['flypy.typing.signature']
    return func, context, signature
Beispiel #2
0
def get(f, argtypes):
    f = jit(f)
    env = environment.fresh_env(f, argtypes, "cpu")
    func, env = phase.typing(f, env)
    context = env['flypy.typing.context']
    signature = env['flypy.typing.signature']
    return func, context, signature
Beispiel #3
0
    def test_cache_code(self):
        def py_func(x, y):
            return x + y

        nb_func = jit(py_func)
        argtypes = (float64, float64)
        e = environment.fresh_env(nb_func, argtypes)
        lfunc, env = phase.llvm(nb_func, e)
        self.db.insert(py_func, argtypes, 'llvm', lfunc, env, now)
        cached_module, cached_lfunc, cached_env = self.db.lookup(
            py_func, argtypes, 'llvm')

        self.assertEqual(str(lfunc), str(cached_lfunc))
Beispiel #4
0
    def test_cache_code(self):
        def py_func(x, y):
            return x + y

        nb_func = jit(py_func)
        argtypes = (float64, float64)
        e = environment.fresh_env(nb_func, argtypes)
        lfunc, env = phase.llvm(nb_func, e)
        self.db.insert(py_func, argtypes, 'llvm', lfunc, env, now)
        cached_module, cached_lfunc, cached_env = self.db.lookup(
            py_func, argtypes, 'llvm')

        self.assertEqual(str(lfunc), str(cached_lfunc))
Beispiel #5
0
def op_call(run_phase, typeof_func, interp, func, args):
    """
    Called by the interpreter to interpret IR function calls.
    """
    if isinstance(func, Method):
        func, self = func
        args = [self] + list(args)

    if isinstance(func, functionwrapper.FunctionWrapper):
        wrapper = func
        op = interp.op

        try:
            # Flatten args (consider default values)
            args = simple_flatargs(func.py_func, tuple(args), {})
        except TypeError:
            pass

        # Determine argument types
        argtypes = [
            typeof_func(arg, val) for arg, val in zip(op.args[1], args)
        ]

        # Use regular typeof() for remaining arguments (default values)
        remaining_args = args[len(argtypes):]
        for arg in remaining_args:
            argtypes.append(typeof(arg))

        # Compile function
        env = environment.fresh_env(func, argtypes, "cpu")

        if wrapper.opaque and run_phase == phase.frontend:
            func = implement(wrapper, wrapper.py_func, tuple(argtypes), env)
        else:
            func, env = run_phase(func, env)

    elif is_flypy_type(func):
        obj = func(*args)
        return obj
        #layout = type(obj).layout
        #return { 'value': dict((name, getattr(obj, name)) for name in layout) }

    return interp.call(func, args)
Beispiel #6
0
def op_call(run_phase, typeof_func, interp, func, args):
    """
    Called by the interpreter to interpret IR function calls.
    """
    if isinstance(func, Method):
        func, self = func
        args = [self] + list(args)

    if isinstance(func, functionwrapper.FunctionWrapper):
        wrapper = func
        op = interp.op

        try:
            # Flatten args (consider default values)
            args = simple_flatargs(func.py_func, tuple(args), {})
        except TypeError:
            pass

        # Determine argument types
        argtypes = [typeof_func(arg, val) for arg, val in zip(op.args[1], args)]

        # Use regular typeof() for remaining arguments (default values)
        remaining_args = args[len(argtypes):]
        for arg in remaining_args:
            argtypes.append(typeof(arg))

        # Compile function
        env = environment.fresh_env(func, argtypes, "cpu")

        if wrapper.opaque and run_phase == phase.frontend:
            func = implement(wrapper, wrapper.py_func, tuple(argtypes), env)
        else:
            func, env = run_phase(func, env)

    elif is_flypy_type(func):
        obj = func(*args)
        return obj
        #layout = type(obj).layout
        #return { 'value': dict((name, getattr(obj, name)) for name in layout) }

    return interp.call(func, args)
Beispiel #7
0
def interpret(nb_func, run_phase, args, debug=False, tracer=None):
    """Interpret and return result"""
    # Translate flypy function
    argtypes = [typeof(arg) for arg in args]
    env = environment.fresh_env(nb_func, argtypes, target="cpu")
    f, env = run_phase(nb_func, env)

    if debug:
        header(f)

    if tracer is None:
        # Set up tracer to trace interpretation
        if debug:
            tracer = tracing.Tracer()
        else:
            tracer = tracing.DummyTracer()

    newargs = [conversion.fromobject(arg, typeof(arg)) for arg in args]

    # Interpret function
    env.setdefault('interp.handlers', handlers(run_phase, env))
    return interp.run(f, env, args=newargs, tracer=tracer)
Beispiel #8
0
def interpret(nb_func, run_phase, args, debug=False, tracer=None):
    """Interpret and return result"""
    # Translate flypy function
    argtypes = [typeof(arg) for arg in args]
    env = environment.fresh_env(nb_func, argtypes, target="cpu")
    f, env = run_phase(nb_func, env)

    if debug:
        header(f)

    if tracer is None:
        # Set up tracer to trace interpretation
        if debug:
            tracer = tracing.Tracer()
        else:
            tracer = tracing.DummyTracer()

    newargs = [conversion.fromobject(arg, typeof(arg)) for arg in args]

    # Interpret function
    env.setdefault('interp.handlers', handlers(run_phase, env))
    return interp.run(f, env, args=newargs, tracer=tracer)