U
    “Ç-eÔ   ã                   @   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   úl/var/www/html/Darija-Ai-Train/env/lib/python3.8/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 5 |t_	X 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 
¡ L t |¡}~|  t	|ƒd¡ ~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ W 5 Q R X | ¡  |  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 
¡ x t 
¡ L t |¡}~|  t	|ƒd¡ ~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ W 5 Q R X | ¡  |  t	|ƒd¡ W 5 Q R X | ¡  |  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
ƒ}|  |¡R t ¡ > t |¡}~|  t	|ƒd¡ | ¡  |  t	|ƒd¡ |‚W 5 Q R X W 5 Q R X | ¡  |  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 5 Q R X 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   s4   t ƒ }d V  |j ¡  W 5 Q R X |  | ¡ ¡ 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 5 Q R X d S r7   )r   r   Zcreate_streamr<   )r   r    Ústreamr   r   r   Útest_stream™   s    zTestDel.test_streamc              	   C   s,   t  ¡ }| ¡ }|  |¡ ~W 5 Q R X d S r7   )r   r   Zcreate_eventr<   )r   r    Úeventr   r   r   Ú
test_eventŸ   s    zTestDel.test_eventc              	   C   s.   t  ¡ }| d¡}|  |¡ ~W 5 Q R X d S ©Né    ©r   r   Zmemhostallocr<   ©r   r    Zmemr   r   r   Útest_pinned_memory¥   s    
zTestDel.test_pinned_memoryc              	   C   s2   t  ¡ }|jddd}|  |¡ ~W 5 Q R X d S )NrB   T)ÚmappedrC   rD   r   r   r   Útest_mapped_memory«   s    zTestDel.test_mapped_memoryc              	   C   s.   t  ¡ }| d¡}|  |¡ ~W 5 Q R X d S rA   )r   r   Zmemallocr<   rD   r   r   r   Útest_device_memory±   s    
zTestDel.test_device_memoryc              	   C   s.   t  ¡ }| d¡}|  |¡ ~W 5 Q R X 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 ¡  |  |¡¼ t |¡ W 5 Q R X t |¡ W 5 Q R X t 	¡ 2 t |¡ W 5 Q R X t |¡ W 5 Q R X W 5 Q R X zt |¡
 |‚W 5 Q R X W n* |k
rì   t |¡ W 5 Q R X Y nX W 5 Q R X 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<   Ú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 ¡  |  |¡¼ t |¡ W 5 Q R X t |¡ W 5 Q R X t 	¡ 2 t |¡ W 5 Q R X t |¡ W 5 Q R X W 5 Q R X zt |¡
 |‚W 5 Q R X W n* |k
rì   t |¡ W 5 Q R X Y nX W 5 Q R X d S )Nc                   @   s   e Zd ZdS )z;TestDel.test_mapped_contextmanager.<locals>.MappedExceptionNr1   r   r   r   r   ÚMappedExceptionÝ   s   rO   r   )
r3   r   rK   r   r   r   r   r<   rF   r*   )r   rO   rM   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   rN   rP   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