
    wgs                         d dl Zd dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlmZmZ d dlmZmZ d dlmZ  ed      e ed	       G d
 de                           Zedk(  r ej(                          yy)    N)byrefc_size_t)device_memsetdriverUSE_NV_BINDING)cuda)unittestContextResettingTestCase)skip_on_cudasimskip_on_arm)
linux_onlyz,CUDA Driver API unsupported in the simulatorz5Managed Alloc support is experimental/untested on ARMc                   d    e Zd Zd Zd Zd Zej                  d        Zd Z	ddZ
ddZd Zd	 Zy
)TestManagedAllocc                     t         rt        j                         \  }}|S t               }t               }t        j                  t	        |      t	        |             |j
                  S N)r   r   cuMemGetInfor   r   value)selffreetotals      p/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/cuda/tests/cudadrv/test_managed_alloc.pyget_total_gpu_memoryz%TestManagedAlloc.get_total_gpu_memory   sN      --/KD%L:DJEdU5\:;;    c                     t        j                         }|j                  j                  d   }||k  r| j	                  |       yy)zt
        Skip the current test if the compute capability of the device is
        less than `min_required`.
        r   N)r   current_contextdevicecompute_capabilityskipTest)r   min_requiredreasonctxcc_majors        r   skip_if_cc_major_ltz$TestManagedAlloc.skip_if_cc_major_lt   s?    
 ""$::003l"MM&! #r   c                 N    d}| j                  d|       | j                  d       y )Nz*Managed memory unsupported prior to CC 3.0   g      ?r#   _test_managed_alloc_driverr   msgs     r   (test_managed_alloc_driver_undersubscribez9TestManagedAlloc.test_managed_alloc_driver_undersubscribe0   s%    :  C('',r   c                 N    d}| j                  d|       | j                  d       y )Nz>Oversubscription of managed memory unsupported prior to CC 6.0   g       @r&   r(   s     r   'test_managed_alloc_driver_oversubscribez8TestManagedAlloc.test_managed_alloc_driver_oversubscribe=   s%    N  C('',r   c                 R    d}| j                  d|       | j                  dd       y )N>Host attached managed memory is not accessible prior to CC 6.0r,   g{Gz?Fattach_globalr&   r(   s     r   %test_managed_alloc_driver_host_attachz6TestManagedAlloc.test_managed_alloc_driver_host_attachC   s,    N  C( 	''E'Br   c                    | j                         }t        ||z        }t        j                         }|j	                  ||      }t        j                  t
        j                        }||j                  z  }t        j                  |||      }	d}
t        ||
|       |j                          | j                  t        j                  |	|
k(               y )Nr0   )shapedtypebuffer   )r   intr   r   memallocmanagednpr5   uint8itemsizendarrayr   synchronize
assertTrueall)r   memory_factorr1   total_mem_sizen_bytesr!   memr5   n_elemsarymagics              r   r'   z+TestManagedAlloc._test_managed_alloc_driverJ   s     224mn45""$!!'!G"U^^+jjweC@c5'* 	se|,-r   c                 t   t        j                  dt        j                        }|j	                  d       | j                  t        |dk(               t        j                  d      d        } |d   |       t        j                         j                          | j                  t        |dk(               y )Nd   )r5   gw/^@zvoid(double[:])c                 ^    t        j                  d      }|| j                  d   k  rd| |<   y y )N   r         ?)r   gridr4   )xis     r   kernelz4TestManagedAlloc._test_managed_array.<locals>.kerneli   s,    		!A1771:~! r   )
   rQ   rL   )
r   managed_arrayr:   doublefillr?   r@   jitr   r>   )r   r1   rF   rP   s       r   _test_managed_arrayz$TestManagedAlloc._test_managed_arrayb   s       BII6C7N+,	#	$	 
%	
 	vs**,C3J(r   c                 $    | j                          y r   )rV   )r   s    r    test_managed_array_attach_globalz1TestManagedAlloc.test_managed_array_attach_globalt   s      "r   c                 p    | j                          d}| j                  d|       | j                  d       y )Nr/   r,   Fr0   )rV   r#   r(   s     r   test_managed_array_attach_hostz/TestManagedAlloc.test_managed_array_attach_hostw   s4      "N  C(  u 5r   N)T)__name__
__module____qualname__r   r#   r*   r	   skipr-   r2   r'   rV   rX   rZ    r   r   r   r   
   sC    
"(- ]]- -
C.0)$#6r   r   __main__)numpyr:   ctypesr   r   numba.cuda.cudadrv.driverr   r   r   numbar   numba.cuda.testingr	   r
   r   r   numba.tests.supportr   r   r[   mainr_   r   r   <module>rh      su     " K K  A ; * ?@DEn6/ n6 F  An6b zHMMO r   