o
    i!                     @   sR  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 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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@ ZLdAdB ZMeejNdCdD ZOeejPdEdF ZQeejRdGdH ZSeejTdIdJ ZUeejVdKdL ZWedMej)ej3dNdO ZXedPej)dQdR ZYeej)dSdTdU ZZeej)dVdWdX Z[dYdZ Z\ed[ej)ej&d\d] Z]ej^j_Z`eej)d^de`fd_d`Zaedaej)ej0ej3dbdc Zbeddej)dedf Zceddej)ej0dgdf Zceej)dhdidj Zdeej)dkdldm Zedndo ZVef jgZhejfeVdpjgZiejfdqdqdrjgZjejfdqeVdqdsjgZkdtdu Zldvdw Zmeej)dxddzd{Zneeodd|d}Zpeej)ej)d~d Zqe
rdZseejtddd Zueejtddd Zveejtddd Zweejtdhdd ZxeejtddddZyeejtddd ZzeejtdxdddZ{eejtdkdd Z|ej^j_Z}eejtd^de}fddZ~eejtdVdd ZeejtdSdd Zeej7dd Zeej2dd Zeej/dd Zee(dd Zeej:dd Zeejtejtdd ZdS )z'
Support for native homogeneous lists.
    N)cached_property)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)	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%   d/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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&   r0   ,      z_ListPayloadMixin.sizec                 C      || j _d S r-   r.   r2   r!   r%   r%   r&   r0   0      c                 C   r,   r-   )r/   dirtyr1   r%   r%   r&   r7   4   r3   z_ListPayloadMixin.dirtyc                 C   s   | j dS )Ndata)r/   Z_get_ptr_by_namer1   r%   r%   r&   r8   8   r6   z_ListPayloadMixin.datac                 C   s   t | j| j|S r-   )r   Zgep_builderr8   r2   idxr%   r%   r&   _gep<      z_ListPayloadMixin._gepc                 C   s&   |  |}| j|}| j| j|S r-   )r<   r9   load
_datamodel	from_data)r2   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   )r9   icmp_signedr   Constanttypeaddr0   select)r2   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.
        rD   r   >=)r9   rE   r   rF   rG   r0   or_)r2   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   rD   FZlikelyNrK   )r9   r   alloca_once_valuer   rF   rG   r0   rE   if_thenstorer>   )r2   r;   r   Zidxptrzeror0   rM   rN   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.
        FrP   N)r9   rR   rO   _context	call_convreturn_user_exc
IndexError)r2   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_slicer9   r0   )r2   slicer%   r%   r&   r\   r   s   z_ListPayloadMixin.fix_slicec                 C      | j j| j| j| dS )zIncref an element valueN)rV   r   increfr9   r(   r2   valr%   r%   r&   incref_valuey      z_ListPayloadMixin.incref_valuec                 C   r^   )zDecref an element valueN)rV   r   decrefr9   r(   r`   r%   r%   r&   decref_value}   rc   z_ListPayloadMixin.decref_valueN)__name__
__module____qualname__propertyr0   setterr7   r8   r<   rC   rJ   rO   rU   r[   r\   rb   re   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   )rV   r9   _tydata_model_managerr(   r?   r   r   r   r   r   r   r/   )r2   r   r   r    Zpayload_ptrr"   r$   r#   r%   r%   r&   __init__   s   

zListPayloadAccessor.__init__N)rf   rg   rh   __doc__rn   r%   r%   r%   r&   rk      s    rk   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-   )
rV   r9   rl   make_helper_listr*   	_itemsizerm   r(   r?   )r2   r   r   r    list_valr%   r%   r&   rn      s   zListInstance.__init__c                 C   r,   r-   )rl   r(   r1   r%   r%   r&   r(      r3   zListInstance.dtypec                 C   s   t | j| j| j| jS r-   )r'   rV   r9   rl   rr   r1   r%   r%   r&   r/      s   zListInstance._payloadc                 C   r,   r-   rr   parentr1   r%   r%   r&   rv      r3   zListInstance.parentc                 C   r4   r-   ru   r5   r%   r%   r&   rv      r6   c                 C   
   | j  S r-   )rr   	_getvaluer1   r%   r%   r&   r!         
zListInstance.valuec                 C   r,   r-   )rr   r   r1   r%   r%   r&   r      r3   zListInstance.meminfoc                 C   s$   | j jr|r	tjntj| j_d S d S r-   )rl   Z	reflectedr   true_bit	false_bitr/   r7   r`   r%   r%   r&   	set_dirty   s   zListInstance.set_dirtyc              	   C   s0   |  | | | || j||d dS )z)Remove the value at the location
           N)re   rC   zfillr9   rH   rG   r:   r%   r%   r&   clear_value   s    zListInstance.clear_valueTc                 C   s\   |r
|  | | | |}| j| j|}| j|| | d |r,| | d S d S )NT)	re   rC   r<   r?   as_datar9   rS   r|   rb   )r2   r;   ra   r_   decref_old_valuerA   rB   r%   r%   r&   setitem   s   

zListInstance.setitemc                 C   s>   |  |}| j| j|}| j|| |r| | d S d S r-   )r<   r?   r   r9   rS   rb   )r2   r;   ra   r_   rA   rB   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)r9   r<   rV   get_value_typer   intpsubptrtointr   Zmemsetr   ZIntType)r2   startstopr   baseendZ	intaddr_tr0   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).
        NFrP   T)r0   dtorr   )#r   r   r   
isinstanceintr   rF   r   r   r)   r*   r   rQ   rz   muladd_with_overflowrR   rS   r{   r>   r   Z"meminfo_new_varsize_dtor_uncheckedget_dtorif_elseZis_nullrr   r   get_constant_nullpyobjectrv   r/   	allocatedr0   r7   r~   rG   )clsr   r   r    nitemsintp_tr"   payload_sizeitemsizeokr2   	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)rV   r9   moduler   FunctionTypeZVoidTyper   	voidptr_tZget_or_insert_functionformatr(   Zis_declarationlinkageZ	IRBuilderZappend_basic_blockargsrk   rl   r0   rG   for_range_slicerC   r   rd   Zret_void)r2   r   r   modZfntyfnZbase_ptrr#   r   r;   _ra   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   r9   r   r   r   )r2   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.
        FrP   )zcannot allocate listN)r   rR   not_rW   rX   MemoryError)r   r   r   r    r   r   r2   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)	rr   r   r   r   r   rv   r   r_   r!   )r   r   r   r    r   r2   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 )NFrP   )cannot resize list)r0   r   )r   r   r   rl   r)   r   r   r   rF   rR   rW   rX   r   r   Z!meminfo_varsize_realloc_uncheckedrr   r   Zguard_memory_errorr/   r   )new_allocatedr"   r   r   r   rA   r   r   r   r   r2   r%   r&   _payload_realloc[  s*   




z-ListInstance.resize.<locals>._payload_realloc   r   rD   >FrP   NT)rV   r9   rG   r*   rl   r/   r   r   rF   rE   ZashrrR   rH   r~   r0   r|   )	r2   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_memmover9   rs   r|   )r2   Zdest_idxZsrc_idxcountZdest_ptrZsrc_ptrr%   r%   r&   move  s   

zListInstance.moveN)T)rf   rg   rh   rn   ri   r(   r/   rv   rj   r!   r   r|   r   r   r   r~   classmethodr   r   r   r   r   r   r   r%   r%   r%   r&   rp      s:    








/


9rp   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-   )rV   r9   rl   rq   _iterrm   Z
yield_typer?   )r2   r   r   	iter_typeZiter_valr%   r%   r&   rn     s
   zListIterInstance.__init__c                 C   sJ   t |||j|}| |||d }|tjd}t|||j_|j	|j_	|S Nr   )
rp   	containerget_constantr   r   r   rQ   r   indexr   )r   r   r   r   rt   Z	list_instr2   r   r%   r%   r&   	from_list  s   
zListIterInstance.from_listc                 C   s   t | j| j| jj| jS r-   )r'   rV   r9   rl   r   r   r1   r%   r%   r&   r/     s   

zListIterInstance._payloadc                 C   rw   r-   )r   rx   r1   r%   r%   r&   r!     ry   zListIterInstance.valuec                 C   s   | j | jjS r-   )r9   r>   r   r   r1   r%   r%   r&   r     s   zListIterInstance.indexc                 C   s   | j || jj d S r-   )r9   rS   r   r   r5   r%   r%   r&   r     s   N)rf   rg   rh   rn   r   r   ri   r/   r!   r   rj   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_   )lenrp   r   r   r   r   r0   	enumerater   r   r!   )r   r   r    itemsr   instira   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_typerp   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   )rp   r   r0   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   rD   r}   )r   r   r   r0   rE   Z	set_validrR   Zyield_rC   rH   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rZ   )rp   r   rJ   r[   rC   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   )rp   r   rJ   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   )rp   r   rq   r   guard_invalid_slicer\   get_slice_lengthr   r   r0   r   for_range_slice_genericr   r   r   rC   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   rD   Tr   !=z0cannot resize extended list slice with step != 1)rp   r   rq   r   r   r\   r0   r   r   r   rF   rG   r   rE   r   rH   r   rR   r   r   r   	for_rangerC   r   r   rW   rX   
ValueErrorr   r   r   )r   r   r   r   destsrcr]   src_sizeZ
avail_sizeZ
size_deltarT   oneZthenZ	otherwise	real_stop	tail_sizedest_offsetloopr!   rZ   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   FrP   z4unsupported del list[start:stop:step] with step != 1)rp   r   rq   r   r   r\   r   r   rF   rG   rR   rE   r   rW   rX   NotImplementedErrorr   rH   r   r   re   rC   r   r0   r   r   r   )r   r   r   r   r   r]   Z	slice_lenr   rZ   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   )rp   r   r0   rH   r   r   r   r   rC   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   Listrp   r0   r   rF   rG   rI   r   
is_neg_intmulr   r   r   r   rC   r   r   rH   r   r!   )r   r   r   r   Zlist_idxZint_idxr   r   multrT   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   )rp   r   r0   r   rF   rG   rI   r   r  r  r   r   r   rC   r   r   rH   r   r   r!   )r   r   r   r   r   r   r  rT   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   )rp   r   r   r   r   r   rE   )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   rp   r0   rE   r   rQ   rR   r   rC   r   Zgeneric_compareoperatoreqr(   r   rS   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	  r0  r%   r%   r&   impl_list_le+     

r2  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  r1  z"impl_list_lt.<locals>.list_lt_implr'  )r  r	  r4  r%   r%   r&   impl_list_lt<  r3  r5  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	  r6  r%   r%   r&   impl_list_geM  r)  r8  c                 C   r$  )Nc                 S   s   || k S r-   r%   r%  r%   r%   r&   list_gt_impl\  r7  z"impl_list_gt.<locals>.list_gt_implr'  )r  r	  r9  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   )
rp   r   r0   rH   r   rF   rG   r   r   r   )r   r   r   r   r   itemr/  r   r%   r%   r&   list_appendd  s   
r<  z
list.clearc                 C   s4   t | ||jd |d }|| tjd |  S r   )rp   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  r7  z!list_copy.<locals>.list_copy_implr%   )r   rB  r%   r%   r&   	list_copyx  s   rC  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!   rF  r%   r%   r&   
list_count  s   rG  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   )rp   r   r0   rH   r   r   r   rC   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   rJ  r%   r%   r&   rJ    s
   rJ  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   r/  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   rK  r%   r%   r&   
list_index  s   rP  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   )rp   r   rJ   rU   r0   r   rF   rG   rH   r   r   r   r   r   )
r   r   r   r   r   r   r!   r/  r   r   r%   r%   r&   list_insert  s   

rQ  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}   )rp   r   r0   r   
guard_zerorY   r   r   rF   rG   rC   rb   r   r   r   r   )r   r   r   r   r   r/  r   r%   r%   r&   list_pop  s   




rT  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}   rR  zpop index out of range)rp   r   rJ   r0   r   rS  rY   r[   rC   r   rF   rG   r   r   rH   r   r   r   )	r   r   r   r   r   r;   r/  r   r   r%   r%   r&   rT    s   


removec                 C   rD  )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!   rV  r%   r%   r&   list_remove  s   rW  reversec                 C   r?  )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   rY  r%   r%   r&   list_reverse	  s   rZ  c                 C   s   | |kS r-   r%   r%  r%   r%   r&   gt  r7  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   rM  r!   OptionalrG   BooleanrL  r   boolr   rN  )rX  ZrtyrZ   r%   r%   r&   _sort_check_reverse"  s   
rb  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   r_  r   rN  r   is_nonelike
Dispatcher)keyrZ   r%   r%   r&   _sort_check_key/  s   

rf  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)re  r%   r&   r!  J      z.ol_list_sort.<locals>.impl.<locals>.<listcomp>Fr   c                    s   g | ]} | qS r%   r%   )r  r   rA  r%   r&   r!  R  ri  r%   )r   re  rX  Z_lsttmpZKEYZsort_bZsort_f)re  r   r&   r  H  s   
zol_list_sort.<locals>.implNF)rf  rb  r   rc  sort_forwardssort_backwardsr   r   rd  arg_sort_forwardsarg_sort_backwards)r   re  rX  r  r%   rk  r&   ol_list_sort9  s   
rq  c                 C   s.   t | tjsdS t| t| ddd}|S )NFc                 S   s   t | }|j||d |S )N)re  rX  )r@  rg  )r   re  rX  r   r%   r%   r&   r  _  s   zol_sorted.<locals>.implrl  )r   r   IterableTyperf  rb  )r   re  rX  r  r%   r%   r&   	ol_sortedV  s   
rs  c                 C   s   |j |j ksJ |S r-   )r(   )r   r   fromtytotyra   r%   r%   r&   list_to_listh  s   rv  Cannot mutate a literal listrH  c                 C      t r-   _banned_error)r   objr%   r%   r&   literal_list_banned_appendv     r|  r   c                 C   rx  r-   ry  )r   r   r%   r%   r&   literal_list_banned_extend{  r}  r~  insertc                 C   rx  r-   ry  )r   r   r{  r%   r%   r&   literal_list_banned_insert  r}  r  c                 C   rx  r-   ry  )r   r!   r%   r%   r&   literal_list_banned_remove  r}  r  r   c                 C   rx  r-   ry  r   r   r%   r%   r&   literal_list_banned_pop  r}  r  clearc                 C   rx  r-   ry  rA  r%   r%   r&   literal_list_banned_clear  r}  r  c                 C   rx  r-   ry  )r   re  rX  r%   r%   r&   literal_list_banned_sort  r}  r  c                 C   rx  r-   ry  rA  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   rN  )r   rh  r   r   rZ   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 rE  r   )r   rh  r   ra   r%   r%   r&   r    s    literal_list_count.<locals>.implr   r   r  )r   rh  r  r%   r%   r&   literal_list_count  s   r  c                 C   r  )Nc                 S   s   | S r-   r%   rA  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  rz  r  r%   r%   r&   literal_list_delitem  s   r  c                 C   s   t | tjrtdd S )Nrw  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   rZ   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%   rA  lr%   r&   <lambda>  s    z"literal_list_len.<locals>.<lambda>)r   r   r  r   rA  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;  ra   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   rt  ru  ra   Zolditemsr   r%   r  r&   literallist_to_literallist  s   
r  rl  )r  )ro   mathr  	functoolsr   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.miscr   Znumba.cpythonr   Znumbar   r'   r*   objectr+   rk   rp   r   r   r@  rr  r   r   r  r   r   ZListIterZBORROWEDr   rC   rL  r   r   Anyr   Z	SliceTyper   delitemr   r   containsr  r   ra  r  truthr  rH   r  iaddr  r  r  imulr  is_r  r  r  r#  ner(  ler2  r\  r5  ger8  r[  r:  r<  r=  rC  rG  r  rJ  r   maxvalrO  rP  rQ  rT  rW  rZ  Zmake_jit_quicksortZrun_quicksortrm  rn  ro  rp  rb  rf  rq  sortedrs  rv  rN  rz  r  r|  r~  r  r  r  r  r  r  Z
_index_endr  r  r  r  r  r  r  r  r%   r%   r%   r&   <module>   s8   $X  	(

	

	






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

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


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