a
    
dc                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 dd Ze
dG dd de	Ze
dG d	d
 d
e	Zedkre  dS )    N)cuda)unittestCUDATestCaseskip_on_cudasimc                    s   t   fdd}|S )Nc                     s@   t  }|d z| | i |W |  S |  0 d S )NT)asyncioZnew_event_loopZ	set_debugZrun_until_completeclose)argskwdsZloopf n/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/cuda/tests/cudadrv/test_streams.pyrunner
   s    
z!with_asyncio_loop.<locals>.runner)	functoolswraps)r   r   r   r
   r   with_asyncio_loop	   s    r   z,CUDA Driver API unsupported in the simulatorc                   @   sX   e Zd Zdd Zdd Zedd Zedd Zed	d
 Zedd Z	edd Z
dS )TestCudaStreamc                 C   s8   dd }t  }t }||| | |d d S )Nc                 S   s   |   d S N)set)streamstatuseventr   r   r   callback   s    z2TestCudaStream.test_add_callback.<locals>.callback      ?)r   r   	threadingEventadd_callback
assertTruewait)selfr   r   callback_eventr   r   r   test_add_callback   s
    z TestCudaStream.test_add_callbackc                    s<   t    fdd}t }||  d d S )Nc                    s    |    d S r   )ZassertIsNoner   )r   r   argr    r   r   r   r   #   s    
zCTestCudaStream.test_add_callback_with_default_arg.<locals>.callbackr   )r   r   r   r   r   r   r   )r   r   r   r   r#   r   "test_add_callback_with_default_arg    s
    
z1TestCudaStream.test_add_callback_with_default_argc                    s   t  }| I d H  d S r   )r   r   
async_done)r   r   r   r   r   test_async_done+   s    zTestCudaStream.test_async_donec                    sT   t t dfdd g d} fdd|D }tj| I d H }t|| d S )N)value_inreturnc                    sh   t  }t dt d }}| |d d < t j||d}|j||d | I d H } || | S )N   r   )r   r   Zpinned_arrayZ	to_deviceZcopy_to_hostr%   assertEqualmean)r'   r   Zh_srcZh_dstZd_aryZdone_result)r   r   r   async_cuda_fn2   s    z9TestCudaStream.test_parallel_tasks.<locals>.async_cuda_fn)            c                    s   g | ]}t  |qS r   )r   Zcreate_task).0v)r-   r   r   
<listcomp>=       z6TestCudaStream.test_parallel_tasks.<locals>.<listcomp>)floatr   gatherr   npZallclose)r   Z	values_inZtasksZ
values_outr   )r-   r   r   test_parallel_tasks0   s
    
z"TestCudaStream.test_parallel_tasksc                    sH   t    fddtdD }tj| I d H }|D ]}| |  q2d S )Nc                    s   g | ]}   qS r   r%   r2   _r*   r   r   r4   D   r5   z;TestCudaStream.test_multiple_async_done.<locals>.<listcomp>r1   )r   r   ranger   r7   r+   )r   done_awsdonedr   r*   r   test_multiple_async_doneA   s
    z'TestCudaStream.test_multiple_async_donec                    sH   dd t dD }dd |D }tj| I d H }| t|t| d S )Nc                 S   s   g | ]}t  qS r   )r   r   r;   r   r   r   r4   K   r5   zLTestCudaStream.test_multiple_async_done_multiple_streams.<locals>.<listcomp>r1   c                 S   s   g | ]}|  qS r   r:   )r2   r   r   r   r   r4   L   r5   )r=   r   r7   ZassertSetEqualr   )r   Zstreamsr>   r?   r   r   r   )test_multiple_async_done_multiple_streamsI   s    z8TestCudaStream.test_multiple_async_done_multiple_streamsc                    sL   t  }| |  }}|  |I d H  | |  | |  d S r   )r   r   r%   cancelr   Z	cancelledr?   )r   r   Zdone1Zdone2r   r   r   test_cancelled_futureR   s    
z$TestCudaStream.test_cancelled_futureN)__name__
__module____qualname__r!   r$   r   r&   r9   rA   rB   rD   r   r   r   r   r      s   	



r   c                   @   s   e Zd Zejedd ZdS )TestFailingStreamc                    s   t  }|d}|d}t  }|jdd|d  | }| t	 |I d H  W d    n1 sj0    Y  | 
|  d S )Nz
            .version 6.5
            .target sm_30
            .address_size 64
            .visible .entry failing_kernel() { trap; }
        failing_kernel)r.   r*   )r   Zcurrent_contextZcreate_module_ptxZget_functionr   	configure__call__r%   assertRaises	ExceptionZassertIsNotNone	exception)r   ctxmodulerI   r   r?   r   r   r   test_failed_streame   s    

(z$TestFailingStream.test_failed_streamN)rE   rF   rG   r   skipr   rQ   r   r   r   r   rH   \   s   	rH   __main__)r   r   r   numpyr8   Znumbar   Znumba.cuda.testingr   r   r   r   r   rH   rE   mainr   r   r   r   <module>   s   F