B
     \OL                 @   s   d dl mZmZmZ d dl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 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)d0d1 Z*d2d3 Z+d4d5 Z,d6d7 Z-d8d9 Z.d:d; Z/d<d= Z0G d>d? d?eZ1G d@dA dAeZ2G dBdC dCeZ3G dDdE dEeeZ4G dFdG dGeeZ5G dHdI dIeeZ6G dJdK dKeZ7G dLdM dMeZ8G dNdO dOeZ9e:dPkre
;  dS )Q    )print_functiondivisionabsolute_importN)unittest_support)compile_isolated)jittypeserrorsutils   )TestCaseMemoryLeakMixintagRect)widthheightPoint)xyzEmpty c             C   s   | |fS )Nr   )abr   r   6lib/python3.7/site-packages/numba/tests/test_tuples.pytuple_return_usecase   s    r   c             C   s   | \}}|S )Nr   )tupr   r   r   r   r   tuple_first   s    r   c             C   s   | \}}|S )Nr   )r   r   r   r   r   r   tuple_second   s    r   c             C   s   | | S )Nr   )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 )Nr   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 )N)len)r   r   r   r   len_usecase,   s    r(   c             C   s   | | S )Nr   )r   r   r   r   r   add_usecase/   s    r)   c             C   s   | |kS )Nr   )r   r   r   r   r   
eq_usecase2   s    r*   c             C   s   | |kS )Nr   )r   r   r   r   r   
ne_usecase5   s    r+   c             C   s   | |kS )Nr   )r   r   r   r   r   
gt_usecase8   s    r,   c             C   s   | |kS )Nr   )r   r   r   r   r   
ge_usecase;   s    r-   c             C   s   | |k S )Nr   )r   r   r   r   r   
lt_usecase>   s    r.   c             C   s   | |kS )Nr   )r   r   r   r   r   
le_usecaseA   s    r/   c             C   s   | |kS )Nr   )r   r   r   r   r   
in_usecaseD   s    r0   c             C   s   t | | rdndfS )N   r%   )bool)r   r   r   r   bool_usecaseG   s    r3   c             C   s   | j | j| jfS )N)r   r   r   )r   r   r   r   getattr_usecaseJ   s    r4   c             C   s   t | ||S )N)r   )r   r   cr   r   r   
make_pointM   s    r6   c             C   s   t ||| dS )N)r   r   r   )r   )r   r   r5   r   r   r   make_point_kwsP   s    r7   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_nrtS   s    r>   c             G   s   t | | S )N)type)r   argsr   r   r   type_usecaseY   s    rA   c             C   s   | S )Nr   )r   r   r   r   identity\   s    rB   c             C   s
   |  |S )N)index)r   valuer   r   r   index_method_usecase_   s    rE   c               @   s4   e Zd Zeddd Zdd Zeddd ZdS )	TestTupleReturn	importantc             C   sl   t t jdd}tt||f}tjddd }}|||\}}| || | || ~~| || d S )Nr   C   float64)Zdtype)	r   ZArrayrJ   r   r   r:   arangeentry_pointassertPreciseEqual)selfZarytycresr   r   rarbr   r   r   test_array_tuplee   s    z TestTupleReturn.test_array_tuplec             C   sH   t j}tt||f}d }}|||\}}| || | || d S )Nr   )r   float32r   r   rL   assertEqual)rN   ZscalartyrO   r   r   rP   rQ   r   r   r   test_scalar_tuplep   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 xPt||D ]B\\}}\}}tt||f}|	||\}}	| 
||	f||f qhW d S )N)r   r%   )g      ?g      ?)i  g      ?)appendr   int32int64rS   rJ   zipr   r   rL   rM   )
rN   ZalltypesZ	allvaluestatbr   r   rO   rP   rQ   r   r   r   test_hetero_tuplex   s    


z!TestTupleReturn.test_hetero_tupleN)__name__
__module____qualname__r   rR   rU   r\   r   r   r   r   rF   c   s   rF   c               @   s4   e Zd Zeddd Zeddd Zdd ZdS )	TestTuplePassingrG   c             C   sN   t t jd}tt|f}tt|f}| |dd | |dd d S )Nr%   )   rI   ra   rI   )r   UniTuplerW   r   r   r   rM   rL   )rN   
tuple_typecr_first	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)l            g      ?l            g      ?)	r   TuplerX   rS   r   r   r   rM   rL   )rN   rc   rd   re   r   r   r   r\      s
    z"TestTuplePassing.test_hetero_tuplec          	   C   sP   t t jd}tt|f}| t}|d W d Q R X | t	|j
d d S )Nr%   )ra   rI      z8size mismatch for tuple, expected 2 element(s) but got 3)r   rb   rW   r   r   assertRaises
ValueErrorrL   rT   str	exception)rN   rc   crraisesr   r   r   test_size_mismatch   s    z#TestTuplePassing.test_size_mismatchN)r]   r^   r_   r   rf   r\   ro   r   r   r   r   r`      s   r`   c               @   s   e Zd Zeddd Zeddd Zdd Zdd	 Zd
d Zdd Z	dd Z
eddd Zdd Zeddd Zeddd Zeddd Zeddd Zeddd Zeddd Zd S )!TestOperationsrG   c             C   s\   t }t|ttjtjfg}| |dd t|ttjdg}| |dd d S )N)ra   rI   r%   r1   )ra   rI   rh   )	r(   r   r   rg   rX   rS   rM   rL   rb   )rN   pyfuncrm   r   r   r   test_len   s    zTestOperations.test_lenc          	   C   s*  t }t|ttjdtjg}d}x,tt|D ]}| |||||  q0W x4tt|d D ] }| ||| ||   qbW | 	t
}||t| W d Q R X | dt|j | 	t
}||t|d   W d Q R X | dt|j t|ttjdtjg}| 	t
}|dd W d Q R X | dt|j t|ttjdtjg}x4tt|D ]$}| ||t|||  qrW t}xXttjdttjtjtjtjffD ],}t||f}d}| |||| qW ttjd}|   t||f}W d Q R X d S )	Nr1   )ra   r1   rh   r   ztuple index out of ranger   r   ra   )ra   r1   *   rh   )r    r   r   rb   rX   r9   r'   rM   rL   ri   
IndexErrorrT   rk   rl   uintpr"   rg   rW   ZassertTypingError)rN   rq   rm   r   irn   typr   r   r   
test_index   s@      $ 
zTestOperations.test_indexc             C   sR   t }t|tjttjdg}d}x*tdD ]}| |||||| q,W d S )Nr1   )ra   r   rI   rI   )r0   r   r   rX   rb   r9   rM   rL   )rN   rq   rm   r   rv   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)ra   rI   rh      ra   )r   r   rb   rX   rM   rL   rg   rW   )rN   rq   r   rm   r   r   r   check_slice   s    zTestOperations.check_slicec             C   s   |  t d S )N)r{   r$   )rN   r   r   r   test_slice2   s    zTestOperations.test_slice2c             C   s   |  t d S )N)r{   r&   )rN   r   r   r   test_slice3   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))ra   rI   r1   ))ra   rI   rh   r   )	r3   r   r   rg   rX   rW   rM   rL   rb   )rN   rq   rm   r@   r   r   r   	test_bool   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}xXt||D ]H\\}}\}}t	|||f}|||}|
||}	| j|	|||fd qVW d S )Nr   r   r   )rs   )r1   g      @)msg)r)   r   rg   rb   rW   rX   rS   	itertoolsproductr   rL   rM   )
rN   rq   ZsamplesrZ   r   r[   r   rm   expectedgotr   r   r   test_add  s    
zTestOperations.test_addc       	         s    fdd}t t jt jft t jdg}xFt||D ]6\}}t|||f}|j	}xdD ]}|||| q\W q:W t t jt jft t jdg}t|t
|}|j	}xdD ]}|||| qW d S )Nc                s      || | | d|f  d S )Nzmismatch for arguments %s)assertIs)rq   cfuncr@   )rN   r   r   eq  s    z(TestOperations._test_compare.<locals>.eqr%   )))ra   rI   )ra   rI   ))ra   rI   )ra   rh   ))ra   rh   )ra   rI   ))ra   rI   )rI   ra   r1   )))ra   rI   )ra   rI   rh   ))ra   rI   )ra   ra   rh   ))ra   rI   )ra   rh   rz   )r   rg   rX   rS   rb   rW   r   r   r   rL   tuple)	rN   rq   r   ZargtypesrZ   r[   rm   r   r@   r   )rN   r   _test_compare  s    

zTestOperations._test_comparec             C   s   |  t d S )N)r   r*   )rN   r   r   r   test_eq0  s    zTestOperations.test_eqc             C   s   |  t d S )N)r   r+   )rN   r   r   r   test_ne4  s    zTestOperations.test_nec             C   s   |  t d S )N)r   r,   )rN   r   r   r   test_gt8  s    zTestOperations.test_gtc             C   s   |  t d S )N)r   r-   )rN   r   r   r   test_ge<  s    zTestOperations.test_gec             C   s   |  t d S )N)r   r.   )rN   r   r   r   test_lt@  s    zTestOperations.test_ltc             C   s   |  t d S )N)r   r/   )rN   r   r   r   test_leD  s    zTestOperations.test_leN)r]   r^   r_   r   rr   rx   ry   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   rp      s   
.
rp   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zeddd Z	eddd Z
dd Zdd Zdd Zdd Zeddd Zed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                s8   x2t tfD ]&}tdd|} || ||  q
W d S )NT)nopython)r   r   r   rM   )r=   rq   r   )rN   r   r   checkL  s    z)TestNamedTuple.test_unpack.<locals>.checkra   rI   g      @)r   )rN   r   r   )rN   r   test_unpackK  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 )NT)r   )r(   r   rM   )r=   rq   r   )rN   r   r   r   W  s    z&TestNamedTuple.test_len.<locals>.checkra   rI   rh   g      @y              @)r   r   )rN   r   r   )rN   r   rr   V  s
    zTestNamedTuple.test_lenc             C   s   t }tdd|}tddd}x,tt|D ]}| |||||| q,W x2tt|D ]"}| ||t|||| qZW d S )NT)r   ra   rI   rh   )r    r   r   r9   r'   rM   r   ru   )rN   rq   r   r=   rv   r   r   r   rx   c  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 )NT)r   )r3   r   rM   )r=   rq   r   )rN   r   r   r   p  s    z'TestNamedTuple.test_bool.<locals>.checkra   rI   g      @)r   r   )rN   r   r   )rN   r   r~   o  s    zTestNamedTuple.test_boolc                sr    fdd}t dd|}x(dD ] \}}|||t| t| f q W x(dD ] \}}|||t| t| f qJW d S )Nc                s      || | | d|f  d S )Nzmismatch for arguments %s)r   )rq   r   r@   )rN   r   r   r   |  s    z(TestNamedTuple._test_compare.<locals>.eqT)r   )))ra   rI   )ra   rI   ))ra   rI   )ra   rh   ))ra   rh   )ra   rI   ))ra   rI   )rI   ra   )))ra   rI   )ra   rI   rh   ))ra   rI   )ra   ra   rh   ))ra   rI   )ra   rh   rz   )r   r   r   )rN   rq   r   r   r   r   r   )rN   r   r   {  s    zTestNamedTuple._test_comparerG   c             C   s   |  t d S )N)r   r*   )rN   r   r   r   r     s    zTestNamedTuple.test_eqc             C   s   |  t d S )N)r   r+   )rN   r   r   r   r     s    zTestNamedTuple.test_nec             C   s   |  t d S )N)r   r,   )rN   r   r   r   r     s    zTestNamedTuple.test_gtc             C   s   |  t d S )N)r   r-   )rN   r   r   r   r     s    zTestNamedTuple.test_gec             C   s   |  t d S )N)r   r.   )rN   r   r   r   r     s    zTestNamedTuple.test_ltc             C   s   |  t d S )N)r   r/   )rN   r   r   r   r     s    zTestNamedTuple.test_lec             C   s@   t }tdd|}x(dD ] }t| }| |||| qW d S )NT)r   ))ra   rI   rh   )ra   g      @y              @)r4   r   r   rM   )rN   rq   r   r@   r=   r   r   r   test_getattr  s
    
zTestNamedTuple.test_getattrc                s     fdd}|t  |t d S )Nc                sP   t dd| }x<dD ]4}| | }|| } t|t|  || qW d S )NT)r   ))ra   rI   rh   )ra   g      @y              @)r   r   r?   rM   )rq   r   r@   r   r   )rN   r   r   r     s    
z,TestNamedTuple.test_construct.<locals>.check)r6   r7   )rN   r   r   )rN   r   test_construct  s    zTestNamedTuple.test_constructc       	      C   s|   t }tdd|}ddg}x\t||D ]L\}}t| }||f| }||f| }| t|t| | || q(W d S )NT)r   )ra   rI   rh   )ra   g      @y              @)rA   r   r   r   r   r   r?   rM   )	rN   rq   r   Z
arg_tuplesZtup_argsr@   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 )NT)r   c             S   s
   t | dS )Ni)r   )rD   r   r   r   Data1  s    z6TestNamedTuple.test_literal_unification.<locals>.Data1c                s    |dkr | }n
t | |}|S )Nr   )r   )rv   jresult)r   r   r   call  s    

z5TestNamedTuple.test_literal_unification.<locals>.call{   i)  )r   r   r   i)r   rT   r   )rN   r   r<   r   )r   r   test_literal_unification  s    

z'TestNamedTuple.test_literal_unificationN)r]   r^   r_   r   rr   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   I  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 )Nr1   )r:   rK   )r   r   r   r   r   rq     s    
z+TestTupleNRT.test_tuple_add.<locals>.pyfuncT)r   r   )r   r:   ZtestingZassert_equalrT   )rN   rq   r   r   Zexpect_aZexpect_xZgot_aZgot_xr   r   r   test_tuple_add  s    zTestTupleNRT.test_tuple_addN)r]   r^   r_   r   r   r   r   r   r     s   r   c               @   s   e Zd Zdd ZdS )TestNamedTupleNRTc             C   sT   t }tdd|}x<dD ]4}||}||}| t|t| | || qW d S )NT)r   )r1   r   )r>   r   r   r?   rM   )rN   rq   r   argr   r   r   r   r   test_return  s    
zTestNamedTupleNRT.test_returnN)r]   r^   r_   r   r   r   r   r   r     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 )N)rB   r   rL   rT   )rN   fromtyZtotyvalrq   rm   r   Zresr   r   r   check_conversion  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 d Q R X d}| 
|t|j d S )Nr%   )ra   rI   r   r   z9No conversion from tuple(int32 x 2) to tuple(float32 x 1))r   r   rb   rW   rS   rg   Zint16ri   r	   ZTypingErrorZassertInrk   rl   )rN   r   r   ZatyZbtyrn   r   r   r   r   test_conversions  s    
 z TestConversions.test_conversionsN)r]   r^   r_   __doc__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 d Q R X d}| |t|j d S )NT)r   )r   r%   r1   r%   r   ra   ztuple.index(x): x not in tuple)rE   r   rT   ri   rj   rk   rl   )rN   rq   r   rn   r   r   r   r   rx     s    zTestMethods.test_indexN)r]   r^   r_   rx   r   r   r   r   r     s   r   c               @   s|   e Zd Zeejdk ddd Zeejdk ddd Zeejdk ddd Z	eejd	k d
dd Z
dd ZdS )TestTupleBuild)r1   r   zneeds Python 3c                s     fdd}|d |d d S )Nc                s.   t d}tdd|} || ||  d S )Nzlambda a: (1, *a)T)r   )evalr   rM   )r=   rq   r   )rN   r   r   r   '  s    z/TestTupleBuild.test_build_unpack.<locals>.check)ra   rI   )ra   g      @r   )rN   r   r   )rN   r   test_build_unpack%  s    z TestTupleBuild.test_build_unpackc                s     fdd}|d |d d S )Nc                s.   t d}tdd|} || ||  d S )Nzlambda a: (1, *a, (1, 2), *a)T)r   )r   r   rM   )r=   rq   r   )rN   r   r   r   5  s    z4TestTupleBuild.test_build_unpack_more.<locals>.check)ra   rI   )ra   g      @r   )rN   r   r   )rN   r   test_build_unpack_more3  s    z%TestTupleBuild.test_build_unpack_morec                s     fdd}|d |d d S )Nc                s>   t dd }tdt }t dd|} || ||  d S )Nc              W   s   | S )Nr   )r@   r   r   r   innerE  s    zCTestTupleBuild.test_build_unpack_call.<locals>.check.<locals>.innerzlambda a: inner(1, *a)T)r   )r   r   localsrM   )r=   r   rq   r   )rN   r   r   r   C  s    z4TestTupleBuild.test_build_unpack_call.<locals>.check)ra   rI   )ra   g      @r   )rN   r   r   )rN   r   test_build_unpack_callA  s    
z%TestTupleBuild.test_build_unpack_call)r1   rh   zneeds Python 3.6+c                s     fdd}|d |d d S )Nc                s>   t dd }tdt }t dd|} || ||  d S )Nc              W   s   | S )Nr   )r@   r   r   r   r   U  s    zHTestTupleBuild.test_build_unpack_call_more.<locals>.check.<locals>.innerz#lambda a: inner(1, *a, *(1, 2), *a)T)r   )r   r   r   rM   )r=   r   rq   r   )rN   r   r   r   S  s    z9TestTupleBuild.test_build_unpack_call_more.<locals>.check)ra   rI   )ra   g      @r   )rN   r   r   )rN   r   test_build_unpack_call_moreQ  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 )NT)r   )r   rM   )rq   r   r   )rN   r   r   r   b  s    z4TestTupleBuild.test_tuple_constructor.<locals>.checkc             S   s   t  S )N)r   )_r   r   r   <lambda>g  s    z7TestTupleBuild.test_tuple_constructor.<locals>.<lambda>r   c             S   s   t | S )N)r   )r   r   r   r   r   i  s    )ra   rI   c             S   s   t | S )N)r   )r   r   r   r   r   k  s    )ra   g      @r   )rN   r   r   )rN   r   test_tuple_constructora  s    z%TestTupleBuild.test_tuple_constructorN)r]   r^   r_   unittestZskipIfr
   Z	PYVERSIONr   r   r   r   r   r   r   r   r   r   #  s
   r   __main__)<Z
__future__r   r   r   collectionsr   Znumpyr:   Znumbar   r   Znumba.compilerr   r   r   r	   r
   Zsupportr   r   r   
namedtupler   r   r   r   r   r   r    r"   r$   r&   r(   r)   r*   r+   r,   r-   r.   r/   r0   r3   r4   r6   r7   r>   rA   rB   rE   rF   r`   rp   r   r   r   r   r   r   r]   mainr   r   r   r   <module>   s^   ) " L
