U
    ,‰d  ã                   @   sš   d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ dd„ Zejr\dZnd	ZG d
d„ dejƒZG dd„ dejeƒZedkr–e ¡  dS )é    N)Úconfig)Úruntime)ÚunittestÚSerialMixinÚskip_on_cudasim)Úpatchc                 C   sP   z4ddl m} dd l}d|jd< |  t|jjƒ¡ W n   |  d¡ Y nX d S )Nr   ©ÚcudaÚ0ÚCUDA_VISIBLE_DEVICESéÿÿÿÿ)Únumbar	   ÚosÚenvironÚputÚlenÚgpusÚlst)Úqr	   r   © r   úI/tmp/pip-unpacked-wheel-eu7e0c37/numba/cuda/tests/cudadrv/test_runtime.pyÚset_visible_devices_and_check	   s    
r   ))r   r   ))é	   é   )é
   r   )r   é   )r   r   )é   r   )r   r   )r   r   c                   @   s,   e Zd Zdd„ Zedƒdd„ ƒZdd„ ZdS )	ÚTestRuntimec              
   C   s8   t D ].}tjtd|d |  t ¡ ¡ W 5 Q R X qd S )NÚget_version©Zreturn_value)ÚSUPPORTED_VERSIONSr   Úobjectr   Ú
assertTrueÚis_supported_version©ÚselfÚvr   r   r   Útest_is_supported_version_true   s    z*TestRuntime.test_is_supported_version_truez2The simulator always simulates a supported runtimec              
   C   s8   dD ].}t jtd|d |  t ¡ ¡ W 5 Q R X qd S )N))é   r   )r   é   )é   r   r   r   )r   r!   r   ZassertFalser#   r$   r   r   r   Útest_is_supported_version_false#   s    z+TestRuntime.test_is_supported_version_falsec                 C   s   |   ttj¡ d S )N)ÚassertEqualr    r   Zsupported_versions)r%   r   r   r   Útest_supported_versions+   s    z#TestRuntime.test_supported_versionsN)Ú__name__Ú
__module__Ú__qualname__r'   r   r+   r-   r   r   r   r   r      s   
r   c                   @   s   e Zd Zdd„ ZdS )ÚTestVisibleDevicesc                 C   s¦   ddl m} t|jjƒdkr&|  d¡ tj d¡r@d}|  |¡ t	 
d¡}| ¡ }|jt|fd}| ¡  z| ¡ }W 5 | ¡  X d	}| j|d
|d |  |d¡ d S )Nr   r   )r   r   z This test requires multiple GPUsr   z1Cannot test when CUDA_VISIBLE_DEVICES already setÚspawn)ÚtargetÚargsz+Error running set_visible_devices_and_checkr   )Úmsgr   )r   r	   r   r   r   ZskipTestr   r   ÚgetÚmultiprocessingZget_contextÚQueueÚProcessr   ÚstartÚjoinZassertNotEqualr,   )r%   r	   r5   Úctxr   ÚpZvisible_gpu_countr   r   r   Ú%test_visible_devices_set_after_import0   s     




z8TestVisibleDevices.test_visible_devices_set_after_importN)r.   r/   r0   r>   r   r   r   r   r1   /   s   r1   Ú__main__)r7   r   Z
numba.corer   Znumba.cuda.cudadrv.runtimer   Znumba.cuda.testingr   r   r   Zunittest.mockr   r   ZENABLE_CUDASIMr    ZTestCaser   r1   r.   Úmainr   r   r   r   Ú<module>   s   &