
    J/Ph                     z   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlZ ee          j        Zedz  d	z  Z G d
 dee          Z G d de          Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d  Z)d! Z*d" Z+ G d# d$e,          Z-dS )%    N)SerialMixin)get_conda_ctk)driverdeviceslibs)config)TestCase)Pathtestsdatac                   $    e Zd ZdZd Zd Zd ZdS )CUDATestCasea)  
    For tests that use a CUDA device. Test methods in a CUDATestCase must not
    be run out of module order, because the ContextResettingTestCase may reset
    the context and destroy resources used by a normal CUDATestCase if any of
    its tests are run between tests from a CUDATestCase.
    c                 z    t           j        | _        t           j        | _        dt           _        dt           _        d S )Nr   )r   CUDA_LOW_OCCUPANCY_WARNINGS_low_occupancy_warningsCUDA_WARN_ON_IMPLICIT_COPY_warn_on_implicit_copyselfs    R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cuda/testing.pysetUpzCUDATestCase.setUp   s0    '-'I$&,&G# ./*,-)))    c                 J    | j         t          _        | j        t          _        d S N)r   r   r   r   r   r   s    r   tearDownzCUDATestCase.tearDown"   s    -1-I*,0,G)))r   c                     t          j                    j        j        }t          j                            |          }|j        r|                     |           d S d S )N)cc)	r   get_contextdevicecompute_capabilityr   LinkernewltoskipTest)r   reasonr   linkers       r   skip_if_ltozCUDATestCase.skip_if_lto&   s\      "")<""b")): 	"MM&!!!!!	" 	"r   N)__name__
__module____qualname____doc__r   r   r'    r   r   r   r      sN         . . .H H H" " " " "r   r   c                   "     e Zd ZdZ fdZ xZS )ContextResettingTestCasea  
    For tests where the context needs to be reset after each test. Typically
    these inspect or modify parts of the context that would usually be expected
    to be internal implementation details (such as the state of allocations and
    deallocations, etc.).
    c                 h    t                                                       ddlm}  |             d S )Nr   )reset)superr   numba.cuda.cudadrv.devicesr0   )r   r0   	__class__s     r   r   z!ContextResettingTestCase.tearDown7   s:    444444r   )r(   r)   r*   r+   r   __classcell__)r3   s   @r   r.   r.   /   sB                 r   r.   c                  ^    ddl m}  ddlm}  |             r|                                 d S d S )Nr   )is_available)nvvm)
numba.cudar6   numba.cuda.cudadrvr7   get_supported_ccs)cuda_is_availabler7   s     r    ensure_supported_ccs_initializedr<   =   s[    <<<<<<'''''' ! 	     ! !r   c                 @    t          j        t          j        |           S )z/Skip this test if running on the CUDA simulator)unittestskipIfr   ENABLE_CUDASIMr%   s    r   skip_on_cudasimrB   K   s    ?60&999r   c                 @    t          j        t          j        |           S )z*Skip this test if running on CUDA hardware)r>   
skipUnlessr   r@   rA   s    r   skip_unless_cudasimrE   P   s    v4f===r   c                 H    t          j        t                      du|           S )z8Skip test if the CUDA toolkit was not installed by CondaN)r>   rD   r   rA   s    r   skip_unless_conda_cudatoolkitrG   U   s    }d:FCCCr   c                 H    t          j        t          j        dk    |           S )z$Skip test if an EMM Plugin is in usedefault)r>   r?   r   CUDA_MEMORY_MANAGERrA   s    r   skip_if_external_memmgrrK   Z   s    ?65BFKKKr   c                 j    t          j        t          j                            d          d u|           S )NCUDA_MEMCHECK)r>   r?   osenvirongetrA   s    r   skip_under_cuda_memcheckrQ   _   s'    ?2:>>/::$FOOOr   c                 X    t          j        d          }t          j        |d u |           S Nnvdisasmshutilwhichr>   r?   r%   nvdisasm_paths     r   skip_without_nvdisasmrZ   c   s(    L,,M?=D0&999r   c                 X    t          j        d          }t          j        |d u|           S rS   rU   rX   s     r   skip_with_nvdisasmr\   h   s(    L,,M?=4f===r   c                     t          j                    }|                    d          p|                    d          }t          j        ||           S )Narmaarch)platform	processor
startswithr>   r?   )r%   cpuis_arms      r   skip_on_armre   m   sD    



C^^E""=cnnW&=&=F?66***r   c                    t           j                            t          j        d          }t           j                            |          ot           j                            |          }d} t          j        ||          |           S )Nzcuda.hz-CUDA include dir not available on this system)	rN   pathjoinr   CUDA_INCLUDE_PATHexistsisfiler>   rD   )fncuda_hcuda_h_filer%   s       r   skip_if_cuda_includes_missingro   s   sd     W\\&2H==F7>>&))DbgnnV.D.DK<F38{F33B777r   c                 @    t          j        t          j        |           S )z5Skip a test if Minor Version Compatibility is enabled)r>   r?   r   'CUDA_ENABLE_MINOR_VERSION_COMPATIBILITYrA   s    r   skip_if_mvc_enabledrr   |   s    ?6I!# # #r   c                 z    d}	 dd l }dd l}d}n# t          $ r Y nw xY w t          j        |d          |           S )NFr   Tz$Requires cubinlinker and ptxcompiler)cubinlinkerptxcompilerImportErrorr>   rD   )rl   libs_availablert   ru   s       r   !skip_if_mvc_libraries_unavailablerx      s|    N   G8~EG GGIK K Ks   
 
c                 h    t           j        s%t          j                    j        j        }|| |fk    S dS )NT)r   r@   r   r   r   r    )majorminorr   s      r   cc_X_or_abover|      s5       "")<eU^##tr   c                 Z     t          j        t          dd          d          |           S )N   r   zrequires cc >= 5.0r>   rD   r|   rl   s    r   skip_unless_cc_50r      *    I8}Q224HII"MMMr   c                 Z     t          j        t          dd          d          |           S )Nr~      zrequires cc >= 5.3r   r   s    r   skip_unless_cc_53r      r   r   c                 Z     t          j        t          dd          d          |           S )N   r   zrequires cc >= 6.0r   r   s    r   skip_unless_cc_60r      r   r   c                 Z     t          j        t          dd          d          |           S )N   r~   zrequires cc >= 7.5r   r   s    r   skip_unless_cc_75r      r   r   c                 F    t           j        r| S t          j        |           S r   )r   r@   r>   expectedFailurer   s    r   xfail_unless_cudasimr      s#     ,	'+++r   c                 @    t          j        t          j        |           S r   )r>   r?   r   USE_NV_BINDINGrA   s    r   skip_with_cuda_pythonr      s    ?60&999r   c                      t           j        rdS 	 t          j        dd          } t          j        |            n# t
          $ r Y dS w xY wdS )NF	cudadevrtT)static)r   r@   r   get_cudalibcheck_static_libFileNotFoundError)rg   s    r   cudadevrt_missingr      sg     uD999d####   tt5s   *; 
A	A	c                 V     t          j        t                      d          |           S )Nzcudadevrt missing)r>   r?   r   r   s    r   skip_if_cudadevrt_missingr      s&    D8?,..0CDDRHHHr   c                       e Zd ZdZd ZdS )ForeignArrayz
    Class for emulating an array coming from another library through the CUDA
    Array interface. This just hides a DeviceNDArray so that it doesn't look
    like a DeviceNDArray.
    c                 ,    || _         |j        | _        d S r   )_arr__cuda_array_interface__)r   arrs     r   __init__zForeignArray.__init__   s    	(+(D%%%r   N)r(   r)   r*   r+   r   r,   r   r   r   r      s2         E E E E Er   r   ).rN   r`   rV   numba.tests.supportr   numba.cuda.cuda_pathsr   r9   r   r   r   
numba.corer   r	   pathlibr
   r>   __file__parentnumba_cuda_dirtest_data_dirr   r.   r<   rB   rE   rG   rK   rQ   rZ   r\   re   ro   rr   rx   r|   r   r   r   r   r   r   r   r   objectr   r,   r   r   <module>r      s   				   + + + + + + / / / / / / 4 4 4 4 4 4 4 4 4 4       ( ( ( ( ( (       h&(61" " " " "; " " "<    |   ! ! !: : :
> > >
D D D
L L L
P P P: : :
> > >
+ + +8 8 8# # #
K 
K 
K  N N NN N NN N NN N N, , ,: : :  I I I	E 	E 	E 	E 	E6 	E 	E 	E 	E 	Er   