U
    ,dt                     @   s  d dl Zd dlZd dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZ e Zde_e Zde_e Zd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$G d'd( d(eeZ%e&d)kre'  dS )*    N)compile_isolatedFlags)errorstypes)typeof)TestCaseMemoryLeakMixintagTc                 C   s   | \}}}|||fS N )labcr   r   D/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_unpack_sequence.pyunpack_list   s    
r   c                 C   s   | j \}}}|| | S r
   shape)r   xyzr   r   r   unpack_shape   s    r   c                  C   s   t d\} }}| | | S )N   ranger   r   r   r   r   r   unpack_range   s    r   c                  C   s   t d\} }}| | | S )N   r   r   r   r   r   unpack_range_too_small"   s    r   c                  C   s   t d\} }}| | | S )N   r   r   r   r   r   unpack_range_too_large'   s    r    c                  C   s   d\} }}| | | S )N   r   r   r   r   r   r   r   unpack_tuple,   s    
r#   c                  C   s   d\} }}| | | S )N)r"   r   r   r   r   r   r   unpack_tuple_too_small1   s    
r$   c                  C   s   d\} }}| | | S )N)r"   r   r   r   r   r   r   r   r   unpack_tuple_too_large6   s    
r%   c                  C   s   d\} }}| | | S )N)r"   y              @r   r   r   r   r   $unpack_heterogeneous_tuple_too_small;   s    
r&   c                  C   s   d\} }}| | | S )N)r"         @              @r   r   r   r   r   r   $unpack_heterogeneous_tuple_too_large@   s    
r)   c                  C   s   d\} }}| | | S )N)r"   r'   r(   r   r   r   r   r   unpack_heterogeneous_tupleE   s    
r*   c                  C   s   d\} \}}| | | S )N)r"   )r'   r(   r   r   r   r   r   !unpack_nested_heterogeneous_tupleJ   s    r+   c                 C   s   | \}}||fS r
   r   )seqr   r   r   r   r   unpack_arbitraryO   s    r-   c                  C   s,   t d} t d}|| f}|\}}||fS )Nr"   r   npzeros)r   r   tupalphabetar   r   r   
unpack_nrtT   s
    

r4   c                 C   s(   | |f }\}}|\}}|| | | S r
   r   )r   r   r   r   r   der   r   r   chained_unpack_assign1\   s    r7   c                 C   s   | dkr||  } }| |fS )Nr   r   )r   r   r   r   r   conditional_swapc   s    
r8   c                   @   s  e Zd Zdd ZefddZdd ZefddZd	d
 ZefddZ	dd Z
efddZdd ZefddZdd ZefddZdd Zeef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efd-d.Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9S ):
TestUnpackc                 C   s:   t }t|dtd}|j}dddg}| |||| d S )Nr   flagsr"   r   r   )r   r   force_pyobj_flagsentry_pointassertEqual)selfpyfunccrcfuncr   r   r   r   test_unpack_listl   s
    
zTestUnpack.test_unpack_listc                 C   sT   t }t|tjtjdddg|d}|j}tjddtj}| 	|||| d S )Nr   C)ZdtypendimZlayoutr:   r!   r   )
r   r   r   Arrayint32r=   r/   r0   ZastypeassertPreciseEqual)r?   r;   r@   rA   rB   r   r   r   r   test_unpack_shapes   s    zTestUnpack.test_unpack_shapec                 C   s   | j td d S Nr:   )rI   no_pyobj_flagsr?   r   r   r   test_unpack_shape_npm}   s    z TestUnpack.test_unpack_shape_npmc                 C   s   |  t| d S r
   )run_nullary_funcr   r?   r;   r   r   r   test_unpack_range   s    zTestUnpack.test_unpack_rangec                 C   s   | j td d S rJ   )rP   rK   rL   r   r   r   test_unpack_range_npm   s    z TestUnpack.test_unpack_range_npmc                 C   s   |  t| d S r
   )rN   r#   rO   r   r   r   test_unpack_tuple   s    zTestUnpack.test_unpack_tuplec                 C   s   | j td d S rJ   )rR   rK   rL   r   r   r   test_unpack_tuple_npm   s    z TestUnpack.test_unpack_tuple_npmc                 C   s   |  t| d S r
   )rN   r*   rO   r   r   r   test_unpack_heterogeneous_tuple   s    z*TestUnpack.test_unpack_heterogeneous_tuplec                 C   s   | j td d S rJ   )rT   rK   rL   r   r   r   #test_unpack_heterogeneous_tuple_npm   s    z.TestUnpack.test_unpack_heterogeneous_tuple_npmc                 C   s   |  t| d S r
   )rN   r+   rO   r   r   r   &test_unpack_nested_heterogeneous_tuple   s    z1TestUnpack.test_unpack_nested_heterogeneous_tuplec                 C   s   | j td d S rJ   )rV   rK   rL   r   r   r   *test_unpack_nested_heterogeneous_tuple_npm   s    z5TestUnpack.test_unpack_nested_heterogeneous_tuple_npmc                 C   s<   t }t|tjtjg|d}|j}d}| || ||  d S )Nr:   )r      )r7   r   r   rG   r=   rH   )r?   r;   r@   rA   rB   argsr   r   r   test_chained_unpack_assign   s    z%TestUnpack.test_chained_unpack_assignc                 C   s   | j td d S rJ   )rZ   rK   rL   r   r   r   test_chained_unpack_assign_npm   s    z)TestUnpack.test_chained_unpack_assign_npmc              	   C   s4   |  |  t|d|d}|j}|  W 5 Q R X d S Nr   r:   )assertRaisesr   r=   )r?   r@   r;   excrA   rB   r   r   r   check_unpack_error   s    zTestUnpack.check_unpack_errorc                 C   s   |  t |  t d S r
   )r_   r$   r&   rL   r   r   r   test_unpack_tuple_too_small   s    
z&TestUnpack.test_unpack_tuple_too_smallc                 C   s$   |  tttj |  tttj d S r
   )r_   r$   rK   r   TypingErrorr&   rL   r   r   r   test_unpack_tuple_too_small_npm   s     z*TestUnpack.test_unpack_tuple_too_small_npmc                 C   s   |  t |  t d S r
   )r_   r%   r)   rL   r   r   r   test_unpack_tuple_too_large   s    
z&TestUnpack.test_unpack_tuple_too_largec                 C   s$   |  tttj |  tttj d S r
   )r_   r%   rK   r   ra   r)   rL   r   r   r   test_unpack_tuple_too_large_npm   s     z*TestUnpack.test_unpack_tuple_too_large_npmc                 C   s   |  t d S r
   )r_   r   rL   r   r   r   test_unpack_range_too_small   s    z&TestUnpack.test_unpack_range_too_smallc                 C   s   |  tt d S r
   )r_   r   rK   rL   r   r   r   test_unpack_range_too_small_npm   s    z*TestUnpack.test_unpack_range_too_small_npmc                 C   s   |  t d S r
   )r_   r    rL   r   r   r   test_unpack_range_too_large   s    z&TestUnpack.test_unpack_range_too_largec                 C   s   |  tt d S r
   )r_   r    rK   rL   r   r   r   test_unpack_range_too_large_npm   s    z*TestUnpack.test_unpack_range_too_large_npmc                 C   sD   t ttjtjf|d}|j}| |ddd | |ddd d S )Nr:   r   rX   )rX   r   r   )r   rX   )r   r8   r   rG   r=   rH   )r?   r;   rA   rB   r   r   r   check_conditional_swap   s    z!TestUnpack.check_conditional_swapc                 C   s   |    d S r
   )ri   rL   r   r   r   test_conditional_swap   s    z TestUnpack.test_conditional_swapc                 C   s   |  t d S r
   )ri   rK   rL   r   r   r   test_conditional_swap_npm   s    z$TestUnpack.test_conditional_swap_npmc                 C   sP   t dd tdD }t|}t}t||ftd}|j}| |||| d S )Nc                 s   s   | ]}t |d  V  qdS )r"   Nr.   ).0ir   r   r   	<genexpr>   s     z9TestUnpack.test_unpack_tuple_of_arrays.<locals>.<genexpr>r   r:   )tupler   r   r-   r   rK   r=   rH   )r?   r1   Ztuptyr@   rA   rB   r   r   r   test_unpack_tuple_of_arrays   s    z&TestUnpack.test_unpack_tuple_of_arraysc                 C   s,   t }t|dtd}|j}| | |  d S r\   )r4   r   rK   r=   rH   )r?   r@   rA   rB   r   r   r   test_unpack_nrt   s    zTestUnpack.test_unpack_nrtc              	   C   sD   t }| tj}t|tjftd W 5 Q R X | dt	|j
 d S )Nr:   zfailed to unpack int32)r-   r]   r   ra   r   r   rG   rK   ZassertInstr	exception)r?   r@   Zraisesr   r   r   test_invalid_unpack   s    zTestUnpack.test_invalid_unpackN)!__name__
__module____qualname__rC   r<   rI   rM   rP   rQ   rR   rS   rT   rU   rV   rW   rZ   r[   
ValueErrorr_   r`   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rp   rq   rt   r   r   r   r   r9   j   s8   
	r9   __main__)(Znumpyr/   ZunittestZnumba.core.compilerr   r   Z
numba.corer   r   Znumbar   Znumba.tests.supportr   r   r	   Zenable_pyobj_flagsZenable_pyobjectr<   Zforce_pyobjectrK   Znrtr   r   r   r   r    r#   r$   r%   r&   r)   r*   r+   r-   r4   r7   r8   r9   ru   mainr   r   r   r   <module>   s>    
