o
    gµ„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r§e $¡  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/kuhnn/.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<    
 	
)
.
/ÿ