ó
Û³Y]c           @   s#  d  Z  d d l m Z m Z d d l m Z m Z m Z m Z m	 Z	 m
 Z
 e d e j  d    Z e e e j  e e e j e j  d     Z e d e j  e d     Z e e e j e j   d	    Z e d e j  e d
     Z e d e j  e d     Z d S(   s8   
Implementation of various iterable and iterator types.
iÿÿÿÿ(   t   typest   cgutils(   t   lower_builtint   iternext_implt   call_iternextt   call_getitert   impl_ret_borrowedt   impl_ret_new_reft   getiterc         C   s   | \ } t  |  | | j |  S(   N(   R   t   return_type(   t   contextt   buildert   sigt   argst   it(    (    s6   lib/python2.7/site-packages/numba/targets/iterators.pyt   iterator_getiter   s    	c         C   s3  t  |  d k s* t  |  d k s* t  | j d } t  |  d k rk | d } |  j t j d  } nE t  |  d k r° | d } |  j | | d | j d t j  } n  t |  | | |  } |  j | | j	  } t
 j | | j  }	 | j | |	  |	 | _ | | _ | j   }
 t |  | | j	 |
  S(   Ni   i   i    (   t   lent   AssertionErrorR   t   get_constantR    t   intpt   castR   t   make_helperR	   R   t   alloca_oncet   typet   storet   countt   itert	   _getvalueR   (   R
   R   R   R   t   srctyt   srct	   start_valt   iterobjt   enumt   countptrt   res(    (    s6   lib/python2.7/site-packages/numba/targets/iterators.pyt   make_enumerate_object   s     *

)		t   iternextc      
   C   sò   | j  \ } | \ } |  j | | d | } | j | j  } | j | |  j t j d   } | j | | j  t	 |  | | j
 | j  }	 |	 j   }
 | j |
  | j |
  6 |	 j   } | j |  j | | j | | g   Wd  QXd  S(   Nt   valuei   (   R   R   t   loadR   t   addR   R    R   R   R   t   source_typeR   t   is_validt	   set_validt   if_thent   yielded_valuet   yield_t
   make_tuplet
   yield_type(   R
   R   R   R   t   resultt   enumtyR    R   t   ncountt   srcresR)   t   srcval(    (    s6   lib/python2.7/site-packages/numba/targets/iterators.pyt   iternext_enumerate.   s    	!c   
      C   sŠ   | j  } t |  t | j  k s* t  |  j | |  } xE t t | | j   D]+ \ } \ } } t |  | | |  | | <qU W| j	   }	 t
 |  | | j  |	  S(   N(   R	   R   t   source_typesR   R   t	   enumeratet   zipR   R   R   R   (
   R
   R   R   R   t   zip_typet   zipobjt   it   argR   R"   (    (    s6   lib/python2.7/site-packages/numba/targets/iterators.pyt   make_zip_objectG   s    	!+c      
   C   s  | j  \ } | \ } |  j | | d | } t |  d k rM | j   d  St j | |  j | j   } t j | d t j	 } xÂ t
 t | | j   D]š \ }	 \ }
 } | j |  } | j |  v t |  | | |
  } | j | | j    } | j | |  | j   } t j | | d |	  } | j | |  Wd  QXq W| j |  } | j |  | j |   | j | j |   Wd  QXd  S(   NR%   i    (   R   R   R   t   set_exhaustedR   R   t   get_value_typeR/   t   alloca_once_valuet   true_bitR7   R8   R6   R&   R+   R   t   and_R)   R   R,   t   gep_inboundsR*   R-   (   R
   R   R   R   R0   R9   R:   t	   p_ret_tupt
   p_is_validR;   R   R   R)   R3   t   valt   ptr(    (    s6   lib/python2.7/site-packages/numba/targets/iterators.pyt   iternext_zipU   s,    	
	+c   
   	   C   sæ   | j  \ } | \ } |  j |  } | |  | | |  \ } }	 t j | | j   | j t  | j |	  Wd  QXt j | | j	   | j
   Wd  QXt j | | j | j | j | j	     |  j j | |  Wd  QXd  S(   N(   R   t   get_generator_implR   t	   if_likelyt   is_okR*   t   TrueR-   t   if_unlikelyt   is_stop_iterationR>   RB   t   is_errort   not_t	   call_convt   return_status_propagate(
   R
   R   R   R   R0   t   gentyt   gent   implt   statust   retval(    (    s6   lib/python2.7/site-packages/numba/targets/iterators.pyRH   {   s    		N(   t   __doc__t   numbaR    R   t   numba.targets.imputilsR   R   R   R   R   R   t   IteratorTypeR   R7   t   IterableTypet   IntegerR#   t   EnumerateTypeR5   R8   t   VarArgt   AnyR=   t   ZipTypeRH   t	   Generator(    (    (    s6   lib/python2.7/site-packages/numba/targets/iterators.pyt   <module>   s   .$$%