예제 #1
0
    def __init__(self,
                 pyfunc,
                 sig,
                 locals,
                 options,
                 pipeline_class=compiler.Compiler):
        args, return_type = sig
        if return_type is None:
            raise TypeError("C callback needs an explicit return type")
        self.__name__ = pyfunc.__name__
        self.__qualname__ = getattr(pyfunc, '__qualname__', self.__name__)
        self.__wrapped__ = pyfunc

        self._pyfunc = pyfunc
        self._sig = signature(return_type, *args)
        self._compiler = _CFuncCompiler(pyfunc,
                                        self._targetdescr,
                                        options,
                                        locals,
                                        pipeline_class=pipeline_class)

        self._wrapper_name = None
        self._wrapper_address = None
        self._cache = NullCache()
        self._cache_hits = 0
예제 #2
0
파일: dispatcher.py 프로젝트: braniii/numba
    def __init__(self,
                 py_func,
                 locals={},
                 targetoptions={},
                 impl_kind='direct',
                 pipeline_class=compiler.Compiler):
        """
        Parameters
        ----------
        py_func: function object to be compiled
        locals: dict, optional
            Mapping of local variable names to Numba types.  Used to override
            the types deduced by the type inference engine.
        targetoptions: dict, optional
            Target-specific config options.
        impl_kind: str
            Select the compiler mode for `@jit` and `@generated_jit`
        pipeline_class: type numba.compiler.CompilerBase
            The compiler pipeline type.
        """
        self.typingctx = self.targetdescr.typing_context
        self.targetctx = self.targetdescr.target_context

        pysig = utils.pysignature(py_func)
        arg_count = len(pysig.parameters)
        can_fallback = not targetoptions.get('nopython', False)

        _DispatcherBase.__init__(self,
                                 arg_count,
                                 py_func,
                                 pysig,
                                 can_fallback,
                                 exact_match_required=False)

        functools.update_wrapper(self, py_func)

        self.targetoptions = targetoptions
        self.locals = locals
        self._cache = NullCache()
        compiler_class = self._impl_kinds[impl_kind]
        self._impl_kind = impl_kind
        self._compiler = compiler_class(py_func, self.targetdescr,
                                        targetoptions, locals, pipeline_class)
        self._cache_hits = collections.Counter()
        self._cache_misses = collections.Counter()

        self._type = types.Dispatcher(self)
        self.typingctx.insert_global(self, self._type)

        # Remember target restriction
        self._required_target_backend = targetoptions.get('target_backend')
예제 #3
0
 def __init__(self, py_func, cres, sin, sout, cache, is_parfors):
     """
     The *is_parfors* argument is a boolean that indicates if the GUfunc
     being built is to be used as a ParFors kernel. If True, it disables
     the caching on the wrapper as a separate unit because it will be linked
     into the caller function and cached along with it.
     """
     self.py_func = py_func
     self.cres = cres
     self.sin = sin
     self.sout = sout
     self.is_objectmode = self.signature.return_type == types.pyobject
     self.cache = (GufWrapperCache(
         py_func=self.py_func) if cache else NullCache())
     self.is_parfors = bool(is_parfors)
예제 #4
0
 def __init__(self, py_func, locals={}, targetoptions={}):
     self.py_func = py_func
     self.overloads = utils.UniqueDict()
     self.targetoptions = targetoptions
     self.locals = locals
     self.cache = NullCache()