U
    ƒIÀdÁ7  ã                   @   sT  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�rPd 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"ƒZ6e6 8d#d$d%¡ d&e1d'ƒd(e6d)d*d+d,œd-e4e3d.ƒg	Z9e*e9ƒZ:d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAgZ;e%edB���HZ<i Z=e+e,e>e>f e?f e@dC< eAdDƒD �]ZBe;eBeCe;ƒ  ZDe;D ]þZEeEeDk�rT�qBe( FdE¡ e' Gd dF¡dk �r~e HeIe:ƒ¡ dGe' '¡ dH d  e=eDeEf< eCe=ƒeCe;ƒd k�rÆe= JeKe= L¡ ƒd  ¡ e7dIdJ�Z6e6 MdK¡ e6 MdL¡ e6 MdM¡ e= N¡ D ]6\\ZOZPZQe6 8eOePe#eQdN›eQdOk �r dPndQdR�¡ �qöe< Re. Se6¡¡ �qB�q(W 5 Q R X dS )Sé    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                       sF   e Zd ZdZdeddœ‡ fdd„Zddœdd	„Zddœd
d„Z‡  ZS )Ú_RefreshThreadz3A thread that calls refresh() at regular intervals.ÚLiveN)ÚliveÚrefresh_per_secondÚreturnc                    s&   || _ || _tƒ | _tƒ jdd� d S )NT)Údaemon)r   r   r   ÚdoneÚsuperÚ__init__)Úselfr   r   ©Ú	__class__© úN/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pip/_vendor/rich/live.pyr#      s    z_RefreshThread.__init__©r   c                 C   s   | j  ¡  d S ©N)r!   Úset©r$   r'   r'   r(   Ústop   s    z_RefreshThread.stopc              	   C   s@   | j  d| j ¡s<| jj� | j  ¡ s0| j ¡  W 5 Q R X q d S )Nr   )r!   Úwaitr   r   Ú_lockÚis_setÚrefreshr,   r'   r'   r(   Úrun   s    

z_RefreshThread.run)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úfloatr#   r-   r2   Ú__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œ	ee ee eeeeeee	ee
g ef  ddœd	d
„Zeedœdd„ƒZedœdd„Zd*eddœdd„Zddœdd„Zd dœdd„Zeee  ee ee ddœdd„Zddœdd„Zddœdd„Zeedœdd„ƒZdd œeedd!œd"d#„Zddœd$d%„Zee ee d&œd'd(„ZdS )+r   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t dƒ‚|| _|d k	r"|ntƒ | _|| _d| _|| _|| _d | _d | _	t
ƒ | _d | _|| _d| _|rpdn|| _d | _|| _|	| _|
| _t|  ¡ |	d�| _d S )Nr   zrefresh_per_second must be > 0FT)rA   )ÚAssertionErrorÚ_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__r)   c                 C   s   | j S )z'Check if live display has been started.)rM   r,   r'   r'   r(   Ú
is_started[   s    zLive.is_startedc                 C   s    | j d k	r|   ¡ n| j}|pdS )NÚ )rO   rE   ©r$   rC   r'   r'   r(   rB   `   s
    ÿ
ýzLive.get_renderable)r1   r   c              	   C   s¾   | j �® | jrW 5 Q R £ dS | j | ¡ d| _| jrB| j d¡| _| j d¡ |  ¡  | j 	| ¡ |r’z|  
¡  W n tk
r�   |  ¡  ‚ Y nX | jr°t| | jƒ| _| j ¡  W 5 Q R X dS )z|Start live rendering display.

        Args:
            refresh (bool, optional): Also refresh. Defaults to False.
        NTF)r/   rM   r;   Úset_liverF   Úset_alt_screenrG   Úshow_cursorÚ_enable_redirect_ioÚpush_render_hookr1   Ú	Exceptionr-   r=   r   r   rN   Ústart)r$   r1   r'   r'   r(   rZ   h   s&    z
Live.startc                 C   s  | j ��  | jsW 5 Q R £ dS | j ¡  d| _| jrN| jdk	rN| j ¡  d| _d| _| j�¤ z| j
st| jjst|  ¡  W 5 |  ¡  | j 	¡  | j
s¢| jjr¢| j ¡  | j d¡ | j
rÀ| j d¡ | jrÞ| j
sÞ| j | j ¡ ¡ | jdk	rø| jrø| j ¡  X W 5 Q R X W 5 Q R X dS )zStop live rendering display.NFÚvisibleT)r/   rM   r;   Ú
clear_liver=   rN   r-   rA   Ú_disable_redirect_ioÚpop_render_hookrG   Úis_terminalÚlinerV   rU   r>   ÚcontrolrP   Úrestore_cursorrL   ÚcloseÚ
is_jupyterr1   r,   r'   r'   r(   r-   †   s0    




z	Live.stopc                 C   s   | j | jd k	d� | S )N©r1   )rZ   rE   r,   r'   r'   r(   Ú	__enter__¥   s    zLive.__enter__)Úexc_typeÚexc_valÚexc_tbr   c                 C   s   |   ¡  d S r*   )r-   )r$   rg   rh   ri   r'   r'   r(   Ú__exit__©   s    zLive.__exit__c                 C   st   | j js| j jrp| jr@ttjtƒs@tj| _t	dt| j tjƒƒt_| j
rpttjtƒsptj| _t	dt| j tjƒƒt_dS )z&Enable redirecting of stdout / stderr.r   N)r;   r_   rd   rH   Ú
isinstanceÚsysÚstdoutr   rJ   r   rI   ÚstderrrK   r,   r'   r'   r(   rW   ±   s    zLive._enable_redirect_ioc                 C   s8   | j rtd| j ƒt_d| _ | jr4td| jƒt_d| _dS )z'Disable redirecting of stdout / stderr.r   N)rJ   r   rl   rm   rK   rn   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   rG   r   rS   r'   r'   r(   rC   Ä   s    zLive.renderablere   )rC   r1   r   c             	   C   s>   t |tƒr| j |¡}| j� || _|r0|  ¡  W 5 Q R X dS )zÓUpdate the renderable that is being displayed

        Args:
            renderable (RenderableType): New renderable to use.
            refresh (bool, optional): Refresh the display. Defaults to False.
        N)rk   Ústrr;   Ú
render_strr/   rE   r1   )r$   rC   r1   r'   r'   r(   ÚupdateÎ   s    
zLive.updatec              
   C   s"  | j �� | j | j¡ | jjr²zddlm} ddlm	} W n& t
k
rb   ddl}| d¡ Y nNX | jdkr€|ƒ | _|| jƒ | j�$ | jjdd� | j | jj¡ W 5 Q R X nb| jjrä| jjsä| j� | j tƒ ¡ W 5 Q R X n0| j�s| j�s| j� | j tƒ ¡ W 5 Q R X W 5 Q R X dS )z&Update the display of the Live Render.r   )Údisplay)ÚOutputNz(install "ipywidgets" for Jupyter supportT)r.   )r/   rP   Úset_renderablerC   r;   rd   ÚIPython.displayrr   Ú
ipywidgetsrs   ÚImportErrorÚwarningsÚwarnrL   Úclear_outputÚprintr_   Úis_dumb_terminalr   rM   r>   )r$   rr   rs   rx   r'   r'   r(   r1   Ü   s0    


ÿÿzLive.refresh)Úrenderablesr   c              	   C   sj   | j | j_ | jjrN| j�. | jr(t ¡ n| j ¡ }|f|| jf•}W 5 Q R X n| j	sf| j
sf|| jf•}|S )z;Process renderables to restore cursor and display progress.)rA   rP   r;   Úis_interactiver/   rG   r   ÚhomeÚposition_cursorrM   r>   )r$   r}   Úresetr'   r'   r(   Úprocess_renderablesù   s    
ÿ
ýÿÿzLive.process_renderables)N)F)r3   r4   r5   r6   r
   r   r   Úboolr7   r   r   r#   ÚpropertyrQ   rB   rZ   r-   rf   r   ÚBaseExceptionr   rj   rW   r]   rC   rq   r1   r	   r   r‚   r'   r'   r'   r(   r   #   sZ    þôó(
û
		þ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_numbersZfooÚbarZbazÚ1Ú2Ú3z�You 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EURÚUSDZAUDZJPYZCNHZHKDZCADZINRZDKKZGBPZRUBZNZDZMXNZIDRZTWDZTHBZVND)r;   Úexchange_rate_dictéd   gš™™™™™Ù?é
   éÈ   i@  zExchange Rates)ÚtitlezSource CurrencyzDestination CurrencyzExchange Ratez.4fg      ð?ÚredÚgreen)Ústyle)Trl   Ú	threadingr   r   r   Útypesr   Útypingr   r   r   r	   r
   r   r   r   rR   r   r;   r   r   r   r   ra   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_rowZprogress_renderablesZexamplesZ	exchangesZ
live_tabler˜   ro   r7   Ú__annotations__ÚrangeÚindexÚlenZselect_exchangeZexchangeÚsleepÚrandintÚlogÚnextÚpopÚlistÚkeysÚ
add_columnÚitemsÚsourceÚdestZexchange_raterq   Úcenterr'   r'   r'   r(   Ú<module>   s¾    ( m
óöí

ÿ



þý	