
    sh                         S SK r S SKJr  S SKrS SKJr  S SKJrJrJ	r	  S SK
Jr   " S S\5      r " S S	\5      r\	" S
5       " S S\5      5       r\S:X  a  \R                   " 5         gg)    N)byrefcuda)unittestCUDATestCaseskip_on_cudasim)driverc                   :   ^  \ rS rSrU 4S jrS rS rS rSrU =r	$ )TestContextStack
   c                 L   > [         TU ]  5         [        R                  " 5         g N)supersetUpr   closeself	__class__s    /Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/cuda/tests/cudadrv/test_context_stack.pyr   TestContextStack.setUp   s    

    c                 ,   U R                  [        R                  R                  S 5        [        R                  S      U R	                  [        [        R                  R                  R                  5      S5        S S S 5        g ! , (       d  f       g = fNr   )assertIsr   gpuscurrentassertEqualintidr   s    r   test_gpus_current"TestContextStack.test_gpus_current   sT    dii''.YYq\S!2!2!5!56: \\s   >B
Bc                 V    U R                  [        [        R                  5      S5        g r   )assertGreaterlenr   r   r    s    r   test_gpus_lenTestContextStack.test_gpus_len   s    3tyy>1-r   c                 l    [        [        R                  5      nU R                  [	        U5      S5        g r   )listr   r   r$   r%   )r   gpulists     r   test_gpus_iterTestContextStack.test_gpus_iter   s#    tyy/3w<+r    )
__name__
__module____qualname____firstlineno__r   r!   r&   r+   __static_attributes____classcell__r   s   @r   r   r   
   s    
;
., ,r   r   c                      ^  \ rS rSrU 4S jrS r\R                  " \" \	R                  5      S:  S5      \" S5      S 5       5       r\R                  " \" \	R                  5      S:  S5      S 5       rS	rU =r$ )
TestContextAPI   c                 L   > [         TU ]  5         [        R                  " 5         g r   r   tearDownr   r   r   s    r   r:   TestContextAPI.tearDown       

r   c                     [         R                  " 5       R                  5       nU R                  WR                  [        R                  5        U R                  UR                  US   5        U R                  UR                  [        R                  5        U R                  UR                  US   5        U R                  UR                  UR                  5        g ! [         a    U R	                  S5         Nf = f)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_memory"TestContextAPI.test_context_memory#   s    	M&&(88:C 	chh73q6*cii8CF+SXXsyy1 # 	MMMKL	Ms   #C C<;C<   zneed more than 1 gpusCUDA HW requiredc                 @   [         R                  S 5       n[         R                  S      U R                  [        5       nU" 5         S S S 5        U R                  S[        WR                  5      5        S S S 5        g ! , (       d  f       N<= f! , (       d  f       g = f)Nc                  `    [         R                  S       S S S 5        g ! , (       d  f       g = fNr>   )r   r   r-   r   r   
switch_gpu@TestContextAPI.test_forbidden_context_switch.<locals>.switch_gpu5   s    1 s   
-r   zCannot switch CUDA-context.)r   require_contextr   assertRaisesRuntimeErrorassertInstr	exception)r   rQ   raisess      r   test_forbidden_context_switch,TestContextAPI.test_forbidden_context_switch1   su     
			 
	 YYq\""<0F 1 MM7V=M=M9NO	 \00 \s#   B A>-B>
B	B
Bc                     S n[         R                  S      U" 5       nS S S 5        U R                  [        W5      S5        g ! , (       d  f       N*= f)Nc                      [         R                  S      [         R                  " 5       R                  R                  sS S S 5        $ ! , (       d  f       g = frP   )r   r   r?   devicer   r-   r   r   rQ   ?TestContextAPI.test_accepted_context_switch.<locals>.switch_gpuB   s/    1++-4477 s   )A
Ar   r>   )r   r   r   r   )r   rQ   devids      r   test_accepted_context_switch+TestContextAPI.test_accepted_context_switch@   s<    	8 YYq\LE UQ' \s   A
Ar-   )r.   r/   r0   r1   r:   rJ   r   skipIfr%   r   r   r   rZ   ra   r2   r3   r4   s   @r   r6   r6      sy    2 __S^a')@A'(P ) BP __S^a')@A( B(r   r6   rM   c                   B   ^  \ rS rSrU 4S jrS 4S jrS rS rSrU =r	$ )Test3rdPartyContextK   c                 L   > [         TU ]  5         [        R                  " 5         g r   r9   r   s    r   r:   Test3rdPartyContext.tearDownM   r<   r   c                      g r   r-   r-   r   r   <lambda>Test3rdPartyContext.<lambda>Q   s    tr   c                 t   [         R                   n[         R                  (       a1  [         R                  R                  S5      nUR	                  U5      nO;Sn[         R
                  R                  5       nUR	                  [        U5      U5         [         R                  " [        R                  " U 5      U5      nUR                  5         [        R                  " 5       n[         R                  (       a9  U R                  [        UR                   5      [        UR                   5      5        O:U R                  UR                   R"                  UR                   R"                  5        U" 5         UR%                  5         UR'                  U5        g ! WR%                  5         UR'                  U5        f = fr   )r	   USE_NV_BINDINGbindingCUdevicecuDevicePrimaryCtxRetaindrvapi
cu_contextr   Contextweakrefproxypushr   r?   r   r   handlevaluepopcuDevicePrimaryCtxRelease)r   
extra_work
the_driverdevhctxctxmy_ctxs          r   test_attached_primary)Test3rdPartyContext.test_attached_primaryQ   s   ]]
  ..))!,C66s;DC==++-D//dSA	6..t!4d;CHHJ ))+F$$  V]]!3S_E  !4!4cjj6F6FGLGGI005 GGI005s   CF #F7c                 (   [         R                   n[         R                  (       a3  Sn[         R                  R                  S5      nUR	                  X#5      nO:[         R
                  R                  5       nUR	                  [        U5      SS5         [        R                  " 5         U R                  S5        UR                  U5        g ! [         a%  nU R                  S[        U5      5         S nAN<S nAff = f! UR                  U5        f = f)Nr   zNo RuntimeError raisedz1Numba cannot operate on non-primary CUDA context )r	   rm   rn   ro   cuCtxCreaterq   rr   r   r   r?   failrU   rV   rW   cuCtxDestroy)r   r|   flagsr}   r~   es         r   test_attached_non_primary-Test3rdPartyContext.test_attached_non_primaryk   s    ]]
  E..))!,C))%5D==++-D""5;15		*  " II./##D)  	"MMMa&" "	" ##D)s0   C )C> 
C;C61C> 6C;;C> >Dc                 4   ^  U 4S jnT R                  U5        g )Nc                     > SSK Jn   U R                  S 5       nU R                  " S5      nUS   " U5        TR	                  [        UR                  5       5      [        [        S5      5      5        g )Nr   r   c                 D    [        U R                  5       H  nXU'   M	     g r   )rangesize)ais     r   fooUTest3rdPartyContext.test_cudajit_in_attached_primary_context.<locals>.do.<locals>.foo   s    qvvAaD 'r   r   )r>   r>   )numbar   jitdevice_arrayr   r)   copy_to_hostr   )r   r   r   r   s      r   doHTest3rdPartyContext.test_cudajit_in_attached_primary_context.<locals>.do   s]    "XX  !!"%AIaLT!.."23T%)_Er   )r   )r   r   s   ` r   (test_cudajit_in_attached_primary_context<Test3rdPartyContext.test_cudajit_in_attached_primary_context   s    
	F 	""2&r   r-   )
r.   r/   r0   r1   r:   r   r   r   r2   r3   r4   s   @r   re   re   K   s!     0< 64**' 'r   re   __main__)rE   ctypesr   rt   r   r   numba.cuda.testingr   r   r   numba.cuda.cudadrvr	   r   r6   re   r.   mainr-   r   r   <module>r      sp        F F %,| ,&+(\ +(\ #$A', A' %A'H zMMO r   