o
    Mf5                     @   sJ  U 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 ddlmZ ddl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# 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)m*Z* d dlm+Z+mZm,Z, ddl-m.Z. ddlmZ ddl/m%Z% ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 e Ze5ddddZ4e7d d!d"Z6e68d#d$d% d&e1d'd(e6d)d*d+d,d-e4e3d.g	Z9e*e9Z:g d/Z;e%ed0Z<i Z=e+e,e>e>f e?f e@d1< eAd2D ]ZBe;eBeCe;  ZDe;D ]ZEeEeDkrqe(Fd3 e'Gd d4dk r,eHeIe: d5e'' d6 d  e=eDeEf< eCe=eCe;d krPe=JeKe=L d   e7d7d8Z6e6Md9 e6Md: e6Md; e=N D ]\\ZOZPZQe68eOePe#eQd<eQd=k r}d>nd?d@ qhe<Re.Se6 qqW d   dS 1 sw   Y  dS dS )A    N)EventRLockThread)TracebackType)IOAnyCallableListOptionalTextIOTypecast   )get_console)ConsoleConsoleRenderableRenderableType
RenderHook)Control)	FileProxy)JupyterMixin)
LiveRenderVerticalOverflowMethod)Screen)Textc                       sB   e Zd ZdZdddeddf 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returnNc                    s&   || _ || _t | _t jdd d S )NT)daemon)r   r   r   donesuper__init__)selfr   r   	__class__ W/var/www/html/analyze/labelStudio/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refreshr+   r'   r'   r(   run   s   


z_RefreshThread.runr   N)	__name__
__module____qualname____doc__floatr#   r,   r1   __classcell__r'   r'   r%   r(   r      s
    
r   c                   @   sL  e Zd ZdZ	d3dddddddddd	dee d	ee d
edededededede	dee
g ef  ddfddZedefddZdefddZd4deddfddZd5ddZd6ddZd eee  d!ee d"ee ddfd#d$Zd5d%d&Zd5d'd(Zedefd)d*Zdd+dededdfd,d-Zd5d.d/Zd0ee dee fd1d2ZdS )7r   a  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. Default will 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   ellipsis)	consolescreenauto_refreshr   	transientredirect_stdoutredirect_stderrvertical_overflowget_renderable
renderabler;   r<   r=   r   r>   r?   r@   rA   rB   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 S )Nr   zrefresh_per_second must be > 0FT)rA   )_renderabler   r;   _screen_alt_screen_redirect_stdout_redirect_stderr_restore_stdout_restore_stderrr   r.   
ipy_widgetr=   _startedr>   _refresh_threadr   rA   _get_renderabler   rB   _live_render)r$   rC   r;   r<   r=   r   r>   r?   r@   rA   rB   r'   r'   r(   r#   3   s*   zLive.__init__c                 C   s   | j S )z'Check if live display has been started.)rL   r+   r'   r'   r(   
is_started[   s   zLive.is_startedc                 C   s    | j d ur	|   n| j}|pdS )N )rN   rD   r$   rC   r'   r'   r(   rB   `   s
   
zLive.get_renderabler0   c                 C   s   | j U | jr	 W d   dS | j|  d| _| jr#| jd| _| jd |   | j	|  |r9| 
  | jrPt| | j| _| j  W d   dS W d   dS 1 s[w   Y  dS )z|Start live rendering display.

        Args:
            refresh (bool, optional): Also refresh. Defaults to False.
        NTF)r.   rL   r;   set_liverE   set_alt_screenrF   show_cursor_enable_redirect_iopush_render_hookr0   r=   r   r   rM   start)r$   r0   r'   r'   r(   rX   h   s&   "z
Live.startc                 C   s  | j  | js	 W d   dS | j  d| _| jr(| jdur(| j  d| _d| _| j zM| js;| jj	s;| 
  W |   | j  | jsQ| jjrQ| j  | jd | jr`| jd | jro| jso| 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.NFvisibleT)r.   rL   r;   
clear_liver=   rM   r,   rA   rF   
is_jupyterr0   _disable_redirect_iopop_render_hookis_terminallinerU   rT   r>   controlrO   restore_cursorrK   closer+   r'   r'   r(   r,   ~   sX   






"z	Live.stopc                 C   s   | j | jd ud | S )Nr0   )rX   rD   r+   r'   r'   r(   	__enter__   s   zLive.__enter__exc_typeexc_valexc_tbc                 C   s   |    d S r)   )r,   )r$   re   rf   rg   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;   r^   r[   rG   
isinstancesysstdoutr   rI   r   rH   stderrrJ   r+   r'   r'   r(   rV      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)rI   r   rj   rk   rJ   rl   r+   r'   r'   r(   r\      s   
zLive._disable_redirect_ioc                 C   s   |   }| jrt|S |S )zwGet the renderable that is being displayed

        Returns:
            RenderableType: Displayed renderable.
        )rB   rF   r   rR   r'   r'   r(   rC      s   zLive.renderablerc   c                C   sN   | 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)r.   rD   r0   )r$   rC   r0   r'   r'   r(   update   s   
"zLive.updatec              	   C   s  | j  | j| j | jjrazddlm} ddlm	} W n t
y/   ddl}|d Y nw | jdu r>| | _|| j | j | jjdd | j| jj W d   n1 s[w   Y  nK| jjr| jjs| j | jt  W d   n1 s~w   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   )display)OutputNz(install "ipywidgets" for Jupyter supportT)r-   )r.   rO   set_renderablerC   r;   r[   IPython.displayrn   
ipywidgetsro   ImportErrorwarningswarnrK   clear_outputprintr^   is_dumb_terminalr   rL   r>   )r$   rn   ro   rt   r'   r'   r(   r0      sV   

 	 "zLive.refreshrenderablesc                 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)rA   rO   r;   is_interactiver.   rF   r   homeposition_cursorrL   r>   )r$   ry   resetr'   r'   r(   process_renderables   s$   


zLive.process_renderablesr)   )Fr2   )r   r   )r3   r4   r5   r6   r
   r   r   boolr7   r   r   r#   propertyrP   rB   rX   r,   rd   r   BaseExceptionr   rh   rV   r\   rC   rm   r0   r	   r   r~   r'   r'   r'   r(   r   #   s|    	

(






		
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)line_numbersfoobar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...examplezPretty printed)typetextz	Syntax...zGive it a try!)SGDMYREURUSDAUDJPYCNHHKDCADINRDKKGBPRUBNZDMXNIDRTWDTHBVND)r;   exchange_rate_dictd   g?
      i@  zExchange Rates)titlezSource CurrencyzDestination CurrencyzExchange Ratez.4fg      ?redgreen)style)Trj   	threadingr   r   r   typesr   typingr   r   r   r	   r
   r   r   r   rQ   r   r;   r   r   r   r   r`   r   
file_proxyr   jupyterr   live_renderr   r   r<   r   r   r   r   r   r3   randomtime	itertoolsr   r   r   alignr   r   panelr   ruler   syntaxr   tabler   add_rowprogress_renderablesexamples	exchanges
live_tabler   strr7   __annotations__rangeindexlenselect_exchangeexchangesleeprandintlognextpoplistkeys
add_columnitemssourcedestexchange_raterm   centerr'   r'   r'   r(   <module>   s   
 ( 
c





	$