U
    ,‰dÈ  ã                   @   s„   d dl Z d dlZd dlZd dlmZ d dlmZm	Z	 d dl
Z
eedƒZe jdkZdd„ ZedƒG d	d
„ d
e	ƒƒZedkr€e
 ¡  dS )é    N)Úcuda)Úskip_on_cudasimÚCUDATestCaseÚget_contextÚposixc              
   C   s\   ddl m} zt t d¡¡ W n, |k
rL } z|  |¡ W 5 d }~X Y nX |  d ¡ d S )Nr   )ÚCudaDriverErroré   )Znumba.cuda.cudadrv.errorr   r   Z	to_deviceÚnpZarangeÚput)Úqr   Úe© r   úP/tmp/pip-unpacked-wheel-eu7e0c37/numba/cuda/tests/cudapy/test_multiprocessing.pyÚ	fork_test   s    r   zdisabled for cudasimc                   @   s,   e Zd Ze ed¡e ed¡dd„ ƒƒZdS )ÚTestMultiprocessingzrequires mp.get_contextzrequires Unixc                 C   s`   t  ¡  t d¡}| ¡ }|jt|gd}| ¡  | ¡ }| 	¡  |  
|¡ |  dt|ƒ¡ dS )z&
        Test fork detection.
        Úfork)ÚtargetÚargszCUDA initialized before forkingN)r   Zcurrent_contextÚmpr   ÚQueueÚProcessr   ÚstartÚgetÚjoinZassertIsNotNoneZassertInÚstr)ÚselfÚctxr   ÚprocÚexcr   r   r   Ú	test_fork   s    

zTestMultiprocessing.test_forkN)Ú__name__Ú
__module__Ú__qualname__ÚunittestZ
skipUnlessÚhas_mp_get_contextÚis_unixr   r   r   r   r   r      s   

r   Ú__main__)ÚosÚmultiprocessingr   Znumpyr	   Znumbar   Znumba.cuda.testingr   r   r#   Úhasattrr$   Únamer%   r   r   r    Úmainr   r   r   r   Ú<module>   s   


