o
    hL;                     @  s^  U d dl mZ d dl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 ddlmZ ddlmZmZmZ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% ddl&m'Z' ersd dl(m)Z) G dd deZ*G dd de eZ+e,dkrd dl-Z-d dl.Z.d dl/m0Z0 d dl	m1Z1mZm2Z2 ddl3m4Z4 ddlmZ ddl5m+Z+ ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= e Ze;ddd d!Z:e=d"d#d$Z<e<>d%d&d' d(e7d)d*e<d+d,d-d.d/e:e9d0g	Z?e0e?Z@g d1ZAe+ed2ZBi ZCd3eDd4< eEd5D ]ZFeAeFeGeA  ZHeAD ]ZIeIeHkr!qe.Jd6 e-Kd d7dk r6eLeMe@ d8e-- d9 d  eCeHeIf< eGeCeGeAd krZeCNeOeCP d   e=d:d;Z<e<Qd< e<Qd= e<Qd> eCR D ]\\ZSZTZUe<>eSeTe'eUd?eUd@k rdAndBdC qreBVe4We< qqW d   dS 1 sw   Y  dS dS )D    )annotationsN)EventRLockThread)TracebackType)	IOTYPE_CHECKINGAnyCallableListOptionalTextIOTypecast   )get_console)ConsoleConsoleRenderableGroupRenderableType
RenderHook)Control)	FileProxy)JupyterMixin)
LiveRenderVerticalOverflowMethod)Screen)Text)Selfc                      s6   e Zd ZdZd fdd	Zdd
dZdddZ  ZS )_RefreshThreadz3A thread that calls refresh() at regular intervals.live'Live'refresh_per_secondfloatreturnNonec                   s&   || _ || _t | _t jdd d S )NT)daemon)r    r"   r   donesuper__init__)selfr    r"   	__class__ [/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/pip/_vendor/rich/live.pyr)      s   z_RefreshThread.__init__c                 C  s   | j   d S N)r'   setr*   r-   r-   r.   stop   s   z_RefreshThread.stopc                 C  sh   | j d| j s2| jj | j  s| j  W d    n1 s"w   Y  | j d| j r	d S d S )Nr   )r'   waitr"   r    _lockis_setrefreshr1   r-   r-   r.   run"   s   


z_RefreshThread.run)r    r!   r"   r#   r$   r%   r$   r%   )__name__
__module____qualname____doc__r)   r2   r7   __classcell__r-   r-   r+   r.   r      s
    
r   c                   @  s   e Zd ZdZ	d@dddddddddd	dAddZedBddZdCdd ZdDdEd"d#ZdFd$d%Z	dGd'd(Z
dHd/d0ZdFd1d2ZdFd3d4ZedCd5d6Zdd7dId8d9ZdFd:d;ZdJd>d?ZdS )KLivea  Renders an auto-updating live display of any given renderable.

    Args:
        renderable (RenderableType, optional): The renderable to live display. Defaults to displaying nothing.
        console (Console, optional): Optional Console instance. Defaults to an internal Console instance writing to stdout.
        screen (bool, optional): Enable alternate screen mode. Defaults to False.
        auto_refresh (bool, optional): Enable auto refresh. If disabled, you will need to call `refresh()` or `update()` with refresh flag. Defaults to True
        refresh_per_second (float, optional): Number of times per second to refresh the live display. Defaults to 4.
        transient (bool, optional): Clear the renderable on exit (has no effect when screen=True). 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.
        vertical_overflow (VerticalOverflowMethod, optional): How to handle renderable when it is too tall for the console. Defaults to "ellipsis".
        get_renderable (Callable[[], RenderableType], optional): Optional callable to get renderable. Defaults to None.
    NFT   Zellipsis)	consolescreenauto_refreshr"   	transientredirect_stdoutredirect_stderrvertical_overflowget_renderable
renderableOptional[RenderableType]r@   Optional[Console]rA   boolrB   r"   r#   rC   rD   rE   rF   r   rG   &Optional[Callable[[], RenderableType]]r$   r%   c       	         C  s   |dksJ d|| _ |d ur|nt | _|| _d| _|| _|| _d | _d | _t	 | _
d | _|| _d| _|r8dn|| _d | _|| _|	| _|
| _t|  |	d| _d| _d S )Nr   zrefresh_per_second must be > 0FT)rF   )_renderabler   r@   _screen_alt_screen_redirect_stdout_redirect_stderr_restore_stdout_restore_stderrr   r4   
ipy_widgetrB   _startedrC   _refresh_threadr"   rF   _get_renderabler   rG   _live_render_nested)r*   rH   r@   rA   rB   r"   rC   rD   rE   rF   rG   r-   r-   r.   r)   9   s,   
zLive.__init__c                 C  s   | j S )z'Check if live display has been started.)rU   r1   r-   r-   r.   
is_startedb   s   zLive.is_startedr   c                 C  s    | j d ur	|   n| j}|pdS )N )rW   rM   )r*   rH   r-   r-   r.   rG   g   s
   
zLive.get_renderabler6   c              	   C  s   | j p | jr	 W d   dS d| _| j| s%d| _	 W d   dS | jr/| jd| _| jd | 	  | j
|  |rTz|   W n tyS   |    w | jrkt| | j| _| j  W d   dS W d   dS 1 svw   Y  dS )z|Start live rendering display.

        Args:
            refresh (bool, optional): Also refresh. Defaults to False.
        NTF)r4   rU   r@   Zset_liverY   rN   set_alt_screenrO   show_cursor_enable_redirect_ioZpush_render_hookr6   	Exceptionr2   rB   r   r"   rV   start)r*   r6   r-   r-   r.   r`   o   s6   	"z
Live.startc                 C  s  | j  | js	 W d   dS d| _| j  | jr.| js%| j| j 	 W d   dS | jr>| j	dur>| j	
  d| _	d| _| j zM| jsQ| jjsQ|   W |   | j  | jsg| jjrg| j  | jd | jrv| jd | jr| js| j| j  | jdur| jr| j  nC|   | j  | js| jjr| j  | jd | jr| jd | jr| js| j| j  | jdur| jr| j  w w w W d   n1 sw   Y  W d   dS W d   dS 1 sw   Y  dS )zStop live rendering display.NFZvisibleT)r4   rU   r@   Z
clear_liverY   rC   printrH   rB   rV   r2   rF   rO   
is_jupyterr6   _disable_redirect_ioZpop_render_hookis_terminalliner]   r\   controlrX   Zrestore_cursorrT   closer1   r-   r-   r.   r2      sb   







"z	Live.stopr   c                 C  s   | j | jd ud | S )Nr6   )r`   rM   r1   r-   r-   r.   	__enter__   s   zLive.__enter__exc_typeOptional[Type[BaseException]]exc_valOptional[BaseException]exc_tbOptional[TracebackType]c                 C  s   |    d S r/   )r2   )r*   rj   rl   rn   r-   r-   r.   __exit__   s   zLive.__exit__c                 C  s   | j js| j jr:| jr ttjts tj| _t	dt| j tjt_| j
r<ttjts>tj| _t	dt| j tjt_dS dS dS dS )z&Enable redirecting of stdout / stderr.r   N)r@   rd   rb   rP   
isinstancesysstdoutr   rR   r   rQ   stderrrS   r1   r-   r-   r.   r^      s   zLive._enable_redirect_ioc                 C  s<   | j rtd| j t_d| _ | jrtd| jt_d| _dS dS )z'Disable redirecting of stdout / stderr.r   N)rR   r   rr   rs   rS   rt   r1   r-   r-   r.   rc      s   
zLive._disable_redirect_ioc                 C  sF   | j j}|r| |d u rtdd |D  }n|  }| jr!t|S |S )zwGet the renderable that is being displayed

        Returns:
            RenderableType: Displayed renderable.
        r   c                 S  s   g | ]}|  qS r-   )rG   ).0r    r-   r-   r.   
<listcomp>   s    z#Live.renderable.<locals>.<listcomp>)r@   _live_stackr   rG   rO   r   )r*   Z
live_stackrH   r-   r-   r.   rH      s
   zLive.renderablerh   c                C  sd   t |tr| j|}| j || _|r |   W d   dS W d   dS 1 s+w   Y  dS )zUpdate the renderable that is being displayed

        Args:
            renderable (RenderableType): New renderable to use.
            refresh (bool, optional): Refresh the display. Defaults to False.
        N)rq   strr@   Z
render_strr4   rM   r6   )r*   rH   r6   r-   r-   r.   update   s   

"zLive.updatec              	   C  s  | j  | j| j | jr#| jjr| jjd   	 W d   dS | jjryzddl	m
} ddlm} W n tyG   ddl}|d Y qw | jdu rV| | _|| j | j | jjdd | j| jj W d   n1 ssw   Y  nK| jjr| jjs| j | jt  W d   n1 sw   Y  n@| js| js| j | jt  W d   n81 sw   Y  W d   dS W d   dS W d   dS W d   dS W d   dS W d   dS W d   dS 1 sw   Y  dS )z&Update the display of the Live Render.r   N)display)Outputz(install "ipywidgets" for Jupyter supportT)r3   )r4   rX   Zset_renderablerH   rY   r@   rw   r6   rb   ZIPython.displayrz   Z
ipywidgetsr{   ImportErrorwarningswarnrT   Zclear_outputra   rd   Zis_dumb_terminalr   rU   rC   )r*   rz   r{   r}   r-   r-   r.   r6      s`   

  "zLive.refreshrenderablesList[ConsoleRenderable]c                 C  s   | j | j_ | jjr3| j | jrt n| j }|g|| j}W d   |S 1 s,w   Y  |S | j	s@| j
s@g || j}|S )z;Process renderables to restore cursor and display progress.N)rF   rX   r@   Zis_interactiver4   rO   r   homeZposition_cursorrU   rC   )r*   r   resetr-   r-   r.   process_renderables  s$   


zLive.process_renderablesr/   )rH   rI   r@   rJ   rA   rK   rB   rK   r"   r#   rC   rK   rD   rK   rE   rK   rF   r   rG   rL   r$   r%   )r$   rK   )r$   r   )F)r6   rK   r$   r%   r8   )r$   r   )rj   rk   rl   rm   rn   ro   r$   r%   )rH   r   r6   rK   r$   r%   )r   r   r$   r   )r9   r:   r;   r<   r)   propertyrZ   rG   r`   r2   ri   rp   r^   rc   rH   ry   r6   r   r-   r-   r-   r.   r>   )   s8    )

"
"



	
"r>   __main__)cycle)Dictr   Tuple)Align)r   )r>   )Panel)Rule)Syntax)Tablea~  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pythonT)Zline_numbersZfoobarZbaz123zYou can make the terminal shorter and taller to see the live table hideText 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)typetextz	Syntax...zGive it a try!)ZSGDZMYRZEURZUSDZAUDZJPYZCNHZHKDZCADZINRZDKKZGBPZRUBZNZDZMXNZIDRZTWDZTHBZVND)r@   zDict[Tuple[str, str], float]exchange_rate_dictd   g?
      i@  zExchange Rates)titlezSource CurrencyzDestination CurrencyzExchange Ratez.4fg      ?ZredZgreen)style)X
__future__r   rr   	threadingr   r   r   typesr   typingr   r   r	   r
   r   r   r   r   r   r[   r   r@   r   r   r   r   r   rf   r   Z
file_proxyr   Zjupyterr   Zlive_renderr   r   rA   r   r   r   Ztyping_extensionsr   r   r>   r9   randomtime	itertoolsr   r   r   Zalignr   r    Zpanelr   Zruler   Zsyntaxr   tabler   Zadd_rowZprogress_renderablesZexamplesZ	exchangesZ
live_tabler   __annotations__rangeindexlenZselect_exchangeZexchangesleeprandintlognextpoplistkeysZ
add_columnitemssourcedestZexchange_ratery   centerr-   r-   r-   r.   <module>   s    ,  






	$