a
    )ñ»jéë  ã                   @  s  d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dl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 m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 e�r&d dl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZC ddlDmEZE ddlFmGZG ddlHmIZImJZJ ddlKmLZLmMZM e+deNƒZOe0dƒZPe"g eQf ZRe 0de-e!¡ZSG dd„ deƒZTd”d)d*d+d,d-d.d-d/d0d1d1d1d1d0d-d-d)d2œd3d4„ZUG d5d6„ d6ee!ƒZVG d7d8„ d8e#eS e&eS ƒZWd9d!dd"dd#d$d%d&d'd"d:œd;d,d*d-d.d-d/d0d1d1d1d1d-d<d=œd>d?„ZXejYd•dd9d!dd"dd#d$d%d&d'd"dAœdBdCd,dDdDdDdEd*d-d.d-d/d0d1d1d1d1d-dFdGœdHdI„ƒZZejYd–dd9d!dd"dd#d$d%d&d'd"dAœdBdJd,dDdDdDdEd*d-d.d-d/d0d1d1d1d1d-d<dGœdKdI„ƒZZd—dd9d!dd"dd#d$d%d&d'd"dAœdBdMd,dDdDdDdEd*d-d.d-d/d0d1d1d1d1d-dNdGœdOdI„ZZG dPdQ„ dQeƒZ[G dRdS„ dSe[ƒZ\G dTdU„ dUe[ƒZ]G dVdW„ dWe[ƒZ^G dXdY„ dYe[ƒZ_G dZd[„ d[e[ƒZ`G d\d]„ d]e^ƒZaG d^d_„ d_e[ƒZbG d`da„ dae[ƒZcG dbdc„ dce[ƒZdG ddde„ dee[ƒZeG dfdg„ dge[ƒZfG dhdi„ die[ƒZgG djdk„ dke*ƒZheG dldm„ dmƒƒZiG dndo„ doe?ƒZjekdpk�rd dllZld dlmZmddqlnmoZo ddrlpmqZq ddslrmsZs ddtlHmJZJ esdudvd!dw�ZreJdxdydzƒZHeH td{d|d}¡ d~eodƒd€eHd�d‚dƒd„œd…ereqd†ƒg	Zud d‡lvmwZw eweuƒZxe8d!dˆ�Z7eje]ƒ gej y¡ ¢e`ƒ ‘R e7d"d‰œŽ�ŒZzezj{dŠd‹dŒ�Z|ezj{d�d‹dŒ�Z}ezj{dŽddŒ�Z~ezj�säezj€e|d�d�� ezj€e}d‘d�� em �d’¡ el ‚d d“¡dk �r’ez ƒe„exƒ¡ �q’W d  ƒ n1 �sú0    Y  dS )˜é    )ÚannotationsN)ÚABCÚabstractmethod©Údeque)Ú	dataclassÚfield)Ú	timedelta)Ú	RawIOBaseÚUnsupportedOperation)Úceil)Úmmap)Úlength_hint)ÚPathLikeÚstat)ÚEventÚRLockÚThread)ÚTracebackType)ÚTYPE_CHECKINGÚAnyÚBinaryIOÚCallableÚContextManagerÚDequeÚDictÚGenericÚIterableÚListÚLiteralÚ
NamedTupleÚNewTypeÚOptionalÚTextIOÚTupleÚTypeÚTypeVarÚUnion)ÚSelfé   )ÚfilesizeÚget_console)ÚConsoleÚGroupÚJustifyMethodÚRenderableType)ÚHighlighter)ÚJupyterMixin)ÚLive)ÚProgressBar)ÚSpinner)Ú	StyleType)ÚColumnÚTable)ÚTextÚTextTypeÚTaskIDÚProgressTypeÚ_Ic                      sZ   e Zd ZdZddddœ‡ fdd„Zdd	œd
d„Zdd	œdd„Zdddddœdd„Z‡  ZS )Ú_TrackThreadz)A thread to periodically update progress.ú
'Progress'z'TaskID'Úfloat)ÚprogressÚtask_idÚupdate_periodc                   s2   || _ || _|| _tƒ | _d| _tƒ jdd� d S )Nr   T)Údaemon)r@   rA   rB   r   ÚdoneÚ	completedÚsuperÚ__init__)Úselfr@   rA   rB   ©Ú	__class__© ú3E:\soccer\ml_env\Lib\site-packages\rich/progress.pyrG   C   s    z_TrackThread.__init__ÚNone©Úreturnc                 C  sn   | j }| jj}| j}d}| jj}||ƒsT| jjjrT| j}||kr |||| ƒ |}q | jj	| j | jdd� d S )Nr   T)rE   Úrefresh)
rA   r@   ÚadvancerB   rD   ÚwaitÚliveÚ
is_startedrE   Úupdate)rH   rA   rQ   rB   Úlast_completedrR   rE   rK   rK   rL   ÚrunL   s    z_TrackThread.runz'_TrackThread'c                 C  s   |   ¡  | S ©N©Ústart©rH   rK   rK   rL   Ú	__enter__Z   s    z_TrackThread.__enter__úOptional[Type[BaseException]]úOptional[BaseException]úOptional[TracebackType]©Úexc_typeÚexc_valÚexc_tbrO   c                 C  s   | j  ¡  |  ¡  d S rX   )rD   ÚsetÚjoin©rH   ra   rb   rc   rK   rK   rL   Ú__exit__^   s    
z_TrackThread.__exit__)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rG   rW   r\   rg   Ú__classcell__rK   rK   rI   rL   r=   @   s
   	r=   ú
Working...TFé
   úbar.backúbar.completeúbar.finishedú	bar.pulseçš™™™™™¹?úIterable[ProgressType]ÚstrúOptional[float]ÚintÚboolúOptional[Console]zOptional[Callable[[], float]]r?   r5   )ÚsequenceÚdescriptionÚtotalrE   Úauto_refreshÚconsoleÚ	transientÚget_timeÚrefresh_per_secondÚstyleÚcomplete_styleÚfinished_styleÚpulse_stylerB   ÚdisableÚ
show_speedrO   c              	   c  s˜   |rt dƒgng }| t|	|
||d�t|d�tdd�f¡ t||||||pLd|dœŽ}|�* |j| ||||d�E d	H  W d	  ƒ n1 sŠ0    Y  d	S )
a¥  Track progress by iterating over a sequence.

    You can also track progress of an iterable, which might require that you additionally specify ``total``.

    Args:
        sequence (Iterable[ProgressType]): Values you wish to iterate over and track progress.
        description (str, optional): Description of task show next to progress bar. Defaults to "Working".
        total: (float, optional): Total number of steps. Default is len(sequence).
        completed (int, optional): Number of steps completed so far. Defaults to 0.
        auto_refresh (bool, optional): Automatic refresh, disable to force a refresh after each iteration. Default is True.
        transient: (bool, optional): Clear the progress on exit. Defaults to False.
        console (Console, optional): Console to write to. Default creates internal Console instance.
        refresh_per_second (float): Number of times per second to refresh the progress information. Defaults to 10.
        style (StyleType, optional): Style for the bar background. Defaults to "bar.back".
        complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete".
        finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished".
        pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse".
        update_period (float, optional): Minimum time (in seconds) between calls to update(). Defaults to 0.1.
        disable (bool, optional): Disable display of progress.
        show_speed (bool, optional): Show speed if total isn't known. Defaults to True.
    Returns:
        Iterable[ProgressType]: An iterable of the values in the sequence.

    ú([progress.description]{task.description}©r‚   rƒ   r„   r…   )r‡   T)Úelapsed_when_finishedrn   ©r}   r~   r   r€   r�   r†   )r|   rE   r{   rB   N)Ú
TextColumnÚextendÚ	BarColumnÚTaskProgressColumnÚTimeRemainingColumnÚProgressÚtrack)rz   r{   r|   rE   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   rB   r†   r‡   Úcolumnsr@   rK   rK   rL   r’   h   s<    ,ÿüøÿù
ûr’   c                   @  sv  e Zd ZdZdKddddddœd	d
„Zddœdd„Zdddddœdd„Zddœdd„Zddœdd„Ze	ddœdd„ƒZ
ddœdd„Zddœdd „Ze	d!dœd"d#„ƒZe	d!dœd$d%„ƒZddœd&d'„Zddœd(d)„Zddœd*d+„ZdLddd-œd.d/„Zd0d1œd2d3„ZdMddd-œd4d5„ZdNdd6d7œd8d9„Zddœd:d;„ZdOdddd=œd>d?„Zddœd@dA„ZdBddCœdDdE„ZdFddGœdHdI„ZdJS )PÚ_Readerz9A reader that tracks progress while it's being read from.Tr   r>   r:   rx   rM   )Úhandler@   ÚtaskÚclose_handlerO   c                 C  s"   || _ || _|| _|| _d| _d S ©NF)r•   r@   r–   r—   Ú_closed)rH   r•   r@   r–   r—   rK   rK   rL   rG   ¹   s
    z_Reader.__init__z	'_Reader'rN   c                 C  s   | j  ¡  | S rX   )r•   r\   r[   rK   rK   rL   r\   Æ   s    
z_Reader.__enter__r]   r^   r_   r`   c                 C  s   |   ¡  d S rX   )Úcloserf   rK   rK   rL   rg   Ê   s    z_Reader.__exit__c                 C  s   | S rX   rK   r[   rK   rK   rL   Ú__iter__Ò   s    z_Reader.__iter__Úbytesc                 C  s$   t | jƒ}| jj| jt|ƒd� |S ©N©rQ   )Únextr•   r@   rQ   r–   Úlen)rH   ÚlinerK   rK   rL   Ú__next__Õ   s    
z_Reader.__next__c                 C  s   | j S rX   )r™   r[   rK   rK   rL   ÚclosedÚ   s    z_Reader.closedrw   c                 C  s
   | j  ¡ S rX   )r•   Úfilenor[   rK   rK   rL   r¤   Þ   s    z_Reader.filenoc                 C  s
   | j  ¡ S rX   )r•   Úisattyr[   rK   rK   rL   r¥   á   s    z_Reader.isattyru   c                 C  s   | j jS rX   )r•   Úmoder[   rK   rK   rL   r¦   ä   s    z_Reader.modec                 C  s   | j jS rX   )r•   Únamer[   rK   rK   rL   r§   è   s    z_Reader.namec                 C  s
   | j  ¡ S rX   )r•   Úreadabler[   rK   rK   rL   r¨   ì   s    z_Reader.readablec                 C  s
   | j  ¡ S rX   )r•   Úseekabler[   rK   rK   rL   r©   ï   s    z_Reader.seekablec                 C  s   dS r˜   rK   r[   rK   rK   rL   Úwritableò   s    z_Reader.writableéÿÿÿÿ)ÚsizerO   c                 C  s&   | j  |¡}| jj| jt|ƒd� |S r�   )r•   Úreadr@   rQ   r–   r    )rH   r¬   ÚblockrK   rK   rL   r­   õ   s    z_Reader.readz"Union[bytearray, memoryview, mmap])Úbc                 C  s"   | j  |¡}| jj| j|d� |S r�   )r•   Úreadintor@   rQ   r–   )rH   r¯   ÚnrK   rK   rL   r°   ú   s    z_Reader.readintoc                 C  s&   | j  |¡}| jj| jt|ƒd� |S r�   )r•   Úreadliner@   rQ   r–   r    )rH   r¬   r¡   rK   rK   rL   r²   ÿ   s    z_Reader.readlinezList[bytes])ÚhintrO   c                 C  s,   | j  |¡}| jj| jttt|ƒƒd� |S r�   )r•   Ú	readlinesr@   rQ   r–   ÚsumÚmapr    )rH   r³   ÚlinesrK   rK   rL   r´     s    z_Reader.readlinesc                 C  s   | j r| j ¡  d| _d S )NT)r—   r•   rš   r™   r[   rK   rK   rL   rš   	  s    
z_Reader.closer   )ÚoffsetÚwhencerO   c                 C  s$   | j  ||¡}| jj| j|d� |S )N©rE   )r•   Úseekr@   rU   r–   )rH   r¸   r¹   ÚposrK   rK   rL   r»     s    z_Reader.seekc                 C  s
   | j  ¡ S rX   )r•   Útellr[   rK   rK   rL   r½     s    z_Reader.tellr   )ÚsrO   c                 C  s   t dƒ‚d S )NÚwrite©r   )rH   r¾   rK   rK   rL   r¿     s    z_Reader.writezIterable[Any])r·   rO   c                 C  s   t dƒ‚d S )NÚ
writelinesrÀ   )rH   r·   rK   rK   rL   rÁ     s    z_Reader.writelinesN)T)r«   )r«   )r«   )r   )rh   ri   rj   rk   rG   r\   rg   r›   r¢   Úpropertyr£   r¤   r¥   r¦   r§   r¨   r©   rª   r­   r°   r²   r´   rš   r»   r½   r¿   rÁ   rK   rK   rK   rL   r”   ¶   s6    ûr”   c                   @  sD   e Zd ZdZddddœdd„Zddœd	d
„Zdddddœdd„ZdS )Ú_ReadContextzEA utility class to handle a context for both a reader and a progress.r>   r<   rM   )r@   ÚreaderrO   c                 C  s   || _ || _d S rX   )r@   rÄ   )rH   r@   rÄ   rK   rK   rL   rG      s    z_ReadContext.__init__rN   c                 C  s   | j  ¡  | j ¡ S rX   )r@   rZ   rÄ   r\   r[   rK   rK   rL   r\   $  s    
z_ReadContext.__enter__r]   r^   r_   r`   c                 C  s   | j  ¡  | j |||¡ d S rX   )r@   ÚstoprÄ   rg   rf   rK   rK   rL   rg   (  s    
z_ReadContext.__exit__N)rh   ri   rj   rk   rG   r\   rg   rK   rK   rK   rL   rÃ     s   rÃ   ú
Reading...)r{   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r   zContextManager[BinaryIO])Úfiler|   r{   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   rO   c             	   C  sh   |rt dƒgng }| t||	|
|d�tƒ tƒ f¡ t||||||pDd|dœŽ}|j| ||d�}t||ƒS )a  Read bytes from a file while tracking progress.

    Args:
        file (Union[str, PathLike[str], BinaryIO]): The path to the file to read, or a file-like object in binary mode.
        total (int): Total number of bytes to read.
        description (str, optional): Description of task show next to progress bar. Defaults to "Reading".
        auto_refresh (bool, optional): Automatic refresh, disable to force a refresh after each iteration. Default is True.
        transient: (bool, optional): Clear the progress on exit. Defaults to False.
        console (Console, optional): Console to write to. Default creates internal Console instance.
        refresh_per_second (float): Number of times per second to refresh the progress information. Defaults to 10.
        style (StyleType, optional): Style for the bar background. Defaults to "bar.back".
        complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete".
        finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished".
        pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse".
        disable (bool, optional): Disable display of progress.
    Returns:
        ContextManager[BinaryIO]: A context manager yielding a progress reader.

    rˆ   r‰   rn   r‹   )r|   r{   )rŒ   r�   rŽ   ÚDownloadColumnr�   r‘   Ú	wrap_filerÃ   )rÇ   r|   r{   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r“   r@   rÄ   rK   rK   rL   rÉ   2  s0    %ÿüøÿù
rÉ   r«   )r|   r{   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   ú"Union[str, 'PathLike[str]', bytes]z"Union[Literal['rt'], Literal['r']]úOptional[str]úOptional[int]zContextManager[TextIO])rÇ   r¦   Ú	bufferingÚencodingÚerrorsÚnewliner|   r{   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   rO   c                C  s   d S rX   rK   ©rÇ   r¦   rÍ   rÎ   rÏ   rÐ   r|   r{   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   rK   rK   rL   Úopens  s    rÒ   úLiteral['rb']c                C  s   d S rX   rK   rÑ   rK   rK   rL   rÒ   Œ  s    Úrú1Union[Literal['rb'], Literal['rt'], Literal['r']]z7Union[ContextManager[BinaryIO], ContextManager[TextIO]]c             
   C  sr   |rt dƒgng }| t||||d�tƒ tƒ f¡ t|||	|
||pDd|dœŽ}|j| |||||||d�}t||ƒS )a®  Read bytes from a file while tracking progress.

    Args:
        path (Union[str, PathLike[str], BinaryIO]): The path to the file to read, or a file-like object in binary mode.
        mode (str): The mode to use to open the file. Only supports "r", "rb" or "rt".
        buffering (int): The buffering strategy to use, see :func:`io.open`.
        encoding (str, optional): The encoding to use when reading in text mode, see :func:`io.open`.
        errors (str, optional): The error handling strategy for decoding errors, see :func:`io.open`.
        newline (str, optional): The strategy for handling newlines in text mode, see :func:`io.open`
        total: (int, optional): Total number of bytes to read. Must be provided if reading from a file handle. Default for a path is os.stat(file).st_size.
        description (str, optional): Description of task show next to progress bar. Defaults to "Reading".
        auto_refresh (bool, optional): Automatic refresh, disable to force a refresh after each iteration. Default is True.
        transient: (bool, optional): Clear the progress on exit. Defaults to False.
        console (Console, optional): Console to write to. Default creates internal Console instance.
        refresh_per_second (float): Number of times per second to refresh the progress information. Defaults to 10.
        style (StyleType, optional): Style for the bar background. Defaults to "bar.back".
        complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete".
        finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished".
        pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse".
        disable (bool, optional): Disable display of progress.
        encoding (str, optional): The encoding to use when reading in text mode.

    Returns:
        ContextManager[BinaryIO]: A context manager yielding a progress reader.

    rˆ   r‰   rn   r‹   )r¦   rÍ   rÎ   rÏ   rÐ   r|   r{   )rŒ   r�   rŽ   rÈ   r�   r‘   rÒ   rÃ   )rÇ   r¦   rÍ   rÎ   rÏ   rÐ   r|   r{   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r“   r@   rÄ   rK   rK   rL   rÒ   ¥  sB    1ÿüøÿù
ø
c                   @  sb   e Zd ZU dZdZded< ddddœdd	„Zd
dœdd„Zdddœdd„Ze	dddœdd„ƒZ
dS )ÚProgressColumnz3Base class for a widget to use in progress display.Nrv   Úmax_refreshúOptional[Column]rM   )Útable_columnrO   c                 C  s   || _ i | _d | _d S rX   )Ú_table_columnÚ_renderable_cacheÚ_update_time)rH   rÙ   rK   rK   rL   rG      s    zProgressColumn.__init__r6   rN   c                 C  s   | j p
tƒ S )z.Get a table column, used to build tasks table.)rÚ   r6   r[   rK   rK   rL   Úget_table_column  s    zProgressColumn.get_table_columnú'Task'r/   ©r–   rO   c                 C  sp   |  ¡ }| jdurR|jsRz| j|j \}}W n ty>   Y n0 || j |krR|S |  |¡}||f| j|j< |S )a  Called by the Progress object to return a renderable for the given task.

        Args:
            task (Task): An object containing information regarding the task.

        Returns:
            RenderableType: Anything renderable (including str).
        N)r€   r×   rE   rÛ   ÚidÚKeyErrorÚrender)rH   r–   Úcurrent_timeÚ	timestampÚ
renderablerK   rK   rL   Ú__call__	  s    	
zProgressColumn.__call__c                 C  s   dS )z"Should return a renderable object.NrK   ©rH   r–   rK   rK   rL   râ      s    zProgressColumn.render)N)rh   ri   rj   rk   r×   Ú__annotations__rG   rÝ   ræ   r   râ   rK   rK   rK   rL   rÖ   û  s   
rÖ   c                      s@   e Zd ZdZdddœdddœ‡ fdd	„Zd
ddœdd„Z‡  ZS )ÚRenderableColumnz�A column to insert an arbitrary column.

    Args:
        renderable (RenderableType, optional): Any renderable. Defaults to empty string.
    Ú N©rÙ   r/   rØ   )rå   rÙ   c                  s   || _ tƒ j|d� d S ©Nrë   )rå   rF   rG   )rH   rå   rÙ   rI   rK   rL   rG   ,  s    zRenderableColumn.__init__rÞ   rß   c                 C  s   | j S rX   )rå   rç   rK   rK   rL   râ   2  s    zRenderableColumn.render)rê   ©rh   ri   rj   rk   rG   râ   rl   rK   rK   rI   rL   ré   %  s    ÿÿré   c                      sV   e Zd ZdZdddd	d
ddœ‡ fdd„Zdddd	ddœdd„Zdddœdd„Z‡  ZS )ÚSpinnerColumna‰  A column with a 'spinner' animation.

    Args:
        spinner_name (str, optional): Name of spinner animation. Defaults to "dots".
        style (StyleType, optional): Style of spinner. Defaults to "progress.spinner".
        speed (float, optional): Speed factor of spinner. Defaults to 1.0.
        finished_text (TextType, optional): Text used when task is finished. Defaults to " ".
    Údotsúprogress.spinnerç      ð?ú Nru   zOptional[StyleType]r?   r9   rØ   )Úspinner_namer‚   ÚspeedÚfinished_textrÙ   c                   s<   t |||d�| _t|tƒr$t |¡n|| _tƒ j|d� d S )N©r‚   rô   rë   )	r4   ÚspinnerÚ
isinstanceru   r8   Úfrom_markuprõ   rF   rG   )rH   ró   r‚   rô   rõ   rÙ   rI   rK   rL   rG   @  s    ÿýzSpinnerColumn.__init__rM   )ró   Úspinner_stylerô   rO   c                 C  s   t |||d�| _dS )a-  Set a new spinner.

        Args:
            spinner_name (str): Spinner name, see python -m rich.spinner.
            spinner_style (Optional[StyleType], optional): Spinner style. Defaults to "progress.spinner".
            speed (float, optional): Speed factor of spinner. Defaults to 1.0.
        rö   N)r4   r÷   )rH   ró   rú   rô   rK   rK   rL   Úset_spinnerP  s    zSpinnerColumn.set_spinnerrÞ   r/   rß   c                 C  s    |j r| jn| j | ¡ ¡}|S rX   )Úfinishedrõ   r÷   râ   r€   )rH   r–   ÚtextrK   rK   rL   râ   _  s
    ÿýzSpinnerColumn.render)rï   rð   rñ   rò   N)rð   rñ   )rh   ri   rj   rk   rG   rû   râ   rl   rK   rK   rI   rL   rî   6  s        ú  ürî   c                	      sD   e Zd ZdZddddd	d
dddœ‡ fdd„Zdddœdd„Z‡  ZS )rŒ   zA column containing text.ÚnoneÚleftTNru   r5   r.   rx   úOptional[Highlighter]rØ   rM   )Útext_formatr‚   ÚjustifyÚmarkupÚhighlighterrÙ   rO   c                   s:   || _ || _|| _|| _|| _tƒ j|p0tdd�d� d S )NT©Úno_wraprë   )r  r  r‚   r  r  rF   rG   r6   )rH   r  r‚   r  r  r  rÙ   rI   rK   rL   rG   k  s    	zTextColumn.__init__rÞ   r8   rß   c                 C  sR   | j j|d�}| jr*tj|| j| jd�}nt|| j| jd�}| jrN| j |¡ |S ©N©r–   )r‚   r  )	r  Úformatr  r8   rù   r‚   r  r  Ú	highlight)rH   r–   Ú_textrý   rK   rK   rL   râ   {  s    zTextColumn.render)rþ   rÿ   TNNrí   rK   rK   rI   rL   rŒ   h  s        ù rŒ   c                	      sD   e Zd ZdZddd	d	d	d	d
ddœ‡ fdd„Zdddœdd„Z‡  ZS )rŽ   a  Renders a visual progress bar.

    Args:
        bar_width (Optional[int], optional): Width of bar or None for full width. Defaults to 40.
        style (StyleType, optional): Style for the bar background. Defaults to "bar.back".
        complete_style (StyleType, optional): Style for the completed bar. Defaults to "bar.complete".
        finished_style (StyleType, optional): Style for a finished bar. Defaults to "bar.finished".
        pulse_style (StyleType, optional): Style for pulsing bars. Defaults to "bar.pulse".
    é(   ro   rp   rq   rr   NrÌ   r5   rØ   rM   )Ú	bar_widthr‚   rƒ   r„   r…   rÙ   rO   c                   s0   || _ || _|| _|| _|| _tƒ j|d� d S rì   )r  r‚   rƒ   r„   r…   rF   rG   )rH   r  r‚   rƒ   r„   r…   rÙ   rI   rK   rL   rG   ‘  s    	zBarColumn.__init__rÞ   r3   rß   c                 C  s^   t |jdurtd|jƒndtd|jƒ| jdu r2dn
td| jƒ|j | ¡ | j| j| j	| j
d�	S )z&Gets a progress bar widget for a task.Nr   r)   )	r|   rE   ÚwidthÚpulseÚanimation_timer‚   rƒ   r„   r…   )r3   r|   ÚmaxrE   r  Ústartedr€   r‚   rƒ   r„   r…   rç   rK   rK   rL   râ   ¡  s    
÷zBarColumn.render)r  ro   rp   rq   rr   Nrí   rK   rK   rI   rL   rŽ   †  s         ù rŽ   c                   @  s    e Zd ZdZdddœdd„ZdS )ÚTimeElapsedColumnzRenders time elapsed.rÞ   r8   rß   c                 C  sJ   |j r|jn|j}|du r&tddd�S ttdt|ƒƒd�}tt|ƒdd�S )zShow time elapsed.Nú-:--:--úprogress.elapsed©r‚   r   )Úseconds)rü   Úfinished_timeÚelapsedr8   r	   r  rw   ru   )rH   r–   r  ÚdeltarK   rK   rL   râ   ³  s
    zTimeElapsedColumn.renderN©rh   ri   rj   rk   râ   rK   rK   rK   rL   r  °  s   r  c                      s\   e Zd ZdZdd	d	d
dddddddœ	‡ fdd„Zedddœdd„ƒZdddœdd„Z‡  ZS )r�   a  Show task progress as a percentage.

    Args:
        text_format (str, optional): Format for percentage display. Defaults to "[progress.percentage]{task.percentage:>3.0f}%".
        text_format_no_percentage (str, optional): Format if percentage is unknown. Defaults to "".
        style (StyleType, optional): Style of output. Defaults to "none".
        justify (JustifyMethod, optional): Text justification. Defaults to "left".
        markup (bool, optional): Enable markup. Defaults to True.
        highlighter (Optional[Highlighter], optional): Highlighter to apply to output. Defaults to None.
        table_column (Optional[Column], optional): Table Column to use. Defaults to None.
        show_speed (bool, optional): Show speed if total is unknown. Defaults to False.
    ú-[progress.percentage]{task.percentage:>3.0f}%rê   rþ   rÿ   TNFru   r5   r.   rx   r   rØ   rM   )	r  Útext_format_no_percentager‚   r  r  r  rÙ   r‡   rO   c	           	        s(   || _ || _tƒ j||||||d� d S )N)r  r‚   r  r  r  rÙ   )r  r‡   rF   rG   )	rH   r  r  r‚   r  r  r  rÙ   r‡   rI   rK   rL   rG   Ê  s    úzTaskProgressColumn.__init__rv   r8   )rô   rO   c                 C  sN   |du rt ddd�S t t|ƒg d¢d¡\}}|| }t |d›|› d�dd�S )	zµRender the speed in iterations per second.

        Args:
            task (Task): A Task object.

        Returns:
            Text: Text object containing the task speed.
        Nrê   zprogress.percentager  )rê   u   Ã—10Â³u   Ã—10â�¶u   Ã—10â�¹u   Ã—10Â¹Â²éè  z.1fz it/s)r8   r*   Úpick_unit_and_suffixrw   )Úclsrô   ÚunitÚsuffixÚ
data_speedrK   rK   rL   Úrender_speedà  s    
ýzTaskProgressColumn.render_speedrÞ   rß   c                 C  sˆ   |j d u r"| jr"|  |jp|j¡S |j d u r2| jn| j}|j|d�}| jr`t	j
|| j| jd�}nt	|| j| jd�}| jr„| j |¡ |S r  )r|   r‡   r$  Úfinished_speedrô   r  r  r	  r  r8   rù   r‚   r  r  r
  )rH   r–   r  r  rý   rK   rK   rL   râ   ô  s    ÿzTaskProgressColumn.render)r  rê   rþ   rÿ   TNNF)	rh   ri   rj   rk   rG   Úclassmethodr$  râ   rl   rK   rK   rI   rL   r�   ¼  s           ÷$r�   c                      s@   e Zd ZdZdZdddddœ‡ fdd	„Zd
ddœdd„Z‡  ZS )r�   a  Renders estimated time remaining.

    Args:
        compact (bool, optional): Render MM:SS when time remaining is less than an hour. Defaults to False.
        elapsed_when_finished (bool, optional): Render time elapsed when the task is finished. Defaults to False.
    ç      à?FNrx   rØ   )ÚcompactrŠ   rÙ   c                   s   || _ || _tƒ j|d� d S rì   )r(  rŠ   rF   rG   )rH   r(  rŠ   rÙ   rI   rK   rL   rG     s    zTimeRemainingColumn.__init__rÞ   r8   rß   c                 C  sº   | j r|jr|j}d}n
|j}d}|jdu r8td|d�S |du rVt| jrLdnd|d�S tt|ƒdƒ\}}t|dƒ\}}| jr”|s”|d	›d
|d	›�}n|d›d
|d	›d
|d	›�}t||d�S )zShow time remaining.r  zprogress.remainingNrê   r  z--:--r  é<   Ú02dú:Úd)	rŠ   rü   r  Útime_remainingr|   r8   r(  Údivmodrw   )rH   r–   Ú	task_timer‚   Úminutesr  ÚhoursÚ	formattedrK   rK   rL   râ     s    

zTimeRemainingColumn.render)FFN)rh   ri   rj   rk   r×   rG   râ   rl   rK   rK   rI   rL   r�     s      ü
r�   c                   @  s    e Zd ZdZdddœdd„ZdS )ÚFileSizeColumnzRenders completed filesize.rÞ   r8   rß   c                 C  s   t  t|jƒ¡}t|dd�S )úShow data completed.zprogress.filesizer  )r*   Údecimalrw   rE   r8   ©rH   r–   Ú	data_sizerK   rK   rL   râ   7  s    zFileSizeColumn.renderNr  rK   rK   rK   rL   r3  4  s   r3  c                   @  s    e Zd ZdZdddœdd„ZdS )ÚTotalFileSizeColumnzRenders total filesize.rÞ   r8   rß   c                 C  s*   |j durt t|j ƒ¡nd}t|dd�S )r4  Nrê   zprogress.filesize.totalr  )r|   r*   r5  rw   r8   r6  rK   rK   rL   râ   @  s    zTotalFileSizeColumn.renderNr  rK   rK   rK   rL   r8  =  s   r8  c                      s:   e Zd ZdZddddœ‡ fdd„Zd	d
dœdd„Z‡  ZS )ÚMofNCompleteColumnaH  Renders completed count/total, e.g. '  10/1000'.

    Best for bounded tasks with int quantities.

    Space pads the completed count so that progress length does not change as task progresses
    past powers of 10.

    Args:
        separator (str, optional): Text to separate completed and total values. Defaults to "/".
    ú/Nru   rØ   )Ú	separatorrÙ   c                   s   || _ tƒ j|d� d S rì   )r;  rF   rG   )rH   r;  rÙ   rI   rK   rL   rG   R  s    zMofNCompleteColumn.__init__rÞ   r8   rß   c                 C  sP   t |jƒ}|jdurt |jƒnd}tt|ƒƒ}t||› d�›| j› |› �dd�S )zShow completed/total.Nú?r,  úprogress.downloadr  )rw   rE   r|   r    ru   r8   r;  )rH   r–   rE   r|   Útotal_widthrK   rK   rL   râ   V  s    
þzMofNCompleteColumn.render)r:  Nrí   rK   rK   rI   rL   r9  F  s   r9  c                      s<   e Zd ZdZdddddœ‡ fdd	„Zd
ddœdd„Z‡  ZS )rÈ   z¤Renders file size downloaded and total, e.g. '0.5/2.3 GB'.

    Args:
        binary_units (bool, optional): Use binary units, KiB, MiB etc. Defaults to False.
    FNrx   rØ   rM   )Úbinary_unitsrÙ   rO   c                   s   || _ tƒ j|d� d S rì   )r?  rF   rG   )rH   r?  rÙ   rI   rK   rL   rG   h  s    zDownloadColumn.__init__rÞ   r8   rß   c                 C  sÔ   t |jƒ}|jdurt |jƒn|}| jr@t |g d¢d¡\}}nt |g d¢d¡\}}|dkrbdnd}|| }|d|› d	�›}|jdur¬t |jƒ}	|	| }
|
d|› d	�›}nd
}|› d|› d|› �}t|dd�}|S )z.Calculate common unit for completed and total.N)	rœ   ÚKiBÚMiBÚGiBÚTiBÚPiBÚEiBÚZiBÚYiBi   )	rœ   ÚkBÚMBÚGBÚTBÚPBÚEBÚZBÚYBr  r)   r   z,.Úfr<  r:  rò   r=  r  )rw   rE   r|   r?  r*   r  r8   )rH   r–   rE   Ú unit_and_suffix_calculation_baser!  r"  Ú	precisionÚcompleted_ratioÚcompleted_strr|   Útotal_ratioÚ	total_strÚdownload_statusÚdownload_textrK   rK   rL   râ   n  s2    
ÿý
ý

zDownloadColumn.render)FNrí   rK   rK   rI   rL   rÈ   a  s    ÿrÈ   c                   @  s    e Zd ZdZdddœdd„ZdS )ÚTransferSpeedColumnz&Renders human readable transfer speed.rÞ   r8   rß   c                 C  s@   |j p
|j}|du r tddd�S t t|ƒ¡}t|› d�dd�S )zShow data transfer speed.Nr<  zprogress.data.speedr  z/s)r%  rô   r8   r*   r5  rw   )rH   r–   rô   r#  rK   rK   rL   râ   •  s
    zTransferSpeedColumn.renderNr  rK   rK   rK   rL   rY  ’  s   rY  c                   @  s"   e Zd ZU dZded< ded< dS )ÚProgressSamplez$Sample of progress for a given time.r?   rä   rE   N)rh   ri   rj   rk   rè   rK   rK   rK   rL   rZ  ž  s   
rZ  c                   @  sd  e Zd ZU dZded< ded< ded< ded	< d
ed< dZded< dZded< eed�Z	ded< edddd�Z
ded< edddd�Zded< dZded< edd„ ddd�Zded< eded�Zded < dd!œd"d#„Zedd!œd$d%„ƒZedd!œd&d'„ƒZedd!œd(d)„ƒZedd!œd*d+„ƒZedd!œd,d-„ƒZedd!œd.d/„ƒZedd!œd0d1„ƒZd2d!œd3d4„ZdS )5ÚTaskz…Information regarding a progress task.

    This object should be considered read-only outside of the :class:`~Progress` class.

    r:   rà   ru   r{   rv   r|   r?   rE   ÚGetTimeCallableÚ	_get_timeNr  Trx   Úvisible)Údefault_factoryzDict[str, Any]ÚfieldsF)ÚdefaultÚinitÚreprÚ
start_timeÚ	stop_timer%  c                   C  s
   t dd�S )Nr  )Úmaxlenr   rK   rK   rK   rL   Ú<lambda>Ñ  ó    zTask.<lambda>)r_  rb  rc  zDeque[ProgressSample]Ú	_progress)rc  r_  r   Ú_lockrN   c                 C  s   |   ¡ S )z(float: Get the current time, in seconds.)r]  r[   rK   rK   rL   r€   ×  s    zTask.get_timec                 C  s
   | j duS )z#bool: Check if the task as started.N)rd  r[   rK   rK   rL   r  Û  s    zTask.startedc                 C  s   | j du rdS | j | j S )zPOptional[float]: Get the number of steps remaining, if a non-None total was set.N©r|   rE   r[   rK   rK   rL   Ú	remainingà  s    
zTask.remainingc                 C  s2   | j du rdS | jdur$| j| j  S |  ¡ | j  S )z]Optional[float]: Time elapsed since task was started, or ``None`` if the task hasn't started.N)rd  re  r€   r[   rK   rK   rL   r  ç  s
    

zTask.elapsedc                 C  s
   | j duS )zCheck if the task has finished.N)r  r[   rK   rK   rL   rü   ð  s    zTask.finishedc                 C  s.   | j s
dS | j| j  d }tdtd|ƒƒ}|S )zOfloat: Get progress of task as a percentage. If a None total was set, returns 0ç        ç      Y@)r|   rE   Úminr  )rH   rE   rK   rK   rL   Ú
percentageõ  s
    zTask.percentagec                 C  s¬   | j du rdS | j�„ | j}|s0W d  ƒ dS |d j|d j }|dkr\W d  ƒ dS t|ƒ}t|ƒ tdd„ |D ƒƒ}|| }|W  d  ƒ S 1 sž0    Y  dS )z=Optional[float]: Get the estimated speed in steps per second.Nr«   r   c                 s  s   | ]}|j V  qd S rX   rº   )Ú.0ÚsamplerK   rK   rL   Ú	<genexpr>  rh  zTask.speed.<locals>.<genexpr>)rd  rj  ri  rä   ÚiterrŸ   rµ   )rH   r@   Ú
total_timeÚiter_progressÚtotal_completedrô   rK   rK   rL   rô   þ  s    
z
Task.speedc                 C  s:   | j r
dS | j}|sdS | j}|du r*dS t|| ƒ}|S )zJOptional[float]: Get estimated time to completion, or ``None`` if no data.rm  N)rü   rô   rl  r   )rH   rô   rl  ÚestimaterK   rK   rL   r-    s    zTask.time_remainingrM   c                 C  s   | j  ¡  d| _d| _dS )zReset progress.N)ri  Úclearr  r%  r[   rK   rK   rL   Ú_reset  s    
zTask._reset)rh   ri   rj   rk   rè   r  r^  r   Údictr`  rd  re  r%  ri  r   rj  r€   rÂ   r  rl  r  rü   rp  rô   r-  rz  rK   rK   rK   rL   r[  §  s@   

ÿr[  c                   @  s°  e Zd ZdZdddddddddddœ
dd	d
ddd
d
d
dd
d
ddœdd„Zeddœdd„ƒZeddœdd„ƒZeddœdd„ƒZ	eddœdd„ƒZ
ed
dœdd„ƒZddœd d!„Zddœd"d#„Zd$dœd%d&„Zd'd(d)dd*œd+d,„Zdwd0d1d2d3d4dd0d5œd6d7„Zdxdd8d9œd:d;d3d4d:d<œd=d>„Zejdyddd8d@œdAdBd2dCdCdCd;d3d4d:dDœ
dEdF„ƒZejdzddd8d@œdAdGd2dCdCdCd;d3d4dHdDœ
dIdF„ƒZd{ddd8d@œdAdKd2dCdCdCd;d3d4dLdDœ
dMdF„ZdNddOœdPdQ„ZdNddOœdRdS„ZdddddddTœdNd1d1d1dCdUd
dVddWœ	dXdY„Zddd-dddZœdNd
d1d2dUdCdVdd[œd\d]„Zd|dNddd_œd`da„Zddœdbdc„Zdddœdedf„Zdgdœdhdi„Zdjdkdlœdmdn„Zdddœdodp„Zd}d4d
d1d2d
dVdNdrœdsdt„ZdNddOœdudv„Z dS )~r‘   ad  Renders an auto-updating progress bar(s).

    Args:
        console (Console, optional): Optional Console instance. Defaults to an internal Console instance writing to stdout.
        auto_refresh (bool, optional): Enable auto refresh. If disabled, you will need to call `refresh()`.
        refresh_per_second (float, optional): Number of times per second to refresh the progress information. Defaults to 10.
        speed_estimate_period: (float, optional): Period (in seconds) used to calculate the speed estimate. Defaults to 30.
        transient: (bool, optional): Clear the progress on exit. Defaults to False.
        redirect_stdout: (bool, optional): Enable redirection of stdout, so ``print`` may be used. Defaults to True.
        redirect_stderr: (bool, optional): Enable redirection of stderr. Defaults to True.
        get_time: (Callable, optional): A callable that gets the current time, or None to use Console.get_time. Defaults to None.
        disable (bool, optional): Disable progress display. Defaults to False
        expand (bool, optional): Expand tasks table to fit width. Defaults to False.
    NTrn   g      >@F)
r~   r}   r�   Úspeed_estimate_periodr   Úredirect_stdoutÚredirect_stderrr€   r†   ÚexpandzUnion[str, ProgressColumn]ry   rx   r?   zOptional[GetTimeCallable]rM   )r“   r~   r}   r�   r|  r   r}  r~  r€   r†   r  rO   c       
      	   G  sŽ   |dksJ dƒ‚t ƒ | _|p"|  ¡ | _|| _|	| _|
| _i | _tdƒ| _	t
|pRtƒ |||||| jd�| _|pr| jj| _| jj| _| jj| _d S )Nr   zrefresh_per_second must be > 0)r~   r}   r�   r   r}  r~  Úget_renderable)r   rj  Úget_default_columnsr“   r|  r†   r  Ú_tasksr:   Ú_task_indexr2   r+   r€  rS   r~   r€   ÚprintÚlog)rH   r~   r}   r�   r|  r   r}  r~  r€   r†   r  r“   rK   rK   rL   rG   5  s(    
ù	
zProgress.__init__zTuple[ProgressColumn, ...]rN   c                 C  s   t dƒtƒ tƒ tƒ fS )a§  Get the default columns used for a new Progress instance:
           - a text column for the description (TextColumn)
           - the bar itself (BarColumn)
           - a text column showing completion percentage (TextColumn)
           - an estimated-time-remaining column (TimeRemainingColumn)
        If the Progress instance is created without passing a columns argument,
        the default columns defined here will be used.

        You can also create a Progress instance using custom columns before
        and/or after the defaults, as in this example:

            progress = Progress(
                SpinnerColumn(),
                *Progress.get_default_columns(),
                "Elapsed:",
                TimeElapsedColumn(),
            )

        This code shows the creation of a Progress display, containing
        a spinner to the left, the default columns, and a labeled elapsed
        time column.
        rˆ   )rŒ   rŽ   r�   r�   )r   rK   rK   rL   r�  Y  s
    üzProgress.get_default_columnsr,   c                 C  s   | j jS rX   )rS   r~   r[   rK   rK   rL   r~   x  s    zProgress.consolez
List[Task]c                 C  s8   | j � t| j ¡ ƒW  d  ƒ S 1 s*0    Y  dS )zGet a list of Task instances.N)rj  Úlistr‚  Úvaluesr[   rK   rK   rL   Útasks|  s    zProgress.taskszList[TaskID]c                 C  s8   | j � t| j ¡ ƒW  d  ƒ S 1 s*0    Y  dS )zA list of task IDs.N)rj  r†  r‚  Úkeysr[   rK   rK   rL   Útask_ids‚  s    zProgress.task_idsc                 C  sX   | j �> | jsW d  ƒ dS tdd„ | j ¡ D ƒƒW  d  ƒ S 1 sJ0    Y  dS )z'Check if all tasks have been completed.NTc                 s  s   | ]}|j V  qd S rX   )rü   )rq  r–   rK   rK   rL   rs  Ž  rh  z$Progress.finished.<locals>.<genexpr>)rj  r‚  Úallr‡  r[   rK   rK   rL   rü   ˆ  s    zProgress.finishedc                 C  s   | j s| jjdd� dS )zStart the progress display.T)rP   N)r†   rS   rZ   r[   rK   rK   rL   rZ   �  s    zProgress.startc                 C  s.   | j s*| j ¡  | jjs*| jjs*| j ¡  dS )zStop the progress display.N)r†   rS   rÅ   r~   Úis_interactiveÚ
is_jupyterr„  r[   rK   rK   rL   rÅ   •  s    
zProgress.stopr(   c                 C  s   |   ¡  | S rX   rY   r[   rK   rK   rL   r\   œ  s    zProgress.__enter__r]   r^   r_   r`   c                 C  s   |   ¡  d S rX   )rÅ   rf   rK   rK   rL   rg      s    zProgress.__exit__r   rm   rs   rt   rv   rw   zOptional[TaskID]ru   )rz   r|   rE   rA   r{   rB   rO   c                 c  sÆ   |du rt t|ƒƒpd}|du r2| j|||d�}n| j|||d� | jjr–t| ||ƒ�.}|D ]}|V  | jd7  _q\W d  ƒ qÂ1 sŠ0    Y  n,| j}	| j	}
|D ]}|V  |	|dƒ |
ƒ  q¦dS )aC  Track progress by iterating over a sequence.

        You can also track progress of an iterable, which might require that you additionally specify ``total``.

        Args:
            sequence (Iterable[ProgressType]): Values you want to iterate over and track progress.
            total: (float, optional): Total number of steps. Default is len(sequence).
            completed (int, optional): Number of steps completed so far. Defaults to 0.
            task_id: (TaskID): Task to track. Default is new task.
            description: (str, optional): Description of task, if new task is created.
            update_period (float, optional): Minimum time (in seconds) between calls to update(). Defaults to 0.1.

        Returns:
            Iterable[ProgressType]: An iterable of values taken from the provided sequence.
        Nrk  r)   )
r?   r   Úadd_taskrU   rS   r}   r=   rE   rQ   rP   )rH   rz   r|   rE   rA   r{   rB   Útrack_threadÚvaluerQ   rP   rK   rK   rL   r’   ¨  s     0
zProgress.trackrÆ   )rA   r{   r   rÌ   )rÇ   r|   rA   r{   rO   c                C  s’   d}|dur|}n:|durL| j � | j| j}W d  ƒ n1 sB0    Y  |du r\tdƒ‚|du rt| j||d�}n| j||d� t|| |dd�S )aj  Track progress file reading from a binary file.

        Args:
            file (BinaryIO): A file-like object opened in binary mode.
            total (int, optional): Total number of bytes to read. This must be provided unless a task with a total is also given.
            task_id (TaskID): Task to track. Default is new task.
            description (str, optional): Description of task, if new task is created.

        Returns:
            BinaryIO: A readable file-like object in binary mode.

        Raises:
            ValueError: When no total value can be extracted from the arguments or the task.
        Nz?unable to get the total number of bytes, please specify 'total'©r|   F©r—   )rj  r‚  r|   Ú
ValueErrorrŽ  rU   r”   )rH   rÇ   r|   rA   r{   Útotal_bytesrK   rK   rL   rÉ   Õ  s    *ÿzProgress.wrap_filer«   )r|   rA   r{   rÊ   rÓ   rË   )
rÇ   r¦   rÍ   rÎ   rÏ   rÐ   r|   rA   r{   rO   c          
      C  s   d S rX   rK   ©
rH   rÇ   r¦   rÍ   rÎ   rÏ   rÐ   r|   rA   r{   rK   rK   rL   rÒ   ÿ  s    zProgress.openz"Union[Literal['r'], Literal['rt']]r#   c          
      C  s   d S rX   rK   r•  rK   rK   rL   rÒ     s    rÔ   rÕ   zUnion[BinaryIO, TextIO]c                C  sð   d  t|dd�¡}
|
dvr(td|›�ƒ‚|dk}|
dkrR|dkrRt dt¡ d	}n&|
d
v rx|dkrltdƒ‚n|dkrxd	}|du rŠt|ƒj}|du r¢| j|	|d�}n| j	||d� t
j|d|d�}t|| |dd�}|dv rìt
j|||||d�S |S )a#  Track progress while reading from a binary file.

        Args:
            path (Union[str, PathLike[str]]): The path to the file to read.
            mode (str): The mode to use to open the file. Only supports "r", "rb" or "rt".
            buffering (int): The buffering strategy to use, see :func:`io.open`.
            encoding (str, optional): The encoding to use when reading in text mode, see :func:`io.open`.
            errors (str, optional): The error handling strategy for decoding errors, see :func:`io.open`.
            newline (str, optional): The strategy for handling newlines in text mode, see :func:`io.open`.
            total (int, optional): Total number of bytes to read. If none given, os.stat(path).st_size is used.
            task_id (TaskID): Task to track. Default is new task.
            description (str, optional): Description of task, if new task is created.

        Returns:
            BinaryIO: A readable file-like object in binary mode.

        Raises:
            ValueError: When an invalid mode is given.
        rê   F)Úreverse)ÚbrÚrtrÔ   zinvalid mode r)   r—  zaline buffering (buffering=1) isn't supported in binary mode, the default buffer size will be usedr«   )r˜  rÔ   r   zcan't have unbuffered text I/ONr‘  Úrb)rÍ   Tr’  )rÔ   r˜  )rÎ   rÏ   rÐ   Úline_buffering)re   Úsortedr“  ÚwarningsÚwarnÚRuntimeWarningr   Úst_sizerŽ  rU   ÚiorÒ   r”   ÚTextIOWrapper)rH   rÇ   r¦   rÍ   rÎ   rÏ   rÐ   r|   rA   r{   Ú_moderš  r•   rÄ   rK   rK   rL   rÒ     s>    !þ

ûr:   )rA   rO   c                 C  sH   | j �. | j| }|jdu r&|  ¡ |_W d  ƒ n1 s:0    Y  dS )zéStart a task.

        Starts a task (used when calculating elapsed time). You may need to call this manually,
        if you called ``add_task`` with ``start=False``.

        Args:
            task_id (TaskID): ID of task.
        N)rj  r‚  rd  r€   )rH   rA   r–   rK   rK   rL   Ú
start_taskl  s    	

zProgress.start_taskc                 C  sR   | j �8 | j| }|  ¡ }|jdu r*||_||_W d  ƒ n1 sD0    Y  dS )z†Stop a task.

        This will freeze the elapsed time on the task.

        Args:
            task_id (TaskID): ID of task.
        N)rj  r‚  r€   rd  re  )rH   rA   r–   rã   rK   rK   rL   Ú	stop_taskz  s    

zProgress.stop_task)r|   rE   rQ   r{   r^  rP   zOptional[bool]r   )	rA   r|   rE   rQ   r{   r^  rP   r`  rO   c                K  s@  | j �� | j| }	|	j}
|dur:||	jkr:||	_|	 ¡  |durP|	 j|7  _|dur^||	_|durl||	_|durz||	_|	j |¡ |	j|
 }|  	¡ }|| j
 }|	j}|j}|rÈ|d j|k rÈ|ƒ  q®|dkrà| t||ƒ¡ |	jdu�r|	j|	jk�r|	jdu �r|	j|	_W d  ƒ n1 �s$0    Y  |�r<|  ¡  dS )a˜  Update information associated with a task.

        Args:
            task_id (TaskID): Task id (returned by add_task).
            total (float, optional): Updates task.total if not None.
            completed (float, optional): Updates task.completed if not None.
            advance (float, optional): Add a value to task.completed if not None.
            description (str, optional): Change task description if not None.
            visible (bool, optional): Set visible flag if not None.
            refresh (bool): Force a refresh of progress information. Default is False.
            **fields (Any): Additional data fields required for rendering.
        Nr   )rj  r‚  rE   r|   rz  r{   r^  r`  rU   r€   r|  ri  Úpoplefträ   ÚappendrZ  r  r  rP   )rH   rA   r|   rE   rQ   r{   r^  rP   r`  r–   Úcompleted_startÚupdate_completedrã   Úold_sample_timeri  r¥  rK   rK   rL   rU   ‰  sB    



ÿ
þý(zProgress.update)rZ   r|   rE   r^  r{   )rA   rZ   r|   rE   r^  r{   r`  rO   c          
      K  sš   |   ¡ }| j�p | j| }	|	 ¡  |r*|nd|	_|dur>||	_||	_|durR||	_|r\||	_|durj||	_	d|	_
W d  ƒ n1 s„0    Y  |  ¡  dS )ax  Reset a task so completed is 0 and the clock is reset.

        Args:
            task_id (TaskID): ID of task.
            start (bool, optional): Start the task after reset. Defaults to True.
            total (float, optional): New total steps in task, or None to use current total. Defaults to None.
            completed (int, optional): Number of steps completed. Defaults to 0.
            visible (bool, optional): Set visible flag if not None.
            description (str, optional): Change task description if not None. Defaults to None.
            **fields (str): Additional data fields required for rendering.
        N)r€   rj  r‚  rz  rd  r|   rE   r^  r`  r{   r  rP   )
rH   rA   rZ   r|   rE   r^  r{   r`  rã   r–   rK   rK   rL   ÚresetÆ  s     
$zProgress.resetr)   )rA   rQ   rO   c           
      C  sÞ   |   ¡ }| j�¼ | j| }|j}| j|7  _|j| }|| j }|j}|j}	|rh|d j|k rh|	ƒ  qNt|ƒdkr||	ƒ  qh| 	t
||ƒ¡ |jdur¼|j|jkr¼|jdu r¼|j|_|j|_W d  ƒ n1 sÐ0    Y  dS )z«Advance task by a number of steps.

        Args:
            task_id (TaskID): ID of task.
            advance (float): Number of steps to advance. Default is 1.
        r   r  N)r€   rj  r‚  rE   r|  ri  r¥  rä   r    r¦  rZ  r|   r  r  rô   r%  )
rH   rA   rQ   rã   r–   r§  r¨  r©  ri  r¥  rK   rK   rL   rQ   í  s,    


ÿ
þýzProgress.advancec                 C  s   | j s| jjr| j ¡  dS )z*Refresh (render) the progress information.N)r†   rS   rT   rP   r[   rK   rK   rL   rP     s    zProgress.refreshr/   c                 C  s   t |  ¡ Ž }|S )z*Get a renderable for the progress display.)r-   Úget_renderables)rH   rå   rK   rK   rL   r€    s    zProgress.get_renderablezIterable[RenderableType]c                 c  s   |   | j¡}|V  dS )z5Get a number of renderables for the progress display.N)Úmake_tasks_tablerˆ  )rH   ÚtablerK   rK   rL   r«    s    zProgress.get_renderableszIterable[Task]r7   )rˆ  rO   c                   sR   dd„ | j D ƒ}tj|d| jdœŽ}|D ]$‰ ˆ jr(|j‡ fdd„| j D ƒŽ  q(|S )z×Get a table to render the Progress display.

        Args:
            tasks (Iterable[Task]): An iterable of Task instances, one per row of the table.

        Returns:
            Table: A table instance.
        c                 s  s.   | ]&}t |tƒrtd d�n
| ¡  ¡ V  qdS )Tr  N)rø   ru   r6   rÝ   Úcopy)rq  Ú_columnrK   rK   rL   rs  #  s   ýÿz,Progress.make_tasks_table.<locals>.<genexpr>)r   r)   )Úpaddingr  c                 3  s,   | ]$}t |tƒr|jˆ d �n|ˆ ƒV  qdS )r  N)rø   ru   r	  )rq  Úcolumnr  rK   rL   rs  0  s   ýÿ)r“   r7   Úgridr  r^  Úadd_row)rH   rˆ  Útable_columnsr­  rK   r  rL   r¬    s    	ú
úÿ
zProgress.make_tasks_tablec                 C  s2   | j � |  ¡ W  d  ƒ S 1 s$0    Y  dS )z+Makes the Progress class itself renderable.N)rj  r€  r[   rK   rK   rL   Ú__rich__;  s    zProgress.__rich__rn  )r{   rZ   r|   rE   r^  r`  rO   c           	      K  s†   | j �d t| j|||||| j| j d�}|| j| j< |rB|  | j¡ | j}tt| jƒd ƒ| _W d  ƒ n1 sp0    Y  |  ¡  |S )a  Add a new 'task' to the Progress display.

        Args:
            description (str): A description of the task.
            start (bool, optional): Start the task immediately (to calculate elapsed time). If set to False,
                you will need to call `start` manually. Defaults to True.
            total (float, optional): Number of total steps in the progress if known.
                Set to None to render a pulsing animation. Defaults to 100.
            completed (int, optional): Number of steps completed so far. Defaults to 0.
            visible (bool, optional): Enable display of the task. Defaults to True.
            **fields (str): Additional data fields required for rendering.

        Returns:
            TaskID: An ID you can use when calling `update`.
        )r^  r`  r]  rj  r)   N)	rj  r[  rƒ  r€   r‚  r£  r:   rw   rP   )	rH   r{   rZ   r|   rE   r^  r`  r–   Únew_task_indexrK   rK   rL   rŽ  @  s$    ø
2zProgress.add_taskc                 C  s2   | j � | j|= W d  ƒ n1 s$0    Y  dS )z]Delete a task if it exists.

        Args:
            task_id (TaskID): A task ID.

        N)rj  r‚  )rH   rA   rK   rK   rL   Úremove_taskk  s    zProgress.remove_task)Nr   Nrm   rs   )N)r«   NNN)r«   NNN)rÔ   r«   NNN)r)   )Trn  r   T)!rh   ri   rj   rk   rG   r&  r�  rÂ   r~   rˆ  rŠ  rü   rZ   rÅ   r\   rg   r’   rÉ   ÚtypingÚoverloadrÒ   r£  r¤  rU   rª  rQ   rP   r€  r«  r¬  rµ  rŽ  r·  rK   rK   rK   rL   r‘   %  s¼   ô($     ù0 ýú*    ù	õ&    ù	õ&     ù	õ$M÷"Aø '!    ú+r‘   Ú__main__)ÚPanel)ÚRule)ÚSyntax)r7   a~  def loop_last(values: Iterable[T]) -> Iterable[Tuple[bool, T]]:
    """Iterate and generate a tuple with a flag for last value."""
    iter_values = iter(values)
    try:
        previous_value = next(iter_values)
    except StopIteration:
        return
    for value in iter_values:
        yield False, previous_value
        previous_value = value
    yield True, previous_valueÚpython)Úline_numbersZfooÚbarZbazÚ1Ú2Ú3z:Text may be printed while the progress bars are rendering.z(In fact, [i]any[/i] renderable will workzSuch as [magenta]tables[/]...zPretty printed structures...ZexamplezPretty printed)Útyperý   z	Syntax...zGive it a try!)Úcycle)Úrecord)r~   r   z[red]Downloadingr  r‘  z[green]Processingz[yellow]Thinkingr'  rž   g333333Ó?g{®Gáz„?éd   )rm   Nr   TNFNrn   ro   rp   rq   rr   rs   FT)r«   NNN)r«   NNN)rÔ   r«   NNN)…Ú
__future__r   r   r¸  rœ  Úabcr   r   Úcollectionsr   Údataclassesr   r   Údatetimer	   r
   r   Úmathr   r   Úoperatorr   Úosr   r   Ú	threadingr   r   r   Útypesr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   Ztyping_extensionsr(   rê   r*   r+   r~   r,   r-   r.   r/   r  r0   Újupyterr1   rS   r2   Úprogress_barr3   r÷   r4   r‚   r5   r­  r6   r7   rý   r8   r9   rw   r:   r;   r?   r\  r<   r=   r’   r”   rÃ   rÉ   r¹  rÒ   rÖ   ré   rî   rŒ   rŽ   r  r�   r�   r3  r8  r9  rÈ   rY  rZ  r[  r‘   rh   ÚrandomÚtimeÚpanelr»  Úruler¼  Úsyntaxr½  r³  Zprogress_renderablesÚ	itertoolsrÅ  Zexamplesr�  r@   rŽ  Ztask1Ztask2Ztask3rü   rU   ÚsleepÚrandintr…  rŸ   rK   rK   rK   rL   Ú<module>   sv  T
*               ð0Ngò,A    úí8    úí8     úí6V*2*H0		1	}    U
ó÷
ÿþýû
