U
    hâËd©  ã                   @   sx   d dl Zd dlmZ d dlmZmZmZ d dlm	Z	m
Z
 d dlmZ d dlZedƒG dd„ deƒƒZed	krte ¡  dS )
é    N)Úcuda)ÚunittestÚCUDATestCaseÚskip_on_cudasim)Ú
linux_onlyÚoverride_config)ÚNumbaPerformanceWarningz+cudasim does not raise performance warningsc                   @   sh   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zedd„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestWarningsc              
   C   sˆ   t jdd„ ƒ}tddƒ�( tjdd��}|d ƒ  W 5 Q R X W 5 Q R X |  |d jt¡ |  d	t	|d j
ƒ¡ |  d
t	|d j
ƒ¡ d S )Nc                   S   s   d S ©N© r   r   r   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cuda/tests/cudapy/test_warning.pyÚkernel   s    zBTestWarnings.test_inefficient_launch_configuration.<locals>.kernelÚCUDA_LOW_OCCUPANCY_WARNINGSé   T©Úrecord)r   r   r   z	Grid sizezlow occupancy)r   Újitr   ÚwarningsÚcatch_warningsÚassertEqualÚcategoryr   ÚassertInÚstrÚmessage©Úselfr   Úwr   r   r   Ú%test_inefficient_launch_configuration   s    
z2TestWarnings.test_inefficient_launch_configurationc              
   C   sZ   t jdd„ ƒ}tddƒ�( tjdd��}|d ƒ  W 5 Q R X W 5 Q R X |  t|ƒd¡ d S )	Nc                   S   s   d S r
   r   r   r   r   r   r      s    z@TestWarnings.test_efficient_launch_configuration.<locals>.kernelr   r   Tr   )é   r   r   )r   r   r   r   r   r   Úlenr   r   r   r   Ú#test_efficient_launch_configuration   s    
z0TestWarnings.test_efficient_launch_configurationc              
   C   s¤   t jdd„ ƒ}d}tj|tjd�}tddƒ�0 tjdd��}|d|f ||ƒ W 5 Q R X W 5 Q R X |  |d	 j	t
¡ |  d
t|d	 jƒ¡ |  dt|d	 jƒ¡ d S )Nc                 S   s   |d | d< d S ©Nr   r   r   ©ÚrÚxr   r   r   Úfoo$   s    z1TestWarnings.test_warn_on_host_array.<locals>.fooé
   ©ZdtypeÚCUDA_WARN_ON_IMPLICIT_COPYr   Tr   r   ú)Host array used in CUDA kernel will incurúcopy overhead)r   r   ÚnpZzerosÚfloat32r   r   r   r   r   r   r   r   r   )r   r%   ÚNZarr_f32r   r   r   r   Útest_warn_on_host_array#   s    
&ÿz$TestWarnings.test_warn_on_host_arrayc              
   C   s¤   t jdd„ ƒ}d}t j|tjd�}tddƒ�0 tjdd��}|d|f ||ƒ W 5 Q R X W 5 Q R X |  |d	 j	t
¡ |  d
t|d	 jƒ¡ |  dt|d	 jƒ¡ d S )Nc                 S   s   |d | d< d S r!   r   r"   r   r   r   r%   4   s    z8TestWarnings.test_pinned_warn_on_host_array.<locals>.foor&   r'   r(   r   Tr   r   r)   r*   )r   r   Zpinned_arrayr+   r,   r   r   r   r   r   r   r   r   r   ©r   r%   r-   Zaryr   r   r   r   Útest_pinned_warn_on_host_array3   s    
&ÿz+TestWarnings.test_pinned_warn_on_host_arrayc              
   C   sv   t jdd„ ƒ}d}t j|tjd�}tddƒ�0 tjdd��}|d|f ||ƒ W 5 Q R X W 5 Q R X |  t	|ƒd	¡ d S )
Nc                 S   s   |d | d< d S r!   r   r"   r   r   r   r%   E   s    z5TestWarnings.test_nowarn_on_mapped_array.<locals>.foor&   r'   r(   r   Tr   r   )
r   r   Zmapped_arrayr+   r,   r   r   r   r   r   r/   r   r   r   Útest_nowarn_on_mapped_arrayD   s    
&z(TestWarnings.test_nowarn_on_mapped_arrayc              
   C   sv   t jdd„ ƒ}d}t j|tjd�}tddƒ�0 tjdd��}|d|f ||ƒ W 5 Q R X W 5 Q R X |  t	|ƒd	¡ d S )
Nc                 S   s   |d | d< d S r!   r   r"   r   r   r   r%   T   s    z6TestWarnings.test_nowarn_on_managed_array.<locals>.foor&   r'   r(   r   Tr   r   )
r   r   Zmanaged_arrayr+   r,   r   r   r   r   r   r/   r   r   r   Útest_nowarn_on_managed_arrayR   s    
&z)TestWarnings.test_nowarn_on_managed_arrayc              
   C   sv   t jdd„ ƒ}d}t j|tjd�}tddƒ�0 tjdd��}|d|f ||ƒ W 5 Q R X W 5 Q R X |  t	|ƒd	¡ d S )
Nc                 S   s   |d | d< d S r!   r   r"   r   r   r   r%   b   s    z5TestWarnings.test_nowarn_on_device_array.<locals>.foor&   r'   r(   r   Tr   r   )
r   r   Zdevice_arrayr+   r,   r   r   r   r   r   r/   r   r   r   Útest_nowarn_on_device_arraya   s    
&z(TestWarnings.test_nowarn_on_device_arrayc              	   C   sP   t jdd��}tjddd� W 5 Q R X |  t|ƒd¡ |  dt|d jƒ¡ d S )NTr   ©ÚdebugÚoptr   únot supported by CUDAr   ©	r   r   r   r   r   r   r   r   r   ©r   r   r   r   r   Útest_warn_on_debug_and_opto   s    z'TestWarnings.test_warn_on_debug_and_optc              	   C   sN   t jdd��}tjdd� W 5 Q R X |  t|ƒd¡ |  dt|d jƒ¡ d S )NTr   )r5   r   r7   r   r8   r9   r   r   r   Ú"test_warn_on_debug_and_opt_defaultv   s    z/TestWarnings.test_warn_on_debug_and_opt_defaultc              	   C   s:   t jdd��}tjddd� W 5 Q R X |  t|ƒd¡ d S )NTr   Fr4   r   ©r   r   r   r   r   r   r9   r   r   r   Ú test_no_warn_on_debug_and_no_opt}   s    z-TestWarnings.test_no_warn_on_debug_and_no_optc              	   C   s4   t jdd��}t ¡  W 5 Q R X |  t|ƒd¡ d S )NTr   r   r<   r9   r   r   r   Ú)test_no_warn_with_no_debug_and_opt_kwargsƒ   s    z6TestWarnings.test_no_warn_with_no_debug_and_opt_kwargsN)Ú__name__Ú
__module__Ú__qualname__r   r    r.   r0   r1   r   r2   r3   r:   r;   r=   r>   r   r   r   r   r	   	   s   
r	   Ú__main__)Únumpyr+   Znumbar   Znumba.cuda.testingr   r   r   Znumba.tests.supportr   r   Znumba.core.errorsr   r   r	   r?   Úmainr   r   r   r   Ú<module>   s    