
    xKg                      H   d dl mZ d dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZ  ed       e	d       G d	 d
e
                    Z ed       e	d       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)    )contextmanagerN)cuda)unittestskip_on_cudasimskip_if_external_memmgrCUDATestCase)captured_stderr)configznot supported on CUDASIMz0Deallocation specific to Numba memory managementc                       e Zd Zd Zd Zy)TestDeallocationc                    t        j                         j                  j                  }|j	                          | j                  t        |      d       t        t        j                        D ]H  }t        j                  t        j                  d             | j                  t        |      |dz          J t        j                  t        j                  d             | j                  t        |      d       y )Nr      )r   current_contextmemory_managerdeallocationsclearassertEquallenranger
   CUDA_DEALLOCS_COUNT	to_devicenparange)selfdeallocsis      o/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pytest_max_pending_countz'TestDeallocation.test_max_pending_count   s    '')88FFX*v112ANN299Q<(S]AE2 3 	ryy|$X*    c                    t        j                         }|j                  j                  }|j	                          | j                  t        |      d       |j                         }d}t        j                  }	 ||j                  z  t        _	        | j                  |j                  |d       t        j                  t        j                  |dz  t        j                                | j                  t        |      d       t        j                  t        j                  |j                  |j"                  z
  t        j                                | j                  t        |      d       t        j                  t        j                  dt        j                                | j                  t        |      d       |t        _	        y # |t        _	        w xY w)Nr   i@B r   )delta   )dtype)r   r   r   r   r   r   r   get_memory_infor
   CUDA_DEALLOCS_RATIOtotalassertAlmostEqual_max_pending_bytesr   r   onesint8_size)r   ctxr   mimax_pending	old_ratios         r   test_max_pending_bytesz'TestDeallocation.test_max_pending_bytes   sY   ""$%%33X*  "..		3)4rxx)?F& ""8#>#>)* # ,
 NN277;!#3277CDS]A. NN2778#>#>#+>>$29;B CS]A. NN2771BGG45S]A. *3F&F&s   9E	G GN)__name__
__module____qualname__r   r0    r   r   r   r      s    +#3r   r   z&defer_cleanup has no effect in CUDASIMc                       e Zd Zd Zd Zd Zy)TestDeferCleanupc                    t        j                  d      }t        j                  |      }t        j                         j
                  j                  }|j                          | j                  t        |      d       t        j                         5  t        j                  |      }~| j                  t        |      d       ~| j                  t        |      d       |j                          | j                  t        |      d       d d d        |j                          | j                  t        |      d       y # 1 sw Y   5xY wN   r   r   r"   r   r   r   r   r   r   r   r   r   r   defer_cleanupr   harrdarr1r   darr2s        r   
test_basiczTestDeferCleanup.test_basicE   s    yy|t$'')88FFX*!NN4(ES]A.S]A.NNS]A. " 	X* "!s   A9D??Ec                 >   t        j                  d      }t        j                  |      }t        j                         j
                  j                  }|j                          | j                  t        |      d       t        j                         5  t        j                         5  t        j                  |      }~| j                  t        |      d       ~| j                  t        |      d       |j                          | j                  t        |      d       d d d        |j                          | j                  t        |      d       d d d        |j                          | j                  t        |      d       y # 1 sw Y   hxY w# 1 sw Y   AxY wr8   r:   r<   s        r   test_nestedzTestDeferCleanup.test_nestedW   s#   yy|t$'')88FFX*!##%t,  X2  X2   X2 & NNS]A. " 	X* &% "!s%   F'A9F 3FF	FFc                 N   t        j                  d      }t        j                  |      }t        j                         j
                  j                  }|j                          | j                  t        |      d        G d dt              }| j                  |      5  t        j                         5  t        j                  |      }~| j                  t        |      d       |j                          | j                  t        |      d       |# 1 sw Y   nxY w	 d d d        n# 1 sw Y   nxY w|j                          | j                  t        |      d       ~| j                  t        |      d       |j                          | j                  t        |      d       y )Nr9   r   c                       e Zd Zy)4TestDeferCleanup.test_exception.<locals>.CustomErrorNr1   r2   r3   r4   r   r   CustomErrorrE   s       r   rG   r   )r   r   r   r   r   r   r   r   r   r   	ExceptionassertRaisesr;   )r   r=   r>   r   rG   r?   s         r   test_exceptionzTestDeferCleanup.test_exceptionl   s3   yy|t$'')88FFX*	) 	 {+##%t,  X2   X2!! &%% ,++ 	X*X*X*s   D(3ADD	D((D1N)r1   r2   r3   r@   rB   rK   r4   r   r   r6   r6   B   s    +$+*+r   r6   c                       e Zd Zd Zy)TestDeferCleanupAvailc                 X    t        j                         5  	 d d d        y # 1 sw Y   y xY wN)r   r;   )r   s    r   test_context_managerz*TestDeferCleanupAvail.test_context_manager   s    ! "!!s    )N)r1   r2   r3   rP   r4   r   r   rM   rM      s    r   rM   c                   P    e Zd ZdZed        Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zy)TestDelzJ
    Ensure resources are deleted properly without ignored exception.
    c              #      K   t               5 }d  |j                  j                          d d d        | j                  j	                                y # 1 sw Y   )xY wwrO   )r	   r   r   assertFalsegetvalue)r   r,   caps      r   check_ignored_exceptionzTestDel.check_ignored_exception   sF     ###%  	( s   A A(A AA c                     t        j                         }|j                         }| j                  |      5  ~d d d        y # 1 sw Y   y xY wrO   )r   r   create_streamrW   )r   r,   streams      r   test_streamzTestDel.test_stream   s;    ""$""$))#. /..   AA
c                     t        j                         }|j                         }| j                  |      5  ~d d d        y # 1 sw Y   y xY wrO   )r   r   create_eventrW   )r   r,   events      r   
test_eventzTestDel.test_event   s;    ""$  "))#. /..r\   c                     t        j                         }|j                  d      }| j                  |      5  ~d d d        y # 1 sw Y   y xY wN    r   r   memhostallocrW   r   r,   mems      r   test_pinned_memoryzTestDel.test_pinned_memory   s=    ""$r"))#. /..   AAc                     t        j                         }|j                  dd      }| j                  |      5  ~d d d        y # 1 sw Y   y xY w)Nrc   T)mappedrd   rf   s      r   test_mapped_memoryzTestDel.test_mapped_memory   sB    ""$r$/))#. /..s   AAc                     t        j                         }|j                  d      }| j                  |      5  ~d d d        y # 1 sw Y   y xY wrb   )r   r   memallocrW   rf   s      r   test_device_memoryzTestDel.test_device_memory   s;    ""$ll2))#. /..ri   c                     t        j                         }|j                  d      }| j                  |      5  ~d d d        y # 1 sw Y   y xY wrb   )r   r   memallocmanagedrW   rf   s      r   test_managed_memoryzTestDel.test_managed_memory   s=    ""$!!"%))#. /..ri   c                 X    G d dt               }t        j                  d      }t        j                         }|j
                  j                          | j                  |      5  t        j                  |      5  	 d d d        t        j                  |      5  	 d d d        t        j                         5  t        j                  |      5  	 d d d        t        j                  |      5  	 d d d        d d d        	 t        j                  |      5  |# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   NxY w# 1 sw Y   RxY w# 1 sw Y   nxY wn7# |$ r/ t        j                  |      5  	 d d d        n# 1 sw Y   nxY wY nw xY wd d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy);TestDel.test_pinned_contextmanager.<locals>.PinnedExceptionNrF   r4   r   r   PinnedExceptionru      rH   r   rv   r   )
rI   r   zerosr   r   r   r   rW   pinnedr;   )r   rv   arrr,   s       r   test_pinned_contextmanagerz"TestDel.test_pinned_contextmanager   0   	i 	 hhqk""$!))#.S! "S! " ##%[[% &[[% & &[[%)) "!!! &%%% &% &%%" [[% &%%! /..   $F :D<F D#F 7ED/E,D;.E6F ?E ED 	F #D,	(F /D84E;E EE	F E	E F  F:F<	FF
FF FF  F)c                 X    G d dt               }t        j                  d      }t        j                         }|j
                  j                          | j                  |      5  t        j                  |      5  	 d d d        t        j                  |      5  	 d d d        t        j                         5  t        j                  |      5  	 d d d        t        j                  |      5  	 d d d        d d d        	 t        j                  |      5  |# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   NxY w# 1 sw Y   RxY w# 1 sw Y   nxY wn7# |$ r/ t        j                  |      5  	 d d d        n# 1 sw Y   nxY wY nw xY wd d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy);TestDel.test_mapped_contextmanager.<locals>.MappedExceptionNrF   r4   r   r   MappedExceptionr      rH   r   r   r   )
rI   r   rw   r   r   r   r   rW   rk   r;   )r   r   ry   r,   s       r   test_mapped_contextmanagerz"TestDel.test_mapped_contextmanager   r{   r|   N)r1   r2   r3   __doc__r   rW   r[   r`   rh   rl   ro   rr   rz   r   r4   r   r   rR   rR      sC     ) ):r   rR   __main__)
contextlibr   numpyr   numbar   numba.cuda.testingr   r   r   r   numba.tests.supportr	   
numba.corer
   r   r6   rM   rR   r1   mainr4   r   r   <module>r      s    %  G G /  +,KL13| 13 M -13h 9:KL?+| ?+ M ;?+DL  +,gl g -gT zHMMO r   