ó
ßüÚ\c           @` s1	  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 Z d  d l Z d  d l 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 d  d	 l m	 Z	 d  d
 l m Z m Z d  d l m Z m Z m  Z  m! Z! m" Z" m# Z# d  d l m$ Z$ m% Z% d  d l& m' Z' d  d l Z e$ Z( e% Z) e j* j+ e j, j- d ƒ d d ƒe! d e. d dG dH g d d ƒ d „  ƒ ƒ Z/ e! d e. d dI g d ƒ d „  ƒ Z0 e! d e. d dJ g d ƒ d „  ƒ Z1 e j* j2 e! d e. d dK g d ƒ d „  ƒ ƒ Z3 e! d e. d dL g d ƒ d „  ƒ Z4 e! d e. d dM g d ƒ d „  ƒ Z5 e! d e. d dN g d ƒ d  „  ƒ Z6 e j* j7 d d! ƒ e! d e. d dO g d" ƒ d# „  ƒ ƒ Z8 e! d e. d dP g d d d$ ƒ d% „  ƒ Z9 e! d e. d dQ g d d ƒ d& „  ƒ Z: e! d e. d d ƒ d' „  ƒ Z; e! d e. d dR dS g ƒ d( „  ƒ Z< e j* j+ e j, j- d ƒ d d ƒe! d e. d dT dU g ƒ d) „  ƒ ƒ Z= e! d e. d d d i i d d* 6d+ 6f dV g ƒ d, „  ƒ Z> e j* j7 d d- ƒ e! d e. d d d i i d d* 6d+ 6f g d d" ƒ d. „  ƒ ƒ Z? e! d e. d dW g d/ d d ƒ d0 „  ƒ Z@ e! d e. d dX g d ƒ d2 „  ƒ ZA e! d e. d dY g d ƒ d3 „  ƒ ZB e! d e. d dZ g d d4 i e' d5 6ƒ d6 „  ƒ ZC e! d e. d d[ g d ƒ d7 „  ƒ ZD d8 „  ZE d9 „  ZF e j* jG d: d g g  g d g g  g f d  d  g g  g d  g d  g g f d; d; g g  g d  g d  g g f d  d  d  g g  g d  d  g d  g g f d  d  g d  d  d  g g  g d  d  g d  d  g d  g g f d  d  d  g d  g g  g d  d  g d  g d  g g f d  d g g  g d g d  g g f d  d  d  d  g g  g  g d  d  g d  g d  g g f d d  d d  g g  g  g d d g d  g d  g g f d d d g g  g d d g d g g f d d d d g g  g d d d g d g g f d  d  g d  d  g d  d  g g  g d  d  g d  d  g d  g d  g g f d1 d d d d d d g d1 d d d g g  g  g  g d1 d d d d g d1 d d g d g d g d g g f e jH d d d d d d d g d d g d d g d d g g  g d d d d d g d d g d d g d d g d d g g d< e j* jI d d= ƒ ƒg ƒ d> „  ƒ ZJ e! d e. d d\ g d d? e d d ƒ d@ „  ƒ ZK e! d e. ƒ dA „  ƒ ZL e! d e. ƒ dB „  ƒ ZM e! d e. ƒ dC „  ƒ ZA e! d e. d d] g d ƒ dD „  ƒ ZN e! d e. d d^ g d ƒ dE „  ƒ ZO e! d e. d d_ g d ƒ dF „  ƒ ZP d S(`   i    (   t   print_functiont   divisiont   absolute_importN(   t   mul(   t   sleep(   t   sliding_windowt   concat(   t   gen(   t   Nannyt   Workert   waitt   worker_client(   t   config(   t   time(   t	   BANDWIDTHt	   key_split(   t   slowinct   slowaddt   inct   gen_clustert   slowidentityt   captured_logger(   t   nodebug_setup_modulet   nodebug_teardown_module(   t   TOTAL_MEMORYt   linuxt   reasons    Need 127.0.0.2 to mean localhostt   clientt   ncoress	   127.0.0.1i   s	   127.0.0.2t   timeouti   c         c` s†   |  j  d g d | j ƒV\ } |  j t t d ƒ | g d ƒ } t | ƒ Vt | j ƒ d k sg t ‚ t | j ƒ d k s‚ t ‚ d  S(   Ni   t   workersi2   i
   (	   t   _scattert   addresst   mapR   t   rangeR
   t   lent   datat   AssertionError(   t   ct   st   at   bt   xt   futures(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_work_stealing%   s
    "i   c   	      c` s  t  j d ƒ } |  j | j d d | j ƒ} t | g ƒ V|  j | j d g d | j ƒ} t | g ƒ Vg  t d ƒ D]0 } |  j | j | d t d | j d t	 ƒ^ qw } t | ƒ Vt
 | j | j ƒ d k sÚ t ‚ t
 | j ƒ d k sõ t ‚ t
 | j ƒ d	 k st ‚ d  S(
   Nt   numpyi@B R   i   i
   t   puret   allow_other_workersi    i   (   t   pytestt   importorskipt   submitt   arangeR    R
   t   sumR"   t   Falset   TrueR#   t   who_hast   keyR%   R$   (	   R&   R'   R(   R)   t   npR*   t   futuret   it   cheap(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt/   test_dont_steal_expensive_data_fast_computation1   s    !@"c      	   c` s   |  j  t d d d ƒ} t | ƒ V|  j t t d ƒ d d d | j d t ƒ} t | ƒ Vt t | j	 ƒ t | j	 ƒ ƒ d k s‰ t
 ‚ d  S(   Nid   t   delaygš™™™™™¹?i
   R   R/   i   (   R2   R   R
   R!   R"   R    R6   t   absR#   R$   R%   (   R&   R'   R(   R)   R*   R+   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt&   test_steal_cheap_data_slow_computationC   s    'c      	   c` sÛ   t  j d ƒ } |  j t d d d d | j ƒ} t | ƒ V|  j | j d d | j ƒ} t | ƒ Vg  t d ƒ D]$ } |  j t | d d d	 t ƒ^ qq } t | ƒ Vt	 | j
 | j ƒ d
 k sÈ t ‚ | j s× t ‚ d  S(   NR-   id   R>   gš™™™™™É?R   i@B i   gš™™™™™¹?R.   i   (   R0   R1   R2   R   R    R
   R3   R"   R5   R#   R7   R8   R%   R$   (   R&   R'   R(   R)   R9   R*   R;   t   slow(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt*   test_steal_expensive_data_slow_computationO   s    !7"i
   c         g` så   |  j  t d d d ƒ} | V|  j t | g d d t d d ƒ} t | ƒ VxE | j j ƒ  D]4 \ } } d t | ƒ k  o† d k  n s] t ‚ q] Wt | j	 | j
 ƒ d k s· t ‚ t t t | j j ƒ  ƒ ƒ d	 k  sá t ‚ d  S(
   NiÿÿÿÿR>   gš™™™™™¹?id   R.   i   i   i   i–   (   R2   R   R!   R5   R
   t   has_whatt   itemsR#   R%   R7   R8   R4   t   values(   R&   R'   R   R*   t   xst   wt   keys(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_worksteal_many_thievesa   s    %,"c         c` sl   |  j  t d d g d | j d t ƒ} t | ƒ Vt | j ƒ d k sM t ‚ t | j ƒ d k sh t ‚ d  S(   Ni   i   R   R/   i    (   R!   R   R    R6   R
   R#   R$   R%   (   R&   R'   R(   R)   R+   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt!   test_dont_steal_unknown_functionsq   s    'c      	   c` sr   |  j  t t d ƒ d d d | j d t ƒ} t | ƒ Vt | j ƒ d k sS t ‚ t | j ƒ d k sn t ‚ d  S(   Ni
   R>   gš™™™™™¹?R   R/   i   (	   R!   R   R"   R    R6   R
   R#   R$   R%   (   R&   R'   R(   R)   R+   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt'   test_eventually_steal_unknown_functionsy   s
    't    i   c   	   	   c` s¡   |  j  t t d ƒ d d d | j d t ƒ} t | ƒ Vd } xJ t d | ƒ D]9 \ } } | j | j | j | j k rN | d 7} qN qN W| d	 k s t	 ‚ d  S(
   Ni   R>   gš™™™™™©?R   R/   i    i   i   i
   (
   R!   R   R"   R    R6   R
   R   R7   R8   R%   (	   t   eR'   R(   R)   R&   R+   t   nearbyt   f1t   f2(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_steal_related_tasksƒ   s    ' iè  c         g` sÌ   t  j d ƒ } |  j | j j d d | d j ƒ} d  d „ } t |  j | d ƒ ƒ V|  j | t d ƒ d | ƒ} t | ƒ Vt	 | j
 | j ƒ d k s¢ t ‚ t	 | j | d j ƒ d	 k sÈ t ‚ d  S(
   NR-   i€–˜ R   i    c         S` s   d  S(   N(    (   R*   t   y(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt
   do_nothing™   s    i   iè  RR   ié  (   R0   R1   R2   t   randomR    t   NoneR
   R!   R"   R#   R7   R8   R%   RC   (   R&   R'   R   R9   R*   RS   R+   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_dont_steal_fast_tasks”   s    %"c      	   c` s*  t  |  j t d d d ƒƒ V|  j t t d ƒ d d ƒ} |  j t | ƒ } x' t | j ƒ d k  rv t j	 d ƒ VqP Wt
 | j | j d | j d d d	 t ƒV} | V} | t t t t d ƒ ƒ ƒ k sÐ t ‚ x9 | | g D]+ } t d
 „  | j j ƒ  Dƒ ƒ sÝ t ‚ qÝ W| j st ‚ | j ƒ  Vd  S(   Ni   R>   g{®Gáz„?id   gš™™™™™©?i
   t   loopR   t   memory_limitc         s` s   |  ] } t  | t ƒ Vq d  S(   N(   t
   isinstancet   int(   t   .0t   v(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>µ   s    (   R
   R2   R   R!   R"   R4   R#   t
   task_stateR   R   R	   t   ipt   portRW   R   R   R%   t   allR$   RE   t   close(   R&   R'   R(   R+   t   totalR)   t   resultRG   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_new_worker_steals¦   s    +')c      	   c` sï   t  |  j t d d d ƒƒ V|  j t t d ƒ d | j d t d d ƒ} t  | ƒ Vd t | j ƒ k  ou d k  n s€ t	 ‚ d t | j ƒ k  o  d k  n s« t	 ‚ |  j t
 | ƒ } | V} | t
 t t t d ƒ ƒ ƒ k së t	 ‚ d  S(	   Ni   R>   gš™™™™™©?id   R   R/   i   iP   (   R
   R2   R   R!   R"   R    R6   R#   R$   R%   R4   R   (   R&   R'   R(   R)   R+   Rb   Rc   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_work_steal_no_kwargs¼   s    '++c         c` s  |  j  t d d d d | j ƒ} | V|  j t t d ƒ d d d | j ƒ} x4 t | j ƒ t | j ƒ d k  rƒ t j d ƒ VqP Wt | j ƒ d k sŸ t	 ‚ t | j ƒ d k sº t	 ‚ | j
 d j ƒ  } t j d ƒ Vt | j ƒ d k sö t	 ‚ t | j ƒ d k st	 ‚ d  S(	   Ni   R>   gš™™™™™¹?R   id   g{®Gáz„?i    t   stealing(   R2   R   R    R!   R"   R#   R]   R   R   R%   t
   extensionst   balance(   R&   R'   R(   R)   R:   R+   Rc   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt#   test_dont_steal_worker_restrictionsÏ   s    !'%c         c` s  |  j  t d d d d | j ƒ} | V|  j t t d ƒ d d d d ƒ} x' t | j ƒ d k  rs t j d ƒ VqM Wt | j ƒ d k s t	 ‚ t | j ƒ d	 k sª t	 ‚ | j
 d
 j ƒ  } t j d ƒ Vt | j ƒ d k sæ t	 ‚ t | j ƒ d	 k st	 ‚ d  S(   Ni   R>   gš™™™™™¹?R   id   s	   127.0.0.1i
   g{®Gáz„?i    Rf   (   R2   R   R    R!   R"   R#   R]   R   R   R%   Rg   Rh   (   R&   R'   R(   R)   R:   R+   Rc   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt!   test_dont_steal_host_restrictionsä   s    !$t   At	   resourcesc      	   c` s  |  j  t d d d d | j ƒ} | V|  j t t d ƒ d d d i d d 6ƒ} x' t | j ƒ d k  rz t j d	 ƒ VqT Wt | j ƒ d k s– t	 ‚ t | j ƒ d
 k s± t	 ‚ | j
 d j ƒ  } t j d ƒ Vt | j ƒ d k sí t	 ‚ t | j ƒ d
 k st	 ‚ d  S(   Ni   R>   gš™™™™™¹?R   id   Rl   Rk   i
   g{®Gáz„?i    Rf   (   R2   R   R    R!   R"   R#   R]   R   R   R%   Rg   Rh   (   R&   R'   R(   R)   R:   R+   Rc   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt%   test_dont_steal_resource_restrictionsù   s    !+s   no stealing of resourcesc         c` sc  |  j  t d d d d | j ƒ} | V|  j t t d ƒ d d d i d d 6ƒ} x' t | j ƒ d	 k  rz t j d
 ƒ VqT Wt | j ƒ d	 k s– t	 ‚ t
 | j | j d | j d d d i d d 6ƒV} t ƒ  } xJ | j só t | j ƒ d	 k rt j d
 ƒ Vt ƒ  | d k  sÔ t	 ‚ qÔ Wt | j ƒ d k s9t	 ‚ t | j ƒ d	 k  sTt	 ‚ | j ƒ  Vd  S(   Ni   R>   gš™™™™™¹?R   id   gš™™™™™É?Rl   Rk   ie   g{®Gáz„?RW   R   i   i   i    (   R2   R   R    R!   R"   R#   R]   R   R   R%   R	   R^   R_   RW   R   Ra   (   R&   R'   R(   R:   R+   R)   t   start(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt    test_steal_resource_restrictions  s    !+2	"i   c         g` s   d | j  d j _ d „  } |  j | t d ƒ ƒ } t | ƒ Vg  | D] } t | j j ƒ  ƒ ^ qF } t	 | ƒ t
 | ƒ d k  s‰ t ‚ d  S(   Ni   Rf   c         S` s   t  j  ƒ  d } t | ƒ | S(   Ngš™™™™™¹?(   RT   R   (   R*   RR   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyRA   )  s    
id   i   (   Rg   t   _pct   callback_timeR!   R"   R
   R4   R$   RE   t   maxt   minR%   (   R&   R'   R   RA   R+   RG   t	   durations(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt!   test_balance_without_dependencies%  s    	(i   c      	   c` sr   |  j  t t d ƒ d d d | j d t ƒ} t | ƒ Vt | j ƒ d k sS t ‚ t | j ƒ d k sn t ‚ d  S(   Ni   R>   gš™™™™™¹?R   R/   i    (	   R!   R   R"   R    R6   R
   R#   R$   R%   (   R&   R'   R(   R)   R+   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_dont_steal_executing_tasks5  s
    'c      	   g` sÇ   d | j  d j _ |  j t d d d | j ƒ} t | ƒ Vd | j d <g  t d ƒ D]$ } |  j t	 | d	 t
 d
 d ƒ^ qV } t | ƒ Vt | j ƒ d k s¦ t ‚ t d „  | Dƒ ƒ sÃ t ‚ d  S(   Ni   Rf   t   0i áõR   gš™™™™™É?R   i   R.   R>   i   c         s` s   |  ] } | j  Vq d  S(   N(   R]   (   R[   RG   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>L  s    (   Rg   Rp   Rq   R2   R   R    R
   t   task_durationR"   R   R5   R#   R$   R%   t   any(   R&   R'   R(   t   restR*   R;   R+   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt0   test_dont_steal_few_saturated_tasks_many_workers@  s    7t   worker_kwargsRX   c      	   g` sÑ   d | j  d j _ |  j t d d d | j ƒ} t | ƒ Vd | j d <g  t d ƒ D]$ } |  j t	 | d t
 d	 d ƒ^ qV } t ƒ  } xA t d
 „  | Dƒ ƒ sÌ t j d ƒ Vt ƒ  | d k  sŒ t ‚ qŒ Wd  S(   Ni   Rf   Rw   i€ðúR   gš™™™™™É?R   R.   R>   c         s` s   |  ] } | j  Vq d  S(   N(   R]   (   R[   RG   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>]  s    g{®Gáz„?i   (   Rg   Rp   Rq   R2   R   R    R
   Rx   R"   R   R5   R   Ry   R   R   R%   (   R&   R'   R(   Rz   R*   R;   R+   Rn   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_steal_when_more_tasksO  s    7	c      	   '` sÿ   d „  } d | j  d j _ |  j t d d d | j ƒ} t | ƒ Vd | j d <d	 | j d
 <g  t d ƒ D]$ } |  j t	 | d t
 d d ƒ^ ql } |  j | | d d ƒ‰  x( t d „  | Dƒ ƒ sØ t j d ƒ Vq± Wt ‡  f d †  | Dƒ ƒ sû t ‚ d  S(   Nc         S` s   t  d ƒ |  S(   Ni   (   R   (   R*   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   slow2d  s    
i   Rf   Rw   i áõR   gš™™™™™É?R   i   R~   i
   R.   R>   t   priorityiÿÿÿÿc         s` s   |  ] } | j  Vq d  S(   N(   R]   (   R[   RG   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>r  s    g{®Gáz„?c         3` s!   |  ] } ˆ  j  | j k Vq d  S(   N(   R8   R]   (   R[   RG   (   R:   (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>v  s    (   Rg   Rp   Rq   R2   R   R    R
   Rx   R"   R   R5   Ry   R   R   R%   (   R&   R'   R(   Rz   R~   R*   R;   R+   (    (   R:   s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt    test_steal_more_attractive_tasksb  s    	7c         C` s   t  d ƒ d  S(   Ni   (   R   (   R*   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   funcy  s    c         g` sÑ  | j  d } | j j ƒ  t j ƒ  } t t |  ƒ ƒ } t j ƒ  } g  }	 x4t | |  ƒ D]#\ }
 } xt | d t	 ƒD] } | rý | j
 t | ƒ g d |
 j ƒV\ } | j | j } | j } t | | _ x0 | j D] } | j | j | 7_ qÚ Wn d } d | j t t | ƒ ƒ <t | ƒ } | j t | d d t | ƒ | f d |
 j d t	 d	 t d
 | ƒ} |	 j | ƒ qy WqZ Wx- t | j ƒ t |	 ƒ k  r°t j d ƒ Vq„Wxõ t d ƒ D]ç } | j ƒ  x | j rët j d ƒ VqÑWg  | D]A }
 t g  | j  |
 j D] } t t! | ƒ ƒ ^ qd t	 ƒ^ qó} t | d t	 ƒ} t | d t	 ƒ} t" j# d ƒ r•| | k r•d d  l$ } | j% ƒ  q•n  | | k r¾d  Sq¾Wt& d j' t | ƒ t | ƒ ƒ ƒ ‚ d  S(   NRf   t   reverseR   i{   i   R8   s   %d-%dR/   R.   R   gü©ñÒMbP?i
   s
   pdb-on-erri    s   Expected: {}; got: {}((   Rg   Rp   t   stopt	   itertoolst   countt   listR   t   zipt   sortedR6   t   scattert   nextR    t   tasksR8   t   nbytesR   R7   Rx   t   strRZ   R2   R   R5   t   appendR#   t   rprocessingR   R   R"   Rh   t	   in_flightt
   processingR   R   t   gett   pdbt	   set_tracet	   Exceptiont   format(   t   inpt   expectedR&   R'   R   t   stealt   counterR‹   t   data_seqR+   RG   t   tst   tt   datt
   old_nbytest   wsR;   t   ft   kRc   t   result2t	   expected2R“   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   assert_balanced}  sX    %		

Ks   inp,expectedgš™™™™™¹?t   markss/   Some uncertainty based on executing stolen taskc         ` sE   ‡  ‡ f d †  } t  d t d d g t ˆ ƒ ƒ | ƒ } | ƒ  d  S(   Nc          ` s   t  ˆ ˆ  |  | Ž S(   N(   R¥   (   t   argst   kwargs(   R˜   R—   (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   <lambda>Û  RL   R   R   s	   127.0.0.1i   (   s	   127.0.0.1i   (   R   R6   R#   (   R—   R˜   t   test(    (   R˜   R—   s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_balance»  s     (R	   c      	   c` sþ   |  j  t t d ƒ d d d | j d t ƒ} x" | j | j sQ t j d ƒ Vq0 W| j	 d } t
 d „  | j Dƒ ƒ s~ t ‚ t
 d	 „  | j j ƒ  Dƒ ƒ s£ t ‚ |  j d
 d ƒ Vt
 d „  | j Dƒ ƒ sÔ t ‚ t
 d „  | j j ƒ  Dƒ ƒ sú t ‚ d  S(   Nid   R>   gš™™™™™¹?R   R/   g{®Gáz„?Rf   c         s` s   |  ] } | Vq d  S(   N(    (   R[   t   st(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>é  s    c         s` s"   |  ] } | D] } | Vq q d  S(   N(    (   R[   t   LR*   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>ê  s    R   i
   c         s` s   |  ] } | Vq d  S(   N(    (   R[   R*   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>î  s    c         s` s"   |  ] } | D] } | Vq q d  S(   N(    (   R[   R­   R*   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>ï  s    (   R!   R   R"   R    R6   R‘   t   worker_addressR   R   Rg   Ry   t   stealable_allR%   t	   stealableRE   t   restart(   R&   R'   R(   R)   R+   R™   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_restartà  s    '% c   	      #` s  ˆ  j  d } d ˆ  j d <|  j t d t t ƒ d | j ƒ} |  j t d t t ƒ d | j ƒ} g  t d ƒ D]6 } |  j t | | d d	 d
 t	 d | j d t
 ƒ^ qo } x. t ‡  f d †  | Dƒ ƒ sÛ t j d ƒ Vq® W| j ƒ  x | j rt j d ƒ Vqé Wˆ  j | j st ‚ d  S(   NRf   gü©ñÒMbP?R   Rw   R   t   1i
   R>   i   R.   R/   c         3` s!   |  ] } | j  ˆ  j k Vq d  S(   N(   R8   R   (   R[   R¡   (   R'   (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>  s    g{®Gáz„?(   Rg   Rx   R2   R   RZ   R   R    R"   R   R5   R6   Ry   R   R   Rh   R   R‘   R%   (	   R&   R'   R(   R)   R™   R*   RR   R;   R+   (    (   R'   s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt$   test_steal_communication_heavy_tasksò  s    $$	F
c         c` s“  |  j  t d d | j ƒ} t | ƒ Vg  t d ƒ D]! } |  j  t | | d d ƒ^ q3 } x' t | j ƒ d k  rƒ t j	 d ƒ Vq] Wg  t d ƒ D]$ } t
 | j | j d | j ƒ^ q‘ V} t | ƒ Vt | j ƒ }	 g  |	 j ƒ  D] \ }
 } t | ƒ sã |
 ^ qã } t | ƒ d	 k r?t j d
 t | ƒ t |	 ƒ f ƒ n  t t t |	 j ƒ  ƒ ƒ d k  sft ‚ |  j ƒ  Vg  | D] }
 |
 j ƒ  ^ qxVd  S(   Ni   R   id   R>   gš™™™™™É?g{®Gáz„?i   RW   i   s,   Too many workers without keys (%d out of %d)i   (   R2   R   R    R
   R"   R   R#   R‹   R   R   R	   R^   R_   RW   t   dictRC   RD   R0   t   failRr   R!   RE   R%   t   _closeRa   (   R&   R'   R(   R)   R*   R;   R+   t   _R   RC   RG   RH   t   empty_workers(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_steal_twice  s     481'c         c` s·   | j  d } |  j t d d d d | j ƒ} x | j sK t j d ƒ Vq1 W| j | j | j	 | j
 | j | j
 | j ƒ t j d ƒ V| j	 | j k s£ t ‚ | j s³ t ‚ d  S(   NRf   i   R>   g      à?R   g{®Gáz„?gš™™™™™¹?(   Rg   R2   R   R    t	   executingR   R   t   move_task_requestR‹   R8   R   R%   (   R&   R'   R(   R)   R™   R:   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyRv   ,  s    !+c         #` s™  d „  } |  j  | d ƒ V|  j  t d ƒ V|  j | d d g d | j d t ƒ} x6 t t t ˆ  j j ƒ  ƒ ƒ d k  rŠ t	 j
 d	 ƒ VqU Wt ƒ  } xG t ‡  f d
 †  | Dƒ ƒ rÝ t	 j
 d	 ƒ Vt ƒ  | d k  s— t ‚ q— Wt | j ƒ } t | j ƒ } |  j t t d ƒ d | j d t ƒ}	 t	 j
 d ƒ Vt | ƒ VxV | D]N }
 t d „  | j |
 ƒ Dƒ ƒ t d „  | j |
 ƒ Dƒ ƒ d k sCt ‚ qCWd  S(   Nc         S` s    t  ƒ   } t |  ƒ Wd  QXd  S(   N(   R   R   (   R>   R&   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   long>  s    gš™™™™™¹?i   g      à?g333333ã?R   R/   i   g{®Gáz„?c         3` s(   |  ] } | j  ˆ  j d  j k Vq d S(   Rf   N(   R8   Rg   t   key_stealable(   R[   R   (   R'   (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>J  s    id   gš™™™™™É?c         s` s   |  ] } | d  d k Vq d S(   i   R»   N(    (   R[   t   log(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>Y  s    c         s` s   |  ] } | d  d k Vq d S(   i   R»   N(    (   R[   R¿   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pys	   <genexpr>Z  s    (   R2   R   R!   R    R6   R4   R#   R‘   RE   R   R   R   Ry   R%   R»   R"   R
   t   story(   R&   R'   R(   R)   R½   t
   long_tasksRn   t   nat   nbt   incsR   (    (   R'   s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt"   test_dont_steal_long_running_tasks<  s&    	''	'c   
   	   c` s³  d t  f d „  ƒ  Y} d | j d j _ |  j t d d d ƒVg  t d ƒ D]$ } |  j | d	 t d
 | j ƒ^ qM } |  j	 t | d
 | j d t
 d d ƒ} ~ t | ƒ V| j r¾ | j sÄ t ‚ t | j ƒ t | j ƒ d k sì t ‚ t j ƒ  } | j | j j ƒ  ƒ | j | j j ƒ  ƒ ~ t ƒ  }	 x= | j sE| j rot j d ƒ Vt ƒ  |	 d k  s3t ‚ q3W| j s€t ‚ t | j j ƒ  ƒ sœt ‚ t | ƒ s¯t ‚ d  S(   Nt   Fooc           B` s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyRÆ   `  s   i   Rf   iÿÿÿÿR>   gš™™™™™¹?i2   R.   R   R/   gš™™™™™©?i
   g{®Gáz„?i   (   t   objectRg   Rp   Rq   R2   R   R"   R5   R    R!   R6   R
   R$   R%   R#   t   weakreft   WeakSett   updateRE   R   R   R   R7   Ry   RC   R†   (
   R&   R'   R(   R)   RÆ   R¸   t   objectsR*   R    Rn   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_cleanup_repeated_tasks^  s*    7!(	c         c` s¢   t  d ƒ r } d | j d _ xX t d ƒ D]J } |  j t t d ƒ d d d t d	 | j d
 t ƒ} t	 j
 d ƒ V~ q, WWd  QX| j ƒ  } d | k sž t ‚ d  S(   Ns   distributed.stealingi   Rf   id   i
   R>   g{®Gáz„?R.   R   R/   t   Error(   R   t   periodic_callbackst   intervalR"   R!   R   R5   R    R6   R   R   t   getvalueR%   (   R&   R'   R(   R)   R¿   R;   R+   t   out(    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   test_lose_task~  s    		(   s	   127.0.0.1i   (   s	   127.0.0.2i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.2i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (Q   t
   __future__R    R   R   R„   t   operatorR   RT   t   sysR   R   RÊ   R0   t   toolzR   R   t   tornadoR   t   distributedR   R	   R
   R   t   distributed.configR   t   distributed.metricst   distributed.schedulerR   R   t   distributed.utils_testR   R   R   R   R   R   R   R   t   distributed.workerR   t   setup_modulet   teardown_modulet   markt   skipift   platformt
   startswithR6   R,   R=   R@   t   avoid_travisRB   RI   RJ   RK   t   skipRQ   RV   Rd   Re   Ri   Rj   Rm   Ro   Ru   Rv   R{   R}   R€   R   R¥   t   parametrizet   paramt   xfailR«   R²   R´   Rº   RÅ   RÎ   RÔ   (    (    (    s;   lib/python2.7/site-packages/distributed/tests/test_steal.pyt   <module>   s¢   ".	-	%%	(%%%
(+'$	'5A+%%%		>	!!'93!33'-!$369<1%"% 