σ
\K]c           @` sΒ   d  Z  d d l m Z m Z m Z d d l m Z d d l Z d d l m	 Z	 m
 Z
 d d l m Z m Z d   Z d	   Z d
 e f d     YZ d e f d     YZ d e f d     YZ d S(   s   
Function descriptors.
i    (   t   print_functiont   divisiont   absolute_import(   t   defaultdictNi   (   t   typest   itanium_mangler(   t   _dynamic_modnamet   _dynamic_modulec         C` s   t  j |  |  S(   N(   R   t   mangle(   t   namet   argtypes(    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   default_mangler   s    c         C` s   |  r d j  |  |  S| S(   sS   
    Returns a new string that is used for the first half of the mangled name.
    s   {}.{}(   t   format(   t   modnamet   qualname(    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   qualifying_prefix   s    t   FunctionDescriptorc           B` s§   e  Z d  Z d Z d d e e d d d  Z d   Z d   Z d   Z	 e
 d    Z e
 d    Z e
 d    Z d   Z e d    Z e d e e d   Z RS(   sS  
    Base class for function descriptors: an object used to carry
    useful metadata about a natively callable function.

    Note that while `FunctionIdentity` denotes a Python function
    which is being concretely compiled by Numba, `FunctionDescriptor`
    may be more "abstract": e.g. a function decorated with `@generated_jit`.
    t   nativeR   R   t   doct   typemapt	   calltypest   argst   kwst   restypeR
   t   mangled_namet   unique_namet   env_namet   global_dictt   inlinet   noaliasc         ` s@  |   _  |   _ |   _ |   _ |   _ |   _ |   _ |   _ |	   _ |
   _	 |   _
 | d  k	 r t | t  s t |   |   _ n t   f d   |	 D    _ | d  k rΗ t n | } t   j   j  } | |   j    _ | d  k r!| d j |    j  } n  |   _ |   _ |   _ d  S(   Nc         3` s    |  ] }   j  d  | Vq d S(   s   arg.N(   R   (   t   .0t   a(   t   self(    s-   lib/python2.7/site-packages/numba/funcdesc.pys	   <genexpr>?   s    s   .NumbaEnv.{}(   R   R   R   R   R   R   R   R   R   R   R   t   Nonet
   isinstancet   tuplet   AssertionErrorR
   R   R   R   R   R   R   R   (   R    R   R   R   R   R   R   R   R   R   R   t   manglerR
   R   R   R   R   t
   qualprefix(    (   R    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   __init__'   s0    													c         C` s   |  j  p |  j   j S(   s¨   
        Return the global dictionary of the function.
        It may not match the Module's globals if the function is created
        dynamically (i.e. exec)
        (   R   t   lookup_modulet   __dict__(   R    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   lookup_globalsL   s    c         C` s%   |  j  t k r t St j |  j  Sd S(   s¦   
        Return the module in which this function is supposed to exist.
        This may be a dummy module if the function was dynamically
        generated.
        N(   R   R   R   t   syst   modules(   R    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyR(   T   s    c         C` s   t  |  j   |  j  S(   sO   
        Return the original function object described by this object.
        (   t   getattrR(   R   (   R    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   lookup_function_   s    c         C` s   |  j  S(   s@   
        The LLVM-registered name for the raw function.
        (   R   (   R    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   llvm_func_namee   s    c         C` s   t  j |  j d d S(   s   
        The LLVM-registered name for a CPython-compatible wrapper of the
        raw function (i.e. a PyCFunctionWithKeywords).
        t   nst   cpython(   R   t   prepend_namespaceR   (   R    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   llvm_cpython_wrapper_namen   s    c         C` s   d |  j  S(   sb   
        The LLVM-registered name for a C-compatible wrapper of the
        raw function.
        s   cfunc.(   R   (   R    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   llvm_cfunc_wrapper_namew   s    c         C` s   d |  j  S(   Ns   <function descriptor %r>(   R   (   R    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   __repr__   s    c   
      C` s   | j  j } | j  j } | j } | j p- d } t | j  } d } d } | d k ro t } | j  j j	 } n  | j  j
 }	 | |	 | | | | | f S(   s   
        Returns
        -------
        qualname, unique_name, modname, doc, args, kws, globals

        ``unique_name`` must be a unique name.
        t    (    N(   t   func_idt   funct   func_qualnamet
   __module__t   __doc__R#   t	   arg_namesR!   R   t   __globals__R   (
   t   clst   func_irR8   R   R   R   R   R   R   R   (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   _get_function_info   s    		c	         C` sg   |  j  |  \ }	 }
 } } } } } |  | | |	 |
 | | | | | | d | d | d | d | 
} | S(   NR%   R   R   R   (   R@   (   R>   R?   R   R   R   R   R%   R   R   R   R   R   R   R   R   R   R    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   _from_python_function   s    $		(   R   R   R   R   R   R   R   R   R   R
   R   R   R   R   R   R   N(   t   __name__R:   R;   t	   __slots__R!   t   FalseR'   R*   R(   R.   t   propertyR/   R3   R4   R5   t   classmethodR@   RA   (    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyR      s$      "						t   PythonFunctionDescriptorc           B` s2   e  Z d  Z d Z e d    Z e d    Z RS(   sE   
    A FunctionDescriptor subclass for Numba-compiled functions.
    c         C` s.   |  j  | | | | d t d | d | d | S(   sx   
        Build a FunctionDescriptor for a given specialization of a Python
        function (in nopython mode).
        R   R%   R   R   (   RA   t   True(   R>   R?   R   R   R   R%   R   R   (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   from_specialized_function²   s    c         C` s@   t  d    } | j   } t j } |  j | | | | d t S(   se   
        Build a FunctionDescriptor for an object mode variant of a Python
        function.
        c           S` s   t  j S(   N(   R   t   pyobject(    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   <lambda>Γ   R6   R   (   R   t   copyR   RJ   RA   RD   (   R>   R?   R   R   R   (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   from_object_mode_function½   s
    	(    (   RB   R:   R;   RC   RF   RI   RM   (    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyRG   ¬   s   t   ExternalFunctionDescriptorc           B` s   e  Z d  Z d Z d   Z RS(   sa   
    A FunctionDescriptor subclass for opaque external functions
    (e.g. raw C functions).
    c         C` s   g  t  t |   D] } d | ^ q } t t |   j d t d d  d | d | d d d d  d	 | d
 d  d | d d  d d   d |  d  S(   Ns   arg%dR   R   R   R   R   R6   R   R   R   R   R   R%   c         S` s   |  S(   N(    (   R   t   x(    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyRK   Φ   R6   R
   (   t   ranget   lent   superRN   R'   RH   R!   (   R    R	   R   R
   t   iR   (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyR'   Ρ   s    )(    (   RB   R:   R;   RC   R'   (    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyRN   Κ   s   (   R;   t
   __future__R    R   R   t   collectionsR   R+   R6   R   R   t   utilsR   R   R   R   t   objectR   RG   RN   (    (    (    s-   lib/python2.7/site-packages/numba/funcdesc.pyt   <module>   s   		