
\K]c           @` s]  d  d l  m Z m Z m Z d  d l Z d  d l m Z d  d l Z d  d l	 Z	 d  d l
 m Z d  d l m Z m Z d  d l j j Z d d l m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z d d	 l m Z m  Z  m! Z! m" Z" e e	 j# e  j$ e  j$  d
    Z% e e	 j& e  j$ e  j$  d    Z' e e	 j( e  j) e  j)  e e	 j( e  j* e  j*  d     Z+ e e	 j, e  j- e  j-  d    Z. e e  j/  d    Z0 e e  j$ e  j/  e e  j1 e  j/  e e  j2 e  j/  d      Z3 e e  j/ e  j$  e e  j/ e  j2  e e  j/ e  j1  d      Z4 e e	 j5 e  j6 e  j7  d    Z8 e e	 j9 e  j6 e  j7 e  j$  d    Z: d   Z; e e< e  j=  d    Z> e e< e  j? e  j$   d    Z@ e eA e  j=  d    ZB e eA e  j? e  j$   d    ZC d   ZD e eE e  jF  d    ZG e eE e  jF e  j7  d    ZH e eI e  j$  e eJ e  j$  d     ZK e eL e  j? e  j$   d    ZM e e  jN e  j$  e e  jO e  j$  d     ZP e e  jQ  d    ZR e e  jS  d    ZT e eU e  j$  d     ZV e eW e  jX  d!    ZY e eZ e  j[  d"    Z\ e d# e  j$ e  j$  d$    Z] e e^ e  j_  d%    Z` e ea e  jb  d&    Zc e ed  d'    Ze e ed e  j=  d(    Zf d)   Zg d*   Zh e eh e  jN  e eh e  ji  d+     Zj e eg e  jN  e eg e  ji  d,     Zk d  d- ll mm Zm mn Zn d  d. lo mp Zp mq Zq e em e  jr e  j  e em e  js e  j  d/     Zt ep eA  d0    Zu ep e<  d1    Zv eq d2    Zw eq d3    Zx eq d4    Zy ep eA  d5    Zz ep e<  d6    Z{ e e  jO  d7    Z| d S(8   i    (   t   print_functiont   absolute_importt   divisionN(   t   reduce(   t   ir(   t   Typet   Constanti   (   t   lower_builtint   lower_getattrt   lower_getattr_generict
   lower_castt   lower_constantt   iternext_implt   call_getitert   call_iternextt   impl_ret_borrowedt   impl_ret_untrackedt   numba_typeref_ctori   (   t   typingt   typest   cgutilst   utilsc         C` s+   |  j  t j |  } | j | | |   S(   s3   
    Implement `x is not y` as `not (x is y)`.
    (   t   get_functiont   operatort   is_t   not_(   t   contextt   buildert   sigt   argst   is_impl(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   generic_is_not   s    c         C` s   | j  \ } } | | k rt | j r3 t d   q{ y |  j t j |  } Wn t k
 rc t j SX| | |  Sn t j Sd S(   s-   
    Default implementation for `x is y`
    s   no default `is` implementationN(   R   t   mutablet   NotImplementedErrorR   R   t   eqR   t	   false_bit(   R   R   R   R   t   lhs_typet   rhs_typet   eq_impl(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt
   generic_is   s    	c         C` sa   | j  \ } } d } | j | j k r0 d } n  t j t j d  |  } t |  | | j |  S(   Ni    i   (   R   t   literal_valueR   R   t   IntTypeR   t   return_type(   R   R   R   R   t   arg1t   arg2t   valt   res(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   const_eq_impl7   s    	c         C` sa   | j  \ } } d } | j | j k r0 d } n  t j t j d  |  } t |  | | j |  S(   Ni    i   (   R   R(   R   R   R)   R   R*   (   R   R   R   R   R+   R,   R-   R.   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   const_ne_implB   s    	c         C` sL   | j    } |  j | | | |  } |  j | |  } | |  | | | |  S(   s>   
    Deferred.__getattr__ => redirect to the actual type.
    (   t   gett   castt   get_getattr(   R   R   t   typt   valuet   attrt
   inner_typeR-   t   imp(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   deferred_getattrN   s    c         C` sD   |  j  | | | | j    } |  j | } | j | | j   |  S(   N(   R2   R1   t   data_model_managert   sett   make_uninitialized(   R   R   t   fromtyt   totyR-   t   actualt   model(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   any_to_deferredX   s    c         C` s;   |  j  | } | j | |  } |  j | | | j   |  S(   N(   R:   R1   R2   (   R   R   R=   R>   R-   R@   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   deferred_to_any`   s    c         C` sF   | \ } } | j  | | g  } | j |  } t |  | | j |  S(   N(   t   gept   loadR   R*   (   R   R   R   R   t   base_ptrt   idxt   elem_ptrR.   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   getitem_cpointerk   s    c         C` s8   | \ } } } | j  | | g  } | j | |  d  S(   N(   RC   t   store(   R   R   R   R   RE   RF   R-   RG   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   setitem_cpointers   s    c   	      ` s   t  |  t  |  k s* t | | f   t  |  d k sB t      f d   } t | |  } t | |  \ } } | S(   Ni    c         ` s   |  \ } } | \ } }  j  j | |  } | d  k	 s? t   j   | | |  }  j   | | |  } t j t j | |  }  j	  |  } |   | | f  }	   j
 |	 | |  }
 | |
 f S(   N(   t   typing_contextt   unify_typest   Nonet   AssertionErrorR2   R   t	   signatureR   t   booleanR   t   select(   t   accumulatorR5   t   acctyt   acct   vtyt   vt   tyt   cmpsigt   get   predR.   (   R   t   cmpopR   (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   binary_minmax   s    (   t   lenRN   t   zipR   (	   R   R   t   argtysR   R[   R\   t   typvalst   restyt   resval(    (   R   R[   R   s5   lib/python2.7/site-packages/numba/targets/builtins.pyt	   do_minmax|   s    *c         C` sB   t  | j d  } t j | | d  } t |  | | | t j  S(   Ni    (   t   listR   R   t   unpack_tupleRc   R   t   gt(   R   R   R   R   R_   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   max_iterable   s    c         C` s   t  |  | | j | t j  S(   N(   Rc   R   R   Rf   (   R   R   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt
   max_vararg   s    c         C` sB   t  | j d  } t j | | d  } t |  | | | t j  S(   Ni    (   Rd   R   R   Re   Rc   R   t   lt(   R   R   R   R   R_   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   min_iterable   s    c         C` s   t  |  | | j | t j  S(   N(   Rc   R   R   Ri   (   R   R   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt
   min_vararg   s    c         C` s)   t  j r d |  j f Sd |  j f Sd  S(   Ns   llvm.rint.f%ds   llvm.round.f%d(   R   t   IS_PY3t   bitwidth(   t   tp(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   _round_intrinsic   s    	c   
      C` s   | j  d } |  j |  } | j } t j | | g  } | j | d t |  } | j | |  }	 t j	 r | j
 |	 |  j | j   }	 n  t |  | | j |	  S(   Ni    t   name(   R   t   get_value_typet   moduleR   t   functiont   get_or_insert_functionRo   t   callR   Rl   t   fptosiR*   R   (
   R   R   R   R   t   flttyt   lltyRr   t   fntyt   fnR.   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   round_impl_unary   s    		!c         ` sn   | j  d } t j t |  t j | |       f d   } |  j | | | |  } t |  | | j |  S(   Ni    c         ` s   t  j |   s t  j |   r" |  S| d k r | d k rQ d | d } d } n d | } d } |  | | } t  j |  r |  S  |  | | Sd | } |  | }   |  | Sd  S(   Ni    i   g      $@gMDg      ?(   t   matht   isinft   isnan(   t   xt   ndigitst   pow1t   pow2t   y(   t   _round(    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   round_ndigits   s    	

(	   R   R   t   ExternalFunctionRo   R   RO   t   compile_internalR   R*   (   R   R   R   R   Rw   R   R.   (    (   R   s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   round_impl_binary   s    c         C` sF   | j  \ } | \ } |  j | | | | j  } t |  | | j |  S(   N(   R   R2   R*   R   (   R   R   R   R   RW   R-   R.   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   int_impl   s    	c         C` sR  | j  } | j } t | j  d k r | j \ } | \ } t | t j  r| |  j | | | |  } t |  | | j  |  S|  j | | | |  }	 |  j	 | d  }
 nc t | j  d k r| j \ } } | \ }	 }
 |  j | |	 | |  }	 |  j | |
 | |  }
 n  |  j
 | |  } |	 | _ |
 | _ | j   } t |  | | j  |  S(   Ni   i    i   (   R*   t   underlying_floatR]   R   t
   isinstanceR   t   ComplexR2   R   t   get_constantt   make_complext   realt   imagt	   _getvalue(   R   R   R   R   t   complex_typet
   float_typet   argtyt   argR.   R   R   t   realtyt   imagtyt   cmplx(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   complex_impl   s(    					c         C` si   t  | j t j  r7 |  j t j |  } | | |  S| \ } | j \ } |  j | | | | j  Sd S(   s1   
    Call a number class, e.g. np.int32(...)
    N(	   R   R*   R   t   ArrayR   t   npt   arrayR   R2   (   R   R   R   R   t   implR-   t   valty(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   number_constructor  s    	c         C` s
   |  j    S(   N(   t   get_dummy_value(   R   R   RW   t   pyval(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   constant_dummy  s    c         C` sF   |  j  |  } |  j | | j |  d t |  } | j | |  S(   Nt   info(   t   get_function_pointer_typet   add_dynamic_addrt   get_pointert   strt   bitcast(   R   R   RW   R   t   ptrtyt   ptrval(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   constant_function_pointer!  s    c         C` s
   |  j    S(   s&   
    One-argument type() builtin.
    (   R   (   R   R   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt	   type_impl+  s    c         C` s.   | j  \ } | \ } t |  | | |  } | S(   N(   R   R   (   R   R   R   R   RW   R-   t   iterval(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt	   iter_impl3  s    	c         C` su   | j  \ } | \ } t |  | | |  } | j | j | j    d t  |  j j | t d  Wd  QX| j	   S(   Nt   likely(    (
   R   R   t   if_thenR   t   is_validt   Falset	   call_convt   return_user_exct   StopIterationt   yielded_value(   R   R   R   R   t   itertyR   R.   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt	   next_impl;  s    	%s   not inc         C` s.   d   } |  j  | | | |  } | j |  S(   Nc         S` s   t  j | |   S(   N(   R   t   contains(   t   at   b(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   in_implL  s    (   R   R   (   R   R   R   R   R   R.   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   not_inJ  s    	c         C` sF   | j  \ } | j } |  j | t | j   } t |  | | j |  S(   N(   R   R*   R   R]   R   R   (   R   R   R   R   RW   t   rettyR.   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   constsized_lenU  s    	c         C` s*   | j  \ } t |  r t j St j Sd  S(   N(   R   R]   R   t   true_bitR#   (   R   R   R   R   RW   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt
   sized_bool]  s    c         C` s.   | j  } |  j |  } t |  | | j  |  S(   N(   R*   t   get_constant_undefR   (   R   R   R   R   R   R.   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   lower_empty_tuplee  s    	c         C` s   | \ } t  |  | | j |  S(   N(   R   R*   (   R   R   R   R   R-   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   lower_tuplek  s    	c         C` s   t  |  t j  rh |  j } | d k r: t j t j  j S| d k rY t j t j  j St	 d   n  t  |  t j
  r |  j St	 d   d  S(   Ni    i@   s   Unsupported floating point types   Unsupported type(   R   R   t   FloatRm   R   t   finfot   float32t   maxt   float64R!   t   Integert   maxval(   R4   t   bw(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   get_type_max_valuer  s    	c         C` s   t  |  t j  rh |  j } | d k r: t j t j  j S| d k rY t j t j  j St	 d   n  t  |  t j
  r |  j St	 d   d  S(   Ni    i@   s   Unsupported floating point types   Unsupported type(   R   R   R   Rm   R   R   R   t   minR   R!   R   t   minval(   R4   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   get_type_min_value~  s    	c   
      C` s   | j  d j } | j } t | t j  rX t j |  } | j } t j	 | |  } n t | t j
  r | d k r t j   } n' | d k r t j   } n t d   t t d j |   }	 t j	 | t j |	  j  } n  t |  | | |  S(   Ni    i    i@   s+   llvmlite only supports 32 and 64 bit floatss   float{}(   R   t   dtypeRm   R   R   R   R   R)   R   R   R   t	   FloatTypet
   DoubleTypeR!   t   getattrR   t   formatR   R   R   (
   R   R   R   R   R4   R   t   ltyR-   R.   t   npty(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   lower_get_type_min_value  s    		!c   
      C` s   | j  d j } | j } t | t j  rX t j |  } | j } t j	 | |  } n t | t j
  r | d k r t j   } n' | d k r t j   } n t d   t t d j |   }	 t j	 | t j |	  j  } n  t |  | | |  S(   Ni    i    i@   s+   llvmlite only supports 32 and 64 bit floatss   float{}(   R   R   Rm   R   R   R   R   R)   R   R   R   R   R   R!   R   R   R   R   R   R   (
   R   R   R   R   R4   R   R   R-   R.   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   lower_get_type_max_value  s    		!(   t
   IndexValuet   IndexValueType(   t   overloadt   register_jitablec         C` sI   | j  } | \ } } t j |  |  |  } | | _ | | _ | j   S(   N(   R*   R   t   create_struct_proxyt   indexR5   R   (   R   R   R   R   R4   R   R5   t   index_value(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   impl_index_value  s    			c         C` s/   t  |  t  r+ t  | t  r+ d   } | Sd  S(   Nc         S` s   |  j  | j  k r | S|  S(   N(   R5   (   t   indval1t   indval2(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   min_impl  s    (   R   R   (   R   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt
   indval_min  s    	c         C` s/   t  |  t  r+ t  | t  r+ d   } | Sd  S(   Nc         S` s   | j  |  j  k r | S|  S(   N(   R5   (   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   max_impl  s    (   R   R   (   R   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt
   indval_max  s    	c         C` s
   |  | k S(   N(    (   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   <lambda>  t    c         C` s
   |  | k  S(   N(    (   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyR     R   c         ` s)   t  |  t j  r%   f d   } | Sd  S(   Nc         ` sE   t  |   } t |  } x& | D] }   | |  r | } q q W| S(   N(   t   itert   next(   t   iterablet   itt
   return_valR-   (   t   op(    s5   lib/python2.7/site-packages/numba/targets/builtins.pyR     s    (   R   R   t   IterableType(   R   R   R   (    (   R   s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   min_max_impl  s    c         C` s   t  |  t  S(   N(   R   t	   less_than(   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   iterable_min  s    c         C` s   t  |  t  S(   N(   R   t   greater_than(   R   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   iterable_max  s    c         C` s   | j  } d   } t j j | j  } t j | t j |  |  } |  j   |  j	 | | j d |  f } |  j
 | | | |  S(   s^  Redirect constructor implementation to `numba_typeref_ctor(cls, *args)`,
    which should be overloaded by type implementator.

    For example:

        d = Dict()

    `d` will be typed as `TypeRef[DictType]()`.  Thus, it will call into this
    implementation.  We need to redirect the lowering to a function
    named ``numba_typeref_ctor``.
    c         W` s   t  |  |  S(   N(   R   (   t   clsR   (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt	   call_ctor  s    i   (   R*   R   t   Tuplet
   from_typesR   R   RO   t   TypeRefR   t
   make_tupleR   (   R   R   R   R   R   R   t	   ctor_args(    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   redirect_type_ctor  s    			(}   t
   __future__R    R   R   R|   t	   functoolsR   t   numpyR   R   t   llvmliteR   t   llvmlite.llvmpy.coreR   R   t   llvmpyt   coret   lct   imputilsR   R   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   t   is_nott   AnyR   R   R'   R"   t   Literalt   IntegerLiteralR/   t   net   StringLiteralR0   t   DeferredTypeR9   t   Optionalt   BooleanRA   RB   t   getitemt   CPointerR   RH   t   setitemRJ   Rc   R   t	   BaseTupleRg   t   VarArgRh   R   Rj   Rk   Ro   t   roundR   R{   R   t   intt   floatR   t   complexR   t   NumberClassR   R   t   DummyR   t   ExternalFunctionPointerR   t   typeR   R   R   R   R   t   IteratorTypeR   R   R]   t
   ConstSizedR   t   boolt   SizedR   t   tupleR   R   R   R   t   DTypeR   R   t   numba.typing.builtinsR   R   t   numba.extendingR   R   t   intpt   uintpR   R   R   R   R   R   R   R   R   (    (    (    s5   lib/python2.7/site-packages/numba/targets/builtins.pyt   <module>   s   L"$	$'
$
$$	$*		$$	!&$!
!		$
