๓
\K]c           @` s1  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l m Z d  d l Z	 d  d l
 m Z d  d l m Z d  d l m Z d  d l m Z m Z d  d l m Z d  d	 l m Z m Z m Z m Z d  d
 l m Z d d l m Z d d l m Z d d l  m! Z! m" Z" d  d l# m$ Z$ m% Z% d  d l& m' Z' d  d l( m) Z) d e f d     YZ* d e f d     YZ+ e+   Z, d e- f d     YZ. e. e d <d   Z/ d   Z0 d   Z1 i e j2 d  6e j3 d 6e j4 d 6e j6 d 6Z7 d   Z8 d e- f d     YZ9 d  e9 f d!     YZ: d" e9 f d#     YZ; d S($   i    (   t   print_functiont   divisiont   absolute_importN(   t   contextmanager(   t   jit(   t   TargetDescriptor(   t   TargetOptions(   t   dispatcher_registryt
   cpu_target(   t   FastMathOptions(   t   utilst   compilert   typest   sigutils(   t   as_dtypei   (   t	   _internal(   t   parse_signature(   t   build_ufunc_wrappert   build_gufunc_wrapper(   t   FunctionCachet	   NullCache(   t   global_compiler_lock(   t	   PYVERSIONt   UFuncTargetOptionsc           B` s#   e  Z i e d  6e d 6e d 6Z RS(   t   nopythont   forceobjt   fastmath(   t   __name__t
   __module__t   boolR	   t   OPTIONS(    (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyR      s   t   UFuncTargetc           B` s,   e  Z e Z e d     Z e d    Z RS(   c         C` s   t  j S(   N(   R   t   typing_context(   t   self(    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyR    $   s    c         C` s   t  j S(   N(   R   t   target_context(   R!   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyR"   (   s    (   R   R   R   t   optionst   propertyR    R"   (    (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyR   !   s   t   UFuncDispatcherc           B` sA   e  Z d  Z e Z i  i  d  Z d   Z i  d  Z d   Z RS(   sK   
    An object handling compilation of various signatures for a ufunc.
    c         C` s:   | |  _  t j   |  _ | |  _ | |  _ t   |  _ d  S(   N(   t   py_funcR
   t
   UniqueDictt	   overloadst   targetoptionst   localsR   t   cache(   R!   R&   R*   R)   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   __init__5   s
    			c         C` s   t  |  j  |  _ d  S(   N(   R   R&   R+   (   R!   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   enable_caching<   s    c         K` s   |  j  j   } | j |  |  j j   } | j |  t j   } |  j j j | |  | j	 d  | j	 d d  | j
 d  |  j | | |  S(   Nt   no_cpython_wrappert   error_modelt   numpyt   enable_looplift(   R*   t   copyt   updateR)   R   t   Flagst   targetdescrR#   t   parse_as_flagst   sett   unsett   _compile_core(   R!   t   sigR*   R)   t   locst   toptt   flags(    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   compile?   s    c   	      ` sา    j  j }  j  j } t    f d    } t  |     j j | |      d k	 rf   St j	 |  \ } } t
 j | |  j d | d | d | d |    j j |      SWd QXWd QXd S(   s   
        Trigger the compiler on the core function or load a previously
        compiled version from the cache.  Returns the CompileResult.
        c          3` sN   y	 d  VWn
   n5 X j  j   j  }  |  d  k rJ    j    j <n  d  S(   N(   R(   t   gett	   signaturet   None(   t   exists(   t   cresR!   (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   store_overloads_on_successY   s    	t   argst   return_typeR=   R*   N(   R5   R    R"   R   R   R+   t   load_overloadRA   R   t   normalize_signatureR   t   compile_extraR&   t   save_overload(	   R!   R:   R=   R*   t	   typingctxt	   targetctxRD   RE   RF   (    (   RC   R!   s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyR9   Q   s    
(	   R   R   t   __doc__t   ufunc_targetR5   R,   R-   R>   R9   (    (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyR%   /   s   	t   npyufuncc         C` s4   |  j  | |  } t j |  \ } } | | | f S(   N(   R>   R   RH   (   t   nb_funcR)   R:   RC   RE   RF   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   _compile_element_wise_function   s    c         C` sR   | d k r3 |  j r$ t d   q3 |  j j } n  | t j k sH t  | |   S(   sผ   Given a compilation result, argument types, and a return type,
    build a valid Numba signature after validating that it doesn't
    violate the constraints for the compilation mode.
    s-   return type must be specified for object modeN(   RA   t
   objectmodet	   TypeErrorR@   RF   R   t   pyobjectt   AssertionError(   RC   RE   RF   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   _finalize_ufunc_signature   s    	c   	      C` sฌ   |  j  } |  j } |  j j } t 8 t | | | | |  j |   } | j j | j  } Wd QXg  | j	 D] } t
 |  j ^ qh } | j t
 | j  j  | | |  j f S(   s   Build a wrapper for the ufunc loop entry point given by the
    compilation result object, using the element-wise signature.
    N(   R"   t   libraryt   fndesct   llvm_func_nameR   R   RR   t   get_pointer_to_functiont   nameRE   R   t   numt   appendRF   t   environment(	   RC   R@   t   ctxRW   t   fnamet   infot   ptrt   at	   dtypenums(    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt!   _build_element_wise_ufunc_wrapper   s    		%t   reorderablec         C` s9   y t  |  }  Wn$ t k
 r4 t d |  f   n X|  S(   s]   
    Parse an identity value and return the corresponding low-level value
    for Numpy.
    s   Invalid identity value %r(   t   _identitiest   KeyErrort
   ValueError(   t   identity(    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   parse_identityฎ   s
    t   _BaseUFuncBuilderc           B` s   e  Z d d   Z d   Z RS(   c         C` s{   t  |  d  r |  j } n |  j j } t |  j | |  \ } } } |  j | | |  } |  j j |  | |  j | <| S(   NR)   (   t   hasattrR)   RP   RQ   t   _finalize_signaturet   _sigsR]   t   _cres(   R!   R:   R)   RC   RE   RF   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   addพ   s    c         C` s   d S(   sI   
        Disable the compilation of new signatures at call time.
        N(    (   R!   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   disable_compileส   t    N(   R   R   RA   Rq   Rr   (    (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyRl   ผ   s   t   UFuncBuilderc           B` s5   e  Z d e i  d   Z d   Z d   Z d   Z RS(   c         C` sO   | |  _  t |  |  _ t d d d | |  |  |  _ g  |  _ i  |  _ d  S(   Nt   targetRO   R+   (   R&   Rk   Rj   R   RP   Ro   Rp   (   R!   R&   Rj   R+   R)   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyR,   ำ   s
    	!	c         C` s   t  | | |  S(   s^   Slated for deprecation, use ufuncbuilder._finalize_ufunc_signature()
        instead.
        (   RV   (   R!   RC   RE   RF   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyRn   ฺ   s    c         C` sl  t  `g  } g  } |  j s+ t d   n  g  } d  } xr |  j D]g } |  j | } |  j | |  \ } } } | j |  | j t j	 |   | j | j
 | f  qA Wd  g t |  }	 | d  k rt d k r์ t j |  j  }
 n t j |  j  }
 t |
 j  } n t | j j  } d } t j |  j j |  j j | | | | |	 | |  j 	 } | SWd  QXd  S(   Ns   No definitioni   i    i   (   i   i    (   R   RP   RS   RA   Ro   Rp   t   buildR]   R
   t   longintRW   t   lenR   t   inspectt   getfullargspecR&   t
   getargspecRE   R@   R   t   fromfuncR   RM   Rj   (   R!   t	   dtypelistt   ptrlistt	   keepaliveRC   R:   Rd   Rb   t   envt   datlistt   argspect   inctt   outctt   ufunc(    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   build_ufuncเ   s2    	c         C` s   t  | |  S(   s^   Slated for deprecation, use
        ufuncbuilder._build_element_wise_ufunc_wrapper().
        (   Re   (   R!   RC   R@   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyRv     s    N(   R   R   RA   t   FalseR,   Rn   R   Rv   (    (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyRt   ั   s   		(t   GUFuncBuilderc           B` s;   e  Z d e i  d   Z d   Z e d    Z d   Z RS(   c         C` s   | |  _  t |  |  _ t d d d |  |  |  _ | |  _ t |  \ |  _ |  _ | |  _	 | |  _
 g  |  _ i  |  _ d  S(   NRu   RO   R+   (   R&   Rk   Rj   R   RP   R@   R   t   sint   soutR)   R+   Ro   Rp   (   R!   R&   R@   Rj   R+   R)   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyR,     s    					c         C` sP   | j  r. | j j t j k r. t d   n  | d  k rF t j } n  | |   S(   Ns(   gufunc kernel must have void return type(   RR   R@   RF   R   t   voidRS   RA   (   R!   RC   RE   RF   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyRn     s
    c         C` s  g  } g  } |  j  s$ t d   n  g  } xo |  j D]d } |  j | } |  j |  \ } } } | j |  | j t j |   | j | j | f  q4 Wd  g t
 |  }	 t
 |  j  }
 t
 |  j  } t j |  j j |  j j | | |
 | |	 | |  j |  j 
 } | S(   Ns   No definition(   RP   RS   Ro   Rp   Rv   R]   R
   Rw   RW   RA   Rx   R   R   R   R|   R&   R   RM   Rj   R@   (   R!   R}   R~   R   R:   RC   Rd   Rb   R   R   R   R   R   (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyR   '  s$    	c   	   	   C` sต   | j  } t |  j | |  j |  j d |  j d t } | j } | j j	 | j
  } g  } xK | j D]@ } t | t j  r | j } n | } | j t |  j  qd W| | | f S(   sJ   
        Returns (dtype numbers, function ptr, EnvironmentObject)
        R+   t
   is_parfors(   R@   R   R&   R   R   R+   R   R   RW   RZ   R[   RE   t
   isinstanceR   t   Arrayt   dtypeR]   R   R\   (	   R!   RC   R@   Ra   R   Rb   Rd   Rc   t   ty(    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyRv   B  s    		N(	   R   R   RA   R   R,   Rn   R   R   Rv   (    (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyR     s
   		(<   t
   __future__R    R   R   t   warningsRy   t
   contextlibR   R0   t   npt   numba.decoratorsR   t   numba.targets.descriptorsR   t   numba.targets.optionsR   t   numba.targets.registryR   R   t   numba.targets.cpuR	   t   numbaR
   R   R   R   t   numba.numpy_supportR   Rs   R   t   sigparseR   t   wrappersR   R   t   numba.cachingR   R   t   numba.compiler_lockR   t   numba.configR   R   R   RN   t   objectR%   RQ   RV   Re   t   PyUFunc_Zerot   PyUFunc_Onet   PyUFunc_NoneRA   t   PyUFunc_ReorderableNoneRg   Rk   Rl   Rt   R   (    (    (    s:   lib/python2.7/site-packages/numba/npyufunc/ufuncbuilder.pyt   <module>   sD   "	K
			


	>