o
    8ήc                     @   s   d dl Z d dlZd dlZ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 d dlmZ d dlmZ G dd dejZedkrGe  dS dS )	    N)jit)NumbaWarning
deprecatedNumbaDeprecationWarning)errors)ignore_internal_warningsc                   @   sT   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S )TestBuiltinsc                 C   s(   d}|  |jt | |t|j d S )NzbFall-back from the nopython compilation path to the object mode compilation path has been detected)assertEqualcategoryr   assertInstrmessage)selfwmsg r   @/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_warnings.py!check_objmode_deprecation_warning   s   z.TestBuiltins.check_objmode_deprecation_warningc                 C   s   dd }t jddR}t dt t  t|}|dd | t|d | |d	 jt | 	d
t
|d	 j | |d jt | 	dt
|d j | |d  W d    d S 1 s_w   Y  d S )Nc                 S   s   i }| | S Nr   xyar   r   r   add      z1TestBuiltins.test_type_infer_warning.<locals>.addTrecordalways         r   type inferencezobject mode)warningscatch_warningssimplefilterr   r   r   r	   lenr
   r   r   r   r   r   r   r   cfuncr   r   r   test_type_infer_warning   s   
"z$TestBuiltins.test_type_infer_warningc                    s   t jdt jd  fdd}tjddS}tdt t  tdd	|}|  | 	t
|d
 | 	|d jt | dt|d j | 	|d jt | dt|d j | |d  W d    d S 1 sjw   Y  d S )N   dtypec                          S r   r   r   r   r   r   return_external_array2      zDTestBuiltins.test_return_type_warning.<locals>.return_external_arrayTr   r   F)_nrtr    r   zreturn typer   z!object mode without forceobj=Truer   )nponesfloat32r"   r#   r$   r   r   r   r	   r%   r
   r   r   r   r   r   r.   r   r'   r   r-   r   test_return_type_warning/   s    "z%TestBuiltins.test_return_type_warningc                    s~   t jdt jd  fdd}tjdd!}tdt t  t|}|  | 	t
|d W d	   d	S 1 s8w   Y  d	S )
z9
        Rerun test_return_type_warning with nrt
        r)   r*   c                      r,   r   r   r   r-   r   r   r.   P   r/   zMTestBuiltins.test_return_type_warning_with_nrt.<locals>.return_external_arrayTr   r   r   N)r1   r2   r3   r"   r#   r$   r   r   r   r	   r%   r4   r   r-   r   !test_return_type_warning_with_nrtJ   s   "z.TestBuiltins.test_return_type_warning_with_nrtc                 C   sr   dd }t jdd%}t dt t  t|dd}|dd | t|d	 W d    d S 1 s2w   Y  d S )
Nc                 S   s   g }| | S r   r   r   r   r   r   r   ]   r   z7TestBuiltins.test_no_warning_with_forceobj.<locals>.addTr   r   )forceobjr   r   r   )r"   r#   r$   r   r   r   r	   r%   r&   r   r   r   test_no_warning_with_forceobj\   s   
"z*TestBuiltins.test_no_warning_with_forceobjc                 C   s\  dd }t jdd}t dt t  tjdtjd}t|}|| d	d	d
 |D }| j
t|d|d | 
|d jt | dt|d j | dt|d j | 
|d jt | dt|d j | dt|d j | 
|d jt | dt|d j | dt|d j | |d  W d    d S 1 sw   Y  d S )Nc                 S   s,   i }t | jd D ]
}| |  d9  < q	d S )Nr   r   )rangeshape)r   r   ir   r   r   do_loopk   s   z1TestBuiltins.test_loop_lift_warn.<locals>.do_loopTr   r   r)   r*   
c                 s   s    | ]	}d |j  V  qdS )z----------
N)r   ).0r   r   r   r   	<genexpr>x   s    z3TestBuiltins.test_loop_lift_warn.<locals>.<genexpr>)r   r   r!   zWITH loopliftingr   zWITHOUT loopliftingr   z-compiled in object mode without forceobj=Truezbut has lifted loopsr    )r"   r#   r$   r   r   r1   r2   r3   r   joinr	   r%   r
   r   r   r   r   )r   r<   r   r   r'   r   r   r   r   test_loop_lift_warnj   s,   "z TestBuiltins.test_loop_lift_warnc                 C   s   t ddd }tjdd;}td t  |  | t|d | |d jt | 	d	t
|d j | 	dt
|d j W d    d S 1 sLw   Y  d S )
Nfooc                   S   s   d S r   r   r   r   r   r   bar   s   z)TestBuiltins.test_deprecated.<locals>.barTr   r   r   r   rC   )r   r"   r#   r$   r   r	   r%   r
   DeprecationWarningr   r   r   )r   rC   r   r   r   r   test_deprecated   s   

"zTestBuiltins.test_deprecatedc                 C   s  t t j}|dd tt d tt d t  W d    n1 s*w   Y  tjddE}td t  |	  | 
t|d | 
|d jt | 
|d	 jt | dt|d j | dt|d	 j W d    d S 1 s}w   Y  d S )
NrB   
   sameTr   r   r   r   r   )r   WarningsFixerr   r#   r"   warnr   r   r$   flushr	   r%   r
   r   r   r   )r   wfixr   r   r   r   test_warnings_fixer   s    
"z TestBuiltins.test_warnings_fixerc           	      C   s   d}d}d}d|||f }t tjd|g}| \}}| |j| ttj	}d|d< t jtjd|g|d}| \}}| |j| d S )	N7   c   z3'parallel=True' was specified but no transformationa0  if 1:
            import warnings
            from numba.tests.error_usecases import foo
            import numba
            from numba.tests.support import ignore_internal_warnings
            with warnings.catch_warnings(record=True) as w:
                warnings.simplefilter('always')
                ignore_internal_warnings()
                foo()
            for x in w:
                if x.category == numba.errors.NumbaPerformanceWarning:
                    if "%s" in str(x.message):
                        exit(%s)
            exit(%s)
        z-c1"NUMBA_DISABLE_PERFORMANCE_WARNINGS)env)

subprocessPopensys
executablecommunicater	   
returncodedictosenviron)	r   not_found_ret_codefound_ret_codeexpectedparallel_codepopenouterrrQ   r   r   r   !test_disable_performance_warnings   s   
z.TestBuiltins.test_disable_performance_warningsN)__name__
__module____qualname__r   r(   r5   r6   r8   rA   rE   rL   rb   r   r   r   r   r      s    'r   __main__)rY   rR   rT   r"   numpyr1   unittestnumbar   numba.core.errorsr   r   r   
numba.corer   numba.tests.supportr   TestCaser   rc   mainr   r   r   r   <module>   s     P