
    `i                     P   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                     dS dS )    N)cuda)config)unittestCUDATestCaseskip_on_cudasim)
linux_onlyc                   V     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                      j        |i | i | _        d| _        d| _        d| _        d| _        d| _        d| _        d S )Nr   F)	super__init__allocationscountinitializedmemalloc_calledreset_calledget_memory_info_calledget_ipc_handle_called)selfargskwargs	__class__s      }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/numba/cuda/tests/cudadrv/test_emm_plugins.pyr   zDeviceOnlyEMMPlugin.__init__   s`    EGGd-f---  "DDJ  %D#(D  %D*/D').D&&&    c                 F   | j         st          d          d| _        | xj        dz  c_        | j        || j        <   | j        fd}t          j        | j                  }t          j	                  }t          j        j                            ||||          S )Nz!memalloc called before initializeT   c                       = d S N )alloc_countfinalizer_allocss   r   	finalizerz/DeviceOnlyEMMPlugin.memalloc.<locals>.finalizer4   s    $[11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     # H"#FGGG#'D  JJ!OJJ*K,0D[)  $/2 2 2 2 2 2
 ---C/+..C<&66sCAJ 7 L L Lr   c                     d| _         d S NT)r   r   s    r   
initializezDeviceOnlyEMMPlugin.initialize>   s    #Dr   c                     d| _         d S 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555r   c                 .    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&2V5J5PPPr   c                     dS )Nr   r   r2   s    r   interface_versionz%DeviceOnlyEMMPlugin.interface_versionW   s	     1r   )__name__
__module____qualname____doc__r   r/   r3   r5   r<   rA   propertyrC   __classcell__r   s   @r   r
   r
      s        	 		/ 	/ 	/ 	/ 	/	L 	L 	L<	$ 	$ 	$	% 	% 	%	6 	6 	6
	Q 	Q 	Q 
	 	 
	 	 	 	 	r   r
   c                   (    e Zd ZdZed             ZdS )BadVersionEMMPluginz?A plugin that claims to implement a different interface versionc                     dS )N   r   r2   s    r   rC   z%BadVersionEMMPlugin.interface_version_   s    1r   N)rD   rE   rF   rG   rH   rC   r   r   r   rL   rL   \   s3        MM		 	 
	 	 	r   rL   z+EMM Plugins not supported on CUDA simulatorc                   Z     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
                     d S r   )r   setUpr   closeset_memory_managerr
   r   r   s    r   rR   zTestDeviceOnlyEMMPlugin.setUpk   s7    
 344444r   c                     t                                                       t          j                     d t          j        j        _        d S r   )r   tearDownr   rS   r)   r*   _memory_managerrU   s    r   rW   z TestDeviceOnlyEMMPlugin.tearDownq   s7    
.2+++r   c                    t          j                    j        }t          j        d          }t          j        |          }|                     |j                   |                     |j	        d           |                     |j
        d         |j                   t          j        d          }t          j        |          }|                     |j	        d           |                     |j
        d         |j                   ~|                     d|j
                   |                     d|j
                   ~|                     d|j
                   d S )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 	"(//+,,,A&&&+U\::: 	!(//A&&&+U\::: CO,,,a))) CO,,,,,r   c                 f    |                      t          j                    j        j                   d S r   )ra   r   r\   r]   r   r2   s    r   test_initialized_in_contextz3TestDeviceOnlyEMMPlugin.test_initialized_in_context   s+     	,..=IJJJJJr   c                     t          j                    }|                                 |                     |j        j                   d S r   )r   r\   r5   ra   r]   r   )r   r-   s     r   
test_resetz"TestDeviceOnlyEMMPlugin.test_reset   s;    "$$		*788888r   c                     t          j                    }|                                }|                     |j        j                   |                     |j        d           |                     |j        d           d S )Nr7   r8   )	r   r\   r<   ra   r]   r   rb   r9   r:   )r   r-   meminfos      r   test_get_memory_infoz,TestDeviceOnlyEMMPlugin.test_get_memory_info   so    "$$%%''*ABBBr***+++++r   c                    t          j        d          }t          j        |          }|                                }t          j                    }|                     |j        j                   | 	                    d|j
                   d S )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   sv    
 ill&s++##%%"$$*@AAA4d6FGGGGGr   )rD   rE   rF   rG   rR   rW   rk   rm   ro   rr   r   rx   rI   rJ   s   @r   rP   rP   d   s         
5 5 5 5 53 3 3 3 3- - -:K K K
9 9 9
, , , 	H 	H Z	H 	H 	H 	H 	Hr   rP   c                       e Zd ZdZd ZdS )TestBadEMMPluginVersionzV
    Ensure that Numba rejects EMM Plugins with incompatible version
    numbers.
    c                     |                      t                    5 }t          j        t                     d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nzversion 1 required)assertRaisesr#   r   rT   rL   re   str	exception)r   raisess     r   test_bad_plugin_versionz/TestBadEMMPluginVersion.test_bad_plugin_version   s    |,, 	9#$7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9*C0@,A,ABBBBBs   AAAN)rD   rE   rF   rG   r   r   r   r   rz   rz      s2         
C C C C 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 F F F F F F F F * * * * * * WO O O O Od< O O Ob    1    >??JH JH JH JH JHl JH JH @?JHZ >??	C 	C 	C 	C 	Cl 	C 	C @?	C zHMOOOOO r   