
    #7h7                     T   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e      Z$ G d dee      Z%e&dk(  rd 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      Z4 e7d d!d"      Z6e6jq                  d#d$d%       d& e1d'      d(e6d)d*d+d,d-e4 e3d.      g	Z9 e*e9      Z:g d/Z; e%e0      5 Z<i Z=e+e,e>e>f   e?f   e@d1<    eAd2      D ]V  ZBe;eB eCe;      z     ZDe;D ]?  ZEeEeDk(  r
 e(j                  d3        e'j                  d d4      dk  rej                   eIe:             d5 e'jN                         d6z  dz   z  e=eDeEf<    eCe=       eCe;      dz
  kD  r(e=j                   eKe=j                               d            e7d78      Z6e6j                  d9       e6j                  d:       e6j                  d;       e=j                         D ],  \  \  ZOZPZQe6jq                  eOeP e#eQd<eQd=k  rd>nd?@             . e<j                   e.j                  e6             B Y 	 ddd       yy# 1 sw Y   yxY w)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                   @     e Zd ZdZdddeddf fdZd
dZd
d	Z xZS )_RefreshThreadz3A thread that calls refresh() at regular intervals.liveLiverefresh_per_secondreturnNc                 `    || _         || _        t               | _        t        |   d       y )NT)daemon)r   r    r   donesuper__init__)selfr   r    	__class__s      S/var/www/urcfiles/bundle/venv/lib/python3.12/site-packages/pip/_vendor/rich/live.pyr&   z_RefreshThread.__init__   s+    	"4G	%    c                 8    | j                   j                          y N)r$   setr'   s    r)   stopz_RefreshThread.stop   s    		r*   c                 f   | j                   j                  d| j                  z        s}| j                  j                  5  | j                   j                         s| j                  j                          d d d        | j                   j                  d| j                  z        s|y y # 1 sw Y   4xY w)Nr   )r$   waitr    r   _lockis_setrefreshr.   s    r)   runz_RefreshThread.run   sp    ))..T%<%<!<=yy'')II%%' ! ))..T%<%<!<= s   5B''B0r!   N)	__name__
__module____qualname____doc__floatr&   r/   r5   __classcell__)r(   s   @r)   r   r      s*    =&V & &4 &(r*   r   c                   R   e Zd ZdZ	 d&d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Zedefd       ZdefdZd'deddfdZd(dZd)dZdeee      dee   dee   ddfdZd(dZd(dZedefd        Zdd!dededdfd"Zd(d#Zd$ee   dee   fd%Zy)*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@   rA   rB   r    rC   rD   rE   rF   rG   r!   c       	         z   |dkD  sJ d       || _         ||n	t               | _        || _        d| _        || _        || _        d | _        d | _        t               | _
        d | _        || _        d| _        |rdn|| _        d | _        || _        |	| _        |
| _        t'        | j)                         |	      | _        y )Nr   zrefresh_per_second must be > 0FT)rF   )_renderabler   r@   _screen_alt_screen_redirect_stdout_redirect_stderr_restore_stdout_restore_stderrr   r2   
ipy_widgetrB   _startedrC   _refresh_threadr    rF   _get_renderabler   rG   _live_render)r'   rH   r@   rA   rB   r    rC   rD   rE   rF   rG   s              r)   r&   zLive.__init__3   s     "A%G'GG%%")"5w;=  / /2626W
)-(#!'Y9="4!2-&!5F
r*   c                     | j                   S )z'Check if live display has been started.)rR   r.   s    r)   
is_startedzLive.is_started[   s     }}r*   c                 ^    | j                   | j                         n| j                  }|xs dS )N )rT   rJ   r'   rH   s     r)   rG   zLive.get_renderable`   s9     ##/   "!! 	
 Rr*   r4   c                 ~   | j                   5  | j                  r
	 ddd       y| j                  j                  |        d| _        | j                  r | j                  j                  d      | _        | j                  j                  d       | j                          | j                  j                  |        |r	 | j                          | j                  r5t        | | j                        | _        | j                   j#                          ddd       y# t        $ r | j                           w xY w# 1 sw Y   yxY w)z|Start live rendering display.

        Args:
            refresh (bool, optional): Also refresh. Defaults to False.
        NTF)r2   rR   r@   set_liverK   set_alt_screenrL   show_cursor_enable_redirect_iopush_render_hookr4   	Exceptionr/   rB   r   r    rS   start)r'   r4   s     r)   rb   z
Live.starth   s     ZZ}} Z LL!!$' DM||#'<<#>#>t#D LL$$U+$$&LL))$/LLN   '5dD<S<S'T$$$**,- Z ! 
 IIK Zs*   D3BD3;DAD3D00D33D<c                    | j                   5  | j                  s
	 ddd       y| j                  j                          d| _        | j                  r-| j
                  !| j
                  j                          d| _        d| _        | j                  5  	 | j                  s&| j                  j                  s| j                          | j                          | j                  j                          | j                  s0| j                  j                  r| j                  j                          | j                  j                  d       | j                  r| j                  j!                  d       | j"                  r?| j                  s3| j                  j%                  | j&                  j)                                | j*                  '| j"                  r| j*                  j-                          	 ddd       ddd       y# | j                          | j                  j                          | j                  s0| j                  j                  r| j                  j                          | j                  j                  d       | j                  r| j                  j!                  d       | j"                  r?| j                  s3| j                  j%                  | j&                  j)                                | j*                  (| j"                  r| j*                  j-                          w w w xY w# 1 sw Y   ?xY w# 1 sw Y   yxY w)zStop live rendering display.NFvisibleT)r2   rR   r@   
clear_liverB   rS   r/   rF   rL   
is_jupyterr4   _disable_redirect_iopop_render_hookis_terminalliner^   r]   rC   controlrU   restore_cursorrQ   closer.   s    r)   r/   z	Live.stop   s8   ZZ== Z LL##%!DM  T%9%9%E$$))+'+$%.D"0++DLL4K4K--/LL002++0H0H))+LL,,T2''33E:~~d.>.>,,T->->-M-M-OP2t~~--/!  Z  --/LL002++0H0H))+LL,,T2''33E:~~d.>.>,,T->->-M-M-OP2t~~--/ 8F2  ZsC   L5A-L5L(2G<D&L(+L5<D)L%%L((L2	-L55L>c                 B    | j                  | j                  d u       | S )Nr4   )rb   rJ   r.   s    r)   	__enter__zLive.__enter__   s     

4++47
8r*   exc_typeexc_valexc_tbc                 $    | j                          y r,   )r/   )r'   rq   rr   rs   s       r)   __exit__zLive.__exit__   s     			r*   c                 :   | j                   j                  s| j                   j                  r| j                  rjt	        t
        j                  t              sLt
        j                  | _        t        dt        | j                   t
        j                              t
        _        | j                  rlt	        t
        j                  t              sMt
        j                  | _        t        dt        | j                   t
        j                              t
        _        yyyy)z&Enable redirecting of stdout / stderr.r   N)r@   ri   rf   rM   
isinstancesysstdoutr   rO   r   rN   stderrrP   r.   s    r)   r_   zLive._enable_redirect_io   s    <<##t||'>'>$$Z

I-N'*zz$!(IdllCJJ,OP
$$Z

I-N'*zz$!(IdllCJJ,OP
 .O$	 (?r*   c                     | j                   r&t        d| j                         t        _        d| _         | j                  r't        d| j                        t        _        d| _        yy)z'Disable redirecting of stdout / stderr.r   N)rO   r   rx   ry   rP   rz   r.   s    r)   rg   zLive._disable_redirect_io   sQ    h(<(<=CJ#'D h(<(<=CJ#'D   r*   c                 T    | j                         }| j                  rt        |      S |S )zwGet the renderable that is being displayed

        Returns:
            RenderableType: Displayed renderable.
        )rG   rL   r   rZ   s     r)   rH   zLive.renderable   s*     ((*
%)%5%5vj!E:Er*   ro   c                    t        |t              r| j                  j                  |      }| j                  5  || _        |r| j                          ddd       y# 1 sw Y   yxY w)zUpdate the renderable that is being displayed

        Args:
            renderable (RenderableType): New renderable to use.
            refresh (bool, optional): Refresh the display. Defaults to False.
        N)rw   strr@   
render_strr2   rJ   r4   )r'   rH   r4   s      r)   updatezLive.update   sG     j#&00<JZZ)D ZZs   AA$c                    | j                   5  | j                  j                  | j                         | j                  j
                  r	 ddlm} ddlm	} | j                   |       | _
         || j                         | j                  5  | j                  j                  d       | j                  j                  | j                  j                         ddd       n| j                  j                   rO| j                  j"                  s9| j                  5  | j                  j                  t%                      ddd       nP| j&                  sD| j(                  s8| j                  5  | j                  j                  t%                      ddd       ddd       y# 1 sw Y   xY w# t        $ r ddl}|j                  d       Y 5w xY w# 1 sw Y   BxY w# 1 sw Y   NxY w# 1 sw Y   yxY w)z&Update the display of the Live Render.r   )display)OutputNT)r1   z(install "ipywidgets" for Jupyter support)r2   rU   set_renderablerH   r@   rf   IPython.displayr   
ipywidgetsr   rQ   clear_outputprintImportErrorwarningswarnri   is_dumb_terminalr   rR   rC   )r'   r   r   r   s       r)   r4   zLive.refresh   sQ   ZZ,,T__=||&&I71 .*0(044$4?**4+<+<+G+GH ) ))$,,2O2O\\LL&&wy1 "\ MM$..\\LL&&wy1 "1 Z ) # N#MM"LMN "\
 "\1 Zsy   <G'
F+6G'AFAG'$G=-G'*$GG'F(	$G'+G	G'GG'G	G'G$	 G''G0renderablesc                    | j                   | j                  _         | j                  j                  rb| j                  5  | j
                  rt        j                         n| j                  j                         }|g|| j                  }ddd       |S | j                  s| j                  sg || j                  }|S # 1 sw Y   |S xY w)z;Process renderables to restore cursor and display progress.N)rF   rU   r@   is_interactiver2   rL   r   homeposition_cursorrR   rC   )r'   r   resets      r)   process_renderableszLive.process_renderables   s     /3.D.D+<<&& '' LLN**::< 
  %F{FD4E4EF  	 dnn;K;):):;K  s   AB>>Cr,   )Fr6   )r!   r   )r7   r8   r9   r:   r   r   r   boolr;   r   r	   r&   propertyrW   rG   rb   r/   rp   r   BaseExceptionr   ru   r_   rg   rH   r   r4   r
   r   r    r*   r)   r   r   #   s   " 04&
 &*!$% $ $4>AE&
^,&
 '"	&

 &
 &
 "&
 &
 &
 &
 2&
 !"n*<!=>&
 
&
P D     -T -d -<0>4./ -( '	
 
Q( FN F F EJ  T d 2: 12		 r*   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)Trx   	threadingr   r   r   typesr   typingr   r   r	   r
   r   r   r   r   rY   r   r@   r   r   r   r   rk   r   
file_proxyr   jupyterr   live_renderr   r   rA   r   r   r   r   r   r7   randomtime	itertoolsr   r   r   alignr   r   panelr   ruler   syntaxr   tabler   add_rowprogress_renderablesexamples	exchanges
live_tabler   r~   r;   __annotations__rangeindexlenselect_exchangeexchangesleeprandintlognextpoplistkeys
add_columnitemssourcedestexchange_rater   centerr   r*   r)   <module>r      s   
 * *  H H H  K K  ! ! ;  (V (&i< iX z(( "iG
	" 	F  %&E	MM#sC 	E89'&$45 )*HI* 
g	*;=DsCx%!78=3ZE'I(>?O%.

3!6>>!R(1,KKX/BE"V]]_s*a/C"OX#>? )*S^a-??&**40B0G0G0I+J1+MN$45  !23  !78  15G5M5M5O1NVTMMM,S1+83+>%G 6P !!,%,,u"567 &   
	O N 
	s   E4JJ'