
    l0jt                       d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Zddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lm Z  dd
lm!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'Z'ddl(Z(ddl)Z)ddl*m+Z+ ddl,m-Z- ddl.Z.ddl/m0Z0 ddl1m2Z2 e!rddl3m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z: e
j;        <                    e
j;        =                    e.j>                  d          Z? ej@        eAd          pdB                    d          C                                ZD e-d          ZE e&d          ZFddZG G d de          ZH G d deH          ZIdd ZJdd"ZKdd#ZLdd$ZMdd%ZNdd'ZOdd(ZPdd+ZQdd/ZRdd0ZSdd4ZT	 ddd;ZUdd?ZVdddCZWddGZXddJZYddKZZdL Z[ G dM dN          Z\dO Z]eddR            Z^ddUZ_ddWZ`dd[Zadd]Zbd^ ZcddbZd	 ddcZeddgZfddjZgddoZhddsZidt Zjdu ZkddyZldd|Zm G d} d~en          Zo G d d          Zpd ZqddZrddZsddZt eju        d          ZvddZwddZxdS )z Handy utility functions.     )annotationsN)ABCabstractmethod)contextmanager)BytesIO)NumberPath)GeneratorType)TYPE_CHECKINGAnyCallableIteratorOptionalTypeVar)Serializable)	ParamSpec)Context)en)BlockBlockContextBlocks)	Component)Appzlaunches.jsonzversion.txt    asciiPTreturnasyncio.Lockc                 r    	 t          j                     t          j                    S # t          $ r Y dS w xY w)zGet asyncio.Lock() without fear of getting an Exception.

    Needed because in reload mode we import the Blocks object outside
    the main thread.
    N)asyncioget_event_loopLockRuntimeError r   O/home/wildlama/miniconda3/envs/lam/lib/python3.11/site-packages/gradio/utils.pysafe_get_lockr(   =   sD       |~~   tts   %( 
66c                  F    e Zd Zeed	d                        Zd
dZd
dZdS )BaseReloaderr   r   c                    d S Nr&   selfs    r'   running_appzBaseReloader.running_appK   s	     	r   demor   c                    t          | j        j        d          ot          |d           p*t          | j        j        d           ot          |d          S N_queue)hasattrr/   blocksr.   r0   s     r'   queue_changedzBaseReloader.queue_changedP   sX    D$+X66VwtX?V?V;V
 (/:::VwtX?V?V	
r   c                    | j         j        sJ t          | j         j        d          r1|j        | j         j        j        _        | j         j        j        |_        || j         _        d S r2   )r/   r5   r4   dependenciesr3   blocks_dependenciesr6   s     r'   swap_blockszBaseReloader.swap_blocksW   sc    &&&& 4#*H55 	9AEARD#*>*18DK"&r   Nr   r   r0   r   )__name__
__module____qualname__propertyr   r/   r7   r;   r&   r   r'   r*   r*   J   sd           ^ X
 
 
 
' ' ' ' ' 'r   r*   c                  ^     e Zd Z	 dd fdZedd            ZddZddZd Zd fdZ	 xZ
S )SourceFileReloaderr0   appr   
watch_dirs	list[str]
watch_filestr
stop_eventthreading.Eventchange_event	demo_namer   Nonec                    t                                                       || _        || _        || _        || _        || _        || _        d S r,   )super__init__rD   rE   rG   rI   rK   rL   )r.   rD   rE   rG   rI   rK   rL   	__class__s          r'   rP   zSourceFileReloader.__init__b   sJ     	$$$("r   c                    | j         S r,   )rD   r-   s    r'   r/   zSourceFileReloader.running_apps   s	    xr   boolc                6    | j                                          S r,   )rI   is_setr-   s    r'   should_watchzSourceFileReloader.should_watchw   s    ?))++++r   c                8    | j                                          d S r,   )rI   setr-   s    r'   stopzSourceFileReloader.stopz   s    r   c                8    | j                                          d S r,   )rK   rX   r-   s    r'   alert_changezSourceFileReloader.alert_change}   s    r   r   c                r    t                                          |           |                                  d S r,   )rO   r;   r[   )r.   r0   rQ   s     r'   r;   zSourceFileReloader.swap_blocks   s3    D!!!r   )r0   )rD   r   rE   rF   rG   rH   rI   rJ   rK   rJ   rL   rH   r   rM   r<   r   rS   r   rM   r=   )r>   r?   r@   rP   rA   r/   rV   rY   r[   r;   __classcell__)rQ   s   @r'   rC   rC   a   s          # # # # # # #"    X, , , ,                 r   rC   reloaderc                   ddl m} d|_        dfd}dfdd	}d
 | j        D             i |                                 rdd	l} |            rt          d            t          fdD                       }t          |j	                  }|D ]}|j	        |         }t          |dd	          }	|	rE|t          t          j        t                              j        k    r|	                    d          rg|	rt#          |	|          r|j	        |= 	 t%          j        | j                  }t%          j        |          }nI# t,          $ r<}
t          d| j         d           t/          j        d	|
d	           i Y d	}
~
[d	}
~
ww xY wt          || j                  }|                     |          rt          d           n|                     |           i |                                 d	S d	S )ziWatch python files in a given module.

    get_changes is taken from uvicorn's default file watcher.
    r   )reload_threadTr   Path | Nonec                                  D ]T} 	 |                                  j        }n# t          $ r Y )w xY w                    |           }||| <   J||k    r| c S Ud S r,   )statst_mtimeOSErrorget)filemtimeold_timeiter_py_filesmtimess      r'   get_changeszwatchfn.<locals>.get_changes   s    !MOO 	 	D		,    zz$''H$t!! "ts   )
66Iterator[Path]c               3     K   D ]=} t          |                     d                    D ]}|                                V  >d S )Nz*.py)listrglobresolve)
reload_dirpathreload_dirss     r'   rl   zwatchfn.<locals>.iter_py_files   sa      % 	% 	%JZ--f5566 % %llnn$$$$%	% 	%r   Nc                ,    g | ]}t          |          S r&   r	   ).0dir_s     r'   
<listcomp>zwatchfn.<locals>.<listcomp>   s    >>>$4::>>>r   zChanges detected in: c              3  <   K   | ]}t          |          |V  d S r,   )is_in_or_equal)rx   dchangeds     r'   	<genexpr>zwatchfn.<locals>.<genexpr>   s2      MMa.!2L2LMMMMMMMr   __file__z	reload.pyz
Reloading z& failed with the following exception: )valuetbzqReloading failed. The new demo has a queue and the old one doesn't (or vice versa). Please launch your demo again)r   rc   )r   ro   )gradio.reloadrb   running_reloadrE   rV   sysprintnextrq   modulesgetattrr
   inspectgetfilegradioparentendswithr|   	importlibimport_modulerG   reload	Exception	tracebackprint_exceptionrL   r7   r;   )r`   rb   rn   moduler   ry   r   kv
sourcefileer0   r~   rl   rm   rv   s               @@@@r'   watchfnr      s    ,+++++#'M       % % % % % %
 F>>(*=>>>KF



!
! )


+-- %	3'33444 MMMM;MMMMMD3;''G ' 'KN$Q
D99
 W_V%<%< = = DDD"++K88 E  '.T"B"B 'A	"01DEE")&11   \!4\\\   )$aDAAAA 68#566D%%d++ +4   
 $$T***FS 


!
! ) ) ) ) )s    -E 
F1FFrS   c                     d} 	 ddl m}  |            }dt          |          v rd} n# t          t          f$ r Y nw xY w| S )zf
    Check if interface is launching from Google Colab
    :return is_colab (bool): True or False
    Fr   get_ipythonzgoogle.colabT)IPython.core.getipythonr   rH   ImportError	NameError)is_colabr   
from_ipynbs      r'   colab_checkr      sl    
 H777777 []]
S__,,H#   Os   #( <<c                     t          t          j                            d          pt          j                            d                    S )NKAGGLE_KERNEL_RUN_TYPEGFOOTBALL_DATA_DIR)rS   osenvironrh   r&   r   r'   kaggle_checkr      s:    

/00XBJNNCW4X4X  r   c                     	 dd l } |                     d          }|                                }d|d                                         v S # t          $ r Y dS w xY w)Nr   sts	sagemakerArnF)boto3clientget_caller_identitylowerr   )r   r   responses      r'   sagemaker_checkr      so    e$$--//huo335555   uus   AA 
AAc                 `    d} 	 ddl m}  |            d} n# t          t          f$ r Y nw xY w| S )zo
    Check if interface is launching from iPython (not colab)
    :return is_ipython (bool): True or False
    Fr   r   NT)r   r   r   r   )
is_ipythonr   s     r'   ipython_checkr      s]    
 J777777;==$J#   s    ++
str | Nonec                 ^    t          j        d          dk    rt          j        d          S d S )NSYSTEMspacesSPACE_IDr   getenvr&   r   r'   	get_spacer     s,    	yh&&y$$$4r   c                 2    t          j        d          dk    S )NSPACES_ZERO_GPUtruer   r&   r   r'   is_zero_gpu_spacer     s    9&''611r   articlerH   c                    	 t          j        | d          }|j        t           j        j        k    r|j        } n# t           j        j        $ r Y nw xY w| S )N   )timeout)requestsrh   status_codecodesoktext
exceptionsRequestException)r   r   s     r'   readme_to_htmlr     sa    <3338>#444mG/   Ns   7: AA	interfacegradio.BlocksrM   c                    | j         rJt          j                    dk     r5t          j        t          d                   }t	          d|            d S d S d S )Ng      ?TIPSzTip: )	show_tipsrandomchoicer   r   )r   tips     r'   show_tipr     sZ     v}44=F,,mcmm 44r   c                    	 t           j                            t                    sIddi} t	          t          d          5 }t          j        | |           d d d            d S # 1 swxY w Y   d S t	          t                    5 }t          j        |          } d d d            n# 1 swxY w Y   | dxx         dz  cc<   | d         dv rt          t          d                    t	          t          d          5 }|
                    t          j        |                      d d d            d S # 1 swxY w Y   d S # t          $ r Y d S w xY w)Nlaunches   zw+)   2      i  i  BETA_INVITEw)r   ru   exists	JSON_PATHopenjsondumploadr   r   writedumpsr   )r   js     r'   launch_counterr   !  s   w~~i(( 	."AHi&& '!	(A&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' i (A9Q<<( ( ( ( ( ( ( ( ( ( ( ( ( ( (Z   A%   
#'???b'(((i%% .
8,,---. . . . . . . . . . . . . . . . . .   s   =D: A"D: "A&&D: )A&*D: /D: B$D: $B((D: +B(,AD: 8(D- D: -D11D: 4D15D: :
EEfuncr   	list[Any]c                p    t          j        |           }d |j                                        D             S )Nc                P    g | ]#}|j         t          j        j        ur|j         nd $S r,   )defaultr   	Parameteremptyrx   r   s     r'   rz   z$get_default_args.<locals>.<listcomp>5  s@        Yg&7&===		4  r   )r   	signature
parametersvalues)r   r   s     r'   get_default_argsr   3  sB    !$''I %,,..   r   modeconfig1dictconfig2	root_keystuplec                    t          j                    t          j                  t          j        d          |D ]!} |         |         k    sJ d|             "t	           d                   t	          d                   k    s
J d             fdfd d         d	         }d         d	         } ||           t           d
         d
                   D ]\  }}t          |                    d          |                    d                    D ]\  }}	 ||	           t          |                    d          |                    d                    D ]\  }
} |
|           t          |                    d          |                    d                    D ]\  }} ||           ||k    sJ | d|             dS )a  Allows you to test if two different Blocks configs produce the same demo.

    Parameters:
    config1 (dict): nested dict with config from the first Blocks instance
    config2 (dict): nested dict with config from the second Blocks instance
    root_keys (Tuple): an interable consisting of which keys to test for equivalence at
        the root level of the config. By default, only "mode" is tested,
        so keys like "version" are ignored.
       )indentzConfigs have different: 
componentsz# of components are differentc                    t          t           fdd                             d         }t          t          fdd                             d         }t          j        |          }|                    d           t          j        |          }|                    d           t          j        |          t          j        |          k    s5J                     |           d                    |                       d S )Nc                    | d         k    S Nidr&   )c
config1_ids    r'   <lambda>z[assert_configs_are_equivalent_besides_ids.<locals>.assert_same_components.<locals>.<lambda>S      1T7j#8 r   r   r   c                    | d         k    S r  r&   )r  
config2_ids    r'   r  z[assert_configs_are_equivalent_besides_ids.<locals>.assert_same_components.<locals>.<lambda>T  r  r   r   does not match )rq   filtercopydeepcopypopr   r   pprint)r  r
  c1c2r   r   pps   ``  r'   assert_same_componentszIassert_configs_are_equivalent_besides_ids.<locals>.assert_same_componentsR  s   &8888',:OPPQQRST&8888',:OPPQQRST]2
t]2
tz"~~"
 "
 
 
 
iimm<<RYYr]]<<
 
 
 
 
r   c                    t          | |          D ]=\  }} |d         |d                    d|v sd|v r |d         |d                    >d S )Nr  children)zip)	children1chidren2child1child2r  same_children_recursives       r'   r  zJassert_configs_are_equivalent_besides_ids.<locals>.same_children_recursive]  s|    !)X66 	P 	PNFF""6$<>>>V##zV';';''z(:F:<NOOO	P 	Pr   layoutr  r9   targetsinputsoutputsr  T)r  r  r  PrettyPrinterlenr  r  )r   r   r   keyr  	children2d1d2t1t2i1i2o1o2r  r  r  s   ``            @@@r'   )assert_configs_are_equivalent_besides_idsr-  ;  sg    mG$$GmG$$G		Q	'	'	'B N Ns|ws|+++-M-M-M++++w|$%%* *   &  	= 	= 	= 	= 	= 	= 	=P P P P P P !*-I!*-IIy111gn-w~/FGG 5 5B"&&++RVVI->->?? 	+ 	+FB""2r****"&&**BFF8,<,<== 	+ 	+FB""2r****"&&++RVVI->->?? 	+ 	+FB""2r****RxxxB4444xxxx4r   input_string
ner_groupslist[dict[str, str | int]]c                :   t          |          dk    r| d fgS g }d}d}|D ]Z}|d         |d         |d         }}}|                    | ||         d f           |                    | ||         |f           |}[|                    | |d          d f           |S )Nr   entity_groupstartend)r"  append)r.  r/  outputr4  prev_endgroupentityr3  s           r'   format_ner_listr:  t  s    
:!t$%%F
CH  ">2E'NE%Ls|HUN3T:;;;|E#I.7888
MM<%t,---Mr   F_dict
skip_valuec                p    t          |                                           D ]\  }}|r|dk    r|| |= | S )z=
    Delete keys whose values are None from a dictionary
    r   )rq   items)r;  r<  r#  r   s       r'   delete_noner?    sL     5;;==))  
U 	#..]c
Lr   _listlist[Any] | Anyr   c                <    t          |           dk    r| d         S | S )Nr   r   )r"  )r@  s    r'   resolve_singletonrC    s    
5zzQQxr   cls_name$type[Component] | type[BlockContext]c                   ddl }ddl}ddl}ddl}d |j        j                                        D             }d |j        j                                        D             }d |j        j                                        D             }||z   |z   D ]i\  }}|	                                | 
                    dd          k    r8t          ||j        j                  st          ||j        j                  r|c S jt          d|            )	z
    Returns the component, template, or layout class with the given class name, or
    raises a ValueError if not found.

    Parameters:
    cls_name (str): lower-case string class name of a component
    Returns:
    cls: the component class
    r   Nc                F    g | ]\  }}t          |t                    ||fS r&   
isinstancetyperx   nameclss      r'   rz   z-component_or_layout_class.<locals>.<listcomp>  s@       D#c4  	s  r   c                F    g | ]\  }}t          |t                    ||fS r&   rH  rK  s      r'   rz   z-component_or_layout_class.<locals>.<listcomp>  s@       D#c4  	s  r   c                F    g | ]\  }}t          |t                    ||fS r&   rH  rK  s      r'   rz   z-component_or_layout_class.<locals>.<listcomp>  s@       D#c4  	s  r   _ zNo such component or layout: )gradio.blocksgradio.componentsgradio.layoutsgradio.templatesr   __dict__r>  	templateslayoutsr   replace
issubclassr   r5   r   
ValueError)rD  r   r   rW  rX  rL  rM  s          r'   component_or_layout_classr\    sW     *399;;  J
 )288::  I
 06688  G
  )+g5  	c::<<8++C4444sF-788 5#v}9:: 5 JJJ
?X??
@
@@r   c                ^    t          j                    }|                     | |i |          S )a?  
    Runs coroutines in background.

    Warning, be careful to not use this function in other than FastAPI scope, because the event_loop has not started yet.
    You can use it in any scope reached by FastAPI app.

    correct scope examples: endpoints in routes, Blocks.process_api
    incorrect scope examples: Blocks.launch

    Use startup_events in routes.py if you need to run a coro in background in Blocks.launch().


    Example:
        utils.run_coro_in_background(fn, *args, **kwargs)

    Args:
        func:
        *args:
        **kwargs:

    Returns:

    )r"   r#   create_task)r   argskwargs
event_loops       r'   run_coro_in_backgroundrb    s5    0 '))J!!$$"7"7"7888r   c                \    	 t          |           S # t          $ r t                      dw xY w)z;Helper for yielding StopAsyncIteration from sync iterators.N)r   StopIterationStopAsyncIterationiterators    r'   run_sync_iterator_asyncrh    s<    -H~~ - - - "",-s    +c                  &    e Zd ZdZddZd Zd ZdS )	SyncToAsyncIteratorz*Treat a synchronous iterator as async one.r   rM   c                "    || _         || _        d S r,   )rg  limiter)r.   rg  rl  s      r'   rP   zSyncToAsyncIterator.__init__  s     r   c                    | S r,   r&   r-   s    r'   	__aiter__zSyncToAsyncIterator.__aiter__  s    r   c                t   K   t           j                            t          | j        | j                   d {V S )N)rl  )anyio	to_threadrun_syncrh  rg  rl  r-   s    r'   	__anext__zSyncToAsyncIterator.__anext__  sN      _--#T]DL . 
 
 
 
 
 
 
 
 	
r   Nr^   )r>   r?   r@   __doc__rP   rn  rs  r&   r   r'   rj  rj    sL        44     
 
 
 
 
r   rj  c                :   K   |                                   d {V S r,   )rs  rf  s    r'   async_iterationrv    s*      ##%%%%%%%%%r   ru   
Path | strc              #     K   t                                                      }	 t          j        |            dV  t          j        |           dS # t          j        |           w xY w)zBContext manager that sets the working directory to the given path.N)r
   absoluter   chdir)ru   origins     r'   set_directoryr|    sb       VV__F

s   A A(r   str | Numberc                     t           t                    r S g d}g d}t           fd|D                       st           fd|D                       rd    S )z
    Sanitizes a value that is being written to a CSV file to prevent CSV injection attacks.
    Reference: https://owasp.org/www-community/attacks/CSV_Injection
    )=+-@	
)z,=z,+z,-z,@z,	z,
c              3  B   K   | ]}                     |          V  d S r,   )
startswith)rx   prefixr   s     r'   r   z)sanitize_value_for_csv.<locals>.<genexpr>  s1      
B
B5F##
B
B
B
B
B
Br   c              3      K   | ]}|v V  	d S r,   r&   )rx   sequencer   s     r'   r   z)sanitize_value_for_csv.<locals>.<genexpr>  sA       J J&EJ J J J J Jr   ')rI  r   any)r   unsafe_prefixesunsafe_sequencess   `  r'   sanitize_value_for_csvr    s    
 %   666O===

B
B
B
B/
B
B
BBB c J J J J*:J J J G G  ELr   r   c                    g }| D ]]}t          |t                    r"d |D             }|                    |           9t          |          }|                    |           ^|S )z
    Sanitizes a list of values (or a list of list of values) that is being written to a
    CSV file to prevent CSV injection attacks.
    c                ,    g | ]}t          |          S r&   )r  r   s     r'   rz   z)sanitize_list_for_csv.<locals>.<listcomp>  s!    HHHQ5a88HHHr   )rI  rq   r5  r  )r   sanitized_valuesr   sanitized_values       r'   sanitize_list_for_csvr    s    
  5 5eT"" 	5HH%HHHO##O44444U;;O##O4444r   rL  list_of_namesrF   c                j    t          |          }| |vr| S d}|  d| }||v r|dz  }|  d| }||v |S )zSAppends a numerical suffix to `name` so that it does not appear in `list_of_names`.r   rP  )rX   )rL  r  set_of_namessuffix_counternew_names        r'   append_unique_suffixr  %  ss     //L<--^--,&&aN1111H ,&& r   possible_urlc                    ddi}	 t          j        | |          }|j        dk    s|j        dk    rt          j        | |          j        S |j        S # t
          $ r Y dS w xY w)Nz
User-Agentz-gradio (https://gradio.app/; team@gradio.app))headersi  i  F)r   headr   rh   r   r   )r  r  head_requests      r'   validate_urlr  3  s    LMG}\7CCC#s**l.F#.M.M<g>>>AA   uus   AA A 
A"!A"c                \    t          | t                    od|                     dd          v S )Nupdate__type__rQ  )rI  r   rh   )vals    r'   	is_updater  ?  s*    c4  HXR1H1H%HHr   fneveryfloatc                      fd}|S )Nc               7     K   	  |  }t          |t                    r	|E d {V  n|V  t          j                   <r,   )rI  r   timesleep)r_  r6  r  r  s     r'   continuous_fnz(get_continuous_fn.<locals>.continuous_fnD  sb      	RYF&-00 !!!!!!!!!Ju	r   r&   )r  r  r  s   `` r'   get_continuous_fnr  C  s*          r   c                    g ng nt          j                   r%t          j                    fd            }|S t	          j                   r%t          j                    fd            }|S t          j                   r%t          j                    fd            }|S t          j                    fd            }|S )Nc                X   K   r    | i |2 3 d {V }|W V  6 r   d S d S r,   r&   r_  r`  r   
after_argsafter_fnbefore_args	before_fnfs      r'   asyncgen_wrapperz*function_wrapper.<locals>.asyncgen_wrapperW  s       (	;''"#!T"4V"4"4       h #5 &*%%%%& &s    c                 D   K   r    | i | d {V }r   |S r,   r&   r  s      r'   async_wrapperz'function_wrapper.<locals>.async_wrapperd  s\       (	;''Q/////////H &*%%Or   c               ?  H   K   r    | i |E d {V  r   d S d S r,   r&   )r_  r`  r  r  r  r  r  s     r'   gen_wrapperz%function_wrapper.<locals>.gen_wrapperq  sh       (	;''q$)&))))))))) &*%%%%& &r   c                 4    r    | i |}r   |S r,   r&   r  s      r'   wrapperz!function_wrapper.<locals>.wrapper}  sF     (	;''q$)&))H &*%%Or   )r   isasyncgenfunction	functoolswrapsr"   iscoroutinefunctionisgeneratorfunction)	r  r  r  r  r  r  r  r  r  s	   `````    r'   function_wrapperr  P  s    $+""K!)zJ!!$$ 1				& 	& 	& 	& 	& 	& 	& 	& 
		&  		$Q	'	' $				 	 	 	 	 	 	 	 
		 		$Q	'	' 				& 	& 	& 	& 	& 	& 	& 	& 
		&  
			 	 	 	 	 	 	 	 
		 r   r5   r   event_idc                0    d }t          | |||f          S )Nc                .    ddl m} | |_        ||_        d S )Nr   )thread_data)gradio.contextr  r5   r  )r5   r  r  s      r'   r  z+get_function_with_locals.<locals>.before_fn  s*    ......#'r   )r  r  )r  )r  r5   r  r  s       r'   get_function_with_localsr    s-    ( ( ( B)&(ASTTTTr   task_idsset[str]c                    K    fdt          j                    D             }|D ]}|                                 t          j        |ddi d {V  d S )Nc                @    g | ]}|                                 v |S r&   )get_name)rx   taskr  s     r'   rz   z cancel_tasks.<locals>.<listcomp>  s2       80K0K0K0K0Kr   return_exceptionsT)r"   	all_taskscancelgather)r  matching_tasksr  s   `  r'   cancel_tasksr    s          *,,  N   
..
AD
A
AAAAAAAAAAr   session_hashfn_indexintbatchc                B    |s|                      | d|            d S d S )NrP  )set_name)r  r  r  r  s       r'   set_task_namer    s:     42222333334 4r   r9   list[dict[str, Any]]tuple[Callable, list[int]]c                   i | D ]Zt           j        rLt          fdt          t           j        j                  D                       }d d         D             |<   [d	fd}|t                                                    fS )
Nc              3  .   K   | ]\  }}|k    |V  d S r,   r&   )rx   ir}   deps      r'   r   z&get_cancel_function.<locals>.<genexpr>  s5        aAQTHHHHHH r   c                <    g | ]}t           j        j        |         S r&   )r   
root_blockr5   )rx   os     r'   rz   z'get_cancel_function.<locals>.<listcomp>  s0     $ $ $12")!,$ $ $r   r   r  rH   r   rM   c                T    K    fdD             }t          |           d {V  d S )Nc                    h | ]	} d | 
S )rP  r&   )rx   r  r  s     r'   	<setcomp>z6get_cancel_function.<locals>.cancel.<locals>.<setcomp>  s'    @@@r|**b**@@@r   )r  )r  r  
fn_to_comps   ` r'   r  z#get_cancel_function.<locals>.cancel  sG      @@@@Z@@@8$$$$$$$$$$$r   )r  rH   r   rM   )r   r  r   	enumerater9   rq   keys)r9   r  r  r  r  s      @@r'   get_cancel_functionr    s     J   	    '(:(GHH    H$ $69)n$ $ $Jx % % % % % %
 	Z__ r   c                   dd l }ddl m}m} t          j        |           st          j        |           rnt          |           r| j        } ni S 	 t          j	        |           S # t          $ r i }t          j        |           }|j                                        D ]\  }}|j        t          j        j        u r|j        dk    rt"          |         ||<   dt%          |j                  v rP	 t          j        t          j        |j                  t+                      t-                                ||<   # t.          t          f$ r Y w xY w|cY S w xY w)Nr   )OAuthProfileRequestzgr.OAuthProfile | None|)r   r  r  r   
isfunctionismethodcallable__call__typingget_type_hints	TypeErrorr   r   r>  
annotationr   r   r   rH   
_eval_type
ForwardRefglobalslocalsr   )r  grr  r  
type_hintssigrL  params           r'   r  r    s   ,,,,,,,," !1"!5!5 	" [	$R(((    
##>//11 	 	KD%7#4#:::#;;;#+L#9
4 c%*++++
#)#4%e&677FHH$ $
4   y)   1s8   A$ $B	E.AD76E7EE
EEEc                    ddl m} ddlm} ddlm} 	 |                    |           }|sdS ||k    }||t          |         fv }t          j	        |          ot          ||          }|p|p|S )Nr   )	EventData)r  )r  F)gradio.helpersr  gradio.oauthr  gradio.routesr  rh   r   r   isclassrZ  )	rL  parameter_typesr  r  r  hint
is_requestis_oauth_argis_event_datas	            r'   is_special_typed_parameterr    s    (((((())))))%%%%%%nt$$D uJL(<*@AALOD))Ijy.I.IM66,6r   r  rq   inputs_as_dictc           	        t          j        |           }t          |           }d}d}d}|j                                        D ]s\  }}	|	j        |	j        k    }
|	j        |	j        |	j	        fv rt          ||          s|
s|dz  }|dz  }G|	j        |	j        k    r|}Z|	j        |	j        k    r	|
sd|  c S t|rdnt          |          }||k    r$||k    rt          j        d| d|  d| d           ||k     rt          j        d	| d|  d| d           ||k    r&||k    r"t          j        d
| d|  d| d           dS dS dS )z
    Checks if the input component set matches the function
    Returns: None if valid, a string error message if mismatch
    r   r   z8Keyword-only args must have default values for function z	Expected z arguments for function z, received .zExpected at least zExpected maximum N)r   r   r  r   r>  r   r   kindPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr  VAR_POSITIONALKEYWORD_ONLYr"  warningswarn)r  r  r  r   r  min_argsmax_argsinfinityrL  r  has_default	arg_counts               r'   check_function_inputs_matchr    s    !"%%I$R((OHHH +1133 
S 
Semu{2:%/1LMMM-dODD " "MHAZ5///HHZ5---k-RbRRRRR#4VI8I 5 5UUU"UUUUU	
 	
 	
 8^^^2^^R[^^^	
 	
 	
 8	H 4 4]]]"]]QZ]]]	
 	
 	
 	
 	
  4 4r   queueCallable[P, T]c                H     t          j                   d fd            }|S )	Nr_  P.argsr`  P.kwargsr   r   c                     | ^}}t                      r+t          |          dk    sd|v rt          j        d            | i |S )Nr   concurrency_countzQueue concurrency_count on ZeroGPU Spaces cannot be overridden and is always equal to Block's max_threads. Consider setting max_threads value on the Block instead)r   r"  r  r  )r_  r`  _self
positionalr  s       r'   r  z*concurrency_count_warning.<locals>.wrapper  sh    !
 	
OOq  $76$A$AMJ  
 ud%f%%%r   )r_  r   r`  r!  r   r   )r  r  )r  r  s   ` r'   concurrency_count_warningr&    s=    _U
& 
& 
& 
& 
& 
& Nr   c                      e Zd Zd Zd ZdS )TupleNoPrintc                    dS NrQ  r&   r-   s    r'   __repr__zTupleNoPrint.__repr__(      rr   c                    dS r*  r&   r-   s    r'   __str__zTupleNoPrint.__str__+  r,  r   N)r>   r?   r@   r+  r.  r&   r   r'   r(  r(  &  s2              r   r(  c                      e Zd Zd Zd ZdS )MatplotlibBackendManangerc                ^    t          j                    | _        t          j        d           d S )Nagg)
matplotlibget_backend_original_backenduser-   s    r'   	__enter__z#MatplotlibBackendMananger.__enter__0  s)    !+!7!9!9ur   c                8    t          j        | j                   d S r,   )r3  r6  r5  )r.   exc_typeexc_valexc_tbs       r'   __exit__z"MatplotlibBackendMananger.__exit__4  s    t-.....r   N)r>   r?   r@   r7  r<  r&   r   r'   r0  r0  /  s2          / / / / /r   r0  c           	     `   t                      5  dd lm} d}d}|                    dd           |                    d          }|                    ddd	|  d	|
           t                      }|                    ||dddd           |                    |           |	                    d           |
                                                    d          }|                    d          }||d          }	t          j        dd|	t          j                  }	t          j        dd|	          }	t          j        d|	          }
|
rAt#          |
                    d                    }||z  }t          j        dd| d|	          }	d|  d}d d d            n# 1 swxY w Y   | |	 S )Nr      i,  mathtextcm)fontset){Gz?rB  )figsize$)fontsizeTsvgtightg        )dpitransparentformatbbox_inches
pad_incheszutf-8z<svg z<metadata>.*<\/metadata>rQ  )flagsz width="[^"]+"zheight="([\d.]+)pt"r   zheight="[\d.]+pt"zheight="zem"z<span style='font-size: 0px'>z</span>)r0  matplotlib.pyplotpyplotrcfigurer   r   savefigcloseseekreaddecodeindexresubDOTALLsearchr  r8  )formular_  pltrE  rH  figr6  xml_code	svg_startsvg_codeheight_matchheight
new_height	copy_codes                 r'   tex2svgrf  8  s$   	"	$	$ E E''''''z4(((jjj..AG::: 	 	
 	
 	
 			#A;;==''00NN7++	IJJ'65r829UUU6+R::y!7BB 	<--a0011F(*Jv$&@&@&@&@( H EGDDD	?E E E E E E E E E E E E E E E@ ####s   FFF#&F#
str | Pathr
   c                8   t          |           } |                                 r| S |                                 pt          d | j        D                       }|s| |                                 k    rt          j                    | z  S |                                 S )zKReturns absolute path of a str or Path path, but does not resolve symlinks.c              3  >   K   | ]}|                                 V  d S r,   )
is_symlink)rx   r   s     r'   r   zabspath.<locals>.<genexpr>d  s?       * * &* * * * * *r   )r
   is_absoluterj  r  parentsrs   cwd)ru   rj  s     r'   abspathrn  \  s    ::D  "" c * **.,* * * ' 'J  TT\\^^++xzzD  ||~~r   path_1path_2c                    t          |           t          |          }} 	 t          |                     |                                        d          rdS n# t          $ r Y dS w xY wdS )z
    True if path_1 is a descendant (i.e. located within) path_2 or if the paths are the
    same, returns False otherwise.
    Parameters:
        path_1: str or Path (should be a file)
        path_2: str or Path (can be a file or directory)
    z..FT)rn  rH   relative_tor  r[  )ro  rp  s     r'   r|   r|   n  s{     V__gfooFFv!!&))**55d;; 	5	   uu4s   5A 
A&%A&blockr   c                j    t          | d          sd S dfd | j                  }|r|j        S d S )N	serializemethr   c                   t          | t          j                  r | j                  S t	          j        |           s;t	          j        |           rt          | dd           |t          | j        dd           rft	          j	        | j        j
                  D ]6}t          |t                    rd|j        v r|c S | j        |j        v r|c S 7t          | d|           } t	          j        |           rst          t	          j        |           | j                            dd          d                             dd          d         d           }t          |t*                    r|S t          | d	d           S )
N__self__rQ   gradio_client__func__z	.<locals>r   r   r  __objclass__)rI  r  partialr   r   r  	isbuiltinr   rx  getmrorQ   rZ  r   r?   r>   rV  r  	getmoduler@   splitrsplitrJ  )rv  rM  get_class_that_defined_methods     r'   r  z:get_serializer_name.<locals>.get_class_that_defined_method  s|   dI-.. 	<00;;;D!! 	3d##	3j$//;{D99 < ~dm&=>>  c<00 _5V5VJJJ=CL00JJJ 14T22Dd## 	!$''!''Q77:AA#qII!L C
 #t$$ 
t^T222r   )rv  r   )r4   ru  r>   )rs  rM  r  s     @r'   get_serializer_namer    sf    5+&& t3 3 3 3 3 34 (
'
8
8C
 | r   z<.*?>raw_htmlc                <    t          j        t          d| pd          S r*  )rX  rY  HTML_TAG_RE)r  s    r'   remove_html_tagsr    s    6+r8>r222r   c                     t          j                    } d}| rEt          j        |           }d|                    t          j        d          vrn| j        } |dz  }| E|S )z7
    Find the first stack frame not inside Gradio.
    r   z/gradio//r   )r   currentframer   rY  r   sepf_back)framenfnames      r'   find_user_stack_levelr    sm      ""E	A
 &&U]]2637777	Q   Hr   )r   r    )r`   rC   r]   )r   r   )r   rH   r   rH   )r   r   r   rM   r^   )r   r   r   r   )r   )r   r   r   r   r   r   )r.  rH   r/  r0  )F)r;  r   r<  rS   r   r   )r@  rA  r   r   )rD  rH   r   rE  )r   r   )ru   rw  )r   r}  r   r}  )r   r   r   r   )rL  rH   r  rF   )r  rH   r   rS   )r  r   r  r  r   r   )NNNN)r  r   r5   r   r  r   )r  r  )r  rH   r  r  r  rS   )r9   r  r   r  )r  r   r  rq   r  rS   )r  r  r   r  )ru   rg  r   r
   )ro  rg  rp  rg  )rs  r   r   r   )r  r   r   rH   )r   r  )yrt  
__future__r   r"   r  r  r   r   r   json.decoderr   pkgutilr  r   rX  	threadingr  r   r  r  abcr   r   
contextlibr   ior   numbersr   pathlibr
   typesr   r   r   r   r   r   r   rp  r3  r   gradio_client.serializingr   typing_extensionsr   r   r  r   gradio.stringsr   rR  r   r   r   rS  r   r  r   ru   joindirnamer   r   get_datar>   rV  stripGRADIO_VERSIONr   r   r(   r*   rC   r   r   r   r   r   r   r   r   r   r   r   r-  r:  r?  rC  r\  rb  rh  rj  rv  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r   r(  r0  rf  rn  r|   r  compiler  r  r  r&   r   r'   <module>r     s       " " " " " "                 				    				            # # # # # # # # % % % % % %                                              2 2 2 2 2 2 ' ' ' ' ' '  " " " " " "       "9999999999++++++!!!!!!GLL99?KK	Wh..5#==gFFLLNN  IcNNGCLL
 
 
 
' ' ' ' '3 ' ' '.! ! ! ! ! ! ! !HM M M M`   "             2 2 2 2         $    6?6 6 6 6 6r   $	 	 	 	 	   $A $A $A $AN9 9 9 98- - -
 
 
 
 
 
 
 
 & & &
               	 	 	 	I I I
 
 
 
 DH6 6 6 6rU U U UB B B B4 4 4 4
   .& & &R7 7 7"
 "
 "
 "
J   "    5   / / / / / / / /!$ !$ !$H   $   "       F bj!!3 3 3 3     r   