
    wg                     2   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 ej                  s  G d dej                        Z G d d	e      Z ed
       G d de
             Z ed
       G d de
             Zedk(  r e	j*                          yy)    N)cuda)config)unittestCUDATestCaseskip_on_cudasim)
linux_onlyc                   P     e Zd ZdZ fdZd Zd Zd Zd Zd Z	e
d        Z xZS )	DeviceOnlyEMMPluginz
        Dummy EMM Plugin implementation for testing. It memorises which plugin
        API methods have been called so that the tests can check that Numba
        called into the plugin as expected.
        c                     t        |   |i | i | _        d| _        d| _        d| _        d| _        d| _        d| _        y )Nr   F)	super__init__allocationscountinitializedmemalloc_calledreset_calledget_memory_info_calledget_ipc_handle_called)selfargskwargs	__class__s      n/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/cuda/tests/cudadrv/test_emm_plugins.pyr   zDeviceOnlyEMMPlugin.__init__   sP    Gd-f-  "DDJ  %D#(D  %D*/D').D&    c                    | j                   st        d      d| _        | xj                  dz  c_        | j                  || j                  <   | j                  fd}t        j                  | j                        }t        j                        }t        j                  j                  j                  ||||      S )Nz!memalloc called before initializeT   c                       = y N )alloc_countfinalizer_allocss   r   	finalizerz/DeviceOnlyEMMPlugin.memalloc.<locals>.finalizer4   s    $[1r   )r"   )r   RuntimeErrorr   r   r   weakrefproxycontextctypesc_void_pr   cudadrvdriverAutoFreePointer)r   sizer"   ctxptrr    r!   s        @@r   memalloczDeviceOnlyEMMPlugin.memalloc    s     ##"#FGG#'D  JJ!OJ**K,0D[)  $//2
 ---C//+.C<<&&66sCAJ 7 L Lr   c                     d| _         y NT)r   r   s    r   
initializezDeviceOnlyEMMPlugin.initialize>   s
    #Dr   c                     d| _         y r1   )r   r2   s    r   resetzDeviceOnlyEMMPlugin.resetB   s     !%Dr   c                 >    d| _         t        j                  dd      S )NT    @   )freetotal)r   r   
MemoryInfor2   s    r   get_memory_infoz#DeviceOnlyEMMPlugin.get_memory_infoK   s    *.D'??"55r   c                 B    d| _         d|j                  j                  z  S )NTzDummy IPC handle for alloc %s)r   device_pointervalue)r   memorys     r   get_ipc_handlez"DeviceOnlyEMMPlugin.get_ipc_handleP   s#     *.D&2V5J5J5P5PPPr   c                      y)Nr   r   r2   s    r   interface_versionz%DeviceOnlyEMMPlugin.interface_versionW   s     r   )__name__
__module____qualname____doc__r   r/   r3   r5   r<   rA   propertyrC   __classcell__r   s   @r   r
   r
      s<    		/	L<	$	%	6
	Q 
	 
	r   r
   c                        e Zd ZdZed        Zy)BadVersionEMMPluginz?A plugin that claims to implement a different interface versionc                      y)N   r   r2   s    r   rC   z%BadVersionEMMPlugin.interface_version_   s    r   N)rD   rE   rF   rG   rH   rC   r   r   r   rL   rL   \   s    M		 
	r   rL   z+EMM Plugins not supported on CUDA simulatorc                   T     e Zd ZdZ fdZ fdZd Zd Zd Zd Z	e
d        Z xZS )	TestDeviceOnlyEMMPluginzu
    Tests that the API of an EMM Plugin that implements device allocations
    only is used correctly by Numba.
    c                 |    t         |           t        j                          t        j                  t
               y r   )r   setUpr   closeset_memory_managerr
   r   r   s    r   rR   zTestDeviceOnlyEMMPlugin.setUpk   s$    

 34r   c                     t         |           t        j                          d t        j                  j
                  _        y r   )r   tearDownr   rS   r)   r*   _memory_managerrU   s    r   rW   z TestDeviceOnlyEMMPlugin.tearDownq   s)    

.2+r   c                    t        j                         j                  }t        j                  d      }t        j
                  |      }| j                  |j                         | j                  |j                  d       | j                  |j                  d   |j                         t        j                  d      }t        j
                  |      }| j                  |j                  d       | j                  |j                  d   |j                         ~| j                  d|j                         | j                  d|j                         ~| j                  d|j                         y )N
   r      rN   )r   current_contextmemory_managernparangedevice_array_like
assertTruer   assertEqualr   r   nbytesassertNotInassertIn)r   mgrarr_1d_arr_1arr_2d_arr_2s         r   test_memallocz%TestDeviceOnlyEMMPlugin.test_memallocw   s   ""$33 		"((/++,A&+U\\: 		!((/A&+U\\: COO,a) COO,r   c                 r    | j                  t        j                         j                  j                         y r   )ra   r   r\   r]   r   r2   s    r   test_initialized_in_contextz3TestDeviceOnlyEMMPlugin.test_initialized_in_context   s%     	,,.==IIJr   c                     t        j                         }|j                          | j                  |j                  j
                         y r   )r   r\   r5   ra   r]   r   )r   r-   s     r   
test_resetz"TestDeviceOnlyEMMPlugin.test_reset   s1    ""$		**778r   c                    t        j                         }|j                         }| j                  |j                  j
                         | j                  |j                  d       | j                  |j                  d       y )Nr7   r8   )	r   r\   r<   ra   r]   r   rb   r9   r:   )r   r-   meminfos      r   test_get_memory_infoz,TestDeviceOnlyEMMPlugin.test_get_memory_info   s^    ""$%%'**AABr*+r   c                 "   t        j                  d      }t        j                  |      }|j	                         }t        j
                         }| j                  |j                  j                         | j                  d|j                         y )NrN   zDummy IPC handle for alloc 1)r^   r_   r   r`   rA   r\   ra   r]   r   re   _ipc_handle)r   arrd_arripchr-   s        r   test_get_ipc_handlez+TestDeviceOnlyEMMPlugin.test_get_ipc_handle   sj    
 iil&&s+##%""$**@@A4d6F6FGr   )rD   rE   rF   rG   rR   rW   rk   rm   ro   rr   r   rx   rI   rJ   s   @r   rP   rP   d   s=    
53-:K
9
, 	H 	Hr   rP   c                       e Zd ZdZd Zy)TestBadEMMPluginVersionzV
    Ensure that Numba rejects EMM Plugins with incompatible version
    numbers.
    c                     | j                  t              5 }t        j                  t               d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nzversion 1 required)assertRaisesr#   r   rT   rL   re   str	exception)r   raisess     r   test_bad_plugin_versionz/TestBadEMMPluginVersion.test_bad_plugin_version   sP    |, 	9##$78	9*C0@0@,AB	9 	9s   AA'N)rD   rE   rF   rG   r   r   r   r   rz   rz      s    
Cr   rz   __main__)r'   numpyr^   r$   numbar   
numba.corer   numba.cuda.testingr   r   r   numba.tests.supportr   ENABLE_CUDASIMHostOnlyCUDAMemoryManagerr
   rL   rP   rz   rD   mainr   r   r   <module>r      s         F F *Od<< Ob1  >?JHl JH @JHZ >?	Cl 	C @	C zHMMO r   