예제 #1
0
파일: pipeline.py 프로젝트: rnowak/numba
    def __init__(self, context, func, ast, func_signature,
                 nopython=False, locals=None, order=None, codegen=False,
                 symtab=None, **kwargs):
        self.context = context
        self.func = func
        self.ast = ast
        self.func_signature = func_signature
        ast.pipeline = self

        func_name = kwargs.get('name')
        self.func_name = func_name or naming.specialized_mangle(
                           self.func.__name__, self.func_signature.args)

        self.symtab = symtab
        if symtab is None:
            self.symtab = {}

        self.llvm_module = kwargs.get('llvm_module', None)
        if self.llvm_module is None:
            self.llvm_module = self.context.function_cache.module

        self.nopython = nopython
        self.locals = locals
        self.kwargs = kwargs

        if order is None:
            self.order = list(Pipeline.order)
            if not codegen:
                self.order.remove('codegen')
        else:
            self.order = order
예제 #2
0
    def codegen(self, ast):
        func_name = self.kwargs.get('name')
        func_name = func_name or naming.specialized_mangle(self.func.__name__,
                                            self.func_signature.args)

        self.translator = self.make_specializer(ast_translate.LLVMCodeGenerator,
                                                ast, func_name=func_name,
                                                **self.kwargs)
        self.translator.translate()
        return ast
예제 #3
0
파일: pipeline.py 프로젝트: glycerine/numba
    def __init__(self,
                 context,
                 func,
                 ast,
                 func_signature,
                 nopython=False,
                 locals=None,
                 order=None,
                 codegen=False,
                 symtab=None,
                 **kwargs):
        self.context = context
        self.func = func
        self.ast = ast
        self.func_signature = func_signature
        ast.pipeline = self

        self.func_name = kwargs.get('name')
        if not self.func_name:
            if func:
                name = func.__name__
            else:
                name = ast.name

            self.func_name = naming.specialized_mangle(
                name, self.func_signature.args)

        self.symtab = symtab
        if symtab is None:
            self.symtab = {}

        self.llvm_module = kwargs.get('llvm_module', None)
        if self.llvm_module is None:
            self.llvm_module = self.context.function_cache.module

        self.nopython = nopython
        self.locals = locals
        self.kwargs = kwargs

        if order is None:
            self.order = list(Pipeline.order)
            if not codegen:
                self.order.remove('codegen')
        else:
            self.order = order
예제 #4
0
파일: pipeline.py 프로젝트: mekman/numba
    def __init__(self, context, func, ast, func_signature,
                 nopython=False, locals=None, order=None, codegen=False,
                 symtab=None, allow_rebind_args=True, **kwargs):
        self.context = context
        self.func = func
        self.ast = ast
        self.func_signature = func_signature

        # Whether argument variables may be rebound to different types.
        # e.g. def f(a): a = "hello" ;; f(0.0)
        self.allow_rebind_args = allow_rebind_args

        ast.pipeline = self

        self.func_name = kwargs.get('name')
        if not self.func_name:
            if func:
                name = func.__name__
            else:
                name = ast.name

            self.func_name = naming.specialized_mangle(
                                    name, self.func_signature.args)

        self.symtab = symtab
        if symtab is None:
            self.symtab = {}

        self.llvm_module = kwargs.get('llvm_module', None)
        if self.llvm_module is None:
            self.llvm_module = self.context.function_cache.module

        self.nopython = nopython
        self.locals = locals or {}
        self.kwargs = kwargs

        if order is None:
            self.order = list(Pipeline.order)
            if not codegen:
                self.order.remove('codegen')
        else:
            self.order = order
예제 #5
0
파일: pipeline.py 프로젝트: hfeeki/numba
 def init_func(self, func, ast, func_signature, **kws):
     self.reset(self.parent, self.__doc__)
     self.func = func
     self.ast = ast
     self.func_signature = func_signature
     self.func_name = kws.get('name')
     if not self.func_name:
         if func:
             module_name = inspect.getmodule(func).__name__
             name = '.'.join([module_name, func.__name__])
         else:
             name = ast.name
         self.func_name = naming.specialized_mangle(
             name, self.func_signature.args)
     self.symtab = kws.pop('symtab', {})
     self.llvm_module = kws.pop('llvm_module',
                                self.parent.context.llvm_module)
     self.nopython = kws.pop('nopython', False)
     self.locals = kws.pop('locals', {})
     self.allow_rebind_args = kws.pop('allow_rebind_args', True)
     self.warn = kws.pop('warn', True)
     self.kwargs = kws
예제 #6
0
 def name(self):
     return naming.specialized_mangle('__py_modulo', self.arg_types)
예제 #7
0
    def init(self,
             parent,
             func,
             ast,
             func_signature,
             name=None,
             qualified_name=None,
             mangled_name=None,
             llvm_module=None,
             wrap=True,
             link=True,
             symtab=None,
             error_env=None,
             function_globals=None,
             locals=None,
             template_signature=None,
             cfg_transform=None,
             is_closure=False,
             closures=None,
             closure_scope=None,
             refcount_args=True,
             ast_metadata=None,
             warn=True,
             warnstyle='fancy',
             **kws):

        self.parent = parent
        self.numba = parent.numba
        self.func = func
        self.ast = ast
        self.func_signature = func_signature

        if name is None:
            if self.func:
                name = self.func.__name__
            else:
                name = self.ast.name

        if self.func and self.func.__module__:
            qname = '.'.join([self.func.__module__, name])
        else:
            qname = name

        if mangled_name is None:
            mangled_name = naming.specialized_mangle(qname,
                                                     self.func_signature.args)

        self.func_name = name
        self.mangled_name = mangled_name
        self.qualified_name = qualified_name or name
        self.llvm_module = (llvm_module
                            if llvm_module else self.numba.llvm_context.module)
        self.wrap = wrap
        self.link = link
        self.llvm_wrapper_func = None
        self.symtab = symtab if symtab is not None else {}

        self.error_env = error_env or FunctionErrorEnvironment(
            self.func, self.ast, warnstyle)

        if function_globals is not None:
            self.function_globals = function_globals
        else:
            self.function_globals = self.func.__globals__

        self.locals = locals if locals is not None else {}
        self.template_signature = template_signature
        self.cfg_transform = cfg_transform
        self.is_closure = is_closure
        self.closures = closures if closures is not None else {}
        self.closure_scope = closure_scope

        self.refcount_args = refcount_args

        if ast_metadata is not None:
            self.ast_metadata = ast_metadata
        else:
            self.ast_metadata = metadata.create_metadata_env()

        self.warn = warn
        self.warnstyle = warnstyle
        self.kwargs = kws
예제 #8
0
    def init(self,
             parent,
             func,
             ast,
             func_signature,
             name=None,
             qualified_name=None,
             mangled_name=None,
             llvm_module=None,
             wrap=True,
             link=True,
             symtab=None,
             error_env=None,
             function_globals=None,
             locals=None,
             template_signature=None,
             is_closure=False,
             closures=None,
             closure_scope=None,
             refcount_args=True,
             ast_metadata=None,
             warn=True,
             warnstyle='fancy',
             typesystem=None,
             array=None,
             postpasses=None,
             annotate=False,
             **kws):

        self.parent = parent
        self.numba = parent.numba
        self.func = func
        self.ast = ast
        self.func_signature = func_signature

        if name is None:
            if self.func:
                name = self.func.__name__
            else:
                name = self.ast.name

        if self.func and self.func.__module__:
            qname = '.'.join([self.func.__module__, name])
        else:
            qname = name

        if function_globals is not None:
            self.function_globals = function_globals
        else:
            self.function_globals = self.func.__globals__

        if self.func:
            self.module_name = self.func.__module__ or '<unamed.module>'
        else:
            self.module_name = self.function_globals.get("__name__", "")

        if mangled_name is None:
            mangled_name = naming.specialized_mangle(qname,
                                                     self.func_signature.args)

        self.func_name = name
        self.mangled_name = mangled_name
        self.qualified_name = qualified_name or name
        self.llvm_module = (llvm_module
                            if llvm_module else self.numba.llvm_context.module)

        self._annotate = annotate
        self.wrap = wrap
        self.link = link
        self.llvm_wrapper_func = None
        self.symtab = symtab if symtab is not None else {}

        self.error_env = error_env or FunctionErrorEnvironment(
            self.func, self.ast, warnstyle)

        self.locals = locals if locals is not None else {}
        self.template_signature = template_signature
        self.is_closure = is_closure
        self.closures = closures if closures is not None else {}
        self.closure_scope = closure_scope
        self.kill_attribute_assignments = set()

        self.refcount_args = refcount_args
        self.typesystem = typesystem or numba_typesystem
        if array:
            self.array = array
            # assert issubclass(array, NumpyArray)

        import numba.postpasses
        self.postpasses = postpasses or numba.postpasses.default_postpasses

        if ast_metadata is not None:
            self.ast_metadata = ast_metadata
        else:
            self.ast_metadata = metadata.create_metadata_env()

        self.annotations = collections.defaultdict(list)
        self.intermediates = []
        self.warn = warn
        self.warnstyle = warnstyle
        self.kwargs = kws
예제 #9
0
파일: environment.py 프로젝트: jgors/numba
    def init(self, parent, func, ast, func_signature,
             name=None, qualified_name=None,
             mangled_name=None,
             llvm_module=None, wrap=True, link=True,
             symtab=None,
             error_env=None, function_globals=None, locals=None,
             template_signature=None, cfg_transform=None,
             is_closure=False, closures=None, closure_scope=None,
             refcount_args=True,
             ast_metadata=None, warn=True, warnstyle='fancy',
             typesystem=None, postpasses=None,
             **kws):

        self.parent = parent
        self.numba = parent.numba
        self.func = func
        self.ast = ast
        self.func_signature = func_signature

        if name is None:
            if self.func:
                name = self.func.__name__
            else:
                name = self.ast.name

        if self.func and self.func.__module__:
            qname = '.'.join([self.func.__module__, name])
        else:
            qname = name

        if mangled_name is None:
            mangled_name = naming.specialized_mangle(qname,
                                                     self.func_signature.args)

        self.func_name = name
        self.mangled_name = mangled_name
        self.qualified_name = qualified_name or name
        self.llvm_module = (llvm_module if llvm_module
                                 else self.numba.llvm_context.module)
        self.wrap = wrap
        self.link = link
        self.llvm_wrapper_func = None
        self.symtab = symtab if symtab is not None else {}

        self.error_env = error_env or FunctionErrorEnvironment(self.func,
                                                               self.ast,
                                                               warnstyle)

        if function_globals is not None:
            self.function_globals = function_globals
        else:
            self.function_globals = self.func.__globals__

        self.locals = locals if locals is not None else {}
        self.template_signature = template_signature
        self.cfg_transform = cfg_transform
        self.is_closure = is_closure
        self.closures = closures if closures is not None else {}
        self.closure_scope = closure_scope

        self.refcount_args = refcount_args
        self.typesystem = typesystem or numba_typesystem

        import numba.postpasses
        self.postpasses = postpasses or numba.postpasses.default_postpasses

        if ast_metadata is not None:
            self.ast_metadata = ast_metadata
        else:
            self.ast_metadata = metadata.create_metadata_env()

        self.warn = warn
        self.warnstyle = warnstyle
        self.kwargs = kws
예제 #10
0
파일: environment.py 프로젝트: ASPP/numba
    def init(self, parent, func, ast, func_signature,
             name=None, qualified_name=None,
             mangled_name=None,
             llvm_module=None, wrap=True, link=True,
             symtab=None,
             error_env=None, function_globals=None, locals=None,
             template_signature=None, is_closure=False,
             closures=None, closure_scope=None,
             refcount_args=True,
             ast_metadata=None, warn=True, warnstyle='fancy',
             typesystem=None, array=None, postpasses=None, annotate=False,
             **kws):

        self.parent = parent
        self.numba = parent.numba
        self.func = func
        self.ast = ast
        self.func_signature = func_signature

        if name is None:
            if self.func:
                name = self.func.__name__
            else:
                name = self.ast.name

        if self.func and self.func.__module__:
            qname = '.'.join([self.func.__module__, name])
        else:
            qname = name

        if function_globals is not None:
            self.function_globals = function_globals
        else:
            self.function_globals = self.func.__globals__

        if self.func:
            self.module_name = self.func.__module__ or '<unamed.module>'
        else:
            self.module_name = self.function_globals.get("__name__", "")

        if mangled_name is None:
            mangled_name = naming.specialized_mangle(qname,
                                                     self.func_signature.args)

        self.func_name = name
        self.mangled_name = mangled_name
        self.qualified_name = qualified_name or name
        self.llvm_module = (llvm_module if llvm_module
                                 else self.numba.llvm_context.module)

        self._annotate = annotate
        self.wrap = wrap
        self.link = link
        self.llvm_wrapper_func = None
        self.symtab = symtab if symtab is not None else {}

        self.error_env = error_env or FunctionErrorEnvironment(self.func,
                                                               self.ast,
                                                               warnstyle)


        self.locals = locals if locals is not None else {}
        self.template_signature = template_signature
        self.is_closure = is_closure
        self.closures = closures if closures is not None else {}
        self.closure_scope = closure_scope
        self.kill_attribute_assignments = set()

        self.refcount_args = refcount_args
        self.typesystem = typesystem or numba_typesystem
        if array:
            self.array = array
            # assert issubclass(array, NumpyArray)

        import numba.postpasses
        self.postpasses = postpasses or numba.postpasses.default_postpasses

        if ast_metadata is not None:
            self.ast_metadata = ast_metadata
        else:
            self.ast_metadata = metadata.create_metadata_env()

        self.annotations = collections.defaultdict(list)
        self.intermediates = []
        self.warn = warn
        self.warnstyle = warnstyle
        self.kwargs = kws