o
    1&i                     @   sz  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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 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j0ej*ej1d$d% Z2eej3ej*ej1ej4d&d' Z5eej0ej*ej6d(d) Z7eej3ej*ej6ej4d*d' Z5eej8ej*ej1d+d, Z9eej8ej*ej6d-d. Z:eej;ej<ej4d/d0 Z=ee>ej<d1d2 Z?eej@d3d4 ZAeejBej*ej*d5d6 ZCeejDej*ej*d7d8 ZEeejFej*ej1eejFej1ej*d9d: ZGeejHej*ej1d;d< ZIeejJej*ej*d=d> ZKeejLej*ej*d?d@ ZMdAdB ZNeejOdCdD ZPeejQdEdF ZReejSdGdH ZTeejUdIdJ ZVeejWdKdL ZXedMej*ej4dNdO ZYedPej*dQdR ZZeej*dSdTdU Z[eej*dVdWdX Z\dYdZ Z]ed[ej*ej'd\d] Z^ej_rej`jaZbnejcjaZbeej*d^debfd_d`Zdedaej*ej1ej4dbdc Zeeddej*dedf Zfeddej*ej1dgdf Zfeej*dhdidj Zgeej*dkdldm Zhdndo ZWei jjZkejieWdpjjZlejidqdqdrjjZmejidqeWdqdsjjZndtdu Zodvdw Zpeej*dxddzd{Zqeerdd|d}Zseej*ej*d~d Zte
udZveejwddd Zxeejwddd Zyeejwddd Zzeejwdhdd Z{eejwddddZ|eejwddd Z}eejwdxdddZ~eejwdkdd Zej_rej`jaZnejcjaZeejwd^defddZeejwdVdd ZeejwdSdd Zeej8dd Zeej3dd Zeej0dd Zee)dd Zeej;dd Zeejwejwdd ZdS )z'
Support for native homogeneous lists.
    N)cached_property)ir)typestypingerrorscgutilsconfig)lower_builtin
lower_castiternext_implimpl_ret_borrowedimpl_ret_new_refimpl_ret_untrackedRefType)overload_methodoverload)	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&   @C:\wamp64\www\opt\env\Lib\site-packages\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      | j jS N_payloadsizeselfr&   r&   r'   r1   ,      z_ListPayloadMixin.sizec                 C      || j _d S r.   r/   r3   r"   r&   r&   r'   r1   0      c                 C   r-   r.   )r0   dirtyr2   r&   r&   r'   r8   4   r4   z_ListPayloadMixin.dirtyc                 C   s   | j dS )Ndata)r0   Z_get_ptr_by_namer2   r&   r&   r'   r9   8   r7   z_ListPayloadMixin.datac                 C   s   t | j| j|S r.   )r   Zgep_builderr9   r3   idxr&   r&   r'   _gep<      z_ListPayloadMixin._gepc                 C   s&   |  |}| j|}| j| j|S r.   )r=   r:   load
_datamodel	from_data)r3   r<   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   )r:   icmp_signedr   Constanttypeaddr1   select)r3   r<   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.
        rE   r   >=)r:   rF   r   rG   rH   r1   or_)r3   r<   	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 d   n1 s3w   Y  | j d||}|j|dd |	|| W d   n1 sXw   Y  |
|S )z/
        Clamp the index in [0, size].
        r   rE   FZlikelyNrL   )r:   r   alloca_once_valuer   rG   rH   r1   rF   if_thenstorer?   )r3   r<   r    Zidxptrzeror1   rN   rO   r&   r&   r'   clamp_indexW   s   
z_ListPayloadMixin.clamp_indexc                 C   sR   | j j| |dd | jj| j t|f W d   dS 1 s"w   Y  dS )z?
        Raise an error if the index is out of bounds.
        FrQ   N)r:   rS   rP   _context	call_convreturn_user_exc
IndexError)r3   r<   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_slicer:   r1   )r3   slicer&   r&   r'   r]   r   s   z_ListPayloadMixin.fix_slicec                 C      | j j| j| j| dS )zIncref an element valueN)rW   r   increfr:   r)   r3   valr&   r&   r'   incref_valuey      z_ListPayloadMixin.incref_valuec                 C   r_   )zDecref an element valueN)rW   r   decrefr:   r)   ra   r&   r&   r'   decref_value}   rd   z_ListPayloadMixin.decref_valueN)__name__
__module____qualname__propertyr1   setterr8   r9   r=   rD   rK   rP   rV   r\   r]   rc   rf   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   )rW   r:   _tydata_model_managerr)   r@   r   r   r   r   r   r   r0   )r3   r   r    r!   Zpayload_ptrr#   r%   r$   r&   r&   r'   __init__   s   

zListPayloadAccessor.__init__N)rg   rh   ri   __doc__ro   r&   r&   r&   r'   rl      s    rl   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.   )
rW   r:   rm   make_helper_listr+   	_itemsizern   r)   r@   )r3   r   r    r!   list_valr&   r&   r'   ro      s   zListInstance.__init__c                 C   r-   r.   )rm   r)   r2   r&   r&   r'   r)      r4   zListInstance.dtypec                 C   s   t | j| j| j| jS r.   )r(   rW   r:   rm   rs   r2   r&   r&   r'   r0      s   zListInstance._payloadc                 C   r-   r.   rs   parentr2   r&   r&   r'   rw      r4   zListInstance.parentc                 C   r5   r.   rv   r6   r&   r&   r'   rw      r7   c                 C   
   | j  S r.   )rs   	_getvaluer2   r&   r&   r'   r"         
zListInstance.valuec                 C   r-   r.   )rs   r   r2   r&   r&   r'   r      r4   zListInstance.meminfoc                 C   s$   | j jr|r	tjntj| j_d S d S r.   )rm   Z	reflectedr   true_bit	false_bitr0   r8   ra   r&   r&   r'   	set_dirty   s   zListInstance.set_dirtyc              	   C   s0   |  | | | || j||d dS )z)Remove the value at the location
           N)rf   rD   zfillr:   rI   rH   r;   r&   r&   r'   clear_value   s    zListInstance.clear_valueTc                 C   s\   |r
|  | | | |}| j| j|}| j|| | d |r,| | d S d S )NT)	rf   rD   r=   r@   as_datar:   rT   r}   rc   )r3   r<   rb   r`   decref_old_valuerB   rC   r&   r&   r'   setitem   s   

zListInstance.setitemc                 C   s>   |  |}| j| j|}| j|| |r| | d S d S r.   )r=   r@   r   r:   rT   rc   )r3   r<   rb   r`   rB   rC   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)r:   r=   rW   get_value_typer   intpsubptrtointr   memsetr   ZIntType)r3   startstopr    baseendZ	intaddr_tr1   r&   r&   r'   r      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 d   n1 s`w   Y  |j||	dd |jj|||
 d}|jt||dd\\}}| |tj|	 W d   n1 sw   Y  |/ ||
j_|tj|
j_||
j_t|d|
j_tj|
j_ |
!|
j"d| W d   n1 sw   Y  W d   n1 sw   Y  W d   n1 sw   Y  ||	|
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).
        NFrQ   T)r1   dtorr   )#r   r   r   
isinstanceintr   rG   r   r   r*   r+   r   rR   r{   muladd_with_overflowrS   rT   r|   r?   r   Z"meminfo_new_varsize_dtor_uncheckedget_dtorif_elseZis_nullrs   r   get_constant_nullpyobjectrw   r0   	allocatedr1   r8   r   rH   )clsr   r    r!   nitemsintp_tr#   payload_sizeitemsizeokr3   	allocsizeovfr   Zif_errorZif_okr&   r&   r'   allocate_ex   sP   






zListInstance.allocate_exc                 C   s   | j }| j}|j}tt tjg}t||d	| j
}|js#|S d|_t| }|jd }t||| j|}|jj}tj||d|j|d|d\}	}
||	}|j|| j
| W d   n1 shw   Y  |  |S )z,Define the destructor if not already definedz.dtor.list.{}Zlinkonce_odrr   r~   )r   r   stepr   N)rW   r:   moduler   FunctionTypeZVoidTyper   	voidptr_tZget_or_insert_functionformatr)   Zis_declarationlinkageZ	IRBuilderZappend_basic_blockargsrl   rm   r1   rH   for_range_slicerD   r   re   Zret_void)r3   r   r    modZfntyfnZbase_ptrr$   r   r<   _rb   r&   r&   r'   define_dtor  s0   


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   r:   r   r   r   )r3   r   Z
dtor_fnptrr&   r&   r'   r   1  s   zListInstance.get_dtorc                 C   s^   |  ||||\}}|j||dd |j|td W d   |S 1 s(w   Y  |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.
        FrQ   )zcannot allocate listN)r   rS   not_rX   rY   MemoryError)r   r   r    r!   r   r   r3   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)	rs   r   r   r   r   rw   r   r`   r"   )r   r   r    r!   r   r3   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 d	   n1 sQw   Y   j|dd!  | | 
||}|| j| W d	   n1 sw   Y  |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 d    n1 s>w   Y  jj jj|d}t |d | j_d S )NFrQ   )cannot resize list)r1   r   )r   r   r   rm   r*   r   r   r   rG   rS   rX   rY   r   r   Z!meminfo_varsize_realloc_uncheckedrs   r   Zguard_memory_errorr0   r   )new_allocatedr#   r   r   r   rB   r    r   r   r   r3   r&   r'   _payload_realloc[  s*   




z-ListInstance.resize.<locals>._payload_realloc   r   rE   >FrQ   NT)rW   r:   rH   r+   rm   r0   r   r   rG   rF   ZashrrS   rI   r   r1   r}   )	r3   new_sizer   r   twoeightZis_too_smallZis_too_larger   r&   r   r'   resizeW  s0   

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)r=   r   Zraw_memmover:   rt   r}   )r3   Zdest_idxZsrc_idxcountZdest_ptrZsrc_ptrr&   r&   r'   move  s   

zListInstance.moveN)T)rg   rh   ri   ro   rj   r)   r0   rw   rk   r"   r   r}   r   r   r   r   classmethodr   r   r   r   r   r   r   r&   r&   r&   r'   rq      s:    








/


9rq   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.   )rW   r:   rm   rr   _iterrn   Z
yield_typer@   )r3   r   r    	iter_typeZiter_valr&   r&   r'   ro     s
   zListIterInstance.__init__c                 C   sJ   t |||j|}| |||d }|tjd}t|||j_|j	|j_	|S Nr   )
rq   	containerget_constantr   r   r   rR   r   indexr   )r   r   r    r   ru   Z	list_instr3   r   r&   r&   r'   	from_list  s   
zListIterInstance.from_listc                 C   s   t | j| j| jj| jS r.   )r(   rW   r:   rm   r   r   r2   r&   r&   r'   r0     s   

zListIterInstance._payloadc                 C   rx   r.   )r   ry   r2   r&   r&   r'   r"     rz   zListIterInstance.valuec                 C   s   | j | jjS r.   )r:   r?   r   r   r2   r&   r&   r'   r     s   zListIterInstance.indexc                 C   s   | j || jj d S r.   )r:   rT   r   r   r6   r&   r&   r'   r     s   N)rg   rh   ri   ro   r   r   rj   r0   r"   r   rk   r&   r&   r&   r'   r     s    



r   c                 C   sd   t |}t| |||}| tj||_t|D ]\}}|j| tj||dd qt	| |||j
S )zE
    Build a list of the given type, containing the given items.
    Tr`   )lenrq   r   r   r   r   r1   	enumerater   r   r"   )r   r    r!   itemsr   instirb   r&   r&   r'   
build_list  s   r   c                 C      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_typerq   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   )rq   r   r1   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 d    d S 1 sCw   Y  d S )Nr   rE   r~   )r   r   r   r1   rF   Z	set_validrS   Zyield_rD   rI   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   r~   zgetitem out of ranger[   )rq   r   rK   r\   rD   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   r~   r   zsetitem out of ranger   Tr   )rq   r   rK   r\   r   get_dummy_value)r   r    r   r   r   r   r"   r&   r&   r'   setitem_list	  s   
r   c              	   C   sD  t | ||jd |d }| ||jd |d }t| ||jd | || t||}t | ||j|}||_	t
||j|j|jL\}}	|\}
}||
}|j||dd W d    n1 sdw   Y  |	\}
}||
}|j||dd W d    n1 sw   Y  W d    n1 sw   Y  t| ||j|jS Nr   r~   Tr   )rq   r   rr   r   guard_invalid_slicer]   get_slice_lengthr   r   r1   r   for_range_slice_genericr   r   r   rD   r   r   r"   )r   r    r   r   r   r^   Zresult_sizer   	pos_range	neg_ranger<   r   r"   r&   r&   r'   getslice_list  s0   




	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|	|
 |||j|	 ||||	|| W d    n1 sw   Y  ||d|	|
 ||||	|| |||j|	 W d    n1 sw   Y  |j}t||}||j}|j||j||dd W d    n1 sw   Y  W d    n	1 sw   Y  | ||d	|	|
 d
}| j|t|f W d    n	1 s0w   Y  t||j|j|jN\}}|\}}||}|j||dd W d    n	1 s`w   Y  |\}}||}|j||dd W d    n	1 sw   Y  W d    n	1 sw   Y  W d    n1 sw   Y  W d    |  S W d    |  S 1 sw   Y  |  S )Nr   r   r~   ==r   rE   Tr   !=z0cannot resize extended list slice with step != 1)rq   r   rr   r   r   r]   r1   r   r   r   rG   rH   r   rF   r   rI   r   rS   r   r   r   	for_rangerD   r   r   rX   rY   
ValueErrorr   r   r   )r   r    r   r   destsrcr^   src_sizeZ
avail_sizeZ
size_deltarU   oneZthenZ	otherwise	real_stop	tail_sizedest_offsetloopr"   r[   r   r   r   r   r&   r&   r'   r   ,  sz   




 
)
))c                 C   r   )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   sN  t | ||jd |d }| ||jd |d }t| ||jd | || t||}t|j	d}|j
|d|j|dd d}| j|t|f W d    n1 sXw   Y  |j}	||	|}
t||	|
|		d\}}||| W d    n1 sw   Y  ||j|
}||	|
| |||j| |  S )Nr   r~   r   FrQ   z4unsupported del list[start:stop:step] with step != 1)rq   r   rr   r   r   r]   r   r   rG   rH   rS   rF   r   rX   rY   NotImplementedErrorr   rI   r   r   rf   rD   r   r1   r   r   r   )r   r    r   r   r   r^   Z	slice_lenr   r[   r   r   r<   r   r   r&   r&   r'   delitem_listr  s,   
r   c                 C   r   )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   r   )Nc                 S      t | dkS r   r   seqr&   r&   r'   sequence_bool_impl     z)sequence_bool.<locals>.sequence_bool_implr   )r   r    r   r   r  r&   r&   r'   sequence_bool  s   r  c                 C      t | tjrdd }|S d S )Nc                 S   r   r   r   r   r&   r&   r'   impl  r  zsequence_truth.<locals>.impl)r   r   Sequence)r   r  r&   r&   r'   sequence_truth     r  c                 C   s6  t | ||jd |d }t | ||jd |d }|j}|j}|||}t | ||j|}	||	_t||!}
||
j	}| 
|||j|	j}|	j|
j	|dd W d    n1 sZw   Y  t||%}
||
j	}| 
|||j|	j}|	j||
j	||dd W d    n1 sw   Y  t| ||j|	jS r   )rq   r   r1   rI   r   r   r   r   rD   r   castr)   r   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J t| |||}t| ||j|jS r   )r   r)   r   _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3\}}t
||}||j}|j||j||dd W d    n1 szw   Y  W d    n1 sw   Y  t| ||j|jS )Nr   )r   r~   )r~   r   Tincr   )r   r   r   Listrq   r1   r   rG   rH   rJ   r   
is_neg_intmulr   r   r   r   rD   r   r   rI   r   r"   )r   r    r   r   Zlist_idxZint_idxr   r   multrU   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3\}	}
t||}||j}|j||j|	|dd W d    n1 saw   Y  W d    n1 spw   Y  t| ||j|jS )Nr   r~   Tr  r   )rq   r   r1   r   rG   rH   rJ   r   r  r  r   r   r   rD   r   r   rI   r   r   r"   )r   r    r   r   r   r   r  rU   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   r~   r   )rq   r   r   r   r   r   rF   )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||F}||j	}||j	}| 
|tj|j|jf||f}||| |tj|
 |  W d    n1 snw   Y  W d    n1 s}w   Y  W d    n1 sw   Y  ||
S r  )r   rq   r1   rF   r   rR   rS   r   rD   r   Zgeneric_compareoperatoreqr)   r   rT   r|   Zdo_breakr?   )r   r    r   r   ZatyZbtyr
  r  r  Z	same_sizer   r   vwZitemresr&   r&   r'   list_eq  s,   



r   c                  G   s   t dd | D S )Nc                 S   s   g | ]}t |tjqS r&   )r   r   r  ).0typr&   r&   r'   
<listcomp>  s    zall_list.<locals>.<listcomp>)all)r   r&   r&   r'   all_list  r>   r%  c                 C      t | |sd S dd }|S )Nc                 S   s
   | |k S r.   r&   r
  r  r&   r&   r'   list_ne_impl&  s   
z"impl_list_ne.<locals>.list_ne_implr%  )r
  r  r(  r&   r&   r'   impl_list_ne!     
r*  c                 C   r&  )Nc                 S   sX   t | }t |}tt||D ]}| | || k r dS | | || kr' dS q||kS r   r   rangeminr
  r  mnr   r&   r&   r'   list_le_impl0     z"impl_list_le.<locals>.list_le_implr)  )r
  r  r2  r&   r&   r'   impl_list_le+     

r4  c                 C   r&  )Nc                 S   sX   t | }t |}tt||D ]}| | || k r dS | | || kr' dS q||k S r   r,  r/  r&   r&   r'   list_lt_implA  r3  z"impl_list_lt.<locals>.list_lt_implr)  )r
  r  r6  r&   r&   r'   impl_list_lt<  r5  r7  c                 C   r&  )Nc                 S   s   || kS r.   r&   r'  r&   r&   r'   list_ge_implR     z"impl_list_ge.<locals>.list_ge_implr)  )r
  r  r8  r&   r&   r'   impl_list_geM  r+  r:  c                 C   r&  )Nc                 S   s   || k S r.   r&   r'  r&   r&   r'   list_gt_impl\  r9  z"impl_list_gt.<locals>.list_gt_implr)  )r
  r  r;  r&   r&   r'   impl_list_gtW  r+  r<  zlist.appendc                 C   s^   t | ||jd |d }|d }|j}||t|jd}|| |j||dd | 	 S r   )
rq   r   r1   rI   r   rG   rH   r   r   r   )r   r    r   r   r   itemr1  r   r&   r&   r'   list_appendd  s   
r>  z
list.clearc                 C   s4   t | ||jd |d }|| tjd |  S r   )rq   r   r   r   r   r   r   r   r&   r&   r'   
list_clearp  s   r?  copyc                 C      dd }|S )Nc                 S   s   t | S r.   )listr   r&   r&   r'   list_copy_implz  r9  z!list_copy.<locals>.list_copy_implr&   )r   rD  r&   r&   r'   	list_copyx  s   rE  r   c                 C      dd }|S )Nc                 S   s"   d}| D ]
}||kr|d7 }q|S Nr   r~   r&   )r   r"   r   r   r&   r&   r'   list_count_impl  s   z#list_count.<locals>.list_count_implr&   )r   r"   rH  r&   r&   r'   
list_count  s   rI  c                 C   s   t | ||jd |d }t | ||jd |d }|j}|j}|||}|| ||_t||&}	||	j}
| 	||
|j
|j
}
|j||	j||
dd W d    |S 1 s[w   Y  |S )Nr~   r   Tr   )rq   r   r1   rI   r   r   r   rD   r   r	  r)   r   )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 )Nr~   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   rL  r&   r&   r'   rL    s
   rL  r   c                 C   sZ   t |ttjtjfstd| t |ttjtjfs$td| dtfdd}|S )Nz$arg "start" must be an Integer. Got z#arg "stop" must be an Integer. Got r   c                 S   sl   t | }|dk r||7 }|dk rd}|dk r||7 }||kr |}t||D ]}| | |kr1|  S q%td)Nr   zvalue not in list)r   r-  r   )r   r"   r   r   r1  r   r&   r&   r'   list_index_impl  s   z#list_index.<locals>.list_index_impl)r   r   r   IntegerOmittedr   TypingErrorintp_max)r   r"   r   r   rM  r&   r&   r'   
list_index  s   rR  zlist.insertc           
      C   s   t | ||jd |d }||d }||}|d }|j}t|jd}|||}	|	|	 |
||||||| |j||ddd |  S )Nr   r~   r   TF)r`   r   )rq   r   rK   rV   r1   r   rG   rH   rI   r   r   r   r   r   )
r   r    r   r   r   r   r"   r1  r   r   r&   r&   r'   list_insert  s   

rS  zlist.popc                 C   s   t | ||jd |d }|j}t| ||tdf ||t|j	d}|
|}|| || || t| ||j|S )Nr   pop from empty listr~   )rq   r   r1   r   
guard_zerorZ   r   r   rG   rH   rD   rc   r   r   r   r   )r   r    r   r   r   r1  r   r&   r&   r'   list_pop  s   




rV  c           	      C   s   t | ||jd |d }||d }|j}t| ||tdf ||d ||}t	
|jd}||t	
|jd}|||||||| || t| ||j|S )Nr   r~   rT  zpop index out of range)rq   r   rK   r1   r   rU  rZ   r\   rD   r   rG   rH   r   r   rI   r   r   r   )	r   r    r   r   r   r<   r1  r   r   r&   r&   r'   rV    s   


removec                 C   rF  )Nc                 S   s6   t t| D ]}| | |kr| |  d S qtd)Nzlist.remove(x): x not in list)r-  r   r   r   )r   r"   r   r&   r&   r'   list_remove_impl  s   
z%list_remove.<locals>.list_remove_implr&   )r   r"   rX  r&   r&   r'   list_remove  s   rY  reversec                 C   rA  )Nc                 S   s@   t dt| d D ]}| d }| | | | | |< | |< q	d S )Nr   r   r~   )r-  r   )r   r
  r  r&   r&   r'   list_reverse_impl  s   
z'list_reverse.<locals>.list_reverse_implr&   )r   r[  r&   r&   r'   list_reverse  s   r\  c                 C   s   | |kS r.   r&   r'  r&   r&   r'   gt  r9  r]  )ltT)
is_argsortis_list)r_  r^  r`  c                 C   sX   t | tjr
| j}nt | tjr| j}n| }t |tjtjtt	fs*d|  }t
||S )Nz2an integer is required for 'reverse' (got type %s))r   r   rO  r"   OptionalrH   BooleanrN  r   boolr   rP  )rZ  Zrtyr[   r&   r&   r'   _sort_check_reverse%  s   
rd  c                 C   sF   t | tjrd}t|t| st | tjs!d}t|d S 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   ra  r   rP  r   is_nonelike
Dispatcher)keyr[   r&   r&   r'   _sort_check_key2  s   

rh  sortFc                    sV   t | t| t|rd ttnt|tjr d t	t
d fdd	}|S )NFTc                    sl   du r fddD }n}|du s|dkr|}n|}du r4fdd|D d d < d S d S )NTc                    s   g | ]} |qS r&   r&   )r!  x)rg  r&   r'   r#  M      z.ol_list_sort.<locals>.impl.<locals>.<listcomp>Fr   c                    s   g | ]} | qS r&   r&   )r!  r   rC  r&   r'   r#  U  rk  r&   )r   rg  rZ  Z_lsttmpZKEYZsort_bZsort_f)rg  r   r'   r  K  s   
zol_list_sort.<locals>.implNF)rh  rd  r   re  sort_forwardssort_backwardsr   r   rf  arg_sort_forwardsarg_sort_backwards)r   rg  rZ  r  r&   rm  r'   ol_list_sort<  s   
rs  c                 C   s.   t | tjsdS t| t| ddd}|S )NFc                 S   s   t | }|j||d |S )N)rg  rZ  )rB  ri  )r   rg  rZ  r   r&   r&   r'   r  b  s   zol_sorted.<locals>.implrn  )r   r   IterableTyperh  rd  )r   rg  rZ  r  r&   r&   r'   	ol_sortedY  s   
ru  c                 C   s   |j |j ksJ |S r.   )r)   )r   r    fromtytotyrb   r&   r&   r'   list_to_listk  s   rx  Cannot mutate a literal listrJ  c                 C      t r.   _banned_error)r   objr&   r&   r'   literal_list_banned_appendy     r~  r   c                 C   rz  r.   r{  )r   r   r&   r&   r'   literal_list_banned_extend~  r  r  insertc                 C   rz  r.   r{  )r   r   r}  r&   r&   r'   literal_list_banned_insert  r  r  c                 C   rz  r.   r{  )r   r"   r&   r&   r'   literal_list_banned_remove  r  r  r   c                 C   rz  r.   r{  r   r   r&   r&   r'   literal_list_banned_pop  r  r  clearc                 C   rz  r.   r{  rC  r&   r&   r'   literal_list_banned_clear  r  r  c                 C   rz  r.   r{  )r   rg  rZ  r&   r&   r'   literal_list_banned_sort  r  r  c                 C   rz  r.   r{  rC  r&   r&   r'   literal_list_banned_reverse  r  r  c                 C   s   t | tjrd}t|d S )Nz+list.index is unsupported for literal listsr   r   LiteralListr   rP  )r   rj  r   r   r[   r&   r&   r'   literal_list_index  s   
r  c                 C      t | tjrdd }|S d S )Nc                 S   s&   d}t | D ]
}||kr|d7 }q|S rG  r   )r   rj  r   rb   r&   r&   r'   r    s    literal_list_count.<locals>.implr   r   r  )r   rj  r  r&   r&   r'   literal_list_count  s   r  c                 C   r  )Nc                 S   s   | S r.   r&   rC  r&   r&   r'   r    s   r  r  )r   r  r&   r&   r'   r    r  c                 C   s   t | tjrtd S r.   )r   r   r  r|  r  r&   r&   r'   literal_list_delitem  s   r  c                 C   s   t | tjrtdd S )Nry  r  )r   r   r"   r&   r&   r'   literal_list_setitem  s   
r  c                 G   s   t | tjsd S d}t|)NzRCannot __getitem__ on a literal list, return type cannot be statically determined.r  )r   r   r[   r&   r&   r'   literal_list_getitem  s   
r  c                    s"   t | tjsd S | j  fddS )Nc                    s    S r.   r&   rC  lr&   r'   <lambda>  s    z"literal_list_len.<locals>.<lambda>)r   r   r  r   rC  r&   r  r'   literal_list_len  s   r  c                 C   r  )Nc                 S   s    t | D ]	}||kr dS qdS r   r   )r   r=  rb   r&   r&   r'   r    s
   z#literal_list_contains.<locals>.implr  )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	  )r!  r  ftr    r   r&   r'   r#    s    z.literallist_to_literallist.<locals>.<listcomp>)r   r   r   Zunpack_tuplezipZ
make_tuple)r   r    rv  rw  rb   Zolditemsr   r&   r  r'   literallist_to_literallist  s   
r  rn  )r  )rp   mathr  	functoolsr   Zllvmliter   Z
numba.corer   r   r   r   r   Znumba.core.imputilsr	   r
   r   r   r   r   r   Znumba.core.extendingr   r   Z
numba.miscr   Znumba.cpythonr   Znumbar   r(   r+   objectr,   rl   rq   r   r   rB  rt  r   r   r  r   r   ZListIterZBORROWEDr   rD   rN  r   r   Anyr   Z	SliceTyper   delitemr   r   containsr  r   rc  r  truthr  rI   r  iaddr  r  r  imulr  is_r  r  r   r%  ner*  ler4  r^  r7  ger:  r]  r<  r>  r?  rE  rI  r  rL  ZUSE_LEGACY_TYPE_SYSTEMr   maxvalrQ  Zpy_intrR  rS  rV  rY  r\  Zmake_jit_quicksortZrun_quicksortro  rp  rq  rr  rd  rh  rs  sortedru  rx  rP  r|  r  r~  r  r  r  r  r  r  r  Z
_index_endr  r  r  r  r  r  r  r  r&   r&   r&   r'   <module>   s@   $X  	(

	

	








<

"

	







	


	























	




















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