ó
ßüÚ\c           @` s‡  d  d l  m Z m Z m Z 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 Z d  d l Z d  d l m Z d  d l m Z d  d l Z d  d l m Z m Z m Z d  d	 l m Z m Z d  d
 l m	 Z	 d  d l m Z m Z m Z m  Z  m! Z! m" Z" m# Z# m$ Z$ d  d l m% Z% d  d l& m' Z' d  d l( m) Z) d  d l* m+ Z+ d „  Z, d „  Z- e j. j/ d d d ƒd „  ƒ Z0 e j. j/ d d d ƒd „  ƒ Z1 d „  Z2 d „  Z3 e j. j/ d d d ƒd e+ e j4 f d „  ƒ  Yƒ Z5 e j. j/ d d d ƒd „  ƒ Z6 d „  Z7 e ƒ  d „  ƒ Z8 d  „  Z9 d! „  Z: e j. j/ d d d ƒd" „  ƒ Z; d# „  Z< d$ „  Z= d% „  Z> d& „  Z? e j. j@ d' eA eB g ƒ d( „  ƒ ZC e j. j/ e jD dL k  d d+ ƒd, „  ƒ ZE e ƒ  d- „  ƒ ZF d. „  ZG d/ „  ZH d0 „  ZI e j. j@ d1 d d) g ƒ d2 „  ƒ ZK e j. j@ d1 d d) g ƒ d3 „  ƒ ZL d4 „  ZM e j. j/ e jD dM k  d d+ ƒd5 „  ƒ ZN d6 „  ZO d7 „  ZP d8 „  ZQ d9 „  ZR d: „  ZS d; „  ZT d< „  ZU e ƒ  d= „  ƒ ZV d> „  ZW d? „  ZX d@ „  ZY dA „  ZZ dB „  Z[ e j. j/ e j\ j] dC ƒ d dD ƒdE „  ƒ Z^ dF e f dG „  ƒ  YZ_ dH „  Z` dI „  Za e jD dN k rƒd  dK lb Tn  d S(O   i    (   t   print_functiont   divisiont   absolute_import(   t   partialN(   t   sleep(   t   Lock(   t   IOLoop(   t   gen(   t   Clientt   Workert   Nanny(   t   LocalClustert   nprocesses_nthreads(   t   time(   t   inct   gen_testt   slowinct   assert_cannot_connectt   assert_can_connect_locally_4t$   assert_can_connect_from_everywhere_4t&   assert_can_connect_from_everywhere_4_6t   captured_logger(   t   loop(   t   sync(   t   TOTAL_MEMORY(   t   ClusterTestc         ` sÀ   t  d d d d t d t d d  d |  ƒ } t | ƒ { } | j t d ƒ ‰  ˆ  j ƒ  ˆ  j | j j	 k ss t
 ‚ t ‡  f d	 †  | j Dƒ ƒ s˜ t
 ‚ | j | j k s° t
 ‚ Wd  QXWd  QXd  S(
   Ni   t   scheduler_porti    t	   processest   silence_logst   dashboard_addressR   i   c         3` s(   |  ] } | j  i d  ˆ  j 6k Vq d S(   i   N(   t   datat   key(   t   .0t   w(   t   x(    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>1   s    (   R   t   Falset   NoneR   t   submitR   t   resultR   t	   schedulert   taskst   AssertionErrort   anyt   workersR   (   R   t   ct   e(    (   R"   sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_simple$   s    	
%c         C` s†   t  d d g d d d |  ƒ G } t | ƒ 2 } t j t ƒ  } | j d „  d ƒ Wd  QXWd  QXWd  QXd t | j ƒ k s‚ t ‚ d  S(	   Nt   blocked_handlerst   run_functiont	   n_workersi    R   c         S` s   |  S(   N(    (   R"   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   <lambda>:   t    i*   sB   'run_function' handler has been explicitly disallowed in Scheduler(	   R   R   t   pytestt   raisest
   ValueErrort   run_on_schedulert   strt   valueR)   (   R   R,   t   clientt   exc(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt,   test_local_cluster_supports_blocked_handlers6   s    !%s   sys.version_info[0] == 2t   reasons   fork issuesc          C` sŸ   t  ƒ   }  t |  j ƒ , } | j t t d ƒ ƒ } | j | ƒ Wd  QXt d ƒ % } |  j ƒ  |  j ƒ  t	 d ƒ Wd  QX| j
 ƒ  } | s• t ‚ Wd  QXd  S(   Nid   s   tornado.applicationg      à?(   R   R   t   scheduler_addresst   mapR   t   ranget   gatherR   t   closeR   t   getvalueR)   (   t   clusterR:   t   ft   log(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_close_twiceA   s    

s
   multi-loopc          C` s·  t  d d d d t d d d d  d t ƒ¤ }  t |  j ƒ d k sH t ‚ t d	 „  |  j Dƒ ƒ sg t ‚ t |  j j	 ƒ E } t d
 „  |  j Dƒ ƒ s› t ‚ t d „  |  j Dƒ ƒ sº t ‚ Wd  QXt
 |  ƒ Wd  QXt  d d d d t d d d d  d t ƒ· }  t |  j ƒ d k st ‚ t d „  |  j Dƒ ƒ s7t ‚ t |  j j	 ƒ X } t d „  | j ƒ  j ƒ  Dƒ ƒ stt ‚ |  j ƒ  t d „  |  j Dƒ ƒ st ‚ Wd  QXt
 |  ƒ Wd  QXd  S(   Ni   R   i    R   t   threads_per_workeri   R   R   c         s` s   |  ] } t  | t ƒ Vq d  S(   N(   t
   isinstanceR	   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>Z   s    c         s` s   |  ] } | j  d  k Vq d S(   i   N(   t   ncores(   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>\   s    c         s` s   |  ] } t  | t ƒ Vq d  S(   N(   RI   R	   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>]   s    c         s` s   |  ] } t  | t ƒ Vq d  S(   N(   RI   R
   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>i   s    c         s` s   |  ] } | d  k Vq d S(   i   N(    (   R    t   v(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>k   s    c         s` s   |  ] } t  | t ƒ Vq d  S(   N(   RI   R
   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>n   s    (   R   R#   R$   t   lenR+   R)   t   allR   R'   t   addresst   reprt   TrueRJ   t   valuest   start_worker(   R,   R-   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt
   test_procsO   s:    	%	(
%c          C` s¹   t  d t d t d d ƒ ˜ }  |  j j d ƒ s6 t ‚ |  j d j j d ƒ sU t ‚ t |  ƒ L } t	 ƒ  } | j
 | ƒ } | j d „  | ƒ } | j ƒ  | k s© t ‚ Wd QXWd QXd S(   s]   
    Test that unserializable data is still fine to transfer over inproc
    transports.
    R   R   R   s	   inproc://i    c         S` s   |  S(   N(    (   R"   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyR2      R3   N(   R   R#   R$   R>   t
   startswithR)   R+   RN   R   R   t   scatterR%   R&   (   RD   R:   t   lockR"   t   y(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_move_unserializable_datar   s    	c          C` sÞ  t  d d t d t d d	 ƒ} }  |  j j d ƒ s9 t ‚ |  j d j j d ƒ sX t ‚ t |  j	 j ƒ + } | j
 t d ƒ j ƒ  d k s‘ t ‚ Wd	 QXWd	 QXt  d d t d t d d	 ƒ} }  |  j j d
 ƒ sÖ t ‚ |  j d j j d
 ƒ sõ t ‚ t |  j	 j ƒ + } | j
 t d ƒ j ƒ  d k s.t ‚ Wd	 QXWd	 QXt  d d t d d d t d d	 ƒz }  |  j d k svt ‚ |  j d j j d
 ƒ s•t ‚ t |  j	 j ƒ + } | j
 t d ƒ j ƒ  d k sÎt ‚ Wd	 QXWd	 QXd	 S(   sK   
    Test the transport chosen by LocalCluster depending on arguments.
    i   R   R   R   s	   inproc://i    i   i   Ns   tcp://R   iR"  s   tcp://127.0.0.1:8786(   R   R#   R$   R>   RT   R)   R+   RN   R   R'   R%   R   R&   RP   (   R,   R-   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_transportsƒ   s2    00	R3   t	   LocalTestc           B` s-   e  Z e e d  e d d ƒZ i d d 6Z RS(   R   R   N(   t   __name__t
   __module__R   R   R#   R$   t   Clustert   kwargs(    (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyRZ   §   s   c         C` sˆ   t  d d d d t d d  d |  ƒ^ } t | ƒ I } t | j ƒ  ƒ t | j ƒ k s] t ‚ | j t	 | ƒ k sx t ‚ Wd  QXWd  QXd  S(   Ni   R   i    R   R   R   (
   R   R#   R$   R   RL   RJ   R+   R)   R>   RO   (   R   R,   R-   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_Client_with_local­   s    !'c         C` s:   t  d |  d t ƒ  } Wd  QX| j j d k s6 t ‚ d  S(   NR   R   t   closed(   R   R#   RD   t   statusR)   (   R   R,   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_Client_solo·   s    c          c` sÁ   t  j d ƒ t d t d t d d ƒ V}  t  j t ƒ # } t d t d t d d ƒ V} Wd  QXd |  j j j k sx t	 ‚ d | j j j k s“ t	 ‚ t
 d „  | j Dƒ ƒ s² t	 ‚ |  j ƒ  Vd  S(   Nt   bokehR   R   R   i”&  c         3` s4   |  ]* ‰  t  ‡  f d  †  d d d g Dƒ ƒ Vq d S(   c         3` s*   |  ]  } | t  ˆ  j ƒ j ƒ  k Vq d  S(   N(   R8   t   messaget   lower(   R    t   word(   t   msg(    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>É   s   t   9876t   runnings   already in useN(   RM   (   R    (    (   Rg   sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>È   s   (   R4   t   importorskipR   R#   t   warnst	   ExceptionRD   R'   t   servicesR)   R*   t   listRB   (   t   c1t   infot   c2(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_duplicate_clients½   s    "c      	   C` s†   t  d |  d t d d d t ƒ G } t | j j ƒ d k sB t ‚ t d „  | j j Dƒ ƒ sd t ‚ Wd  QX| j j d k s‚ t ‚ d  S(   NR   R   R1   i   R   c         s` s   |  ] } t  | t ƒ Vq d  S(   N(   RI   R	   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>Ô   s    R`   (   R   R#   RL   RD   R+   R)   RM   Ra   (   R   R,   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_Client_kwargsÑ   s    $(c         C` sp   t  d |  d t d d  ƒ O } t  d |  d t d d  ƒ + } | j j j | j j j k s` t ‚ Wd  QXWd  QXd  S(   NR   R   R   (   R   R#   R$   RD   R'   t   portR)   (   R   R,   RE   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_Client_twiceØ   s    c          C` s‰  d d l  m }  t d d d t d d  ƒ K } t d „  | j Dƒ ƒ |  k sS t ‚ t d „  | j Dƒ ƒ sr t ‚ Wd  QXt d t d d d t d d  ƒ f } t d	 „  | j Dƒ ƒ |  k sÁ t ‚ t d
 „  | j Dƒ ƒ sà t ‚ t	 | j ƒ d k sû t ‚ Wd  QXt d d d d d t d d  ƒ a } |  d d k rGt
 d |  ƒ } n t
 d |  d ƒ } t d „  | j Dƒ ƒ | k st ‚ Wd  QXt d |  d d d d t d d  ƒ " } t	 | j ƒ d k sÈt ‚ Wd  QXt d |  d d d d t d d  ƒ & } t d „  | j Dƒ ƒ st ‚ Wd  QXt d d d d d d d t d d  ƒ A } t	 | j ƒ d k s`t ‚ t d „  | j Dƒ ƒ st ‚ Wd  QXd  S(   Ni    (   t   _ncoresR   R   R   c         s` s   |  ] } | j  Vq d  S(   N(   RJ   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>å   s    c         s` s   |  ] } t  | t ƒ Vq d  S(   N(   RI   R
   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>æ   s    R   c         s` s   |  ] } | j  Vq d  S(   N(   RJ   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>ë   s    c         s` s   |  ] } t  | t ƒ Vq d  S(   N(   RI   R	   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>ì   s    i   R1   i   c         s` s   |  ] } | j  Vq d  S(   N(   RJ   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>÷   s    RH   c         s` s   |  ] } | j  d  k Vq d S(   i   N(   RJ   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>  s    i   c         s` s   |  ] } | j  d  k Vq d S(   i   N(   RJ   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>  s    (   t   distributed.workerRv   R   R#   R$   t   sumR+   R)   RM   RL   t   max(   Rv   R,   t   expected_total_threads(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_defaultsÞ   sT    %%%!+
	!
	%	c          C` sf   t  d d d d d t d d  d d ƒ 9 }  g  |  j D] } | j ^ q4 d g d k s\ t ‚ Wd  QXd  S(	   NR1   i   R   i    R   R   t   memory_limitiô  (   R   R#   R$   R+   R|   R)   (   R,   R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_worker_params  s    	c          C` sw   t  d d d d d t d t d d  d d  ƒ D }  |  j d } t | j ƒ t k sX t ‚ | j d  k sm t ‚ Wd  QXd  S(	   NR1   i   R   i    R   R   R   R|   (	   R   R#   R$   R+   t   typeR   t   dictR)   R|   (   R,   R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_memory_limit_none  s    	c          C` s`   t  d d d d t d d  ƒ}  |  j j } |  j ƒ  t  d d | d t d d  ƒ} |  j ƒ  d  S(   Ni   R   i    R   R   (   R   R#   R$   R'   Rt   RB   (   R,   Rt   Rq   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_cleanup,  s    
c       	   C` sR   t  d d d d t d d  ƒ }  Wd  QXt  d d d d t d d  ƒ }  Wd  QXd  S(   Ni    R   i !  R   R   (   R   R#   R$   (   R,   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_repeated6  s    R   c         C` s  t  j d ƒ t  j d ƒ } t d d d d d t d |  d | d	 d ƒ › } | j j d j } d
 | } t ƒ  } xI t r½ | j	 | ƒ } | j
 r— Pn  t ƒ  | d k  s° t ‚ t d ƒ qu W| j	 d | ƒ } | j
 sà t ‚ Wd  QXt  j | j ƒ  | j	 | d d ƒWd  QXd  S(   NRc   t   requestsR1   i    R   R   R   R   R   s   http://127.0.0.1:%d/status/i   g{®Gáz„?s   http://localhost:%d/status/t   timeoutgš™™™™™É?(   R4   Rj   R   R#   R'   Rm   Rt   R   RP   t   gett   okR)   R   R5   t   RequestException(   R   R   Rƒ   R,   t
   bokeh_portt   urlt   startt   response(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt
   test_bokehA  s.    	
			i   i   t   Unknownc         C` s:   t  d |  ƒ % } t | j ƒ  ƒ d k s0 t ‚ Wd  QXd  S(   NR   i    (   R   RL   RJ   R)   (   R   R,   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_blocks_until_full^  s    c          c` s  t  j ƒ  }  t d d d d t d t d d  d |  d t ƒV} t | d t ƒV} | j s` t ‚ | j	 d ƒ Vt
 | j ƒ d k s‰ t ‚ t
 | j j ƒ d k s§ t ‚ | j d j } | j | g ƒ Vt
 | j ƒ d	 k sã t ‚ | | j j k sû t ‚ | j ƒ  V| j ƒ  Vd  S(
   Ni    R   R   R   R   R   t   asynchronousi   i   (   R   t   currentR   R#   R$   RP   R   R+   R)   t   scale_upRL   R'   RJ   RN   t
   scale_downRB   (   R   RD   R,   t   addr(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_scale_up_and_downd  s(    
c          C` sy   d }  t  j t j d d |  g d t  j ƒ} | j ƒ  } y | sI t ‚ Wn( t k
 rt t d ƒ t | ƒ ‚  n Xd  S(   Nsº   if 1:
        from time import sleep
        from distributed import LocalCluster

        with LocalCluster(1, dashboard_address=None, scheduler_port=0):
            sleep(1.5)
        s   -Wis   -ct   stderrs   === Cluster stdout / stderr ===(   t
   subprocesst   check_outputt   syst
   executablet   STDOUTt   decodeR)   t   print(   t   codet   out(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_silent_startup‚  s    !

c      
   C` sG   t  d d d d t d d  d |  ƒ } t |  t | j j ƒ Wd  QXd  S(   Ni    R   R   R   R   (   R   R#   R$   R   R   R'   Rt   (   R   R,   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_only_local_access—  s    !c         C` sM   t  d d d d t d d  d d d |  ƒ } t |  t | j j ƒ Wd  QXd  S(   Ni    R   R   R   t   ipR3   R   (   R   R#   R$   R   R   R'   Rt   (   R   R,   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_remote_accessž  s    	R1   c         C` s_   t  d | d d d t d t d d  d |  ƒ , } t d „  | j Dƒ ƒ t k sU t ‚ Wd  QXd  S(	   NR1   R   i    R   R   R   R   c         s` s   |  ] } | j  Vq d  S(   N(   R|   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>´  s    (   R   R#   R$   Rx   R+   R   R)   (   R   R1   RD   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_memoryª  s    	c         C` s   t  d | d d d t d t d d  d |  ƒ ] } t | j d |  ƒ? } | j ƒ  } t d „  | d	 j ƒ  Dƒ ƒ t	 k s€ t
 ‚ Wd  QXWd  QXd  S(
   NR1   R   i    R   R   R   R   c         s` s   |  ] } | d  Vq d S(   R|   N(    (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>Ä  s    R+   (   R   RP   R#   R$   R   R>   t   scheduler_infoRx   RQ   R   R)   (   R   R1   RD   R,   Rp   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_memory_nanny·  s    	c         C` sM   t  j t j ƒ 5 t d d d t d d d d  d |  ƒ  } Wd  QXWd  QXd  S(   NR   i    R   t   death_timeoutg»½×Ùß|Û=R   R   (   R4   R5   R   t   TimeoutErrorR   R#   R$   (   R   RD   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_death_timeout_raisesÈ  s    	c         C` sz   t  j d ƒ t d d d d d t d |  d d d i i d	 d
 6d 6ƒ , } | j j d } | j d	 k sp t ‚ Wd  QXd  S(   NRc   R1   i    R   R   R   R   t   service_kwargss   /foot   prefix(   R4   Rj   R   R#   R'   Rm   Rª   R)   (   R   R,   t   bs(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_bokeh_kwargsÔ  s    c         C` s¯   t  d |  d t ƒ ” } | j j |  k s0 t ‚ x/ | j j j ƒ  D] } | j |  k sC t ‚ qC Wx@ | j D]5 } x, | j j ƒ  D] } | j |  k s‚ t ‚ q‚ Wql WWd  QXd  S(   NR   R   (	   R   R#   R'   R   R)   t   periodic_callbacksRQ   t   io_loopR+   (   R   RD   t   pct   worker(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_io_loop_periodic_callbacksä  s    c          C` sS   t  d d t d d ƒ5 }  |  j j j s0 t ‚ |  j d j j sI t ‚ Wd QXd S(   s<   
    Workers and scheduler have logs even when silenced
    i   R   R   i    N(   R   R#   R$   R'   t   _deque_handlert   dequeR)   R+   (   R,   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_loggingî  s    c         C` st   t  j d ƒ } t d d d d d t d |  d t d t ƒ 2 } | j ƒ  | j } t | | j ƒ sj t ‚ Wd  QXd  S(	   Nt
   ipywidgetsR1   i    R   R   R   R   R   (	   R4   Rj   R   R#   t   _ipython_display_t   _cached_widgetRI   t   WidgetR)   (   R   Rµ   RD   t   box(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_ipywidgets÷  s    	
	c         C` s+  t  d d d t d |  d t d t d d ƒ ø } | j j sC t ‚ | j d ƒ t ƒ  } xQ t | j j ƒ d k r¬ t d	 ƒ t ƒ  | d
 k  s\ t t | j j ƒ ƒ ‚ q\ Wt d ƒ | j d ƒ t ƒ  } xQ t | j j ƒ d k r t d	 ƒ t ƒ  | d
 k  sÐ t t | j j ƒ ƒ ‚ qÐ WWd QXd S(   s;    Directly calling scale both up and down works as expected R   i    R   R   R   R   R1   i   g{®Gáz„?i   gš™™™™™É?i   N(	   R   R#   R'   R+   R)   t   scaleR   RL   R   (   R   RD   RŠ   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt
   test_scale  s(    		
/
	
c         C` s!  t  d d d t d |  d t d t d d ƒ î } | j d d d	 d
 d d ƒ | j j d k sd t ‚ | j j d
 k s| t ‚ t j | j ƒ } | j d d d	 d
 d d ƒ | j j d k sÂ t ‚ t	 j
 ƒ  t ƒ  } x? t | j j ƒ d k rt d ƒ t ƒ  | d k  sØ t ‚ qØ WWd  QXd  S(   NR   i    R   R   R   R   R1   t   minimumt   maximumi   t   intervalt   10msi   g{®Gáz„?i   (   R   R#   t   adaptt	   _adaptiveR½   R)   R¾   t   weakreft   reft   gct   collectR   RL   R'   R+   R   (   R   RD   RÄ   RŠ   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt
   test_adapt"  s&    	
		
c         C` sd  t  d d d t d |  d t d t d d ƒ 1} t d	 ƒ | j d
 d d d d d ƒ t ƒ  } x< | j j sw | j r t d	 ƒ t ƒ  | d k  sb t ‚ qb W| j s® t ‚ t | ƒ ž } | j	 t
 t d ƒ d d	 ƒ} t d ƒ | j j ƒ  t d ƒ | j d ƒ t ƒ  } x? t | j j ƒ d k rSt d	 ƒ t ƒ  | d k  st ‚ qWWd QXWd QXd S(   s-    We can revert from adaptive, back to manual R   i    R   R   R   R   R1   i   gš™™™™™¹?R½   R¾   i   R¿   RÀ   i   iè  t   delaygš™™™™™É?i   N(   R   R#   R   RÁ   R   R'   R+   R)   R   R?   R   R@   RÂ   t   stopR»   RL   (   R   RD   RŠ   R:   t   futures(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_adapt_then_manualA  s2    	
	


	
c         C` s¼   d d l  m } | ƒ  } t d d d d d t d | d t d	 d
 d |  ƒ j } t |  t | j j d | j d ƒ d d d d ƒt |  t	 d d | j j d | j d ƒ d t
 ƒWd  QXd  S(   Ni    (   t   tls_only_securityR1   R   iR"  R   t   securityR   R¡   s   tls://0.0.0.0R   t   connection_argsR:   t   protocolt   tlsR„   i   R“   s   tcp://127.0.0.1:%dt   exception_class(   t   distributed.utils_testRÌ   R   R#   R   R   R'   Rt   t   get_connection_argsR   t   RuntimeError(   R   RÌ   RÍ   R,   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_local_tlse  s0    		c          c` sJ  d t  f d „  ƒ  Y}  t j ƒ  } |  d d d d t d t d d  d | d	 t ƒV} t | d	 t ƒV} | j sv t ‚ | j	 d
 ƒ Vt
 ƒ  } xC t | j j ƒ d
 k rÒ t j d ƒ Vt
 ƒ  | d k  s t ‚ q W| j	 d ƒ Vt
 ƒ  } xC t | j j ƒ d k r/t j d ƒ Vt
 ƒ  | d k  sí t ‚ qí W| j ƒ  V| j ƒ  Vd  S(   Nt	   MyClusterc           B` s   e  Z d  „  Z RS(   c         _` s   d  S(   N(    (   t   selft   argsR^   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyR’   ˆ  s    (   R[   R\   R’   (    (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyRÖ   ‡  s   i    R   R   R   R   R   R   i   g{®Gáz„?i   i   (   R   R   R   R#   R$   RP   R   R+   R)   R»   R   RL   R'   R   R   RB   (   RÖ   R   RD   R,   RŠ   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_scale_retires_workers…  s0    
		c         C` s*  d d l  m } | ƒ  } t d d d d d t d | d	 t d
 d d |  ƒ Ø } t | j j d |  d | ƒ± } t | j | j d j ƒ t	 | j
 ƒ  d ƒ } | j t d ƒ j ƒ  d k sÄ t ‚ | j ƒ  t	 | j
 ƒ  d ƒ } | j t d ƒ j ƒ  d k st ‚ | | k st ‚ Wd  QXWd  QXd  S(   Ni    (   RÌ   R1   i   R   iR"  R   RÍ   R   R¡   s   tls://0.0.0.0R   R+   i   i   (   RÒ   RÌ   R   R#   R   R'   RN   Rœ   R+   t   setR¤   R%   R   R&   R)   t   restart(   R   RÌ   RÍ   R,   R:   t   workers_beforet   workers_after(    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_local_tls_restart«  s&    		!$
$c           C` s  t  d ƒ d k s t ‚ t  d ƒ d k s0 t ‚ t  d ƒ d k sH t ‚ t  d ƒ d k s` t ‚ t  d ƒ d d f k s~ t ‚ t  d	 ƒ d k s– t ‚ t  d
 ƒ d d f k s´ t ‚ t  d ƒ d k sÌ t ‚ t  d ƒ d d f k sê t ‚ t  d ƒ d d f k st ‚ d  S(   Ni   i   i   i   i   i   i   i   i   i   i    i(   i
   iP   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i
   i   (   i
   i   (   i   i   (   R   R)   (    (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt%   test_default_process_thread_breakdownÂ  s    c         ` s\   t  d d d d t d t d d  d |  ƒ, ‰  t j ‡  f d †  ƒ } ˆ  j | ƒ Wd  QXd  S(	   Ni   R   i    R   R   R   R   c           ` s   ˆ  j  s t ‚ d  S(   N(   R   R)   (    (   RD   (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   _Ù  s    (   R   R#   R$   R   t	   coroutineR   (   R   Rà   (    (   RD   sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_asynchronous_propertyÏ  s    	c         C` sC   t  d d d |  d t ƒ " } | j j j d ƒ s9 t ‚ Wd  QXd  S(   NRÏ   s	   inproc://R   R   (   R   R#   R'   RN   RT   R)   (   R   RD   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_protocol_inprocà  s    c      	   C` sI   t  d d d |  d d d t ƒ " } | j j j d ƒ s? t ‚ Wd  QXd  S(   NRÏ   t   tcpR   R1   i    R   s   tcp://(   R   R#   R'   RN   RT   R)   (   R   RD   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_protocol_tcpå  s    t   linuxs    Need 127.0.0.2 to mean localhostc      	   C` sI   t  d d d |  d d d t ƒ " } | j j j d ƒ s? t ‚ Wd  QXd  S(   NR¡   s   tcp://127.0.0.2R   R1   i    R   (   R   R#   R'   RN   RT   R)   (   R   RD   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_protocol_ipì  s    t   MyWorkerc           B` s   e  Z RS(    (   R[   R\   (    (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyRè   ö  s   c         C` sY   t  d d d |  d t d t d d d d  ƒ & } t d	 „  | j Dƒ ƒ sO t ‚ Wd  QXd  S(
   NR1   i   R   t   worker_classR   R   i    R   c         s` s   |  ] } t  | t ƒ Vq d  S(   N(   RI   Rè   (   R    R!   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>  s    (   R   Rè   R#   R$   RM   R+   R)   (   R   RD   (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_worker_class_workerú  s    	c         ` so   d t  f d „  ƒ  Y‰  t d d d |  d ˆ  d d d	 d  ƒ , } t ‡  f d
 †  | j Dƒ ƒ se t ‚ Wd  QXd  S(   Nt   MyNannyc           B` s   e  Z RS(    (   R[   R\   (    (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyRë     s   R1   i   R   Ré   R   i    R   c         3` s   |  ] } t  | ˆ  ƒ Vq d  S(   N(   RI   (   R    R!   (   Rë   (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pys	   <genexpr>  s    (   R
   R   R$   RM   R+   R)   (   R   RD   (    (   Rë   sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   test_worker_class_nanny  s    	i   (   t   *(   i   i   (   i   i   (   i   i   (c   t
   __future__R    R   R   t	   functoolsR   RÅ   R–   R˜   R   R   t	   threadingR   t   unittestRÃ   t   tornado.ioloopR   t   tornadoR   R4   t   distributedR   R	   R
   t   distributed.deploy.localR   R   t   distributed.metricsRÒ   R   R   R   R   R   R   R   R   R   t   distributed.utilsR   Rw   R   t   distributed.deploy.utils_testR   R.   R<   t   markt   skipifRG   RS   RX   RY   t   TestCaseRZ   R_   Rb   Rr   Rs   Ru   R{   R}   R€   R   R‚   t   parametrizeRP   R#   RŒ   t   version_infoRŽ   R”   RŸ   R    R¢   R$   R£   R¥   R¨   R¬   R±   R´   Rº   R¼   RÇ   RË   RÕ   RÙ   RÞ   Rß   Râ   Rã   Rå   t   platformRT   Rç   Rè   Rê   Rì   t(   distributed.deploy.tests.py3_test_deploy(    (    (    sB   lib/python2.7/site-packages/distributed/deploy/tests/test_local.pyt   <module>   s†   :
		!!#		$!
			!5			
	$*			$$	*	
						$	 &						%			