U
    ?h  ã                   @   sP  d dl Z d dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZ d dlmZmZmZmZ e ¡ ZeedƒZG dd	„ d	eejƒZd
d„ Zdd„ Zedƒe ed¡edƒG dd„ deƒƒƒƒZedƒe ed¡edƒG dd„ deƒƒƒƒZ edƒe ed¡edƒG dd„ deƒƒƒƒZ!dd„ Z"e#dkrLe $¡  dS )é    N)ÚIS_WIN32ÚIS_OSX)ÚNumbaWarning)Únvvm)ÚunittestÚskip_on_cudasimÚSerialMixinÚskip_unless_conda_cudatoolkit)Ú_get_libdevice_path_decisionÚ_get_nvvm_path_decisionÚ_get_cudalib_dir_path_decisionÚget_system_ctkÚget_contextc                   @   s0   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZd	S )
ÚLibraryLookupBasec                 C   sJ   t  d¡}| ¡ }| ¡ }|| _|| _|jt||fdd| _| j ¡  d S )NÚspawnT)ÚtargetÚargsÚdaemon)	Úmpr   ÚQueueÚqsendÚqrecvÚProcessÚcheck_lib_lookupÚchild_processÚstart)ÚselfÚctxr   r   © r   ú]/var/www/html/venv/lib/python3.8/site-packages/numba/cuda/tests/nocuda/test_library_lookup.pyÚsetUp   s    
ýzLibraryLookupBase.setUpc                 C   s*   | j  | j¡ | j d¡ |  | j¡ d S )Né   )r   ÚputÚdo_terminater   ÚjoinZassertIsNotNone)r   r   r   r   ÚtearDown*   s    zLibraryLookupBase.tearDownc                 C   s&   | j  |¡ | j ¡ }|  |t¡ |S )N)r   r"   r   ÚgetZassertNotIsInstanceÚBaseException)r   ÚactionÚoutr   r   r   Ú	remote_do0   s    
zLibraryLookupBase.remote_doc                   C   s   dS )N)FNr   r   r   r   r   r#   6   s    zLibraryLookupBase.do_terminateN)Ú__name__Ú
__module__Ú__qualname__r    r%   r*   Ústaticmethodr#   r   r   r   r   r      s
   r   c                 C   s,   zt j| = W n tk
r"   Y dS X dS d S )NFT)ÚosÚenvironÚKeyError)Únamer   r   r   Ú
remove_env;   s
    r3   c              
   C   sÀ   d}|r¼z|  ¡ }W n0 tk
rD } z|  |¡ d}W 5 d }~X Y qX zBtjdd}t dt¡ |ƒ \}}W 5 Q R X |  ||f ¡ W q tk
r¸ } z|  |¡ d}W 5 d }~X Y qX qd S )NTF)ÚrecordÚalways)r&   Ú	Exceptionr"   ÚwarningsÚcatch_warningsÚsimplefilterr   )ZqoutZqinÚstatusr(   ÚeÚwÚresultr   r   r   r   D   s    

r   z.Library detection unsupported in the simulatorzmp.get_context not availablez(test assumes conda installed cudatoolkitc                   @   s,   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdS )ÚTestLibDeviceLookUpc                 C   sî   |   | j¡\}}}tr$|  |d¡ n|  |d¡ |  |¡ |  |¡ |   | j¡\}}}|  |d¡ |  |tj 	ddd¡¡ |  |¡ t
ƒ d krÂ|   | j¡\}}}|  |d¡ |  |¡ |  |¡ n(|   | j¡\}}}|  |d¡ |  |¡ d S )NúConda environmentú	<unknown>Ú	CUDA_HOMEÚ
mycudahomer   Z	libdeviceÚSystem)r*   Údo_clear_envsÚhas_cudaÚassertEqualÚassertIsNoneÚassertFalseÚdo_set_cuda_homer/   Úpathr$   r   ©r   ZbyÚinfoZwarnsr   r   r   Útest_libdevice_path_decision[   s$    




z0TestLibDeviceLookUp.test_libdevice_path_decisionc                   C   s   t dƒ t dƒ dtƒ fS ©NrA   Z	CUDA_PATHT)r3   r
   r   r   r   r   rD   v   s    z!TestLibDeviceLookUp.do_clear_envsc                   C   s"   t j d¡t jd< tƒ  dtƒ fS ©NrB   rA   T)r/   rJ   r$   r0   Ú_fake_non_conda_envr
   r   r   r   r   rI   |   s    z$TestLibDeviceLookUp.do_set_cuda_homeN)r+   r,   r-   rM   r.   rD   rI   r   r   r   r   r>   W   s
   
r>   c                   @   s,   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdS )ÚTestNvvmLookUpc                 C   s*  |   | j¡\}}}tr$|  |d¡ n|  |d¡ |  |¡ |  |¡ |   | j¡\}}}|  |d¡ |  |¡ trŠ|  |tj	 
ddd¡¡ n6tr¨|  |tj	 
ddd¡¡ n|  |tj	 
ddd¡¡ tƒ d krþ|   | j¡\}}}|  |d¡ |  |¡ |  |¡ n(|   | j¡\}}}|  |d	¡ |  |¡ d S )
Nr?   r@   rA   rB   r   ÚbinÚlibÚlib64rC   ©r*   rD   rE   rF   rG   rH   rI   r   r/   rJ   r$   r   r   rK   r   r   r   Útest_nvvm_path_decision‡   s,    




z&TestNvvmLookUp.test_nvvm_path_decisionc                   C   s   t dƒ t dƒ dtƒ fS rN   )r3   r   r   r   r   r   rD   §   s    zTestNvvmLookUp.do_clear_envsc                   C   s"   t j d¡t jd< tƒ  dtƒ fS rO   )r/   rJ   r$   r0   rP   r   r   r   r   r   rI   ­   s    zTestNvvmLookUp.do_set_cuda_homeN)r+   r,   r-   rV   r.   rD   rI   r   r   r   r   rQ   ƒ   s
    
rQ   c                   @   s,   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdS )ÚTestCudaLibLookUpc                 C   s2  |   | j¡\}}}tr$|  |d¡ n|  |d¡ |  |¡ |  |¡ |   | j¡ |   | j¡\}}}|  |d¡ |  |¡ tr”|  |tj	 
dd¡¡ n2tr°|  |tj	 
dd¡¡ n|  |tj	 
dd¡¡ tƒ d kr|   | j¡\}}}|  |d¡ |  |¡ |  |¡ n(|   | j¡\}}}|  |d¡ |  |¡ d S )	Nr?   r@   rA   rB   rR   rS   rT   rC   rU   rK   r   r   r   Útest_cudalib_path_decision¸   s.    



z,TestCudaLibLookUp.test_cudalib_path_decisionc                   C   s   t dƒ t dƒ dtƒ fS rN   )r3   r   r   r   r   r   rD   Ù   s    zTestCudaLibLookUp.do_clear_envsc                   C   s"   t j d¡t jd< tƒ  dtƒ fS rO   )r/   rJ   r$   r0   rP   r   r   r   r   r   rI   ß   s    z"TestCudaLibLookUp.do_set_cuda_homeN)r+   r,   r-   rX   r.   rD   rI   r   r   r   r   rW   ´   s
   !
rW   c                   C   s
   dt _dS )zG
    Monkeypatch sys.prefix to hide the fact we are in a conda-env
    Ú N)ÚsysÚprefixr   r   r   r   rP   æ   s    rP   Ú__main__)%rZ   r/   Úmultiprocessingr   r7   Znumba.core.configr   r   Znumba.core.errorsr   Znumba.cuda.cudadrvr   Znumba.cuda.testingr   r   r   r	   Znumba.cuda.cuda_pathsr
   r   r   r   Zis_availablerE   ÚhasattrZhas_mp_get_contextZTestCaser   r3   r   Z
skipUnlessr>   rQ   rW   rP   r+   Úmainr   r   r   r   Ú<module>   s8   
 	
)
.
/
