o
    Ú­jÕ;  ã                   @  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�r­d 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�rZeC NeOeC P¡ ƒd  ¡ e=d:d;�Z<e< Qd<¡ e< Qd=¡ e< Qd>¡ eC R¡ D ]\\ZSZTZUe< >eSeTe'eUd?›eUd@k �r‡dAndBdC�¡ �qreB Ve4 We<¡¡ �q�qW d  ƒ dS 1 �s¦w   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__© úF/var/www/html/CropPilot/venv/lib/python3.10/site-packages/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é   Úellipsis)	ÚconsoleÚscreenÚauto_refreshr"   Ú	transientÚredirect_stdoutÚredirect_stderrÚvertical_overflowÚget_renderableÚ
renderableúOptional[RenderableType]rA   úOptional[Console]rB   ÚboolrC   r"   r#   rD   rE   rF   rG   r   rH   ú&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)rG   )Ú_renderabler   rA   Ú_screenÚ_alt_screenÚ_redirect_stdoutÚ_redirect_stderrÚ_restore_stdoutÚ_restore_stderrr   r4   Ú
ipy_widgetrC   Ú_startedrD   Ú_refresh_threadr"   rG   Ú_get_renderabler   rH   Ú_live_renderÚ_nested)r*   rI   rA   rB   rC   r"   rD   rE   rF   rG   rH   r-   r-   r.   r)   9   s,   ÿ
zLive.__init__c                 C  s   | j S )z'Check if live display has been started.)rV   r1   r-   r-   r.   Ú
is_startedb   s   zLive.is_startedr   c                 C  s    | j d ur	|   ¡ n| j}|pdS )NÚ )rX   rN   )r*   rI   r-   r-   r.   rH   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   rV   rA   Úset_liverZ   rO   Úset_alt_screenrP   Úshow_cursorÚ_enable_redirect_ioÚpush_render_hookr6   Ú	Exceptionr2   rC   r   r"   rW   Ústart)r*   r6   r-   r-   r.   rc   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�¡ zQ| jsQ| jjsQ|  ¡  W |  ¡  | j ¡  | jsk| jjrk| jjrk| j ¡  | j d¡ | jrz| j d¡ | jr‰| js‰| j | j ¡ ¡ | jdur–| jr–| j ¡  nG|  ¡  | j ¡  | js°| jjr°| 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 sèw   Y  W d  ƒ dS W d  ƒ dS 1 �sw   Y  dS )zStop live rendering display.NFÚvisibleT)r4   rV   rA   Ú
clear_liverZ   rD   ÚprintrI   rC   rW   r2   rG   rP   Ú
is_jupyterr6   Ú_disable_redirect_ioÚpop_render_hookÚis_terminalrY   Úlast_render_heightÚliner_   r^   ÚcontrolÚrestore_cursorrU   Úcloser1   r-   r-   r.   r2   ‘   sv   þ
ø

€
ÿþý

€ò
ÿþý
ÿ€îñ$ñz	Live.stopr   c                 C  s   | j | jd ud� | S )N©r6   )rc   rN   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*   rr   rt   rv   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)rA   rj   rg   rQ   Ú
isinstanceÚsysÚstdoutr   rS   r   rR   ÚstderrrT   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)rS   r   rz   r{   rT   r|   r1   r-   r-   r.   rh   Í   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-   )rH   )Ú.0r    r-   r-   r.   Ú
<listcomp>á   s    z#Live.renderable.<locals>.<listcomp>)rA   Ú_live_stackr   rH   rP   r   )r*   Ú
live_stackrI   r-   r-   r.   rI   Ö   s
   zLive.renderablerp   c                C  sd   t |tƒr| j |¡}| j� || _|r |  ¡  W d  ƒ dS W d  ƒ dS 1 s+w   Y  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)ry   ÚstrrA   Ú
render_strr4   rN   r6   )r*   rI   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 n…w | 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 s–w   Y  n@| jsÔ| jsä| j� | j tƒ ¡ W d  ƒ n81 s·w   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 s÷w   Y  dS )z&Update the display of the Live Render.r   N)Údisplay)ÚOutputz(install "ipywidgets" for Jupyter supportT)r3   )r4   rY   Úset_renderablerI   rZ   rA   r   r6   rg   ÚIPython.displayr„   Ú
ipywidgetsr…   ÚImportErrorÚwarningsÚwarnrU   Úclear_outputrf   rj   Úis_dumb_terminalr   rV   rD   )r*   r„   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)rG   rY   rA   Úis_interactiver4   rP   r   ÚhomeÚposition_cursorrV   rD   )r*   rŽ   Úresetr-   r-   r.   Úprocess_renderables  s$   

ÿý
úôüÿÿzLive.process_renderablesr/   )rI   rJ   rA   rK   rB   rL   rC   rL   r"   r#   rD   rL   rE   rL   rF   rL   rG   r   rH   rM   r$   r%   )r$   rL   )r$   r   )F)r6   rL   r$   r%   r8   )r$   r   )rr   rs   rt   ru   rv   rw   r$   r%   )rI   r   r6   rL   r$   r%   )rŽ   r�   r$   r�   )r9   r:   r;   r<   r)   Úpropertyr[   rH   rc   r2   rq   rx   r`   rh   rI   rƒ   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)Úline_numbersÚfooÚbarÚ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...Ú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)rA   zDict[Tuple[str, str], float]Úexchange_rate_dictéd   gš™™™™™Ù?é
   éÈ   i@  zExchange Rates)ÚtitlezSource CurrencyzDestination CurrencyzExchange Ratez.4fg      ð?ÚredÚgreen)Ústyle)XÚ
__future__r   rz   Ú	threadingr   r   r   Útypesr   Útypingr   r   r	   r
   r   r   r   r   r   r\   r   rA   r   r   r   r   r   rm   r   Ú
file_proxyr   Újupyterr   Úlive_renderr   r   rB   r   r©   r   Útyping_extensionsr   r   r>   r9   ÚrandomÚtimeÚ	itertoolsr—   r˜   r™   Úalignrš   r    Úpanelr›   Úrulerœ   Úsyntaxr�   Útablerž   Úadd_rowÚprogress_renderablesÚexamplesÚ	exchangesÚ
live_tabler½   Ú__annotations__ÚrangeÚindexÚlenÚselect_exchangeÚexchangeÚsleepÚrandintÚlogÚnextÚpopÚlistÚkeysÚ
add_columnÚitemsÚsourceÚdestÚexchange_raterƒ   Úcenterr-   r-   r-   r.   Ú<module>   s¨    ,  
óö

ÿ



þý	åý$ý¹