a
    þ
þdÔ   ã                   @   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rÈe ¡  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	   ZCUDA_DEALLOCS_COUNTÚ	to_deviceÚnpÚarange)ÚselfÚdeallocsÚi© r   út/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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	}z¦||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_	n|t_	0 d S )Nr   i@B r   )Údeltaé   )Zdtype)r   r   r   r   r   r   r   Zget_memory_infor	   ZCUDA_DEALLOCS_RATIOÚtotalZassertAlmostEqualZ_max_pending_bytesr   r   ZonesZint8Ú_size)r   Úctxr   ÚmiZmax_pendingZ	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 
¡ V t |¡}~|  t	|ƒd¡ ~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ W d   ƒ n1 sœ0    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 
¡ – t 
¡ V t |¡}~|  t	|ƒd¡ ~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ W d   ƒ n1 s¦0    Y  | ¡  |  t	|ƒd¡ W d   ƒ n1 sÜ0    Y  | ¡  |  t	|ƒd¡ d S r'   r)   r+   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
ƒ}|  |¡p t ¡ H t |¡}~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ |‚W d   ƒ n1 sª0    Y  W d   ƒ n1 sÈ0    Y  | ¡  |  t	|ƒd¡ ~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ d S )Nr(   r   c                   @   s   e Zd ZdS )z4TestDeferCleanup.test_exception.<locals>.CustomErrorN©r#   r$   r%   r   r   r   r   ÚCustomErrors   s   r2   r   )r   r   r   r   r   r   r   r   r   r   Ú	ExceptionÚassertRaisesr*   )r   r,   r-   r   r2   r.   r   r   r   Útest_exceptionl   s(    



@zTestDeferCleanup.test_exceptionN)r#   r$   r%   r/   r0   r5   r   r   r   r   r&   B   s   r&   c                   @   s   e Zd Zdd„ ZdS )ÚTestDeferCleanupAvailc                 C   s,   t  ¡  W d   ƒ n1 s0    Y  d S ©N)r   r*   )r   r   r   r   Útest_context_manager‡   s    
z*TestDeferCleanupAvail.test_context_managerN)r#   r$   r%   r8   r   r   r   r   r6   †   s   r6   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   sH   t ƒ  }d V  |j ¡  W d   ƒ n1 s,0    Y  |  | ¡ ¡ d S r7   )r   r   r   ZassertFalseÚgetvalue)r   r    Úcapr   r   r   Úcheck_ignored_exception’   s    (zTestDel.check_ignored_exceptionc                 C   s@   t  ¡ }| ¡ }|  |¡ ~W d   ƒ n1 s20    Y  d S r7   )r   r   Zcreate_streamr<   )r   r    Ústreamr   r   r   Útest_stream™   s    zTestDel.test_streamc                 C   s@   t  ¡ }| ¡ }|  |¡ ~W d   ƒ n1 s20    Y  d S r7   )r   r   Zcreate_eventr<   )r   r    Úeventr   r   r   Ú
test_eventŸ   s    zTestDel.test_eventc                 C   sB   t  ¡ }| d¡}|  |¡ ~W d   ƒ n1 s40    Y  d S ©Né    ©r   r   Zmemhostallocr<   ©r   r    Zmemr   r   r   Útest_pinned_memory¥   s    
zTestDel.test_pinned_memoryc                 C   sF   t  ¡ }|jddd}|  |¡ ~W d   ƒ n1 s80    Y  d S )NrB   T)ÚmappedrC   rD   r   r   r   Útest_mapped_memory«   s    zTestDel.test_mapped_memoryc                 C   sB   t  ¡ }| d¡}|  |¡ ~W d   ƒ n1 s40    Y  d S rA   )r   r   Zmemallocr<   rD   r   r   r   Útest_device_memory±   s    
zTestDel.test_device_memoryc                 C   sB   t  ¡ }| d¡}|  |¡ ~W d   ƒ n1 s40    Y  d S rA   )r   r   Zmemallocmanagedr<   rD   r   r   r   Útest_managed_memory·   s    
zTestDel.test_managed_memoryc                 C   s¦  G dd„ dt ƒ}t d¡}t ¡ }|j ¡  |  |¡X t |¡ W d   ƒ n1 sZ0    Y  t |¡ W d   ƒ n1 s„0    Y  t 	¡ d t |¡ W d   ƒ n1 s¸0    Y  t |¡ W d   ƒ n1 sâ0    Y  W d   ƒ n1 s0    Y  z4t |¡ |‚W d   ƒ n1 s40    Y  W n@ |y€   t |¡ W d   ƒ n1 sr0    Y  Y n0 W d   ƒ n1 s˜0    Y  d S )Nc                   @   s   e Zd ZdS )z;TestDel.test_pinned_contextmanager.<locals>.PinnedExceptionNr1   r   r   r   r   ÚPinnedExceptionÀ   s   rJ   r   )
r3   r   Úzerosr   r   r   r   r<   Zpinnedr*   )r   rJ   Úarrr    r   r   r   Útest_pinned_contextmanager½   s(    


>(z"TestDel.test_pinned_contextmanagerc                 C   s¦  G dd„ dt ƒ}t d¡}t ¡ }|j ¡  |  |¡X t |¡ W d   ƒ n1 sZ0    Y  t |¡ W d   ƒ n1 s„0    Y  t 	¡ d t |¡ W d   ƒ n1 s¸0    Y  t |¡ W d   ƒ n1 sâ0    Y  W d   ƒ n1 s0    Y  z4t |¡ |‚W d   ƒ n1 s40    Y  W n@ |y€   t |¡ W d   ƒ n1 sr0    Y  Y n0 W d   ƒ n1 s˜0    Y  d S )Nc                   @   s   e Zd ZdS )z;TestDel.test_mapped_contextmanager.<locals>.MappedExceptionNr1   r   r   r   r   ÚMappedExceptionÝ   s   rN   r   )
r3   r   rK   r   r   r   r   r<   rF   r*   )r   rN   rL   r    r   r   r   Útest_mapped_contextmanagerÚ   s(    


>(z"TestDel.test_mapped_contextmanagerN)r#   r$   r%   Ú__doc__r   r<   r>   r@   rE   rG   rH   rI   rM   rO   r   r   r   r   r9      s   
r9   Ú__main__)Ú
contextlibr   Únumpyr   Znumbar   Znumba.cuda.testingr   r   r   r   Znumba.tests.supportr   Z
numba.corer	   r
   r&   r6   r9   r#   Úmainr   r   r   r   Ú<module>   s    4Bj