o
    ni!                     @  s   d Z ddlmZ ddlZddlmZmZ ddlZddlmZ ddl	m
Z ddlmZ d#ddZej	d$d%ddZG dd dZG dd dZd&ddZd'd!d"ZdS )(zCDefines an object for printing run progress at the end of a script.    )annotationsN)IterableIterator)env)wandb_internal_pb2   )printerr   	p.Printerfinal_resultpb.PollExitResponsereturnNonec                 C  sB   |j j}|j j}|dks|dkrdS || }| d|d dS )z}Print how much W&B sync reduced the amount of uploaded data.

    Args:
        final_result: The final PollExit result.
    r   Nz"W&B sync reduced upload amount by z.1%)pusher_statsdeduped_bytestotal_bytesdisplay)r   r
   r   r   frac r   T/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/sdk/lib/progress.pyprint_sync_dedupe_stats   s   	r   settingswandb.Settings | NoneIterator[ProgressPrinter]c                 c  sF    |   }t| ||V  |   W d   dS 1 sw   Y  dS )z>Context manager providing an object for printing run progress.N)dynamic_textProgressPrinterprogress_close)r   r   	text_arear   r   r   progress_printer"   s
   

"r   c                   @  sL   e Zd ZdZd d
dZd!ddZd"ddZd#ddZd$ddZd%ddZ	dS )&r   z.Displays PollExitResponse results to the user.r   r	   progress_text_areap.DynamicText | Noner   r   r   r   c                 C  s2   |o	|j o	t  | _|| _|| _d| _d| _d S )Nr    )x_show_operation_statsr   is_require_legacy_service_show_operation_stats_printer_progress_text_area_tick_last_printed_line)selfr   r   r   r   r   r   __init__0   s   
zProgressPrinter.__init__progresslist[pb.PollExitResponse]c                 C  s`   |sdS | j r| tdd |D  nt|dkr"| |d  n| | |  jd7  _dS )z!Update the displayed information.Nc                 s  s    | ]}|j V  qd S N)operation_stats).0responser   r   r   	<genexpr>K   s    z)ProgressPrinter.update.<locals>.<genexpr>r   r   )r#   _update_operation_statslistlen_update_single_run_update_multiple_runsr&   )r(   r*   r   r   r   updateA   s   
zProgressPrinter.update
stats_listlist[pb.OperationStats]c                 C  s   | j rt| j| j d| j| jd| d S g }d}|D ]}|jD ]}t|dk r1||j	 q"|d7 }q"qd
|}|dkrH|d| d7 }|| jkrS| j| || _d S )	N   )	max_linesloading_symbolr      r   z; z (+ z more))r%   _DynamicOperationStatsPrinterr$   r;   r&   r   
operationsr3   appenddescjoinr'   )r(   r7   top_level_operationsextra_operationsstatsopliner   r   r   r1   T   s,   




z'ProgressPrinter._update_operation_statsr   c                 C  sz   |j }t|jddt|jdd}|jdkr$|dt|jdd7 }|jdkr5| ||j|j  d S | |d d S )Nz.3fz MB of z MB uploadedr   z (z MB deduped)      ?)r   
_megabytesuploaded_bytesr   r   _update_progress_text)r(   r*   rD   rF   r   r   r   r4   p   s   



z"ProgressPrinter._update_single_runprogress_listc              	   C  s   d}d}d}|D ]&}||j j7 }||j j7 }||j j7 }||j j7 }||jj7 }||jj7 }qdt| d| dt	|ddt	|dd	}|dkrT| 
|||  d S | 
|d d S )	Nr   zProcessing z runs with z files (z.2fz MB / z MB)rG   )file_countswandb_countmedia_countartifact_countother_countr   rI   r   r3   rH   rJ   )r(   rK   total_filesrI   r   r*   rF   r   r   r   r5      s&   z%ProgressPrinter._update_multiple_runstextstrfloatc                 C  s,   | j r| j | d S | j|d | d S )N)r%   set_textr$   progress_update)r(   rR   r*   r   r   r   rJ      s   z%ProgressPrinter._update_progress_textN)r   r	   r   r   r   r   r   r   )r*   r+   r   r   )r7   r8   r   r   )r*   r   r   r   )rK   r+   r   r   )rR   rS   r*   rT   r   r   )
__name__
__module____qualname____doc__r)   r6   r1   r4   r5   rJ   r   r   r   r   r   -   s    




r   c                   @  s.   e Zd ZdZdddZdddZdddZdS )r=   z?Single-use object that writes operation stats into a text area.r   r	   r   p.DynamicTextr:   intr;   rS   r   r   c                 C  s(   || _ || _|| _|| _g | _d| _d S )Nr   )r$   
_text_area
_max_lines_loading_symbol_lines
_ops_shown)r(   r   r   r:   r;   r   r   r   r)      s   
z&_DynamicOperationStatsPrinter.__init__r7   Iterable[pb.OperationStats]c                 C  s   d}|D ]}|j D ]
}| j|ddd q	||j7 }q| j|k rCd| j  kr-t| jkr4n n| j  || j }| jd| d t| jdkra| j	rY| j
| j	 d dS | j
d	 dS | j
d
| j dS )z&Show the given stats in the text area.r   Fr    
is_subtaskindentr   z+ z more task(s)z Finishing up...zFinishing up...
N)r>   _add_operationtotal_operationsrb   r_   r3   ra   popr?   r`   r^   rV   rA   )r(   r7   ri   rD   rE   	remainingr   r   r   r      s   

 

z%_DynamicOperationStatsPrinter.displayrE   pb.Operationre   boolrf   c           	      C  s   t | j| jkr
dS |s|  jd7  _g }|r | jjr |d | jr)|| j ||j |j	r9||j	  |dt
|jd d | j|d|  |jrw| jd}| j|j}|red	nd
}| j| | d	| d|  |jr|d	 }|jD ]}| j|d|d qdS dS )z#Add the operation to `self._lines`.Nr   u   ↳()seconds) ERRORz  r    Trd   )r3   ra   r_   rb   r$   supports_unicoder?   r`   r@   r*   _time_to_stringruntime_secondsrA   error_statuserrorsecondary_textsubtasksrh   )	r(   rE   re   rf   parts
error_word
error_descsubtask_indenttaskr   r   r   rh      s>   

z,_DynamicOperationStatsPrinter._add_operationN)
r   r	   r   r\   r:   r]   r;   rS   r   r   )r7   rc   r   r   )rE   rl   re   rm   rf   rS   r   r   )rX   rY   rZ   r[   r)   r   rh   r   r   r   r   r=      s
    

r=   ro   rT   rS   c                 C  sp   | dk r
| ddS | dk r| ddS | dk r"| d }|ddS t | d }t | d d }| d| dS )	z1Returns a short string representing the duration.
   z.1fs<   z.0fi  mh)r]   )ro   minuteshoursr   r   r   rt     s   rt   bytesr]   c                 C  s   | d S )z+Returns the number of megabytes in `bytes`.i   r   )r   r   r   r   rH     s   rH   )r   r	   r
   r   r   r   r,   )r   r	   r   r   r   r   )ro   rT   r   rS   )r   r]   r   rT   )r[   
__future__r   
contextlibtypingr   r   wandbr   wandb.protor   pbr    r   pr   contextmanagerr   r   r=   rt   rH   r   r   r   r   <module>   s     

{
^