
\K]c           @   s  d  Z  d d l Z d d l Z d d l m Z d d l m Z d d l m Z d d l 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 d d
 l m Z m Z m Z m Z d d l 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# m$ Z$ m% Z% e j& Z' e j& Z( e j& Z) e j* Z+ e j, Z- e j& Z. e j/ e j0  Z1 e j2 Z3 e e  d e j4 f d     Y Z5 e e  e e  d e j4 f d     Y  Z6 d e f d     YZ7 d   Z8 e d    Z9 e d    Z: e d    Z; e e j< e j e j  d    Z= d   Z> d   Z? d   Z@ e d    ZA e d    ZB e e@  d    ZC e eD  d     ZE e d!    ZF e d"    ZG e e j d#  d$    ZH e d%    ZI e d&    ZJ e d'    ZK e d(    ZL d)   ZM e e jN  d*    ZO e d+    ZP e e jQ  d,    ZR e e j d-  d d.   ZS e d/    ZT e e jU  d0    ZV e e jW  d1    ZX e e j d2  d3    ZY e e j d4  d5    ZZ e e j d6  d7    Z[ e e j d8  d9    Z\ e e j d:  d;    Z] e e j d<  d=    Z^ e e j d>  d?    Z_ e e j d@  d d dA   Za e dB    Zb dC   Zc e e jd  dD    Ze e e jf  dE    Zg e e jh  dF    Zi e e jj  dG    Zk e e jl  dH    Zm e e jn  dI    Zo e dJ e j  dK    Zp e dL e j  e e jq  dM     Zr d S(N   s8   
Compiler-side implementation of the Numba  typed-list.
iN(   t   IntEnum(   t   ir(   t   cgutils(   t
   _helperlib(   t   overloadt   overload_methodt   register_jitablet	   intrinsict   register_modelt   modelst   lower_builtin(   t   iternext_impl(   t   types(   t   ListTypet   ListTypeIterableTypet   ListTypeIteratorTypet   Type(   t   impl_ret_borrowedt   RefType(   t   TypingError(   t   typing(   t	   _as_bytest   _castt   _nonoptionalt   _get_incref_decreft   _container_get_datat   _container_get_meminfot	   ListModelc           B   s   e  Z d    Z RS(   c         C   s;   d t  f d t j f g } t t |   j | | |  d  S(   Nt   meminfot   data(   t   _meminfo_listptrR   t   voidptrt   superR   t   __init__(   t   selft   dmmt   fe_typet   members(    (    s/   lib/python2.7/site-packages/numba/listobject.pyR!   9   s    	(   t   __name__t
   __module__R!   (    (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR   7   s   t   ListIterModelc           B   s   e  Z d    Z RS(   c         C   s>   d | j  f d t j f g } t t |   j | | |  d  S(   Nt   parentt   state(   R)   R   R   R    R(   R!   (   R"   R#   R$   R%   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR!   D   s    (   R&   R'   R!   (    (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR(   A   s   t
   ListStatusc           B   s,   e  Z d  Z d Z d Z d Z d Z d Z RS(   s+   Status code for other list operations.
    i    iiii(   i    (   R&   R'   t   __doc__t   LIST_OKt   LIST_ERR_INDEXt   LIST_ERR_NO_MEMORYt   LIST_ERR_MUTATEDt   LIST_ERR_ITER_EXHAUSTED(    (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR+   L   s   c         C   s`   | j  t t j   } | j | j d | |  d t  |  j j | t	 | f  Wd QXd S(   s?   Raise an internal error depending on the value of *status*
    s   !=t   likelyN(
   t   typet   intR+   R-   t   if_thent   icmp_signedt   Truet	   call_convt   return_user_exct   RuntimeError(   t   contextt   buildert   statust   msgt	   ok_status(    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   _raise_if_errorV   s    
c         C   s@   t  | t j  s! t d   n  d   } t |  } | | f S(   s*   Returns the MemInfoPointer of a list.
    s"   expected *lstobj* to be a ListTypec         S   sV   | j  \ } | \ } |  j j | | |  t j |  } | |  | d | } | j S(   Nt   value(   t   argst   nrtt   increfR   t   create_struct_proxyR   (   R;   R<   t   sigRB   t   tlt   lt   ctort   lstruct(    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   codegenf   s    	(   t
   isinstanceR   R   R   R   (   t	   typingctxt   lstobjRK   RF   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   _as_meminfo_   s
    	
c            ss   | t  k r t d   n  | j   t   t  sK t d j t    n    f d   }   | |  } | | f S(   s*   Recreate a list from a MemInfoPointer
    s#   expected a MemInfoPointer for list.s   expected a {}c            s   | j  \ } } | j } | \ } } t j |  }	 |	 |  |  }
 |  j j | |  } | j | t j    } | j	 |  |
 _
 | |
 _ t |  |   |
 j    S(   N(   RB   t   instance_typeR   RE   RC   t   meminfo_datat   bitcastt   ll_list_typet
   as_pointert   loadR   R   R   t	   _getvalue(   R;   R<   RF   RB   t   tmit   tdreft   tdt   mit   _RI   t   dstructt   data_pointer(   t   listtype(    s/   lib/python2.7/site-packages/numba/listobject.pyRK   ~   s    		(   R   R   RP   RL   R   t   format(   RM   RZ   t   listtyperefRK   RF   (    (   R^   s/   lib/python2.7/site-packages/numba/listobject.pyt   _from_meminfot   s    	c            s1   t  j } | |    }   f d   } | | f S(   s%   Wrap numba_list_set_method_table
    c            sA  t  j t t g  } t  j t  j   t | j   g  } t  j | j | d d } | d } t	 j
 | | d t } t	 j | | d d  }	 t	 j | | d d  }
 |  j   j } | j   r't |  | j | d  \ } } | j | j | |	 j j  |	  | j | j | |
 j j  |
  n  | j | | | g  d  S(   Nt   namet   numba_list_set_method_tablei    t   zfilli   t   list(   R   t   LiteralStructTypet   ll_voidptr_typet   FunctionTypet   VoidTypeRS   RT   t   Functiont   moduleR   t   alloca_onceR7   t   gep_inboundst   data_model_managerRP   t   contains_nrt_meminfoR   t   storeRR   R3   t   pointeet   call(   R;   R<   RF   RB   t   vtabletyt   setmethod_fntyt   setmethod_fnt   dpt   vtablet   item_incref_ptrt   item_decref_ptrt   dm_itemt   item_increft   item_decref(   t   itemty(    s/   lib/python2.7/site-packages/numba/listobject.pyRK      s2    		

(   R   t   void(   RM   t   lpR}   t   restyRF   RK   (    (   R}   s/   lib/python2.7/site-packages/numba/listobject.pyt   _list_set_method_table   s    	%c         C   s}   t  |  | | j d | d  } t  |  | | j d | d  } | j | t j  } | j | t j  } | j d | |  S(   Ni    i   s   ==(   R   RB   t   ptrtointR   t   intp_tR6   (   R;   R<   RF   RB   t	   a_meminfot	   b_meminfot   mat   mb(    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   list_is   s
      c         C   sJ   t  j t  j   t g  } | j j | d d } | j | | g  d S(   s   Call numba_list_free(ptr)
    Rb   t   numba_list_freeN(   R   Rh   Ri   RS   Rk   t   get_or_insert_functionRr   (   R;   R<   t   ptrt   fntyt   free(    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   _call_list_free   s
    	c   
      C   s   |  j  t j  } |  j  t j  } t j t j   | | | g  } d } | j | d | } | j r d | _	 t j
 | j    } | j | j d t j    } | j |  }	 t |  | |	  | j   n  | S(   s   Define the dtor for list
    t   _numba_list_dtorRb   t   linkonce_odri    (   t   get_value_typeR   R   t   uintpR   Rh   Ri   R   t   is_declarationt   linkaget	   IRBuildert   append_basic_blockRR   RB   RS   RT   RU   R   t   ret_void(
   R;   Rk   t	   llvoidptrt   llsizeR   t   fnamet   fnR<   R   RH   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt	   _imp_dtor   s    			c         C   s
   t   d S(   s   Construct a new list. (Not implemented in the interpreter yet)

    Parameters
    ----------
    item: TypeRef
        Item type of the new list.
    N(   t   NotImplementedError(   t   item(    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   new_list   s    c            s:   t  j | j      f d   }   | |  } | | f S(   s   Make a list struct with the given *ptr*

    Parameters
    ----------
    itemty: Type
        Type of the item.
    ptr : llvm pointer value
        Points to the list object.
    c            s   | \ } } t  j    } | |  |  } | | _ |  j |  j t j   } t |  | j  }	 |  j	 j
 | |  j t j |  |	  }
 |  j	 j | |
  } | j | t j    } | j | |  |
 | _ | j   S(   N(   R   RE   R   t   get_abi_sizeofR   R   R   R   Rk   RC   t   meminfo_alloc_dtort   get_constantR   RQ   RR   RS   RT   Rp   R   RV   (   R;   R<   t	   signatureRB   R[   R   RI   RJ   t
   alloc_sizet   dtorR   R]   (   t   list_ty(    s/   lib/python2.7/site-packages/numba/listobject.pyRK     s     				(   R   R   RP   (   RM   R}   R   RK   RF   (    (   R   s/   lib/python2.7/site-packages/numba/listobject.pyt
   _make_list   s    c            s.   t  j } |    }   f d   } | | f S(   s   Wrap numba_list_new.

    Allocate a new list object with zero capacity.

    Parameters
    ----------
    itemty: Type
        Type of the items

    c            s   t  j t t j   t t g  } | j j | d d } |  j   j	  } |  j
 |  } t j | t d t } | j | | t |  t d  g  }	 t |  | |	 d d | j |  }
 |
 S(   NRb   t   numba_list_newRd   i    R>   s   Failed to allocate list(   R   Rh   t	   ll_statusRS   RT   t
   ll_ssize_tRk   R   t   get_data_typeRP   R   R   Rl   R7   Rr   R@   RU   (   R;   R<   RF   RB   R   R   t   ll_itemt   sz_itemt   reflpR=   R   (   R}   (    s/   lib/python2.7/site-packages/numba/listobject.pyRK   7  s    (   R   R   (   RM   R}   R   RF   RK   (    (   R}   s/   lib/python2.7/site-packages/numba/listobject.pyt	   _list_new(  s    	c            s7   t  |  t  s t d   n  |      f d   } | S(   sE   Creates a new list with *item* as the type
    of the list item.
    s#   expecting *item* to be a numba Typec            s,   t     } t |    t   |  } | S(   N(   R   R   R   (   R   R   RH   (   R}   (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impY  s    (   RL   R   t	   TypeError(   R   R   (    (   R}   s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_new_listO  s
    c         C   s#   t  |  t j  r d   } | Sd S(   s   len(list)
    c         S   s
   t  |   S(   N(   t   _list_length(   RH   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   implg  s    N(   RL   R   R   (   RH   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_lenb  s    	c         C   s(   t  j } | |  } d   } | | f S(   s@   Wrap numba_list_length

    Returns the length of the list.
    c   
      S   sp   t  j t t g  } | j j | d d } | \ } | j \ } t |  | | |  } | j | | g  }	 |	 S(   NRb   t   numba_list_length(	   R   Rh   R   RS   Rk   R   RB   R   Rr   (
   R;   R<   RF   RB   R   R   RH   RG   R   t   n(    (    s/   lib/python2.7/site-packages/numba/listobject.pyRK   v  s    	(   R   t   intp(   RM   RH   R   RF   RK   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR   m  s    		c         C   s.   t  j } | | | j  } d   } | | f S(   s   Wrap numba_list_append
    c         S   s   t  j t t t g  } | \ } } | j \ } } | j j | d d }	 |  j | }
 |
 j	 | |  } t
 j | |  } t |  | | |  } | j |	 | t | |  g  } | S(   NRb   t   numba_list_append(   R   Rh   R   RS   t   ll_bytesRB   Rk   R   Rn   t   as_dataR   t   alloca_once_valueR   Rr   R   (   R;   R<   RF   RB   R   RH   R   RG   t   titemR   Rz   t	   data_itemt   ptr_itemR   R=   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyRK     s    (   R   t   int32t	   item_type(   RM   RH   R   R   RF   RK   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   _list_append  s    		t   appendc            s|   t  |  t j  s d  S|  j     f d   } |  j   r> | S|  j |  }  |  j   t j t j |     } | | f Sd  S(   Nc            s_   t  |    } t |  |  } | t j k r1 d  S| t j k rO t d   n t d   d  S(   Ns(   Unable to allocate memory to append items   list.append failed unexpectedly(   R   R   R+   R-   R/   t   MemoryErrorR:   (   RH   R   t
   casteditemR=   (   R}   (    s/   lib/python2.7/site-packages/numba/listobject.pyR     s    (	   RL   R   R   R   t
   is_preciset   refineR   R   R~   (   RH   R   R   RF   (    (   R}   s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_append  s    	
	c         C   sT   | d k  r t  |   | } n  d | k o< t  |   k  n sP t d   n  | S(   st   Handle index.

    If the index is negative, convert it. If the index is out of range, raise
    an IndexError.
    i    s   list index out of range(   t   lent
   IndexError(   RH   t   index(    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   handle_index  s
    "c         C   sH  t  |   d k r t d  St  |   | j | j | j f \ } } } } | d k r | j d k  rw t | | d  n t | |  } | d k  r t | | d  n t | |  } n~ | d k  r)| j d k  r t | | d  n t | d |  } | d k  rt | | d  n t | |  } n t d   t | | | j  S(   s   Handle slice.

    Convert a slice object for a given list into a range object that can be
    used to index the list. Many subtle caveats here, especially if the step is
    negative.
    i    ii   s   slice step cannot be zero(   R   t   ranget   startt   stopt   stept   maxt   mint
   ValueError(   RH   t   st   llt   sat   sot   seR   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   handle_slice  s    
-1151c         C   s   t  |  | | d  S(   Nt   getitem(   t   _list_getitem_pop_helper(   RM   RH   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   _list_getitem  s    c         C   s   t  |  | | d  S(   Nt   pop(   R   (   RM   RH   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt	   _list_pop  s    c            sa     d k s t   t j t j t j | j  g    | |  }    f d   } | | f S(   s  Wrap numba_list_getitem and numba_list_pop

    Returns 2-tuple of (intp, ?item_type)

    This is a helper that is parametrized on the type of operation, which can
    be either 'pop' or 'getitem'. This is because, signature wise, getitem and
    pop and are the same.
    R   R   c            s  t  j t t t t g  } | j \ } } | \ } } | j j | d d j	    }	 |  j
 | j }
 |  j | j  } t j | |  } t |  | | |  } | j |	 | | t | |  g  } | j d | | j t t j    } |  j | | j  } t j | |  } | j |  X |
 j | |  } |  j j | | j |  |  j | | j |  } | j | |  Wd  QX| j |  } |  j  |  | | g  S(   NRb   s   numba_list_{}s   >=(!   R   Rh   R   RS   R   R   RB   Rk   R   R_   Rn   R   R   R   Rl   R   Rr   R   R6   R3   R4   R+   R-   t   make_optional_noneR   R5   t   load_from_data_pointerRC   RD   t   make_optional_valueRp   RU   t
   make_tuple(   R;   R<   RF   RB   R   RG   t   tindexRH   R   R   Rz   R   R   R   R=   t   foundt   outt   poutR   t   loaded(   t   opR   (    s/   lib/python2.7/site-packages/numba/listobject.pyRK     s4    '(   R   R   (   t   AssertionErrorR   t   TupleR   t   OptionalR   (   RM   RH   R   R   RF   RK   (    (   R   R   s/   lib/python2.7/site-packages/numba/listobject.pyR     s
    	$&c            s|   t  |  t j  s d  St   |  j  | t j k rG   f d   } | St  | t j  rl  f d   } | St d   d  S(   Nc            s\   t  |  |  } t |    } t |  |  \ } } | t j k rL t |  St d   d  S(   Ns"   internal list error during getitem(   R   R   R   R+   R-   R   R   (   RH   R   t   castedindexR=   R   (   t   indexty(    s/   lib/python2.7/site-packages/numba/listobject.pyt   integer_impl6  s    
c            s;   t     } x( t |  |  D] } | j |  |  q W| S(   N(   R   R   R   (   RH   R   t   newlt   i(   R}   (    s/   lib/python2.7/site-packages/numba/listobject.pyt
   slice_implB  s    s.   list indices must be signed integers or slices(   RL   R   R   t   INDEXTYR   t   signed_domaint	   SliceTypeR   (   RH   R   R   R   (    (   R   R}   s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_getitem-  s    		c         C   s.   t  j } | | | |  } d   } | | f S(   s   Wrap numba_list_setitem
    c         S   s   t  j t t t t g  } | \ } } } | j \ } }	 }
 | j j | d d } |  j	 |
 } | j
 | |  } t j | |  } t |  | | |  } | j | | | t | |  g  } | S(   NRb   t   numba_list_setitem(   R   Rh   R   RS   R   R   RB   Rk   R   Rn   R   R   R   R   Rr   R   (   R;   R<   RF   RB   R   RH   R   R   RG   R   R   R   Rz   R   R   R   R=   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyRK   U  s"    	(   R   R   (   RM   RH   R   R   R   RF   RK   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   _list_setitemN  s    		c            s   t  |  t j  s d  St   |  j  | t j k rJ    f d   } | St  | t j  r t  | t j  s} t d   n  d   } | St d   d  S(   Nc            sb   t  |  |  } t |    } t |   } t |  | |  } | t j k rR d  St d   d  S(   Ns#   internal list error during settitem(   R   R   R   R+   R-   R   (   RH   R   R   R   R   R=   (   R   R}   (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_integerz  s    sF   can only assign an iterable when using a slice with assignment/setitemc   	      S   s  |  | k r | j    } n  t |  |  } | j d k rt |  t |  k r~ x* t | |  D] \ } } | |  | <qa Wn  t |  t |  k r0x1 t | | t |    D] \ } } | |  | <q Wt | j | j t |  t |   } x: t | | t |   D] \ } } |  j | |  qWn  t |  t |  k  rt | j | j t |   } x' t | |  D] \ } } | |  | <qwW|  | j t |  | j 5qnQ t |  t |  k rt	 d   n  x' t | |  D] \ } } | |  | <qWd  S(   Ni   s/   length mismatch for extended slice and sequence(
   t   copyR   R   R   t   zipR   R   t   insertR   R   (	   RH   R   R   t   slice_rangeR   t   jt   insert_ranget   kt   replace_range(    (    s/   lib/python2.7/site-packages/numba/listobject.pyt
   impl_slice  s0    &	 &	 s.   list indices must be signed integers or slices(	   RL   R   R   R   R   R   R   t   IterableTypeR   (   RH   R   R   R   R  (    (   R   R}   s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_setitemq  s    	
	)R   c            sr   t  |  t j  s d  St   t  | t  sL | t j k sL t  | t j  rb d   f d  } | St d   d  S(   Nic            s}   t  |   d k r! t d   n  t |  |  } t |    } t |  |  \ } } | t j k rm t |  St d   d  S(   Ni    s   pop from empty lists   internal list error during pop(	   R   R   R   R   R   R+   R-   R   R   (   RH   R   R   R=   R   (   R   (    s/   lib/python2.7/site-packages/numba/listobject.pyR     s    
s)   argument for pop must be a signed integer(   RL   R   R   R   R4   R   t   OmittedR   (   RH   R   R   (    (   R   s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_pop  s    
c         C   s1   t  j } | | | | |  } d   } | | f S(   s!   Wrap numba_list_delete_slice
    c         S   s   t  j t t t t t g  } | \ } } } } | j \ }	 }
 } } | j j | d d } t |  | |	 |  } | j	 | | | | | g  } | S(   NRb   t   numba_list_delete_slice(
   R   Rh   R   RS   R   RB   Rk   R   R   Rr   (   R;   R<   RF   RB   R   RH   R   R   R   RG   t   tstartt   tstopt   tstepR   R   R=   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyRK     s    	(   R   R   (   RM   RH   R   R   R   R   RF   RK   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   _list_delete_slice  s    		c         C   sa   t  |  t j  s d  S| t j k r2 d   } | St  | t j  rQ d   } | St d   d  S(   Nc         S   s   |  j  |  d  S(   N(   R   (   RH   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR     s    c         S   s/   t  |  |  } t |  | j | j | j  d  S(   N(   R   R
  R   R   R   (   RH   R   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR     s
    s.   list indices must be signed integers or slices(   RL   R   R   R   R   R   (   RH   R   R   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_delitem  s    		c            s2   t  |  t j  s d  S|  j     f d   } | S(   Nc            s8   t  |    } x" |  D] } | | k r t Sq Wt Sd  S(   N(   R   R7   t   False(   RH   R   R   R   (   R}   (    s/   lib/python2.7/site-packages/numba/listobject.pyR     s
    (   RL   R   R   R   (   RH   R   R   (    (   R}   s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_contains  s
    	t   countc            s2   t  |  t j  s d  S|  j     f d   } | S(   Nc            sC   t  |    } d } x' |  D] } | | k r | d 7} q q W| S(   Ni    i   (   R   (   RH   R   R   t   totalR   (   R}   (    s/   lib/python2.7/site-packages/numba/listobject.pyR   %  s    (   RL   R   R   R   (   RH   R   R   (    (   R}   s/   lib/python2.7/site-packages/numba/listobject.pyt
   impl_count  s
    	t   extendc            s   t  |  t j  s d  St    t j  s7 t d   n    f d   } |  j   rY |   St   d  rt   j } n' t   d  r   j } n t d   |  j	 |  }  t
 j t j |     } | |   f Sd  S(   Ns    extend argument must be iterablec             s0   t    t j  r d   }  |  Sd   }  |  Sd  S(   Nc         S   s=   |  | k r | j    } n  x | D] } |  j |  q" Wd  S(   N(   R   R   (   RH   t   iterableR   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR   9  s    c         S   s"   x | D] } |  j  |  q Wd  S(   N(   R   (   RH   R  R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR   B  s    (   RL   R   R   (   R   (   R  (    s/   lib/python2.7/site-packages/numba/listobject.pyt   select_impl7  s
    		t   dtypeR   sH   unable to extend list, iterable is missing either *dtype* or *item_type*(   RL   R   R   R  R   R   t   hasattrR  R   R   R   R   R~   (   RH   R  R  t   tyRF   (    (   R  s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_extend0  s    R   c         C   s   t  |  t j  s d  S| t j k r~ d   } |  j   r> | S|  j |  }  |  j } t j t j	 |  t
 |  } | | f Sn t d   d  S(   Nc         S   s   | t  |   k s$ t  |   d k r4 |  j |  n | d k  r\ t t  |   | d  } n  |  j |  d  t  |   d } x, | | k r |  | d |  | <| d 8} q W| |  | <d  S(   Ni    i   (   R   R   R   (   RH   R   R   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR   a  s    $s+   list insert indices must be signed integers(   RL   R   R   R   R   R   R   R   R   R~   R   R   (   RH   R   R   R   R}   RF   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_insert[  s    		t   removec            s2   t  |  t j  s d  S|  j     f d   } | S(   Nc            sY   t  |    } xC t |   D]) \ } } | | k r |  j |  d  Sq Wt d   d  S(   Ns   list.remove(x): x not in list(   R   t	   enumerateR   R   (   RH   R   R   R   R   (   R}   (    s/   lib/python2.7/site-packages/numba/listobject.pyR     s    (   RL   R   R   R   (   RH   R   R   (    (   R}   s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_remove  s
    		t   clearc         C   s#   t  |  t j  s d  Sd   } | S(   Nc         S   s!   x t  |   r |  j   q Wd  S(   N(   R   R   (   RH   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR     s    (   RL   R   R   (   RH   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt
   impl_clear  s    	t   reversec         C   s#   t  |  t j  s d  Sd   } | S(   Nc         S   s^   d } t  |   d } xA | | k  rY |  | |  | |  | <|  | <| d 7} | d 8} q Wd  S(   Ni    i   (   R   (   RH   t   frontt   back(    (    s/   lib/python2.7/site-packages/numba/listobject.pyR     s    
(   RL   R   R   (   RH   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_reverse  s    	R   c         C   s#   t  |  t j  r d   } | Sd  S(   Nc         S   s   |  S(   N(    (   RH   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyR     s    (   RL   R   R   (   RH   R   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt	   impl_copy  s    	R   c            s[   t  |  t j  s d  S|  j   d   } | | d  | | d  d  d    f d  } | S(   Nc         S   sR   |  d  k p3 |  t j k p3 t |  t j t j f  sN t d j |    n  d  S(   Ns.   {} argument for index must be a signed integer(   t   NoneR   R   RL   R  t   NoneTypeR   R_   (   t   argRb   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt	   check_arg  s
    	R   t   endc            sY   t  |    } xC t |  t | | d   D] } |  | | k r+ | Sq+ Wt d   d  S(   Ni   s   item not in list(   R   R   t   sliceR   (   RH   R   R   R'  R   R   (   R}   (    s/   lib/python2.7/site-packages/numba/listobject.pyR     s
    "(   RL   R   R   R   R#  (   RH   R   R   R'  R&  R   (    (   R}   s/   lib/python2.7/site-packages/numba/listobject.pyt
   impl_index  s    		c         C   s   t  |   t  |  k r8 t  |   t  |  k  r4 d Sd SxS t t  |    D]; } |  | | | } } | | k rK | | k  r d Sd SqK Wd Sd S(   s   Oldschool (python 2.x) cmp.

       if this < other return -1
       if this = other return 0
       if this > other return 1
    ii   i    N(   R   R   (   t   thist   otherR   t	   this_itemt
   other_item(    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   compare  s     c            sJ   t  |  t j  s d  St  | t j  s7 t d   n    f d   } | S(   Ns!   list can only be compared to listc            s   t  |  |    k S(   N(   R.  (   R*  R+  (   t   accepted(    s/   lib/python2.7/site-packages/numba/listobject.pyR     s    (   RL   R   R   R   (   R*  R+  R/  R   (    (   R/  s/   lib/python2.7/site-packages/numba/listobject.pyt   compare_helper  s    c         C   s   t  |  | d  S(   Ni    (   i    (   R0  (   R*  R+  (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt
   impl_equal  s    c         C   s   t  |  | d  S(   Nii   (   ii   (   R0  (   R*  R+  (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_not_equal  s    c         C   s   t  |  | d  S(   Ni(   i(   R0  (   R*  R+  (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_less_than  s    c         C   s   t  |  | d  S(   Nii    (   ii    (   R0  (   R*  R+  (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_less_than_or_equal  s    c         C   s   t  |  | d  S(   Ni   (   i   (   R0  (   R*  R+  (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_greater_than  s    c         C   s   t  |  | d  S(   Ni    i   (   i    i   (   R0  (   R*  R+  (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_greater_than_or_equal  s    t   getiterc         C   s6  | j  \ } | \ } t j |  } |  j | | j  } t j t j   t t	 g  } | j
 j | d d }	 t j t j  }
 |
 t j d  } t j t j d  |    } t j | | d t } t | |  | _ | | _ t |  | | j | d  } | j |	 | j | g  t |  | | j | j    S(   s   Implement iter(List).
    Rb   t   numba_list_itert   list_iter_sizeofi   Rd   i    (   RB   R   R   t   make_helpert   iterator_typeR   Rh   Ri   t   ll_listiter_typeRS   Rk   R   t   ctypest	   CFUNCTYPEt   c_size_tR   t	   c_helperst	   ArrayTypet   IntTypeR   Rl   R7   R   R*   R)   R   Rr   R   t   return_typeRV   (   R;   R<   RF   RB   RG   RH   t
   iterabletyt   itR   R   t   protot   listiter_sizeoft
   state_typet   pstateRv   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_list_getiter  s*    			t   iternextc         C   s  | j  d } |  j | | | d  } t j t t t j   g  } | j j	 | d d } t
 j | t  }	 | j | | j |	 f  }
 |
 j t t j   } | j d |
 |  } | j | d t  |  j j | t d  Wd  QX|
 j t t j   } | j d |
 |  } | j |  | j | d t  | j j } |  j | } | j | j |	  | j    j    } | j! | |  } t" | j# t$  r| j% |  n t& d j' | j#    Wd  QXd  S(	   Ni    Rb   t   numba_list_iter_nexts   ==R2   s!   list was mutated during iterations   unknown type: {}(   s!   list was mutated during iteration((   RB   R:  R   Rh   R   R<  R   RT   Rk   R   R   Rl   Rr   R*   R3   R4   R+   R0   R6   R5   R  R8   R9   R:   R-   t	   set_validR7   R)   R   Rn   RR   RU   R   R   RL   R  R   t   yield_R   R_   (   R;   R<   RF   RB   t   resultt	   iter_typeRE  t   iternext_fntyRK  t   item_raw_ptrR=   t   mutated_statust
   is_mutatedR?   t   is_validt   item_tyRz   t   item_ptrR   (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   impl_iterator_iternext4  s8    			(s   R,   R=  t   operatort   enumR    t   llvmliteR   t   numbaR   R   t   numba.extendingR   R   R   R   R   R	   R
   t   numba.targets.imputilsR   R   t   numba.typesR   R   R   R   R   R   t   numba.errorsR   R   t   numba.typedobjectutilsR   R   R   R   R   R   t	   voidptr_tRS   R<  Rg   t   int32_tR   R   R   R   t   MemInfoPointerR   R   R   R   t   StructModelR   R(   R+   R@   RO   Ra   R   t   is_R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   setitemR  R  R
  t   delitemR  t   containsR  R  R  R  R  R  R!  R"  R#  R)  R.  R0  t   eqR1  t   neR2  t   ltR3  t   leR4  t   gtR5  t   geR6  RJ  t   BORROWEDRX  (    (    (    s/   lib/python2.7/site-packages/numba/listobject.pyt   <module>   s   4	".											
		#/$				)'#	6!#I +*		"