o
    Vhb1                     @  s   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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mZ d dlmZ erPd dlmZ G dd deZdS )    )annotationsN)TYPE_CHECKING)ClassVar)Match)format_time)Cursor)IO)SectionOutput)Terminal)	Component)Outputc                	   @  s  e Zd ZU dZdZdZdZdZdZdZ	de
d	< d
ddddddddZde
d< 		dsdtddZdudvd!d"Zdudwd#d$Zdxd%d&Zdyd'd(Zdyd)d*Zdxd+d,Zdzd.d/Zd{d0d1Zd|d3d4Zd{d5d6Zdzd7d8Zd{d9d:Zdzd;d<Zd}d>d?Zd~dAdBZddCdDZddEdFZdddGdHZdddJdKZddLdMZ ddNdOZ!ddPdQZ"ddTdUZ#ddVdWZ$d}dXdYZ%dd[d\Z&dd]d^Z'd{d_d`Z(e)dydadbZ*d{dcddZ+d{dedfZ,d{dgdhZ-dydidjZ.d{dkdlZ/dydmdnZ0dydodpZ1d{dqdrZ2dS )ProgressBarzF
    The ProgressBar provides helpers to display progress output.
    progress_bar   N->   
int | Noneredraw_freqz& %current%/%max% [%bar%] %percent:3s%%z %current% [%bar%]z4 %current%/%max% [%bar%] %percent:3s%% %elapsed:-6s%z %current% [%bar%] %elapsed:6s%zC %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s%)normalnormal_nomaxverboseverbose_nomaxvery_verbosevery_verbose_nomaxdebugdebug_nomaxzClassVar[dict[str, str]]formatsr   皙?ioIO | Outputmaxintmin_seconds_between_redrawsfloatreturnNonec                 C  s   t |tr|j}|| _t j| _d| _d| _| 	| d| _
d| _d | _d | _d| _d | _d| _d| _d| _d| _|dkrCd | _|| _| jj sOd| _d | _i | _t | _d| _t| j| _d S )Nr   r           Tg      ?F)
isinstancer   error_output_ior
   size	_terminal_max_step_width_set_max_steps_step_percent_format_internal_format_format_line_count_previous_message_should_overwrite_min_seconds_between_redraws_max_seconds_between_redraws_write_countr   	formatteris_decorated	_messagestime_start_time_last_write_timer   _cursor)selfr   r!   r#    rB   h/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/cleo/ui/progress_bar.py__init__2   s6   



zProgressBar.__init__messagestrnamec                 C  s   || j |< d S Nr<   )rA   rE   rG   rB   rB   rC   set_message]   s   zProgressBar.set_messagec                 C  s
   | j | S rH   rI   )rA   rG   rB   rB   rC   get_message`      
zProgressBar.get_messagec                 C     | j S rH   )r>   rA   rB   rB   rC   get_start_timec      zProgressBar.get_start_timec                 C  rM   rH   r-   rN   rB   rB   rC   get_max_stepsf   rP   zProgressBar.get_max_stepsc                 C  rM   rH   )r0   rN   rB   rB   rC   get_progressi   rP   zProgressBar.get_progressc                 C  rM   rH   )r1   rN   rB   rB   rC   get_progress_percentl   rP   z ProgressBar.get_progress_percent	characterc                 C  
   || _ | S rH   )bar_charrA   rU   rB   rB   rC   set_bar_charactero      zProgressBar.set_bar_characterc                 C  s    | j d u r| jr
dS | jS | j S )N=)rW   r-   empty_bar_charrN   rB   rB   rC   get_bar_charactert   s
   
zProgressBar.get_bar_characterwidthc                 C  rV   rH   )	bar_width)rA   r^   rB   rB   rC   set_bar_width}   rZ   zProgressBar.set_bar_widthc                 C  rM   rH   r\   rN   rB   rB   rC   get_empty_bar_character   rP   z#ProgressBar.get_empty_bar_characterc                 C  rV   rH   ra   rX   rB   rB   rC   set_empty_bar_character   rZ   z#ProgressBar.set_empty_bar_characterc                 C  rM   rH   progress_charrN   rB   rB   rC   get_progress_character   rP   z"ProgressBar.get_progress_characterc                 C  rV   rH   rd   rX   rB   rB   rC   set_progress_character   rZ   z"ProgressBar.set_progress_characterfmtc                 C  s   d | _ || _d S rH   )r2   r3   rA   rh   rB   rB   rC   
set_format   s   
zProgressBar.set_formatfreqc                 C  s   | j d urt|d| _ d S d S )Nr   )r   r!   rA   rk   rB   rB   rC   set_redraw_frequency   s   
z ProgressBar.set_redraw_frequencyc                 C  s   |dkrd | _ || _d S d S )Nr   )r   r7   rl   rB   rB   rC   r#      s   
z'ProgressBar.min_seconds_between_redrawsc                 C  s
   || _ d S rH   )r8   rl   rB   rB   rC   max_seconds_between_redraws   rL   z'ProgressBar.max_seconds_between_redrawsc                 C  s4   t   | _d| _d| _|dur| | |   dS )z,
        Start the progress output.
        r   r'   N)r=   r>   r0   r1   r/   display)rA   r!   rB   rB   rC   start   s   

zProgressBar.startstepc                 C  s   |  | j|  dS )z7
        Advances the progress output X steps.
        N)set_progressr0   )rA   rq   rB   rB   rC   advance   s   zProgressBar.advancec                 C  s   | j r|| j kr|| _ n|dk rd}| jdu r| j pdd n| j}t| j| }t|| }|| _|| j p7tj | _t | j }|| j krL| 	  dS || j
k rSdS ||ks\|| jkrb| 	  dS dS )z,
        Sets the current progress.
        r   N
   )r-   r   r"   r0   mathinfr1   r=   r?   ro   r7   r8   )rA   rq   r   prev_periodcurr_periodtime_intervalrB   rB   rC   rr      s(   


zProgressBar.set_progressc                 C  s4   | j s| j| _ | j| j kr| jsdS | | j  dS )z-
        Finish the progress output.
        N)r-   r0   r6   rr   rN   rB   rB   rC   finish   s
   zProgressBar.finishc                 C  s>   | j  rdS | jdu r| | jp|   | |   dS )z5
        Output the current progress string.
        N)r*   is_quietr2   _set_real_formatr3   _determine_best_format
_overwrite_build_linerN   rB   rB   rC   ro      s   

zProgressBar.displaymatches
Match[str]c                 C  s   t | d|d rtt| d|d  }n|d| jv r+| j|d }n|dS |drTt|ddd}|ddrO|	|S |
|S |S )N_formatter_r   r      r   s)hasattrgrouprF   getattrr<   r"   lstriprstrip
startswithljustrjust)rA   r   textnrB   rB   rC   _overwrite_callback   s   



zProgressBar._overwrite_callbackc                 C  s<   | j sdS | jdu r| | jp|   | d| j  dS )z
        Removes the progress bar from the current line.

        This is useful if you wish to write some output
        while a progress bar is running.
        Call display() to show the progress bar again.
        N
)r6   r2   r|   r3   r}   r~   r4   rN   rB   rB   rC   clear  s   
zProgressBar.clearc                 C  sV   | j s|d | jv r| j|d  | _n| j||| _| jdus"J | jd| _dS )z/
        Sets the progress bar format.
        _nomaxNr   )r-   r   r2   getcountr4   ri   rB   rB   rC   r|     s
   zProgressBar._set_real_formatmxc                 C  s0   t d|| _| jrtt| j| _dS d| _dS )z6
        Sets the progress bar maximal steps.
        r      N)r!   r-   lenrF   r.   )rA   r   rB   rB   rC   r/   "  s   $zProgressBar._set_max_stepsc                 C  s   | j |krdS |}| jrE| j durDt| jtr/t| j|| jj | j	 d }| j
| n| j	r9| j| j	 | jd | j  n	| jdkrNd| }|| _ t | _| j| |  jd7  _dS )z>
        Overwrites a previous message to the output.
        Nr   r   r   )r5   r6   r(   r*   r	   r   remove_formatr,   r^   r4   r   r@   move_upmove_to_column
clear_liner0   r=   r?   writer9   )rA   rE   original_messagelines_to_clearrB   rB   rC   r~   )  s0   




zProgressBar._overwritec                 C  sF   d}| j  r
d}n| j  rd}n| j  rd}| jr|S | dS )Nr   r   r   r   r   )r*   is_debugis_very_verbose
is_verboser-   ri   rB   rB   rC   r}   J  s   


z"ProgressBar._determine_best_formatc                 C  sV   | j rt| j| j S | jd u r"ttd| jd | j | j S t| j| j S )N      )	r-   ru   floorr1   r_   r   minr9   r0   rN   rB   rB   rC   
bar_offsetU  s   
zProgressBar.bar_offsetc                 C  sX   | j }|  t| }|| jk r*| j| t| j| j }|| j| jt|  7 }|S rH   )	r   r]   r"   r_   r   r*   r   re   r\   )rA   complete_barsro   
empty_barsrB   rB   rC   _formatter_bar_  s   
zProgressBar._formatter_barc                 C  s   t t | j S rH   )r   r=   r>   rN   rB   rB   rC   _formatter_elapsedn     zProgressBar._formatter_elapsedc                 C  sL   | j std| jsd}t|S tt | j | j | j | j   }t|S )NzOUnable to display the remaining time if the maximum number of steps is not set.r   )r-   RuntimeErrorr0   roundr=   r>   r   )rA   	remainingrB   rB   rC   _formatter_remainingq  s   z ProgressBar._formatter_remainingc                 C  s6   | j std| jsdS tt | j | j | j  S )NzOUnable to display the estimated time if the maximum number of steps is not set.r   )r-   r   r0   r   r=   r>   rN   rB   rB   rC   _formatter_estimated  s   z ProgressBar._formatter_estimatedc                 C  s   t | j| jS rH   )rF   r0   r   r.   rN   rB   rB   rC   _formatter_current  r   zProgressBar._formatter_currentc                 C  rM   rH   rQ   rN   rB   rB   rC   _formatter_max  rP   zProgressBar._formatter_maxc                 C  s   t t| jd S )Nd   )r"   ru   r   r1   rN   rB   rB   rC   _formatter_percent  s   zProgressBar._formatter_percentc                   s   t d} jd usJ | j j} fdd|dD }t|} jj}||kr.|S  	 j
| |  | j jS )Nz(?i)%([a-z\-_]+)(?::([^%]+))?%c                   s"   g | ]}t  j|d qS ))r   r*   r   r   ).0sub_linerN   rB   rC   
<listcomp>  s    z+ProgressBar._build_line.<locals>.<listcomp>r   )recompiler2   subr   splitr!   r,   r^   r`   r_   )rA   regexlinelines_lengthlines_widthterminal_widthrB   rN   rC   r     s   

zProgressBar._build_line)r   r   )r   r    r!   r"   r#   r$   r%   r&   )rE   )rE   rF   rG   rF   r%   r&   )rG   rF   r%   rF   )r%   r$   )r%   r"   )rU   rF   r%   r   )r%   rF   )r^   r"   r%   r   )rh   rF   r%   r&   )rk   r"   r%   r&   )rk   r$   r%   r&   rH   )r!   r   r%   r&   )r   )rq   r"   r%   r&   )r%   r&   )r   r   r%   rF   )r   r"   r%   r&   )rE   rF   r%   r&   )3__name__
__module____qualname____doc__rG   r_   rW   r\   re   r   __annotations__r   rD   rJ   rK   rO   rR   rS   rT   rY   r]   r`   rb   rc   rf   rg   rj   rm   r#   rn   rp   rs   rr   rz   ro   r   r   r|   r/   r~   r}   propertyr   r   r   r   r   r   r   r   r   rB   rB   rB   rC   r      st   
 +






	









%






!
	





r   )
__future__r   ru   r   r=   typingr   r   r   cleo._utilsr   cleo.cursorr   
cleo.io.ior   cleo.io.outputs.section_outputr	   cleo.terminalr
   cleo.ui.componentr   cleo.io.outputs.outputr   r   rB   rB   rB   rC   <module>   s     