
    0Fie=                       d dl mZ d dlZd dl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 dlmZ d dlmZ d dlZd dlmZ d d	lmZmZ d d
lmZmZmZmZ d dlmZmZmZ d dl m!Z! d dl"m#Z#m$Z$  ej%        e&          Z'd Z( G d d          Z) G d de)          Z* G d de)          Z+ G d d          Z, G d de,          Z-ddddddZ.dS )    )annotationsN)suppress)default_timer)Callable)valmap)IOLoop)	key_split)default_client
futures_of)CommClosedErrorclean_exceptioncoerce_to_addressconnect)MultiProgressProgressformat_time)dumps)
LoopRunner	is_kernelc                T    | t                      j        j        S t          |           S N)r
   	scheduleraddressr   )r   s    Clib/python3.11/site-packages/distributed/diagnostics/progressbar.pyget_schedulerr       s(    )11Y'''    c                  >    e Zd Zd	dZed             Zd Zd Zd ZdS )
ProgressBarN100msTc                H   t          |          | _        d | _        |D ]2}t          |d          r t	          j        |j                  | _         n3d |D             | _        t          j        	                    |d          | _
        || _        t                      | _        d S )Nclientc                @    h | ]}t          |d           r|j        n|S keyhasattrr$   .0ks     r   	<setcomp>z'ProgressBar.__init__.<locals>.<setcomp>0   -    EEE1ga//6QUUQEEEr   s)default)r   r   r!   r&   weakrefrefkeysdaskutilsparse_timedeltaintervalcompleter   _start_time)selfr0   r   r4   r5   r$   s         r   __init__zProgressBar.__init__'   s    &y11 	 	CsH%% %k#*55 FEEEE	
228S2II (??r   c                .    t                      | j        z
  S r   r   r6   r7   s    r   elapsedzProgressBar.elapsed5       !111r   c                D  K   | j         | j        fd}d }t          | j        fi | j        r|                                 j        ni  d {V | _        t                              d           | j        	                    dt          |          t          |          | j        d| j        r|                                 j        nd            d {V  	 	 | j                            | j        r|                                 j        nd            d {V }n# t          $ r Y n]w xY w|| _        |d	         | _         | j        di | |d	         d
v r-| j                                         d {V   | j        di | nt                              d           d S )Nc                d   K   t          |           }|                                 d {V  |S )N)r5   )r   setup)r   pr5   r0   s     r   r@   z!ProgressBar.listen.<locals>.setup=   s9      y8<<<A''))OOOOOOOHr   c                    t          |j                  t          |j                  |j        d}|j        dk    r|                    |j                   |S N)all	remainingstatuserror)lenall_keysr0   rF   updateextrar   rA   results      r   functionz$ProgressBar.listen.<locals>.functionB   sQ    1: [[( F
 x7""ag&&&Mr   "Progressbar Connected to schedulerfeedopr@   rN   r4   )serializersTdeserializersrF   rG   finished'Progressbar disconnected from scheduler )r5   r0   r   r   r!   connection_argscommloggerdebugwriter   r4   _serializersread_deserializersr   _last_responserF   	_draw_barclose
_draw_stop)r7   r@   rN   responser5   r0   s       @@r   listenzProgressBar.listen9   sK     =y	 	 	 	 	 	
	 	 	 "N
 
@DSt{{}}<<QS
 
 
 
 
 
 
 
	 	9:::ioou!(OO M	  7;kK22t  
 
 	
 	
 	
 	
 	
 	
 	
	!%BF+"W$++--">">SW "0 " "       #   "*D"8,DKDN&&X&&&!%:::ioo'''''''''++(+++	 	>?????s   AD 
D*)D*c                    d S r   rY   r7   kwargss     r   re   zProgressBar._draw_stopl       r   c                    t          t                    5  | j                                         d d d            d S # 1 swxY w Y   d S r   r   AttributeErrorr[   abortr;   s    r   __del__zProgressBar.__del__o       n%% 	 	IOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   <A A )Nr   T	__name__
__module____qualname__r8   propertyr<   rg   re   rp   rY   r   r   r   r   &   st        + + + + 2 2 X21@ 1@ 1@f      r   r   c                       e Zd ZU dZded<   	 	 	 	 	 	 d fd	Zedd	            Zej        dd            Zd Z	d Z
 xZS )TextProgressBarNIOLoop | None_TextProgressBar__loopr   (   Tc                    t          |          x| _        }	t                                          ||||           || _        |r|	                    | j                   d S d S )N)loop)r   _loop_runnersuperr8   widthrun_syncrg   )r7   r0   r   r4   r   r~   r5   startrj   loop_runner	__class__s             r   r8   zTextProgressBar.__init__w   sp     +5$*?*?*??Ky(H===
 	.  -----	. 	.r   returnc                >    | j         }|| j        j        x| _         }|S r   )r{   r   r~   )r7   r~   s     r   r~   zTextProgressBar.loop   s'    {<
 "&!2!77DK$r   valuer   Nonec                L    t          j        dt          d           || _        d S )Nz'setting the loop property is deprecated   )
stacklevel)warningswarnDeprecationWarningr{   )r7   r   s     r   r~   zTextProgressBar.loop   s1    57IVW	
 	
 	
 	
 r   c                   |rd||z  z
  nd}dt          | j        |z            z  }t          d|z            }t          | j                  }d                    || j        ||          }t          t                    5  t          j        	                    |           t          j        
                                 d d d            d S # 1 swxY w Y   d S )N         ?#d   z"[{0:<{1}}] | {2}% Completed | {3})intr   r   r<   formatr   
ValueErrorsysstdoutr^   flush)	r7   rE   rD   rj   fracbarpercentr<   msgs	            r   rc   zTextProgressBar._draw_bar   s   (+4IO##C
T)***cDj//dl++3::Wg
 
 j!! 	 	JS!!!J	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   >>C		CCc                    t           j                            d           t           j                                         d S )Nz[2K)r   r   r^   r   ri   s     r   re   zTextProgressBar._draw_stop   s2    
$$$
r   )Nr   r|   NTT)r   rz   )r   r   r   r   )rt   ru   rv   r{   __annotations__r8   rw   r~   setterrc   re   __classcell__r   s   @r   ry   ry   t   s          F    
 . . . . . .$    X 
[   [
 
 
      r   ry   c                  @     e Zd ZdZ	 	 	 	 d	 fd	Zd Zd
dZd Z xZS )ProgressWidgetzProgressBar that uses an IPython ProgressBar widget for the notebook

    See Also
    --------
    progress: User function
    TextProgressBar: Text version suitable for the console
    Nr   Fc                >   t                                          ||||           ddlm}m}m}	m}
  |d          | _         |ddd          | _         |d          | _	         |	| j	        | j        g          | _
         |
| j        | j
        g          | _        d S )Nr   HTMLFloatProgressHBoxVBox r   minmaxdescription)r   r8   
ipywidgetsr   r   r   r   elapsed_timer   bar_text
bar_widgetwidget)r7   r0   r   r4   r5   r~   rj   r   r   r   r   r   s              r   r8   zProgressWidget.__init__   s     	y(H===>>>>>>>>>>>> DHH =QA2>>>R$tx899dD-t?@@r   c                    t          j                                        | j                   ddlm}  || j        fi | d S Nr   )displayr   currentadd_callbackrg   IPython.displayr   r   r7   rj   r   s      r   _ipython_display_z ProgressWidget._ipython_display_   R    %%dk222++++++&&v&&&&&r   c                0   |dk    r[t          |          \  }}}d| j        _        dt          |          z   dz   t	          | j                  z   dz   dz   | j        _        d S |s2d| j        _        dt	          | j                  z   dz   | j        _        d S d S )	NrG   danger=<div style="padding: 0px 10px 5px 10px"><b>Exception</b> <tt></tt>: </div>success9<div style="padding: 0px 10px 5px 10px"><b>Finished:</b> )r   r   	bar_stylereprr   r<   r   r   )r7   rE   rF   	exceptionrj   _s         r   re   zProgressWidget._draw_stop   s    W-i88OAy!!)DHy//"  dl++	,
   ###  	!*DHKdl++, ###	 	r   c                    ||z
  }dt          | j                  z   dz   | j        _        |r||z  nd| j        _        d||fz  | j        _        d S )N:<div style="padding: 0px 10px 5px 10px"><b>Computing:</b> r   r   zH<div style="padding: 0px 10px 0px 10px; text-align:right;">%d / %d</div>)r   r<   r   r   r   r   )r7   rE   rD   rj   ndones        r   rc   zProgressWidget._draw_bar   sj    iH$,''( 	
 ),4Vcl 	r   )Nr   FNr   )	rt   ru   rv   __doc__r8   r   re   rc   r   r   s   @r   r   r      s          A A A A A A(' ' '   *
 
 
 
 
 
 
r   r   c                  L    e Zd Z	 dddddddZed             Zd Zd	 Zd
 ZdS )MultiProgressBarNprefixr   F)funcgroup_byr4   r5   c               n   t          |          | _        d | _        |D ]2}t          |d          r t	          j        |j                  | _         n3|t          j        dt                     |}n|dv rt          }d |D             | _
        || _        || _        || _        t                      | _        d S )Nr!   ,`func` is deprecated, use `group_by` insteadcategory)Nr   c                @    h | ]}t          |d           r|j        n|S r#   r%   r'   s     r   r*   z,MultiProgressBar.__init__.<locals>.<setcomp>  r+   r   )r   r   r!   r&   r.   r/   r   r   r   r	   r0   r   r4   r5   r   r6   )	r7   r0   r   r   r   r4   r5   rj   r$   s	            r   r8   zMultiProgressBar.__init__   s     'y11 	 	CsH%% %k#*55 M>+    HH))) HEEEEE	   (??r   c                .    t                      | j        z
  S r   r:   r;   s    r   r<   zMultiProgressBar.elapsed  r=   r   c                  K   | j         | j        | j        fd}d }t          | j        fi | j        r|                                 j        ni  d {V | _        t          	                    d           | j        
                    dt          |          t          |          | j        d           d {V  	 | j                            | j        r|                                 j        nd            d {V }|| _        |d         | _         | j        di | |d         d	v r-| j                                         d {V   | j        di | nt          	                    d
           d S )Nc                f   K   t          |           }|                                 d {V  |S )Nr5   r   )r   r@   )r   rA   r5   r   r0   s     r   r@   z&MultiProgressBar.listen.<locals>.setup  sG      !!	  A ''))OOOOOOOHr   c                    t          t          |j                  t          t          |j                  |j        d}|j        dk    r|                    |j                   |S rC   )r   rH   rI   r0   rF   rJ   rK   rL   s      r   rN   z)MultiProgressBar.listen.<locals>.function(  sY    c1:..#C00( F
 x7""ag&&&Mr   rO   rP   rQ   TrT   rF   rV   rX   rY   )r5   r0   r   r   r   r!   rZ   r[   r\   r]   r^   r   r4   r`   ra   rb   rF   rc   rd   re   )r7   r@   rN   rf   r5   r   r0   s       @@@r   rg   zMultiProgressBar.listen  s     =y=	 	 	 	 	 	 		 	 	 "N
 
@DSt{{}}<<QS
 
 
 
 
 
 
 
	 	9:::ioou!(OO M	 
 
 	
 	
 	
 	
 	
 	
 	

	!Y^^>BkSdkkmm::t ,        H #+D"8,DKDN&&X&&&!%:::ioo'''''''''++(+++
	 	>?????r   c                    d S r   rY   ri   s     r   re   zMultiProgressBar._draw_stopM  rk   r   c                    t          t                    5  | j                                         d d d            d S # 1 swxY w Y   d S r   rm   r;   s    r   rp   zMultiProgressBar.__del__P  rq   rr   r   rs   rY   r   r   r   r      s          +
  +  +  +  +  +D 2 2 X22@ 2@ 2@h      r   r   c                  B     e Zd ZdZ	 	 d	 fd	Zd Zd Zd
dZd Z xZ	S )MultiProgressWidgetaT  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
    Nr   c                j     t                      j        ||fi | ddlm}  |g           | _        d S )Nr   )r   )r   r8   r   r   r   )r7   r0   r   minimumrj   r   r   s         r   r8   zMultiProgressWidget.__init__b  sK     	y33F333######d2hhr   c                    ddl mmmm} d  d           _        fd|D              _        fd|D              _        fd|D              _        d }d	 t          |
                                |d
          D             } | fd|D                        _         j         j        f j        _        d S )Nr   r   c                    t          | t                    r| d         } t          | t                    r|                                 n| } t	          j        |           S Nr   )
isinstancetuplebytesdecodehtmlescaper#   s    r   
make_labelz3MultiProgressWidget.make_widget.<locals>.make_labelq  sM    #u%% !f",S%"8"8A#**,,,cC;s###r   r   c                .    i | ]}| d dd          S )r   r   r   r   rY   )r(   r$   r   s     r   
<dictcomp>z3MultiProgressWidget.make_widget.<locals>.<dictcomp>y  s,    UUU#S--A1"EEEUUUr   c                (    i | ]}| d           S )r   rY   )r(   r$   r   s     r   r   z3MultiProgressWidget.make_widget.<locals>.<dictcomp>z  s#    777C#ttBxx777r   c           	     F    i | ]}| d  |          z   dz             S )zQ<div style="padding: 0px 10px 0px 10px; text-align:left; word-wrap: break-word;">r   rY   )r(   r$   r   r   s     r   r   z3MultiProgressWidget.make_widget.<locals>.<dictcomp>{  sV     
 
 
   ",*S//24<= 
 
 
r   c                    | ddd         S )z0Order keys by most numerous, then by string nameNrY   )kvs    r   keyfuncz0MultiProgressWidget.make_widget.<locals>.keyfunc  s    ddd8Or   c                    g | ]\  }}|S rY   rY   )r(   r)   vs      r   
<listcomp>z3MultiProgressWidget.make_widget.<locals>.<listcomp>  s    RRR41aQRRRr   T)r$   reversec                n    g | ]1} j         |         j        |         j        |         g          2S rY   )	bar_textsbars
bar_labels)r(   r$   r   r7   s     r   r   z3MultiProgressWidget.make_widget.<locals>.<listcomp>  sN        dnS)49S>4?3;OPQQ  r   )r   r   r   r   r   r   r   r   r   sorteditemsbar_widgetsr   children)	r7   rD   r   r   	key_orderr   r   r   r   s	   `    @@@@r   make_widgetzMultiProgressWidget.make_widgetn  sL   >>>>>>>>>>>>	$ 	$ 	$ !DHHUUUUQTUUU	77773777
 
 
 
 
 
 
 
	 	 	 SR6#))++7D#Q#Q#QRRR	4    $  
 
 !% 143CDr   c                    t          j                                        | j                   ddlm}  || j        fi | d S r   r   r   s      r   r   z%MultiProgressWidget._ipython_display_  r   r   c                z   |                                 D ],\  }}|sd| j        |         _        d| j        |         _        -|dk    rOt          |          \  }}}dt	          |          z   dz   t          | j                  z   dz   dz   | j        _        d S dt          | j                  z   dz   | j        _        d S )	Nr   r   rG   r   r   r   r   r   )	r   r   r   r   r   r   r<   r   r   )	r7   rE   rF   r   r$   rj   r)   r   r   s	            r   re   zMultiProgressWidget._draw_stop  s    OO%% 	2 	2DAq 2)2	!&&)1	!&&W-i88OAy!y//"  dl++	,
   ### Ldl++, ###r   c                H   | j         r!| j        j        s|                     |           |                                D ]d\  }}|||         z
  }dt          | j                  z   dz   | j        _        |r||z  nd| j	        |         _        d||fz  | j
        |         _        ed S )Nr   r   r   zH<div style="padding: 0px 10px 0px 10px; text-align: right">%d / %d</div>)r0   r   r  r  r   r   r<   r   r   r   r   )r7   rE   rD   rF   rj   r)   ntasksr   s           r   rc   zMultiProgressWidget._draw_bar  s    9 	"T[1 	"S!!! 	 	IAvYq\)ELdl++, #
 4:!BsDIaLZ&/" N1##	 	r   r   )NN)
rt   ru   rv   r   r8   r  r   re   rc   r   r   s   @r   r   r   U  s        
 
 	
 
 
 
 
 
"E "E "EH' ' '   4      r   r   Tr   )notebookmultir5   r   c                   t          |          }t          |t          t          f          s|g}| t	                      } |                    dd          0t          j        dt                     |	                    d          }|dvr$t          |t                    st          d          | r$|rt          |f||d|}nt          |fd|i|}|S t          |fd|i| dS )	ae  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)
    group_by : Callable | Literal["spans"] | Literal["prefix"]
        Use spans instead of task key names for grouping tasks
        (defaults to "prefix")

    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
    Nr   r   r   )spansr   z5`group_by` should be 'spans', 'prefix', or a Callabler   r5   )r   r   setlistr   getr   r   r   popr   r   r   r   ry   )r	  r
  r5   r   futuresrj   r   s          r   progressr    s,   H !!GgT{++ );;zz&$+:EW	
 	
 	
 	
 ::f%%***:h3Q3Q*PQQQ 	> 	G%"*X AG CC !FF8FvFFC
==(=f=====r   )/
__future__r   r   loggingr   r   r.   
contextlibr   timeitr   typingr   tlzr   tornado.ioloopr   r1   
dask.utilsr	   distributed.clientr
   r   distributed.corer   r   r   r    distributed.diagnostics.progressr   r   r   distributed.protocol.pickler   distributed.utilsr   r   	getLoggerrt   r\   r   r   ry   r   r   r   r  rY   r   r   <module>r!     s   " " " " " "   



                                 ! ! ! ! ! !              9 9 9 9 9 9 9 9            R Q Q Q Q Q Q Q Q Q - - - - - - 3 3 3 3 3 3 3 3		8	$	$( ( (K K K K K K K K\5 5 5 5 5k 5 5 5pC
 C
 C
 C
 C
[ C
 C
 C
L` ` ` ` ` ` ` `Fk k k k k* k k k^ 4$9> 9> 9> 9> 9> 9> 9>r   