U
    ,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   ;/tmp/pip-unpacked-wheel-eu7e0c37/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 )Nr   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npzerosr   r.   r   r   )nrpr   r   r   make_point_nrtT   s    rJ   c                 G   s   t | | S r   )type)r   argsr   r   r   type_usecaseZ   s    rM   c                 C   s   | S r   r   r&   r   r   r   identity]   s    rN   c                 C   s
   |  |S r   )index)r   valuer   r   r   index_method_usecase`   s    rQ   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    

rT   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)selfrV   raisesr   expectedr   r   r   test_tuple_length_errorm   s    
z,TestTupleLengthError.test_tuple_length_errorN)__name__
__module____qualname__r`   r   r   r   r   rU   k   s   rU   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 )NrI    Argument 'types' is not iterable)	rW   r   TypingErrorr   
NamedTupleuint32rZ   r[   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 )Nre   )	rW   r   rf   r   Tuplerh   rZ   r[   r\   ri   r   r   r   test_tuple_types_exception   s    z3TestTupleTypeNotIterable.test_tuple_types_exceptionN)ra   rb   rc   __doc__rj   rl   r   r   r   r   rd   {   s   rd   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   Arrayrq   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   rt   assertEqual)r]   Zscalartyrv   r   r   rw   rx   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      ?)rR   r   int32int64rz   rq   zipr   r   rt   ru   )
r]   ZalltypesZ	allvaluestatbr   r   rv   rw   rx   r   r   r   test_hetero_tuple   s    


z!TestTupleReturn.test_hetero_tupleN)ra   rb   rc   ry   r|   r   r   r   r   r   rn      s   
rn   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+      rp   r   rp   )r   UniTupler~   r   r    r!   ru   rt   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   rk   r   rz   r   r    r!   ru   rt   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   rp      z8size mismatch for tuple, expected 2 element(s) but got 3)r   r   r~   r   r    rW   
ValueErrorrt   r{   r[   r\   )r]   r   crr^   r   r   r   test_size_mismatch   s    z#TestTuplePassing.test_size_mismatchN)ra   rb   rc   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   rk   r   rz   ru   rt   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.   ru   )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}| |||| qt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.   ru   rt   rW   
IndexErrorr{   r[   r\   uintpr'   rk   r~   ZassertTypingErrorrT   rZ   )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(   rp   rp   r(   r   )	r7   r   r   r   r   rD   ru   rt   rk   )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   rp   r      r   )r   r   r   r   ru   rt   rk   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   rk   r   r~   ru   rt   r   )r]   r   r   rL   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   rk   r   r~   r   rz   	itertoolsproductr   rt   ru   )
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 ]}|||| qd S )Nc                    s      || | | d|f  d S Nzmismatch for arguments %sassertIsr   r   rL   r   r   r   eqU  s    z(TestOperations._test_compare.<locals>.eqr+   )r   r   )r   r   r   )r   r   )r   )rp   r   r8   )r   r   )r   )r   r   r   )r   )r   r   r   )r   rk   r   rz   r   r~   r   r   r   rt   rY   )	r]   r   r   argtypesr   r   r   r   rL   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)ra   rb   rc   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   ru   rI   r   r   r   r   r   check  s    z)TestNamedTuple.test_unpack.<locals>.checkr   rp         @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   ru   r   r   r   r   r     s    z&TestNamedTuple.test_len.<locals>.checkr   rp   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   rp   r   )r$   r   r   rD   r.   ru   r   r   )r]   r   r   rI   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   ru   r   r   r   r   r     s    z'TestNamedTuple.test_bool.<locals>.checkr   rp   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   ru   )r]   r   r   rL   rI   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   rK   ru   )r   r   rL   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   )rM   r   r   r   r   r   rK   ru   )	r]   r   r   Z
arg_tuplesZtup_argsrL   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 )Nr   )rP   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   r{   r   )r]   r   rH   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   rH   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   r{   r   r.   Znopython_signaturesrL   r   r   )r]   r   Zin1Zout1Zin2Zout2Zin3Zout3r   r   r   test_dispatcher_mistreat  s     
z'TestNamedTuple.test_dispatcher_mistreatN)ra   rb   rc   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   rs   )r   r   r   r   r   r   8  s    
z+TestTupleNRT.test_tuple_add.<locals>.pyfuncTr   r   )r   rE   ZtestingZassert_equalr{   )r]   r   r   r   Zexpect_aZexpect_xZgot_aZgot_xr   r   r   test_tuple_add7  s    zTestTupleNRT.test_tuple_addN)ra   rb   rc   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   )rJ   r   r   rK   ru   )r]   r   r   argr_   r   r   r   r   test_returnF  s    zTestNamedTupleNRT.test_returnN)ra   rb   rc   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   )rN   r   rt   r{   )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~   rz   rk   Zint16rW   r   rf   rZ   r[   r\   )r]   r   r   ZatyZbtyr^   r   r   r   r   test_conversions^  s    
 z TestConversions.test_conversionsN)ra   rb   rc   rm   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)rQ   r   r{   rW   r   r[   r\   )r]   r   r   r^   r   r   r   r   r   p  s    zTestMethods.test_indexN)ra   rb   rc   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   ru   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   rp   )r8      zNo implementation of functionztuple(reflected list(z6Only tuples are supported when unpacking a single item)rW   r   rf   r	   	PYVERSIONrZ   r[   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   rL   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   rY   )_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   )rp   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   rW   r   rX   rZ   r[   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   )rR   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(   )rR   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)ra   rb   rc   r   r   r   r   r   r   r   unittestZskipIfr	   r   r   r  r  r   r   r   r   r   {  s   
r   __main__)?collectionsr   Z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   rJ   rM   rN   rQ   rT   rU   rd   rn   r   r   r   r   r   r   r   r   ra   mainr   r   r   r   <module>   sh   ' 0 6 
