U
    hâËdÖ
  ã                   @   sŒ   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	m
Z
 d dlmZ G dd„ deƒZe
dƒG dd	„ d	eƒƒZed
krˆe ¡  dS )é    N)Úcuda)ÚunittestÚCUDATestCaseÚskip_on_cudasimÚskip_under_cuda_memcheck)Úcaptured_stdoutc                   @   s   e Zd Zdd„ ZdS )ÚTestCudaDetectc              	   C   s>   t ƒ �}t ¡  W 5 Q R X | ¡ }|  d|¡ |  d|¡ d S )NÚFoundzCUDA devices)r   r   ÚdetectÚgetvalueZassertIn)ÚselfÚoutÚoutput© r   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cuda/tests/cudadrv/test_detect.pyÚtest_cuda_detect   s
    zTestCudaDetect.test_cuda_detectN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   r   zHangs cuda-memcheckc                   @   sB   e Zd Zdd„ Zdd„ Zedƒe ej	 
d¡ d¡dd	„ ƒƒZd
S )ÚTestCUDAFindLibsc                 C   s\   t j|t jt j|d�}t d|j¡}z(| ¡  | ¡ \}}| 	¡ | 	¡ fW ¢S | ¡  X dS )N)ÚstdoutÚstderrÚenvg     Àr@)NN)
Ú
subprocessÚPopenÚPIPEÚ	threadingÚTimerÚkillÚcancelÚstartÚcommunicateÚdecode)r   Úcmdliner   ÚpopenÚtimeoutr   Úerrr   r   r   Úrun_cmd   s    ý
zTestCUDAFindLibs.run_cmdc                 C   s2   t j ¡ }t|ƒ||< d}tjd|g}|  ||¡S )Nzžif 1:
            from numba import cuda
            @cuda.jit('(int64,)')
            def kernel(x):
                pass
            kernel(1,)
            z-c)ÚosÚenvironÚcopyÚstrÚsysÚ
executabler'   )r   ÚenvvarZenvvar_valueZenv_copyÚcoder#   r   r   r   Úrun_test_in_separate_process)   s
    
z-TestCUDAFindLibs.run_test_in_separate_processz6Simulator does not hit device library search code pathÚlinuxz
linux onlyc                 C   sp   ddg}d}|D ]&}t j t jj|¡}t j |¡r q8q|dk	rl|  d|¡\}}|  |dk	¡ |  |dk	¡ dS )zŒ
        This tests that the find_libs works as expected in the case of an
        environment variable being used to set the path.
        ÚlibZlib64NZNUMBA_CUDA_DRIVER)r(   ÚpathÚjoinÚsepÚexistsr0   Ú
assertTrue)r   ZlocsZlooking_forÚlr   r&   r   r   r   Útest_cuda_find_lib_errors6   s    	ÿz*TestCUDAFindLibs.test_cuda_find_lib_errorsN)r   r   r   r'   r0   r   r   ZskipIfr,   ÚplatformÚ
startswithr9   r   r   r   r   r      s
   r   Ú__main__)r(   r,   r   r   Znumbar   Znumba.cuda.testingr   r   r   r   Znumba.tests.supportr   r   r   r   Úmainr   r   r   r   Ú<module>   s   
: