
\c           @` s   d  d l  m Z m Z 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 d   Z d e
 f d	     YZ d S(
   i    (   t   absolute_importt   divisiont   print_functionN(   t   default_timeri   (   t   Callback(   t   ignoringc         C` sj   t  |  d  \ } } t  | d  \ } } | rC d j | | |  S| rY d j | |  Sd j |  Sd S(   s   Format seconds into a human readable form.

    >>> format_time(10.4)
    '10.4s'
    >>> format_time(1000.4)
    '16min 40.4s'
    i<   s    {0:2.0f}hr {1:2.0f}min {2:4.1f}ss   {0:2.0f}min {1:4.1f}ss	   {0:4.1f}sN(   t   divmodt   format(   t   tt   mt   st   h(    (    s8   lib/python2.7/site-packages/dask/diagnostics/progress.pyt   format_time   s    t   ProgressBarc           B` sY   e  Z d  Z d d d d d  Z d   Z d   Z d   Z d   Z d	   Z	 d
   Z
 RS(   s  A progress bar for dask.

    Parameters
    ----------
    minimum : int, optional
        Minimum time threshold in seconds before displaying a progress bar.
        Default is 0 (always display)
    width : int, optional
        Width of the bar
    dt : float, optional
        Update resolution in seconds, default is 0.1 seconds

    Examples
    --------

    Below we create a progress bar with a minimum threshold of 1 second before
    displaying. For cheap computations nothing is shown:

    >>> with ProgressBar(minimum=1.0):      # doctest: +SKIP
    ...     out = some_fast_computation.compute()

    But for expensive computations a full progress bar is displayed:

    >>> with ProgressBar(minimum=1.0):      # doctest: +SKIP
    ...     out = some_slow_computation.compute()
    [########################################] | 100% Completed | 10.4 s

    The duration of the last computation is available as an attribute

    >>> pbar = ProgressBar()
    >>> with pbar:                          # doctest: +SKIP
    ...     out = some_computation.compute()
    [########################################] | 100% Completed | 10.4 s
    >>> pbar.last_duration                  # doctest: +SKIP
    10.4

    You can also register a progress bar so that it displays for all
    computations:

    >>> pbar = ProgressBar()                # doctest: +SKIP
    >>> pbar.register()                     # doctest: +SKIP
    >>> some_slow_computation.compute()     # doctest: +SKIP
    [########################################] | 100% Completed | 10.4 s
    i    i(   g?c         C` sI   | d  k r t j } n  | |  _ | |  _ | |  _ | |  _ d |  _ d  S(   Ni    (   t   Nonet   syst   stdoutt   _minimumt   _widtht   _dtt   _filet   last_duration(   t   selft   minimumt   widtht   dtt   out(    (    s8   lib/python2.7/site-packages/dask/diagnostics/progress.pyt   __init__L   s    				c         C` sS   d  |  _ t   |  _ t |  _ t j d |  j  |  _	 t |  j	 _
 |  j	 j   d  S(   Nt   target(   R   t   _stateR   t   _start_timet   Truet   _runningt	   threadingt   Threadt   _timer_funct   _timert   daemont   start(   R   t   dsk(    (    s8   lib/python2.7/site-packages/dask/diagnostics/progress.pyt   _startU   s    		c         C` s   | |  _  |  j j   d  S(   N(   R   R   t   flush(   R   t   keyR'   t   state(    (    s8   lib/python2.7/site-packages/dask/diagnostics/progress.pyt   _pretask^   s    	c         C` s   t  |  _ |  j j   t   |  j } | |  _ | |  j k  rB d  S| s[ |  j d |  n |  j	 |  |  j
 j d  |  j
 j   d  S(   Ni   s   
(   t   FalseR    R$   t   joinR   R   R   R   t	   _draw_bart   _update_barR   t   writeR)   (   R   R'   R+   t   erroredt   elapsed(    (    s8   lib/python2.7/site-packages/dask/diagnostics/progress.pyt   _finishb   s    		c         C` sS   xL |  j  rN t   |  j } | |  j k r; |  j |  n  t j |  j  q Wd S(   s/   Background thread for updating the progress barN(   R    R   R   R   R0   t   timet   sleepR   (   R   R3   (    (    s8   lib/python2.7/site-packages/dask/diagnostics/progress.pyR#   p   s
    c         ` s   |  j      s# |  j d |  d  St   d  } t   f d   d d d g D  | } |  j | rr | | n d |  d  S(   Ni    t   finishedc         3` s   |  ] } t    |  Vq d  S(   N(   t   len(   t   .0t   k(   R
   (    s8   lib/python2.7/site-packages/dask/diagnostics/progress.pys	   <genexpr>~   s    t   readyt   waitingt   running(   R   R/   R8   t   sum(   R   R3   t   ndonet   ntasks(    (   R
   s8   lib/python2.7/site-packages/dask/diagnostics/progress.pyR0   x   s    	)c         C` s   d t  |  j |  } t  d |  } t |  } d j | |  j | |  } t t  " |  j j |  |  j j   Wd  QXd  S(   Nt   #id   s"   [{0:<{1}}] | {2}% Completed | {3}(	   t   intR   R   R   R   t
   ValueErrorR   R1   R)   (   R   t   fracR3   t   bart   percentt   msg(    (    s8   lib/python2.7/site-packages/dask/diagnostics/progress.pyR/      s    N(   t   __name__t
   __module__t   __doc__R   R   R(   R,   R4   R#   R0   R/   (    (    (    s8   lib/python2.7/site-packages/dask/diagnostics/progress.pyR      s   ,								(   t
   __future__R    R   R   R   R!   R5   t   timeitR   t	   callbacksR   t   utilsR   R   R   (    (    (    s8   lib/python2.7/site-packages/dask/diagnostics/progress.pyt   <module>   s   	