B
    F.\                 @   s  d dl mZmZmZ d dlZd dlmZ d dlZd dlZd dl	m
Z
 d dlmZmZmZmZmZ d dlmZ d dlmZmZmZmZ d dlmZmZmZ ed	d
dd Zed	d
dd Zdd Ze dd Zed	d
dd Zdd Zed	d
dd Z dd Z!ed	d
dd Z"ej#j$ej%d  dkddeed	d gd! edd"d#d$ Z&ed	d
d%d& Z'ed	d
d'd( Z(d)d* Z)dS )+    )print_functiondivisionabsolute_importN)sleep)gen)ClientVariableworker_clientNannywait)time)gen_clusterincslowdiv)clientcluster_fixtureloopT)r   c       	      c   s   t d}t d}|j| kst| td}||V  | V }|j|jksPt~~t	dV  |j
sjt|  t }x(|j
rt	dV  t |d k sztqzW d S )Nx   g?g{Gz?   )r   r   AssertionErrorsubmitr   setgetkeyr   r   Ztasksdeleter   )	csabr   xxfuturefuture2start r%   >lib/python3.7/site-packages/distributed/tests/test_variable.pytest_variable   s    

r'   c             c   sD   t d}t d}|j| kst|dV  | V }|dks@td S )Nr   )r   Zhello)r   r   r   r   r   )r   r   r   r    r   r!   datar%   r%   r&   test_queue_with_data)   s    
r)   c             C   sF   |  dd d}td}td}|| | }| dksBtd S )Nc             S   s   | d S )Nr   r%   )r   r%   r%   r&   <lambda>6   s    ztest_sync.<locals>.<lambda>
   r      )r   r   r   r   resultr   )r   r"   r   r!   r#   r%   r%   r&   	test_sync5   s    
r.   c       
      c   s   t | jddV }|dd d}td}||V  ~| V  tdV  t | jddV }td}| V }|V }	|	dkst	| V  d S )	NT)asynchronousc             S   s   | d S )Nr   r%   )r   r%   r%   r&   r*   B   s    z#test_hold_futures.<locals>.<lambda>r+   r   g?r,   )
r   addressr   r   r   closer   r   r   r   )
r   r   r    Zc1r"   Zx1c2Zx2r#   r-   r%   r%   r&   test_hold_futures?   s    

r3   c          	   c   s\   t d}t }ttj |jddV  W d Q R X t }d||   k rRdk sXn td S )Nvg?)timeoutg       @)r   r   pytestraisesr   TimeoutErrorr   r   )r   r   r   r    r4   r$   stopr%   r%   r&   test_timeoutS   s    r:   c          	   C   sZ   t d}t }ttj |jdd W d Q R X t }d||   k rPdk sVn td S )Nr4   g?)r5   g       @)r   r   r6   r7   r   r8   r   r   )r   r4   r$   r9   r%   r%   r&   test_timeout_sync^   s    r;   c             c   s   t d}t d}| dd d}| dd d}|j}||V  ~tdV  |  }	}
tjV  || |	V }|j|kst	|V }|dkst	d S )	Nr4   c             S   s   | d S )Nr   r%   )r   r%   r%   r&   r*   l   s    ztest_cleanup.<locals>.<lambda>r+   c             S   s   | d S )Nr   r%   )r   r%   r%   r&   r*   m   s       g?r,   )
r   r   r   r   r   r   Z_getZmomentZ_setr   )r   r   r   r    r4   vvr   yZx_keyZt_futurer!   r"   r-   r%   r%   r&   test_cleanupg   s    
r?   c                s8   t d  fdd}| |d    dks4td S )Nr4   c                s     | d  d S )Nr   )r   )r   )r4   r%   r&   f   s    ztest_pickleable.<locals>.fr+   r,   )r   r   r-   r   r   )r   r@   r%   )r4   r&   test_pickleable~   s    rA   c             c   s:   t d}| }t d}|dV  |V }|dks6td S )Nr4   r   )r   r   r   r   )r   r   r   r    r4   Ztornado_futurer=   r-   r%   r%   r&   test_timeout_get   s    rB      zMulti-client issues)reason)z	127.0.0.1rC   r   )r   ZncoresZWorkerr5   c       	      '   s   d  fdd}t d| d}| dV }||V  | |td}| |V }t fdd	|D sjtt }x4t	|j
d
 dkrtdV  t | dk srtqrW d S )N2   c          	      s~   t  n}td|d}xFt D ]:}| }| }|t|}|| tdt		   qW |  }td |S Q R X d S )Nr   )r   g{Gz?g?)
r	   r   ranger   r-   r   r   r   r   random)ir   r4   _r"   r   r>   r-   )NITERSr%   r&   r@      s    
ztest_race.<locals>.fr   )r   r      c             3   s   | ]}| d  kV  qdS )g?Nr%   ).0r)rJ   r%   r&   	<genexpr>   s    ztest_race.<locals>.<genexpr>z
variable-xg{Gz?rC   )r   scatterr   maprF   Zgatherallr   r   lenZ
wants_whatr   r   )	r   r   Zworkersr@   r4   r   ZfuturesZresultsr$   r%   )rJ   r&   	test_race   s    rS   c          	   c   s  |  dV }td}||V  t|jddV }td|d}| V }|jdksTt| t	dd}t
|V  ||V  | V }	|	jd	ksttt |	V  W d Q R X t }
xXy
|	V  W q tk
r   P Y q tk
r   t |
d
 k sttdV  Y qX qW | V  d S )N{   r   T)r/   )r   Zfinishedr   r   errorr   g?)rO   r   r   r   r0   r   Zstatusr   r   r   r   r6   r7   	Exceptionr   ZeroDivisionErrorr   r   r1   )r   r   r   r    r   r4   r2   Zv2r"   r#   r$   r%   r%   r&   $test_Future_knows_status_immediately   s0    



rX   c          	   c   sr   |  tdd}t }||V  tdV  | V }tt	 |
 V  W d Q R X | V }t|t	sntd S )Nr   r   g?)r   r   r   r   r   r   r   r6   r7   rW   r-   Z	exception
isinstancer   )r   r   r   r    r"   varr#   excr%   r%   r&   test_erred_future   s    

r\   c          	   C   sP   |  tdd}t }|| td | }tt |	  W d Q R X d S )Nr   r   g?)
r   r   r   r   r   r   r6   r7   rW   r-   )r   r"   rZ   r#   r%   r%   r&   test_future_erred_sync   s    
r]   )*Z
__future__r   r   r   rG   r   r   sysr6   Ztornador   Zdistributedr   r   r	   r
   r   Zdistributed.metricsZdistributed.utils_testr   r   r   r   r   r   r   r'   r)   r.   r3   r:   r;   r?   rA   rB   ZmarkZskipifversion_inforS   rX   r\   r]   r%   r%   r%   r&   <module>   s2   
	
!