ó
Û³Y]c           @   s[  d  Z  d d l j j Z d d l m Z m Z m Z d d l	 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 „  Z d „  Z i e j e j f e j 6e j e j f e j 6e j  e j! f e j" 6Z# x' e# j$ ƒ  D] \ Z% Z& e e% e& Œ qWe e j' e j' ƒ d „  ƒ Z( e d „  ƒ Z) d S(   s=   
Implementation of the range object for fixed-size integers.
iÿÿÿÿN(   t   typest   cgutilst   prangei   (   t   ListIterInstance(   t
   make_array(   t   lower_builtint
   lower_castt   iterator_implt   impl_ret_untracked(   t	   signature(   t	   intrinsic(   t   internal_prangec         C   s   t  j |  ƒ S(   sn   
    Return the Structure representation of the given *typ* (an
    instance of types.RangeIteratorType).
    (   R   t   create_struct_proxy(   t   typ(    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   make_range_iterator   s    c            sj  t  j ˆ ƒ ‰ t t ˆ ƒ t t ˆ ƒ t t ˆ ƒ ‡ ‡ ‡ f d †  ƒ ƒ ƒ } t t ˆ ˆ ƒ t t ˆ ˆ ƒ t t ˆ ˆ ƒ ‡ ‡ ‡ f d †  ƒ ƒ ƒ } t t ˆ ˆ ˆ ƒ t t ˆ ˆ ˆ ƒ t t ˆ ˆ ˆ ƒ ‡ ‡ f d †  ƒ ƒ ƒ } t t ˆ ƒ ‡  ‡ ‡ f d †  ƒ } t d ˆ ƒ ‡  ‡ ‡ f d †  ƒ } t ˆ ˆ ƒ d t ˆ ƒ f ‡ f d †  ƒ  Yƒ ‰  d  S(	   Nc            sd   | \ } ˆ  |  | ƒ } |  j  ˆ d ƒ | _ | | _ |  j  ˆ d ƒ | _ t |  | ˆ | j ƒ  ƒ S(   s2   
        range(stop: int) -> range object
        i    i   (   t   get_constantt   startt   stopt   stepR   t	   _getvalue(   t   contextt   buildert   sigt   argsR   t   state(   t
   RangeStatet   int_typet   range_state_type(    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   range1_impl   s    		c            s[   | \ } } ˆ  |  | ƒ } | | _  | | _ |  j ˆ d ƒ | _ t |  | ˆ | j ƒ  ƒ S(   s>   
        range(start: int, stop: int) -> range object
        i   (   R   R   R   R   R   R   (   R   R   R   R   R   R   R   (   R   R   R   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   range2_impl,   s    		c            sR   | \ } } } ˆ  |  | ƒ } | | _  | | _ | | _ t |  | ˆ | j ƒ  ƒ S(   sI   
        range(start: int, stop: int, step: int) -> range object
        (   R   R   R   R   R   (   R   R   R   R   R   R   R   R   (   R   R   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   range3_impl=   s    			c            sO   | \ } ˆ |  | | ƒ } ˆ  j  |  | | ƒ } t |  | ˆ | j | j ƒ ƒ S(   s   
        len(range)
        (   t   from_range_stateR   t   loadt   count(   R   R   R   R   t   valueR   t   res(   t	   RangeIterR   R   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt	   range_lenN   s    	t   getiterc            sI   | \ } ˆ |  | | ƒ } ˆ  j  |  | | ƒ j ƒ  } t |  | ˆ | ƒ S(   s    
        range.__iter__
        (   R   R   R   (   R   R   R   R   R"   R   R#   (   R$   R   t   range_iter_type(    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   getiter_range32_implX   s    	R$   c              s,   e  Z e ‡  f d  †  ƒ Z ‡  f d †  Z RS(   c            s  |  | | ƒ } | j  } | j } | j } t j | | j ƒ } | j | | ƒ t j | | j ƒ }	 | | _ | | _ | | _ |	 | _ | j	 | | ƒ }
 | j
 ˆ  d ƒ } | j
 ˆ  d ƒ } | j t j |
 | ƒ } | j t j | | ƒ } | j | | ƒ } | j t j | | ƒ } t j | | ƒ  | j j | t d ƒ Wd QX| j | ƒ Â \ } } |  | j | | j ƒ Wd QX|  | j |
 | ƒ } | j | | | j | ƒ ƒ } | j t j | | ƒ } | j | j |
 | ƒ | j | | | ƒ ƒ } | j | | j ƒ Wd QXWd QX| S(   s[   
            Create a RangeIter initialized from the given RangeState *state*.
            i    i   s   range() arg 3 must not be zeroN(   s   range() arg 3 must not be zero(   R   R   R   R   t   alloca_oncet   typet   storet   iterR!   t   subR   t   icmpt   lct   ICMP_SGTt   xort   ICMP_EQt   if_unlikelyt	   call_convt   return_user_exct
   ValueErrort   if_elset   sremt   selectt   negt   addt   sdiv(   t   clsR   R   R   t   selfR   R   R   t   startptrt   countptrt   difft   zerot   onet   pos_difft   pos_stept   sign_differst	   zero_stept   thent   orelset   remt   unevent   newcount(   R   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyR   e   s@    							c   
   
      sá   | j  ˆ  d ƒ } |  j } | j | ƒ } | j t j | | ƒ } | j | ƒ | j | ƒ } | j |  j ƒ } | j	 | ƒ | j  ˆ  d ƒ }	 | j
 | j | |	 d d g ƒ| ƒ | j
 | j | |  j ƒ |  j ƒ Wd  QXd  S(   Ni    i   t   flagst   nsw(   R   R!   R    R.   R/   R0   t	   set_validt   if_thenR,   t   yield_R+   R-   R;   R   (
   R>   R   R   t   resultRB   R@   R!   t   is_validR"   RC   (   R   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   iternext”   s    	%(   t   __name__t
   __module__t   classmethodR   RT   (    (   R   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyR$   b   s   /(	   R   R   R   t   rangeR   R   t   lenR   R   (   R   R   R'   R   R   R   R%   R(   (    (   R$   R   R   R'   R   s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   make_range_impl   s    *--$
$
c         C   sV   t  j | | d ƒ } g  | D]$ } |  j | | | j | j ƒ ^ q } t  j | | ƒ S(   Ni   (   R   t   unpack_tuplet   castt   dtypet   make_anonymous_struct(   R   R   t   fromtyt   totyt   valt   olditemst   vt   items(    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   range_to_range­   s    .c            s£   t  | t j ƒ r= | j ‰  ‡  f d †  } t ˆ  | ƒ | f St  | t j ƒ rn d „  } t t j | ƒ | f St  | t j ƒ rŸ d „  } t t j | ƒ | f Sd S(   s@   
    An implementation of len(range_iter) for internal use.
    c            s]   | \ } t  ˆ  d } t j | ƒ |  | | ƒ } | j j } t |  | | | j | j ƒ ƒ S(   Ni   (   t   range_impl_mapR   R   R!   R*   R   R    (   R   R   R   R   R"   t	   iter_typet   iterobjR   (   t   val_type(    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   codegen»   s
    	c         S   sM   | \ } |  j  t j ƒ } t |  | | j d | ƒ } t |  | | | j ƒ S(   Ni    (   t   get_value_typeR    t   intpR   R   R   t   size(   R   R   R   R   R"   t   intp_tRh   (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyRj   Ã   s    	c         S   s’   | j  \ } | \ } |  j t j ƒ } |  j | | d | ƒ} | j } t | ƒ |  | d | j ƒ}	 t j	 | |	 j
 ƒ }
 t |  | | |
 d ƒ S(   NR"   i    (   R   Rk   R    Rl   t   make_helpert
   array_typeR   t   arrayR   R[   t   shapeR   (   R   R   R   R   t   itertyR"   Rn   Rh   t   arraytyt   aryRr   (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyRj   Ê   s    		N(   t
   isinstanceR    t   RangeIteratorTypet
   yield_typeR	   t   ListIterRl   t   ArrayIterator(   t	   typingctxRa   Rj   (    (   Ri   s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   range_iter_len´   s    			
(*   t   __doc__t   llvmlite.llvmpy.coret   llvmpyt   coreR/   t   numbaR    R   R   t   listobjR   t   arrayobjR   t   imputilsR   R   R   R   t   numba.typingR	   t   numba.extendingR
   t   numba.parforR   R   RZ   t   range_state32_typet   range_iter32_typet   int32t   range_state64_typet   range_iter64_typet   int64t   unsigned_range_state64_typet   unsigned_range_iter64_typet   uint64Rf   Rd   R   t   state_typest	   RangeTypeRe   R|   (    (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   <module>   s$   "		Œ