U
    í¾|eÚA  ã                   @   sÐ  d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
 ddlmZmZmZ ddlmZmZmZ eeje ej¡ƒdd„ ƒZeejejejƒdd	„ ƒZd
d„ Zeejejejƒdd„ ƒZeejejejƒdd„ ƒZeejejejƒdd„ ƒZ eej!ejejƒdd„ ƒZ"eej#ejejƒdd„ ƒZ$eej%ejejƒdd„ ƒZ&eej'ƒdd„ ƒZ(eej)ƒeej*ƒdd„ ƒƒZ+eej,ƒeej-ƒdd„ ƒƒZ+edej)ƒedej*ƒdd„ ƒƒZ.ed ej/ƒee
j0ƒd!d"„ ƒƒZ1eej2ƒd#d$„ ƒZ3ed%ejejƒd&d'„ ƒZ4eej2ej)ej5ƒeej2ej)ej6ƒeej2ej*ej5ƒeej2ej*ej6ƒd(d)„ ƒƒƒƒZ7ed*ej8ej9ƒed*ej:ej;ƒed*ej:ej<ƒed*ejej;ƒed*ejej<ƒd+d,„ ƒƒƒƒƒZ=eejejƒd-d.„ ƒZ>eejd/ƒd0d1„ ƒZ?eej@ƒd2d3„ ƒZAdS )4z!
Implementation of tuple objects
é    N)Úlower_builtinÚlower_getattr_genericÚ
lower_castÚlower_constantÚiternext_implÚimpl_ret_borrowedÚimpl_ret_untrackedÚRefType)ÚtypingÚtypesÚcgutils)Úoverload_methodÚoverloadÚ	intrinsicc           	      C   s`   g }t |ƒD ].\}}|  |||j| |j| ¡}| |¡ q|  ||jt|ƒ¡}t| ||j|ƒS ©N)Ú	enumerateÚcastÚargsÚreturn_typeÚappendÚ
make_tupleÚtupler   )	ÚcontextÚbuilderÚsigr   ÚnewargsÚiÚargÚcastedÚres© r    úS/var/www/website-v5/atlas_env/lib/python3.8/site-packages/numba/cpython/tupleobj.pyÚnamedtuple_constructor   s    r"   c                    s:   ‡ fdd„|D ƒ\}}|   ˆ |j|| ¡}t| ˆ |j|ƒS )Nc                    s   g | ]}t  ˆ |¡‘qS r    )r   Úunpack_tuple)Ú.0Úx©r   r    r!   Ú
<listcomp>   s     ztuple_add.<locals>.<listcomp>)r   r   r   )r   r   r   r   ÚleftÚrightr   r    r&   r!   Ú	tuple_add   s    r*   c              
   C   s  |j \}}|\}}t |tj¡}	| d¡}
tt|j|jƒƒD ]‚\}\}}| ||¡}| ||¡}|  	|t
j||f||f¡}| |¡�4 |  	||||f||f¡}| ||	¡ | |
¡ W 5 Q R X q<|t|jƒt|jƒƒ}|  tj|¡}| ||	¡ | |
¡ | |
¡ | |	¡S )NZcmp_end)r   r   Úalloca_once_valueÚtrue_bitÚappend_basic_blockr   Úzipr   Úextract_valueÚgeneric_compareÚoperatorÚneÚif_thenÚstoreÚbranchÚlenÚget_constantÚbooleanÚposition_at_endÚload)r   r   Úopr   r   ÚtuÚtvÚuÚvr   Úbbendr   ÚtaÚtbÚaÚbÚ	not_equalÚpredZlen_comparer    r    r!   Útuple_cmp_ordered$   s$    



rG   c                 C   sÀ   |j \}}|\}}t|jƒt|jƒkrD|  tjd¡}t| ||j|ƒS |  tjd¡}tt|j|jƒƒD ]J\}	\}
}| 	||	¡}| 	||	¡}|  
|tj|
|f||f¡}| ||¡}qdt| ||j|ƒS )NFT)r   r6   r   r7   r8   r   r   r   r.   r/   r0   r1   ÚeqÚand_)r   r   r   r   r<   r=   r>   r?   r   r   rA   rB   rC   rD   rF   r    r    r!   Útuple_eq:   s    
rJ   c                 C   s$   |  t| |||ƒ¡}t| ||j|ƒS r   )Únot_rJ   r   r   ©r   r   r   r   r   r    r    r!   Útuple_neI   s    rM   c                 C   s"   t | |tj||ƒ}t| ||j|ƒS r   )rG   r1   Últr   r   rL   r    r    r!   Útuple_ltN   s    rO   c                 C   s"   t | |tj||ƒ}t| ||j|ƒS r   )rG   r1   Úler   r   rL   r    r    r!   Útuple_leS   s    rQ   c                 C   s"   t | |tj||ƒ}t| ||j|ƒS r   )rG   r1   Úgtr   r   rL   r    r    r!   Útuple_gtX   s    rS   c                 C   s"   t | |tj||ƒ}t| ||j|ƒS r   )rG   r1   Úger   r   rL   r    r    r!   Útuple_ge]   s    rU   c                 C   s*   |j  |¡}| ||¡}t| ||| |ƒS )z%
    Fetch a namedtuple's field.
    )ÚfieldsÚindexr/   r   )r   r   ÚtypÚvalueÚattrrW   r   r    r    r!   Únamedtuple_getattrd   s    r[   c                    s,   ‡ ‡‡fdd„|D ƒ}t ˆˆ ˆt ˆ |¡ƒS )z.
    Create a homogeneous tuple constant.
    c                    s   g | ]}ˆ  ˆ ˆj|¡‘qS r    )Úget_constant_genericÚdtype)r$   r?   ©r   r   Útyr    r!   r'   t   s   ÿú%unituple_constant.<locals>.<listcomp>)r   r   Ú
pack_array©r   r   r_   ÚpyvalÚconstsr    r^   r!   Úunituple_constantn   s    ÿ   
ÿre   c                    s0   ‡ ‡‡fdd„t |ƒD ƒ}tˆˆ ˆt ˆ |¡ƒS )z0
    Create a heterogeneous tuple constant.
    c                    s$   g | ]\}}ˆ  ˆ ˆj| |¡‘qS r    )r\   r   )r$   r   r?   r^   r    r!   r'   €   s   ÿr`   )r   r   r   Úpack_structrb   r    r^   r!   re   z   s    ÿ   
ÿÚgetiterc           
      C   sl   |j \}|\}|  |t |¡¡}|  tjd¡}t ||j¡}| 	||¡ ||_
||_| ¡ }	t| ||j|	ƒS )Nr   )r   Úmake_helperr   ÚUniTupleIterr7   Úintpr   Úalloca_onceÚtyper4   rW   r   Ú	_getvaluer   r   )
r   r   r   r   ÚtuptyÚtupÚitervalZindex0Úindexptrr   r    r    r!   Úgetiter_unitupleŠ   s    rr   Úiternextc              	   C   sè   |j \}|\}| j|||d�}|j}|j}	| |	¡}
|  tj|jj	¡}| 
d|
|¡}| |¡ | |¡�v t |jj|jtj¡}t| ||||
gƒ}| jr¬| j ||jj|¡ | |¡ | |
|  tjd¡¡}| ||j¡ W 5 Q R X d S )N)rY   ú<é   )r   rh   r   rW   r:   r7   r   rj   Ú	containerÚcountÚicmp_signedÚ	set_validr3   r
   Ú	signaturer]   Úgetitem_unitupleÚ
enable_nrtÚnrtÚdecrefÚyield_Úaddr4   )r   r   r   r   ÚresultZ	tupitertyZtupiterrp   ro   ÚidxptrÚidxrw   Úis_validÚgetitem_sigZgetitem_outÚnidxr    r    r!   Úiternext_unituple�   s,    


þÿ
r‡   c                    s2   t | tjƒrt |tjƒsdS |j‰ ‡ fdd„}|S )z—
    Overloads BaseTuple getitem to cover cases where constant
    inference and RewriteConstGetitems cannot replace it
    with a static_getitem.
    Nc                    s   | ˆ  S r   r    )ro   rƒ   ©Úidx_valr    r!   Úgetitem_literal_idx_implÈ   s    z5getitem_literal_idx.<locals>.getitem_literal_idx_impl)Ú
isinstancer   Ú	BaseTupleÚIntegerLiteralÚliteral_value)ro   rƒ   rŠ   r    rˆ   r!   Úgetitem_literal_idx¼   s    
ÿr�   Útyped_getitemc              
   C   s:  |j \}}|\}}d}t|ƒdkrf| tj¡� | j |t|¡ W 5 Q R X |  |j	¡}	t
| ||j	|	ƒS | d¡}
| d¡}| ||
¡}| |
¡� | j |t|¡ W 5 Q R X |  |j	¡}|  tj¡}| |¡� | |¡}W 5 Q R X t|jƒD �]}|  tj|¡}| d| ¡}| ||¡ |  tj|j | ¡}| ||¡ | |¡�² | ||¡}| j |j d | |j	¡|j	k}|�r¸|j|d| d�}|  |||j d | |j	¡}| ||¡ n |j|jd| d�}| ||¡ | | ||¡|¡ |  |¡ W 5 Q R X qî| !|¡ | || "¡ ¡}	| #|	¡}	t$| ||j	|	ƒS d S )N©ztuple index out of ranger   ztyped_switch.elseztyped_switch.endztyped_switch.%dzTYPED_VALUE_SLOT%s)Úname)%r   r6   r3   r   r,   Ú	call_convÚreturn_user_excÚ
IndexErrorÚget_constant_nullr   r   r-   ÚswitchÚ
goto_blockÚget_value_typer   ÚvoidptrÚphiÚrangerw   r7   rj   Úadd_caser/   Útyping_contextÚunify_typesÚallocar   r4   rl   Úadd_incomingÚbitcastr5   r9   Ú
as_pointerr:   r   )r   r   r   r   rn   Ú_ro   rƒ   Ú
errmsg_oobr   Úbbelser@   r—   ÚlrttyÚ	voidptrtyÚphinoder   ÚkiÚbbiÚkinrY   ZDOCASTZ
value_slotr   r    r    r!   Úgetitem_typedÎ   sr    

ÿ ÿ


ÿÿÿÿÿÿÿ

r­   c              
   C   sž  |j \}}|\}}d}t|ƒdkrf| tj¡� | j |t|¡ W 5 Q R X |  |j	¡}	t
| ||j	|	ƒS | d¡}
| d¡}| ||
¡}| |
¡� | j |t|¡ W 5 Q R X |  |j¡}| |¡� | |¡}W 5 Q R X t|jƒD ]†}|  tj|¡}| d| ¡}| ||¡ |  tj|j | ¡}| ||¡ | |¡�( | ||¡}| |¡ | ||¡ W 5 Q R X qâ| |¡ |}	|j	|jk�sŠt‚t| ||j	|	ƒS d S )Nr‘   r   zswitch.elsez
switch.endz	switch.%d)r   r6   r3   r   r,   r“   r”   r•   r–   r   r   r-   r—   r˜   r™   r]   r›   rœ   rw   r7   r   rj   r�   r/   r5   r¡   r9   ÚAssertionErrorr   )r   r   r   r   rn   r¤   ro   rƒ   r¥   r   r¦   r@   r—   r§   r©   r   rª   r«   r¬   rY   r    r    r!   r{   #  sJ    

ÿ ÿ


ÿ

r{   Ústatic_getitemc                 C   sæ   |j \}}|\}}t|tƒrh|dk r0|t|ƒ7 }d|  krHt|ƒk sZn td||f ƒ‚| ||¡}nnt|tƒr”t ||¡| }	|  	||j
|	¡}nBt|tjƒrÀ|j}
|j |
¡}| ||¡}ntd||j d f ƒ‚t| ||j
|ƒS )Nr   zcannot index at %d in %szunexpected index %r for %s)r   r‹   Úintr6   r•   r/   Úslicer   r#   r   r   r   ÚLiteralStrKeyDictrŽ   rV   rW   ÚNotImplementedErrorr   )r   r   r   r   rn   Úidxtyro   rƒ   r   Úitemsr‰   Z
idx_offsetr    r    r!   Ústatic_getitem_tupleZ  s&    


ÿr¶   c                    sl   t |tjƒst |tjƒrt‚t|ƒt|ƒkr0t‚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"tuple_to_tuple.<locals>.<listcomp>)	r‹   r   ÚBaseNamedTupler³   r6   r   r#   r.   r   )r   r   ÚfromtyÚtotyÚvalÚolditemsrµ   r    r¹   r!   Útuple_to_tupley  s    
ÿ
ÿr¿   rW   c                 C   s   dd„ }|S )Nc                 S   s2   t t| ƒƒD ]}| | |kr|  S qtdƒ‚d S )Nztuple.index(x): x not in tuple)rœ   r6   Ú
ValueError)ro   rY   r   r    r    r!   Útuple_index_impl�  s    
z%tuple_index.<locals>.tuple_index_implr    )ro   rY   rÁ   r    r    r!   Útuple_index�  s    rÂ   c                 C   s   t | tjƒr| jsdd„ S d S )Nc                 S   s   dS )NFr    ©r%   Úyr    r    r!   Ú<lambda>œ  ó    z$in_seq_empty_tuple.<locals>.<lambda>)r‹   r   ÚTuplerÃ   r    r    r!   Úin_seq_empty_tuple™  s    rÈ   )BÚ__doc__r1   Únumba.core.imputilsr   r   r   r   r   r   r   r	   Ú
numba.corer
   r   r   Únumba.core.extendingr   r   r   ÚNamedTupleClassÚVarArgÚAnyr"   r€   rŒ   r*   rG   rH   rJ   r2   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rº   r[   ÚUniTupleÚNamedUniTuplere   rÇ   Ú
NamedTuplerr   ri   ÚBORROWEDr‡   Úgetitemr�   r­   rj   Úuintpr{   r²   ÚStringLiteralÚLiteralListr�   ÚSliceLiteralr¶   r¿   rÂ   ÚcontainsrÈ   r    r    r    r!   Ú<module>   sp   (








	





T3


