U
    í¾|e!§  ã                   @   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ƒd¨dzd{„ƒZneeoƒd©d|d}„ƒZpeej)ej)ƒd~d„ ƒZqe
 rd€¡Zseejtd�ƒd‚dƒ„ ƒZueejtd„ƒd…d†„ ƒZveejtd‡ƒdˆd‰„ ƒZweejtdhƒdŠd‹„ ƒZxeejtdŒƒdªdŽd�„ƒZyeejtd�ƒd‘d’„ ƒZzeejtdxƒd«d“d”„ƒZ{eejtdkƒd•d–„ ƒZ|ej^j_Z}eejtd^ƒde}fd—d˜„ƒZ~eejtdVƒd™dš„ ƒZeejtdSƒd›dš„ ƒZeej7ƒdœd�„ ƒZ€eej2ƒdždŸ„ ƒZ�eej/ƒd d¡„ ƒZ‚ee(ƒd¢d£„ ƒZƒeej:ƒd¤d¥„ ƒZ„eejtejtƒd¦d§„ ƒZ…d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ÚnrtÚmeminfo_dataÚmeminfoÚget_data_typeÚ
as_pointerÚbitcastÚmake_data_helper)ÚcontextÚbuilderÚ	list_typeÚvalueÚpayload_typeÚpayloadÚptrty© r&   úR/var/www/website-v5/atlas_env/lib/python3.8/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!   Ú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'   r1   ,   s    z_ListPayloadMixin.sizec                 C   s   || j _d S r.   r/   ©r3   r"   r&   r&   r'   r1   0   s    c                 C   s   | j jS r.   )r0   Údirtyr2   r&   r&   r'   r5   4   s    z_ListPayloadMixin.dirtyc                 C   s   | j  d¡S )NÚdata)r0   Ú_get_ptr_by_namer2   r&   r&   r'   r6   8   s    z_ListPayloadMixin.datac                 C   s   t  | j| j|¡S r.   )r   ÚgepÚ_builderr6   ©r3   Úidxr&   r&   r'   Ú_gep<   s    z_ListPayloadMixin._gepc                 C   s&   |   |¡}| j |¡}| j | j|¡S r.   )r<   r9   Ú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   )r9   Úicmp_signedr   ÚConstantÚtypeÚaddr1   Úselect)r3   r;   Úis_negativeÚ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.
        rC   r   ú>=)r9   rD   r   rE   rF   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 5 Q R X | j  d||¡}|j|dd�� | 	||¡ W 5 Q R X | 
|¡S )z/
        Clamp the index in [0, size].
        r   rC   F©ÚlikelyrL   )r9   r   Úalloca_once_valuer   rE   rF   r1   rD   Úif_thenÚstorer=   )r3   r;   r    ÚidxptrÚzeror1   rN   rO   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.
        FrQ   N)r9   rT   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_slicer9   r1   )r3   Úslicer&   r&   r'   r_   r   s    z_ListPayloadMixin.fix_slicec                 C   s   | j j | j| j|¡ dS )zIncref an element valueN)rY   r   Úincrefr9   r)   ©r3   Úvalr&   r&   r'   Úincref_valuey   s    z_ListPayloadMixin.incref_valuec                 C   s   | j j | j| j|¡ dS )zDecref an element valueN)rY   r   Údecrefr9   r)   rb   r&   r&   r'   Údecref_value}   s    z_ListPayloadMixin.decref_valueN)Ú__name__Ú
__module__Ú__qualname__Úpropertyr1   Úsetterr5   r6   r<   rB   rK   rP   rX   r^   r_   rd   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   )rY   r9   Ú_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.   )
rY   r9   rm   Úmake_helperÚ_listr,   Ú	_itemsizern   r)   r>   )r3   r   r    r!   Úlist_valr&   r&   r'   ro   –   s    zListInstance.__init__c                 C   s   | j jS r.   )rm   r)   r2   r&   r&   r'   r)   ž   s    zListInstance.dtypec                 C   s   t | j| j| j| jƒS r.   )r(   rY   r9   rm   rs   r2   r&   r&   r'   r0   ¢   s    zListInstance._payloadc                 C   s   | j jS r.   ©rs   Úparentr2   r&   r&   r'   rw   §   s    zListInstance.parentc                 C   s   || j _d S r.   rv   r4   r&   r&   r'   rw   «   s    c                 C   s
   | j  ¡ S r.   )rs   Ú	_getvaluer2   r&   r&   r'   r"   ¯   s    zListInstance.valuec                 C   s   | j jS r.   )rs   r   r2   r&   r&   r'   r   ³   s    zListInstance.meminfoc                 C   s    | j jr|rtjntj| j_d S r.   )rm   Ú	reflectedr   Útrue_bitÚ	false_bitr0   r5   rb   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   rB   Úzfillr9   rG   rF   r:   r&   r&   r'   Úclear_value»   s    zListInstance.clear_valueTc                 C   sX   |r|   |  |¡¡ |  |¡}| j | j|¡}| j ||¡ |  d¡ |rT|  |¡ d S )NT)	rf   rB   r<   r>   Úas_datar9   rU   r|   rd   )r3   r;   rc   ra   Údecref_old_valuer@   rA   r&   r&   r'   ÚsetitemÂ   s    

zListInstance.setitemc                 C   s:   |   |¡}| j | j|¡}| j ||¡ |r6|  |¡ d S r.   )r<   r>   r€   r9   rU   rd   )r3   r;   rc   ra   r@   rA   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<   rY   Úget_value_typer   ÚintpÚsubÚptrtointr   Úmemsetr   Ú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 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).
        NFrQ   T)r1   Údtorr   )#r…   r   r†   Ú
isinstanceÚintr   rE   r   r   r*   r,   r   rS   rz   Úmuladd_with_overflowrT   rU   r{   r=   r   Z"meminfo_new_varsize_dtor_uncheckedÚget_dtorÚif_elseÚis_nullrs   r   Úget_constant_nullÚpyobjectrw   r0   Ú	allocatedr1   r5   r~   rF   )Úclsr   r    r!   ÚnitemsÚintp_tr#   Úpayload_sizeÚitemsizeÚokr3   Ú	allocsizeÚovfr   Úif_errorÚ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.{}Úlinkonce_odrr   r}   )r‹   rŒ   Ústepr†   )rY   r9   Úmoduler   ÚFunctionTypeÚVoidTyper   Ú	voidptr_tÚget_or_insert_functionÚformatr)   Úis_declarationÚlinkageÚ	IRBuilderÚappend_basic_blockÚargsrl   rm   r1   rF   Úfor_range_slicerB   r   re   Úret_void)r3   r   r    ÚmodÚfntyÚfnÚbase_ptrr$   r†   r;   Ú_rc   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¸   r9   r   r   r©   )r3   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.
        FrQ   )zcannot allocate list)r£   rT   Únot_rZ   r[   Ú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   ra   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 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 )NFrQ   )úcannot resize list)r1   r½   )r   r   r   rm   r*   r   r’   r   rE   rT   rZ   r[   rº   r   Z!meminfo_varsize_realloc_uncheckedrs   r   Úguard_memory_errorr0   r˜   )Únew_allocatedr#   rœ   rŸ   r    r@   ©r    r   r›   r�   r3   r&   r'   Ú_payload_realloc[  s*    
 

ý
ÿþ
ÿz-ListInstance.resize.<locals>._payload_reallocé   r„   rC   ú>FrQ   TN)rY   r9   rF   r,   rm   r0   r˜   r   rE   rD   ÚashrrT   rG   r~   r1   r|   )	r3   Únew_sizerÁ   r˜   ÚtwoZeightÚ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)r<   r   Úraw_memmover9   rt   r|   )r3   Zdest_idxZsrc_idxÚcountÚdest_ptrÚsrc_ptrr&   r&   r'   Úmove�  s    

 ÿzListInstance.moveN)T)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   ”   s8   








/


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.   )rY   r9   rm   rr   Ú_iterrn   Ú
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   rS   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(   rY   r9   rm   rÔ   rÐ   r2   r&   r&   r'   r0   ­  s    
 ÿzListIterInstance._payloadc                 C   s
   | j  ¡ S r.   )rÐ   rx   r2   r&   r&   r'   r"   ³  s    zListIterInstance.valuec                 C   s   | j  | jj¡S r.   )r9   r=   rÐ   rÖ   r2   r&   r&   r'   rÖ   ·  s    zListIterInstance.indexc                 C   s   | j  || jj¡ d S r.   )r9   rU   rÐ   rÖ   r4   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� q0t	| |||j
ƒS )zE
    Build a list of the given type, containing the given items.
    T©ra   )Úlenrq   r»   rÕ   r   r†   r1   Ú	enumerater‚   r   r"   )r   r    r!   Úitemsrš   ÚinstÚirc   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_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è   Úgetiterc                 C   s(   t  | ||j|d ¡}t| ||j|jƒS rÓ   )rÏ   r×   rç   r   r"   ré   r&   r&   r'   Úgetiter_listê  s    rë   Úiternextc           	   	   C   s~   t | ||jd |d ƒ}|j}|j}| d||¡}| |¡ | |¡�. | | |¡¡ | 	||  
tjd¡¡|_W 5 Q R X d S )Nr   rC   r}   )rÏ   r°   rÖ   r1   rD   Ú	set_validrT   Úyield_rB   rG   rÕ   r   r†   )	r   r    rå   r°   ÚresultrÜ   rÖ   rš   Ú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^   rB   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   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   r}   TrØ   )rq   r°   rr   r   Úguard_invalid_slicer_   Úget_slice_lengthr»   rç   r1   r   Úfor_range_slice_genericr‹   rŒ   r¥   rB   rƒ   r   r"   )r   r    rå   r°   rÜ   r`   Úresult_sizerï   Ú	pos_rangeÚ	neg_ranger;   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Â   r}   ú==rÃ   rC   TrØ   ú!=z0cannot resize extended list slice with step != 1)rq   r°   rr   r   r÷   r_   r1   rø   r‡   r   rE   rF   r”   rD   r¥   rG   r‹   rT   rÈ   rÍ   r   Ú	for_rangerB   rÖ   r‚   rZ   r[   Ú
ValueErrorrù   rŒ   rô   )r   r    rå   r°   ÚdestÚsrcr`   Úsrc_sizeZ
avail_sizeZ
size_deltarW   ÚoneÚthenÚ	otherwiseÚ	real_stopÚ	tail_sizeÚdest_offsetÚloopr"   r]   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   r}   rÿ   FrQ   z4unsupported del list[start:stop:step] with step != 1)rq   r°   rr   r   r÷   r_   rø   r   rE   rF   rT   rD   r¥   rZ   r[   ÚNotImplementedErrorr‹   rG   r   r±   rf   rB   r‡   r1   rÍ   rÈ   rô   )r   r    rå   r°   rÜ   r`   Ú	slice_lenr  r]   r‹   r  r;   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ö   )rq   r°   r1   rG   r»   rç   r   r   rB   rÖ   Úcastr)   r‚   r   r"   )r   r    rå   r°   ÚaÚbÚa_sizeÚ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   r}   )r}   r   T©ÚincrØ   )r�   r°   r   ÚListrq   r1   r   rE   rF   rH   r   Ú
is_neg_intÚmulr»   rç   r±   r   rB   rÖ   r‚   rG   r   r"   )r   r    rå   r°   Zlist_idxZint_idxr  r  ÚmultrW   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   r}   Tr(  rØ   )rq   r°   r1   r   rE   rF   rH   r   r+  r,  rÈ   r±   r   rB   rÖ   r‚   rG   r   rç   r"   )r   r    rå   r°   rÜ   r  r-  rW   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›   rD   )r   r    rå   r°   r   r!  ÚmaÚmbr&   r&   r'   Úlist_isý  s
    r3  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 r0  )r°   rq   r1   rD   r   rS   rT   r   rB   rÖ   Úgeneric_compareÚoperatorÚeqr)   r¹   rU   r{   Údo_breakr=   )r   r    rå   r°   ÚatyÚ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  s    rA  c                 C   s   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©rA  )r   r!  rC  r&   r&   r'   Úimpl_list_ne!  s    
rE  c                 C   s   t | |ƒsd 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_impl0  s    z"impl_list_le.<locals>.list_le_implrD  )r   r!  rL  r&   r&   r'   Úimpl_list_le+  s    

rM  c                 C   s   t | |ƒsd 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  rF  rI  r&   r&   r'   Úlist_lt_implA  s    z"impl_list_lt.<locals>.list_lt_implrD  )r   r!  rN  r&   r&   r'   Úimpl_list_lt<  s    

rO  c                 C   s   t | |ƒsd S dd„ }|S )Nc                 S   s   || kS r.   r&   rB  r&   r&   r'   Úlist_ge_implR  s    z"impl_list_ge.<locals>.list_ge_implrD  )r   r!  rP  r&   r&   r'   Úimpl_list_geM  s    
rQ  c                 C   s   t | |ƒsd S dd„ }|S )Nc                 S   s   || k S r.   r&   rB  r&   r&   r'   Úlist_gt_impl\  s    z"impl_list_gt.<locals>.list_gt_implrD  )r   r!  rR  r&   r&   r'   Úimpl_list_gtW  s    
rS  zlist.appendc                 C   s^   t | ||jd |d ƒ}|d }|j}| |t |jd¡¡}| |¡ |j||dd� |  	¡ S rö   )
rq   r°   r1   rG   r   rE   rF   rÈ   r‚   rô   )r   r    rå   r°   rÜ   ÚitemrK  rÅ   r&   r&   r'   Úlist_appendd  s    
rU  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    rV  Úcopyc                 C   s   dd„ }|S )Nc                 S   s   t | ƒS r.   )Úlist©r  r&   r&   r'   Úlist_copy_implz  s    z!list_copy.<locals>.list_copy_implr&   )r  rZ  r&   r&   r'   Ú	list_copyx  s    r[  rÊ   c                 C   s   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"   r]  r&   r&   r'   Ú
list_count€  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 )Nr}   r   TrØ   )rq   r°   r1   rG   rÈ   r   r   rB   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°   ra  r&   r&   r'   ra  ž  s
    ra  rÖ   c                 C   sZ   t |ttjtjfƒs$t d|› �¡‚t |ttjtjfƒsHt 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   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 )Nr   zvalue not in list)rÙ   rG  r  )r  r"   r‹   rŒ   rK  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Œ   rb  r&   r&   r'   Ú
list_index±  s    rg  zlist.insertc           
      C   sš   t | ||jd |d ƒ}| |d ¡}| |¡}|d }|j}t |jd¡}| ||¡}	| 	|	¡ | 
| ||¡|| ||¡¡ |j||ddd� |  ¡ S )Nr   r}   rÂ   TF)ra   r�   )rq   r°   rK   rX   r1   r   rE   rF   rG   rÈ   rÍ   r‡   r‚   rô   )
r   r    rå   r°   rÜ   rÖ   r"   rK  r  rÅ   r&   r&   r'   Úlist_insertË  s    

rh  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_zeror\   r‡   r   rE   rF   rB   rd   r   rÈ   r   rç   )r   r    rå   r°   rÜ   rK  rá   r&   r&   r'   Úlist_popÜ  s    
ÿ



rk  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}   ri  zpop index out of range)rq   r°   rK   r1   r   rj  r\   r^   rB   r   rE   rF   r‡   rÍ   rG   rÈ   r   rç   )	r   r    rå   r°   rÜ   r;   rK  rá   r  r&   r&   r'   rk  ê  s    
ÿ

Ú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)rG  rÙ   r  r  )r  r"   rÝ   r&   r&   r'   Úlist_remove_implÿ  s
    
z%list_remove.<locals>.list_remove_implr&   )r  r"   rm  r&   r&   r'   Úlist_removeü  s    rn  Úreversec                 C   s   dd„ }|S )Nc                 S   s@   t dt| ƒd ƒD ](}| d }| | | |  | |< | |< qd S )Nr   rÂ   r}   )rG  rÙ   )r  r   r!  r&   r&   r'   Úlist_reverse_impl  s    
z'list_reverse.<locals>.list_reverse_implr&   )r  rp  r&   r&   r'   Úlist_reverse	  s    rq  c                 C   s   | |kS r.   r&   rB  r&   r&   r'   Úgt  s    rr  )ÚltT)Ú
is_argsortÚis_list)rt  rs  ru  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   rd  r"   ÚOptionalrF   ÚBooleanrc  r‘   Úboolr   re  )ro  Úrtyr]   r&   r&   r'   Ú_sort_check_reverse"  s    
rz  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   rv  r   re  r   Úis_nonelikeÚ
Dispatcher)Úkeyr]   r&   r&   r'   Ú_sort_check_key/  s    
r~  Ú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&   )r=  Úx)r}  r&   r'   r?  J  s     z.ol_list_sort.<locals>.impl.<locals>.<listcomp>Fr   c                    s   g | ]}ˆ | ‘qS r&   r&   )r=  rÝ   rY  r&   r'   r?  R  s     r&   )r  r}  ro  Ú_lstÚtmp©ÚKEYZsort_bZsort_f)r}  r  r'   r  H  s    
zol_list_sort.<locals>.impl)NF)r~  rz  r   r{  Úsort_forwardsÚsort_backwardsr�   r   r|  Úarg_sort_forwardsÚarg_sort_backwards)r  r}  ro  r  r&   rƒ  r'   Úol_list_sort9  s    
r‰  c                 C   s.   t | tjƒsdS t|ƒ t|ƒ ddd„}|S )NFc                 S   s   t | ƒ}|j||d� |S )N)r}  ro  )rX  r  )rà   r}  ro  r  r&   r&   r'   r  _  s    zol_sorted.<locals>.impl)NF)r�   r   ÚIterableTyper~  rz  )rà   r}  ro  r  r&   r&   r'   Ú	ol_sortedV  s    
r‹  c                 C   s   |j |j kst‚|S r.   )r)   r%  )r   r    ÚfromtyÚtotyrc   r&   r&   r'   Úlist_to_listh  s    rŽ  úCannot mutate a literal listr_  c                 C   s   t ‚d S r.   ©Ú_banned_error)r  Úobjr&   r&   r'   Úliteral_list_banned_appendv  s    r“  rß   c                 C   s   t ‚d S r.   r�  )r  rà   r&   r&   r'   Úliteral_list_banned_extend{  s    r”  Úinsertc                 C   s   t ‚d S r.   r�  )r  rÖ   r’  r&   r&   r'   Úliteral_list_banned_insert€  s    r–  c                 C   s   t ‚d S r.   r�  )r  r"   r&   r&   r'   Úliteral_list_banned_remove…  s    r—  r  éÿÿÿÿc                 C   s   t ‚d S r.   r�  ©r  rÖ   r&   r&   r'   Úliteral_list_banned_popŠ  s    rš  Úclearc                 C   s   t ‚d S r.   r�  rY  r&   r&   r'   Úliteral_list_banned_clear�  s    rœ  c                 C   s   t ‚d S r.   r�  )r  r}  ro  r&   r&   r'   Úliteral_list_banned_sort”  s    r�  c                 C   s   t ‚d S r.   r�  rY  r&   r&   r'   Úliteral_list_banned_reverse™  s    rž  c                 C   s   t | tjƒrd}t |¡‚d S )Nz+list.index is unsupported for literal lists©r�   r   ÚLiteralListr   re  )r  r€  r‹   rŽ   r]   r&   r&   r'   Úliteral_list_indexŸ  s    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  r€  rÊ   rc   r&   r&   r'   r  «  s
    
ú literal_list_count.<locals>.impl©r�   r   r   )r  r€  r  r&   r&   r'   Úliteral_list_count¨  s    r¤  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s   | S r.   r&   rY  r&   r&   r'   r  ¶  s    r¢  r£  )r  r  r&   r&   r'   r¤  ³  s    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 )Nr�  rŸ  )r  rÖ   r"   r&   r&   r'   Úliteral_list_setitem¿  s    r¦  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.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&   rY  ©Úlr&   r'   Ú<lambda>Ñ  ó    z"literal_list_len.<locals>.<lambda>)r�   r   r   rÊ   rY  r&   r¨  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  rT  rc   r&   r&   r'   r  Ö  s    z#literal_list_contains.<locals>.implr£  )r  rT  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   Úunpack_tupleÚzipÚ
make_tuple)r   r    rŒ  r�  rc   ZolditemsrÛ   r&   r°  r'   Úliterallist_to_literallistÝ  s    
ÿr´  )NF)NF)r˜  )NF)†rp   Úmathr5  Ú	functoolsr   Úllvmliter   Ú
numba.corer   r   r   r   Únumba.core.imputilsr   r	   r
   r   r   r   r   Únumba.core.extendingr   r   Ú
numba.miscr   Únumba.cpythonr   Únumbar   r(   r,   Úobjectr-   rl   rq   rÏ   rÞ   rX  rŠ  ræ   rÙ   r*  rè   rë   ÚListIterÚBORROWEDrñ   rB   rc  ró   r‚   ÚAnyrõ   Ú	SliceTyperý   Údelitemr  r  Úcontainsr  r  rx  r  Útruthr  rG   r$  Úiaddr'  r,  r.  Úimulr/  Úis_r3  r6  r<  rA  ÚnerE  ÚlerM  rs  rO  ÚgerQ  rr  rS  rU  rV  r[  r^  r&  ra  r†   Úmaxvalrf  rg  rh  rk  rn  rq  Úmake_jit_quicksortÚrun_quicksortr…  r†  r‡  rˆ  rz  r~  r‰  Úsortedr‹  rŽ  re  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  	(

	
	






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

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


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