U
    iâËd³`  ã                   @   s4  d dl Z d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZmZmZ d dlmZmZmZ d dlZe  dd¡Ze  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d „ Z"d!d"„ Z#d#d$„ Z$d%d&„ Z%d'd(„ Z&d)d*„ Z'd+d,„ Z(d-d.„ Z)d/d0„ Z*d1d2„ Z+d3d4„ Z,d5d6„ Z-d7d8„ Z.d9d:„ Z/d;d<„ Z0d=d>„ Z1G d?d@„ d@ejƒZ2G dAdB„ dBejƒZ3G dCdD„ dDeƒZ4G dEdF„ dFeƒZ5G dGdH„ dHeƒZ6G dIdJ„ dJeeƒZ7G dKdL„ dLeeƒZ8G dMdN„ dNeeƒZ9G dOdP„ dPeƒZ:G dQdR„ dReƒZ;G dSdT„ dTeƒZ<e=dUk�r0e >¡  dS )Vé    N)Úcompile_isolated)ÚnjitÚjitÚtypeofÚ	literally)ÚtypesÚerrorsÚutils)ÚTestCaseÚMemoryLeakMixinÚtagÚRect©ÚwidthÚheightÚPoint)ÚxÚyÚzÚPoint2ÚEmpty© c                 C   s   | |fS ©Nr   ©ÚaÚbr   r   úP/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_tuples.pyÚtuple_return_usecase   s    r   c                 C   s   | \}}|S r   r   ©Útupr   r   r   r   r   Útuple_first   s    r    c                 C   s   | \}}|S r   r   r   r   r   r   Útuple_second   s    r!   c                 C   s   | | S r   r   ©r   Úidxr   r   r   Útuple_index    s    r$   c                 C   s   | d S )Néþÿÿÿr   ©r   r   r   r   Útuple_index_static#   s    r'   c                 C   s   | dd… S )Né   éÿÿÿÿr   r&   r   r   r   Útuple_slice2'   s    r*   c                 C   s   | dd d… S )Nr(   é   r   r&   r   r   r   Útuple_slice3*   s    r,   c                 C   s   t | ƒS r   ©Úlenr&   r   r   r   Úlen_usecase-   s    r/   c                 C   s   | | S r   r   r   r   r   r   Úadd_usecase0   s    r0   c                 C   s   | |kS r   r   r   r   r   r   Ú
eq_usecase3   s    r1   c                 C   s   | |kS r   r   r   r   r   r   Ú
ne_usecase6   s    r2   c                 C   s   | |kS r   r   r   r   r   r   Ú
gt_usecase9   s    r3   c                 C   s   | |kS r   r   r   r   r   r   Ú
ge_usecase<   s    r4   c                 C   s   | |k S r   r   r   r   r   r   Ú
lt_usecase?   s    r5   c                 C   s   | |kS r   r   r   r   r   r   Ú
le_usecaseB   s    r6   c                 C   s   | |kS r   r   r   r   r   r   Ú
in_usecaseE   s    r7   c                 C   s   t | ƒ| rdndfS )Né   r+   )Úboolr&   r   r   r   Úbool_usecaseH   s    r:   c                 C   s   | j | j| jfS r   ©r   r   r   r&   r   r   r   Úgetattr_usecaseK   s    r<   c                 C   s   t | ||ƒS r   ©r   ©r   r   Úcr   r   r   Ú
make_pointN   s    r@   c                 C   s   t ||| d�S )Nr;   r=   r>   r   r   r   Úmake_point_kwsQ   s    rA   c                 C   s8   t tt| ƒƒt | d ¡ƒ}t|t|jƒt|jƒƒ}|S ©Nr(   )	r   ÚlistÚrangeÚnpZzerosr   r.   r   r   )ÚnÚrÚpr   r   r   Úmake_point_nrtT   s    rI   c                 G   s   t | ƒ|Ž S r   )Útype)r   Úargsr   r   r   Útype_usecaseZ   s    rL   c                 C   s   | S r   r   r&   r   r   r   Úidentity]   s    rM   c                 C   s
   |   |¡S r   )Úindex)r   Úvaluer   r   r   Úindex_method_usecase`   s    rP   c                  C   s,   g g g df\} }}}|   d¡ |  d¡ d S )Ng        r(   )Úappend)r   r   r?   Údr   r   r   Útuple_unpack_static_getitem_errc   s    

rS   c                   @   s   e Zd Zdd„ ZdS )ÚTestTupleLengthErrorc              	   C   sR   t dd„ ƒ}|  tj¡�}ttdƒƒ}||ƒ W 5 Q R X d}|  |t|jƒ¡ d S )Nc                 S   s   t | ƒS r   r-   r&   r   r   r   Úeattuplep   s    z>TestTupleLengthError.test_tuple_length_error.<locals>.eattupleié  z,Tuple 'tup' length must be smaller than 1000)	r   ÚassertRaisesr   ÚUnsupportedErrorÚtuplerD   ÚassertInÚstrÚ	exception)ÚselfrU   Úraisesr   Úexpectedr   r   r   Útest_tuple_length_errorm   s    
z,TestTupleLengthError.test_tuple_length_errorN)Ú__name__Ú
__module__Ú__qualname__r_   r   r   r   r   rT   k   s   rT   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestTupleTypeNotIterablezA
    issue 4369
    raise an error if 'type' is not iterable
    c              	   C   s<   |   tj¡�}t tjd¡ W 5 Q R X |  dt|jƒ¡ d S )NrH   ú Argument 'types' is not iterable)	rV   r   ÚTypingErrorr   Ú
NamedTupleÚuint32rY   rZ   r[   ©r\   r]   r   r   r   Útest_namedtuple_types_exception€   s    þz8TestTupleTypeNotIterable.test_namedtuple_types_exceptionc              	   C   s:   |   tj¡�}t tj¡ W 5 Q R X |  dt|jƒ¡ d S )Nrd   )	rV   r   re   r   ÚTuplerg   rY   rZ   r[   rh   r   r   r   Útest_tuple_types_exceptionˆ   s    þz3TestTupleTypeNotIterable.test_tuple_types_exceptionN)r`   ra   rb   Ú__doc__ri   rk   r   r   r   r   rc   {   s   rc   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestTupleReturnc                 C   sl   t  t jdd¡}tt||fƒ}tjddd� }}| ||¡\}}|  ||¡ |  ||¡ ~~|  ||¡ d S )Nr(   ÚCé   Úfloat64)Zdtype)	r   ZArrayrp   r   r   rE   ÚarangeÚentry_pointÚassertPreciseEqual)r\   ZarytyÚcresr   r   ÚraÚrbr   r   r   Útest_array_tuple“   s    z TestTupleReturn.test_array_tuplec                 C   sH   t j}tt||fƒ}d }}| ||¡\}}|  ||¡ |  ||¡ d S rB   )r   Úfloat32r   r   rr   ÚassertEqual)r\   Zscalartyrt   r   r   ru   rv   r   r   r   Útest_scalar_tuple�   s    z!TestTupleReturn.test_scalar_tuplec           
      C   s®   g }g }|  tjtjf¡ |  d¡ |  tjtjf¡ |  d¡ |  tjtjf¡ |  d¡ t||ƒD ]B\\}}\}}tt||fƒ}| 	||¡\}}	|  
||	f||f¡ qfd S )N©r(   r+   )g      ò?g      Ð?)iÏ  g      à?)rQ   r   Úint32Úint64rx   rp   Úzipr   r   rr   rs   )
r\   ZalltypesZ	allvaluesÚtaÚtbr   r   rt   ru   rv   r   r   r   Útest_hetero_tuple¥   s    


z!TestTupleReturn.test_hetero_tupleN)r`   ra   rb   rw   rz   r�   r   r   r   r   rm   ‘   s   
rm   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestTuplePassingc                 C   sN   t  t jd¡}tt|fƒ}tt|fƒ}|  | d¡d¡ |  | d¡d¡ d S )Nr+   ©é   ro   r„   ro   )r   ÚUniTupler|   r   r    r!   rs   rr   ©r\   Ú
tuple_typeZcr_firstZ	cr_secondr   r   r   Útest_unitupleº   s
    zTestTuplePassing.test_unituplec                 C   sR   t  t jt jf¡}tt|fƒ}tt|fƒ}|  | d¡d¡ |  | d¡d¡ d S )N)ì            ç      ø?r‰   rŠ   )	r   rj   r}   rx   r   r    r!   rs   rr   r†   r   r   r   r�   Á   s
    z"TestTuplePassing.test_hetero_tuplec              	   C   sP   t  t jd¡}tt|fƒ}|  t¡�}| d¡ W 5 Q R X |  t	|j
ƒd¡ d S )Nr+   ©r„   ro   é   z8size mismatch for tuple, expected 2 element(s) but got 3)r   r…   r|   r   r    rV   Ú
ValueErrorrr   ry   rZ   r[   )r\   r‡   Úcrr]   r   r   r   Útest_size_mismatchÈ   s    ÿz#TestTuplePassing.test_size_mismatchN)r`   ra   rb   rˆ   r�   r�   r   r   r   r   r‚   ¸   s   r‚   c                   @   sŒ   e Z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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"ÚTestOperationsc                 C   s\   t }t|t tjtjf¡gƒ}|  | d¡d¡ t|t tjd¡gƒ}|  | d¡d¡ d S )Nrƒ   r+   r8   r‹   )	r/   r   r   rj   r}   rx   rs   rr   r…   )r\   ÚpyfuncrŽ   r   r   r   Útest_lenÔ   s    ÿÿzTestOperations.test_lenc                 C   s@   dd„ }t |ƒ}d}tt|ƒƒD ]}|  |||ƒ|| ¡ q d S )Nc                 S   s   t |ƒ}| | S r   )r   r"   r   r   r   r‘   ß   s    z1TestOperations.test_index_literal.<locals>.pyfunc)r„   gÍÌÌÌÌÌ@Zsss)r   rD   r.   rs   )r\   r‘   Úcfuncr   Úir   r   r   Útest_index_literalÝ   s
    z!TestOperations.test_index_literalc              	   C   sR  t }t|t tjd¡tjgƒ}d}tt|ƒƒD ]}|  | ||¡|| ¡ q.tt|ƒd ƒD ] }|  | || ¡||  ¡ q\|  	t
¡�}| |t|ƒ¡ W 5 Q R X |  dt|jƒ¡ |  	t
¡�}| |t|ƒd  ¡ W 5 Q R X |  dt|jƒ¡ t|t tjd¡tjgƒ}|  	t
¡�}| dd¡ W 5 Q R X |  dt|jƒ¡ t|t tjd¡tjgƒ}tt|ƒƒD ]$}|  | |t |¡¡|| ¡ �qht}t tjd¡t tjtjtjtjf¡fD ],}t||fƒ}d}|  | |¡||ƒ¡ �qºt tjd¡}|  ¡ � t||fƒ}W 5 Q R X t}|  ¡ �}t|dƒ}W 5 Q R X d	}|  |t|jƒ¡ d S )
Nr8   )r„   r8   rŒ   r(   ztuple index out of ranger   r   r„   )r„   r8   é*   rŒ   zUCannot infer the type of variable 'c', have imprecise type: list(undefined)<iv=None>.)r$   r   r   r…   r}   rD   r.   rs   rr   rV   Ú
IndexErrorry   rZ   r[   Úuintpr'   rj   r|   ZassertTypingErrorrS   rY   )r\   r‘   rŽ   r   r”   r]   ÚtypÚmsgr   r   r   Ú
test_indexè   sR    ÿ ÿÿ"ÿ

zTestOperations.test_indexc                 C   s~   t }t|tjt tjd¡gƒ}d}tdƒD ]}|  | ||¡|||ƒ¡ q*t|tjt g ¡gƒ}|  | dd¡|ddƒ¡ d S )Nr8   )r„   r(   ro   ro   r(   r   )	r7   r   r   r}   r…   rD   rs   rr   rj   )r\   r‘   rŽ   r   r”   r   r   r   Útest_in  s    ÿzTestOperations.test_inc                 C   sl   d}t |t tjd¡gƒ}|  | |¡||ƒ¡ t |t tjtjtjtjf¡gƒ}|  | |¡||ƒ¡ d S )N)r„   ro   rŒ   é   r„   )r   r   r…   r}   rs   rr   rj   r|   )r\   r‘   r   rŽ   r   r   r   Úcheck_slice)  s    ÿþzTestOperations.check_slicec                 C   s   |   t¡ d S r   )rž   r*   ©r\   r   r   r   Útest_slice23  s    zTestOperations.test_slice2c                 C   s   |   t¡ d S r   )rž   r,   rŸ   r   r   r   Útest_slice36  s    zTestOperations.test_slice3c                 C   s”   t }t|t tjtjf¡gƒ}d}|  |j|Ž ||Ž ¡ t|t tjd¡gƒ}d}|  |j|Ž ||Ž ¡ t|t d¡gƒ}|  | d¡|dƒ¡ d S )N)rƒ   r8   )r‹   r   )	r:   r   r   rj   r}   r|   rs   rr   r…   )r\   r‘   rŽ   rK   r   r   r   Ú	test_bool9  s    ÿÿ
ÿzTestOperations.test_boolc           
      C   s¢   t }t d¡dft tjd¡dft tjd¡dft tjtjf¡dfg}t ||¡D ]H\\}}\}}t	|||fƒ}|||ƒ}| 
||¡}	| j|	|||fd� qTd S )Nr   r   r(   )r–   )r8   g      @)rš   )r0   r   rj   r…   r|   r}   rx   Ú	itertoolsÚproductr   rr   rs   )
r\   r‘   Zsamplesr   r   r€   r   rŽ   r^   Úgotr   r   r   Útest_addG  s    ý
zTestOperations.test_addc           	         sº   ‡ fdd„}t  t jt jf¡t  t jd¡g}t ||¡D ]2\}}t|||fƒ}|j	}dD ]}||||ƒ qXq8t  t jt jf¡t  t jd¡g}t|t
|ƒƒ}|j	}dD ]}||||ƒ q¤d S )Nc                    s    ˆ   ||Ž | |Ž d|f ¡ d S ©Nzmismatch for arguments %s©ÚassertIs©r‘   r“   rK   rŸ   r   r   ÚeqU  s    ÿz(TestOperations._test_compare.<locals>.eqr+   ©)rƒ   rƒ   )rƒ   ©r„   rŒ   )r­   rƒ   )rƒ   )ro   r„   r8   ©)rƒ   r‹   )rƒ   )r„   r„   rŒ   )rƒ   )r„   rŒ   r�   )r   rj   r}   rx   r…   r|   r£   r¤   r   rr   rX   )	r\   r‘   r«   Zargtypesr   r€   rŽ   r“   rK   r   rŸ   r   Ú_test_compareT  s     ÿÿzTestOperations._test_comparec                 C   s   |   t¡ d S r   ©r¯   r1   rŸ   r   r   r   Útest_eqn  s    zTestOperations.test_eqc                 C   s   |   t¡ d S r   ©r¯   r2   rŸ   r   r   r   Útest_neq  s    zTestOperations.test_nec                 C   s   |   t¡ d S r   ©r¯   r3   rŸ   r   r   r   Útest_gtt  s    zTestOperations.test_gtc                 C   s   |   t¡ d S r   ©r¯   r4   rŸ   r   r   r   Útest_gew  s    zTestOperations.test_gec                 C   s   |   t¡ d S r   ©r¯   r5   rŸ   r   r   r   Útest_ltz  s    zTestOperations.test_ltc                 C   s   |   t¡ d S r   ©r¯   r6   rŸ   r   r   r   Útest_le}  s    zTestOperations.test_leN)r`   ra   rb   r’   r•   r›   rœ   rž   r    r¡   r¢   r¦   r¯   r±   r³   rµ   r·   r¹   r»   r   r   r   r   r�   Ò   s    	5
r�   c                   @   s”   e Z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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 )$ÚTestNamedTuplec                    s,   ‡ fdd„}|t ddƒƒ |t ddƒƒ d S )Nc                    s4   t tfD ]&}tdd�|ƒ}ˆ  || ƒ|| ƒ¡ qd S ©NT©Znopython)r    r!   r   rs   ©rH   r‘   r“   rŸ   r   r   Úcheck„  s    z)TestNamedTuple.test_unpack.<locals>.checkr„   ro   ç      @©r   ©r\   rÀ   r   rŸ   r   Útest_unpackƒ  s    zTestNamedTuple.test_unpackc                    sL   ‡ fdd„}|t ddƒƒ |tdddƒƒ |t ddƒƒ |tdddƒƒ d S )Nc                    s*   t }tdd�|ƒ}ˆ  || ƒ|| ƒ¡ d S r½   )r/   r   rs   r¿   rŸ   r   r   rÀ   �  s    z&TestNamedTuple.test_len.<locals>.checkr„   ro   rŒ   rÁ   ù              @)r   r   rÃ   r   rŸ   r   r’   Ž  s
    zTestNamedTuple.test_lenc                 C   s|   t }tdd�|ƒ}tdddƒ}tt|ƒƒD ]}|  |||ƒ|||ƒ¡ q*tt|ƒƒD ]"}|  ||t |¡ƒ|||ƒ¡ qTd S )NTr¾   r„   ro   rŒ   )r$   r   r   rD   r.   rs   r   r˜   )r\   r‘   r“   rH   r”   r   r   r   r›   ›  s    zTestNamedTuple.test_indexc                    s6   ‡ fdd„}|t ddƒƒ |t ddƒƒ |tƒ ƒ d S )Nc                    s*   t }tdd�|ƒ}ˆ  || ƒ|| ƒ¡ d S r½   )r:   r   rs   r¿   rŸ   r   r   rÀ   ¨  s    z'TestNamedTuple.test_bool.<locals>.checkr„   ro   rÁ   )r   r   rÃ   r   rŸ   r   r¢   §  s    zTestNamedTuple.test_boolc                    sj   ‡ fdd„}t dd�|ƒ}dD ] \}}|||t|Ž t|Ž fƒ qdD ] \}}|||t|Ž t|Ž fƒ qDd S )Nc                    s    ˆ   ||Ž | |Ž d|f ¡ d S r§   r¨   rª   rŸ   r   r   r«   ´  s    ÿz(TestNamedTuple._test_compare.<locals>.eqTr¾   r¬   r®   )r   r   r   )r\   r‘   r«   r“   r   r   r   rŸ   r   r¯   ³  s    zTestNamedTuple._test_comparec                 C   s   |   t¡ d S r   r°   rŸ   r   r   r   r±   Ç  s    zTestNamedTuple.test_eqc                 C   s   |   t¡ d S r   r²   rŸ   r   r   r   r³   Ê  s    zTestNamedTuple.test_nec                 C   s   |   t¡ d S r   r´   rŸ   r   r   r   rµ   Í  s    zTestNamedTuple.test_gtc                 C   s   |   t¡ d S r   r¶   rŸ   r   r   r   r·   Ð  s    zTestNamedTuple.test_gec                 C   s   |   t¡ d S r   r¸   rŸ   r   r   r   r¹   Ó  s    zTestNamedTuple.test_ltc                 C   s   |   t¡ d S r   rº   rŸ   r   r   r   r»   Ö  s    zTestNamedTuple.test_lec                 C   s<   t }tdd�|ƒ}dD ] }t|Ž }|  ||ƒ||ƒ¡ qd S ©NTr¾   )r‹   ©r„   rÁ   rÅ   )r<   r   r   rs   )r\   r‘   r“   rK   rH   r   r   r   Útest_getattrÙ  s
    zTestNamedTuple.test_getattrc                    s    ‡ fdd„}|t ƒ |tƒ d S )Nc                    sL   t dd�| ƒ}dD ]4}| |Ž }||Ž }ˆ  t|ƒt|ƒ¡ ˆ  ||¡ qd S rÆ   )r   r©   rJ   rs   )r‘   r“   rK   r^   r¥   rŸ   r   r   rÀ   â  s    z,TestNamedTuple.test_construct.<locals>.check)r@   rA   rÃ   r   rŸ   r   Útest_constructá  s    zTestNamedTuple.test_constructc           	      C   sx   t }tdd�|ƒ}ddg}t ||¡D ]L\}}t|Ž }||f|žŽ }||f|žŽ }|  t|ƒt|ƒ¡ |  ||¡ q&d S )NTr¾   r‹   rÇ   )rL   r   r£   r¤   r   r©   rJ   rs   )	r\   r‘   r“   Z
arg_tuplesZtup_argsrK   r   r^   r¥   r   r   r   Ú	test_typeí  s    zTestNamedTuple.test_typec                    sh   t dd�dd„ ƒ‰ t dd�‡ fdd„ƒ}|ddƒ}|  |tddd	�¡ |dd
ƒ}|  |tddd	�¡ d S )NTr¾   c                 S   s
   t | dƒS )Né¿þÿÿrÂ   )rO   r   r   r   ÚData1ü  s    z6TestNamedTuple.test_literal_unification.<locals>.Data1c                    s    |dkrˆ | ƒ}n
t | |ƒ}|S )Nr   rÂ   )r”   ÚjÚresult©rÌ   r   r   Úcall   s    

z5TestNamedTuple.test_literal_unification.<locals>.callé{   i)  r   r   rË   ©r   ry   r   )r\   rÐ   rG   r   rÏ   r   Útest_literal_unificationú  s    


z'TestNamedTuple.test_literal_unificationc                 C   s0   t dd�dd„ ƒ}|ƒ }|  |tddd�¡ d S )NTr¾   c                   S   s
   t ddƒS )Né
   Ú
somestringrÂ   r   r   r   r   Úfoo  s    z7TestNamedTuple.test_string_literal_in_ctor.<locals>.foorÔ   rÕ   r   rÒ   )r\   rÖ   rG   r   r   r   Útest_string_literal_in_ctor  s    
z*TestNamedTuple.test_string_literal_in_ctorc                 C   sæ   t dd�dd„ ƒ}d}||ƒ}|  ||¡ tdddƒ}||ƒ}|  ||¡ |  t|jƒd¡ |  |jd	 jd	 t|ƒ¡ |  |jd jd	 t|ƒ¡ tdddƒ}||ƒ}|  ||¡ |  t|jƒd¡ |  |jd jd	 t|ƒ¡ d S )
NTr¾   c                 S   s   | S r   r   )r   r   r   r   rÖ     s    z4TestNamedTuple.test_dispatcher_mistreat.<locals>.foo©r(   r+   r8   r(   r+   r8   r   )r   ry   r   r.   Znopython_signaturesrK   r   r   )r\   rÖ   Zin1Zout1Zin2Zout2Zin3Zout3r   r   r   Útest_dispatcher_mistreat  s     
z'TestNamedTuple.test_dispatcher_mistreatN)r`   ra   rb   rÄ   r’   r›   r¢   r¯   r±   r³   rµ   r·   r¹   r»   rÈ   rÉ   rÊ   rÓ   r×   rÙ   r   r   r   r   r¼   �  s"   
r¼   c                   @   s   e Zd Zdd„ ZdS )ÚTestTupleNRTc                 C   sP   dd„ }t dd�|ƒ}d}||ƒ\}}||ƒ\}}tj ||¡ |  ||¡ d S )Nc                 S   s   t  d¡}|f| f S )Nr8   )rE   rq   )r   r   r   r   r   r‘   8  s    
z+TestTupleNRT.test_tuple_add.<locals>.pyfuncTr¾   rÑ   )r   rE   ÚtestingZassert_equalry   )r\   r‘   r“   r   Zexpect_aZexpect_xZgot_aZgot_xr   r   r   Útest_tuple_add7  s    zTestTupleNRT.test_tuple_addN)r`   ra   rb   rÜ   r   r   r   r   rÚ   6  s   rÚ   c                   @   s   e Zd Zdd„ ZdS )ÚTestNamedTupleNRTc                 C   sP   t }tdd�|ƒ}dD ]4}||ƒ}||ƒ}|  t|ƒt|ƒ¡ |  ||¡ qd S )NTr¾   )r8   r   )rI   r   r©   rJ   rs   )r\   r‘   r“   Úargr^   r¥   r   r   r   Útest_returnF  s    zTestNamedTupleNRT.test_returnN)r`   ra   rb   rß   r   r   r   r   rÝ   D  s   rÝ   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestConversionsz8
    Test implicit conversions between tuple types.
    c                 C   s0   t }t||f|ƒ}|j}||ƒ}|  ||¡ d S r   )rM   r   rr   ry   )r\   ÚfromtyZtotyÚvalr‘   rŽ   r“   Úresr   r   r   Úcheck_conversionW  s
    z TestConversions.check_conversionc              	   C   s¼   | j }t tjd¡}||t tjd¡dƒ ||t tjtjf¡dƒ t tjd¡}t d¡}|||dƒ |||dƒ |  tj	¡�}||t tjf¡dƒ W 5 Q R X d}|  
|t|jƒ¡ d S )Nr+   rƒ   r   r   z?No conversion from UniTuple(int32 x 2) to UniTuple(float32 x 1))rä   r   r…   r|   rx   rj   Zint16rV   r   re   rY   rZ   r[   )r\   rÀ   rá   ZatyZbtyr]   rš   r   r   r   Útest_conversions^  s    
 z TestConversions.test_conversionsN)r`   ra   rb   rl   rä   rå   r   r   r   r   rà   R  s   rà   c                   @   s   e Zd Zdd„ ZdS )ÚTestMethodsc              	   C   s^   t }tdd�|ƒ}|  |ddƒd¡ |  t¡�}|ddƒ W 5 Q R X d}|  |t|jƒ¡ d S )NTr¾   rØ   r+   r(   r„   ztuple.index(x): x not in tuple)rP   r   ry   rV   r�   rZ   r[   )r\   r‘   r“   r]   rš   r   r   r   r›   p  s    zTestMethods.test_indexN)r`   ra   rb   r›   r   r   r   r   ræ   n  s   ræ   c                   @   sn   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
 ejdk d¡dd„ ƒZdd„ Zdd„ ZdS )ÚTestTupleBuildc                    s    ‡ fdd„}|dƒ |dƒ d S )Nc                    s.   dd„ }t dd�|ƒ}ˆ  || ƒ|| ƒ¡ d S )Nc                 S   s   d| ˜S ©Nr(   )r(   r   ©r   r   r   r   Ú<lambda>  ó    zATestTupleBuild.test_build_unpack.<locals>.check.<locals>.<lambda>Tr¾   ©r   rs   r¿   rŸ   r   r   rÀ   ~  s    z/TestTupleBuild.test_build_unpack.<locals>.checkrƒ   ©r„   rÁ   r   rÃ   r   rŸ   r   Útest_build_unpack}  s    z TestTupleBuild.test_build_unpackc                    s    ‡ fdd„}|dƒ |dƒ d S )Nc                    s.   dd„ }t dd�|ƒ}ˆ  || ƒ|| ƒ¡ d S )Nc                 S   s   | ˜S r   r   ré   r   r   r   rê   ‹  rë   zMTestTupleBuild.test_build_unpack_assign_like.<locals>.check.<locals>.<lambda>Tr¾   rì   r¿   rŸ   r   r   rÀ   Š  s    z;TestTupleBuild.test_build_unpack_assign_like.<locals>.checkrƒ   rí   r   rÃ   r   rŸ   r   Útest_build_unpack_assign_likeˆ  s    z,TestTupleBuild.test_build_unpack_assign_likec              	      s‚   ‡ fdd„}ˆ   tj¡�}|ddgƒ W 5 Q R X tjdkrhd}ˆ  |t|jƒ¡ d}ˆ  |t|jƒ¡ nd}ˆ  |t|jƒ¡ d S )	Nc                    s.   dd„ }t dd�|ƒ}ˆ  || ƒ|| ƒ¡ d S )Nc                 S   s   | ˜S r   r   ré   r   r   r   rê   —  rë   zZTestTupleBuild.test_build_unpack_fail_on_list_assign_like.<locals>.check.<locals>.<lambda>Tr¾   rì   r¿   rŸ   r   r   rÀ   –  s    zHTestTupleBuild.test_build_unpack_fail_on_list_assign_like.<locals>.checkr„   ro   )r8   é   zNo implementation of functionztuple(reflected list(z6Only tuples are supported when unpacking a single item)rV   r   re   r	   Ú	PYVERSIONrY   rZ   r[   )r\   rÀ   r]   Zmsg1Zmsg2rš   r   rŸ   r   Ú*test_build_unpack_fail_on_list_assign_like”  s    
z9TestTupleBuild.test_build_unpack_fail_on_list_assign_likec                    s    ‡ fdd„}|dƒ |dƒ d S )Nc                    s.   dd„ }t dd�|ƒ}ˆ  || ƒ|| ƒ¡ d S )Nc                 S   s   d| d| ˜S )Nr(   r{   )r(   )r{   r   ré   r   r   r   rê   ¯  rë   zFTestTupleBuild.test_build_unpack_more.<locals>.check.<locals>.<lambda>Tr¾   rì   r¿   rŸ   r   r   rÀ   ®  s    z4TestTupleBuild.test_build_unpack_more.<locals>.checkrƒ   rí   r   rÃ   r   rŸ   r   Útest_build_unpack_more­  s    z%TestTupleBuild.test_build_unpack_morec                    s    ‡ fdd„}|dƒ |dƒ d S )Nc                    s>   t dd„ ƒ‰ ‡ fdd„}t dd�|ƒ}ˆ || ƒ|| ƒ¡ d S )Nc                  W   s   | S r   r   ©rK   r   r   r   Úinnerº  s    zCTestTupleBuild.test_build_unpack_call.<locals>.check.<locals>.innerc                    s   ˆ d| žŽ S rè   r   ré   ©rõ   r   r   rê   ½  rë   zFTestTupleBuild.test_build_unpack_call.<locals>.check.<locals>.<lambda>Tr¾   rì   r¿   rŸ   rö   r   rÀ   ¹  s
    
z4TestTupleBuild.test_build_unpack_call.<locals>.checkrƒ   rí   r   rÃ   r   rŸ   r   Útest_build_unpack_call¸  s    	z%TestTupleBuild.test_build_unpack_callc                    s    ‡ fdd„}|dƒ |dƒ d S )Nc                    s>   t dd„ ƒ‰ ‡ fdd„}t dd�|ƒ}ˆ || ƒ|| ƒ¡ d S )Nc                  W   s   | S r   r   rô   r   r   r   rõ   È  s    zHTestTupleBuild.test_build_unpack_call_more.<locals>.check.<locals>.innerc                    s   ˆ d| d| žŽ S )Nr(   r{   )r(   r   ré   rö   r   r   rê   Ë  rë   zKTestTupleBuild.test_build_unpack_call_more.<locals>.check.<locals>.<lambda>Tr¾   rì   r¿   rŸ   rö   r   rÀ   Ç  s
    
z9TestTupleBuild.test_build_unpack_call_more.<locals>.checkrƒ   rí   r   rÃ   r   rŸ   r   Útest_build_unpack_call_moreÆ  s    	z*TestTupleBuild.test_build_unpack_call_morec                    s:   ‡ fdd„}|dd„ dƒ |dd„ dƒ |dd„ d	ƒ d S )
Nc                    s&   t dd�| ƒ}ˆ  ||ƒ| |ƒ¡ d S r½   rì   )r‘   rÞ   r“   rŸ   r   r   rÀ   Õ  s    z4TestTupleBuild.test_tuple_constructor.<locals>.checkc                 S   s   t ƒ S r   ©rX   )Ú_r   r   r   rê   Ú  rë   z7TestTupleBuild.test_tuple_constructor.<locals>.<lambda>r   c                 S   s   t | ƒS r   rù   ré   r   r   r   rê   Ü  rë   rƒ   c                 S   s   t | ƒS r   rù   ré   r   r   r   rê   Þ  rë   rí   r   rÃ   r   rŸ   r   Útest_tuple_constructorÔ  s    z%TestTupleBuild.test_tuple_constructor)r8   é	   zneeds Python 3.9+c              	   C   sD   t dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X d}|  |t|jƒ¡ d S )Nc                  S   s   d} d}| d r|nd˜S )N©r(   )r8   r+   r„   r   )ro   rŒ   r   r   r   r   r   rÖ   ä  s    z<TestTupleBuild.test_unpack_with_predicate_fails.<locals>.fooz&op_LIST_EXTEND at the start of a block)r   rV   r   rW   rY   rZ   r[   )r\   rÖ   r]   rš   r   r   r   Ú test_unpack_with_predicate_failsà  s    
z/TestTupleBuild.test_unpack_with_predicate_failsc                    s   ‡ fdd„}|dƒ d S )Nc                    s.   dd„ }t dd�|ƒ}ˆ  || ƒ|| ƒ¡ d S )Nc                 S   s,   ddg}| |  d¡| | ¡t d¡f˜|fS )Nr(   r+   r8   )rQ   ÚextendrE   Zones©r   r   r   r   r   r‘   ñ  s    zTTestTupleBuild.test_build_unpack_with_calls_in_unpack.<locals>.check.<locals>.pyfuncTr¾   rì   r¿   rŸ   r   r   rÀ   ð  s    zDTestTupleBuild.test_build_unpack_with_calls_in_unpack.<locals>.checkrƒ   r   rÃ   r   rŸ   r   Ú&test_build_unpack_with_calls_in_unpackï  s    z5TestTupleBuild.test_build_unpack_with_calls_in_unpackc                    s   ‡ fdd„}|dƒ d S )Nc                    s.   dd„ }t dd�|ƒ}ˆ  || ƒ|| ƒ¡ d S )Nc                 S   sP   ddg}| | | f˜| | dfd| ˜| ddf| d˜df˜f|  d¡| | ¡f˜|fS )	Nr(   r+   r{   )r8   )r+   r8   rý   r„   )r(   )rQ   rÿ   r   r   r   r   r‘   ü  s     ÿþþzKTestTupleBuild.test_build_unpack_complicated.<locals>.check.<locals>.pyfuncTr¾   rì   r¿   rŸ   r   r   rÀ   û  s    z;TestTupleBuild.test_build_unpack_complicated.<locals>.check)rÔ   é   r   rÃ   r   rŸ   r   Útest_build_unpack_complicatedú  s    
z,TestTupleBuild.test_build_unpack_complicatedN)r`   ra   rb   rî   rï   rò   ró   r÷   rø   rû   ÚunittestZskipIfr	   rñ   rþ   r  r  r   r   r   r   rç   {  s   
rç   Ú__main__)?Úcollectionsr£   ÚnumpyrE   Znumba.core.compilerr   Znumbar   r   r   r   Z
numba.corer   r   r	   Znumba.tests.supportr
   r   r   r  Ú
namedtupler   r   r   r   r   r    r!   r$   r'   r*   r,   r/   r0   r1   r2   r3   r4   r5   r6   r7   r:   r<   r@   rA   rI   rL   rM   rP   rS   rT   rc   rm   r‚   r�   r¼   rÚ   rÝ   rà   ræ   rç   r`   Úmainr   r   r   r   Ú<module>   sh   ' 0 6 
