U
    iâËd<  ã                   @   sÞ   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZ d dlmZmZmZmZ 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G dd„ deeƒZedkrÚe  ¡  dS )é    N)Úcompile_isolatedÚFlags©Újit)ÚtypesÚerrorsÚutils)Úcaptured_stdoutÚtagÚTestCaseÚEnableNRTStatsMixinTc                 C   s   t | ƒ d S ©N©Úprint©Úx© r   úO/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_print.pyÚprint_value   s    r   c                 C   s   t | | jƒ d S r   )r   r   )ÚarrÚir   r   r   Úprint_array_item   s    r   c                 C   s   t | ||ƒ d S r   r   ©ÚaÚbÚcr   r   r   Úprint_values   s    r   c                   C   s
   t ƒ  d S r   r   r   r   r   r   Úprint_empty   s    r   c                 C   s   t | ddƒ d S )Núhop!g      @r   r   r   r   r   Úprint_string    s    r   c                 C   s   t | |f|žŽ  d S r   r   r   r   r   r   Úprint_vararg#   s    r    c                 C   s   t | d|f|žŽ  d S )Nr   r   r   r   r   r   Úprint_string_vararg&   s    r!   c                    s   ‡ fdd„}t dd�ˆ ƒS )Nc                      s   ˆ S r   r   r   r   r   r   Úprint_closure*   s    z)make_print_closure.<locals>.print_closureT©Únopythonr   )r   r"   r   r   r   Úmake_print_closure)   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S )Ú	TestPrintc              
      s†  t ‰ ‡ ‡fdd„}|tjdƒ |tjdƒ |tjdƒ |tjdƒ |tjddtd	ƒfƒ |tjd
ƒ |t 	d¡t
 dd¡fƒ tˆ tjfƒ}|j}tƒ �< |dƒ tj ¡ }d}ˆ | |¡¡ ˆ | d¡¡ W 5 Q R X ˆ ¡ �< ddddg}ˆ |¡� |t tj¡|fƒ W 5 Q R X W 5 Q R X t tjdd¡}tˆ |ftd�}|j}tƒ �, |t
jdt
jd�ƒ ˆ tj ¡ d¡ W 5 Q R X dS )z8
        Test printing a single argument value.
        c              
      sT   t ˆ | fƒ}|j}|D ]8}tƒ �( ||ƒ ˆ tj ¡ t|ƒd ¡ W 5 Q R X qd S )NÚ
)r   Úentry_pointr	   ÚassertEqualÚsysÚstdoutÚgetvalueÚstr)ÚtypÚvaluesÚcrÚcfuncÚval©ÚpyfuncÚselfr   r   Úcheck_values7   s    z1TestPrint.test_print_values.<locals>.check_values)é   éÿÿÿ)r7   r8   ì   êg3/m´lüÿÿÿêg3/m´)r7   éê   r9   l   {        )TFg      ø?g@Œµx¯DÚnan)y      ð?      ð?Úmséd   gš™™™™™ñ?z1.10000002384r'   r7   é   é   é   ÚC)Úflagsé
   ©Údtypez[0 1 2 3 4 5 6 7 8 9]
N)r   r   Úint32Zint64Zuint64ÚbooleanZfloat64ÚfloatZ	complex64ZNPTimedeltaÚnpZtimedelta64r   Zfloat32r(   r	   r*   r+   r,   Ú
assertTrueÚ
startswithÚendswithZassertNoNRTLeakZassertRefCountÚListZArrayÚenable_pyobj_flagsÚaranger)   )r5   r6   r0   r1   ÚgotÚexpectr   Z	arraytyper   r3   r   Útest_print_values1   s:    	

(ÿzTestPrint.test_print_valuesc              
   C   sŠ   t  dg¡}t jttddƒƒ|d�}t}tdd�|ƒ}tt|ƒƒD ]B}tƒ �2 |||ƒ |  	t
j ¡ t|| d ƒd ¡ W 5 Q R X qBd	S )
z:
        Test printing a Numpy character sequence
        )r   ZS4r7   é	   rD   Tr#   r   r'   N)rI   rE   Z
frombufferÚ	bytearrayÚranger   r   Úlenr	   r)   r*   r+   r,   r-   )r5   rE   r   r4   r1   r   r   r   r   Útest_print_array_itemc   s    
zTestPrint.test_print_array_itemc              	   C   sP   t }t|tjfd ƒ}|j}tƒ �$ |dddƒ |  tj 	¡ d¡ W 5 Q R X d S )Nr>   r7   é   ú1 2 3
)
r   r   r   rF   r(   r	   r)   r*   r+   r,   ©r5   r4   r0   r1   r   r   r   Útest_print_multiple_valuesq   s    z$TestPrint.test_print_multiple_valuesc              	   C   sH   t }tddd�|ƒ}tƒ �$ |dddƒ |  tj ¡ d¡ W 5 Q R X d S )NT)r$   Znogilr7   rX   r>   rY   )r   r   r	   r)   r*   r+   r,   ©r5   r4   r1   r   r   r   Útest_print_nogily   s
    zTestPrint.test_print_nogilc              	   C   sB   t }t|dƒ}|j}tƒ � |ƒ  |  tj ¡ d¡ W 5 Q R X d S )Nr   r'   )r   r   r(   r	   r)   r*   r+   r,   rZ   r   r   r   Útest_print_empty€   s    
zTestPrint.test_print_emptyc              	   C   sH   t }t|tjfƒ}|j}tƒ �  |dƒ |  tj 	¡ d¡ W 5 Q R X d S )Nr7   z1 hop! 3.5
)
r   r   r   rF   r(   r	   r)   r*   r+   r,   rZ   r   r   r   Útest_print_stringsˆ   s    zTestPrint.test_print_stringsc              	   C   sˆ   t }tdd�|ƒ}tƒ �$ |dddƒ |  tj ¡ d¡ W 5 Q R X t}tdd�|ƒ}tƒ �$ |dddƒ |  tj ¡ d¡ W 5 Q R X d S )NTr#   r7   )rX   r>   )é   y              @z1 (2, 3) 4 5j
z1 hop! (2, 3) 4 5j
)r    r   r	   r)   r*   r+   r,   r!   r\   r   r   r   Útest_print_vararg�   s    zTestPrint.test_print_varargc              	      sb   t dd�dd„ ƒ‰ t dd�‡ fdd„ƒ}t d¡}tƒ �  ||ƒ |  tj ¡ d¡ W 5 Q R X d S )	NTr#   c                 S   s   t | ƒ d S r   r   r   r   r   r   Úfoo    s    z*TestPrint.test_inner_fn_print.<locals>.fooc                    s   ˆ | ƒ ˆ dƒ d S )NZhellor   r   ©rb   r   r   Úbar¤   s    z*TestPrint.test_inner_fn_print.<locals>.barr?   z[0 1 2 3 4]
hello
)r   rI   rO   r	   r)   r*   r+   r,   )r5   rd   r   r   rc   r   Útest_inner_fn_printŸ   s    

zTestPrint.test_inner_fn_printc              	   C   sH   t dd�dd„ ƒ}|  tj¡�}|ƒ  W 5 Q R X d}|  |jj|¡ d S )NTr#   c                   S   s   t ddd� d S )Nr   T)Úflushr   r   r   r   r   Úprint_kwarg±   s    z8TestPrint.test_print_w_kwarg_raises.<locals>.print_kwargzKNumba's print() function implementation does not support keyword arguments.)r   ÚassertRaisesr   ZUnsupportedErrorZassertInÚ	exceptionÚmsg)r5   rg   ZraisesÚexpectedr   r   r   Útest_print_w_kwarg_raises°   s    
z#TestPrint.test_print_w_kwarg_raisesc              	   C   sP   t dd�dd„ ƒ}tƒ �. |ƒ  |  tj ¡ d dgd ¡d ¡ W 5 Q R X d	S )
z9 See: https://github.com/numba/numba/issues/3811
        Tr#   c                   S   s   t d dgd ¡ƒ d S )NÚ r   é'  )r   Újoinr   r   r   r   rb   ¾   s    z/TestPrint.test_print_no_truncation.<locals>.foorm   r   rn   r'   N)r   r	   r)   r*   r+   r,   ro   )r5   rb   r   r   r   Útest_print_no_truncation»   s
    
z"TestPrint.test_print_no_truncationN)Ú__name__Ú
__module__Ú__qualname__rR   rW   r[   r]   r^   r_   ra   re   rl   rp   r   r   r   r   r&   /   s   2r&   Ú__main__)!r*   ÚnumpyrI   ZunittestZnumba.core.compilerr   r   Znumbar   Z
numba.corer   r   r   Znumba.tests.supportr	   r
   r   r   rN   Zenable_pyobjectZforce_pyobj_flagsZforce_pyobjectr   r   r   r   r   r    r!   r%   r&   rq   Úmainr   r   r   r   Ú<module>   s,    