ó
ßüÚ\c           @` 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 d  d l m Z d d l m Z m Z m Z d	 d
 l m 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# e j$ e% ƒ Z& d „  Z' d e( f d „  ƒ  YZ) d e) f d „  ƒ  YZ* d e) f d „  ƒ  YZ+ d e( f d „  ƒ  YZ, d e, f d „  ƒ  YZ- d „  Z d S(   i    (   t   print_functiont   divisiont   absolute_importN(   t   default_timer(   t   valmap(   t   gen(   t   IOLoopi   (   t   format_timet   Progresst   MultiProgressi   (   t   html_escape(   t   connectt   coerce_to_addresst   CommClosedError(   t   default_clientt
   futures_of(   t   dumps(   t   ignoringt	   key_splitt	   is_kernelt
   LoopRunnert   parse_timedeltac         C` s#   |  d  k r t ƒ  j j St |  ƒ S(   N(   t   NoneR   t	   schedulert   addressR   (   R   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyt   get_scheduler   s    t   ProgressBarc           B` sM   e  Z d d  e d „ Z e d „  ƒ Z e j d „  ƒ Z	 d „  Z
 d „  Z RS(   t   100msc         C` s’   t  | ƒ |  _ d  |  _ x6 | D]. } t | d ƒ r t j | j ƒ |  _ Pq q Wd „  | Dƒ |  _ t | d d ƒ|  _	 | |  _
 t ƒ  |  _ d  S(   Nt   clientc         S` s.   h  |  ]$ } t  | d  ƒ r$ | j n | ’ q S(   t   key(   t   hasattrR   (   t   .0t   k(    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pys	   <setcomp>(   s   	 t   defaultt   s(   R   R   R   R   R   t   weakreft   reft   keysR   t   intervalt   completeR   t   _start_time(   t   selfR%   R   R&   R'   R   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyt   __init__   s    		c         C` s   t  ƒ  |  j S(   N(   R   R(   (   R)   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyt   elapsed-   s    c         #` s…  |  j  ‰  |  j ‰ t j ‡  ‡ f d †  ƒ } d „  } t |  j d |  j rZ |  j ƒ  j n d  ƒV|  _	 t
 j d ƒ |  j	 j i d d 6t | ƒ d 6t | ƒ d 6|  j d	 6d
 |  j rÆ |  j ƒ  j n d  ƒVx£ t rsy2 |  j	 j d |  j rþ |  j ƒ  j n d  ƒ V} Wn t k
 rPn X| |  _ | d |  _ |  j |   | d d k rÑ |  j	 j ƒ  V|  j |   PqÑ qÑ Wt
 j d ƒ d  S(   Nc         3` s3   t  ˆ |  d ˆ  ƒ} | j ƒ  Vt j | ƒ ‚ d  S(   NR'   (   R   t   setupR   t   Return(   R   t   p(   R'   R%   (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR,   6   s    c         S` sV   i t  | j ƒ d 6t  | j ƒ d 6| j d 6} | j d k rR | j | j ƒ n  | S(   Nt   allt	   remainingt   statust   error(   t   lent   all_keysR%   R1   t   updatet   extra(   R   R.   t   result(    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyt   function<   s    t   connection_argss"   Progressbar Connected to schedulert   feedt   opR,   R8   R&   t   serializerst   deserializersR1   R2   t   finisheds'   Progressbar disconnected from scheduler(   R2   R>   (   R'   R%   R   t	   coroutineR   R   R   R9   R   t   commt   loggert   debugt   writeR   R&   t   _serializerst   Truet   readt   _deserializersR   t   _last_responseR1   t	   _draw_bart   closet
   _draw_stop(   R)   R,   R8   t   response(    (   R'   R%   sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyt   listen1   s:    			
	%	 	&	c         K` s   d  S(   N(    (   R)   t   kwargs(    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRK   g   s    c         C` s$   t  t ƒ  |  j j ƒ  Wd  QXd  S(   N(   R   t   AttributeErrorR@   t   abort(   R)   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyt   __del__j   s    N(   t   __name__t
   __module__R   RE   R*   t   propertyR+   R   R?   RM   RK   RQ   (    (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR      s
   6	t   TextProgressBarc           B` s5   e  Z d d  d d e e d „ Z d „  Z d „  Z RS(   R   i(   c   	      C` sf   t  t |  ƒ j | | | | ƒ | |  _ | p4 t ƒ  |  _ | rb t |  j ƒ } | j |  j ƒ n  d  S(   N(	   t   superRU   R*   t   widthR   t   loopR   t   run_syncRM   (	   R)   R%   R   R&   RW   RX   R'   t   startt   loop_runner(    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR*   p   s    
	c   	      K` sŸ   | r d | | n d } d t  |  j | ƒ } t  d | ƒ } t |  j ƒ } d j | |  j | | ƒ } t t ƒ " t j j	 | ƒ t j j
 ƒ  Wd  QXd  S(   Ni   g      ð?t   #id   s"   [{0:<{1}}] | {2}% Completed | {3}(   t   intRW   R   R+   t   formatR   t
   ValueErrort   syst   stdoutRC   t   flush(	   R)   R0   R/   RN   t   fract   bart   percentR+   t   msg(    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRI   ‚   s    c         K` s!   t  j j d ƒ t  j j ƒ  d  S(   Ns   (   R`   Ra   RC   Rb   (   R)   RN   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRK   Ž   s    N(   RR   RS   R   RE   R*   RI   RK   (    (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRU   o   s   
	t   ProgressWidgetc           B` sA   e  Z d  Z d d e d d „ Z d „  Z d d „ Z d „  Z RS(   s¼    ProgressBar that uses an IPython ProgressBar widget for the notebook

    See Also
    --------
    progress: User function
    TextProgressBar: Text version suitable for the console
    R   c   
      C` s·   t  t |  ƒ j | | | | ƒ d d l m } m } m } m }	 |	 d ƒ |  _ | d d d d d d ƒ |  _	 |	 d ƒ |  _
 | |  j
 |  j	 g ƒ |  _ | |  j |  j g ƒ |  _ d  S(   Ni    (   t   FloatProgresst   HBoxt   VBoxt   HTMLt    t   mint   maxi   t   description(   RV   Rg   R*   t
   ipywidgetsRh   Ri   Rj   Rk   t   elapsed_timeRd   t   bar_textt
   bar_widgett   widget(
   R)   R%   R   R&   R'   RX   Rh   Ri   Rj   Rk   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR*   œ   s    "c         K` s&   t  j ƒ  j |  j ƒ |  j j |   S(   N(   R   t   currentt   add_callbackRM   Rt   t   _ipython_display_(   R)   RN   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRw   ª   s    c         K` s€   | d k rJ d |  j  _ d t | ƒ d t |  j ƒ d d |  j _ n2 | s| d |  j  _ d t |  j ƒ d |  j _ n  d  S(	   NR2   t   dangers=   <div style="padding: 0px 10px 5px 10px"><b>Exception</b> <tt>s   </tt>:t    s   </div>t   successs9   <div style="padding: 0px 10px 5px 10px"><b>Finished:</b> (   Rd   t	   bar_stylet   reprR   R+   Rq   t   value(   R)   R0   R1   t	   exceptionRN   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRK   ®   s    2c         K` s]   | | } d t  |  j ƒ d |  j _ | r7 | | n d |  j _ d | | f |  j _ d  S(   Ns:   <div style="padding: 0px 10px 5px 10px"><b>Computing:</b> s   </div>g      ð?sH   <div style="padding: 0px 10px 0px 10px; text-align:right;">%d / %d</div>(   R   R+   Rq   R}   Rd   Rr   (   R)   R0   R/   RN   t   ndone(    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRI   Â   s
    
N(	   RR   RS   t   __doc__R   t   FalseR*   Rw   RK   RI   (    (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRg   “   s
   	t   MultiProgressBarc           B` sP   e  Z d e d  e d „ Z e d „  ƒ Z e j	 d „  ƒ Z
 d „  Z d „  Z RS(   R   c         C` s   t  | ƒ |  _ d  |  _ x6 | D]. } t | d ƒ r t j | j ƒ |  _ Pq q Wd „  | Dƒ |  _ | |  _ | |  _	 | |  _
 t ƒ  |  _ d  S(   NR   c         S` s.   h  |  ]$ } t  | d  ƒ r$ | j n | ’ q S(   R   (   R   R   (   R   R    (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pys	   <setcomp>Ü   s   	 (   R   R   R   R   R   R#   R$   R%   t   funcR&   R'   R   R(   (   R)   R%   R   Rƒ   R&   R'   R   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR*   Ñ   s    				c         C` s   t  ƒ  |  j S(   N(   R   R(   (   R)   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR+   â   s    c         #` sZ  |  j  ‰  |  j ‰ |  j ‰ t j ‡  ‡ ‡ f d †  ƒ } d „  } t |  j d |  j rf |  j ƒ  j n d  ƒV|  _
 t j d ƒ |  j
 j i d d 6t | ƒ d 6t | ƒ d 6|  j d	 6ƒ VxŠ t rH|  j
 j d
 |  j ré |  j ƒ  j n d  ƒ V} | |  _ | d |  _ |  j |   | d d k r¿ |  j
 j ƒ  V|  j |   Pq¿ q¿ Wt j d ƒ d  S(   Nc         3` s9   t  ˆ |  d ˆ  d ˆ ƒ} | j ƒ  Vt j | ƒ ‚ d  S(   NR'   Rƒ   (   R	   R,   R   R-   (   R   R.   (   R'   Rƒ   R%   (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR,   ì   s    c         S` s\   i t  t | j ƒ d 6t  t | j ƒ d 6| j d 6} | j d k rX | j | j ƒ n  | S(   NR/   R0   R1   R2   (   R   R3   R4   R%   R1   R5   R6   (   R   R.   R7   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR8   ò   s    R9   s"   Progressbar Connected to schedulerR:   R;   R,   R8   R&   R=   R1   R2   R>   s'   Progressbar disconnected from scheduler(   R2   R>   (   R'   R%   Rƒ   R   R?   R   R   R   R9   R   R@   RA   RB   RC   R   R&   RE   RF   RG   RH   R1   RI   RJ   RK   (   R)   R,   R8   RL   (    (   R'   Rƒ   R%   sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRM   æ   s4    				
	%		"	c         K` s   d  S(   N(    (   R)   RN   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRK     s    c         C` s$   t  t ƒ  |  j j ƒ  Wd  QXd  S(   N(   R   RO   R@   RP   (   R)   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRQ     s    N(   RR   RS   R   R   R   R*   RT   R+   R   R?   RM   RK   RQ   (    (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR‚   Ð   s
   2	t   MultiProgressWidgetc           B` sP   e  Z d  Z d d d e e d „ Z d „  Z d „  Z d d d „ Z	 d „  Z
 RS(	   sU   Multiple progress bar Widget suitable for the notebook

    Displays multiple progress bars for a computation, split on computation
    type.

    See Also
    --------
    progress: User-level function <--- use this
    MultiProgress: Non-visualization component that contains most logic
    ProgressWidget: Single progress bar widget
    i    gš™™™™™¹?c         C` sE   t  t |  ƒ j | | | | | ƒ d d l m } | g  ƒ |  _ d  S(   Ni    (   Rj   (   RV   R„   R*   Rp   Rj   Rt   (   R)   R%   R   t   minimumR&   Rƒ   R'   Rj   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR*   -  s    	c   	      ` s  d d l  m ‰  m } m } m ‰ ˆ d ƒ |  _ ‡  f d †  | Dƒ |  _ ‡ f d †  | Dƒ |  _ ‡ f d †  | Dƒ |  _ d „  } g  t	 | j
 ƒ  d | d	 t ƒD] \ } } | ^ q¤ } | g  | D]0 } | |  j | |  j | |  j | g ƒ ^ qÆ ƒ |  _ |  j |  j f |  j _ d  S(
   Ni    (   Rh   Ri   Rj   Rk   Rl   c      	   ` s.   i  |  ]$ } ˆ  d  d d d d d ƒ | “ q S(   Rm   i    Rn   i   Ro   Rl   (    (   R   R   (   Rh   (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pys
   <dictcomp>A  s   	 c         ` s   i  |  ] } ˆ  d  ƒ | “ q S(   Rl   (    (   R   R   (   Rk   (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pys
   <dictcomp>B  s   	 c         ` sH   i  |  ]> } ˆ  d  t  t | t ƒ r0 | j ƒ  n | ƒ d ƒ | “ q S(   sQ   <div style="padding: 0px 10px 0px 10px; text-align:left; word-wrap: break-word;">s   </div>(   R
   t
   isinstancet   bytest   decode(   R   R   (   Rk   (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pys
   <dictcomp>D  s   	c         S` s   |  d d d … S(   s2    Order keys by most numerous, then by string name Niÿÿÿÿ(    (   t   kv(    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyt   keyfuncN  s    R   t   reverse(   Rp   Rh   Ri   Rj   Rk   Rq   t   barst	   bar_textst
   bar_labelst   sortedt   itemsRE   t   bar_widgetsRt   t   children(	   R)   R/   Ri   Rj   RŠ   R    t   vt	   key_orderR   (    (   Rh   Rk   sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyt   make_widget=  s    "	7@c         K` s&   t  j ƒ  j |  j ƒ |  j j |   S(   N(   R   Ru   Rv   RM   Rt   Rw   (   R)   RN   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRw   \  s    c         K` s©   xC | j  ƒ  D]5 \ } } | s2 d |  j | _ q d |  j | _ q W| d k rˆ d d t | ƒ d t |  j ƒ d d |  j _ n d	 t |  j ƒ d |  j _ d  S(
   NRz   Rx   R2   s9   <div style="padding: 0px 10px 5px 10px"><b>Exception</b> s   <tt>s   </tt>:Ry   s   </div>s9   <div style="padding: 0px 10px 5px 10px"><b>Finished:</b> (   R   RŒ   R{   R|   R   R+   Rq   R}   (   R)   R0   R1   R~   R   RN   R    R“   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRK   `  s    	6c         K` s¬   |  j  r& |  j j r& |  j | ƒ n  x | j ƒ  D]q \ } } | | | } d t |  j ƒ d |  j _ | rz | | n d |  j	 | _ d | | f |  j
 | _ q3 Wd  S(   Ns:   <div style="padding: 0px 10px 5px 10px"><b>Computing:</b> s   </div>g      ð?sH   <div style="padding: 0px 10px 0px 10px; text-align: right">%d / %d</div>(   R%   Rt   R’   R•   R   R   R+   Rq   R}   RŒ   R   (   R)   R0   R/   R1   RN   R    t   ntasksR   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyRI   y  s     N(   RR   RS   R€   R   R   R   R*   R•   Rw   RK   RI   (    (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyR„      s   			c          O` sÓ   | j  d d ƒ } | j  d t ƒ } | j  d t ƒ } | sC t ‚ t |  ƒ }  t |  t t f ƒ sp |  g }  n  | d k rˆ t ƒ  } n  | r¿ | r© t	 |  d | ƒ} n t
 |  d | ƒ} | St |  d | ƒd S(   sÅ   Track progress of futures

    This operates differently in the notebook and the console

    *  Notebook:  This returns immediately, leaving an IPython widget on screen
    *  Console:  This blocks until the computation completes

    Parameters
    ----------
    futures: Futures
        A list of futures or keys to track
    notebook: bool (optional)
        Running in the notebook or not (defaults to guess)
    multi: bool (optional)
        Track different functions independently (defaults to True)
    complete: bool (optional)
        Track all keys (True) or only keys that have not yet run (False)
        (defaults to True)

    Notes
    -----
    In the notebook, the output of `progress` must be the last statement
    in the cell. Typically, this means calling `progress` at the end of a
    cell.

    Examples
    --------
    >>> progress(futures)  # doctest: +SKIP
    [########################################] | 100% Completed |  1.7s
    t   notebookt   multiR'   N(   t   popR   RE   t   AssertionErrorR   R†   t   sett   listR   R„   Rg   RU   (   t   futuresRN   R—   R˜   R'   Rd   (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyt   progressŠ  s    (.   t
   __future__R    R   R   t   loggingt   timeitR   R`   R#   t   toolzR   t   tornadoR   t   tornado.ioloopR   Rž   R   R   R	   t   compatibilityR
   t   coreR   R   R   R   R   R   t   protocol.pickleR   t   utilsR   R   R   R   R   t	   getLoggerRR   RA   R   t   objectR   RU   Rg   R‚   R„   (    (    (    sB   lib/python2.7/site-packages/distributed/diagnostics/progressbar.pyt   <module>   s*   (	Q$=Pj