o
    ºiÔ   ã                   @   sÐ   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
„ d
e
ƒƒƒZedƒe	dƒG dd„ de
ƒƒƒZG dd„ de
ƒZedƒG dd„ de
ƒƒZedkrfe ¡  dS dS )é    )ÚcontextmanagerN)Úcuda)ÚunittestÚskip_on_cudasimÚskip_if_external_memmgrÚCUDATestCase)Úcaptured_stderr)Úconfigznot supported on CUDASIMz0Deallocation specific to Numba memory managementc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestDeallocationc                 C   s|   t  ¡ jj}| ¡  |  t|ƒd¡ ttj	ƒD ]}t  
t d¡¡ |  t|ƒ|d ¡ qt  
t d¡¡ |  t|ƒd¡ d S )Nr   é   )r   Úcurrent_contextÚmemory_managerÚdeallocationsÚclearÚassertEqualÚlenÚranger	   ÚCUDA_DEALLOCS_COUNTÚ	to_deviceÚnpÚarange)ÚselfÚdeallocsÚi© r   úh/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyÚtest_max_pending_count   s   z'TestDeallocation.test_max_pending_countc                 C   sì   t  ¡ }|jj}| ¡  |  t|ƒd¡ | ¡ }d}tj	}zT||j
 t_	| j|j|dd t  tj|d tjd¡ |  t|ƒd¡ t  tj|j|j tjd¡ |  t|ƒd¡ t  tjdtjd¡ |  t|ƒd¡ W |t_	d S |t_	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_ratior   r   r   Útest_max_pending_bytes   s.   
ÿÿÿz'TestDeallocation.test_max_pending_bytesN)Ú__name__Ú
__module__Ú__qualname__r   r,   r   r   r   r   r
      s    r
   z&defer_cleanup has no effect in CUDASIMc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestDeferCleanupc                 C   sÂ   t  d¡}t |¡}t ¡ jj}| ¡  |  t	|ƒd¡ t 
¡ + t |¡}~|  t	|ƒd¡ ~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ W d   ƒ n1 sNw   Y  | ¡  |  t	|ƒd¡ d S ©Né   r   r   r   ©r   r   r   r   r   r   r   r   r   r   Údefer_cleanup©r   ÚharrÚdarr1r   Údarr2r   r   r   Ú
test_basicE   s    



ù	zTestDeferCleanup.test_basicc              	   C   s  t  d¡}t |¡}t ¡ jj}| ¡  |  t	|ƒd¡ t 
¡ K t 
¡ + t |¡}~|  t	|ƒd¡ ~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ W d   ƒ n1 sSw   Y  | ¡  |  t	|ƒd¡ W d   ƒ n1 snw   Y  | ¡  |  t	|ƒd¡ d S r1   r3   r5   r   r   r   Útest_nestedW   s(   




ùözTestDeferCleanup.test_nestedc              	   C   s
  t  d¡}t |¡}t ¡ jj}| ¡  |  t	|ƒd¡ G dd„ dt
ƒ}|  |¡1 t ¡  t |¡}~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ |‚1 sNw   Y  W d   ƒ n1 s]w   Y  | ¡  |  t	|ƒd¡ ~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ d S )Nr2   r   c                   @   ó   e Zd ZdS )z4TestDeferCleanup.test_exception.<locals>.CustomErrorN©r-   r.   r/   r   r   r   r   ÚCustomErrors   ó    r=   r   )r   r   r   r   r   r   r   r   r   r   Ú	ExceptionÚassertRaisesr4   )r   r6   r7   r   r=   r8   r   r   r   Útest_exceptionl   s,   



úÿzTestDeferCleanup.test_exceptionN)r-   r.   r/   r9   r:   rA   r   r   r   r   r0   B   s    r0   c                   @   s   e Zd Zdd„ ZdS )ÚTestDeferCleanupAvailc                 C   s.   t  ¡ 	 W d   ƒ d S 1 sw   Y  d S ©N)r   r4   )r   r   r   r   Útest_context_manager‡   s   
"ÿz*TestDeferCleanupAvail.test_context_managerN)r-   r.   r/   rD   r   r   r   r   rB   †   s    rB   c                   @   s\   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestDelzJ
    Ensure resources are deleted properly without ignored exception.
    c                 c   sJ    t ƒ }d V  |j ¡  W d   ƒ n1 sw   Y  |  | ¡ ¡ d S rC   )r   r   r   ÚassertFalseÚgetvalue)r   r(   Úcapr   r   r   Úcheck_ignored_exception’   s   €þzTestDel.check_ignored_exceptionc                 C   óB   t  ¡ }| ¡ }|  |¡
 ~W d   ƒ d S 1 sw   Y  d S rC   )r   r   Úcreate_streamrI   )r   r(   Ústreamr   r   r   Útest_stream™   ó
   "ÿzTestDel.test_streamc                 C   rJ   rC   )r   r   Úcreate_eventrI   )r   r(   Úeventr   r   r   Ú
test_eventŸ   rN   zTestDel.test_eventc                 C   óD   t  ¡ }| d¡}|  |¡
 ~W d   ƒ d S 1 sw   Y  d S ©Né    ©r   r   ÚmemhostallocrI   ©r   r(   Úmemr   r   r   Útest_pinned_memory¥   ó
   
"ÿzTestDel.test_pinned_memoryc                 C   sH   t  ¡ }|jddd}|  |¡
 ~W d   ƒ d S 1 sw   Y  d S )NrT   T)ÚmappedrU   rW   r   r   r   Útest_mapped_memory«   s
   "ÿzTestDel.test_mapped_memoryc                 C   rR   rS   )r   r   ÚmemallocrI   rW   r   r   r   Útest_device_memory±   rZ   zTestDel.test_device_memoryc                 C   rR   rS   )r   r   ÚmemallocmanagedrI   rW   r   r   r   Útest_managed_memory·   rZ   zTestDel.test_managed_memoryc                 C   óž  G dd„ dt ƒ}t d¡}t ¡ }|j ¡  |  |¡ª t |¡ W d   ƒ n1 s,w   Y  t |¡ W d   ƒ n1 sAw   Y  t 	¡ 2 t |¡ W d   ƒ n1 s[w   Y  t |¡ W d   ƒ n1 spw   Y  W d   ƒ n1 sw   Y  zt |¡ |‚1 sw   Y  W n |y´   t |¡ W d   ƒ n1 s­w   Y  Y n	w W d   ƒ d S W d   ƒ d S 1 sÈw   Y  d S )Nc                   @   r;   )z;TestDel.test_pinned_contextmanager.<locals>.PinnedExceptionNr<   r   r   r   r   ÚPinnedExceptionÀ   r>   rb   r   )
r?   r   Úzerosr   r   r   r   rI   Úpinnedr4   )r   rb   Úarrr(   r   r   r   Útest_pinned_contextmanager½   óD   

ÿÿ
ÿÿ€ýÿÿ€ÿþò€" z"TestDel.test_pinned_contextmanagerc                 C   ra   )Nc                   @   r;   )z;TestDel.test_mapped_contextmanager.<locals>.MappedExceptionNr<   r   r   r   r   ÚMappedExceptionÝ   r>   rh   r   )
r?   r   rc   r   r   r   r   rI   r[   r4   )r   rh   re   r(   r   r   r   Útest_mapped_contextmanagerÚ   rg   z"TestDel.test_mapped_contextmanagerN)r-   r.   r/   Ú__doc__r   rI   rM   rQ   rY   r\   r^   r`   rf   ri   r   r   r   r   rE      s    
rE   Ú__main__)Ú
contextlibr   Únumpyr   Únumbar   Únumba.cuda.testingr   r   r   r   Únumba.tests.supportr   Ú
numba.corer	   r
   r0   rB   rE   r-   Úmainr   r   r   r   Ú<module>   s$    4Bjÿ