o
    Nrf                     @  s  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
m	Z	 d dlZd dlZd dlmZ d dlmZ d dlmZmZ d	d
 Zdd Zdd Zdd Zdd Zdd Zejdeegdd Zejdeegdd Zdd Zdd Zdd Z d d! Z!d"d# Z"dS )$    )annotationsN)ThreadPoolExecutor)
ThreadPool)sleeptime)	CPU_COUNTget)addincc                  C  sD   ddt dftddfd} t| ddksJ t| ddgd	ks J d S )
N      xzy)r   r   r   wr      )r   r   )r   r
   r	   dsk r   a/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/dask/tests/test_threaded.pytest_get   s   r   c                  C  s6   ddt ddftddgfd} t| ddgdksJ d S )	Nr   r   r   r   )r   r   abr   r   )   r   )r
   sumr	   r   r   r   r   test_nested_get   s   r   c                  C  s   ddi} t | ddksJ d S )Nr   r   r   r   r   r   r   test_get_without_computation   s   r   c               
   C  s   ddl m}  dd }dd }ddi}| ||d	C | ||d	$ tjtd
d t|d W d    n1 s7w   Y  W d    n1 sFw   Y  W d    d S W d    d S 1 s^w   Y  d S )Nr   )Callbackc                  _  s   d S Nr   argskwargsr   r   r   _f_ok%      z#test_broken_callback.<locals>._f_okc                  _  s   t d)Nmy_exception
ValueErrorr    r   r   r   	_f_broken(   s   z'test_broken_callback.<locals>._f_brokenr   r   )startfinishr%   )match)Zdask.callbacksr   pytestraisesr'   r	   )r   r#   r(   r   r   r   r   test_broken_callback"   s   "r.   c                 C  s   t  r   r&   r   r   r   r   bad3   s   r0   c                     s&   dt dfd tt fdd d S )Nr   r   r   r   c                     s
   t  dS Nr   r   r   r   r   r   <lambda>9   s   
 z-test_exceptions_rise_to_top.<locals>.<lambda>)r0   r,   r-   r'   r   r   r   r   test_exceptions_rise_to_top7   s   r4   pool_typc              	   C  s   | t B}tjj|d" tdtdfiddksJ tdtdfiddks'J W d    n1 s1w   Y  W d    d S W d    d S 1 sIw   Y  d S )Npoolr   r   r   )r   daskconfigsetr	   r   )r5   r7   r   r   r   test_reuse_pool<   s   
"r;   c                   s   dd   fddt dD }ttdd t t|D ff|d< | d	}t|d|d
d	ks0J W d    d S 1 s;w   Y  d S )Nc                   S  s   t d t S )N{Gz?)r   	threading	get_identr   r   r   r   fF   s   ztest_pool_kwarg.<locals>.fc                   s   i | ]}d |f fqS r/   r   .0ir?   r   r   
<dictcomp>J   s    z#test_pool_kwarg.<locals>.<dictcomp>   c                 S  s   g | ]}d |fqS r/   r   r@   r   r   r   
<listcomp>K   s    z#test_pool_kwarg.<locals>.<listcomp>r   r   r6   )rangelenr:   r	   )r5   r   r7   r   rC   r   test_pool_kwargD   s   "
"rI   c                    s   g   fdd} t  }tdD ] }t j| dd}d|_|  |   dgks+J  d d = qt }t  |d krStd	 t |d
 k sIJ t  |d ks<d S d S )Nc                   s*   t d fddfiddd}| d S )Nr   c                     s    S r   r   r   rB   r   r   r3   U       z8test_threaded_within_thread.<locals>.f.<locals>.<lambda>r   Znum_workers)r	   append)rB   resultLrJ   r   r?   T   s   z&test_threaded_within_thread.<locals>.f   )r   targetr!   Tr   
   r<      )	r=   active_countrG   Threaddaemonr)   joinr   r   )r?   before_tr)   r   rO   r   test_threaded_within_threadQ   s   r]   c                  C  sb   t  } dd tdD }tt|f|d< tdD ]	}t|ddd qt  }|| d ks/J d S )	Nc                 S      i | ]}d |f|fddfqS )r   c                 S     | S r   r   rJ   r   r   r   r3   k   rK   z=test_dont_spawn_too_many_threads.<locals>.<dictcomp>.<lambda>r   r@   r   r   r   rD   k        z4test_dont_spawn_too_many_threads.<locals>.<dictcomp>rT   r   rQ   r   rL      )r=   rV   rG   r   listr	   rZ   r   r[   afterr   r   r    test_dont_spawn_too_many_threadsh   s   re   c                  C  sb   t  } dd tdD }tt|f|d< tdD ]}t|d qt  }|| td  ks/J d S )Nc                 S  r^   )r   c                 S  r_   r   r   rJ   r   r   r   r3   x   rK   zGtest_dont_spawn_too_many_threads_CPU_COUNT.<locals>.<dictcomp>.<lambda>r   r@   r   r   r   rD   x   r`   z>test_dont_spawn_too_many_threads_CPU_COUNT.<locals>.<dictcomp>rT   r   rQ   r   )r=   rV   rG   r   rb   r	   r   rc   r   r   r   *test_dont_spawn_too_many_threads_CPU_COUNTu   s   rf   c                    s   dd } t df| dfdg   fdd}g }tdD ]}tj|d	}d
|_|  || q|D ]}|  q3 dgd ksCJ d S )Nc                 S  s   dS )Nr   r   r/   r   r   r   r?      r$   ztest_thread_safety.<locals>.fg?r   r1   c                     s     td d S r2   )rM   r	   r   rP   r   r   r   test_f   s   z"test_thread_safety.<locals>.test_frQ   )rS   Tr   )r   rG   r=   rW   rX   r)   rM   rY   )r?   rh   threadsr[   r\   threadr   rg   r   test_thread_safety   s   
rk   c               	     s  t jdkrddlm nt dfddt t ddd dfdd}  fddtdD }tt	|
 f|d< tj| fd}|  tt(}tt t|d|d W d    n1 sjw   Y    W d    n1 s}w   Y  |  d S )Nwin32r   interrupt_mainreturnNonec                     s   t  t j d S r   )signalpthread_killSIGINTr   )main_threadr   r   rn      s   z&test_interrupt.<locals>.interrupt_mainin_clog_eventthreading.Event
clog_eventc                 S  s   |    |  d S r   )r:   wait)ru   rw   r   r   r   clog   s   ztest_interrupt.<locals>.clogc                   s   |       d S r   )rx   )ru   rm   r   r   	interrupt   s   
z!test_interrupt.<locals>.interruptc                   s   i | ]
}d |f fqS r/   r   r@   )ry   rw   ru   r   r   rD      s    z"test_interrupt.<locals>.<dictcomp>rQ   r   rR   r6   )ro   rp   )ru   rv   rw   rv   ro   rp   )ru   rv   ro   rp   )sysplatform_threadrn   r=   r>   EventrG   rH   rb   keysrW   r)   r   r   r,   r-   KeyboardInterruptr	   r:   rY   )rz   r   Zinterrupterr7   r   )ry   rw   ru   rn   rt   r   test_interrupt   s&   



r   )#
__future__r   rq   r{   r=   concurrent.futuresr   Zmultiprocessing.poolr   r   r   r,   r8   Zdask.systemr   Zdask.threadedr	   Zdask.utils_testr
   r   r   r   r   r.   r0   r4   markZparametrizer;   rI   r]   re   rf   rk   r   r   r   r   r   <module>   s6    

