U
    ,d                     @   s  d Z ddlZddlZddlmZ ddlmZ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mZ ddlmZ ddlmZ dd	lmZ dd
lmZ dd Zdd ZG dd deZ G dd de Z!G dd de Z"G dd de Z#dd Z$ee%ej&dd Z'ee%dd Z'ee(ej)dd Z*edej)dd  Z+ed!ej,eej-d"d# Z.eej/ej)ej0d$d% Z1eej2ej)ej0ej3d&d' Z4eej/ej)ej5d(d) Z6eej2ej)ej5ej3d*d' Z4eej7ej)ej0d+d, Z8eej7ej)ej5d-d. Z9eej:ej;ej3d/d0 Z<ee=ej;d1d2 Z>eej?d3d4 Z@eejAej)ej)d5d6 ZBeejCej)ej)d7d8 ZDeejEej)ej0eejEej0ej)d9d: ZFeejGej)ej0d;d< ZHeejIej)ej)d=d> ZJeejKej)ej)d?d@ ZLeejMej)ej)dAdB ZNeejOej)ej)dCdD ZPeejQej)ej)dEdF ZReejSej)ej)dGdH ZTeejUej)ej)dIdJ ZVedKej)ej3dLdM ZWedNej)dOdP ZXedQej)dRdS ZYedTej)ej3dUdV ZZdWdX Z[edYej)ej&dZd[ Z\ed\ej)ej3d]d^ Z]ed\ej)ej3ej0d_d^ Z]ed\ej)ej3ej0ej0d`d^ Z]edaej)ej0ej3dbdc Z^eddej)dedf Z_eddej)ej0dgdf Z_edhej)ej3didj Z`edkej)dldm Zadndo ZUeb jcZdejbeUdpjcZeejbdqdqdrjcZfejbdqeUdqdsjcZgdtdu Zhdvdw Zieej)dxddzd{Zjeekdd|d}Zleej)ej)d~d ZmendZoeejpddd Zqeejpddd Zreejpddd Zseejpddd ZteejpddddZueejpddd ZveejpdxdddZweejpddd ZxejyjzZ{eejpdde{fddZ|eejpddd Z}eejpddd Z}eej7dd Z~eej2dd Zeej/dd Zee(dd Zeej:dd Zeejpejpdd ZdS )z'
Support for native homogeneous lists.
    N)ir)typestypingerrorscgutils)lower_builtin
lower_castiternext_implimpl_ret_borrowedimpl_ret_new_refimpl_ret_untrackedRefType)overload_methodoverload)cached_property)	quicksort)slicingliteral_unrollc                 C   sD   t |}| j||j}| | }|||}| j|||dS )zy
    Given a list value and type, get its payload structure (as a
    reference, so that mutations are seen by all).
    ref)	r   ListPayloadnrtZmeminfo_datameminfoget_data_type
as_pointerbitcastmake_data_helper)contextbuilder	list_typevaluepayload_typepayloadptrty r%   9/tmp/pip-unpacked-wheel-eu7e0c37/numba/cpython/listobj.pyget_list_payload   s
    
r'   c                 C   s   |  |j}| |S )z7
    Return the item size for the given list type.
    )r   dtypeget_abi_sizeof)r   r    Zlltyr%   r%   r&   get_itemsize"   s    r*   c                   @   s   e Zd Zedd Zejdd Zedd Zedd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )_ListPayloadMixinc                 C   s   | j jS N_payloadsizeselfr%   r%   r&   r/   ,   s    z_ListPayloadMixin.sizec                 C   s   || j _d S r,   r-   r1   r!   r%   r%   r&   r/   0   s    c                 C   s   | j jS r,   )r.   dirtyr0   r%   r%   r&   r3   4   s    z_ListPayloadMixin.dirtyc                 C   s   | j dS )Ndata)r.   Z_get_ptr_by_namer0   r%   r%   r&   r4   8   s    z_ListPayloadMixin.datac                 C   s   t | j| j|S r,   )r   Zgep_builderr4   r1   idxr%   r%   r&   _gep<   s    z_ListPayloadMixin._gepc                 C   s&   |  |}| j|}| j| j|S r,   )r8   r5   load
_datamodelZ	from_data)r1   r7   ptr	data_itemr%   r%   r&   getitem?   s    
z_ListPayloadMixin.getitemc                 C   s:   | j d|t|jd}| j || j}| j |||S )zp
        Fix negative indices by adding the size to them.  Positive
        indices are left untouched.
        <r   )r5   icmp_signedr   Constanttypeaddr/   select)r1   r7   Zis_negativeZwrapped_indexr%   r%   r&   	fix_indexD   s
    
z_ListPayloadMixin.fix_indexc                 C   s:   | j d|t|jd}| j d|| j}| j ||S )z<
        Return whether the index is out of bounds.
        r>   r   >=)r5   r?   r   r@   rA   r/   or_)r1   r7   	underflowoverflowr%   r%   r&   is_out_of_boundsN   s
    
z"_ListPayloadMixin.is_out_of_boundsc              	   C   s   | j }t||}t|jd}| j}| j d||}|j|dd |	|| W 5 Q R X | j d||}|j|dd |	|| W 5 Q R X |
|S )z/
        Clamp the index in [0, size].
        r   r>   FZlikelyrE   )r5   r   alloca_once_valuer   r@   rA   r/   r?   if_thenstorer9   )r1   r7   r   Zidxptrzeror/   rG   rH   r%   r%   r&   clamp_indexW   s    z_ListPayloadMixin.clamp_indexc              	   C   s<   | j j| |dd | jj| j t|f W 5 Q R X dS )z?
        Raise an error if the index is out of bounds.
        FrJ   N)r5   rL   rI   _context	call_convreturn_user_exc
IndexError)r1   r7   msgr%   r%   r&   guard_indexj   s
     z_ListPayloadMixin.guard_indexc                 C   s   t | j|| jS )zo
        Fix slice start and stop to be valid (inclusive and exclusive, resp)
        indexing bounds.
        )r   	fix_slicer5   r/   )r1   slicer%   r%   r&   rV   r   s    z_ListPayloadMixin.fix_slicec                 C   s   | j j| j| j| dS )zIncref an element valueN)rP   r   increfr5   r(   r1   valr%   r%   r&   incref_valuey   s    z_ListPayloadMixin.incref_valuec                 C   s   | j j| j| j| dS )zDecref an element valueN)rP   r   decrefr5   r(   rY   r%   r%   r&   decref_value}   s    z_ListPayloadMixin.decref_valueN)__name__
__module____qualname__propertyr/   setterr3   r4   r8   r=   rD   rI   rO   rU   rV   r[   r]   r%   r%   r%   r&   r+   *   s"   




	r+   c                   @   s   e Zd ZdZdd ZdS )ListPayloadAccessorzb
    A helper object to access the list attributes given the pointer to the
    payload type.
    c                 C   s^   || _ || _|| _|j|j | _t|}||	 }|
||}|j|||d}|| _d S )Nr   )rP   r5   _tydata_model_managerr(   r:   r   r   r   r   r   r   r.   )r1   r   r   r    Zpayload_ptrr"   r$   r#   r%   r%   r&   __init__   s    
zListPayloadAccessor.__init__N)r^   r_   r`   __doc__rf   r%   r%   r%   r&   rc      s   rc   c                   @   s   e Zd Zdd Zedd Zedd Zedd Zejd	d Zed
d Z	edd Z
dd Zdd Zd(ddZd)ddZdd Zedd Zdd Zdd Zedd  Zed!d" Zd#d$ Zd%d& Zd'S )*ListInstancec                 C   s@   || _ || _|| _||||| _t||| _|j|j | _	d S r,   )
rP   r5   rd   make_helper_listr*   	_itemsizere   r(   r:   )r1   r   r   r    list_valr%   r%   r&   rf      s    zListInstance.__init__c                 C   s   | j jS r,   )rd   r(   r0   r%   r%   r&   r(      s    zListInstance.dtypec                 C   s   t | j| j| j| jS r,   )r'   rP   r5   rd   rj   r0   r%   r%   r&   r.      s    zListInstance._payloadc                 C   s   | j jS r,   rj   parentr0   r%   r%   r&   rn      s    zListInstance.parentc                 C   s   || j _d S r,   rm   r2   r%   r%   r&   rn      s    c                 C   s
   | j  S r,   )rj   	_getvaluer0   r%   r%   r&   r!      s    zListInstance.valuec                 C   s   | j jS r,   )rj   r   r0   r%   r%   r&   r      s    zListInstance.meminfoc                 C   s    | j jr|rtjntj| j_d S r,   )rd   Z	reflectedr   true_bit	false_bitr.   r3   rY   r%   r%   r&   	set_dirty   s    zListInstance.set_dirtyc              	   C   s0   |  | | | || j||d dS )z)Remove the value at the location
           N)r]   r=   zfillr5   rB   rA   r6   r%   r%   r&   clear_value   s    zListInstance.clear_valueTc                 C   sX   |r|  | | | |}| j| j|}| j|| | d |rT| | d S )NT)	r]   r=   r8   r:   as_datar5   rM   rr   r[   )r1   r7   rZ   rX   decref_old_valuer;   r<   r%   r%   r&   setitem   s    

zListInstance.setitemc                 C   s:   |  |}| j| j|}| j|| |r6| | d S r,   )r8   r:   rv   r5   rM   r[   )r1   r7   rZ   rX   r;   r<   r%   r%   r&   inititem   s
    
zListInstance.inititemc                 C   sb   | j }| |}| |}| jtj}|||||||}t	|||t
dd dS )zjZero-fill the memory at index *start* to *stop*

        *stop* MUST not be smaller than *start*.
           r   N)r5   r8   rP   get_value_typer   intpsubptrtointr   memsetr   ZIntType)r1   startstopr   baseendZ	intaddr_tr/   r%   r%   r&   rt      s    


zListInstance.zfillc                 C   s  | tj}t|tr"t||}|t|}|	|}t
||}||8 }t|tj}	| |||d}
t||t||t||\}}|j|dd |tj|	 W 5 Q R X |j||	dd |jj|||
 d}|jt||dd\}}| |tj|	 W 5 Q R X |T ||
j_|tj|
j_||
j_t|d|
j_tj|
j_ |
!|
j"d| W 5 Q R X W 5 Q R X W 5 Q R X ||	|
fS )z
        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).
        NFrJ   T)r/   dtorr   )#r{   r   r|   
isinstanceintr   r@   r   r   r)   r*   r   rK   rp   muladd_with_overflowrL   rM   rq   r9   r   Z"meminfo_new_varsize_dtor_uncheckedget_dtorif_elseZis_nullrj   r   get_constant_nullpyobjectrn   r.   	allocatedr/   r3   rt   rA   )clsr   r   r    nitemsintp_tr"   payload_sizeitemsizeokr1   	allocsizeovfr   Zif_errorZif_okr%   r%   r&   allocate_ex   sF    




  
2zListInstance.allocate_exc              	   C   s   | j }| j}|j}tt tjg}t||d	| j
}|jsF|S d|_t| }|jd }t||| j|}|jj}tj||d|j|d|d&\}	}
||	}|j|| j
| W 5 Q R X |  |S )z,Define the destructor if not already definedz.dtor.list.{}Zlinkonce_odrr   rs   )r   r   stepr|   )rP   r5   moduler   FunctionTypeZVoidTyper   	voidptr_tZget_or_insert_functionformatr(   Zis_declarationlinkageZ	IRBuilderZappend_basic_blockargsrc   rd   r/   rA   for_range_slicer=   r   r\   Zret_void)r1   r   r   modZfntyfnZbase_ptrr#   r|   r7   _rZ   r%   r%   r&   define_dtor  s4    

   
zListInstance.define_dtorc                 C   s   |   }| j|tj}|S )zp"Get the element dtor function pointer as void pointer.

        It's safe to be called multiple times.
        )r   r5   r   r   r   )r1   r   Z
dtor_fnptrr%   r%   r&   r   1  s    zListInstance.get_dtorc              	   C   sH   |  ||||\}}|j||dd |j|td W 5 Q R X |S )z
        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.
        FrJ   )zcannot allocate list)r   rL   not_rQ   rR   MemoryError)r   r   r   r    r   r   r1   r%   r%   r&   allocate;  s    
zListInstance.allocatec                 C   s<   | |||d}||j _|tj|j _|j|||j |S )z
        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)	rj   r   r   r   r   rn   r   rX   r!   )r   r   r   r    r   r1   r%   r%   r&   from_meminfoI  s
    zListInstance.from_meminfoc           	         s    fdd}j j |jtjjj}td}td} 	d||} 	d 
|||} j|dd || W 5 Q R X  j|dd8  | | 
||}|| j| W 5 Q R X |j_d	 d
S )zE
        Ensure the list is properly sized for the new size.
        c              	      s    tj}|}|8 }t | tt|\}} j	|dd j
 td W 5 Q R X jj jj|d}t |d | j_d S )NFrJ   )cannot resize list)r/   r   )r   r   r   rd   r)   r   r   r   r@   rL   rQ   rR   r   r   Z!meminfo_varsize_realloc_uncheckedrj   r   Zguard_memory_errorr.   r   )new_allocatedr"   r   r   r   r;   r   r   r   r   r1   r%   r&   _payload_realloc[  s*    
 



z-ListInstance.resize.<locals>._payload_realloc   rz   r>   >FrJ   TN)rP   r5   rA   r*   rd   r.   r   r   r@   r?   ZashrrL   rB   rt   r/   rr   )	r1   new_sizer   r   ZtwoZeightZis_too_smallZis_too_larger   r%   r   r&   resizeW  s,    
zListInstance.resizec                 C   s:   |  |}|  |}tj| j|||| jd | d dS )zE
        Move `count` elements from `src_idx` to `dest_idx`.
        )r   TN)r8   r   Zraw_memmover5   rk   rr   )r1   Zdest_idxZsrc_idxcountZdest_ptrZsrc_ptrr%   r%   r&   move  s    

 zListInstance.moveN)T)T)r^   r_   r`   rf   ra   r(   r.   rn   rb   r!   r   rr   ru   rx   ry   rt   classmethodr   r   r   r   r   r   r   r%   r%   r%   r&   rh      s8   








/


9rh   c                   @   sR   e Zd Zdd Zedd Zedd Zedd Zed	d
 Z	e	j
dd
 Z	dS )ListIterInstancec                 C   s4   || _ || _|| _||||| _|j|j | _d S r,   )rP   r5   rd   ri   _iterre   Z
yield_typer:   )r1   r   r   	iter_typeZiter_valr%   r%   r&   rf     s
    zListIterInstance.__init__c                 C   sJ   t |||j|}| |||d }|tjd}t|||j_|j	|j_	|S Nr   )
rh   	containerget_constantr   r|   r   rK   r   indexr   )r   r   r   r   rl   Z	list_instr1   r   r%   r%   r&   	from_list  s    
zListIterInstance.from_listc                 C   s   t | j| j| jj| jS r,   )r'   rP   r5   rd   r   r   r0   r%   r%   r&   r.     s    
 zListIterInstance._payloadc                 C   s
   | j  S r,   )r   ro   r0   r%   r%   r&   r!     s    zListIterInstance.valuec                 C   s   | j | jjS r,   )r5   r9   r   r   r0   r%   r%   r&   r     s    zListIterInstance.indexc                 C   s   | j || jj d S r,   )r5   rM   r   r   r2   r%   r%   r&   r     s    N)r^   r_   r`   rf   r   r   ra   r.   r!   r   rb   r%   r%   r%   r&   r     s   



r   c                 C   sd   t |}t| |||}| tj||_t|D ]"\}}|j| tj||dd q0t	| |||j
S )zE
    Build a list of the given type, containing the given items.
    TrX   )lenrh   r   r   r   r|   r/   	enumeraterx   r   r!   )r   r   r    itemsr   instirZ   r%   r%   r&   
build_list  s    r   c                 C   s   dd }|  ||||S )Nc                 S   s   g }| |  |S r,   )extend)iterableresr%   r%   r&   	list_impl  s    
z#list_constructor.<locals>.list_implcompile_internal)r   r   sigr   r   r%   r%   r&   list_constructor  s    r   c                 C   s*   |j }d}t| |||}t| |||jS r   )return_typerh   r   r   r!   )r   r   r   r   r    list_lenr   r%   r%   r&   r     s    c                 C   s   t | ||jd |d }|jS r   )rh   r   r/   r   r   r   r   r   r%   r%   r&   r     s    r   Zgetiterc                 C   s(   t | ||j|d }t| ||j|jS r   )r   r   r   r
   r!   r   r%   r%   r&   getiter_list  s    r   Ziternextc           	   	   C   s~   t | ||jd |d }|j}|j}|d||}|| ||. ||| |	|| 
tjd|_W 5 Q R X d S )Nr   r>   rs   )r   r   r   r/   r?   Z	set_validrL   Zyield_r=   rB   r   r   r|   )	r   r   r   r   resultr   r   r   Zis_validr%   r%   r&   iternext_listiter  s    
r   c                 C   sR   t | ||jd |d }|d }||}|j|dd ||}t| ||j|S )Nr   rs   zgetitem out of rangerT   )rh   r   rD   rU   r=   r
   r   )r   r   r   r   r   r   r   r%   r%   r&   getitem_list  s    

r   c                 C   sX   t | ||jd |d }|d }|d }||}|j|dd |j||dd |  S )Nr   rs   r   zsetitem out of ranger   Tr   )rh   r   rD   rU   rx   get_dummy_value)r   r   r   r   r   r   r!   r%   r%   r&   setitem_list	  s    
r   c              
   C   s  t | ||jd |d }| ||jd |d }t| ||jd | || t||}t | ||j|}||_	t
||j|j|jf\}}	|$\}
}||
}|j||dd W 5 Q R X |	$\}
}||
}|j||dd W 5 Q R X W 5 Q R X t| ||j|jS Nr   rs   Tr   )rh   r   ri   r   guard_invalid_slicerV   get_slice_lengthr   r   r/   r   for_range_slice_genericr   r   r   r=   ry   r   r!   )r   r   r   r   r   rW   Zresult_sizer   	pos_range	neg_ranger7   r   r!   r%   r%   r&   getslice_list  s(    




$r   c                 C   s  t | ||jd |d }t | ||jd |d }| ||jd |d }t| ||jd | || |j}t||}||j|}	t	
|	jd}
t	
|	jd}||d|j|\}}| ||j|}||j|}||d|	|
0 |||j|	 ||||	|| W 5 Q R X ||d|	|
0 ||||	|| |||j|	 W 5 Q R X |j}t||,}||j}|j||j||dd W 5 Q R X W 5 Q R X | ||d	|	|
 d
}| j|t|f W 5 Q R X t||j|j|jf\}}|$\}}||}|j||dd W 5 Q R X |$\}}||}|j||dd W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X |  S )Nr   r   rs   ==r   r>   Tr   !=z0cannot resize extended list slice with step != 1)rh   r   ri   r   r   rV   r/   r   r}   r   r@   rA   r   r?   r   rB   r   rL   r   r   r   	for_ranger=   r   rx   rQ   rR   
ValueErrorr   r   r   )r   r   r   r   destsrcrW   src_sizeZ
avail_sizeZ
size_deltarN   oneZthenZ	otherwise	real_stop	tail_sizedest_offsetloopr!   rT   r   r   r   r   r%   r%   r&   r   ,  s\    
.   



8c                 C   s   dd }|  ||||S )Nc                 S   s   |  | d S r,   )pop)lstr   r%   r%   r&   list_delitem_impll  s    z-delitem_list_index.<locals>.list_delitem_implr   )r   r   r   r   r   r%   r%   r&   delitem_list_indexi  s    r   c              	   C   s&  t | ||jd |d }| ||jd |d }t| ||jd | || t||}t|j	d}|j
|d|j|dd d}| j|t|f W 5 Q R X |j}	||	|}
t||	|
|		d\}}||| W 5 Q R X ||j|
}||	|
| |||j| |  S )Nr   rs   r   FrJ   z4unsupported del list[start:stop:step] with step != 1)rh   r   ri   r   r   rV   r   r   r@   rA   rL   r?   r   rQ   rR   NotImplementedErrorr   rB   r   r   r]   r=   r}   r/   r   r   r   )r   r   r   r   r   rW   Z	slice_lenr   rT   r   r   r7   r   r   r%   r%   r&   delitem_listr  s.    
   r   c                 C   s   dd }|  ||||S )Nc                 S   s   | D ]}||kr dS qdS NTFr%   )r   r!   elemr%   r%   r&   seq_contains_impl  s    z!in_seq.<locals>.seq_contains_implr   )r   r   r   r   r   r%   r%   r&   in_seq  s    r   c                 C   s   dd }|  ||||S )Nc                 S   s   t | dkS r   r   seqr%   r%   r&   sequence_bool_impl  s    z)sequence_bool.<locals>.sequence_bool_implr   )r   r   r   r   r   r%   r%   r&   sequence_bool  s    r   c                 C   s   t | tjrdd }|S d S )Nc                 S   s   t | dkS r   r   r   r%   r%   r&   impl  s    zsequence_truth.<locals>.impl)r   r   Sequence)r   r   r%   r%   r&   sequence_truth  s    r   c              	   C   s  t | ||jd |d }t | ||jd |d }|j}|j}|||}t | ||j|}	||	_t||8}
||
j	}| 
|||j|	j}|	j|
j	|dd W 5 Q R X t||@}
||
j	}| 
|||j|	j}|	j||
j	||dd W 5 Q R X t| ||j|	jS r   )rh   r   r/   rB   r   r   r   r   r=   r   castr(   rx   r   r!   )r   r   r   r   aba_sizeZb_sizer   r   r   r!   r%   r%   r&   list_add  s     $r   c                 C   s8   |j d j|jjkstt| |||}t| ||j|jS r   )r   r(   r   AssertionError_list_extend_listr
   r!   )r   r   r   r   r   r%   r%   r&   list_add_inplace  s    r   c              
   C   s  t |jd tjrd\}}nd\}}t| ||j| || }|j}|| }t|jd}	|	t
|||	|}|||}
t| ||j|
}|
|_t
j||	|
|ddH\}}t
||,}||j}|j||j||dd W 5 Q R X W 5 Q R X t| ||j|jS )Nr   )r   rs   )rs   r   Tincr   )r   r   r   Listrh   r/   r   r@   rA   rC   r   
is_neg_intmulr   r   r   r   r=   r   rx   rB   r   r!   )r   r   r   r   Zlist_idxZint_idxr   r   multrN   r   r   r   r   r   r!   r%   r%   r&   list_mul  s     
.r  c              
   C   s   t | ||jd |d }|j}|d }t|jd}|t||||}|	||}|
| tj||||ddH\}	}
t||,}||j}|j||j|	|dd W 5 Q R X W 5 Q R X t| ||j|jS )Nr   rs   Tr   r   )rh   r   r/   r   r@   rA   rC   r   r  r  r   r   r   r=   r   rx   rB   r
   r   r!   )r   r   r   r   r   r   r  rN   r   r   r   r   r!   r%   r%   r&   list_mul_inplace  s    
.r  c                 C   s^   t | ||jd |d }t | ||jd |d }||jtj}||jtj}|d||S Nr   rs   r   )rh   r   r~   r   r   r   r?   )r   r   r   r   r   r   mambr%   r%   r&   list_is  s
    r
  c                 C   s   |j \}}t| |||d }t| |||d }|j}|d||j}	t||	}
||	 t||n}||j	}||j	}| 
|tj|j|jf||f}||| |tj|
 |  W 5 Q R X W 5 Q R X W 5 Q R X ||
S r  )r   rh   r/   r?   r   rK   rL   r   r=   r   Zgeneric_compareoperatoreqr(   r   rM   rq   Zdo_breakr9   )r   r   r   r   ZatyZbtyr   r   r   Z	same_sizer   r   vwZitemresr%   r%   r&   list_eq  s$    


 &r  c                 C   s   dd }|  ||||S )Nc                 S   s
   | |k S r,   r%   r   r   r%   r%   r&   list_ne_impl   s    zlist_ne.<locals>.list_ne_implr   )r   r   r   r   r  r%   r%   r&   list_ne  s    r  c                 C   s   dd }|  ||||S )Nc                 S   sX   t | }t |}tt||D ]0}| | || k r8 dS | | || kr dS q||kS r   r   rangeminr   r   mnr   r%   r%   r&   list_le_impl(  s    zlist_le.<locals>.list_le_implr   )r   r   r   r   r  r%   r%   r&   list_le%  s    
r  c                 C   s   dd }|  ||||S )Nc                 S   sX   t | }t |}tt||D ]0}| | || k r8 dS | | || kr dS q||k S r   r  r  r%   r%   r&   list_lt_impl7  s    zlist_lt.<locals>.list_lt_implr   )r   r   r   r   r  r%   r%   r&   list_lt4  s    
r  c                 C   s   dd }|  ||||S )Nc                 S   s   || kS r,   r%   r  r%   r%   r&   list_ge_implF  s    zlist_ge.<locals>.list_ge_implr   )r   r   r   r   r  r%   r%   r&   list_geC  s    r  c                 C   s   dd }|  ||||S )Nc                 S   s   || k S r,   r%   r  r%   r%   r&   list_gt_implN  s    zlist_gt.<locals>.list_gt_implr   )r   r   r   r   r  r%   r%   r&   list_gtK  s    r   zlist.appendc                 C   s^   t | ||jd |d }|d }|j}||t|jd}|| |j||dd | 	 S r   )
rh   r   r/   rB   r   r@   rA   r   rx   r   )r   r   r   r   r   itemr  r   r%   r%   r&   list_appendV  s    
r"  z
list.clearc                 C   s4   t | ||jd |d }|| tjd |  S r   )rh   r   r   r   r   r|   r   r   r%   r%   r&   
list_clearb  s    r#  z	list.copyc                 C   s   dd }|  ||||S )Nc                 S   s   t | S r,   )listr   r%   r%   r&   list_copy_implk  s    z!list_copy.<locals>.list_copy_implr   )r   r   r   r   r&  r%   r%   r&   	list_copyi  s    r'  z
list.countc                 C   s   dd }|  ||||S )Nc                 S   s"   d}| D ]}||kr|d7 }q|S Nr   rs   r%   )r   r!   r   r   r%   r%   r&   list_count_impls  s
    
z#list_count.<locals>.list_count_implr   )r   r   r   r   r)  r%   r%   r&   
list_countp  s    r*  c              	   C   s   t | ||jd |d }t | ||jd |d }|j}|j}|||}|| ||_t||@}	||	j}
| 	||
|j
|j
}
|j||	j||
dd W 5 Q R X |S )Nrs   r   Tr   )rh   r   r/   rB   r   r   r   r=   r   r   r(   rx   )r   r   r   r   r   r   r   Z	dest_sizer   r   r!   r%   r%   r&   r   |  s    
$r   zlist.extendc                 C   s@   t |jd tjr(t| ||| |  S dd }| ||||S )Nrs   c                 S   s   | j }|D ]}|| q
d S r,   )append)r   r   methr  r%   r%   r&   list_extend  s    z list_extend.<locals>.list_extend)r   r   r   r  r   r   r   )r   r   r   r   r-  r%   r%   r&   r-    s
    r-  z
list.indexc                 C   s   dd }|  ||||S )Nc                 S   s2   t t| D ]}| | |kr|  S qtdd S )Nvalue not in list)r  r   r   r   r!   r   r%   r%   r&   list_index_impl  s    
#list_index.<locals>.list_index_implr   r   r   r   r   r0  r%   r%   r&   
list_index  s    r3  c                 C   s   dd }|  ||||S )Nc                 S   sX   t | }|dk r$||7 }|dk r$d}t|t | D ]}| | |kr2|  S q2tdd S Nr   r.  r   r  r   )r   r!   r   r  r   r%   r%   r&   r0    s    
r1  r   r2  r%   r%   r&   r3    s    c                 C   s   dd }|  ||||S )Nc                 S   sp   t | }|dk r$||7 }|dk r$d}|dk r4||7 }||kr@|}t||D ]}| | |krJ|  S qJtdd S r4  r5  )r   r!   r   r   r  r   r%   r%   r&   r0    s    
r1  r   r2  r%   r%   r&   r3    s    zlist.insertc           
      C   s   t | ||jd |d }||d }||}|d }|j}t|jd}|||}	|	|	 |
||||||| |j||ddd |  S )Nr   rs   r   TF)rX   rw   )rh   r   rD   rO   r/   r   r@   rA   rB   r   r   r}   rx   r   )
r   r   r   r   r   r   r!   r  r   r   r%   r%   r&   list_insert  s    

r6  zlist.popc                 C   s   t | ||jd |d }|j}t| ||tdf ||t|j	d}|
|}|| || || t| ||j|S )Nr   pop from empty listrs   )rh   r   r/   r   
guard_zerorS   r}   r   r@   rA   r=   r[   ru   r   r   r   )r   r   r   r   r   r  r   r%   r%   r&   list_pop  s    




r9  c           	      C   s   t | ||jd |d }||d }|j}t| ||tdf ||d ||}t	
|jd}||t	
|jd}|||||||| || t| ||j|S )Nr   rs   r7  zpop index out of range)rh   r   rD   r/   r   r8  rS   rU   r=   r   r@   rA   r}   r   rB   r   r   r   )	r   r   r   r   r   r7   r  r   r   r%   r%   r&   r9    s    


zlist.removec                 C   s   dd }|  ||||S )Nc                 S   s:   t t| D ] }| | |kr| |  d S qtdd S )Nzlist.remove(x): x not in list)r  r   r   r   r/  r%   r%   r&   list_remove_impl  s
    
z%list_remove.<locals>.list_remove_implr   )r   r   r   r   r:  r%   r%   r&   list_remove  s    r;  zlist.reversec                 C   s   dd }|  ||||S )Nc                 S   s@   t dt| d D ](}| d }| | | |  | |< | |< qd S )Nr   r   rs   )r  r   )r   r   r   r%   r%   r&   list_reverse_impl  s    
z'list_reverse.<locals>.list_reverse_implr   )r   r   r   r   r<  r%   r%   r&   list_reverse  s    r=  c                 C   s   | |kS r,   r%   r  r%   r%   r&   gt  s    r>  )ltT)
is_argsortis_list)r@  r?  rA  c                 C   sX   t | tjr| j}nt | tjr(| j}n| }t |tjtjtt	fsTd|  }t
||S )Nz2an integer is required for 'reverse' (got type %s))r   r   ZOmittedr!   OptionalrA   BooleanIntegerr   boolr   TypingError)reverseZrtyrT   r%   r%   r&   _sort_check_reverse(  s    
rH  c                 C   sB   t | tjrd}t|t| s>t | tjs>d}t|d S )NzoKey must concretely be None or a Numba JIT compiled function, an Optional (union of None and a value) was foundz1Key must be None or a Numba JIT compiled function)r   r   rB  r   rF  r   is_nonelike
Dispatcher)keyrT   r%   r%   r&   _sort_check_key5  s    
rL  sortFc                    sV   t | t| t|r(d ttnt|tjr@d t	t
d fdd	}|S )NFTc                    sh   dkr fddD }n}|dks0|dkr:|}n|}dkrdfdd|D d d < d S )NTc                    s   g | ]} |qS r%   r%   ).0x)rK  r%   r&   
<listcomp>P  s     z.ol_list_sort.<locals>.impl.<locals>.<listcomp>Fr   c                    s   g | ]} | qS r%   r%   )rN  r   r%  r%   r&   rP  X  s     r%   )r   rK  rG  Z_lsttmpZKEYZsort_bZsort_f)rK  r   r&   r   N  s    
zol_list_sort.<locals>.impl)NF)rL  rH  r   rI  sort_forwardssort_backwardsr   r   rJ  arg_sort_forwardsarg_sort_backwards)r   rK  rG  r   r%   rR  r&   ol_list_sort?  s    
rW  c                 C   s.   t | tjsdS t| t| ddd}|S )NFc                 S   s   t | }|j||d |S )N)rK  rG  )r$  rM  )r   rK  rG  r   r%   r%   r&   r   e  s    zol_sorted.<locals>.impl)NF)r   r   IterableTyperL  rH  )r   rK  rG  r   r%   r%   r&   	ol_sorted\  s    
rY  c                 C   s   |j |j kst|S r,   )r(   r   )r   r   fromtytotyrZ   r%   r%   r&   list_to_listn  s    r\  Cannot mutate a literal listr+  c                 C   s   t d S r,   _banned_error)r   objr%   r%   r&   literal_list_banned_append|  s    ra  r   c                 C   s   t d S r,   r^  )r   r   r%   r%   r&   literal_list_banned_extend  s    rb  insertc                 C   s   t d S r,   r^  )r   r   r`  r%   r%   r&   literal_list_banned_insert  s    rd  removec                 C   s   t d S r,   r^  )r   r!   r%   r%   r&   literal_list_banned_remove  s    rf  r   c                 C   s   t d S r,   r^  r   r   r%   r%   r&   literal_list_banned_pop  s    ri  clearc                 C   s   t d S r,   r^  r%  r%   r%   r&   literal_list_banned_clear  s    rk  c                 C   s   t d S r,   r^  )r   rK  rG  r%   r%   r&   literal_list_banned_sort  s    rl  rG  c                 C   s   t d S r,   r^  r%  r%   r%   r&   literal_list_banned_reverse  s    rm  r   c                 C   s   t | tjrd}t|d S )Nz+list.index is unsupported for literal listsr   r   LiteralListr   rF  )r   rO  r   r   rT   r%   r%   r&   literal_list_index  s    rp  r   c                 C   s   t | tjrdd }|S d S )Nc                 S   s&   d}t | D ]}||kr|d7 }q|S r(  r   )r   rO  r   rZ   r%   r%   r&   r     s
    
 literal_list_count.<locals>.implr   r   ro  )r   rO  r   r%   r%   r&   literal_list_count  s    rs  copyc                 C   s   t | tjrdd }|S d S )Nc                 S   s   | S r,   r%   r%  r%   r%   r&   r     s    rq  rr  )r   r   r%   r%   r&   rs    s    c                 C   s   t | tjrtd S r,   )r   r   ro  r_  rh  r%   r%   r&   literal_list_delitem  s    ru  c                 C   s   t | tjrtdd S )Nr]  rn  )r   r   r!   r%   r%   r&   literal_list_setitem  s    rv  c                 G   s"   t | tjsd S d}t|d S )NzRCannot __getitem__ on a literal list, return type cannot be statically determined.rn  )r   r   rT   r%   r%   r&   literal_list_getitem  s    rw  c                    s"   t | tjsd S | j  fddS )Nc                    s    S r,   r%   r%  lr%   r&   <lambda>      z"literal_list_len.<locals>.<lambda>)r   r   ro  r   r%  r%   rx  r&   literal_list_len  s    r|  c                 C   s   t | tjrdd }|S d S )Nc                 S   s    t | D ]}||kr dS qdS r   r   )r   r!  rZ   r%   r%   r&   r     s    z#literal_list_contains.<locals>.implrr  )r   r!  r   r%   r%   r&   literal_list_contains  s    r}  c                    sP   t |t |krtt |t |} fddt|||D } ||S )Nc                    s"   g | ]\}}}  |||qS r%   )r   )rN  r  ftr   r   r%   r&   rP    s   z.literallist_to_literallist.<locals>.<listcomp>)r   r   r   Zunpack_tuplezipZ
make_tuple)r   r   rZ  r[  rZ   Zolditemsr   r%   r  r&   literallist_to_literallist  s    
r  )NF)NF)rg  )NF)rg   mathr  Zllvmliter   Z
numba.corer   r   r   r   Znumba.core.imputilsr   r   r	   r
   r   r   r   Znumba.core.extendingr   r   Znumba.core.utilsr   Z
numba.miscr   Znumba.cpythonr   Znumbar   r'   r*   objectr+   rc   rh   r   r   r$  rX  r   r   r  r   r   ZListIterZBORROWEDr   r=   rD  r   rx   Anyr   Z	SliceTyper   delitemr   r   containsr   r   rE  r   truthr   rB   r   iaddr   r  r  imulr  is_r
  r  r  ner  ler  r?  r  ger  r>  r   r"  r#  r'  r*  r   r-  r3  r6  r9  r;  r=  Zmake_jit_quicksortZrun_quicksortrS  rT  rU  rV  rH  rL  rW  sortedrY  r\  rF  r_  ro  ra  rb  rd  rf  ri  rk  rl  rm  r|   maxvalZ
_index_endrp  rs  ru  rv  rw  r|  r}  r  r%   r%   r%   r&   <module>   s<  $X  	(

	
	









<

"
	






















 











	

























	