
    +j                     t   U d 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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!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- dd
l.m/Z/m0Z0 ddlm1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9Z9ddl:m;Z< ddl=Z=ddl>Z>ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF ddlGZGddlGmHZH ddlImJZJ ddlKmLZLmMZMmNZNmOZO ddlPmQZQmRZR ddlSmTZU ddlSmVZW e1r"ddlXmYZYmZZZ ddl[m\Z\ ddl]m^Z^ ddl_m`Z`maZa ddlbmcZc  eFd          Zd e6d          Zed  eHjf                     eHjT                     eHjg                     eHjh                     eHji                     eHjj                     eHjk                     eHjl                     eHjm                    f	D             ZneoepeWf         eqd<   depfd Zrdejs        fd!Ztdeju        fd"Zv G d# d$ew          Zx exd%          Zy G d& d'e          Zz G d( d)ez          Z{ G d* d+e{          Z| G d, d-e{          Z}d.e|fd/Z~d.e}ddfd0Zd1e2d2e2defd3Zdd7Zdefd8Zdefd9Zdefd:Zdepdz  fd;Zdefd<Zd=eWepz  dz  deWfd>Zd?epdepfd@Ze
j                            e
j                            eGj                  dA          ZdepfdBZdCe!dee2         fdDZdEe2de2fdFZ	 ddHeLdIeLdJefdKZ	 ddMeodNedOeep         dz  deofdPZdQee2         e2z  de2fdRZddTZdU ZdVepddWfdXZdCe!fdYZdZ Z G d[ d\          Zd] Ze(d^e-epz  fd_            Ze(d`             Zdaepez  depez  fdbZdcee2         dee2         fddZdeepdfeep         fdgZdhepdefdiZdj Z	 	 	 	 ddke!dle!dz  dme#dz  dne!dz  doe#dz  f
dpZdqe!drd5dsepdz  dtedudvdwdxfdyZdzeep         deep         fd{Zd|epd}ewdsepd~efdZdeeoepe2f                  deew         fdZd Zd Zdqe!de&defdZ G d de          Z G d d          Zd Zd^epe-z  de-fdZdepe-z  depe-z  defdZ e@            depe-z  eepe-z           z  ddfd            Zde2fdZde2dee-         defdZ ej        dej                  Zdepdz  depfdZdewfdZ G d dep          Zd ZdepdepfdZ e6d          Z e6d          Z G d dee3eef                   Zde-fdZd ZdepfdZdCe!deeepee2e2f                  fdZdCe!defdZd Zd Zd Zdke!de!fdZ G d d          Zdepewz  dz  dewdz  fdZdefdZddeLdefdZd Zdedz  dedeoepeepz  ez  dz  f         fdZ G d de%          ZdeMd^eOdepfdZd^e-de&epe-z           de&epe-z           de&epe-z           deee4d         f         f
dZd Zdae2defdZdepdepfdÄZdĄ Zdqe!deepeoepepf         eep         f         fdńZdƄ Z	 	 ddddeep         dz  ddfd˄ZdS )zHandy utility functions.    N)ABCabstractmethod)OrderedDict)CallableHashableIterableIteratorMutableMappingSequence)contextmanagerwraps)BytesIOPath)
ModuleTypeNoneType)TYPE_CHECKINGAnyGenericLiteralOptionalTypeVarget_args
get_origin)document)AppError)version)	ParamSpec)themes)get_blocks_context)BlocksConfigDictDeveloperPathFileDataUserProvidedPath)ErrorInvalidPathError)Default)
ThemeClass)BlockContextBlocks	ComponentButton)AppRequest)SessionStatePTc                     i | ]
}|j         |S  name).0ts     P/home/wildlama/visual-decline/.venv/lib/python3.11/site-packages/gradio/utils.py
<dictcomp>r<   V   s,     % % %	 FA% % %    BUILT_IN_THEMESreturnc                      	 t          j        t          d                              d                                          } t          j        |           }|                    dd          }|S # t          $ r Y dS w xY w)Nzpackage.jsonutf-8r    )	pkgutilget_data__name__decodestripjsonloadsget	Exception)package_json_datapackage_datar   s      r;   get_package_versionrN   f   s    X~66==gFFLLNN 	 z"344""9b11   rrs   A*A- -
A;:A;c                      	 t          j                    } n7# t          $ r* t          j                    } t          j        |            Y nw xY wt          j                    S )zGet asyncio.Lock() without fear of getting an Exception.

    Needed because in reload mode we import the Blocks object outside
    the main thread.
    )asyncioget_running_loopRuntimeErrornew_event_loopset_event_loopLockloops    r;   safe_get_lockrX   r   se    %')) % % %%''t$$$$$% <>>    1A
	A
c                      	 t          j                    } n7# t          $ r* t          j                    } t          j        |            Y nw xY wt          j                    S N)rP   rQ   rR   rS   rT   EventrV   s    r;   safe_get_stop_eventr]      se    %')) % % %%''t$$$$$% =??rY   c                   ,    e Zd ZdefdZd ZdefdZdS )DynamicBooleanvaluec                 .    t          |          | _        d S r[   boolr`   selfr`   s     r;   __init__zDynamicBoolean.__init__       %[[


r=   c                     | j         S r[   r`   re   s    r;   __bool__zDynamicBoolean.__bool__   s
    zr=   c                 .    t          |          | _        d S r[   rb   rd   s     r;   setzDynamicBoolean.set   rg   r=   N)rE   
__module____qualname__intrf   rk   rm   r6   r=   r;   r_   r_      sY        !c ! ! ! !  ! ! ! ! ! ! !r=   r_   Tc                   N    e Zd Zeed
d                        ZdedefdZddZ	d	S )BaseReloaderr?   r0   c                     d S r[   r6   rj   s    r;   running_appzBaseReloader.running_app   	     	r=   attrc                    t          |d|           r&t          |d|           t          |d|           S t          ||          r t          ||          t          ||          S t          | j        j        |          S )N_deprecated_)hasattrgetattrrt   blocks)re   rv   demos      r;   get_attributezBaseReloader.get_attribute   s    D///00	:3T3344@4!6!6!6777T4   	:WT4%8%8%D4&&&4+2D999r=   r|   r+   c                 n   | j         j        sJ | j         j        j        |_        d|_        | j         j        j        |_        d|_        | j         j        j        |_        | j         j        j        |_        |                     d|          |_	        |                     d|          |_
        |                     d|          |_        |                     d|          |_        |                     d|          |_        |                     d|          |_        |                     d|          |_        |                                 | j         j                            |           | j         j        j                                        D ] }t+          j        |j                  |_        !|| j         _        d S )	NTthemecss	css_pathsjshead
head_pathsserver)rt   r{   _queuehas_launchedmax_file_size
is_runningallowed_pathsblocked_pathsr}   r   r   r   r   r   r   r   _set_html_css_theme_variablesstate_holder
set_blockssession_datavaluescopydefault_configblocks_config)re   r|   sessions      r;   swap_blockszBaseReloader.swap_blocks   s   &&&& &-4 !-4B!-4B!-4B''66
%%eT22++K>>$$T400&&vt44	,,\4@@((488**,,,%00666'4AHHJJ 	C 	CG$(Id.A$B$BG!!"&r=   Nr?   r0   r|   r+   )
rE   rn   ro   propertyr   rt   strr   r}   r   r6   r=   r;   rr   rr      sr           ^ X	:# 	: 	: 	: 	: 	:' ' ' ' ' 'r=   rr   c                   `    e Zd Zeedej        fd                        ZddZde	de
de
fdZdS )	ServerReloaderr?   c                     d S r[   r6   rj   s    r;   
stop_eventzServerReloader.stop_event   ru   r=   Nc                 8    | j                                          d S r[   )r   rm   rj   s    r;   stopzServerReloader.stop   s    r=   moduledefault_namec                 t   d }| j         j        x} |d           |S |r5|j                            |          |ur |d| d|j         d           |S |j                                                                        D ]"\  }}||u r|dk    r |d| d           |c S # |d	|j         d
           dS )Nc                       t          dg| R   d S )NzGRADIO_HOT_RELOAD:)print)argss    r;   logz)ServerReloader.get_demo_name.<locals>.log   s    &.......r=   z,Unexpected undefined blocks in launching app'z' in z is not the launched demor|   zUsing 'z' for demo namezLaunching demo not found in z. Using 'demo')rt   r{   __dict__rJ   rE   r   items)re   r   r   r   r|   r8   r`   s          r;   get_demo_namezServerReloader.get_demo_name   s   	/ 	/ 	/ $++D4C>??? 	 ""<00<<UUU6?UUUVVV!?//117799 	 	KD%}}6>>C7$777888  	J6?JJJKKKvr=   r?   N)rE   rn   ro   r   r   	threadingr\   r   r   r   r   r   r6   r=   r;   r   r      s        IO    ^ X   J c c      r=   r   c            
            e Zd Zdddee         dedej        def
dZe	dd	            Z
e	dej        fd
            Zd Zd Zd fdZ xZS )SpacesReloaderappr0   
watch_dirswatch_moduler   	demo_namec                     ddl m} || _        |                     ||          | _        || _        || _        || _        || _        d S )Nr   reload_thread)gradio.cli.commands.reloadr   r   r   r   r   r   _stop_event)re   r   r   r   r   r   r   s          r;   rf   zSpacesReloader.__init__   sY     	=<<<<<++L)DD$(*%r=   r?   c                     | j         S r[   r   rj   s    r;   rt   zSpacesReloader.running_app   	    xr=   c                     | j         S r[   r   rj   s    r;   r   zSpacesReloader.stop_event       r=   c                 R    t                               d           d| j        _        d S )NFT)	NO_RELOADrm   r   running_reload)re   _args_kwargss      r;   prerunzSpacesReloader.prerun   s%    e,0)))r=   c                     t                               d           t          | j        | j                  }|| j        j        ur|                     |           dS dS )NTF)r   rm   rz   r   r   rt   r{   r   )re   r   r   r|   s       r;   postrunzSpacesReloader.postrun   sW    dt($.99t'...T"""4ur=   r|   r+   c                 |    t                                          |           |                                |_        d S r[   )superr   get_config_fileconfig)re   r|   	__class__s     r;   r   zSpacesReloader.swap_blocks  s2    D!!!**,,r=   r   r   )rE   rn   ro   listr   r   r   r\   rf   r   rt   r   r   r   r   __classcell__r   s   @r;   r   r      s        && I& !	&
 O& & & & &"    X  IO       X 1 1 1  - - - - - - - - - -r=   r   c                        e Zd Z	 ddddee         dedededej        d	ed
df fdZe	dd            Z
e	d
ej        fd            Zd
efdZdded         fdZd fdZ xZS )SourceFileReloaderrA   r   r0   r   watch_module_name	demo_filer   r   r   r?   Nc	                 $   t                                                       || _        || _        || _        || _        |                     ||          | _        t          d| j                   t          |          | _
        || _        || _        d S )NzWatching demo:)r   rf   r   r   r   r   r   r   r   r   r   r   encoding)
re   r   r   r   r   r   r   r   r   r   s
            r;   rf   zSourceFileReloader.__init__
  s     	$!2%++L)DD///i( r=   c                     | j         S r[   r   rj   s    r;   rt   zSourceFileReloader.running_app   r   r=   c                     | j         S r[   r   rj   s    r;   r   zSourceFileReloader.stop_event$  r   r=   c                 6    | j                                          S r[   )r   is_setrj   s    r;   should_watchzSourceFileReloader.should_watch(  s    ?))++++r=   reloadchange_type)r   errorc                 H    || j         _        | j         xj        dz  c_        d S )N   )r   r   change_count)re   r   s     r;   alert_changezSourceFileReloader.alert_change+  s(    *"r=   r|   r+   c                     | j         j        }t                                          |           |rt	          ||           |                                |_        |                     d           d S )Nr   )rt   r{   r   r   reassign_keysr   r   r   )re   r|   
old_blocksr   s      r;   r   zSourceFileReloader.swap_blocks/  sk    %,
D!!! 	,*d+++**,,(#####r=   )rA   r   )r   r   )rE   rn   ro   r   r   r   r   r\   rf   r   rt   r   rc   r   r   r   r   r   r   s   @r;   r   r   	  sC        ! !! I! 	!
 ! !! O! ! 
! ! ! ! ! !,    X  IO       X ,d , , , ,# #0A(B # # # #$ $ $ $ $ $ $ $ $ $r=   r   reloaderc                 \   	 t           j                            d          }n(# t           j        j        $ r t	          d          d w xY wt          j        d          }t          j        |          |k     rt	          d| d          ddlm}  || j        | j	        | j
                   d S )	Nspacesz;`spaces` package is required to run hot-reloading in Spacesz0.43.0z&Spaces hot-reloading requires `spaces>`r   )start_reload_server)r   r   r   )	importlibmetadatar   PackageNotFoundErrorrR   parsespaces.reloadingr   r   r   r   )r   spaces_versionmin_versionr   s       r;   watchfn_spacesr   8  s    "+33H==2   I
 
	
 -))K}^$${22RKRRRSSS       &     s	   " %Ac                    ddl m} t                              d           d|_        dt
          dz  ffd}dt          t
                   ffdd	 | j        D             ddl}d
 t          j
                    D             fd}D ]*}|j                            dt          |                     +i | j        }t          t          | j                                                | j                  }ddlm} d|_        t+          ||j                   t/          || j        d          }	|	Xt3          |	d          rH|	j        rAt7          |j        t7          |	j                                                  dz             |_        ||j        | j        <   |                                 r |            }
|
rtA          d|
            	 tC          |j        "                                          D ]/\  }}t/          |dd          }|r ||          r|dvr|j        |= 0t                              d           t          t          | j                                                | j                  }t+          ||j                   t/          || j                  }	| #                    |	           i n# tH          $ r}tA          d| j         d           tK          |tL                    r|j'        rtQ          j)                     i | *                    d           tQ          j+                    | j,        _-        Y d}~d}~ww xY wt]          j/        d           |                                 dS dS )ziWatch python files in a given module.

    get_changes is taken from uvicorn's default file watcher.
    r   r   FTr?   Nc                                   D ]T} 	 |                                  j        }n# t          $ r Y )w xY w                    |           }||| <   J||k    r| c S Ud S r[   )statst_mtimeOSErrorrJ   )filemtimeold_timeiter_py_filesmtimess      r;   get_changeszwatchfn.<locals>.get_changes^  s    !MOO 	 	D		,    zz$''H$t!! "ts   )
66c               3     K   D ]x} t          |                     d                    D ]}|                                V  t          |                     d                    D ]}|                                V  yd S )Nz*.pyz*.css)r   rglobresolve)
reload_dirpathreload_dirss     r;   r   zwatchfn.<locals>.iter_py_filesm  s      % 	% 	%JZ--f5566 % %llnn$$$$Z--g6677 % %llnn$$$$%	% 	%r=   c                 ,    g | ]}t          |          S r6   r   )r9   dir_s     r;   
<listcomp>zwatchfn.<locals>.<listcomp>t  s    >>>$4::>>>r=   c                 P    g | ]#}t          |                                          $S r6   r   r   r9   ps     r;   r  zwatchfn.<locals>.<listcomp>w  s(    LLL$q''//++LLLr=   c                       sdS 	 t                                                      n# t          $ r Y dS w xY wt           fdD                       }t           fdD                       }|o| S )NFc              3   B   K   | ]}                     |          V  d S r[   is_relative_to)r9   	watch_dir	file_paths     r;   	<genexpr>zIwatchfn.<locals>.is_in_watch_dirs_and_not_sitepackages.<locals>.<genexpr>  s1      XXyy//	::XXXXXXr=   c              3   B   K   | ]}                     |          V  d S r[   r
  )r9   site_dirr  s     r;   r  zIwatchfn.<locals>.is_in_watch_dirs_and_not_sitepackages.<locals>.<genexpr>  sB       
 
3;I$$X..
 
 
 
 
 
r=   )r   r   rK   any)r  in_watch
in_sitepkgr   site_packages_dirss   `  r;   %is_in_watch_dirs_and_not_sitepackagesz6watchfn.<locals>.is_in_watch_dirs_and_not_sitepackagesy  s     	5	Y//11II 	 	 	55	XXXXKXXXXX 
 
 
 
?Q
 
 
 
 

 *
N*s   !* 
88)r   )Contextr{   r   zChanges detected in: __file__>   gradio.utilsgradio.contextgradio.cli.commands.reloadz
Reloading z& failed with the following exception: r   皙?)0r   r   r   rm   r   r   r	   r   syssitegetsitepackagesr   insertr   r   r   	read_textr   gradio.contextr  idexecr   rz   r   ry   r{   maxkeysmodulesr   r   r   r   r   r   rK   
isinstancer&   print_exception	traceback	print_excr   
format_excr   reload_error_messagetimesleep)r   r   r   r  r  r  r   no_reload_source_coder  r|   changedmodnamemodr   r   r   r   r   r  s                  @@@@r;   watchfnr3  O  s    988888MM%#'M        %8D> % % % % % % ?>(*=>>>KJJJLLT5I5K5KLLL+ + + + + +  & &3t99%%%%F "F X%7!8!899CC" D  
 '&&&&&GJ	000 68-t44DGD(33S)9)9););%<%<q%@AA
.4CK*+



!
! )+-- &	3'33444$ %)):):)<)<$=$= 1 1LGS"3
D99D
1AA$GG
1 $    K0e$$$(,S1C-D-D(E(E(O(O%. )P ) )% *FO<<<vx'9::$$T*** 	 	 	c!;ccc   "%// *53H *')))%%g...4=4H4J4J1	 	
4S 


!
! ) ) ) ) )s   C+J? ?
M	A;M

Mabc                     dt           dt          fd}	  ||            ||          k    S # t          $ r 	 | |k    cY S # t          $ r Y Y dS w xY ww xY w)z
    Deep equality check for component values.

    Prefer orjson for performance and compatibility with numpy arrays/dataframes/torch tensors.
    If objects are not serializable by orjson, fall back to regular equality check.
    r4  r?   c                 \    t          j        | t           j        t           j        z            S )N)option)orjsondumpsOPT_SERIALIZE_NUMPYOPT_PASSTHROUGH_DATETIME)r4  s    r;   
_serializezdeep_equal.<locals>._serialize  s,    |-0OO
 
 
 	
r=   F)r   bytes	TypeErrorrK   )r4  r5  r=  s      r;   
deep_equalr@    s    
c 
e 
 
 
 
z!}}

1--   	6MMM 	 	 	555	s)   , 
A?A
A	AAAr   r+   
new_blocksc                     ddl m}m d |j                                        D             d|d z  d|ffd | |           d S )Nr   )Blockr*   c                 *    g | ]}|j         	|j         S r[   key)r9   blocks     r;   r  z!reassign_keys.<locals>.<listcomp>  s(       UY=R	=R=R=Rr=   	old_block	new_blockc                    | j         j        |j         j        k    }|j        X|rF| D| j        vr;t          t	          | dd           t	          |dd                     r| j        |_        nd|j         d|_        t          |          rV|rVt          |j                  D ]C\  }}t	          | dg           }|t          |          k     r||         nd } 	||           @d S d S d S )Nr`   __children)
r   rE   rF  r@  rz   _idr'  	enumeraterL  len)
rH  rI  same_block_typeinew_block_childold_childrenold_block_childr*   new_keysreassign_context_keyss
          r;   rV  z,reassign_keys.<locals>.reassign_context_keys  s6    $-6):M:VV= 7)M11Iw55Iw55  2 !*	 6Y] 6 6 6	i.. 	H? 	H&/	0B&C&C H H"?&y*bAA56\9J9J5J5J,q//PT%%oGGGG		H 	H 	H 	HH Hr=   )gradio.blocksrC  r*   r{   r   )r   rA  rC  r*   rU  rV  s      @@@r;   r   r     s    11111111 )07799  HH4<HH H H H H H H H2 *j11111r=   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.getipythonrZ  r   ImportError	NameError)is_colabrZ  
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 )z^
    Check if Gradio app is launching from a hosted notebook such as Kaggle or Sagemaker.
    KAGGLE_KERNEL_RUN_TYPEz/home/ec2-user/SageMaker)rc   osenvironrJ   r   existsr6   r=   r;   is_hosted_notebookrf    s?     

/00 	67>>455  r=   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   rY  NT)r[  rZ  r\  r]  )
is_ipythonrZ  s     r;   ipython_checkri  #  s]    
 J777777;==$J#   s    ++c                  ^    t          j        d          dk    rt          j        d          S d S )NSYSTEMr   SPACE_IDrc  getenvr6   r=   r;   	get_spacero  3  s,    	yh&&y$$$4r=   c                  2    t          j        d          dk    S )NSPACES_ZERO_GPUtruerm  r6   r=   r;   is_zero_gpu_spacers  9  s    9&''611r=   r   c           	         | t                      } nt          | t                    r|                                 t          v r t          |                                          } nb	 t          j        |           } nL# t          $ r?}t          j	        d|  dt          |                      t                      } Y d }~nd }~ww xY w| S )NzCannot load z. Caught Exception: )
DefaultThemer'  r   lowerr>   Themefrom_hubrK   warningswarn)r   es     r;   	get_themer|  =  s    }	E3		 ';;==O++#EKKMM2EE'u-- ' ' 'PUPPAPPQQQ$' Ls   #A8 8
C5B<<Carticlec                    	 t           j                            |           }t          |j        |j        |j        g          }|o|j        dv }n# t          $ r d}Y nw xY w|s| S 	 t          j	        | d          }|j
        t          j        j        k    r|j        } n,# t          j        t          j        t          j        f$ r Y nw xY w| S )N)httphttpsF   )timeout)urllibr   urlparseallschemenetlocr   
ValueErrorhttpxrJ   status_codecodesOKtext
InvalidURLRequestErrorTimeoutException)r}  resultis_urlresponses       r;   download_if_urlr  L  s    &&w//fmV]FK@AA>FM->>     9Wa0005;>11mGe0%2HI    Ns$   AA AA%7B &CCzhash_seed.txtc                      	 t           j                            t                    rTt	          t                    5 } |                                                                 cd d d            S # 1 swxY w Y   d S t	          t          d          5 } t          j                    j	        }| 
                    |           |cd d d            S # 1 swxY w Y   d S # t          $ r t          j                    j	        cY S w xY w)Nw)rc  r   re  HASH_SEED_PATHopenreadrG   uuiduuid4hexwriterK   )jseeds     r;   get_hash_seedr  d  sf   
 7>>.)) 	n%% (vvxx~~''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( nc** az||'                        z|| s^   8C &A- C -A11C 4A15C :C /C>C CC CC "C=<C=funcc                 p    t          j        |           }d |j                                        D             S )Nc                 P    g | ]#}|j         t          j        j        ur|j         nd $S r[   )defaultinspect	Parameteremptyr9   vs     r;   r  z$get_default_args.<locals>.<listcomp>t  s@        Yg&7&===		4  r=   )r  	signature
parametersr   )r  r  s     r;   get_default_argsr  r  sB    !$''I %,,..   r=   objc                    	 t          j        |           S # t          $ r t          | t                    r d |                                 D             cY S t          | t                    rd | D             cY S t          | t                    rt          d | D                       cY S t          | t                    rd | D             cY S t          j         |           cY S w xY w)Nc                 N    i | ]"\  }}t          |          t          |          #S r6   safe_deepcopy)r9   rF  r`   s      r;   r<   z!safe_deepcopy.<locals>.<dictcomp>  s;       =GS%c""M%$8$8  r=   c                 ,    g | ]}t          |          S r6   r  r9   items     r;   r  z!safe_deepcopy.<locals>.<listcomp>       888DM$''888r=   c              3   4   K   | ]}t          |          V  d S r[   r  r  s     r;   r  z safe_deepcopy.<locals>.<genexpr>  s*      ==t,,======r=   c                 ,    h | ]}t          |          S r6   r  r  s     r;   	<setcomp>z safe_deepcopy.<locals>.<setcomp>  r  r=   )	r   deepcopyrK   r'  dictr   r   tuplerm   )r  s    r;   r  r  z  s   "}S!!! " " "c4   	" KN99;;      T"" 	"88C888888U## 	"==========S!! 	"88C8888889S>>!!!"s'    =C"!C"8.C"(!C"C"!C"modeconfig1config2	root_keysc                     t          j                    t          j                  t          j        t          j                              t          j        t          j                            |D ]&} |         |         k    rt          d|           't           d                   t          d                   k    rt          d           fdfdd v rWdvrt          d           d                             dg           }d                             dg           } ||           d	 v r=d	vrt          d
          t           d	         d	         d          D ]
\  }}t          |	                    d          |	                    d          d          D ]\  }}	 |d         |	d                    t          |	                    d          |	                    d          d          D ]\  }
} |
|           t          |	                    d          |	                    d          d          D ]\  }} ||           ||k    rt          | 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.
    zConfigs have different: 
componentsz# of components are differentc                 0    t          t           fdd                             }t          |          dk    rt          d            |d         }t          t          fdd                             }t          |          dk    rt          d           |d         }t	          j        |          }|                    d           t	          j        |          }|                    d           ||k    rt          | d|           d S )Nc                     | d         k    S Nr"  r6   )c
config1_ids    r;   <lambda>z[assert_configs_are_equivalent_besides_ids.<locals>.assert_same_components.<locals>.<lambda>      1T7j#8 r=   r  r   z!Could not find component with id c                     | d         k    S r  r6   )r  
config2_ids    r;   r  z[assert_configs_are_equivalent_besides_ids.<locals>.assert_same_components.<locals>.<lambda>  r  r=   r"   does not match )r   filterrO  r  r   r  pop)r  r  c1c2r  r  s   ``  r;   assert_same_componentszIassert_configs_are_equivalent_besides_ids.<locals>.assert_same_components  s   &8888',:OPPQQr77a<<MMMNNNU&8888',:OPPQQr77a<<MMMNNNU]2
t]2
t8888B88999 8r=   c                     t          | |d          D ]=\  }} |d         |d                    d|v sd|v r |d         |d                    >d S )NFstrictr"  rL  )zip)	children1chidren2child1child2r  same_children_recursives       r;   r  zJassert_configs_are_equivalent_besides_ids.<locals>.same_children_recursive  s    !)XeDDD 	P 	PNFF""6$<>>>V##zV';';''z(:F:<NOOO	P 	Pr=   layoutz:The first config has a layout key, but the second does notrL  dependenciesz@The first config has a dependencies key, but the second does notFr  targetsr   inputsoutputsr  T)
r   r  rH   rI   r:  r  rO  rJ   r  r  )r  r  r  rF  r  	children2d1d2t1t2i1i2o1o2r  r  s   ``            @@r;   )assert_configs_are_equivalent_besides_idsr    s    mG$$GmG$$GjG,,--GjG,,--G ? ?3<73<''===>>> ( 7< !!S)>%?%???8999: : : : : : P P P P P P 77""L   H%))*b99	H%))*b99		9555  ((R   N#W^%<U
 
 
 
	> 
	>FB bffY//	1B1B5QQQ 5 5B&&r!ube4444bffX..x0@0@OOO / /B&&r2....bffY//	1B1B5QQQ / /B&&r2....Rxx B!<!<!<!<===  4r=   F_dict
skip_value
skip_propsc                     |g n|}t          |                                           D ]\  }}||v r
|r|dk    r|| |= | S )z=
    Delete keys whose values are None from a dictionary
    Nr`   )r   r   )r  r  r  rF  r`   s        r;   delete_noner    sh     ")zJ5;;==))  
U* 	#..]c
Lr=   _listc                 <    t          |           dk    r| d         S | S )Nr   r   )rO  )r  s    r;   resolve_singletonr    s    
5zzQQxr=   *list[type[Component] | type[BlockContext]]c                     dd l } | j        j                                        | j        j                                        z   }g }t                      }|rl|                                }||v r|                    |           |	                    |                                           |
                    |           |ld |D             S )Nr   c                 $    g | ]}|j         d v|S ))ChatInterface	Interfacer+   TabbedInterface
NativePlot	SketchBox)rE   r9   r  s     r;   r  z&get_all_components.<locals>.<listcomp>   s<       :

 
 	

 
 
r=   )gradior  r-   __subclasses__r{   r*   rm   r  addextendappend)grclasses_to_check
subclassesseensubclasss        r;   get_all_componentsr    s     	..00
)
 
/
/
1
1	2  J55D
 $#''))t 7 7 9 9:::(###  $    r=   c                  2    d t                      D             S )Nc                 F    g | ]}|j                             d           |S )zgradio.)rn   
startswith)r9   class_s     r;   r  z*core_gradio_components.<locals>.<listcomp>  s?       ''	22  r=   )r  r6   r=   r;   core_gradio_componentsr
    s)     (**   r=   cls_namez$type[Component] | type[BlockContext]c                    ddl m} ddl m} d t                      D             }|j                                        D ]A\  }}t          |t                    r't          ||          r|||	                                <   B| 
                    dd          |v r|| 
                    dd                   S t          d|  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   Nr,   c                 B    i | ]}|j                                         |S r6   )rE   rv  r  s     r;   r<   z-component_or_layout_class.<locals>.<dictcomp>$  s(    FFFA!*""$$aFFFr=   _rB   zNo such component or layout: zw. It is possible it is a custom component, in which case make sure it is installed and imported in your python session.)gradio.componentsr  r-   r  r   r   r'  type
issubclassrv  replacer  )r  components_moduler-   r  r8   clss         r;   component_or_layout_classr    s     211111++++++FF1C1E1EFFFJ&/5577 + +	cc4   	+ZY%?%? 	+'*Jtzz||$R  J..(**33344
	W 	W 	W 	W  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:

    )rP   get_event_loopcreate_task)r  r   kwargs
event_loops       r;   run_coro_in_backgroundr  4  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)nextStopIterationStopAsyncIterationiterators    r;   run_sync_iterator_asyncr"  P  s<    -H~~ - - - "",-s    +c                   .    e Zd ZdZd
dZd Zd Zdd	ZdS )SyncToAsyncIteratorz*Treat a synchronous iterator as async one.r?   Nc                 "    || _         || _        d S r[   )r!  limiter)re   r!  r&  s      r;   rf   zSyncToAsyncIterator.__init__\  s     r=   c                     | S r[   r6   rj   s    r;   	__aiter__zSyncToAsyncIterator.__aiter__`  s    r=   c                 t   K   t           j                            t          | j        | j                   d {V S )N)r&  )anyio	to_threadrun_syncr"  r!  r&  rj   s    r;   	__anext__zSyncToAsyncIterator.__anext__c  sN      _--#T]DL . 
 
 
 
 
 
 
 
 	
r=         N@r  c                 $  K   t          j                    }	 	 | j                                         d S # t          $ rQ}dt          |          v r5t          j                    |z
  |k     rt          j        |           d {V  n Y d }~nd }~ww xY w{)NTzalready executing)r-  	monotonicr!  closer  r   rP   r.  )re   r  retry_intervalstartr{  s        r;   aclosezSyncToAsyncIterator.acloseh  s        	##%%%   &#a&&00T^5E5E5MPW5W5W!-7777777777 87777		s   3 
BAB		Br   )r.  r  )rE   rn   ro   __doc__rf   r(  r-  r4  r6   r=   r;   r$  r$  Y  s`        44     
 
 


 
 
 
 
 
r=   r$  c                 0   K   t          |            d {V S r[   )anextr   s    r;   async_iterationr8  u  s$      x       r=   r   c              #      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   absoluterc  chdir)r   origins     r;   set_directoryr=  y  sb       VV__F

s   A A(c               #   6   K   	 dV  dS # t           $ r Y dS w xY w)z+Context manager that suppresses exceptions.N)rK   r6   r=   r;   no_raise_exceptionr?    s:         s   
 
r`   c                     t           t          t          f          r S t           t                    st                                           d          rK	 t          j                   }t          j        |          S # t
          j        t          t          f$ r Y nw xY wg d}g d}t           fd|D                       st           fd|D                       rd  S  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[   )r  )r9   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[   r6   )r9   sequencer`   s     r;   r  z)sanitize_value_for_csv.<locals>.<genexpr>  sA       J J&EJ J J J J Jr=   r   )r'  floatrp   r   r  rH   rI   r:  JSONDecodeErrorr  r?  r  )r`   parsedunsafe_prefixesunsafe_sequencess   `   r;   sanitize_value_for_csvrR    s8    %%&&  eS!! E

 
## 	Z&&F:f%%%$j)< 	 	 	D	
 766O=== 
B
B
B
B/
B
B
BBB c J J J J*:J J J G G  5{{Ls   'B B! B!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 r6   )rR  r  s     r;   r  z)sanitize_list_for_csv.<locals>.<listcomp>  s!    HHHQ5a88HHHr=   )r'  r   r  rR  )r   sanitized_valuesr`   sanitized_values       r;   sanitize_list_for_csvrW    s    
  5 5eT"" 	5HH%HHHO##O44444U;;O##O4444r=   r8   list_of_namesc                 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   r  )rm   )r8   rX  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        | |d          }|j        dv rt          j        | |d          j        S |j        S # t
          $ r Y dS w xY w)Nz
User-Agentz8gradio (https://gradio.app/; gradio-team@huggingface.co)T)headersfollow_redirects)i  i  F)r  r   r  rJ   
is_successrK   )r^  r`  head_requests      r;   validate_urlrd    s    WXG	z,RVWWW#z119g   &&   uus   ;A	 A	 	
AAc                 \    t          | t                    od|                     dd          v S )Nupdate__type__rB   )r'  r  rJ   )vals    r;   is_prop_updateri    s*    c4  HXR1H1H%HHr=   f	before_fnbefore_argsafter_fn
after_argsc                     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                    K    | i |}	 r   	 |                                  d {V }n# t          $ r r   Y d S w xY wr   |W V  Hr[   )r-  r  	r   r  r!  r  rn  rm  rl  rk  rj  s	       r;   asyncgen_wrapperz*function_wrapper.<locals>.asyncgen_wrapper  s      q$)&))H ,I{++%-%7%7%9%9999999HH)    . *--EE  *Hj))s   0 AAc                  D   K   r    | i | d {V }r   |S r[   r6   r   r  r  rn  rm  rl  rk  rj  s      r;   async_wrapperz'function_wrapper.<locals>.async_wrapper   s\       (	;''Q/////////H &*%%Or=   c               ?      K    | i |}	 r   	 t          |          }n# t          $ r r   Y d S w xY wr   |V  <r[   )r  r  rq  s	       r;   gen_wrapperz%function_wrapper.<locals>.gen_wrapper  s      q$)&))H ,I{++#H~~HH$    . *--EE  *Hj))s   % ::c                  4    r    | i |}r   |S r[   r6   rt  s      r;   wrapperz!function_wrapper.<locals>.wrapper!  sF     (	;''q$)&))H &*%%Or=   )r  isasyncgenfunction	functoolsr   rP   iscoroutinefunctionisgeneratorfunction)	rj  rk  rl  rm  rn  rr  ru  rw  ry  s	   `````    r;   function_wrapperr~    s    $+""K!)zJ!!$$ @				 	 	 	 	 	 	 	 
		  		$Q	'	' ,				 	 	 	 	 	 	 	 
		 		$Q	'	' 				 	 	 	 	 	 	 	 
		  
			 	 	 	 	 	 	 	 
		 r=   fnr{   event_idin_event_listenerrequestzRequest | NonestatezSessionState | Nonec                 F    fd}d }t          | |||f|          S )Nc                 *   ddl m} |j                            |            |j                                       |j                            |           |j                                       r!|j                            j                   d S d S )Nr   LocalContext)r!  r  r{   rm   r  r  r  r   )r{   r  r  r  r  r  s      r;   rk  z+get_function_with_locals.<locals>.before_fn5  s    //////'''&**+<===!!(+++  ))) 	@&**5+>?????	@ 	@r=   c                      ddl m}  | j                            d           | j                            d            | j                            d            d S )Nr   r  F)r!  r  r  rm   r  r   r  s    r;   rm  z*get_function_with_locals.<locals>.after_fn?  s_    //////&**5111  &&&"&&t,,,,,r=   )rk  rl  rm  )r~  )r  r{   r  r  r  r  rk  rm  s      ```  r;   get_function_with_localsr  -  sh    @ @ @ @ @ @ @- - - 
X&	   r=   task_idsc                 H  K   d t          j                    D             }g }g }|D ]d\  }}d|vr
|                    d          \  }}|| v r>|                    |           |                    |           |                                 et          j        |ddi d {V  |S )Nc                 :    g | ]}||                                 fS r6   )get_name)r9   tasks     r;   r  z cancel_tasks.<locals>.<listcomp>O  s%    EEEdDMMOO$EEEr=   <gradio-sep>return_exceptionsT)rP   	all_taskssplitr  cancelgather)r  tasks	event_idsmatching_tasksr  r8   task_idr  s           r;   cancel_tasksr  N  s      EE1B1D1DEEEEIN  
d%% JJ~66h!!$'''X&&&KKMMM
..
AD
A
AAAAAAAAr=   session_hashfn_indexbatchc                 H    |s|                      | d| d|            d S d S )Nr  r  )set_name)r  r  r  r  r  s        r;   set_task_namer  ^  sE     JHHHHhHHIIIIIJ Jr=   r  c                     g }| D ]Yt                      }|rGt          fd|j                                        D                       }|                    |           Z|S )Nc              3   R   K   | ]!\  }}|                                 k    |V  "d S r[   )
get_config)r9   rQ  ddeps      r;   r  z+get_cancelled_fn_indices.<locals>.<genexpr>j  sB        a#8M8M8M8M8M8M r=   )r!   r  fnsr   r  )r  
fn_indices
root_blockr  r  s       @r;   get_cancelled_fn_indicesr  c  s     J ( ('))
 	(    (n2244    H h'''r=   c                     t          j        |           st          j        |           rnt          |           r| j        } ni S 	 t          j        |           S # t          t          f$ r i cY S w xY wr[   )	r  
isfunctionismethodcallable__call__typingget_type_hintsr]  r?  )r  s    r;   r  r  r  s    " !1"!5!5 	" [	$R(((y!   			s   A A.-A.c                 6   ddl m} ddlm}m} ddlm} ddlm} 	 |	                    |           }|sdS ||t          |         fv }||t          |         |t          |         |t          |         fv }	t          j        |          ot          ||          }
|p|
p|	S )Nr   )	EventData)OAuthProfile
OAuthToken)Header)r1   F)gradio.helpersr  gradio.oauthr  r  gradio.route_utilsr  gradio.routesr1   rJ   r   r  isclassr  )r8   parameter_typesr  r  r  r  r1   hint
is_requestis_oauth_argis_event_datas              r;   is_special_typed_parameterr    s    ((((((55555555))))))%%%%%%}t$$D u'8G#455J L OD))Ijy.I.IM66,6r=   r  inputs_as_dictc           	         	 t          j        |           }n# t          $ r Y dS w xY w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 or if the function does not have a signature (e.g. is a built in),
    or a string error message if mismatch
    Nr   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 )r  r  r  r  r  r   r  r  kindPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr  VAR_POSITIONALKEYWORD_ONLYrO  ry  rz  )r  r  r  r  r  min_argsmax_argsinfinityr8   paramhas_default	arg_counts               r;   check_function_inputs_matchr    s   %b))		   tt$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 4s    
%%c                       e Zd Zd Zd ZdS )TupleNoPrintc                     dS NrB   r6   rj   s    r;   __repr__zTupleNoPrint.__repr__      rr=   c                     dS r  r6   rj   s    r;   __str__zTupleNoPrint.__str__  r  r=   N)rE   rn   ro   r  r  r6   r=   r;   r  r    s2              r=   r  c                       e Zd Zd Zd ZdS )MatplotlibBackendManangerc                     	 dd l }|                                | _        |                    d           d S # t          $ r Y d S w xY w)Nr   agg)
matplotlibget_backend_original_backenduser\  )re   r  s     r;   	__enter__z#MatplotlibBackendMananger.__enter__  sa    	%/%;%;%=%=D"NN5!!!!! 	 	 	DD	s   26 
AAc                 f    	 dd l }|                    | j                   d S # t          $ r Y d S w xY wNr   )r  r  r  r\  )re   exc_typeexc_valexc_tbr  s        r;   __exit__z"MatplotlibBackendMananger.__exit__  sP    	NN4122222 	 	 	DD	s   " 
00N)rE   rn   ro   r  r  r6   r=   r;   r  r    s2              r=   r  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?r  )figsize$)fontsizeTsvgtightg        )dpitransparentformatbbox_inches
pad_inchesrA   z<svg z<metadata>.*<\/metadata>rB   )flagsz width="[^"]+"zheight="([\d.]+)pt"r   zheight="[\d.]+pt"zheight="zem"z<span style='font-size: 0px'>z</span>)r  matplotlib.pyplotpyplotrcfigurer  r   savefigr1  seekr  rF   indexresubDOTALLsearchrM  group)formular   pltr  r  figoutputxml_code	svg_startsvg_codeheight_matchheight
new_height	copy_codes                 r;   tex2svgr    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#c                 t    t          t          j                            t	          |                               S r[   )r   rc  r   abspathr   )r   s    r;   r  r    s$    D		**+++r=   path_1path_2c                     t          |                                           t          |                                          }} 	 |                     |           dS # t          $ r Y dS w xY w)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 (to file or directory)
        path_2: str or Path (to file or directory)
    TF)r  r   relative_tor  )r  r  s     r;   is_in_or_equalr    sq     V__,,..0G0G0I0IFF6"""t   uus   A 
A)(A)pathsc                     ddl m} t          | t          t          f          rt	          |           g} |j                            d | D                        dS )a  
    Set the static paths to be served by the gradio app.

    Static files are are served directly from the file system instead of being copied. They are served to users with The Content-Disposition HTTP header set to "inline"
    when sending these files to users. This indicates that the file should be displayed directly in the browser window if possible.
    This function is useful when you want to serve files that you know will not be modified during the lifetime of the gradio app (like files used in gr.Examples).
    By setting static paths, your app will launch faster and it will consume less disk space.
    Calling this function will set the static paths for all gradio applications defined in the same interpreter session until it is called again or the session ends.

    Parameters:
        paths: filepath or list of filepaths or directory names to be served by the gradio app. If it is a directory name, ALL files located within that directory will be considered static and not moved to the gradio cache. This also means that ALL files in that directory will be accessible over the network.
    Example:
        import gradio as gr

        # Paths can be a list of strings or pathlib.Path objects
        # corresponding to filenames or directories.
        gr.set_static_paths(paths=["test/test_files/"])

        # The example files and the default value of the input
        # will not be copied to the gradio cache and will be served directly.
        demo = gr.Interface(
            lambda s: s.rotate(45),
            gr.Image(value="test/test_files/cheetah1.jpg", type="pil"),
            gr.Image(),
            examples=["test/test_files/bus.png"],
        )

        demo.launch()
    r   _StaticFilesc                 P    g | ]#}t          |                                          $S r6   r  r  s     r;   r  z$set_static_paths.<locals>.<listcomp>5  s(    "D"D"D477??#4#4"D"D"Dr=   N)gradio.data_classesr  r'  r   r   	all_pathsr  )r  r  s     r;   set_static_pathsr    se    > 100000%#t%% e!!"D"De"D"D"DEEEEEr=   r  c                 8    ddl m} t          | |j                  S )zBReturns True if the file is a static file (and not moved to cache)r   r  )r  r  _is_static_filer  )r  r  s     r;   is_static_filer!  8  s'    0000009l&<===r=   static_filesc                 .    t           t          t          t          f          sdS t           t                    r j         t           t                    r%t                                                       sdS t           fd|D                       S )zZ
    Returns True if the file is a static file (i.e. is is in the static files list).
    Fc              3   8   K   | ]}t          |          V  d S r[   r  )r9   static_filer  s     r;   r  z"_is_static_file.<locals>.<genexpr>K  s-      VV+~i55VVVVVVr=   )r'  r   r   r$   r   re  r  )r  r"  s   ` r;   r   r   ?  s     i#tX!677 u)X&& #N	)S!! OO	!! 	5VVVVVVVVVVr=   z<[^
>]*(?:
[^
>]*)*>raw_htmlc                 <    t          j        t          d| pd          S r  )r  r   HTML_TAG_RE)r'  s    r;   remove_html_tagsr*  Q  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  currentframegetfiler  rc  sepf_back)framenfnames      r;   find_user_stack_levelr4  U  sm      ""E	A
 &&U]]2637777	Q   Hr=   c                   "     e Zd ZdZ fdZ xZS )NamedStringa  
    Subclass of str that includes a .name attribute equal to the value of the string itself. This class is used when returning
    a value from the `.preprocess()` methods of the File and UploadButton components. Before Gradio 4.0, these methods returned a file
    object which was then converted to a string filepath using the `.name` attribute. In Gradio 4.0, these methods now return a str
    filepath directly, but to maintain backwards compatibility, we use this class instead of a regular str.
    c                 x    t                                                       |rt          |           nd| _        d S r  )r   rf   r   r8   )re   r   r   s     r;   rf   zNamedString.__init__l  s3    !%-CIII2			r=   )rE   rn   ro   r5  rf   r   r   s   @r;   r6  r6  d  sB         . . . . . . . . .r=   r6  c               #   &   K   d} 	 d|  V  | dz  } )z
    A generator that provides default input labels for components when the user's function
    does not have named parameters. The labels are of the form "input 0", "input 1", etc.
    r   Tzinput r   r6   )r2  s    r;   default_input_labelsr9  q  s2      
 	
Aqll	Qr=   file_path_or_urlc                     t           j                            |           }t          j                            t          j                            |j                            d         }|r
|dd         ndS )a  
    Returns the file extension (without the dot) from a file path or URL. If the file path or URL does not have a file extension, returns an empty string.
    For example, "https://example.com/avatar/xxxx.mp4?se=2023-11-16T06:51:23Z&sp=r" would return "mp4".
    r   NrB   )r  r   r  rc  r   splitextbasename)r:  
parsed_urlfile_extensions      r;   #get_extension_from_file_path_or_urlr@  |  s_    
 &&'788JW%%bg&6&6z&G&GHHKN!/7>!""R7r=   KVc                   R     e Zd Zd
def fdZdededdf fdZdedef fd	Z xZ	S )LRUCached   max_sizec                 V    t                                                       || _        d S r[   )r   rf   rF  )re   rF  r   s     r;   rf   zLRUCache.__init__  s$    %r=   rF  r`   r?   Nc                     || v r|                      |           n.t          |           | j        k    r|                     d           t	                                          ||           d S )NF)last)move_to_endrO  rF  popitemr   __setitem__)re   rF  r`   r   s      r;   rL  zLRUCache.__setitem__  sj    $;;S!!!!YY$-''LLeL$$$C'''''r=   c                 F    t                                          |          S r[   )r   __getitem__)re   rF  r   s     r;   rN  zLRUCache.__getitem__  s    ww""3'''r=   )rE  )
rE   rn   ro   rp   rf   rA  rB  rL  rN  r   r   s   @r;   rD  rD    s        & & & & & & & &(q ( (t ( ( ( ( ( ((q (Q ( ( ( ( ( ( ( ( ( (r=   rD  c                  \    t          t          j                            dd                    S )NGRADIO_EXAMPLES_CACHEz.gradio/cached_examples)r   rc  rd  rJ   r6   r=   r;   get_cache_folderrQ    s"    
68QRRSSSr=   c                 (    dfd	 | |          S )Nc           	      H   |g }g }| |k    r|S t          |           t          |          ur|                    d||g           |S t          | t                    rD|                    |           r/|                    d||t          |           d          g           |S t          | t                    r;t          t          |           t          |                    }t          |          D ]2}|	                     	| |         ||         ||gz                        3t          |t          |                     D ]}|                    d||gz   d g           t          |t          |                    D ]$}|                    d||gz   ||         g           %d}|D ]J}|d         dk    r<t          |d         d         t                    r|d         dxx         |z  cc<   |dz  }K|S t          | t                    r| D ]S}||v r1|	                     	| |         ||         ||gz                        7|                    d||gz   d g           T|D ](}|| vr"|                    d||gz   ||         g           )|S |                    d||g           |S )Nr  r  deleter  r   r   r  )r  r  r'  r   r  rO  r   minranger  rp   r  )
obj1obj2r   editscommon_lengthrQ  deletes_seeneditrF  compare_objectss
            r;   r]  zdiff.<locals>.compare_objects  s   <D4<<L::T$ZZ''LL)T40111LdC   	T__T%:%: 	LL(D$s4yy{{*;<===LdD!! 	D		3t9955M=)) L L__T!Wd1gtqczJJKKKK=#d))44 ; ;hs
D9::::=#d))44 ; ;eTQCZa9:::: L & &7h&&:d1gbk3+G+G&GBKKK</KKK A%LLdD!! 		 A A$;;LLcDItse|!T!TUUUULL(DC5L$!?@@@@ C Cd??LL%tCy!ABBBLit,---r=   r[   r6   )oldnewr]  s     @r;   diffr`    s6    - - - - - -^ ?3$$$r=   c                      t           j                            d          pAt          t	          t          j                              dz                                            S )NGRADIO_TEMP_DIRr  )rc  rd  rJ   r   r   tempfile
gettempdirr   r6   r=   r;   get_upload_folderre    sO    :>>+,, 	h!##	$	$x	/88::1 1 r=   c           
      @   g }	 t          j        |           }n## t          $ r t          j                    }Y nw xY wt	          |           }|j                                        D ]\  }}|j        t           j        j	        t           j        j
        fv r nt          ||          rA|j        t           j        j        u r.|                    |dd|                    |d          f           |                    |d|j        |                    |d          f           |S )a  
    Gets the parameters of a function as a list of tuples of the form (name, has_default, default_value, type_hint).
    Excludes *args and **kwargs, as well as args that are Gradio-specific, such as gr.Request, gr.EventData, gr.OAuthProfile, and gr.OAuthToken.
    FNT)r  r  r  	Signaturer  r  r   r  r  r  VAR_KEYWORDr  r  r  r  rJ   )r  params_infor  
type_hintsr8   	parameters         r;   get_function_paramsrl    sB   
 K(%d++		 ( ( (%''			(%%J$/5577  i>,)
 
 
 E%dJ77 	 1 777eT:>>$3M3MNOOOOtY.
tT0J0JK    s    99c                     t          j        |           j        }|t           j        j        d t
          hv rg S t          |          t          u rt          t          |                    S |gS r[   )
r  r  return_annotationrg  r  r   r   r  r   r   )r  return_hints     r;   get_return_typesrp    sc    #D));Kw(.h???	+%''H[))***=r=   c                     	 t          j        |           }n# t           j        $ r | cY S w xY wt          j        |d t          j                  }t          |t                    r|S t          j        |          S )z
    If a FileData dictionary has been dumped as part of a string, this function will replace the dict with just the str filepath
    c                     | d         S )Nr   r6   xs    r;   r  z+simplify_file_data_in_str.<locals>.<lambda>  s
    1V9 r=   )	rH   rI   rN  client_utilstraverseis_file_obj_with_metar'  r   r:  )spayloads     r;   simplify_file_data_in_strrz    s    *Q--   #$$l&H G '3 :gs    ++c                       fd}|S )Nc               ?       K    | i |V  d S r[   r6   r   r  r  s     r;   wrappedz%sync_fn_to_generator.<locals>.wrapped  s(      b$!&!!!!!!!r=   r6   r  r~  s   ` r;   sync_fn_to_generatorr    s#    " " " " " Nr=   c                       fd}|S )Nc                 .   K    | i | d {V W V  d S r[   r6   r}  s     r;   r~  z&async_fn_to_generator.<locals>.wrapped  s=      B'''''''''''''''r=   r6   r  s   ` r;   async_fn_to_generatorr    s#    ( ( ( ( ( Nr=   c                 <     t                      fd            }|S )zTurn a function into an async function.
    Useful for internal event handlers defined as lambda functions used in the codebase
    c                     K    | i |S r[   r6   )r   r  rj  s     r;   r~  z&async_lambda.<locals>.function_wrapper"  s      q$!&!!!r=   r   )rj  r~  s   ` r;   async_lambdar    s6    
 1XX" " " " X" r=   c                   :    e Zd ZdZdez  Zdez  Zdez  Zdez  ZdS )FileSizer   i   N)rE   rn   ro   BKBMBGBTBr6   r=   r;   r  r  )  s7        	A	B	B	B	BBBr=   r  sizec                    t          | t                    s| | S |                     dd          } t          d t	          |           D             t          |                     }t          | d |                   | |d                                          }}t          t          |d           }|st          d|           ||z  S )N rB   c              3   H   K   | ]\  }}|                                 |V  d S r[   )isdigit)r9   rQ  r  s      r;   r  z#_parse_file_size.<locals>.<genexpr>8  s3      ::tq!aiikk:::::::r=   zInvalid file size unit: )
r'  rp   r  r  rN  rO  upperrz   r  r  )r  last_digit_indexsize_intunitmultiples        r;   _parse_file_sizer  1  s    $ <<R  D::y:::CII  ///01148H8I8I3J3P3P3R3RdHxt,,H <:D::;;;hr=   c                  (   t          j        d          } | re	 t          |           }|dk    r|S t          j        d| dt
                     n.# t          $ r! t          j        d| dt
                     Y nw xY wt          j        d          rdnd	S )
a4  
    The interval, in seconds, between heartbeats sent to keep a client session
    alive (and, on disconnect, to trigger unload events and session cleanup).

    Configurable via the GRADIO_HEARTBEAT_INTERVAL environment variable (a
    positive number of seconds). A shorter interval is useful in environments
    such as Kubernetes, where the default 15 seconds can delay the detection of
    client disconnections. If the variable is unset, non-numeric, or not
    positive, falls back to 0.25 seconds during end-to-end tests and 15 seconds
    otherwise.
    GRADIO_HEARTBEAT_INTERVALr   z7Ignoring non-positive GRADIO_HEARTBEAT_INTERVAL value: zE. Expected a positive number of seconds; falling back to the default.z)Invalid GRADIO_HEARTBEAT_INTERVAL value: z<. Expected a number of seconds; falling back to the default.GRADIO_IS_E2E_TESTg      ?   )rc  rn  rM  ry  rz  UserWarningr  )intervalrates     r;   get_heartbeat_rater  A  s     y455H 	??D axx MV( V V V     	 	 	MMH M M M    	  9122:44:s   A (A98A9r   c                    ddl m ddlm t	          fd|D                       }d}d}d}d| vrt          d          | d         D ]_}|d         D ]N}t          |t          t          f          r0t          |          d	k    r|d
         dk    rd}@|d
         dk    rd}O|r|r n`||D ]}	t          |	dd          }
|
t          |
dd          }t          |dd          rd} nd	 t          j        |
          }n# t          t
          f$ r Y ew xY wt	          fd|j                                        D                       rd} n|p|p|p|S )zH
    Determines whether a heartbeat is required for a given config.
    r   )Cache)Statec              3   8   K   | ]}t          |          V  d S r[   )r'  )r9   rG  r  s     r;   r  z$connect_heartbeat.<locals>.<genexpr>k  s-      AAJue,,AAAAAAr=   Fr  zPDependencies not found in config. Cannot determine whetherheartbeat is required.r     r   unloadTstreamNr  cache_per_sessionc              3   d   K   | ]*}t          |j                  o|j        j        j        V  +d S r[   )r'  r  _storer  )r9   r  r  s     r;   r  z$connect_heartbeat.<locals>.<genexpr>  sP         5=%00VU]5I5V     r=   )gradio.cachingr  r  r  r  r  r'  r   r  rO  rz   r  r  r?  r  r   )r   r{   r  	any_state
any_unload
any_streamany_per_session_cacher  targetblock_fnr  cache_storer  r  r  s                @@r;   connect_heartbeatr  d  s    %$$$$$''''''AAAA&AAAAAIJJ!V##%
 
 	

 n%  )n 	& 	&F&4-00 &S[[A5E5E!9((!%JJAY(**!%J 	* 	E
 	 	H4..Bz!"gt44K{NE:: (,%#-b11		z*       &188::      )-% I
IjI4IIs   ,DDDc                    t          j                    }t          | t          t          t
          t          f          r| }n>t          | t                    r<t          d t          | 
                                d           D                       }nt          | t          t          f          rt          d | D                       }nt          | t                    r.t          d t          | t                    D                       }ntt          | t                    r0t          t          |                                         d          }n/t          t!          |                                         d          }|                    t%          |                              d                     |                                S )z2Compute a hash for a deeply nested data structure.c                 6    g | ]\  }}|t          |          fS r6   	deep_hash)r9   kr  s      r;   r  zdeep_hash.<locals>.<listcomp>  s7       Aq IaLL!  r=   c                 ,    t          | d                   S r  )hashrs  s    r;   r  zdeep_hash.<locals>.<lambda>  s    d1Q4jj r=   rE  c              3   4   K   | ]}t          |          V  d S r[   r  r9   rt  s     r;   r  zdeep_hash.<locals>.<genexpr>  s(      00qill000000r=   c              3   4   K   | ]}t          |          V  d S r[   r  r  s     r;   r  zdeep_hash.<locals>.<genexpr>  s(      BBqillBBBBBBr=   rA   )hashlibsha256r'  rp   rM  r   r>  r  r  sortedr   r   rm   r  r   encoder"  rf  repr	hexdigest)r  hasherr   s      r;   r  r    s   ^F#UC/00 -	C		 - "399;;4H4HIII  
 
 
C$	'	' -00C00000	C		 -BBF3D,A,A,ABBBBB	C	"	" -DII%%g..BsGG##G,,
MM$u++$$W--...r=   r   
show_errorc                     dd i}|pt          | t                    }|rUt          | t                    r)| j        |d<   | j        |d<   | j        |d<   | j        |d<   nt          |           |d<   ||d<   |S )Nr   durationvisibletitle)r'  r   messager  r  r  r   )r   r  contents      r;   error_payloadr    s     6=dOG:z%::J ,eX&& 	,$}GG"'.GJ!&GI${GG"5zzGG!+GINr=   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
UnhashableKeyDictz
    Essentially a list of key-value tuples that allows for keys that are not hashable,
    but acts like a dictionary for convenience.
    c                     g | _         d S r[   datarj   s    r;   rf   zUnhashableKeyDict.__init__  s    			r=   c                 b    | j         D ]\  }}t          ||          r|c S t          |          r[   )r  r@  KeyError)re   rF  r  r  s       r;   rN  zUnhashableKeyDict.__getitem__  sC    I 	 	DAq!S!! smmr=   c                     t          | j                  D ]'\  }\  }}t          ||          r||f| j        |<    d S (| j                            ||f           d S r[   )rN  r  r@  r  )re   rF  r`   rQ  r  r  s         r;   rL  zUnhashableKeyDict.__setitem__  sr    "49-- 	 	IAv1!S!!  #U|	! 		#u&&&&&r=   c                     t          | j                  D ]#\  }\  }}t          ||          r| j        |=  d S $t          |          r[   )rN  r  r@  r  )re   rF  rQ  r  r  s        r;   __delitem__zUnhashableKeyDict.__delitem__  sX    "49-- 	 	IAv1!S!! IaL smmr=   c                 $    d | j         D             S )Nc              3       K   | ]	\  }}|V  
d S r[   r6   )r9   r  r  s      r;   r  z-UnhashableKeyDict.__iter__.<locals>.<genexpr>  s&      ((da((((((r=   r  rj   s    r;   __iter__zUnhashableKeyDict.__iter__      ((di((((r=   c                 *    t          | j                  S r[   )rO  r  rj   s    r;   __len__zUnhashableKeyDict.__len__  s    49~~r=   c                 $    d | j         D             S )Nc                     g | ]\  }}|S r6   r6   )r9   r  r  s      r;   r  z-UnhashableKeyDict.as_list.<locals>.<listcomp>  s    (((da(((r=   r  rj   s    r;   as_listzUnhashableKeyDict.as_list  r  r=   N)rE   rn   ro   r5  rf   rN  rL  r  r  r  r  r6   r=   r;   r  r    s         
    ' ' '  ) ) )  ) ) ) ) )r=   r  	directoryc                    d t           j        j        t           j        j        fD             }t	          j        |          t           j                            |           }t          fd|D                       sOt           j                                      s0	                    d          sdk    s	                    d          rt                      |S )ztSafely path to a base directory to avoid escaping the base directory.
    Borrowed from: werkzeug.security.safe_joinc                 "    g | ]}||dk    
|S )Nr,  r6   )r9   r/  s     r;   r  zsafe_join.<locals>.<listcomp>  s)       CSVJJJJJr=   c              3       K   | ]}|v V  	d S r[   r6   )r9   r/  filenames     r;   r  zsafe_join.<locals>.<genexpr>  s'      44C8O444444r=   r,  z..z../)rc  r   r/  altsep	posixpathnormpathjoinr  isabsr  r'   )r  r   _os_alt_sepsfullpathr  s       @r;   	safe_joinr    s     RW^4  L !$''Hw||Ix00H4444|44444!7==""! s##! tu%%     Or=   r   r   created_paths)in_blocklistallowedcreatednot_created_or_allowedc                      t           fd|D                       }|rdS t           fd|D                       rdS t           fd|D                       rdS dS )Nc              3      K   | ]R}t          t                                                    t          |                                                    V  Sd S r[   )r  r   rv  )r9   blocked_pathr   s     r;   r  z"is_allowed_file.<locals>.<genexpr>  se         	s4yy((#l*;*;*A*A*C*CDD     r=   )Fr  c              3   8   K   | ]}t          |          V  d S r[   r%  )r9   allowed_pathr   s     r;   r  z"is_allowed_file.<locals>.<genexpr>
  -      
P
P,>$--
P
P
P
P
P
Pr=   )Tr  c              3   8   K   | ]}t          |          V  d S r[   r%  )r9   created_pathr   s     r;   r  z"is_allowed_file.<locals>.<genexpr>  r  r=   )Tr  )Fr  )r  )r   r   r   r  r  s   `    r;   is_allowed_filer    s         )    L  %$$

P
P
P
P-
P
P
PPP 

P
P
P
P-
P
P
PPP **r=   c                  b   t           j                            d          } | r| S t          j        d          }|r|S 	 t
          j        dk    rtt          j        ddg          	                                
                                                    d          d         }t           j                            |          r|S n# t          j        $ r Y nw xY w	 t
          j        dk    r:t          j        ddg          	                                
                                S n# t          j        t          f$ r Y nw xY wt
          j        dd	d
dg}|D ]%}t           j                            |          r|c S &t           j                            dd          }|                    t           j                  }|D ]W}t           j                            |t
          j        dk    rdnd          }t           j                            |          r|c S Xt'          d           t'          d           d S )NGRADIO_NODE_PATHnodewin32wherez
r   whichz/usr/bin/nodez/usr/local/bin/nodez C:\Program Files\nodejs\node.exez&C:\Program Files (x86)\nodejs\node.exePATHrB   znode.exez;Unable to find node install path, falling back to SPA mode.zIf you wish to use the node backend, please install node 20 and/ or set the path with the GRADIO_NODE_PATH environment variable.)rc  rd  rJ   shutilr  r  platform
subprocesscheck_outputrF   rG   r  r   re  CalledProcessErrorFileNotFoundError
executablepathsepr  r   )	env_node_pathwhich_node_pathwindows_pathcommon_paths	node_pathenv_path	path_dirsr  	full_paths	            r;   get_node_pathr    sM   JNN#566M l6**O <7""'&(9::vq"  w~~l++ $##(   <7""*GV+<==DDFFLLNNN #)+<=    	-3L "  	7>>)$$ 		 z~~fb))Hrz**I  	GLLS\W%<%<zz&
 
	 7>>)$$ 		 

GHHH	 	K   4s%   BC CCA	D# #D<;D<c                 f    | g S t          | t          t          f          rt          |           S | gS r[   )r'  r   r  ri   s    r;   none_or_singleton_to_listr  P  s5    }	%$'' E{{7Nr=   	icon_namec           	      B   t          t          j                            d                              t          t          d          | z                                }t          |                                          rt          |           |S t          d|            )a)  Get the path to an icon file in the "gradio/icons/" directory
    and return it as a static file path so that it can be used by components.

    Parameters:
        icon_name: Name of the icon file (e.g. "plus.svg")
    Returns:
        str: Full path to the icon file served as a static file
    r  iconszIcon file not found: )	r   r   	resourcesfilesjoinpathr   re  r  r  )r  	icon_paths     r;   get_icon_pathr  X  s     !!(++44Sg9R5S5STT I I ###
8Y88
9
99r=   c                 t    i }| D ]2\  }}t          |d          r|                                ||<   -|||<   3|S )zb
    A utility function to convert a dataclass that includes pydantic fields to a dictionary.
    
model_dump)ry   r  )r   r  rF  r`   s       r;   dict_factoryr   j  sU     	A  
U5,'' 	%%''AcFFAcFFHr=   c                 ,   t          j        |           }d}	 d t          j        |           j                                        D             }n# t
          $ r i }Y nw xY wg }|s|||fS |                                                    d          }g }|D ]D}|                                }|                    d          r n|r|	                    |           Ed
                    |          }	 t          d t          |          D             t          |                    }t          d t          |          D             t          |                    }	|	t          |          k     r|	nt          |          }
||dz   |
         D ]}|                                }|s|                    d	          r ny	 d
|v rc|                    d
d          \  }}|                    d          d                                         }|r||v r|                                ||<   # t          $ r Y w xY w|	t          |          k     r<||	dz   d         D ].}|                                }|s|	                    |           /n# t          $ r Y nw xY w|||fS )a  
    Get the description of a function, its parameters, and return values by parsing the docstring.
    The docstring should be formatted as follows: first lines are the description
    of the function, then a line starts with "Args:", "Parameters:", or "Arguments:",
    followed by lines of the form "param_name: description", then optionally lines
    that starts with "Returns:" followed by descriptions of return values. All lines
    after the "Returns:" line are added in the `returns` list (including e.g. "Examples").

    Parameters:
        fn: The function to get the docstring for.

    Returns:
        - The docstring of the function
        - A dictionary of parameter names and their descriptions
        - A list of return value descriptions
    rB   c                     i | ]
}|j         d S )rB   r7   )r9   r  s     r;   r<   z,get_function_description.<locals>.<dictcomp>  s)     &
 &
 &
$EJ&
 &
 &
r=   rH  )Args:Parameters:
Arguments:Returns:r  c              3   n   K   | ]0\  }}|                                                     d           ,|V  1dS ))r#  r$  r%  NrG   r  r9   rQ  lines      r;   r  z+get_function_description.<locals>.<genexpr>  sW        At::<<**+QRR     r=   c              3   n   K   | ]0\  }}|                                                     d           ,|V  1dS )r&  Nr(  r)  s      r;   r  z+get_function_description.<locals>.<genexpr>  sA      VV71d$**,,2I2I*2U2UVQVVVVVVr=   r   r&  :r   N)r  getdocr  r  r   r  rG   r  r  r  r  r  rN  rO  rK   )r  fn_docstringdescriptionr  returnslinesdescription_linesr*  param_start_idxreturns_start_idxparam_end_idx
param_name
param_descs                r;   get_function_descriptionr8  w  s3   " >"%%LK(&
 &
(/(9"(=(=(H(O(O(Q(Q&
 &
 &


  ( ( (%'


(G 0J//  &&t,,E + +zz||??MNN 	E 	+$$T***((,--K- (//  
 JJ
 
 !VVi..VVVJJ
 
 "3SZZ!?!?SZZ 	 /A-=> 	 	D::<<D z** $;;-1ZZQ-?-?*J
!+!1!1#!6!6q!9!?!?!A!AJ! DjJ&>&>1;1A1A1C1C
:.    s5zz))/!3556 % %zz|| t$$$$    
G++sJ   5A AA/C	J 9A'H! J !
H.+J -H..AJ 
JJc                 >   K   |                                   d{V  dS )z
    Safely close an async iterator by calling its aclose method.
    For SyncToAsyncIterator, the retry logic for "generator already executing"
    is handled in SyncToAsyncIterator.aclose() itself.
    N)r4  r   s    r;   safe_aclose_iteratorr:    s0       //

r=   buttonszSequence[str | Button] | Nonedefault_buttonszSequence[str | Button]c                 <    ddl m | |pg S fd| D              | S )Nr   r.   c                 X    g | ]&}t          |          |                                'S r6   )r'  unrender)r9   btnr/   s     r;   r  z'set_default_buttons.<locals>.<listcomp>  s0    FFFCjf.E.EFFFFr=   )gradio.components.buttonr/   )r;  r<  r/   s     @r;   set_default_buttonsrB    sF     0/////$"$FFFF7FFFFr=   )r   r+   rA  r+   )r  )FN)r?   r  )NNNNr[   )NN)r5  rP   r   r{  r  r   importlib.metadataimportlib.resourcesr  rH   rc  rC   r  r  r  r  r  r  rc  r   r-  r)  r  urllib.parser  r  ry  abcr   r   collectionsr   collections.abcr   r   r   r	   r
   r   
contextlibr   r   ior   pathlibr   typesr   r   r   r   r   r   r   r   r   r   r*  gradio_client.utilsutilsru  r  r9  gradio_client.documentationr   gradio_client.exceptionsr   	packagingr   typing_extensionsr   r  r    r!  r!   r  r"   r#   r$   r%   gradio.exceptionsr&   r'   gradio.themesr(   ru  r)   rw  rW  r*   r+   r  r-   rA  r/   r  r0   r1   gradio.state_holderr2   r3   r4   Base
MonochromeSoftGlassOriginCitrusOceanMarior>   r  r   __annotations__rN   rU   rX   r\   r]   rp   r_   r   rr   r   r   r   r   r3  rc   r@  r   r`  rf  ri  ro  rs  r|  r  r   r  dirnamer  r  r  r   r  r  r  r  r  r  r  r
  r  r  r"  r$  r8  r=  r?  rM  rR  rW  r]  rd  ri  r~  r  rm   r  r  r  r  r  r  r  r  r  r  r  r  r!  r   compiler  r)  r*  r4  r6  r9  r@  rA  rB  rD  rQ  r`  re  rl  rp  rz  r  r  r  r  r  r  r  r  BaseExceptionr  r  r  r  r  r  r  r   r8  r:  rB  r6   r=   r;   <module>rb     s                           				      				       



                  # # # # # # # # # # # # # #                & % % % % %                   & & & & & & & &	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  * * * * * *   0 0 0 0 0 0 - - - - - -       ' ' ' ' ' '        - - - - - -            6 5 5 5 5 5 5 5 1 1 1 1 1 1 - - - - - - 122222222++++++//////********000000IcNNGCLL% % 	
% % %c5j!    	S 	 	 	 	w|    W]    ! ! ! ! !S ! ! ! N4  	'' '' '' '' ''3 '' '' ''T    \   :(- (- (- (- (-^ (- (- (-V,$ ,$ ,$ ,$ ,$ ,$ ,$ ,$^^    .|( |T | | | |~# # $    . 2  2  2  2FT    "D    t     3:    24 2 2 2 2US[4' E    S S    * bgoofo>>PP s        8 S	    "s "s " " " "& NWH HH(8HEJH H H HX KO !7;Cy47G	   "T#Y_        @   0V    :9 9 9 9 98- - -       8! ! ! s
       !#+ !#+ ! ! ! !H$s) S	     s 49    s t    I I I "&#' $"&I II$I DI o	I
 4I I I IX Dj 	
  !   BS d3i     Jc JS JC JPT J J J J
tCH~&	#Y   
 
 
7 7 7.%
H %
h %
PT %
 %
 %
 %
P    5          &!$ !$ !$H,#* , , , , ,3: sTz d      
"FC$JcDj)99 "Fd "F "F "F "FJ>c > > > >Ws W$t* W W W W W bj2BI>>3sTz 3c 3 3 3 3s    
. 
. 
. 
. 
.# 
. 
. 
.  8# 8# 8 8 8 8 GCLLGCLL( ( ( ( ({GAqDM ( ( ( T$ T T T T0% 0% 0%f3    h 4c4c6I0J+K    8	8 	 	 	 	 	       	H 	 	 	 	 	       39t+ d
      ;E  ;  ;  ;  ;F0J 0J. 0JT 0J 0J 0J 0Jf  04-1	#tczE!D(
()   "$) $) $) $) $) $) $) $)N .> 3    *+
+C$J'+ C$J'+ C$J'	+
 'P
QQ+ + + +*< < <~S T    :S :S : : : :$
 
 
Y, Y,eCc3hc4R.S Y, Y, Y, Y,x   04(,
 
,
#Y%
 
 
 
 
 
 
r=   