B
     \                 @   s   d dl mZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZmZmZmZ ddlmZmZmZ e
 Zed e
 Zed 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Ze dkre!  dS )    )print_functionN)compile_isolatedFlags)jittypeserrorsutils   )captured_stdouttagTestCaseZenable_pyobjectZforce_pyobjectc             C   s   t |  d S )N)print)x r   5lib/python3.7/site-packages/numba/tests/test_print.pyprint_value   s    r   c             C   s   t | | j d S )N)r   r   )arrir   r   r   print_array_item   s    r   c             C   s   t | || d S )N)r   )abcr   r   r   print_values   s    r   c               C   s
   t   d S )N)r   r   r   r   r   print_empty   s    r   c             C   s   t | dd d S )Nzhop!g      @)r   )r   r   r   r   print_string    s    r   c             C   s   t | |f|  d S )N)r   )r   r   r   r   r   r   print_vararg#   s    r   c             C   s   t | d|f|  d S )Nzhop!)r   )r   r   r   r   r   r   print_string_vararg&   s    r   c                s    fdd}t dd S )Nc                  s    S )Nr   r   )r   r   r   print_closure*   s    z)make_print_closure.<locals>.print_closureT)nopython)r   )r   r   r   )r   r   make_print_closure)   s    r   c               @   s   e Zd Zeddd Zeddd Zed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eejdk ddd ZdS )	TestPrintZ	importantc          
      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 dQ R X  < ddddg}| |ttj|f W dQ R X W dQ R X ttjdd}t |ftd}|j}t , |t
jdt
jd tj d W dQ R X dS )z8
        Test printing a single argument value.
        c          
      sX   t  | f}|j}x@|D ]8}t ( || tj t|d  W d Q R X qW d S )N
)r   entry_pointr
   assertEqualsysstdoutgetvaluestr)typvaluescrcfuncval)pyfuncselfr   r   check_values8   s    
z1TestPrint.test_print_values.<locals>.check_values)r	   i)r	   il   g3/mlg3/m)r	      l   g3/ml   {        )TFg      ?g@xDnan)y      ?      ?Zmsd   g?z1.10000002384r!   Nr	            C)flags
   )dtypez[0 1 2 3 4 5 6 7 8 9]
)r   r   int32Zint64Zuint64ZbooleanZfloat64floatZ	complex64ZNPTimedeltanpZtimedelta64r   Zfloat32r"   r
   r$   r%   r&   Z
assertTrue
startswithendswithZassertNoNRTLeakZassertRefCountZListZArrayenable_pyobj_flagsaranger#   )r.   r/   r*   r+   ZgotZexpectr   Z	arraytyper   )r-   r.   r   test_print_values1   s8    	

(zTestPrint.test_print_valuesc          
   C   s   t dg}t jttdd|d}t}tdd|}xRtt|D ]B}t 2 ||| | 	t
j t|| d d  W d	Q R X qDW d	S )
z:
        Test printing a Numpy character sequence
        )r   ZS4r	   	   )r9   T)r   r   r!   N)r<   r9   Z
frombuffer	bytearrayranger   r   lenr
   r#   r$   r%   r&   r'   )r.   r9   r   r-   r+   r   r   r   r   test_print_array_itemd   s    
zTestPrint.test_print_array_itemc          	   C   sP   t }t|tjfd }|j}t $ |ddd | tj	 d W d Q R X d S )Nr3   r	      z1 2 3
)
r   r   r   r:   r"   r
   r#   r$   r%   r&   )r.   r-   r*   r+   r   r   r   test_print_multiple_valuess   s    z$TestPrint.test_print_multiple_valuesc          	   C   sH   t }tddd|}t $ |ddd | tj d W d Q R X d S )NT)r   Znogilr	   rG   r3   z1 2 3
)r   r   r
   r#   r$   r%   r&   )r.   r-   r+   r   r   r   test_print_nogil|   s
    zTestPrint.test_print_nogilc          	   C   sB   t }t|d}|j}t  |  | tj d W d Q R X d S )Nr   r!   )r   r   r"   r
   r#   r$   r%   r&   )r.   r-   r*   r+   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 d Q R X d S )Nr	   z1 hop! 3.5
)
r   r   r   r:   r"   r
   r#   r$   r%   r&   )r.   r-   r*   r+   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 d Q R X t}tdd|}t $ |ddd | tj d W d Q R X d S )NT)r   r	   )rG   r3   )   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   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 d Q R X d S )	NT)r   c             S   s   t |  d S )N)r   )r   r   r   r   foo   s    z*TestPrint.test_inner_fn_print.<locals>.fooc                s    |   d d S )NZhellor   )r   )rN   r   r   bar   s    z*TestPrint.test_inner_fn_print.<locals>.barr4   z[0 1 2 3 4]
hello
)r   r<   r@   r
   r#   r$   r%   r&   )r.   rO   r   r   )rN   r   test_inner_fn_print   s    
zTestPrint.test_inner_fn_printc          	   C   sH   t dddd }| tj}|  W d Q R X d}| |jj| d S )NT)r   c               S   s   t ddd d S )Nr   T)flush)r   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   ZassertRaisesr   ZUnsupportedErrorZassertInZ	exceptionmsg)r.   rR   ZraisesZexpectedr   r   r   test_print_w_kwarg_raises   s
    z#TestPrint.test_print_w_kwarg_raises)r3   rG   zneeds Python 3.2+c          	   C   sP   t dddd }t . |  | tj ddgd d  W d	Q R X d	S )
z9 See: https://github.com/numba/numba/issues/3811
        T)r   c               S   s   t ddgd  d S )N r   i'  )r   joinr   r   r   r   rN      s    z/TestPrint.test_print_no_truncation.<locals>.foorU   r   i'  r!   N)r   r
   r#   r$   r%   r&   rV   )r.   rN   r   r   r   test_print_no_truncation   s    z"TestPrint.test_print_no_truncationN)__name__
__module____qualname__r   rA   rF   rH   rI   rJ   rK   rM   rP   rT   unittestZskipIfr   Z	PYVERSIONrW   r   r   r   r   r    /   s   3			r    __main__)"Z
__future__r   r$   Znumpyr<   Znumba.unittest_supportZunittest_supportr[   Znumba.compilerr   r   Znumbar   r   r   r   Zsupportr
   r   r   r?   setZforce_pyobj_flagsr   r   r   r   r   r   r   r   r    rX   mainr   r   r   r   <module>   s,   

 