
    wg                     f   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j,                         Z eed      Z G d d	eej4                        Zd
 Zd Z ed       ej<                  ed       ed       G d de                           Z ed       ej<                  ed       ed       G d de                           Z  ed       ej<                  ed       ed       G d de                           Z!d Z"e#dk(  r ejH                          yy)    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                   .    e Zd Zd Zd Zd Zed        Zy)LibraryLookupBasec                     t        j                  d      }|j                         }|j                         }|| _        || _        |j                  t        ||fd      | _        | j                  j                          y )NspawnT)targetargsdaemon)	mpr   QueueqsendqrecvProcesscheck_lib_lookupchild_processstart)selfctxr   r   s       p/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/cuda/tests/nocuda/test_library_lookup.pysetUpzLibraryLookupBase.setUp   sk    nnW%				

 [[# ) 

 	  "    c                     | j                   j                  | j                         | j                  j	                  d       | j                  | j                         y )N   )r   putdo_terminater   joinassertIsNotNone)r   s    r!   tearDownzLibraryLookupBase.tearDown*   s@    

t(()"T//0r#   c                     | j                   j                  |       | j                  j                         }| j	                  |t
               |S )N)r   r&   r   getassertNotIsInstanceBaseException)r   actionouts      r!   	remote_dozLibraryLookupBase.remote_do0   s7    

vjjnn  m4
r#   c                       y)N)FN r3   r#   r!   r'   zLibraryLookupBase.do_terminate6   s    r#   N)__name__
__module____qualname__r"   r*   r1   staticmethodr'   r3   r#   r!   r   r      s%    #1  r#   r   c                 F    	 t         j                  | = y# t        $ r Y yw xY w)NTF)osenvironKeyError)names    r!   
remove_envr=   ;   s,    JJt   s    	  c                    d}|rn	 |j                         }	 t        j                  d      5 }t        j                  dt                |       \  }}d d d        | j                  fz          |rmy y # 1 sw Y   #xY w# t        $ r}| j                  |       d}Y d }~2d }~ww xY w# t        $ r}| j                  |       d}Y d }~[d }~ww xY w)NT)recordalwaysF)r,   warningscatch_warningssimplefilterr   r&   	Exception)qoutqinstatusr/   wresultes          r!   r   r   D   s    F
	WWYF
,,D9 .Q))(LA%+XNFF. 1$' . .    	HHQKF	sE   B) B  %A4B  4A=9B   	B&	B!!B&)	C2C

Cz.Library detection unsupported in the simulatorzmp.get_context not availablez(test assumes conda installed cudatoolkitc                   2    e Zd Zd Zed        Zed        Zy)TestLibDeviceLookUpc                    | j                  | j                        \  }}}t        r| j                  |d       n#| j                  |d       | j	                  |       | j                  |       | j                  | j                        \  }}}| j                  |d       | j                  |t        j                  j                  ddd             | j                  |       t               T| j                  | j                        \  }}}| j                  |d       | j	                  |       | j                  |       y | j                  | j                        \  }}}| j                  |d       | j                  |       y )NConda environment	<unknown>	CUDA_HOME
mycudahomer   	libdeviceSystem)r1   do_clear_envshas_cudaassertEqualassertIsNoneassertFalsedo_set_cuda_homer9   pathr(   r   r   byinfowarnss       r!   test_libdevice_path_decisionz0TestLibDeviceLookUp.test_libdevice_path_decision[   s>   ..););<D%R!45R-d#..)>)>?D%[)rww||L&+NO#"nnT-?-?@OBeR-d#U# #nnT-?-?@OBeR*U#r#   c                  F    t        d       t        d       dt               fS NrP   	CUDA_PATHT)r=   r   r3   r#   r!   rT   z!TestLibDeviceLookUp.do_clear_envsv   s!    ;;1333r#   c                      t         j                  j                  d      t         j                  d<   t	                dt               fS NrQ   rP   T)r9   rZ   r(   r:   _fake_non_conda_envr   r3   r#   r!   rY   z$TestLibDeviceLookUp.do_set_cuda_home|   s2    "$'',,|"<

;1333r#   N)r4   r5   r6   r_   r7   rT   rY   r3   r#   r!   rL   rL   W   s/    $6 4 4
 4 4r#   rL   c                   2    e Zd Zd Zed        Zed        Zy)TestNvvmLookUpc                    | j                  | j                        \  }}}t        r| j                  |d       n#| j                  |d       | j	                  |       | j                  |       | j                  | j                        \  }}}| j                  |d       | j                  |       t        r2| j                  |t        j                  j                  ddd             nit        r2| j                  |t        j                  j                  ddd             n1| j                  |t        j                  j                  ddd             t               T| j                  | j                        \  }}}| j                  |d       | j	                  |       | j                  |       y | j                  | j                        \  }}}| j                  |d	       | j                  |       y )
NrN   rO   rP   rQ   r   binliblib64rS   r1   rT   rU   rV   rW   rX   rY   r   r9   rZ   r(   r   r   r[   s       r!   test_nvvm_path_decisionz&TestNvvmLookUp.test_nvvm_path_decision   s   ..););<D%R!45R-d#..)>)>?D%[)T277<<fe#LMT277<<fe#LMT277<<fg#NO#"nnT-?-?@OBeR-d#U# #nnT-?-?@OBeR*U#r#   c                  F    t        d       t        d       dt               fS ra   )r=   r   r3   r#   r!   rT   zTestNvvmLookUp.do_clear_envs   s!    ;;,...r#   c                      t         j                  j                  d      t         j                  d<   t	                dt               fS rd   )r9   rZ   r(   r:   re   r   r3   r#   r!   rY   zTestNvvmLookUp.do_set_cuda_home   s2    "$'',,|"<

;,...r#   N)r4   r5   r6   rm   r7   rT   rY   r3   r#   r!   rg   rg      s0    $@ / /
 / /r#   rg   c                   2    e Zd Zd Zed        Zed        Zy)TestCudaLibLookUpc                    | j                  | j                        \  }}}t        r| j                  |d       n#| j                  |d       | j	                  |       | j                  |       | j                  | j                         | j                  | j                        \  }}}| j                  |d       | j                  |       t        r1| j                  |t        j                  j                  dd             ngt        r1| j                  |t        j                  j                  dd             n0| j                  |t        j                  j                  dd             t               T| j                  | j                        \  }}}| j                  |d       | j	                  |       | j                  |       y | j                  | j                        \  }}}| j                  |d       | j                  |       y )	NrN   rO   rP   rQ   ri   rj   rk   rS   rl   r[   s       r!   test_cudalib_path_decisionz,TestCudaLibLookUp.test_cudalib_path_decision   s   ..););<D%R!45R-d# 	t))*..)>)>?D%[)T277<<e#DET277<<e#DET277<<g#FG#"nnT-?-?@OBeR-d#U# #nnT-?-?@OBeR*U#r#   c                  F    t        d       t        d       dt               fS ra   )r=   r   r3   r#   r!   rT   zTestCudaLibLookUp.do_clear_envs   s!    ;;3555r#   c                      t         j                  j                  d      t         j                  d<   t	                dt               fS rd   )r9   rZ   r(   r:   re   r   r3   r#   r!   rY   z"TestCudaLibLookUp.do_set_cuda_home   s2    "$'',,|"<

;3555r#   N)r4   r5   r6   rs   r7   rT   rY   r3   r#   r!   rq   rq      s0    $B 6 6
 6 6r#   rq   c                      dt         _        y)zG
    Monkeypatch sys.prefix to hide the fact we are in a conda-env
     N)sysprefixr3   r#   r!   re   re      s     CJr#   __main__)%rx   r9   multiprocessingr   rA   numba.core.configr   r   numba.core.errorsr   numba.cuda.cudadrvr   numba.cuda.testingr   r   r	   r
   numba.cuda.cuda_pathsr   r   r   r   is_availablerU   hasattrhas_mp_get_contextTestCaser   r=   r   
skipUnlessrL   rg   rq   re   r4   mainr3   r#   r!   <module>r      sr   
 	   . * #   4R/ X%6%6 @& AB')GHIJ&4+ &4 K I C&4R AB')GHIJ+/& +/ K I C+/\ AB')GHIJ,6) ,6 K I C,6^ zHMMO r#   