o
    ۾i                     @   sR  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re$  dS 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   _/home/ubuntu/.local/lib/python3.10/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   joinassertIsNotNone)r   r   r   r   tearDown*   s   zLibraryLookupBase.tearDownc                 C   s&   | j | | j }| |t |S )N)r   r"   r   get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 dS  ty   Y dS w )NFT)osenvironKeyError)namer   r   r   
remove_env;   s   
r5   c              
   C   s   d}|rmz|  }W n ty# } z| | d}W Y d }~nJd }~ww z+tjdd}tdt | \}}W d    n1 sAw   Y  | ||f  W n tyh } z| | d}W Y d }~nd }~ww |sd S d S )NTF)recordalways)r'   	Exceptionr"   warningscatch_warningssimplefilterr   )qout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                   @   ,   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 u rb|  | j\}}}| |d | | | | d S |  | j\}}}| |d | | d S )NConda environment	<unknown>	CUDA_HOME
mycudahomer   	libdeviceSystem)r,   do_clear_envshas_cudaassertEqualassertIsNoneassertFalsedo_set_cuda_homer1   pathr$   r   r   byinfowarnsr   r   r   test_libdevice_path_decision[   s$   




z0TestLibDeviceLookUp.test_libdevice_path_decisionc                   C      t d t d dt fS NrF   	CUDA_PATHT)r5   r
   r   r   r   r   rJ   v      
z!TestLibDeviceLookUp.do_clear_envsc                   C   "   t jdt jd< t  dt fS NrG   rF   T)r1   rP   r$   r2   _fake_non_conda_envr
   r   r   r   r   rO   |      
z$TestLibDeviceLookUp.do_set_cuda_homeN)r-   r.   r/   rU   r0   rJ   rO   r   r   r   r   rC   W   s    
rC   c                   @   rB   )TestNvvmLookUpc                 C   s,  |  | j\}}}tr| |d n| |d | | | | |  | j\}}}| |d | | trE| |tj	
ddd ntrT| |tj	
ddd n| |tj	
ddd t d u r|  | j\}}}| |d | | | | d S |  | j\}}}| |d	 | | d S )
NrD   rE   rF   rG   r   binliblib64rI   r,   rJ   rK   rL   rM   rN   rO   r   r1   rP   r$   r   r   rQ   r   r   r   test_nvvm_path_decision   s,   




z&TestNvvmLookUp.test_nvvm_path_decisionc                   C   rV   rW   )r5   r   r   r   r   r   rJ      rY   zTestNvvmLookUp.do_clear_envsc                   C   rZ   r[   )r1   rP   r$   r2   r\   r   r   r   r   r   rO      r]   zTestNvvmLookUp.do_set_cuda_homeN)r-   r.   r/   rc   r0   rJ   rO   r   r   r   r   r^      s     
r^   c                   @   rB   )TestCudaLibLookUpc                 C   s2  |  | j\}}}tr| |d n| |d | | | | |  | j |  | j\}}}| |d | | trJ| |tj	
dd ntrX| |tj	
dd n| |tj	
dd t d u r|  | j\}}}| |d | | | | d S |  | j\}}}| |d | | d S )	NrD   rE   rF   rG   r_   r`   ra   rI   rb   rQ   r   r   r   test_cudalib_path_decision   s.   




z,TestCudaLibLookUp.test_cudalib_path_decisionc                   C   rV   rW   )r5   r   r   r   r   r   rJ      rY   zTestCudaLibLookUp.do_clear_envsc                   C   rZ   r[   )r1   rP   r$   r2   r\   r   r   r   r   r   rO      r]   z"TestCudaLibLookUp.do_set_cuda_homeN)r-   r.   r/   re   r0   rJ   rO   r   r   r   r   rd      s    !
rd   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   r\      s   
r\   __main__)%rg   r1   multiprocessingr   r9   numba.core.configr   r   numba.core.errorsr   numba.cuda.cudadrvr   numba.cuda.testingr   r   r   r	   numba.cuda.cuda_pathsr
   r   r   r   is_availablerK   hasattrhas_mp_get_contextTestCaser   r5   r   
skipUnlessrC   r^   rd   r\   r-   mainr   r   r   r   <module>   s<    
 	
)
.
/