
    d3                        d dl m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mZ d d	lmZ erd d
lmZ  G d de          ZdS )    )annotationsN)TYPE_CHECKING)Match)format_time)Cursor)IO)SectionOutput)	Component)Outputc            	         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	 	 dKdLdZdMdNdZdMdOdZdPd ZdQd!ZdQd"ZdPd#ZdRd%ZdSd&ZdTd(ZdSd)ZdRd*ZdSd+ZdRd,ZdUd.ZdVd0ZdWd1ZdWd2ZdXdYd3ZdZd[d5Zd[d6Z d\d7Z!d\d8Z"d]d;Z#d\d<Z$dUd=Z%d^d?Z&d_d@Z'dSdAZ(e)dQdB            Z*dSdCZ+dSdDZ,dSdEZ-dQdFZ.dSdGZ/dQdHZ0dQdIZ1dSdJ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_nomaxr   皙?ioIO | Outputmaxintmin_seconds_between_redrawsfloatreturnNonec                L   t          |t                    r|j        }|| _        t	          j                    | _        d| _        d| _        | 	                    |           d| _
        d| _        d | _        d | _        d| _        d | _        d| _        d| _        d| _        d| _        |dk    rd | _        || _        | j        j                                        sd| _        d | _        i | _        t1          j                    | _        d| _        t7          | j                  | _        d S )Nr   r           Tg      ?F)
isinstancer   error_output_ioshutilget_terminal_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"   s       X/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/cleo/ui/progress_bar.py__init__zProgressBar.__init__1   s    b" 	!B133	 !C   
#',0"#-1!%,/),/)&**#D0KD-x!..00 	$%*D"  $D)+9;; #dh''    messagestrnamec                    || j         |<   d S Nr=   )rB   rF   rH   s      rC   set_messagezProgressBar.set_message\   s    &trE   c                    | j         |         S rJ   rK   )rB   rH   s     rC   get_messagezProgressBar.get_message_   s    ~d##rE   c                    | j         S rJ   )r?   rB   s    rC   get_start_timezProgressBar.get_start_timeb   s    rE   c                    | j         S rJ   r.   rP   s    rC   get_max_stepszProgressBar.get_max_stepse   
    yrE   c                    | j         S rJ   )r1   rP   s    rC   get_progresszProgressBar.get_progressh   s
    zrE   c                    | j         S rJ   )r2   rP   s    rC   get_progress_percentz ProgressBar.get_progress_percentk   s
    }rE   	characterc                    || _         | S rJ   )bar_charrB   rZ   s     rC   set_bar_characterzProgressBar.set_bar_charactern   s    !rE   c                >    | j         | j        rdS | j        S | j         S )N=)r\   r.   empty_bar_charrP   s    rC   get_bar_characterzProgressBar.get_bar_characters   s*    = y s&&}rE   widthc                    || _         | S rJ   )	bar_width)rB   rc   s     rC   set_bar_widthzProgressBar.set_bar_width|   s    rE   c                    | j         S rJ   ra   rP   s    rC   get_empty_bar_characterz#ProgressBar.get_empty_bar_character   s    ""rE   c                    || _         | S rJ   rh   r]   s     rC   set_empty_bar_characterz#ProgressBar.set_empty_bar_character   s    'rE   c                    | j         S rJ   progress_charrP   s    rC   get_progress_characterz"ProgressBar.get_progress_character   s    !!rE   c                    || _         | S rJ   rm   r]   s     rC   set_progress_characterz"ProgressBar.set_progress_character   s    &rE   fmtc                "    d | _         || _        d S rJ   )r3   r4   rB   rr   s     rC   
set_formatzProgressBar.set_format   s     #rE   freqc                B    | j         t          |d          | _         d S d S )Nr   )r   r    rB   rv   s     rC   set_redraw_frequencyz ProgressBar.set_redraw_frequency   s)    '"4||D ('rE   c                2    |dk    rd | _         || _        d S d S )Nr   )r   r8   rx   s     rC   r"   z'ProgressBar.min_seconds_between_redraws   s(    !88#D04D--- 8rE   c                    || _         d S rJ   )r9   rx   s     rC   max_seconds_between_redrawsz'ProgressBar.max_seconds_between_redraws   s    ,0)))rE   c                    t          j                     | _        d| _        d| _        ||                     |           |                                  dS )z,
        Start the progress output.
        r   r'   N)r>   r?   r1   r2   r0   display)rB   r    s     rC   startzProgressBar.start   sJ      9;;
?$$$rE   stepc                @    |                      | j        |z              dS )z7
        Advances the progress output X steps.
        N)set_progressr1   )rB   r   s     rC   advancezProgressBar.advance   s%     	$*t+,,,,,rE   c                   | j         r|| j         k    r|| _         n|dk     rd}| j        | j         pddz  n| j        }t          | j        |z            }t          ||z            }|| _        | j         r| j        | j         z  | _        nd| _        t          j                    | j        z
  }|| j         k    r|                                  dS || j        k     rdS ||k    s|| j	        k    r|                                  dS dS )z,
        Sets the current progress.
        r   N
   r'   )
r.   r   r!   r1   r2   r>   r@   r~   r8   r9   )rB   r   r   prev_periodcurr_periodtime_intervals         rC   r   zProgressBar.set_progress   s&    9 		))DIIAXXD '+&6&>TY_"""DDT 	 $*{233$,--
9 	  J2DMMDM	d&;; 49LLNNNF 4<<<F ;&& AAALLNNNNN BArE   c                    | j         s| j        | _         | j        | j         k    r	| j        sdS |                     | j                    dS )z-
        Finish the progress output.
        N)r.   r1   r7   r   rP   s    rC   finishzProgressBar.finish   sO     y 	#
DI:""4+A"F$)$$$$$rE   c                    | j                                         rdS | j        .|                     | j        p|                                            |                     |                                            dS )z5
        Output the current progress string.
        N)r*   is_quietr3   _set_real_formatr4   _determine_best_format
_overwrite_build_linerP   s    rC   r~   zProgressBar.display   s|     8 	F<!!%F)D)D)F)F   	((**+++++rE   matches
Match[str]c           
     0   t          | d|                    d                     r<t           t          | d|                    d                                           }nR|                    d          | j        v r!| j        |                    d                   }n|                    d          S |                    d          r|                    d                              d          r\|                    t          |                    d                              d          	                    d                              }nH|
                    t          |                    d          	                    d                              }|S )N_formatter_r   r      r   s)hasattrgrouprG   getattrr=   
startswithljustr!   lstriprstriprjust)rB   r   texts      rC   _overwrite_callbackzProgressBar._overwrite_callback   sX   49w}}Q'7'799:: 	$Fwt%E7==3C3C%E%EFFHHIIDD]]1//>'--"2"23DD==###== 	E}}Q**3// Ezz#gmmA&6&6&=&=c&B&B&I&I#&N&N"O"OPPzz#gmmA&6&6&=&=c&B&B"C"CDDrE   c                    | j         sdS | j        .|                     | j        p|                                            |                     d| j        z             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
)r7   r3   r   r4   r   r   r5   rP   s    rC   clearzProgressBar.clear  sm     % 	F<!!%F)D)D)F)F   	t6677777rE   c                    | j         s"|dz   | j        v r| j        |dz            | _        n | j                            ||          | _        | j        J | j                            d          | _        dS )z/
        Sets the progress bar format.
        _nomaxNr   )r.   formatsr3   getcountr5   rt   s     rC   r   zProgressBar._set_real_format  sw    
 y 	6S8^t|;;<h7DLL<++C55DL|'''"&,"4"4T":":rE   mxc                    t          d|          | _        | j        r(t          t          | j                            | _        dS d| _        dS )z6
        Sets the progress bar maximal steps.
        r      N)r    r.   lenrG   r/   )rB   r   s     rC   r0   zProgressBar._set_max_steps%  sI     2JJ	9 	!"3ty>>22D DrE   c           	        | j         |k    rdS |}| j        r| j         t          | j        t                    ryt          t          j        t          | j        	                    |                    | j
        j        z                      | j        z   dz   }| j                            |           nj| j        r| j                            | j                   | j                            d           | j                                         n| j        dk    rd|z   }|| _         t'          j                    | _        | j                            |           | xj        dz  c_        dS )z>
        Overwrites a previous message to the output.
        Nr   r   r   )r6   r7   r(   r*   r	   r!   mathfloorr   remove_formatr-   columnsr5   r   rA   move_upmove_to_column
clear_liner1   r>   r@   writer:   )rB   rF   original_messagelines_to_clears       rC   r   zProgressBar._overwrite0  sf    !W,,F"! 	%%1dh66 . J #DH$:$:7$C$C D D"&."8!9   12  # HNN>2222. F,,T-DEEEL//222L++---Z!^^WnG!1 $	wQrE   c                    | j                                         r| j        rdS dS | j                                         r| j        rdS dS | j                                         r| j        rdS dS | j        rdS dS )	Nr   r   r   r   r   r   r   r   )r*   is_debugr.   is_very_verbose
is_verboserP   s    rC   r   z"ProgressBar._determine_best_formatV  s    8 	#y w =X%%'' 		#y &%~''X  "" 	#y ! y"?9 	8~rE   c                   | j         r!t          j        | j        | j        z            S | j        :t          j        t          d| j        dz            | j        z  | j        z            S t          j        | j        | j        z            S )N      )	r.   r   r   r2   re   r   minr:   r1   rP   s    rC   
bar_offsetzProgressBar.bar_offsetl  s    9 	;:dmdn<==='zDNb011D4EEW   :dj4>9:::rE   c                $   | j         }|                                 t          |          z  }|| j        k     rY| j        |z
  t	          | j                            | j                            z
  }|| j        | j        t          |          z  z   z  }|S rJ   )	r   rb   r!   re   r   r*   r   rn   ra   )rB   complete_barsr~   
empty_barss       rC   _formatter_barzProgressBar._formatter_barx  s    ((**S-?-??4>)) dh,,T-?@@AAB 
 t)D,?#j//,QQQGrE   c                R    t          t          j                    | j        z
            S rJ   )r   r>   r?   rP   s    rC   _formatter_elapsedzProgressBar._formatter_elapsed  s    49;;)99:::rE   c                    | j         st          d          | j        sd}n@t          t	          j                    | j        z
  | j        z  | j         | j         z
  z            }t          |          S )NzOUnable to display the remaining time if the maximum number of steps is not set.r   )r.   RuntimeErrorr1   roundr>   r?   r   )rB   	remainings     rC   _formatter_remainingz ProgressBar._formatter_remaining  s{    y 	=  
 z 	IIt//4:=TYAVW I 9%%%rE   c                    | j         st          d          | j        sd}n8t          t	          j                    | j        z
  | j        z  | j         z            }|S )NzOUnable to display the estimated time if the maximum number of steps is not set.r   )r.   r   r1   r   r>   r?   )rB   	estimateds     rC   _formatter_estimatedz ProgressBar._formatter_estimated  sf    y 	=  
 z 	YIIty{{T-==KdiWXXIrE   c                \    t          | j                                      | j        d          S )N )rG   r1   r   r/   rP   s    rC   _formatter_currentzProgressBar._formatter_current  s#    4:$$T%5s;;;rE   c                    | j         S rJ   rS   rP   s    rC   _formatter_maxzProgressBar._formatter_max  rU   rE   c                T    t          t          j        | j        dz                      S )Nd   )r!   r   r   r2   rP   s    rC   _formatter_percentzProgressBar._formatter_percent  s!    4:dmc122333rE   c                    t          j        d          } j        J |                     j         j                  } fd|                    d          D             }t          |          } j        j        }||k    r|S  	                     j
        |z
  |z              |                     j         j                  S )Nz(?i)%([a-z\-_]+)(?::([^%]+))?%c           	         g | ]<}t          j                            |                    d                               =S ))r   r*   r   r   ).0sub_linerB   s     rC   
<listcomp>z+ProgressBar._build_line.<locals>.<listcomp>  sM     
 
 
 &&xt'<'<==>>
 
 
rE   r   )recompiler3   subr   splitr    r-   r   rf   re   )rB   regexlinelines_lengthlines_widthterminal_widths   `     rC   r   zProgressBar._build_line  s    
<==|'''yy14<@@
 
 
 
 JJt,,
 
 

 ,''/.((K4>K7.HIIIyy14<@@@rE   )r   r   )r   r   r    r!   r"   r#   r$   r%   )rF   )rF   rG   rH   rG   r$   r%   )rH   rG   r$   rG   )r$   r#   )r$   r!   )rZ   rG   r$   r   )r$   rG   )rc   r!   r$   r   )rr   rG   r$   r%   )rv   r!   r$   r%   )rv   r#   r$   r%   rJ   )r    r   r$   r%   )r   )r   r!   r$   r%   )r$   r%   )r   r   r$   rG   )r   r!   r$   r%   )rF   rG   r$   r%   )3__name__
__module____qualname____doc__rH   re   r\   ra   rn   r   __annotations__r   rD   rL   rN   rQ   rT   rW   rY   r^   rb   rf   ri   rk   ro   rq   ru   ry   r"   r|   r   r   r   r   r~   r   r   r   r0   r   r   propertyr   r   r   r   r   r   r   r   r    rE   rC   r   r      s          D IHNMK ;,I:T?V8 G  -0	)( )( )( )( )(V' ' ' ' '$ $ $ $ $                   
      
# # # #   
" " " "   
$ $ $ $, , , ,5 5 5 5
1 1 1 1    - - - - -' ' ' 'R
% 
% 
% 
%, , , ,    8 8 8 8$
; 
; 
; 
;	! 	! 	! 	!$ $ $ $L   , 	; 	; 	; X	;   ; ; ; ;& & & &    < < < <   4 4 4 4A A A A A ArE   r   )
__future__r   r   r   r+   r>   typingr   r   cleo._utilsr   cleo.cursorr   
cleo.io.ior   cleo.io.outputs.section_outputr	   cleo.ui.componentr
   cleo.io.outputs.outputr   r   r   rE   rC   <module>r      s   " " " " " "  				                     # # # # # #             8 8 8 8 8 8 ' ' ' ' ' '  .------oA oA oA oA oA) oA oA oA oA oArE   