
    wg                         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                           yy)    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                 J    t         |           t        j                          y N)supersetUpr   closeself	__class__s    p/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/cuda/tests/cudadrv/test_context_stack.pyr   zTestContextStack.setUp   s    

    c                 "   | j                  t        j                  j                  d        t        j                  d   5  | j	                  t        t        j                  j                  j                        d       d d d        y # 1 sw Y   y xY wNr   )assertIsr   gpuscurrentassertEqualintidr   s    r   test_gpus_currentz"TestContextStack.test_gpus_current   s_    dii''.YYq\ 	;S!2!2!5!56:	; 	; 	;s   >BBc                 V    | j                  t        t        j                        d       y r   )assertGreaterlenr   r   r   s    r   test_gpus_lenzTestContextStack.test_gpus_len   s    3tyy>1-r   c                 l    t        t        j                        }| j                  t	        |      d       y r   )listr   r   r!   r"   )r   gpulists     r   test_gpus_iterzTestContextStack.test_gpus_iter   s#    tyy/3w<+r   )__name__
__module____qualname__r   r   r#   r'   __classcell__r   s   @r   r   r   
   s    
;
.,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                 J    t         |           t        j                          y r   r   tearDownr   r   r   s    r   r1   zTestContextAPI.tearDown       

r   c                    	 t        j                         j                         }| j                  j                  t        j                         | j                  |j                  |d          | j                  |j                  t        j                         | j                  |j                  |d          | j                  |j                  |j                         y # t        $ r | j	                  d       Y w xY w)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:C 	chh73q6*cii8CF+SXXsyy1 # 	MMMKL	Ms   "C C:9C:   zneed more than 1 gpusCUDA HW requiredc                 ,   t         j                  d        }t         j                  d   5  | j                  t              5 } |        d d d        | j                  dt        j                               d d d        y # 1 sw Y   7xY w# 1 sw Y   y xY w)Nc                  V    t         j                  d   5  	 d d d        y # 1 sw Y   y xY wNr4   )r   r    r   r   
switch_gpuz@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   rG   raisess      r   test_forbidden_context_switchz,TestContextAPI.test_forbidden_context_switch1   s     
			 
	 YYq\ 	P""<0 F MM7V=M=M9NO		P 	P 	P 	Ps#   B
 A>-B
>B	B

Bc                     d }t         j                  d   5   |       }d d d        | j                  t              d       y # 1 sw Y   %xY w)Nc                      t         j                  d   5  t        j                         j                  j                  cd d d        S # 1 sw Y   y xY wrE   )r   r   r5   devicer   rF   r   r   rG   z?TestContextAPI.test_accepted_context_switch.<locals>.switch_gpuB   s:    1 8++-44778 8 8s   (AAr   r4   )r   r   r   r   )r   rG   devids      r   test_accepted_context_switchz+TestContextAPI.test_accepted_context_switch@   sD    	8 YYq\ 	!LE	!UQ'	! 	!s   AA)r(   r)   r*   r1   r@   r   skipIfr"   r   r   r   rO   rT   r+   r,   s   @r   r.   r.      s}    2 X__S^a')@A'(P ) BP X__S^a')@A( B(r   r.   rB   c                   6     e Zd Z fdZd fdZd Zd Z xZS )Test3rdPartyContextc                 J    t         |           t        j                          y r   r0   r   s    r   r1   zTest3rdPartyContext.tearDownM   r2   r   c                       y r   rF   rF   r   r   <lambda>zTest3rdPartyContext.<lambda>Q   s    r   c                 Z   t         j                   }t         j                  r1t         j                  j                  d      }|j	                  |      }n;d}t         j
                  j                         }|j	                  t        |      |       	 t        j                  t        j                  |       |      }|j                          t        j                         }t         j                  r9| j                  t        |j                         t        |j                                n:| j                  |j                   j"                  |j                   j"                          |        |j%                          |j'                  |       y # j%                          |j'                  |       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   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 #F*c                    t         j                   }t         j                  r4d}t         j                  j                  d      }|j	                  ||      }n:t         j
                  j                         }|j	                  t        |      dd       	 t        j                          | j                  d       |j                  |       y # t        $ r%}| j                  dt        |             Y d }~;d }~ww xY w# |j                  |       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   s    ]]
  E..))!,C))%5D==++-D""5;15		*  " II./##D)  	"MMMa&" "	" ##D)s0   C $C8 	C5C0+C8 0C55C8 8Dc                 2      fd} j                  |       y )Nc                      ddl m}  | j                  d        } | j                  d      } |d   |       j	                  t        |j                               t        t        d                   y )Nr   r   c                 B    t        | j                        D ]  }|| |<   	 y r   )rangesize)ais     r   foozUTest3rdPartyContext.test_cudajit_in_attached_primary_context.<locals>.do.<locals>.foo   s"    qvv AAaD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   sa    "XX  "!!"%ACIaLT!.."23T%)_Er   )rp   )r   r   s   ` r   (test_cudajit_in_attached_primary_contextz<Test3rdPartyContext.test_cudajit_in_attached_primary_context   s    
	F 	""2&r   )r(   r)   r*   r1   rp   rw   r   r+   r,   s   @r   rW   rW   K   s     0< 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      sr        F F %,| ,&+(\ +(\ #$A', A' %A'H zHMMO r   