
    `i                         d dl Z d dlmZ d dlZd dlmZ d dlmZmZm	Z	 d dl
mZ  G d de          Z G d d	e          Z e	d
           G d de                      Zedk    r ej                     dS dS )    N)byrefcuda)unittestCUDATestCaseskip_on_cudasim)driverc                   0     e Zd Z fdZd Zd Zd Z xZS )TestContextStackc                 n    t                                                       t          j                     d S N)supersetUpr   closeself	__class__s    /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/numba/cuda/tests/cudadrv/test_context_stack.pyr   zTestContextStack.setUp   s#    
    c                    |                      t          j        j        d            t          j        d         5  |                     t          t          j        j        j                  d           d d d            d S # 1 swxY w Y   d S Nr   )assertIsr   gpuscurrentassertEqualintidr   s    r   test_gpus_currentz"TestContextStack.test_gpus_current   s    di'...Yq\ 	; 	;S!2!566:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   8A==BBc                 `    |                      t          t          j                  d           d S r   )assertGreaterlenr   r   r   s    r   test_gpus_lenzTestContextStack.test_gpus_len   s&    3ty>>1-----r   c                 ~    t          t          j                  }|                     t	          |          d           d S r   )listr   r   r!   r"   )r   gpulists     r   test_gpus_iterzTestContextStack.test_gpus_iter   s1    ty//3w<<+++++r   )__name__
__module____qualname__r   r   r#   r'   __classcell__r   s   @r   r   r   
   se            
; ; ;
. . ., , , , , , ,r   r   c                        e Zd Z fdZd Z ej         eej	                  dk     d           e
d          d                         Z ej         eej	                  dk     d          d             Z xZS )TestContextAPIc                 n    t                                                       t          j                     d S r   r   tearDownr   r   r   s    r   r1   zTestContextAPI.tearDown   (    
r   c                    	 t          j                                                    }n%# t          $ r |                     d           Y nw xY w|                     |j        t          j                   | 	                    |j        |d                    |                     |j
        t          j                   | 	                    |j
        |d                    |                     |j        |j
                   d S )Nz/EMM Plugin does not implement get_memory_info()r      )r   current_contextget_memory_infoNotImplementedErrorskipTestassertIsInstancefreenumbersNumberr   totalassertLessEqual)r   mems     r   test_context_memoryz"TestContextAPI.test_context_memory#   s    	M&((88::CC" 	M 	M 	MMMKLLLLL	M 	ch7773q6***ci888CF+++SXsy11111s   %( A
	A
   zneed more than 1 gpusCUDA HW requiredc                 N   t           j        d             }t           j        d         5  |                     t                    5 } |             d d d            n# 1 swxY w Y   |                     dt          |j                             d d d            d S # 1 swxY w Y   d S )Nc                  ^    t           j        d         5  	 d d d            d S # 1 swxY w Y   d S Nr4   )r   r    r   r   
switch_gpuz@TestContextAPI.test_forbidden_context_switch.<locals>.switch_gpu5   su    1                   s   "&&r   zCannot switch CUDA-context.)r   require_contextr   assertRaisesRuntimeErrorassertInstr	exception)r   rG   raisess      r   test_forbidden_context_switchz,TestContextAPI.test_forbidden_context_switch1   s:    
		 	 
		 Yq\ 	P 	P""<00 F
               MM7V=M9N9NOOO		P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps5   BABA	B!A	"+BB!Bc                     d }t           j        d         5   |            }d d d            n# 1 swxY w Y   |                     t          |          d           d S )Nc                      t           j        d         5  t          j                    j        j        cd d d            S # 1 swxY w Y   d S rE   )r   r   r5   devicer   rF   r   r   rG   z?TestContextAPI.test_accepted_context_switch.<locals>.switch_gpuB   s    1 8 8+--478 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   =AAr   r4   )r   r   r   r   )r   rG   devids      r   test_accepted_context_switchz+TestContextAPI.test_accepted_context_switch@   s    	8 	8 	8 Yq\ 	! 	!JLLE	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!UQ'''''s   -11)r(   r)   r*   r1   r@   r   skipIfr"   r   r   r   rO   rT   r+   r,   s   @r   r.   r.      s            2 2 2 X_SS^^a')@AA_'((P P )( BAP X_SS^^a')@AA( ( BA( ( ( ( (r   r.   rB   c                   6     e Zd Z fdZd fdZd Zd Z xZS )Test3rdPartyContextc                 n    t                                                       t          j                     d S r   r0   r   s    r   r1   zTest3rdPartyContext.tearDownM   r2   r   c                      d S r   rF   rF   r   r   <lambda>zTest3rdPartyContext.<lambda>Q   s    t r   c                 h   t           j         }t           j        r5t           j                            d          }|                    |          }nCd}t           j                                        }|                    t          |          |           	 t          j        t          j
        |           |          }|                                 t          j                    }t           j        r;|                     t          |j                  t          |j                             n*|                     |j        j        |j        j                    |             |                                 |                    |           d S # |                                 |                    |           w xY wr   )r	   USE_NV_BINDINGbindingCUdevicecuDevicePrimaryCtxRetaindrvapi
cu_contextr   Contextweakrefproxypushr   r5   r   r   handlevaluepopcuDevicePrimaryCtxRelease)r   
extra_work
the_driverdevhctxctxmy_ctxs          r   test_attached_primaryz)Test3rdPartyContext.test_attached_primaryQ   sc   ]
  	B.))!,,C66s;;DDC=++--D//dSAAA	6.t!4!4d;;CHHJJJ )++F$ H  V]!3!3S__EEEE  !4cj6FGGGJLLLGGIII0055555 GGIII005555s   C	F +F1c                 P   t           j         }t           j        r8d}t           j                            d          }|                    ||          }nBt           j                                        }|                    t          |          dd           	 t          j	                     | 
                    d           n:# t          $ r-}|                     dt          |                     Y d }~nd }~ww xY w|                    |           d S # |                    |           w xY w)Nr   zNo RuntimeError raisedz1Numba cannot operate on non-primary CUDA context )r	   r\   r]   r^   cuCtxCreater`   ra   r   r   r5   failrJ   rK   rL   cuCtxDestroy)r   rk   flagsrl   rm   es         r   test_attached_non_primaryz-Test3rdPartyContext.test_attached_non_primaryk   s4   ]
  	6E.))!,,C))%55DD=++--D""5;;1555		* """ II.////  	" 	" 	"MMMa&&" " " " " " " "	" ##D)))))J##D))))s0   B= 'D =
C4#C/*D /C44D D%c                 <      fd}                      |           d S )Nc                     ddl m}  | j        d             } | j        d          } |d         |                               t          |                                          t          t          d                               d S )Nr   r   c                 >    t          | j                  D ]}|| |<   d S r   )rangesize)ais     r   foozUTest3rdPartyContext.test_cudajit_in_attached_primary_context.<locals>.do.<locals>.foo   s.    qv  AAaDD r   
   )r4   r4   )numbar   jitdevice_arrayr   r%   copy_to_hostr{   )r   r   r}   r   s      r   dozHTest3rdPartyContext.test_cudajit_in_attached_primary_context.<locals>.do   s    """"""X  X "!"%%ACIaLLLT!.."2"233T%))__EEEEEr   )rp   )r   r   s   ` r   (test_cudajit_in_attached_primary_contextz<Test3rdPartyContext.test_cudajit_in_attached_primary_context   s=    
	F 
	F 
	F 
	F 
	F 	""2&&&&&r   )r(   r)   r*   r1   rp   rw   r   r+   r,   s   @r   rW   rW   K   sq             0<| 6 6 6 64* * **' ' ' ' ' ' 'r   rW   __main__)r;   ctypesr   rc   r   r   numba.cuda.testingr   r   r   numba.cuda.cudadrvr	   r   r.   rW   r(   mainrF   r   r   <module>r      s1                 F F F F F F F F F F % % % % % %, , , , ,| , , ,&+( +( +( +( +(\ +( +( +(\ #$$A' A' A' A' A', A' A' %$A'H zHMOOOOO r   