
\K]c           @` s  d  Z  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	 m
 Z
 m Z m Z d d l m Z m Z m Z m Z m Z m Z m Z d d l m Z d d	 l m Z m Z d
   Z d   Z d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ  d   Z! e e" e
 j#  d    Z$ e e"  d    Z$ e e% e
 j&  d    Z' e d e
 j&  d    Z( e d e
 j)  e e j*  d     Z+ e e j, e
 j& e
 j-  d    Z. e e j/ e
 j& e
 j- e
 j0  d    Z1 e e j, e
 j& e
 j2  d    Z3 e e j/ e
 j& e
 j2 e
 j0  d    Z1 e e j4 e
 j& e
 j-  d     Z5 e e j4 e
 j& e
 j2  d!    Z6 e e j7 e
 j8 e
 j0  d"    Z9 e e: e
 j8  d#    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-  d&    ZA e e jB e
 j& e
 j-  d'    ZC e e jD e
 j& e
 j&  d(    ZE e e jF e
 j& e
 j&  d)    ZG e e jH e
 j& e
 j&  d*    ZI e e jJ e
 j& e
 j&  d+    ZK e e jL e
 j& e
 j&  d,    ZM e e jN e
 j& e
 j&  d-    ZO e e jP e
 j& e
 j&  d.    ZQ e d/ e
 j& e
 j0  d0    ZR e d1 e
 j&  d2    ZS e d3 e
 j&  d4    ZT e d5 e
 j& e
 j0  d6    ZU d7   ZV e d8 e
 j& e
 j#  d9    ZW e d: e
 j& e
 j0  d;    ZX e d: e
 j& e
 j0 e
 j-  d<    ZX e d: e
 j& e
 j0 e
 j- e
 j-  d=    ZX e d> e
 j& e
 j- e
 j0  d?    ZY e d@ e
 j&  dA    ZZ e d@ e
 j& e
 j-  dB    ZZ e dC e
 j& e
 j0  dD    Z[ e dE e
 j&  dF    Z\ e] Z^ dG   Z_ e dH e
 j&  e dH e
 j& e
 j`  dI     Za e eb e
 j#  e eb e
 j# e
 j`  dJ     Zc e e
 j& e
 j&  dK    Zd d S(L   s'   
Support for native homogeneous lists.
i    (   t   print_functiont   absolute_importt   divisionN(   t   ir(   t   typest   cgutilst   typing(   t   lower_builtint
   lower_castt   iternext_implt   impl_ret_borrowedt   impl_ret_new_reft   impl_ret_untrackedt   RefType(   t   cached_propertyi   (   t	   quicksortt   slicingc         C` sd   t  j |  } |  j j | | j  } |  j |  j   } | j | |  } |  j | | d | S(   sy   
    Given a list value and type, get its payload structure (as a
    reference, so that mutations are seen by all).
    t   ref(	   R   t   ListPayloadt   nrtt   meminfo_datat   meminfot   get_data_typet
   as_pointert   bitcastt   make_data_helper(   t   contextt   buildert	   list_typet   valuet   payload_typet   payloadt   ptrty(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   get_list_payload   s
    c         C` s   |  j  | j  } |  j |  S(   s7   
    Return the item size for the given list type.
    (   R   t   dtypet   get_abi_sizeof(   R   R   t   llty(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   get_itemsize    s    t   _ListPayloadMixinc           B` s   e  Z e d     Z e j d    Z e d    Z e d    Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z d   Z RS(   c         C` s
   |  j  j S(   N(   t   _payloadt   size(   t   self(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR(   *   s    c         C` s   | |  j  _ d  S(   N(   R'   R(   (   R)   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR(   .   s    c         C` s
   |  j  j S(   N(   R'   t   dirty(   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR*   2   s    c         C` s   |  j  j d  S(   Nt   data(   R'   t   _get_ptr_by_name(   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR+   6   s    c         C` s   t  j |  j |  j |  S(   N(   R   t   gept   _builderR+   (   R)   t   idx(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   _gep:   s    c         C` s7   |  j  |  } |  j j |  } |  j j |  j |  S(   N(   R0   R.   t   loadt
   _datamodelt	   from_data(   R)   R/   t   ptrt	   data_item(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   getitem=   s    c         C` sU   |  j  j d | t j | j d   } |  j  j | |  j  } |  j  j | | |  S(   sp   
        Fix negative indices by adding the size to them.  Positive
        indices are left untouched.
        t   <i    (   R.   t   icmp_signedR   t   Constantt   typet   addR(   t   select(   R)   R/   t   is_negativet   wrapped_index(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt	   fix_indexB   s    c         C` sU   |  j  j d | t j | j d   } |  j  j d | |  j  } |  j  j | |  S(   s<   
        Return whether the index is out of bounds.
        R7   i    s   >=(   R.   R8   R   R9   R:   R(   t   or_(   R)   R/   t	   underflowt   overflow(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   is_out_of_boundsL   s    c         C` s   |  j  } t j | |  } t j | j d  } |  j } |  j  j d | |  } | j | d t	  | j
 | |  Wd QX|  j  j d | |  } | j | d t	  | j
 | |  Wd QX| j |  S(   s/   
        Clamp the index in [0, size].
        i    R7   t   likelyNs   >=(   R.   R   t   alloca_once_valueR   R9   R:   R(   R8   t   if_thent   Falset   storeR1   (   R)   R/   R   t   idxptrt   zeroR(   RA   RB   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   clamp_indexU   s    		c         C` sK   |  j  j |  j |  d t $ |  j j j |  j  t | f  Wd QXd S(   s?   
        Raise an error if the index is out of bounds.
        RD   N(   R.   RF   RC   RG   t   _contextt	   call_convt   return_user_exct
   IndexError(   R)   R/   t   msg(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   guard_indexh   s    "c         C` s   t  j |  j | |  j  S(   so   
        Fix slice start and stop to be valid (inclusive and exclusive, resp)
        indexing bounds.
        (   R   t	   fix_sliceR.   R(   (   R)   t   slice(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRR   p   s    c         C` s#   |  j  j j |  j |  j |  d S(   s   Incref an element valueN(   RL   R   t   increfR.   R"   (   R)   t   val(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   incref_valuew   s    c         C` s#   |  j  j j |  j |  j |  d S(   s   Decref an element valueN(   RL   R   t   decrefR.   R"   (   R)   RU   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   decref_value{   s    (   t   __name__t
   __module__t   propertyR(   t   setterR*   R+   R0   R6   R?   RC   RK   RQ   RR   RV   RX   (    (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR&   (   s   			
						t   ListPayloadAccessorc           B` s   e  Z d  Z d   Z RS(   sb   
    A helper object to access the list attributes given the pointer to the
    payload type.
    c         C` s   | |  _  | |  _ | |  _ | j | j |  _ t j |  } | j |  j	   } | j
 | |  } | j | | d | } | |  _ d  S(   NR   (   RL   R.   t   _tyt   data_model_managerR"   R2   R   R   R   R   R   R   R'   (   R)   R   R   R   t   payload_ptrR   R    R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   __init__   s    				(   RY   RZ   t   __doc__Ra   (    (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR]      s   t   ListInstancec           B` s   e  Z d    Z e d    Z e d    Z e d    Z e j d    Z e d    Z e d    Z	 d   Z
 d   Z d	   Z e d
  Z d   Z e d    Z d   Z d   Z e d    Z e d    Z d   Z d   Z RS(   c         C` s\   | |  _  | |  _ | |  _ | j | | |  |  _ t | |  |  _ | j | j |  _	 d  S(   N(
   RL   R.   R^   t   make_helpert   _listR%   t	   _itemsizeR_   R"   R2   (   R)   R   R   R   t   list_val(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRa      s    			c         C` s
   |  j  j S(   N(   R^   R"   (   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR"      s    c         C` s   t  |  j |  j |  j |  j  S(   N(   R!   RL   R.   R^   Re   (   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR'      s    c         C` s
   |  j  j S(   N(   Re   t   parent(   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRh      s    c         C` s   | |  j  _ d  S(   N(   Re   Rh   (   R)   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRh      s    c         C` s   |  j  j   S(   N(   Re   t	   _getvalue(   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR      s    c         C` s
   |  j  j S(   N(   Re   R   (   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR      s    c         C` s1   |  j  j r- | r t j n t j |  j _ n  d  S(   N(   R^   t	   reflectedR   t   true_bitt	   false_bitR'   R*   (   R)   RU   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt	   set_dirty   s    c         C` sB   |  j  |  j |   |  j | |  j j | | j d    d S(   s)   Remove the value at the location
        i   N(   RX   R6   t   zfillR.   R;   R:   (   R)   R/   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   clear_value   s    c         C` sw   |  j  |  j |   |  j |  } |  j j |  j |  } |  j j | |  |  j t  | rs |  j	 |  n  d  S(   N(
   RX   R6   R0   R2   t   as_dataR.   RH   Rm   t   TrueRV   (   R)   R/   RU   RT   R4   R5   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   setitem   s    c         C` sT   |  j  |  } |  j j |  j |  } |  j j | |  | rP |  j |  n  d  S(   N(   R0   R2   Rp   R.   RH   RV   (   R)   R/   RU   RT   R4   R5   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   inititem   s
    c         C` s   |  j  } |  j |  } |  j |  } |  j j t j  } | j | j | |  | j | |   } t j	 | | | t
 j d  d   d S(   sj   Zero-fill the memory at index *start* to *stop*

        *stop* MUST not be smaller than *start*.
        i   i    N(   R.   R0   RL   t   get_value_typeR   t   intpt   subt   ptrtointR   t   memsetR   t   IntType(   R)   t   startt   stopR   t   baset   endt	   intaddr_tR(   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRn      s    	c         C` s1  | j  t j  } t | t  r6 t j | |  } n  | j t j |   } | j	 |  } t
 | |  } | | 8} t j | t j  }	 |  | | | d  }
 t j | | t j | |  t j | |   \ } } | j | d t  | j t j |	  Wd QX| j | j |	  d t  | j j | d | d |
 j   } | j t j | |  d t  \ } } |  | j t j |	  Wd QX| x | |
 j _ | j t j  |
 j _ | |
 j  _! t j | d  |
 j  _" t j |
 j  _# |
 j$ |
 j" j% d  |  Wd QXWd QXWd QX| j |	  |
 f S(   s   
        Allocate a ListInstance with its storage.
        Return a (ok, instance) tuple where *ok* is a LLVM boolean and
        *instance* is a ListInstance object (the object's contents are
        only valid when *ok* is true).
        RD   NR(   t   dtori    (&   Rt   R   Ru   t
   isinstancet   intR   R9   R   R   R#   R%   R   RE   Rk   t   Nonet   muladd_with_overflowRF   RG   RH   Rl   R1   Rq   R   t   meminfo_new_varsize_dtort   get_dtort   if_elset   is_nullRe   R   t   get_constant_nullt   pyobjectRh   R'   t	   allocatedR(   R*   Rn   R:   (   t   clsR   R   R   t   nitemst   intp_tR   t   payload_sizet   itemsizet   okR)   t	   allocsizet   ovfR   t   if_errort   if_ok(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   allocate_ex   s:    
	.c      
   C` s1  |  j  } |  j } | j } t j t j   t j g  } | j | d d j	 |  j
  } | j sg | Sd | _ t j | j    } | j d } t | | |  j |  } | j j } t j | d | d  d | j d | d  d	 | 5 \ }	 }
 | j |	  } | j j | |  j
 |  Wd
 QX| j   | S(   s,   Define the destructor if not already definedt   names   .dtor.list.{}t   linkonce_odri    Rz   R{   t   stepi   Ru   N(   RL   R.   t   moduleR   t   FunctionTypet   VoidTypeR   t	   voidptr_tt   get_or_insert_functiont   formatR"   t   is_declarationt   linkaget	   IRBuildert   append_basic_blockt   argsR]   R^   R(   R:   t   for_range_sliceR6   R   RW   t   ret_void(   R)   R   R   t   modt   fntyt   fnt   base_ptrR   Ru   R/   t   _RU   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   define_dtor  s&    			!		'
c         C` s(   |  j    } |  j j | t j  } | S(   sp   "Get the element dtor function pointer as void pointer.

        It's safe to be called multiple times.
        (   R   R.   R   R   R   (   R)   R   t
   dtor_fnptr(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR   -  s    c         C` s]   |  j  | | | |  \ } } | j | j |  d t  | j j | t d  Wd QX| S(   s   
        Allocate a ListInstance with its storage.  Same as allocate_ex(),
        but return an initialized *instance*.  If allocation failed,
        control is transferred to the caller using the target's current
        call convention.
        RD   s   cannot allocate listN(   s   cannot allocate list(   R   RF   t   not_RG   RM   RN   t   MemoryError(   R   R   R   R   R   R   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   allocate7  s
    c         C` sV   |  | | | d  } | | j _ | j t j  | j _ | j j | | | j	  | S(   s   
        Allocate a new list instance pointing to an existing payload
        (a meminfo pointer).
        Note the parent field has to be filled by the caller.
        N(
   R   Re   R   R   R   R   Rh   R   RT   R   (   R   R   R   R   R   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   from_meminfoE  s
    c   	      ` sT        f d   }  j    j   | j  t   j    j j } t j  d  } t j  d  }   j	 d | |  }   j	 d   j
 | |  |  }   j | d t  | |  Wd QX  j | d t L   j |   j |   j
 | |    } | |   j  j |  Wd QX|  j _  j t  d S(   sE   
        Ensure the list is properly sized for the new size.
        c         ` s    j  t j  j   }  j |  } |  8} t j   |  t j    t j  |   \ } }   j	 | d t
   j j   t d  Wd  QX j j    j j d | } t j    | d  |   j _ d  S(   NRD   s   cannot resize listR(   (   s   cannot resize list(   R   R   R   R^   R#   R   R   R   R9   RF   RG   RM   RN   R   R   t   meminfo_varsize_reallocRe   R   t   guard_memory_errorR'   R   (   t   new_allocatedR   R   R   R   R4   (   R   R   R   R   R)   (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   _payload_reallocW  s    
	i   i   R7   t   >RD   N(   RL   R.   R:   R%   R^   R'   R   R   R9   R8   t   ashrRF   RG   R;   Rn   R(   Rm   Rq   (	   R)   t   new_sizeR   R   t   twot   eightt   is_too_smallt   is_too_largeR   (    (   R   R   R   R   R)   s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   resizeS  s(    			!		
c         C` sQ   |  j  |  } |  j  |  } t j |  j | | | d |  j |  j t  d S(   sE   
        Move `count` elements from `src_idx` to `dest_idx`.
        R   N(   R0   R   t   raw_memmoveR.   Rf   Rm   Rq   (   R)   t   dest_idxt   src_idxt   countt   dest_ptrt   src_ptr(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   move  s
    (   RY   RZ   Ra   R[   R"   R'   Rh   R\   R   R   Rm   Ro   Rr   Rq   Rs   Rn   t   classmethodR   R   R   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRc      s&   					0		
	8t   ListIterInstancec           B` s_   e  Z d    Z e d    Z e d    Z e d    Z e d    Z e j	 d    Z RS(   c         C` sJ   | |  _  | |  _ | |  _ | j | | |  |  _ | j | j |  _ d  S(   N(   RL   R.   R^   Rd   t   _iterR_   t
   yield_typeR2   (   R)   R   R   t	   iter_typet   iter_val(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRa     s
    			c         C` sm   t  | | | j |  } |  | | | d   } | j t j d  } t j | |  | j _	 | j
 | j _
 | S(   Ni    (   Rc   t	   containerR   t   get_constantR   Ru   R   RE   R   t   indexR   (   R   R   R   R   Rg   t	   list_instR)   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt	   from_list  s    c         C` s"   t  |  j |  j |  j j |  j  S(   N(   R!   RL   R.   R^   R   R   (   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR'     s    c         C` s   |  j  j   S(   N(   R   Ri   (   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR     s    c         C` s   |  j  j |  j j  S(   N(   R.   R1   R   R   (   R)   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR     s    c         C` s   |  j  j | |  j j  d  S(   N(   R.   RH   R   R   (   R)   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR     s    (
   RY   RZ   Ra   R   R   R[   R'   R   R   R\   (    (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR     s   		c         C` s   t  |  } t j |  | | |  } |  j t j |  | _ x? t |  D]1 \ } } | j |  j t j |  | d t	 qI Wt
 |  | | | j  S(   sE   
    Build a list of the given type, containing the given items.
    RT   (   t   lenRc   R   R   R   Ru   R(   t	   enumerateRr   Rq   R   R   (   R   R   R   t   itemsR   t   instt   iRU   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt
   build_list  s    )c         C` s   d   } |  j  | | | |  S(   Nc         S` s   g  } | j  |   | S(   N(   t   extend(   t   iterablet   res(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt	   list_impl  s    (   t   compile_internal(   R   R   t   sigR   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_constructor  s    	c         C` s=   | j  } d } t j |  | | |  } t |  | | | j  S(   Ni    (   t   return_typeRc   R   R   R   (   R   R   R   R   R   t   list_lenR   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR     s    	c         C` s'   t  |  | | j d | d  } | j S(   Ni    (   Rc   R   R(   (   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR     s     t   getiterc         C` s8   t  j |  | | j | d  } t |  | | j | j  S(   Ni    (   R   R   R   R
   R   (   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   getiter_list  s    t   iternextc   	   	   C` s   t  |  | | j d | d  } | j } | j } | j d | |  } | j |  | j |  ? | j | j |   | j	 | |  j
 t j d   | _ Wd  QXd  S(   Ni    R7   i   (   R   R   R   R(   R8   t	   set_validRF   t   yield_R6   R;   R   R   Ru   (	   R   R   R   R   t   resultR   R   R   t   is_valid(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   iternext_listiter  s     		c         C` sq   t  |  | | j d | d  } | d } | j |  } | j | d d | j |  } t |  | | j |  S(   Ni    i   RP   s   getitem out of range(   Rc   R   R?   RQ   R6   R
   R   (   R   R   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   getitem_list  s     
c         C` sv   t  |  | | j d | d  } | d } | d } | j |  } | j | d d | j | | d t |  j   S(   Ni    i   i   RP   s   setitem out of rangeRT   (   Rc   R   R?   RQ   Rr   Rq   t   get_dummy_value(   R   R   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   setitem_list  s     

c         C` s]  t  |  | | j d | d  } |  j | | j d | d  } t j |  | | j d |  | j |  t j | |  } t  j |  | | j |  } | | _	 t
 j | | j | j | j   \ } }	 | 2 \ }
 } | j |
  } | j | | d t Wd  QX|	 2 \ }
 } | j |
  } | j | | d t Wd  QXWd  QXt |  | | j | j  S(   Ni    i   RT   (   Rc   R   Rd   R   t   guard_invalid_sliceRR   t   get_slice_lengthR   R   R(   R   t   for_range_slice_genericRz   R{   R   R6   Rs   Rq   R   R   (   R   R   R   R   R   RS   t   result_sizeR   t	   pos_ranget	   neg_rangeR/   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   getslice_list  s"      		"c         C` se  t  |  | | j d | d  } t  |  | | j d | d  } |  j | | j d | d  } t j |  | | j d |  | j |  | j } t j | |  } | j | j |  }	 t	 j
 |	 j d  }
 t	 j
 |	 j d  } | j | j d | j |   T\ } } | J| j | j |  } | j | j |  } | j | j d |	 |
   @ | j | j | j |	   | j | j | |	  | |  Wd  QX| j | j d |	 |
   @ | j | j | |	  | |  | j | j | j |	   Wd  QX| j } t j | |  > } | j | j  } | j | j | j |  | d t Wd  QXWd  QX|  | j | j d |	 |
   $ d	 } |  j j | t | f  Wd  QXt j | | j | j | j   \ } } | 2 \ } } | j |  } | j | | d t Wd  QX| 2 \ } } | j |  } | j | | d t Wd  QXWd  QXWd  QXWd  QX|  j   S(
   Ni    i   i   s   ==R   R7   RT   s   !=s0   cannot resize extended list slice with step != 1(    Rc   R   Rd   R   R   RR   R(   R   Rv   R   R9   R:   R   R8   R   R;   Rz   RF   R   R   R   t	   for_rangeR6   R   Rr   Rq   RM   RN   t
   ValueErrorR   R{   R   (   R   R   R   R   t   destt   srcRS   t   src_sizet
   avail_sizet
   size_deltaRJ   t   onet   thent	   otherwiset	   real_stopt	   tail_sizet   dest_offsett   loopR   RP   R   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR   '  sN       	*"	1$.c         C` s   d   } |  j  | | | |  S(   Nc         S` s   |  j  |  d  S(   N(   t   pop(   t   lstR   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_delitem_implg  s    (   R   (   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   delitem_list_indexd  s    	c         C` s  t  |  | | j d | d  } |  j | | j d | d  } t j |  | | j d |  | j |  t j | |  } t j | j	 d  } | j
 | j d | j |  d t $ d } |  j j | t | f  Wd  QX| j }	 | j |	 |  }
 t j | |	 |
 |	 j	 d   # \ } } | j | j |   Wd  QX| j | j |
  } | j |	 |
 |  | j | j | j |   |  j   S(   Ni    i   s   !=RD   s4   unsupported del list[start:stop:step] with step != 1(   Rc   R   Rd   R   R   RR   R   R   R9   R:   RF   R8   R   RG   RM   RN   t   NotImplementedErrorRz   R;   R   R   RX   R6   Rv   R(   R   R   R   (   R   R   R   R   R   RS   t	   slice_lenR   RP   Rz   R   R/   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   delitem_listm  s&      (		c         C` s   d   } |  j  | | | |  S(   Nc         S` s%   x |  D] } | | k r t  Sq Wt S(   N(   Rq   RG   (   R   R   t   elem(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   seq_contains_impl  s    (   R   (   R   R   R   R   R  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   in_seq  s    	c         C` s   d   } |  j  | | | |  S(   Nc         S` s   t  |   d k S(   Ni    (   R   (   t   seq(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   sequence_bool_impl  s    (   R   (   R   R   R   R   R	  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   sequence_bool  s    	c      
   C` su  t  |  | | j d | d  } t  |  | | j d | d  } | j } | j } | j | |  } t  j |  | | j |  }	 | |	 _ t j | |  P }
 | j |
 j	  } |  j
 | | | j |	 j  } |	 j |
 j	 | d t Wd  QXt j | |  \ }
 | j |
 j	  } |  j
 | | | j |	 j  } |	 j | j |
 j	 |  | d t Wd  QXt |  | | j |	 j  S(   Ni    i   RT   (   Rc   R   R(   R;   R   R   R   R   R6   R   t   castR"   Rr   Rq   R   R   (   R   R   R   R   t   at   bt   a_sizet   b_sizeR   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_add  s       			+c         C` sP   | j  d j | j j k s" t  t |  | | |  } t |  | | j | j  S(   Ni    (   R   R"   R   t   AssertionErrort   _list_extend_listR
   R   (   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_add_inplace  s    "c         C` s7  t  |  | | j d | d  } | j } | d } t j | j d  } | j t j | |  | |  } | j	 | |  } t  j
 |  | | j |  }	 | |	 _ t j | | | | d t _ \ }
 } t j | |  > } | j | j  } |	 j | j | j |
  | d t Wd  QXWd  QXt |  | | j |	 j  S(   Ni    i   t   incRT   (   Rc   R   R(   R   R9   R:   R<   R   t
   is_neg_intt   mulR   R   R   Rq   R   R6   R   Rr   R;   R   R   (   R   R   R   R   R   R   t   multRJ   R   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_mul  s     	
!	'1c         C` s   t  |  | | j d | d  } | j } | d } t j | j d  } | j t j | |  | |  } | j	 | |  } | j
 |  t j | | | | d t _ \ }	 }
 t j | |  > } | j | j  } | j | j | j |	  | d t Wd  QXWd  QXt |  | | j | j  S(   Ni    i   R  RT   (   Rc   R   R(   R   R9   R:   R<   R   R  R  R   R   Rq   R   R6   R   Rr   R;   R
   R   R   (   R   R   R   R   R   R   R  RJ   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_mul_inplace  s     	
!'1c         C` s   t  |  | | j d | d  } t  |  | | j d | d  } | j | j t j  } | j | j t j  } | j d | |  S(   Ni    i   s   ==(   Rc   R   Rw   R   R   R   R8   (   R   R   R   R   R  R  t   mat   mb(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_is  s
      c         C` s?  | j  \ } } t |  | | | d  } t |  | | | d  } | j } | j d | | j  }	 t j | |	  }
 | j |	   t j | |   } | j | j	  } | j | j	  } |  j
 | t j | j | j f | | f  } | j | j |   " | j t j |
  | j   Wd  QXWd  QXWd  QX| j |
  S(   Ni    i   s   ==(   R   Rc   R(   R8   R   RE   RF   R   R6   R   t   generic_comparet   operatort   eqR"   R   RH   Rl   t   do_breakR1   (   R   R   R   R   t   atyt   btyR  R  R  t	   same_sizeR   R   t   vt   wt   itemres(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_eq  s     	c         C` s   d   } |  j  | | | |  S(   Nc         S` s   |  | k S(   N(    (   R  R  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_ne_impl  s    (   R   (   R   R   R   R   R(  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_ne  s    	c         C` s   d   } |  j  | | | |  S(   Nc         S` sr   t  |   } t  |  } xM t t | |   D]6 } |  | | | k  rL t S|  | | | k r. t Sq. W| | k S(   N(   R   t   ranget   minRq   RG   (   R  R  t   mt   nR   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_le_impl  s    (   R   (   R   R   R   R   R.  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_le  s    	
c         C` s   d   } |  j  | | | |  S(   Nc         S` sr   t  |   } t  |  } xM t t | |   D]6 } |  | | | k  rL t S|  | | | k r. t Sq. W| | k  S(   N(   R   R*  R+  Rq   RG   (   R  R  R,  R-  R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_lt_impl%  s    (   R   (   R   R   R   R   R0  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_lt"  s    	
c         C` s   d   } |  j  | | | |  S(   Nc         S` s
   | |  k S(   N(    (   R  R  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_ge_impl4  s    (   R   (   R   R   R   R   R2  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_ge1  s    	c         C` s   d   } |  j  | | | |  S(   Nc         S` s
   | |  k  S(   N(    (   R  R  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_gt_impl<  s    (   R   (   R   R   R   R   R4  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_gt9  s    	s   list.appendc         C` s   t  |  | | j d | d  } | d } | j } | j | t j | j d   } | j |  | j | | d t	 |  j
   S(   Ni    i   RT   (   Rc   R   R(   R;   R   R9   R:   R   Rr   Rq   R   (   R   R   R   R   R   t   itemR-  R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_appendD  s     
	!s
   list.clearc         C` sF   t  |  | | j d | d  } | j |  j t j d   |  j   S(   Ni    (   Rc   R   R   R   R   Ru   R   (   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt
   list_clearP  s     s	   list.copyc         C` s   d   } |  j  | | | |  S(   Nc         S` s
   t  |   S(   N(   t   list(   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_copy_implY  s    (   R   (   R   R   R   R   R:  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt	   list_copyW  s    	s
   list.countc         C` s   d   } |  j  | | | |  S(   Nc         S` s4   d } x' |  D] } | | k r | d 7} q q W| S(   Ni    i   (    (   R   R   R   R  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_count_impla  s
    (   R   (   R   R   R   R   R<  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt
   list_count^  s    	c      	   C` s   t  |  | | j d | d  } t  |  | | j d | d  } | j } | j } | j | |  } | j |  | | _ t j | |  \ }	 | j |	 j  }
 |  j	 | |
 | j
 | j
  }
 | j | j |	 j |  |
 d t Wd  QX| S(   Ni   i    RT   (   Rc   R   R(   R;   R   R   R   R6   R   R  R"   Rr   Rq   (   R   R   R   R   R   R   R   t	   dest_sizeR   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR  j  s      			+s   list.extendc         C` sU   t  | j d t j  r6 t |  | | |  |  j   Sd   } |  j | | | |  S(   Ni   c         S` s(   |  j  } x | D] } | |  q Wd  S(   N(   t   append(   R   R   t   methR$  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_extend  s    	(   R   R   R   t   ListR  R   R   (   R   R   R   R   RA  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRA  {  s
    
	s
   list.indexc         C` s   d   } |  j  | | | |  S(   Nc         S` sA   x. t  t |    D] } |  | | k r | Sq Wt d   d  S(   Ns   value not in list(   R*  R   R   (   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_index_impl  s    (   R   (   R   R   R   R   RC  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt
   list_index  s    	c         C` s   d   } |  j  | | | |  S(   Nc         S` s~   t  |   } | d k  r: | | 7} | d k  r: d } q: n  x1 t | t  |    D] } |  | | k rP | SqP Wt d   d  S(   Ni    s   value not in list(   R   R*  R   (   R   R   Rz   R-  R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRC    s    
(   R   (   R   R   R   R   RC  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRD    s    	c         C` s   d   } |  j  | | | |  S(   Nc         S` s   t  |   } | d k  r: | | 7} | d k  r: d } q: n  | d k  rS | | 7} n  | | k rh | } n  x+ t | |  D] } |  | | k rx | Sqx Wt d   d  S(   Ni    s   value not in list(   R   R*  R   (   R   R   Rz   R{   R-  R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRC    s    
	(   R   (   R   R   R   R   RC  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRD    s    	s   list.insertc   
      C` s   t  |  | | j d | d  } | j | d  } | j |  } | d } | j } t j | j d  } | j | |  }	 | j	 |	  | j
 | j | |  | | j | |   | j | | d t |  j   S(   Ni    i   i   RT   (   Rc   R   R?   RK   R(   R   R9   R:   R;   R   R   Rv   Rr   Rq   R   (
   R   R   R   R   R   R   R   R-  R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_insert  s     
	+s   list.popc         C` s   t  |  | | j d | d  } | j } t j |  | | t d f  | j | t j | j	 d   } | j
 |  } | j |  | j |  | j |  t |  | | j |  S(   Ni    s   pop from empty listi   (   Rc   R   R(   R   t
   guard_zeroRO   Rv   R   R9   R:   R6   RV   Ro   R   R   R   (   R   R   R   R   R   R-  R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_pop  s     	!c   	      C` s   t  |  | | j d | d  } | j | d  } | j } t j |  | | t d f  | j | d  | j |  } t	 j
 | j d  } | j | t	 j
 | j d   } | j | | j | |  | j | |   | j |  t |  | | j |  S(   Ni    i   s   pop from empty lists   pop index out of range(   Rc   R   R?   R(   R   RF  RO   RQ   R6   R   R9   R:   Rv   R   R;   R   R   R   (	   R   R   R   R   R   R/   R-  R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyRG    s     	!+s   list.removec         C` s   d   } |  j  | | | |  S(   Nc         S` sN   x; t  t |    D]' } |  | | k r |  j |  d  Sq Wt d   d  S(   Ns   list.remove(x): x not in list(   R*  R   R   R   (   R   R   R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_remove_impl  s
    (   R   (   R   R   R   R   RH  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_remove  s    	s   list.reversec         C` s   d   } |  j  | | | |  S(   Nc         S` sP   xI t  d t |   d  D]. } | d } |  | |  | |  | <|  | <q Wd  S(   Ni    i   i   (   R*  R   (   R   R  R  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_reverse_impl  s     (   R   (   R   R   R   R   RJ  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_reverse  s    	c          C` sf   t    }  |  d r d Sd   } t j   } t j d |  } | j |  d <| j |  d <t |  d <d S(   sT   
    Load quicksort lazily, to avoid circular imports accross the jit() global.
    t   _sorting_initNc         S` s
   |  | k S(   N(    (   R  R  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   gt  s    t   ltt   run_default_sortt   run_reversed_sort(   t   globalsR   t   make_jit_quicksortt   run_quicksortRq   (   t   gRM  t   default_sortt   reversed_sort(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt
   load_sorts  s    	
	s	   list.sortc         C` ss   t    t |  d k rT t j | j | j t j f  } t |  t	 j
 f } n  d   } |  j | | | |  S(   Ni   c         S` s!   | r t  |   n
 t |   d  S(   N(   RP  RO  (   R   t   reverse(    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_sort_impl'  s    (   RW  R   R   t	   signatureR   R   R   t   booleant   tupleR   Rl   R   (   R   R   R   R   RY  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt	   list_sort  s    "	c         C` sl   t  |  d k rM t j | j | j t j f  } t |  t j	 f } n  d   } |  j
 | | | |  S(   Ni   c         S` s    t  |   } | j d |  | S(   NRX  (   R9  t   sort(   t   itRX  R   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   sorted_impl6  s    (   R   R   RZ  R   R   R   R[  R\  R   Rl   R   (   R   R   R   R   R`  (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyR`  /  s
    "	c         C` s   | j  | j  k s t  | S(   N(   R"   R  (   R   R   t   fromtyt   totyRU   (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   list_to_listA  s    (e   Rb   t
   __future__R    R   R   t   mathR  t   llvmliteR   t   numbaR   R   R   t   numba.targets.imputilsR   R   R	   R
   R   R   R   t   numba.utilsR   t    R   R   R!   R%   t   objectR&   R]   Rc   R   R   R9  t   IterableTypeR   R   RB  R   R   t   ListItert   BORROWEDR   R6   t   IntegerR   Rr   t   AnyR   t	   SliceTypeR   t   delitemR  R  t   containst   SequenceR  t   boolR
  R;   R  t   iaddR  R  R  t   imulR  t   is_R  R  R'  t   neR)  t   leR/  RN  R1  t   geR3  RM  R5  R7  R8  R;  R=  R  RA  RD  RE  RG  RI  RK  RG   RL  RW  t   BooleanR]  t   sortedR`  Rc  (    (    (    s4   lib/python2.7/site-packages/numba/targets/listobj.pyt   <module>   s   4		X (	

$*$*=$	$#$
$$$$$$$$$$$!!	!!!!	$$