ó
\K]c           @   sÙ  d  Z  d d l 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 m Z m Z 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 „  Z. e d „  ƒ Z/ e e j0 ƒ d „  ƒ Z1 x- e2 d ƒ D] \ Z3 Z4 e. d e3 d e4 ƒ q²Wd 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	   intrinsict   overloadt   overload_attributet   register_jitable(   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_lenP   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_implZ   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"   g   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#   R1   R2   R3   t	   set_validt   if_thenR/   t   yield_R.   R0   R>   R   (
   RA   R   R   t   resultRE   RC   R$   t   is_validR%   RF   (   R   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   iternext–   s    	%(   t   __name__t
   __module__t   classmethodR"   RW   (    (   R   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyR'   d   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_tRk   (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyRm   Å   s    	c         S   s’   | j  \ } | \ } |  j t j ƒ } |  j | | d | ƒ} | j } t | ƒ |  | d | j ƒ}	 t j	 | |	 j
 ƒ }
 t |  | | |
 d ƒ S(   NR%   i    (   R   Rn   R    Ro   t   make_helpert
   array_typeR   t   arrayR   R^   t   shapeR   (   R   R   R   R   t   itertyR%   Rq   Rk   t   arraytyt   aryRu   (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyRm   Ì   s    		N(   t
   isinstanceR    t   RangeIteratorTypet
   yield_typeR	   t   ListIterRo   t   ArrayIterator(   t	   typingctxRd   Rm   (    (   Rl   s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   range_iter_len¶   s    			
c            s:   t  ‡  f d †  ƒ ‰ t t j | ƒ ‡ f d †  ƒ } d  S(   Nc            s;   t  | t j ƒ r7 ‡  f d †  } t | j | ƒ | f Sd  S(   Nc            s8   | \ } t  j | | d ƒ } t |  | | j | ˆ  ƒ S(   Ni   (   R   R^   R   t   return_type(   R   R   R   R   Rd   Rg   (   t   index(    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyRm   Ý   s    	(   Ry   R    t	   RangeTypeR	   R`   (   R~   t   aRm   (   R   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   rangetype_attr_getterÚ   s    c            s   ‡  f d †  } | S(   Nc            s
   ˆ  |  ƒ S(   N(    (   t   rnge(   R„   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   getæ   s    (    (   R…   R†   (   R„   (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt
   range_atträ   s    (   R
   R   R    R‚   (   R   t	   attributeR‡   (    (   R   R„   s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   make_range_attrÙ   s    
c         C   sz   |  j  d k r1 | |  j k  s- | |  j k r1 t S|  j  d k  rb | |  j k s^ | |  j k rb t S| |  j |  j  d k S(   Ni    (   R   R   R   t   False(   t   robjRd   (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   impl_contains_helperë   s
    --c         C   s–   d „  } t  |  t j ƒ s d  St  | t j t j f ƒ r> t St  | t j ƒ r] d „  } | St  | t j ƒ r| d „  } | St  | t j ƒ s’ | Sd  S(   Nc         S   s   t  S(   N(   RŠ   (   R‹   Rd   (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt
   impl_false÷   s    c         S   s+   | d d k r t  St |  t | ƒ ƒ Sd  S(   Ni   i    (   RŠ   RŒ   t   int(   R‹   Rd   (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   impl  s    c         S   sD   | j  d k r t S| j d d k r* t St |  t | j ƒ ƒ Sd  S(   Ni    i   (   t   imagRŠ   t   realRŒ   RŽ   (   R‹   Rd   (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyR   	  s
    (	   Ry   R    R‚   t   Integert   BooleanRŒ   t   Floatt   Complext   Number(   R‹   Rd   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   impl_containsõ   s    			R   R   R   R   Rˆ   (   R   R   R   (5   t   __doc__t   operatort   llvmlite.llvmpy.coret   llvmpyt   coreR2   t   numbaR    R   R   t   listobjR   t   arrayobjR   t   imputilsR   R   R   R   t   numba.typingR	   t   numba.extendingR
   R   R   R   t   numba.parforR   R   R]   t   range_state32_typet   range_iter32_typet   int32t   range_state64_typet   range_iter64_typet   int64t   unsigned_range_state64_typet   unsigned_range_iter64_typet   uint64Ri   Rg   R   t   state_typesR‚   Rh   R   R‰   RŒ   t   containsR—   t	   enumeratet   ixt   attr(    (    (    s5   lib/python2.7/site-packages/numba/targets/rangeobj.pyt   <module>   s0   ""		Œ#	
!