ó
    ‚¤j…Å  ã                  óî  • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKJrJrJr  S SKJrJr  S SKJr  S SKJr  S SKJrJrJr  S SKJrJr  S SK r S SK!r"S SK#r$S S	K%J&r'  S S
K(J)r)J*r*J+r+J,r,  S S	K-J&r&  S SK.J/r/  S SK0J1r1J2r2J3r3  S SK4J5r5  S SK6J7r7J8r8J9r9J:r:  S SK;J<r<J=r=  S SK>J?r?  S SK@JArA  S SKBJCrCJDrDJErEJFrF  \RŽ                  " 5          \R�                  " S5        S SKIJJrJ  SSS5        SrKSrL\ Rš                  " \KS9rN\Rž                  " \P5      rQ\(       a  S SKRJSrS  SUS jrTSVS jrUSWSXS jjrVS rWS rXSWS jrY\D" 5       Rµ                  S5      r[SYSZS jjr\S[S jr]S\S  jr^SYS]S! jjr_\?" S"5        S^         S_S# jj5       r`\?" S$5       S`       SaS% jj5       ra\?" S&5                SbS' j5       rbScS( jrc\?" S)5      SdS* j5       rd\?" S+5      SeS, j5       re/ S-QrfSfS. jrg\" S/5      rhSYSgS0 jjriS1rjShS2 jrkSiS3 jrlSiS4 jrmSiS5 jrn\nro Sj       SkS6 jjrp      SlS7 jrqSmS8 jrr   Sn     SoS9 jjrsSpS: jrt   Sn       SqS; jjruSrS< jrvSsS= jrw St       SuS> jjrxSvS? jryS@ rz\zr{SwSA jr|SxSB jr}SySC jr~\" 1 SDk5      r€SzSE jr�SFSFSGSHSISISJ.r‚S{SK jrƒS|SL jr„\" SMSN15      r…\" SOSP15      r†S}SQ jr‡S~SR jrˆSjSSS jjr‰S€ST jrŠg! , (       d  f       GNõ= f)�é    )ÚannotationsN)Ú	AwaitableÚCallableÚ	Coroutine©Ú	lru_cacheÚwraps)ÚBytesIO)ÚPath)ÚTYPE_CHECKINGÚAnyÚTypeVar)ÚurljoinÚurlparse)Úutils)ÚImageÚImageOpsÚImageSequenceÚPngImagePlugin)Úaiofiles)ÚFFmpegÚFFprobeÚFFRuntimeError)ÚLocalContext)ÚFileDataÚGradioModelÚGradioRootModelÚJsonData)ÚErrorÚInvalidPathError)Útraced_sync)Ú
API_PREFIX)ÚabspathÚget_hash_seedÚget_upload_folderÚis_in_or_equalÚignore)ÚAudioSegment)Ú	transport)ÚBlockc                óÚ   • [        U [        5      (       a6  U R                  S5      (       a  U S   nO[        R                  " U S   5      nOU n[
        R                  " [        U5      5      $ )zUConverts a base64 string or dictionary to a binary string that can be sent in a POST.ÚdataÚpath)Ú
isinstanceÚdictÚgetÚclient_utilsÚencode_url_or_file_to_base64Úbase64Ú	b64decodeÚextract_base64_data)ÚxÚ	base64strs     Ú¥C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\gradio/processing_utils.pyÚ	to_binaryr9   :   sU   € ä�!”T×ÑØ�5‰5��=‰=Ø˜&™	‰Iä$×AÒAÀ!ÀFÁ)ÓL‰Iàˆ	Ü×ÒÔ/°	Ó:Ó;Ð;ó    c                ó,   • U R                  SS5      S   $ )z;Just extracts the base64 data from a general base64 string.Ú,é   éÿÿÿÿ)Úrsplit)r6   s    r8   r5   r5   F   s   € à�8‰8�C˜Ó˜BÑÐr:   c                ó   • U=(       d    Sn[        5        nU R                  X2S9  UR                  5       nS S S 5        [        [        R
                  " W5      S5      nSU=(       d    S SU 3$ ! , (       d  f       N?= f)NÚpng©Úformatúutf-8zdata:image/z;base64,)r
   ÚsavefigÚgetvalueÚstrr3   Ú	b64encode)ÚpltrC   ÚfmtÚoutput_bytesÚ
bytes_dataÚ
base64_strs         r8   Úencode_plot_to_base64rN   P   sl   € Ø
�/�E€CÜ	Œ�lØ�‰�LˆÑ-Ø!×*Ñ*Ó,ˆ
÷ 
ô ”V×%Ò% jÓ1°7Ó;€JØ˜Ÿ 5Ð)¨°*°Ð>Ð>÷	 
�ús   – A/Á/
A=c                óB   • SU R                   ;   a  U R                   S   $ g )NÚexif)Úinfo)Ú	pil_images    r8   Úget_pil_exif_bytesrS   Y   s"   € Ø�—‘ÓØ�~‰~˜fÑ%Ð%ð  r:   c                óô   • [         R                  " 5       nU R                  R                  5        HD  u  p#[	        U[
        5      (       d  M  [	        U[
        5      (       d  M3  UR                  X#5        MF     U$ ©N)r   ÚPngInforQ   Úitemsr.   rG   Úadd_text)rR   ÚmetadataÚkeyÚvalues       r8   Úget_pil_metadatar\   ^   sW   € ä×%Ò%Ó'€HØ—n‘n×*Ñ*Ö,‰
ˆÜ�cœ3×Ó¤J¨u´c×$:Ó$:Ø×Ñ˜cÖ)ñ -ð €Or:   c           	     óÒ  • [        5        nUR                  5       S:X  aM  [        R                  " U 5       Vs/ s H  o3R	                  5       PM     nnUS   R                  UUSUSS  SS9  OMUR                  5       S:X  a  S[        U 5      0nO[        U 5      nU(       a  SU0O0 nU R
                  " X!40 UD6  UR                  5       sS S S 5        $ s  snf ! , (       d  f       g = f)	NÚgifr   Tr=   )rC   Úsave_allÚappend_imagesÚlooprA   ÚpnginforP   )	r
   Úlowerr   ÚIteratorÚcopyÚsaver\   rS   rF   )rR   rC   rK   ÚframeÚframesÚparamsrP   s          r8   Úencode_pil_to_bytesrj   h   sÌ   € Ü	Œ�lØ�<‰<‹>˜UÓ"Ü0=×0FÒ0FÀyÔ0QÓRÒ0Q u—j‘j–lÑ0QˆFÐRØ�1‰I�N‰NØØØØ$ Q R˜jØð ò ð �|‰|‹~ Ó&Ø#Ô%5°iÓ%@ÐA‘ä)¨)Ó4�Þ+/˜& $™°R�Ø�NŠN˜<Ñ:°6Ò:Ø×$Ñ$Ó&÷# 
‰ùâR÷ 
�ús   ‹-C¸CÁA8CÃCÃ
C&rD   c                ó:  ^^^• [         R                  " 5       mTR                  [        5        [	        U S5       m[        UUU4S jS5       H  nTR                  U5        M     S S S 5        TR                  5       $ ! , (       d  f       TR                  5       $ = f)NÚrbc                 ó@   >• TR                  T TR                  -  5      $ rU   )ÚreadÚ
block_size)Úchunk_num_blocksÚfÚshas   €€€r8   Ú<lambda>Úhash_file.<locals>.<lambda>„   s   ø€  !§&¡&Ð)9¸C¿N¹NÑ)JÔ"Kr:   r:   )ÚhashlibÚsha256ÚupdateÚ	hash_seedÚopenÚiterÚ	hexdigest)Ú	file_pathrp   Úchunkrq   rr   s    ` @@r8   Ú	hash_filer~   €   sp   ú€ Ü
�.Š.Ó
€CØ‡J�JŒyÔÜ	ˆi˜Ô	 !ÜÖKÈSÖQˆEØ�J‰J�uÖñ R÷ 
ð �=‰=‹?Ð÷ 
Ô	ð �=‰=‹?Ðús   º+A=Á=
Bc                ó¶   • [         R                  " 5       nUR                  [        5        UR                  U R	                  S5      5        UR                  5       $ )NrD   )ru   rv   rw   rx   Úencoder{   )Úurlrr   s     r8   Úhash_urlr‚   ‰   s;   € Ü
�.Š.Ó
€CØ‡J�JŒyÔØ‡J�Jˆs�z‰z˜'Ó"Ô#Ø�=‰=‹?Ðr:   c                ó˜   • [         R                  " 5       nUR                  [        5        UR                  U 5        UR	                  5       $ rU   )ru   rv   rw   rx   r{   )Úbytesrr   s     r8   Ú
hash_bytesr…   �   s2   € Ü
�.Š.Ó
€CØ‡J�JŒyÔØ‡J�JˆuÔØ�=‰=‹?Ðr:   c                ó.  • [         R                  " 5       nUR                  [        5        [	        S[        U 5      XR                  -  5       H6  nXX1UR                  -  -    nUR                  UR                  S5      5        M8     UR                  5       $ )Nr   rD   )	ru   rv   rw   rx   ÚrangeÚlenro   r€   r{   )Úbase64_encodingrp   rr   Úir,   s        r8   Úhash_base64r‹   —   st   € Ü
�.Š.Ó
€CØ‡J�JŒyÔÜ�1”c˜/Ó*Ð,<¿~¹~Ñ,MÖNˆØ 1¸#¿.¹.Ñ'HÑ#HÐIˆØ�
‰
�4—;‘;˜wÓ'Ö(ñ Oð �=‰=‹?Ðr:   Úpostprocess_save_pil_to_cachec                óö   • [        X5      n[        U5      [        U5      -  nUR                  SSS9  [	        XR SU 3-  R                  5       5      nXR SU 3-  R                  5       R                  U5        U$ )NT©Úexist_okÚparentsÚ.)rj   r   r…   ÚmkdirrG   ÚresolveÚwrite_bytes)ÚimgÚ	cache_dirÚnamerC   rL   Útemp_dirÚfilenames          r8   Úsave_pil_to_cacherš       s|   € ô % SÓ1€JÜ�I‹¤¨JÓ!7Ñ7€HØ‡N�N˜D¨$€NÑ/Ü�H  q¨¨Ð1Ñ1×:Ñ:Ó<Ó=€HØ�&˜˜&˜Ð"Ñ"×+Ñ+Ó-×9Ñ9¸*ÔEØ€Or:   Ú#postprocess_save_img_array_to_cachec                óp   • [         R                  " [        U [        R                  SS95      n[        X1US9$ )NF)Ú
force_copyrB   )r   Ú	fromarrayÚ_convertÚnpÚuint8rš   )Úarrr–   rC   rR   s       r8   Úsave_img_array_to_cacher£   ¯   s,   € ô —’¤¨¬b¯h©hÀ5Ñ IÓJ€IÜ˜Y¸&ÑAÐAr:   Úpostprocess_save_audio_to_cachec                ó  • S[        U R                  5      U[        U5      U R                  S.n[        R
                  " 5       nUR                  [        5        UR                  [        R                  " USS9R                  S5      5        UR                  U R                  5       5        [        U5      UR                  5       -  nUR                  SSS9  [        USU 3-  R                  5       5      n[!        XXrS9  U$ )	Nzaudio-cache-v1)Úcache_schemaÚdtyperC   Úsample_rateÚshapeT)Ú	sort_keysrD   rŽ   zaudio.rB   )rG   r§   Úintr©   ru   rv   rw   rx   ÚjsonÚdumpsr€   Útobytesr   r{   r’   r“   Úaudio_to_file)r,   r¨   rC   r–   Úaudio_metadataÚ
audio_hashr˜   r™   s           r8   Úsave_audio_to_cacher²   ·   sÔ   € ð
 )Ü�T—Z‘Z“ØÜ˜;Ó'Ø—‘ñ€Nô —’Ó!€JØ×Ñ”iÔ Ø×Ñ”d—j’j ¸4Ñ@×GÑGÈÓPÔQØ×Ñ�d—l‘l“nÔ%Ü�I‹ ×!5Ñ!5Ó!7Ñ7€HØ‡N�N˜D¨$€NÑ/Ü�H ¨ xÐ0Ñ0×9Ñ9Ó;Ó<€HÜ�+ XÒ=Ø€Or:   c                ó¬   • [        U 5      S:¼  a  U SS S:X  a
  U SS S:X  a  g[        U 5      S:¼  a
  U SS S	:X  a  g
[        U 5      S:¼  a
  U SS S:X  a  g
g)z¹Detect audio format from file header bytes.

Args:
    data: File content as bytes

Returns:
    Detected file extension with dot (e.g., ".wav", ".mp3") or empty string if not detected
é   Né   s   RIFFé   s   WAVEú.wavé   s   ID3ú.mp3é   s   ÿûÚ )rˆ   )r,   s    r8   Údetect_audio_formatr¼   Í   se   € ô ˆ4ƒy�Bƒ˜4  ˜8 wÓ.°4¸¸"°:ÀÓ3HØä	ˆT‹�a‹˜D  !˜H¨Ó.Øä	ˆT‹�a‹˜D  !˜H¨Ó3ØØr:   Úpostprocess_save_bytes_to_cachec                ó&  • [        U5      [        U 5      -  nUR                  SSS9  [        U5      R                  (       d  [	        U 5      nX-   nU[        U5      R
                  -  nUR                  U 5        [        UR                  5       5      $ )NTrŽ   )	r   r…   r’   Úsuffixr¼   r—   r”   rG   r“   )r,   Ú	file_namer–   r-   Údetected_extensions        r8   Úsave_bytes_to_cacherÂ   â   sx   € ä�	‹?œZ¨Ó-Ñ-€DØ‡J�J˜ d€JÑ+Ü�	‹?×!×!Ü0°Ó6ÐØÑ2ˆ	Ø”$�y“/×&Ñ&Ñ&€DØ×Ñ�TÔÜˆt�|‰|‹~ÓÐr:   Úsave_file_to_cachec                ó>  • [        U 5      n[        U5      U-  nUR                  SSS9  [        R                  " [        U 5      R
                  5      n[        [        X#-  5      5      n[        U5      R                  5       (       d  [        R                  " X5        U$ )z“Returns a temporary file path for a copy of the given file path if it does
not already exist. Otherwise returns the path to the existing temp file.TrŽ   )r~   r   r’   r1   Ú!strip_invalid_filename_charactersr—   rG   r#   ÚexistsÚshutilÚcopy2)r|   r–   r˜   r—   Úfull_temp_file_paths        r8   rÃ   rÃ   î   s   € ô ˜Ó#€HÜ�I‹ Ñ)€HØ‡N�N˜D¨$€NÑ/ä×9Ò9¼$¸y»/×:NÑ:NÓO€DÜœg h¡oÓ6Ó7ÐäÐ#Ó$×+Ñ+×-Ñ-Ü�Š�YÔ4àÐr:   )zhf.cozhuggingface.coz*.hf.coz*.huggingface.coc                ó
  •  [         R                  " U 5      nUR                  =(       dE    UR                  =(       d2    UR                  =(       d    UR
                  =(       d    UR                  (       + $ ! [         a     gf = f)NF)Ú	ipaddressÚ
ip_addressÚ
is_privateÚis_loopbackÚis_link_localÚis_multicastÚis_reservedÚ
ValueError)ÚipÚip_objs     r8   Úis_public_iprÕ     sz   € ð
Ü×%Ò% bÓ)ˆà×Ñ÷ "Ø×!Ñ!÷"à×#Ñ#÷"ð ×"Ñ"÷"ð ×!Ñ!ô
ð 	
øô ó Ùðús   ‚A2A5 Á5
BÂBÚTc                ó    ^ •     SU 4S jjnU$ )Nc                óN   >^ • [        TS9[        T 5      SU 4S jj5       5       nU$ )N)Úmaxsizec                 ó<   >• [         R                  " T" U 0 UD65      $ rU   )ÚasyncioÚcreate_task)ÚargsÚkwargsÚ
async_funcs     €r8   ÚwrapperÚ3lru_cache_async.<locals>.decorator.<locals>.wrapper   s    ø€ ô ×&Ò&¡z°4Ð'B¸6Ñ'BÓCÐCr:   )rÝ   r   rÞ   r   ÚreturnzAwaitable[T]r   )rß   rà   rÙ   s   ` €r8   Ú	decoratorÚ"lru_cache_async.<locals>.decorator  s2   ù€ ô 
˜7Ñ	#Ü	ˆzÓ	ö	Dó 
ó 
$ð	Dð ˆr:   )rß   z%Callable[..., Coroutine[Any, Any, T]]râ   zCallable[..., Awaitable[T]]© )rÙ   rã   s   ` r8   Úlru_cache_asyncræ     s    ø€ ðØ9ðà	$÷ð Ðr:   é   c              ƒ  ó–  #   • [         R                  " U [        [        S9I Sh  v•N nSnUR                  (       a‡  U[
        :¼  a  [        S[
         S35      eUS-  n[        [        UR                  5      UR                  S   5      n [         R                  " U [        [        S9I Sh  v•N nUR                  (       a  M‡  U$  N  N7f)zÖSSRF-protected GET: routes through `safehttpx` with the public hostname
allow-list and re-validates each redirect. Returns the `httpx.Response`
without raising on non-2xx status (callers decide how to handle that).)Údomain_whitelistÚ
_transportNr   zExceeded maximum of z redirects.r=   ÚLocation)Úshr0   ÚPUBLIC_HOSTNAME_WHITELISTÚasync_transportÚhas_redirect_locationÚMAX_REDIRECTSÚ	Exceptionr   rG   r�   Úheaders)r�   ÚresponseÚ	redirectss      r8   Úasync_ssrf_protected_getrõ   -  s´   é € ô —V’VØÔ7ÄOñ÷ €Hð €IØ
×
(×
(ØœÓ%ÜÐ2´=°/ÀÐMÓNÐNØ�Q‰ˆ	ô ”c˜(Ÿ,™,Ó'¨×)9Ñ)9¸*Ñ)EÓFˆÜŸšØÔ";Ìñ
÷ 
ˆð ×
(×
(Ñ
(ð €Oññ
ùs(   ‚"C	¤C¥BC	Â+CÂ,C	ÃC	ÃC	c              ƒ  ó   #   • [        U5      [        U 5      -  nUR                  SSS9  [        U 5      nUR                  R                  S5      n[        R                  " [        U5      R                  5      =(       d    Sn[        [        X%-  5      5      n[        U5      R                  5       (       a  U$ [        U 5      I S h  v•N nUR                  S:w  a  [        SUR                   35      e[        R                   " US5       IS h  v•N nUR#                  5         S h  v•N n	UR%                  U	5      I S h  v•N   M$   N€ N: N# N
 S S S 5      IS h  v•N    U$ ! , IS h  v•N  (       d  f       U$ = f7f)NTrŽ   Ú/ÚfileéÈ   z&Failed to download file. Status code: Úwb)r   r‚   r’   r   r-   Úrstripr1   rÅ   r—   rG   r#   rÆ   rõ   Ústatus_coderñ   r   ry   Úaiter_bytesÚwrite)
r�   r–   r˜   Ú
parsed_urlÚ	base_pathr™   rÉ   ró   rq   r}   s
             r8   Úasync_ssrf_protected_downloadr  C  sA  é € Ü�I‹¤¨#£Ñ.€HØ‡N�N˜D¨$€NÑ/ä˜#“€JØ—‘×&Ñ& sÓ+€Iä×6Ò6´t¸I³×7KÑ7KÓL×VÐPVð ô œg hÑ&9Ó:Ó;ÐÜÐÓ ×'Ñ'×)Ñ)Ø"Ð"ä-¨cÓ2×2€HØ×Ñ˜sÓ"ÜÐ@À×AUÑAUÐ@VÐWÓXÐXä�}Š}Ð0°$×7Ô7¸1Ø#×/Ñ/Ô1÷ 	!�%Ø—'‘'˜%“.× Ò ñ 3ñ 8ñ	!Ù ð 2÷ 8×7Ð7ð Ð÷	 8×7Õ7ð Ðüs‘   ‚CE>ÃEÃAE>ÄE	ÄE>ÄE#Ä#EÄ'EÄ(EÄ+E#Å EÅE#ÅE>Å	E>ÅEÅE#ÅE#ÅE>ÅEÅE>Å#E;Å)E,Å*E;Å6E>c                óœ  • [        U5      [        U 5      -  nUR                  SSS9  [        R                  " [        U 5      R
                  5      n[        [        X#-  5      5      n[        R                  SU SS9 n[        US5       nUR                  5        H  nUR                  U5        M     S S S 5        S S S 5        [        SU S[        R                  R!                  U5       S35        ["        R%                  SU S[        R                  R!                  U5       S35        U$ ! , (       d  f       N€= f! , (       d  f       N‰= f)	NTrŽ   ÚGET)Úfollow_redirectsrú   zDownloaded z (z bytes))r   r‚   r’   r1   rÅ   r—   rG   r#   Úsync_clientÚstreamry   Úiter_rawrþ   ÚprintÚosr-   ÚgetsizeÚlogrQ   )r�   r–   r˜   r™   rÉ   Úrrq   r}   s           r8   Úunsafe_downloadr  \  s  € Ü�I‹¤¨#£Ñ.€HØ‡N�N˜D¨$€NÑ/Ü×=Ò=¼dÀ3»i¿n¹nÓM€HÜœg hÑ&9Ó:Ó;Ðô 	×Ñ˜5 #¸ÐÑ=ÀÜÐ  $Ô'¨1à—Z‘Z–\ˆEØ�G‰G�EŽNñ "÷ 	(÷ 	>ô 
Ø
Ð)Ð*¨"¬R¯W©W¯_©_Ð=PÓ-QÐ,RÐRYÐZôô ‡H�HØ
Ð)Ð*¨"¬R¯W©W¯_©_Ð=PÓ-QÐ,RÐRYÐZôð Ð÷ 	(Õ'ú÷ 	>Õ=ús$   Á<D=Â	)D,Â2D=Ä,
D:	Ä6D=Ä=
Ec                ó8   • [         R                  " [        X5      $ rU   )r1   Úsynchronize_asyncr  )r�   r–   s     r8   Ússrf_protected_downloadr  t  s   € Ü×)Ò)Ô*GÈÓXÐXr:   c                óê  • [        U 5      n[        U5      U-  nUR                  SSS9  [        R                  " U 5      nU(       a  [        R
                  " U5      nOU(       a  SU 3nOSn[        [        X2-  5      5      n[        U5      R                  5       (       d@  [        R                  " U 5      u  pg[        US5       nUR                  U5        SSS5        U$ U$ ! , (       d  f       U$ = f)zšConverts a base64 encoding to a file and returns the path to the file if
the file doesn't already exist. Otherwise returns the path to the existing file.
TrŽ   zfile.rø   rú   N)r‹   r   r’   r1   Úget_extensionrÅ   rG   r#   rÆ   Údecode_base64_to_binaryry   rþ   )	r‰   r–   rÀ   r˜   Úguess_extensionrÉ   r,   Ú_Úfbs	            r8   Úsave_base64_to_cacher  |  sÚ   € ô ˜?Ó+€HÜ�I‹ Ñ)€HØ‡N�N˜D¨$€NÑ/ä"×0Ò0°ÓA€OÞÜ ×BÒBÀ9ÓM‰	Þ	Ø˜OÐ,Ð-‰	àˆ	äœg hÑ&:Ó;Ó<ÐäÐ#Ó$×+Ñ+×-Ñ-Ü×6Ò6°ÓG‰ˆÜÐ% tÔ,°Ø�H‰H�TŒN÷ -ð ÐÐÐ÷ -Ô,ð Ðús   ÃC#Ã#
C2c                ó$   • UR                  U 5      $ )z²This method has been replaced by Block.move_resource_to_block_cache(), but is
left here for backwards compatibility for any custom components created in Gradio 4.2.0 or earlier.
)Úmove_resource_to_block_cache)Úurl_or_file_pathÚblocks     r8   r  r  ˜  s   € ð ×-Ñ-Ð.>Ó?Ð?r:   c                óX   • SS jn[         R                  " X[         R                  5        g )Nc                óø   • U R                  SS5      =n(       aa  [        R                  " U5      (       dE  [        U[	        5       5      (       d+  [
        R                  " U5      (       d  [        SU S35      eg g g g )Nr-   r»   zFile z3 is not in the cache folder and cannot be accessed.)r0   r1   Úis_http_url_liker&   r%   r   Úis_static_filer   )Údr-   s     r8   Ú	_in_cacheÚ+check_all_files_in_cache.<locals>._in_cache¢  sy   € à—U‘U˜6 2Ó&Ð&ˆTÕ&Ü ×1Ò1°$×7Ñ7Ü" 4Ô):Ó)<×=Ñ=Ü×(Ò(¨×.Ñ.äØ˜�vÐPÐQóð ð /ð >ð 8ð 'r:   ©r   r/   )r1   ÚtraverseÚis_file_obj)r,   r!  s     r8   Úcheck_all_files_in_cacher&  ¡  s   € ô	ô ×Ò˜$¬<×+CÑ+CÕDr:   c                óÎ   ^^^^^• SS jmSUUUUU4S jjn[        U [        [        45      (       a  U R                  5       n [        R
                  " X[        R                  5      $ )á±  Move any files in `data` to cache and (optionally), adds URL prefixes (/file=...) needed to access the cached file.
Also handles the case where the file is on an external Gradio app (/proxy=...).

Runs after .postprocess() and before .preprocess().

Args:
    data: The input or output data for a component. Can be a dictionary or a dataclass
    block: The component whose data is being processed
    postprocess: Whether its running from postprocessing
    check_in_upload_folder: If True, instead of moving the file to cache, checks if the file is in already in cache (exception if not).
    keep_in_cache: If True, the file will not be deleted from cache when the server is shut down.
c                óþ   • [         R                  R                  S 5      =nb  UR                  (       dJ  [        R
                  " U R                  5      S   S:X  a"  [        R                  " U R                  /5        g g g ©Nr   zimage/svg+xml©	r   Úblocksr0   Ú
is_runningÚ	mimetypesÚ
guess_typer-   r   Úset_static_paths©Úpayloadr,  s     r8   Ú_mark_svg_as_safeÚ.move_files_to_cache.<locals>._mark_svg_as_safeÄ  óe   € ô $×*Ñ*×.Ñ.¨tÓ4Ð4ˆVÑ=ÀV×EV×EVÜ×#Ò# G§L¡LÓ1°!Ñ4¸ÓGÜ×"Ò" G§L¡L >Õ2ð Hð FWr:   c                óŠ  >• [        S0 U D6nUR                  (       a>  T(       a7  [        R                  " UR                  5      (       a  UR                  Ul        OÔ[
        R                  " U5      (       a  O¸TR                  (       d§  [        R                  " UR                  5      (       d  [        UR                  T	5        UR                  (       d[  TR                  UR                  5      nUc  [        S5      eX!l        T
(       a%  TR                  R                  UR                  5        UR                  (       a	  [         S3O[         S3nTR                  (       aK  TR                  R                  S5      n[        R                   " UR                  5      n[         SU U U 3nOx[        R                  " UR                  5      (       d!  UR                  R#                  U 5      (       a  UR                   nO$U [        R                   " UR                  5       3nXal        T" U5        UR%                  5       $ ©Nz/Did not determine a file path for the resource.z/stream/z/file=r÷   z/proxy=rå   )r   r�   r1   r  r-   r   r  Ú	proxy_urlÚ_check_allowedÚ	is_streamr  rÒ   Úkeep_in_cacheÚaddr"   rû   Úencode_file_pathÚ
startswithÚ
model_dump©r   r2  Útemp_file_pathÚ
url_prefixr8  Úencoded_pathr�   r3  r  Úcheck_in_upload_folderr;  Úpostprocesss          €€€€€r8   Ú_move_to_cacheÚ+move_files_to_cache.<locals>._move_to_cacheÌ  s¨  ø€ Ü‘-˜Q‘-ˆð
 �;�;ž;¬<×+HÒ+HÈÏÉ×+UÑ+UØ"Ÿ;™;ˆG�LÜ×!Ò! '×*Ñ*ØØ——ä×0Ò0°·±×>Ñ>Ü˜wŸ|™|Ð-CÔDØ×$×$Ø!&×!CÑ!CÀGÇLÁLÓ!Q�Ø!Ñ)Ü$Ð%VÓWÐWØ-”Þ Ø×'Ñ'×+Ñ+¨G¯L©LÔ9ð (/×'8×'8Œzˆl˜(Ñ#ÄÀÈFÐ>Sð 	ð �?�?ØŸ™×.Ñ.¨sÓ3ˆIÜ'×8Ò8¸¿¹ÓFˆLÜ�L ¨	 {°:°,¸|¸nÐM‰CÜ×*Ò*¨7¯<©<×8Ñ8¸G¿L¹L×<SÑ<SØˆl÷=
ñ =
ð —\‘\�N‰Cà�L¤×!>Ò!>¸w¿|¹|Ó!LÐ MÐNˆCØŒÙ˜'Ô"Ø×!Ñ!Ó#Ð#r:   ©r2  r   r#  )r.   r   r   r?  r1   r$  Úis_file_obj_with_meta©r,   r  rE  rD  r;  rF  r3  s    ```` @r8   Úmove_files_to_cacherK  °  sQ   ü€ ô(3÷%$ó %$ôN �$œ¬+Ð6×7Ñ7Ø�‰Ó ˆä× Ò Øœl×@Ñ@óð r:   c                óä  ^ • [         R                  R                  S 5      nUb  UR                  (       d  g [        R
                  " T 5      n[        R                  " 5       /nU(       a  / nO7UR                  [        R                  " 5       [        R                  " 5       /-   n[        R                  " UUR                  UUS9u  pgU(       d¤  SU S3nUS:X  a#  USSR                  UR                  5       S3-  nOjU(       a  US-  nO]US	-  nUS
-  nUS-  nUS[        R                  " 5        S[        R                  " 5        S3-  nUS[        UR                   5       S3-  n[#        U5      e[        R$                  " U[        R                  " 5       5      (       aQ  UR&                  R)                  S5      (       a0  [+        U 4S jUR                   5       5      (       d  [#        S5      eg g g )N)Úblocked_pathsÚallowed_pathsÚcreated_pathszCannot move z! to the gradio cache dir because Úin_blocklistz+it is located in one of the blocked_paths (z, z).zit was not uploaded by a user.z3it was not created by the application or it is not zQlocated in either the current working directory or your system's temp directory. zOTo fix this error, please ensure your function returns files located in either zthe current working directory (z!), your system's temp directory (z) zor add z, to the allowed_paths parameter of launch().r‘   c              3  ó<   >#   • U  H  n[        TU5      v •  M     g 7frU   )r&   )Ú.0Úallowed_pathr-   s     €r8   Ú	<genexpr>Ú!_check_allowed.<locals>.<genexpr>  s   øé € ð 
ÚCW°<ŒN˜4 ×.Ð.ÒCWùs   ƒzÕDotfiles located in the temporary directory cannot be moved to the cache for security reasons. If you'd like to specifically allow this file to be served, you can add it to the allowed_paths parameter of launch().)r   r,  r0   Úhas_launchedr   r#   r%   rN  r	  ÚgetcwdÚtempfileÚ
gettempdirÚis_allowed_filerM  ÚjoinrG   Úparentr    r&   r—   r>  Úany)	r-   rD  r,  Úabs_pathrO  rN  ÚallowedÚreasonÚmsgs	   `        r8   r9  r9  û  sÒ  ø€ Ü× Ñ ×$Ñ$ TÓ*€FØ�~˜V×0×0Øä�}Š}˜TÓ"€Hä×,Ò,Ó.Ð/€Mö Ø‰à×,Ñ,´·	²	³¼X×=PÒ=PÓ=RÐ/SÑSˆÜ×+Ò+ØØ×*Ñ*Ø#Ø#ñ	�O€Gö Ø˜X˜JÐ&GÐHˆØ�^Ó#ØÐ@ÀÇÁÈ6×K_ÑK_ÓA`Ð@aÐacÐdÑd‰CÞ#ØÐ3Ñ3‰CàÐHÑHˆCØÐfÑfˆCØÐdÑdˆCØÐ4´R·Y²Y³[°MÐAbÔck×cvÒcvÓcxÐbyÐy{Ð|Ñ|ˆCØ�WœS §¡Ó1Ð2Ð2^Ð_Ñ_ˆCÜ˜sÓ#Ð#ä×Ò˜X¤r§y¢y£{×3Ñ3Ø�M‰M×$Ñ$ S×)Ñ)Üô 
ØCI×CWÒCWó
÷ 
ñ 
ô ðEó
ð 	
ð	
ð *ð 	4r:   c              ƒ  óê   ^^^^^#   • SS jmSUUUUU4S jjn[        U [        [        45      (       a  U R                  5       n [        R
                  " X[        R                  5      I Sh  v•N $  N7f)r(  c                óþ   • [         R                  R                  S 5      =nb  UR                  (       dJ  [        R
                  " U R                  5      S   S:X  a"  [        R                  " U R                  /5        g g g r*  r+  r1  s     r8   r3  Ú4async_move_files_to_cache.<locals>._mark_svg_as_safe=  r5  r:   c              “  ó¦  >#   • [        S0 U D6nUR                  (       a>  T(       a7  [        R                  " UR                  5      (       a  UR                  Ul        OÜ[
        R                  " U5      (       a  OÀTR                  (       d¯  [        R                  " UR                  5      (       d  [        UR                  T	5        UR                  (       dc  TR                  UR                  5      I S h  v•N nUc  [        S5      eX!l        T
(       a%  TR                  R                  UR                  5        UR                  (       a	  [         S3O[         S3nTR                  (       aK  TR                  R                  S5      n[        R                   " UR                  5      n[         SU U U 3nOw[        R                  " UR                  5      (       d!  UR                  R#                  U 5      (       a  UR                  nO$U [        R                   " UR                  5       3nXal        T" U5        UR%                  5       $  GNY7fr7  )r   r�   r1   r  r-   r   r  r8  r9  r:  Ú"async_move_resource_to_block_cacherÒ   r;  r<  r"   rû   r=  r>  r?  r@  s          €€€€€r8   rF  Ú1async_move_files_to_cache.<locals>._move_to_cacheE  s¸  øé € Ü‘-˜Q‘-ˆð
 �;�;ž;¬<×+HÒ+HÈÏÉ×+UÑ+UØ"Ÿ;™;ˆG�LÜ×!Ò! '×*Ñ*ØØ——ä×0Ò0°·±×>Ñ>Ü˜wŸ|™|Ð-CÔDØ×$×$Ø',×'OÑ'OØ—L‘Ló(÷ "�ð "Ñ)Ü$Ð%VÓWÐWØ-”Þ Ø×'Ñ'×+Ñ+¨G¯L©LÔ9ð (/×'8×'8Œzˆl˜(Ñ#ÄÀÈFÐ>Sð 	ð �?�?ØŸ™×.Ñ.¨sÓ3ˆIÜ'×8Ò8¸¿¹ÓFˆLÜ�L ¨	 {°:°,¸|¸nÐM‰CÜ×*Ò*¨7¯<©<×8Ñ8¸G¿L¹L×<SÑ<SØˆl÷=
ñ =
ð —,‘,‰Cà�L¤×!>Ò!>¸w¿|¹|Ó!LÐ MÐNˆCØŒÙ˜'Ô"Ø×!Ñ!Ó#Ð#ò1"ùs   ƒC2IÃ5IÃ6EINrH  r#  )r.   r   r   r?  r1   Úasync_traverserI  rJ  s    ```` @r8   Úasync_move_files_to_cacheri  )  s^   üé € ô(3÷'$ó '$ôR �$œ¬+Ð6×7Ñ7Ø�‰Ó ˆÜ×,Ò,Øœl×@Ñ@ó÷ ð ñ ùs   ‡A%A3Á,A1Á-A3c                ób   ^^• SUU4S jjn[         R                  " X[         R                  5      $ )Nc                óÊ   >• T(       a.  U S   R                  T5      (       a  U S   [        T5      S  U S'   O [        R                  " U S   5      (       a  U $ T U S    3U S'   U $ )Nr�   )r>  rˆ   r1   r  )Ú	file_dictÚprevious_root_urlÚroot_urls    €€r8   Ú_add_root_urlÚ#add_root_url.<locals>._add_root_urlv  st   ø€ Þ ¨5Ñ!1×!<Ñ!<Ð=N×!OÑ!OØ(¨Ñ/´Ð4EÓ0FÐ0HÐIˆI�eÒÜ×*Ò*¨9°UÑ+;×<Ñ<ØÐØ&˜Z¨	°%Ñ(8Ð'9Ð:ˆ	�%ÑØÐr:   )rl  r/   )r1   r$  Úis_file_obj_with_url)r,   rn  rm  ro  s    `` r8   Úadd_root_urlrr  u  s(   ù€ ÷ð ô × Ò  ´l×6WÑ6WÓXÐXr:   c                óÒ   • US:X  a  SnOUS:X  a  SnO[         e[        U5      nUS   c  U R                  S   US'   US   c  U R                  S   US'   [        R                  " XUS9$ )a¯  
Resize and crop an image to fit the specified size.
args:
    size: `(width, height)` tuple. Pass `None` for either width or height
    to only crop and resize the other.
    crop_type: can be 'top', 'middle' or 'bottom', depending on this
        value, the image will cropped getting the 'top/left', 'middle' or
        'bottom/right' of the image to fit the size.
raises:
    ValueError: if an invalid `crop_type` is provided.
Útop)r   r   Úcenter)ç      à?rv  r   r=   )Ú	centering)rÒ   ÚlistÚsizer   Úfit)r•   ry  Ú	crop_typeru  Úresizes        r8   Úresize_and_cropr}  �  sr   € ð �EÓØ‰Ø	�hÓ	Ø‰äÐä�$‹Z€FØˆA�w�Ø—H‘H˜Q‘Kˆˆq‰	ØˆA�w�Ø—H‘H˜Q‘Kˆˆq‰	Ü�<Š<˜¨vÑ6Ð6r:   c                ód  • SSK Jn  U" S5          [        R                  " U 5      nUS:w  d  US	:w  a&  [        U5      U-  S	-  n[        U5      U-  S	-  n	XHU	 n[        R                  " UR                  5       5      n
UR                  S
:”  a  U
R                  SUR                  5      n
UR                  U
4sS S S 5        $ ! [         aE  n[        U 5      R                  5       nU(       a  SU(       a  SOU  S3S-   OSn[        U5      UeS nAf[         a  nUeS nAff = f! , (       d  f       g = f)Nr   )Útrace_phase_syncÚpreprocess_audio_from_filezCannot load audio from file: `Úffprobez` not found.zr Please install `ffmpeg` in your system to use non-WAV audio file formats and make sure `ffprobe` is in your PATH.r»   éd   r=   r>   )Úgradio.profilingr  r(   Ú	from_fileÚFileNotFoundErrorr   Úis_fileÚRuntimeErrorÚOSErrorrˆ   r    ÚarrayÚget_array_of_samplesÚchannelsÚreshapeÚ
frame_rate)r™   Úcrop_minÚcrop_maxr  ÚaudioÚeÚisfilera  Úaudio_startÚ	audio_endr,   s              r8   Úaudio_from_filer•  ¡  s(  € õ 2á	Ð6Õ	7ð	Ü ×*Ò*¨8Ó4ˆEð �q‹=˜H¨›OÜ˜e›* xÑ/°#Ñ5ˆKÜ˜E›
 XÑ-°Ñ3ˆIØ iÐ0ˆEÜ�xŠx˜×2Ñ2Ó4Ó5ˆØ�>‰>˜AÓØ—<‘<  E§N¡NÓ3ˆDØ×Ñ Ð%÷- 
8Ñ	7øô !ó 		+Ü˜(“^×+Ñ+Ó-ˆFö
 ð 1¾f±È(Ð0SÐS_Ð`ð<ò<ð ð ô ˜sÓ#¨Ð*ûÜó 	ØˆGûð	ú÷ 
8Õ	7ús;   �D!‘C §BD!Ã 
DÃ
A D
Ä
DÄDÄDÄD!Ä!
D/c                ó@  • UR                   [        R                  :w  a  [        U5      n[	        UR                  5       U UR                   R                  [        UR                  5      S:X  a  SOUR                  S   S9nUR                  X#S9nUR                  5         g )Nr=   )r�  Úsample_widthr‹  rB   )r§   r    Úint16Úconvert_to_16_bit_audior(   r®   Úitemsizerˆ   r©   ÚexportÚclose)r¨   r,   r™   rC   r�  rø   s         r8   r¯   r¯   ¿  sx   € ð ‡z�z”R—X‘XÓÜ& tÓ,ˆäØ�‰‹ØØ—Z‘Z×(Ñ(Ü˜4Ÿ:™:“¨!Ó+‘!°·±¸A±ñ	€Eð �<‰<˜ˆ<Ð0€DØ‡J�J…Lr:   c                óä  • SnU R                   [        R                  [        R                  [        R                  4;   a©  [
        R                  " UR                  U R                   5      5        [        R                  " U 5      R                  5       nUS:X  a%  [        R                  " U [        R                  S9n U $ X-  n U S-  n U R                  [        R                  5      n  U $ U R                   [        R                  :X  aU  [
        R                  " UR                  U R                   5      5        U S-  n U R                  [        R                  5      n U $ U R                   [        R                  :X  a   U $ U R                   [        R                  :X  aU  [
        R                  " UR                  U R                   5      5        U S-
  n U R                  [        R                  5      n U $ U R                   [        R                  :X  aX  [
        R                  " UR                  U R                   5      5        U S-  S-
  n U R                  [        R                  5      n U $ U R                   [        R                   :X  aU  [
        R                  " UR                  U R                   5      5        U S-  n U R                  [        R                  5      n U $ [#        S	U R                    S
35      e)NzCTrying to convert audio automatically from {} to 16-bit int format.r   ©r§   iÿ  i   i €  i  é   z2Audio data cannot be converted automatically from z to 16-bit int format.)r§   r    Úfloat64Úfloat32Úfloat16ÚwarningsÚwarnrC   ÚabsÚmaxÚ
zeros_liker˜  ÚastypeÚint32Úuint16r¡   Úint8rÒ   )r,   ÚwarningÚpeaks      r8   r™  r™  Ó  s  € àS€GØ‡z�z”b—j‘j¤"§*¡*¬b¯j©jÐ9Ó9Ü�Š�g—n‘n T§Z¡ZÓ0Ô1Ü�vŠv�d‹|×ÑÓ!ˆØ�1‹9ô —=’= ¬R¯X©XÑ6ˆDð8 €Kð5 ‘;ˆDØ˜%‘<ˆDØ—;‘;œrŸx™xÓ(‰Dð0 €Kð/ 
�‰”r—x‘xÓ	Ü�Š�g—n‘n T§Z¡ZÓ0Ô1Ø�e‰|ˆØ�{‰{œ2Ÿ8™8Ó$ˆð( €Kð' 
�‰”r—x‘xÓ	Øð$ €Kð# 
�‰”r—y‘yÓ	 Ü�Š�g—n‘n T§Z¡ZÓ0Ô1Ø�e‰|ˆØ�{‰{œ2Ÿ8™8Ó$ˆð €Kð 
�‰”r—x‘xÓ	Ü�Š�g—n‘n T§Z¡ZÓ0Ô1Ø�c‰z˜EÑ!ˆØ�{‰{œ2Ÿ8™8Ó$ˆð €Kð 
�‰”r—w‘wÓ	Ü�Š�g—n‘n T§Z¡ZÓ0Ô1Ø�c‰zˆØ�{‰{œ2Ÿ8™8Ó$ˆð €Kô	 Ø@Ø�z‰zˆlÐ0ð2ó
ð 	
r:   c                ó²  ^• [         S[        R                  S[        S[        R                  S[        R
                  S[        R                  S0n[        [        S5      (       a  U[           U[        R                  '   [        [        S5      (       a$  U[        R                     U[        R                  '   S nSS jmSU4S jjn[        R                  " U 5      n U R                  nU[        R                  L a  UO4U[        L a  [        R                  " S	5      O[        R                  " U5      nUR                  n	UR                  n
UR                  nUR                  nUR                  nUR                  n[        [        S
5      (       a,  [        R                   " U	[        R"                  " U5      5      nO [        R                   " X˜R                  5      nU(       a  U(       a  U R%                  5       n U $ US;   a@  [        R&                  " U	5      R(                  n[        R&                  " U	5      R*                  nUS;   a@  [        R&                  " U
5      R(                  n[        R&                  " U
5      R*                  nUS:X  a  X	" XI   S   S-  5      :„  $ US:X  a)  U R-                  U
5      nUS:w  a  UU
" XJ   S   5      -  nU$ US:X  Ga�  US:X  a  U R-                  U
5      $ [        R(                  " U 5      S:  d  [        R*                  " U 5      S:”  a  [/        S5      eU" Xé[        R
                  [        R                  5      nU(       dk  US:X  a  [        R0                  " U WUS9nO![        R0                  " U WW-
  S-  US9nUS-  n[        R2                  " UUS9  [        R4                  " UWUUS9  O‚US:X  a1  [        R0                  " U WS-   US9n[        R4                  " USUUS9  OK[        R0                  " U WW-
  S-   S-  US9n[        R6                  " UUS9  [        R4                  " UUUUS9  UR-                  U
5      $ US:X  a}  U" XÚ[        R
                  [        R                  5      nUS:X  a  [        R0                  " U SW-  US9n O![        R8                  " U SUS9n U SWW-
  -  -  n [        R                  " X
5      $ US:X  a:  US:X  a$  U" U SU-  SU-  S-
  5      n U R;                  U
5      $ U" U SU-  SU-  5      $ US:X  aX  U" U SU-  S-
  SU-  5      n [        R<                  " U R>                  U
5      n[        R@                  " U SUU R                  SS9  U$ XÞ:”  a  U" U SU-  S-
  SU-  S-
  5      $ U R-                  T" SUS-  5      5      n U W-  n U" U SU-  SU-  SS9n U W-  n U R-                  U
5      $ ) av  
Adapted from: https://github.com/scikit-image/scikit-image/blob/main/skimage/util/dtype.py#L510-L531

Convert an image to the requested data-type.
Warnings are issued in case of precision loss, or when negative values
are clipped during conversion to unsigned integer types (sign loss).
Floating point values are expected to be normalized and will be clipped
to the range [0.0, 1.0] or [-1.0, 1.0] when converting to unsigned or
signed integers respectively.
Numbers are not shifted to the negative side when converting from
unsigned to signed integer types. Negative values will be clipped when
converting to unsigned integers.
Parameters
----------
image : ndarray
    Input image.
dtype : dtype
    Target data-type.
force_copy : bool, optional
    Force a copy of the data, irrespective of its current dtype.
uniform : bool, optional
    Uniformly quantize the floating point range to the integer range.
    By default (uniform=False) floating point values are scaled and
    rounded to the nearest integers, which minimizes back and forth
    conversion errors.
.. versionchanged :: 0.15
    ``_convert`` no longer warns about possible precision or sign
    information loss. See discussions on these warnings at:
    https://github.com/scikit-image/scikit-image/issues/2602
    https://github.com/scikit-image/scikit-image/issues/543#issuecomment-208202228
    https://github.com/scikit-image/scikit-image/pull/3575
References
----------
.. [1] DirectX data conversion rules.
       https://msdn.microsoft.com/en-us/library/windows/desktop/dd607323%28v=vs.85%29.aspx
.. [2] Data Conversions. In "OpenGL ES 2.0 Specification v2.0.25",
       pp 7-8. Khronos Group, 2010.
.. [3] Proper treatment of pixels as integers. A.W. Paeth.
       In "Graphics Gems I", pp 249-256. Morgan Kaufmann, 1990.
.. [4] Dirty Pixels. J. Blinn. In "Jim Blinn's corner: Dirty Pixels",
       pp 47-57. Morgan Kaufmann, 1998.
)FT)r>   r=   Úfloat_Úbool8c                ó.   ^ • [        U 4S jU 5       5      $ )aj  Return first of `dtypes` with itemsize greater than `itemsize`
Parameters
----------
itemsize: int
    The data type object element size.
Other Parameters
----------------
*dtypes:
    Any Object accepted by `np.dtype` to be converted to a data
    type object
Returns
-------
dtype: data type object
    First of `dtypes` with itemsize greater than `itemsize`.
c              3  ót   >#   • U  H-  n[         R                  " U5      R                  T:¼  d  M)  Uv •  M/     g 7frU   )r    r§   rš  )rR  Údtrš  s     €r8   rT  Ú4_convert.<locals>._dtype_itemsize.<locals>.<genexpr>O  s(   øé € ÐM¢˜2¬2¯8ª8°B«<×+@Ñ+@ÀHÑ+L—B‘B¢ùs   ƒ(8¯	8)Únext)rš  Údtypess   ` r8   Ú_dtype_itemsizeÚ!_convert.<locals>._dtype_itemsize?  s   ø€ ô  ÔM¡ÓMÓMÐMr:   r=   c                ó~   ^ ^• [        UU 4S jU4S-    5       5      n[        R                  " T [        U5      -   5      $ )a0  Return dtype of `kind` that can store a `bits` wide unsigned int
Parameters:
kind: str
    Data type kind.
bits: int
    Desired number of bits.
itemsize: int
    The data type object element size.
Returns
-------
dtype: data type object
    Data type of `kind` that can store a `bits` wide unsigned int
c              3  ó`   >#   • U  H#  nTUS -  :  d  TUS -  :X  d  M  TS:X  d  M  Uv •  M%     g7f)r¶   ÚuNrå   )rR  rŠ   ÚbitsÚkinds     €€r8   rT  Ú0_convert.<locals>._dtype_bits.<locals>.<genexpr>`  s;   øé € ð 
â,�Ø�q˜1‘u‹~ $¨1¨q©5¡/ó à6:¸c±k÷ ‰AÚ,ùs   ƒ.�.¥	.)rº   rµ   r¶   )rµ  r    r§   rG   )r½  r¼  rš  Úss   ``  r8   Ú_dtype_bitsÚ_convert.<locals>._dtype_bitsQ  s<   ù€ ô õ 
à�[ 9Ò,ó
ó 
ˆô �xŠx˜œs 1›v™Ó&Ð&r:   c                ól  >• U R                   R                  nX:”  a.  U R                  5       SU-  :  a  U R                  T" XB5      5      $ X:X  a  U(       a  U R	                  5       $ U $ X:”  ab  U(       aO  [
        R                  " U R                  T" XB5      5      n[
        R                  " U SX-
  -  XPR                   SS9  U$ U SX-
  -  -  n U $ X!-  S:X  a   U(       aX  [
        R                  " U R                  T" XB5      5      n[
        R                  " U SU-  S-
  SU-  S-
  -  XUR                   S9  U$ U R                  T" XBU R                   R                  5      SS9n U SU-  S-
  SU-  S-
  -  -  n U $ X!-  S-   U-  nU(       ab  [
        R                  " U R                  T" XF5      5      n[
        R                  " U SU-  S-
  SU-  S-
  -  XUR                   S9  USXb-
  -  -  nU$ U R                  T" XFU R                   R                  5      SS9n U SU-  S-
  SU-  S-
  -  -  n U SXb-
  -  -  n U $ )	a  Scale an array of unsigned/positive integers from `n` to `m` bits.
Numbers can be represented exactly only if `m` is a multiple of `n`.
Parameters
----------
a : ndarray
    Input image array.
n : int
    Number of bits currently used to encode the values in `a`.
m : int
    Desired number of bits to encode the values in `out`.
copy : bool, optional
    If True, allocates and returns new array. Otherwise, modifies
    `a` in place.
Returns
-------
out : array
    Output image array. Has the same kind as `a`.
rº   Úunsafe©Úoutr§   Úcastingr   r=   )rÅ  r§   F©re   )r§   r½  r¦  r¨  re   r    Úemptyr©   Úfloor_divideÚmultiplyrš  )ÚaÚnÚmre   r½  ÚbÚorÀ  s          €r8   Ú_scaleÚ_convert.<locals>._scaleh  s  ø€ ð& �w‰w�|‰|ˆØ‹5�Q—U‘U“W˜q !™t“^Ø—8‘8™K¨Ó0Ó1Ð1Ø‹VÞ#�1—6‘6“8Ð*¨Ð*Ø‹UæÜ—H’H˜QŸW™W¡k°$Ó&:Ó;�Ü—’  1¨©¡<°Q¿g¹gÈxÒXØ�à�a˜A™E‘lÑ"�Ø�Ø‰U�a‹ZæÜ—H’H˜QŸW™W¡k°$Ó&:Ó;�Ü—’˜A  1¡ q¡¨a°©d°Q©hÑ7¸QÇgÁgÒNØ�à—H‘H™[¨°!·'±'×2BÑ2BÓCÈ%�HÐP�Ø�a˜‘d˜Q‘h A q¡D¨1¡HÑ-Ñ-�Ø�ð ‘˜!‘˜qÑ ˆAÞÜ—H’H˜QŸW™W¡k°$Ó&:Ó;�Ü—’˜A  1¡ q¡¨a°©d°Q©hÑ7¸QÇgÁgÒNØ�a˜A™E‘lÑ"�Ø�à—H‘H™[¨°!·'±'×2BÑ2BÓCÈ%�HÐP�Ø�a˜‘d˜Q‘h A q¡D¨1¡HÑ-Ñ-�Ø�a˜A™E‘lÑ"�Ø�r:   r   Ú
obj2sctypeÚuirÎ  rº   rq   g      ð¿g      ð?z.Images of type float must be between -1 and 1.r»  rž  rv  )rÅ  r   g       @rŠ   r¶   rÃ  rÄ  FrÇ  )r=   )T)!Úboolr    Úbool_Úfloatr¢  r¡  r   Úhasattrr¯  r°  Úasarrayr§   ÚfloatingÚtyper½  rš  Ú
issubdtyperÒ  re   ÚiinfoÚminr¦  r¨  rÒ   rÊ  ÚrintÚclipÚfloorr<  ÚviewrÈ  r©   Úmaximum)Úimager§   r�   ÚuniformÚdtype_ranger·  rÐ  Údtypeobj_inÚdtypeobj_outÚdtype_inÚ	dtype_outÚkind_inÚkind_outÚitemsize_inÚitemsize_outÚis_subdtypeÚimin_inÚimax_inÚimin_outÚimax_outÚresultÚcomputation_typeÚ	image_outrÀ  s                          @r8   rŸ   rŸ     s=  ø€ ôX 	ˆmÜ
�‰�-ÜˆwÜ
�
‰
�GÜ
�
‰
�GÜ
�
‰
�Gð€Kô Œr�8×ÑØ!,¬UÑ!3ˆ”B—I‘IÑÜŒr�7×ÑØ +¬B¯H©HÑ 5ˆ”B—H‘HÑòNô$'÷.8ôt �JŠJ�uÓ€EØ—+‘+€Kð ”B—K‘KÒñ 	ð ”EŠ>ô �XŠX�iÔ ä�XŠX�e‹_ð ð ×Ñ€HØ×!Ñ!€IØ×Ñ€GØ× Ñ €HØ×&Ñ&€KØ×(Ñ(€Lô Œr�<× Ñ Ü—m’m H¬b¯mªm¸EÓ.BÓC‰ä—m’m H×.?Ñ.?Ó@ˆæÞØ—J‘J“LˆEØˆà�$ƒÜ—(’(˜8Ó$×(Ñ(ˆÜ—(’(˜8Ó$×(Ñ(ˆØ�4ÓÜ—8’8˜IÓ&×*Ñ*ˆÜ—8’8˜IÓ&×*Ñ*ˆð �3ƒØ�x Ñ 5°aÑ 8¸1Ñ <Ó=Ñ=Ð=ð �#ƒ~Ø—‘˜iÓ(ˆØ�s‹?Ø‘i Ñ 6°qÑ 9Ó:Ñ:ˆFØˆð �#„~Ø�s‹?à—<‘< 	Ó*Ð*ä�6Š6�%‹=˜4Ó¤2§6¢6¨%£=°3Ó#6ÜÐMÓNÐNñ +Ø¤B§J¡J´·
±
ó
Ðö Ø˜3‹ÜŸKšK¨¨xÐ?OÑP‘	äŸKšKØØ Ñ(¨AÑ-Ø*ñ�	ð
 ˜YÑ&�	Ü�GŠG�I 9Ò-Ü�GŠG�I˜x¨°yÓAØ˜‹_ÜŸš E¨8°a©<Ð?OÑPˆIÜ�GŠG�I˜q (°	Ó:äŸšØØ˜HÑ$ sÑ*¨cÑ1Ø&ñˆIô
 �HŠH�Y IÒ.Ü�GŠG�I˜x¨°yÒAØ×Ñ 	Ó*Ð*ð �3ƒá*Ø¤B§J¡J´·
±
ó
Ðð �c‹>ô —K’K  s¨W¡}Ð<LÑM‰Eô
 —F’F˜5 #Ð-=Ñ>ˆEØ�Q˜' GÑ+Ñ,Ñ,ˆEä�zŠz˜%Ó+Ð+ð �#ƒ~Ø�s‹?á˜5 ! k¡/°1°|Ñ3CÀaÑ3GÓHˆEØ—:‘:˜iÓ(Ð(ñ ˜%  [¡°!°lÑ2BÓCÐCð �3ƒÙ�u˜a +™o°Ñ1°1°|Ñ3CÓDˆÜ—’˜%Ÿ+™+ yÓ1ˆÜ
�
Š
�5˜! ¨u¯{©{ÀHÒMØˆð Ó!Ù�e˜Q ™_¨qÑ0°!°lÑ2BÀQÑ2FÓGÐGà�L‰L™ S¨,¸Ñ*:Ó;Ó<€EØ	ˆWÑ€EÙ�5˜!˜k™/¨1¨|Ñ+;À%ÑH€EØ	ˆXÑ€EØ�<‰<˜	Ó"Ð"r:   c                 ó2   • [         R                  " S5      S L$ )NÚffmpeg)rÇ   Úwhichrå   r:   r8   Úffmpeg_installedrù  .  s   € Ü�<Š<˜Ó!¨Ð-Ð-r:   c                óD  •  [        U 5      R                  R                  5       n[        SU S0S9nUR	                  [
        R                  [
        R                  S9n[        R                  " US   5      nUS   S   S   nX4S;   $ ! [        [        [        4 a     g	f = f)
z¦Determines if a video is playable in the browser.

A video is playable if it has a playable container and codec.
    .mp4 -> h264
    .webm -> vp9
    .ogg -> theora
z?-show_format -show_streams -select_streams v -print_format jsonN©Úglobal_optionsÚinputs©ÚstderrÚstdoutr   ÚstreamsÚ
codec_name))ú.mp4Úh264)r  Úav1)ú.oggÚtheora)ú.webmÚvp9)r  Úvp8)r  r  T)r   r¿   rc   r   ÚrunÚ
subprocessÚPIPEr¬   Úloadsr   Ú
IndexErrorÚKeyError)Úvideo_filepathÚ	containerÚprobeÚoutputÚvideo_codecs        r8   Úvideo_is_playabler  2  s§   € ðÜ˜Ó(×/Ñ/×5Ñ5Ó7ˆ	ÜØ\Ø" DÐ)ñ
ˆð —‘¤*§/¡/¼*¿/¹/�ÐJˆÜ—’˜F 1™IÓ&ˆØ˜YÑ'¨Ñ*¨<Ñ8ˆØÐ'ð ,
ñ 
ð 	
øô œJ¬Ð1ó Ùðús   ‚BB ÂBÂB>   ©z.aacÚaac©z.opusÚopus©z.webar  ©ú.m4ar  ©r  Úalac©r¹   Úmp3©r  r  ©ú.ogar  ©r$  Úvorbis©r  r  ©r  r&  ©r·   Úpcm_u8©r·   Ú	pcm_f32le©r·   Ú	pcm_s16le©r·   Ú	pcm_s24le©ú.flacÚflac©r  r  ©r  r&  c                óL  •  [        U 5      R                  R                  5       n[        SU S0S9nUR	                  [
        R                  [
        R                  S9n[        R                  " US   5      nUS   S   S   nX4[        ;   $ ! [        [        [        4 a     gf = f)	a  Determines if an audio file is playable in the browser.

Audio is playable if it has a playable container and codec, e.g.
    .wav -> pcm_s16le
    .mp3 -> mp3
    .m4a -> aac
Containers such as AIFF are not decodable by any major browser regardless of
the codec inside them.
z?-show_format -show_streams -select_streams a -print_format jsonNrû  rþ  r   r  r  T)r   r¿   rc   r   r  r  r  r¬   r  ÚPLAYABLE_AUDIO_CODECSr   r  r  )Úaudio_filepathr  r  r  Úaudio_codecs        r8   Úaudio_is_playabler:  j  s¡   € ðÜ˜Ó(×/Ñ/×5Ñ5Ó7ˆ	ÜØ\Ø" DÐ)ñ
ˆð —‘¤*§/¡/¼*¿/¹/�ÐJˆÜ—’˜F 1™IÓ&ˆØ˜YÑ'¨Ñ*¨<Ñ8ˆØÐ'Ô+@Ñ@Ð@øô œJ¬Ð1ó Ùðús   ‚BB ÂB#Â"B#r  r¹   r2  r  )r  r  r!  r3  r  r&  c                óø   •  [        SU S0S9nUR                  [        R                  [        R                  S9n[        R
                  " US   5      S   S   S   $ ! [        [        [        [        4 a     gf = f)zHReturn the codec of a file's first audio stream, or None if unprobeable.z2-show_streams -select_streams a -print_format jsonNrû  rþ  r   r  r  )
r   r  r  r  r¬   r  r   r  r  rÒ   )Ú
audio_pathr  r  s      r8   Ú_first_audio_codecr=  ‘  su   € ðÜØOØ Ð%ñ
ˆð —‘¤*§/¡/¼*¿/¹/�ÐJˆÜ�zŠz˜& ™)Ó$ YÑ/°Ñ2°<Ñ@Ð@øÜœJ¬´*Ð=ó Ùðús   ‚AA ÁA9Á8A9c                ód  ^ • [        U5      [        T 5      -  nUR                  SSS9  [        T 5      R                  nS
U 4S jjn[        R                  [        T 5      =(       d    S5      nU(       a;  X# U 3-  nUR                  5       (       a  [        U5      $  U" USS9  [        U5      $ X# S3-  nUR                  5       (       a  [        U5      $  U" USS9  [        U5      $ ! [         a     NFf = f! [         a,  n[        S[        U5       35        [        T 5      s S	nA$ S	nAff = f)a3  Convert audio to a browser-playable file, returning the original on failure.

Unlike the video equivalent the output is written to the cache rather than
next to the source: `.aif` and `.wav` share a directory far more often than
the video containers do, so writing alongside would clobber the user's files.
TrŽ   c                óz   >• [        [        T5      S 0[        U 5      U(       a  SOS 0SS9nUR                  5         g )Nz-map 0:a:0 -c copyú-y -loglevel quiet©rý  Úoutputsrü  ©r   rG   r  )Úoutput_pathÚcopy_streamsÚffr<  s      €r8   Úto_playableÚ.convert_audio_to_playable.<locals>.to_playable©  s<   ø€ ÜÜ˜
“O TÐ*ô ˜Ó%¾|Ñ';ÐQUÐVØ/ñ
ˆð 	�‰�r:   r»   ©rE  r·   Fz2Error converting audio to browser-playable format N©rD  r   rE  rÔ  râ   ÚNone)r   r~   r’   ÚstemÚREMUXABLE_AUDIO_CODECSr0   r=  rÆ   rG   r   r  )	r<  r–   r˜   rL  rG  Úremux_suffixÚremuxed_pathrD  r‘  s	   `        r8   Úconvert_audio_to_playablerP  ž  s.  ø€ ô �I‹¤¨:Ó!6Ñ6€HØ‡N�N˜D¨$€NÑ/Ü�
Ó× Ñ €D÷	ô *×-Ñ-Ô.@ÀÓ.L×.RÐPRÓS€LÞØ F¨<¨.Ð"9Ñ9ˆØ×Ñ× Ñ Ü�|Ó$Ð$ð	Ù˜°4Ò8Ü�|Ó$Ð$ð ˜v T˜]Ñ*€KØ×Ñ×ÑÜ�;ÓÐðÙ�K¨eÒ4ô ˆ{ÓÐøô ó 	ñ ð	ûô ó ÜÐBÄ3ÀqÃ6À(ÐKÔLÜ�:‹Õûðús0   ÂC) ÃC9 Ã)
C6Ã5C6Ã9
D/Ä!D*Ä$D/Ä*D/r  r  r  r!  c                ó®  •  [        SU S0S9nUR                  [        R                  [        R                  S9n[        R
                  " US   5      S   n0 nU H7  nUR                  S5      nUS;   d  M  Xd;  d  M#  UR                  S	S
5      XF'   M9     UR                  S5      UR                  S5      4$ ! [        [        [        [        4 a     gf = f)z´Return the first (video codec, audio codec) of a media file.

Either element is None when the file has no stream of that kind. Returns
None if the file could not be probed at all.
z -show_streams -print_format jsonNrû  rþ  r   r  Ú
codec_type)Úvideor�  r  r»   rS  r�  )r   r  r  r  r¬   r  r   r  r  rÒ   r0   )Ú
video_pathr  r  r  Úcodecsr  rR  s          r8   Ú_first_stream_codecsrV  ×  sË   € ðÜØ=Ø Ð%ñ
ˆð —‘¤*§/¡/¼*¿/¹/�ÐJˆÜ—*’*˜V A™YÓ'¨	Ñ2ˆð  €FÛˆØ—Z‘Z Ó-ˆ
ØÐ+Õ+°
Õ0HØ!'§¡¨L¸"Ó!=ˆFÓñ ð �:‰:�gÓ §
¡
¨7Ó 3Ð3Ð3øô œJ¬´*Ð=ó Ùðús   ‚AB7 Â7CÃCc                óp   • [        U 5      nUc  gUu  p#U[        ;   =(       a    USL =(       d	    U[        ;   $ )z;Whether the file's streams can be copied into an mp4 as-is.NF)rV  ÚMP4_COMPATIBLE_VIDEO_CODECSÚMP4_COMPATIBLE_AUDIO_CODECS)rT  rU  r  r9  s       r8   Ú_can_remux_to_mp4rZ  î  sB   € ä! *Ó-€FØ�~ØØ%Ñ€KØÔ5Ñ5÷ Ø�tÐ×I˜{Ô.IÑIðr:   c                ó  ^ • SU 4S jjn[        T 5      n[        U=(       d
    [        5       5      nUR                  SSS9  [        [        R
                  " US95      nU[        T 5      R                   S3-  n U(       a   U" USS9  [        U5      $ U" USS9  [        U5      $ ! [         a     Nf = f! [         aA  n[        S[        U5       35        [        R                  " USS	9  [        T 5      s S
nA$ S
nAff = f)zLConvert the video to mp4. If something goes wrong return the original video.c                óh   >• [        TS 0[        U 5      U(       a  SOS 0SS9nUR                  5         g )Nz-map 0:v:0 -map 0:a:0? -c copyr@  rA  rC  )rD  rE  rF  rT  s      €r8   Úto_mp4Ú-convert_video_to_playable_mp4.<locals>.to_mp4ü  s@   ø€ ÜØ Ð%ô �KÓ Þñ #Càðð
 0ñ
ˆð 	�‰�r:   T)r�   r�   )Údirr  rI  Fz2Error converting video to browser-playable format )Úignore_errorsNrJ  )rZ  r   r%   r’   rX  ÚmkdtemprL  rG   r   r  rÇ   Úrmtree)rT  r–   r]  Ú	can_remuxÚ
cache_rootÚ
output_dirrD  r‘  s   `       r8   Úconvert_video_to_playable_mp4rf  ù  sþ   ø€ ÷ô* " *Ó-€Iô �i×6Ô#4Ó#6Ó7€JØ×Ñ˜T¨DÐÑ1Ü”h×&Ò&¨:Ñ6Ó7€JØ¤$ zÓ"2×"7Ñ"7Ð!8¸Ð=Ñ=€KðÞðÙ�{°Ò6Ü˜;Ó'Ð'ñ 	ˆ{¨Ò/ô ˆ{ÓÐøô "ó ñ ðûô ó ÜÐBÄ3ÀqÃ6À(ÐKÔLô 	�Š�j°Ò5Ü�:‹ÕûðúsB   Á:B6 ÂB& ÂB6 Â&
B3Â0B6 Â2B3Â3B6 Â6
DÃ 6C<Ã6DÃ<Dc                óÈ   • [         R                  " SS[        U 5      SSSSSSR                  S	5      /	5      nUR	                  S
5      R                  5       n[        U5      nU$ )Nr�  z-iz-show_entrieszformat=durationz-vÚquietz-ofzcsv={}zp=0rD   )r  Úcheck_outputrG   rC   ÚdecodeÚstriprÖ  )rT  ÚdurationÚduration_strÚduration_floats       r8   Úget_video_lengthro  5  sh   € Ü×&Ò&àØÜ�
‹OØØØØØØ�O‰O˜EÓ"ð
	
ó€Hð —?‘? 7Ó+×1Ñ1Ó3€LÜ˜<Ó(€NàÐr:   )r6   z
str | dictrâ   r„   )r6   rG   râ   rG   )rA   )rC   rG   )é€   )r|   ú
str | Pathrp   r«   râ   rG   )r�   rG   râ   rG   )r„   r„   )r‰   rG   rp   r«   râ   rG   )rã  Úwebp)
r•   zImage.Imager–   rG   r—   rG   rC   rG   râ   rG   )rr  )r¢   ú
np.ndarrayr–   rG   rC   rG   râ   rG   )
r,   rs  r¨   r«   rC   rG   r–   rG   râ   rG   )r,   r„   râ   rG   )r,   r„   rÀ   rG   r–   rG   râ   rG   )r|   rq  r–   rG   râ   rG   )rÓ   rG   râ   rÔ  )rÙ   r«   )r�   rG   râ   zhttpx.Response)r�   rG   r–   rG   râ   rG   rU   )r‰   rG   r–   rG   rÀ   ú
str | Nonerâ   rG   )r  zstr | Path | Noner  r*   râ   rt  )r,   r   )FFF)r,   r   r  r*   rE  rÔ  )r-   rq  rD  rÔ  )r,   r   r  r*   rE  rÔ  râ   r/   )r,   zdict | listrn  rG   rm  rt  )ru  )r   r‚  )r™   rG   rŽ  rÖ  r�  rÖ  râ   ztuple[int, np.ndarray])Úwav)FF)râ   rÔ  )r  rG   râ   rÔ  )r8  rG   râ   rÔ  )r<  rG   râ   rt  )r<  rG   r–   rG   râ   rG   )rT  rG   râ   z$tuple[str | None, str | None] | None)rT  rG   râ   rÔ  )rT  rG   r–   rt  râ   rG   )rT  rq  )‹Ú
__future__r   rÛ   r3   ru   rË   r¬   Úloggingr.  r	  rÇ   r  rX  r£  Úcollections.abcr   r   r   Ú	functoolsr   r	   Úior
   Úpathlibr   Útypingr   r   r   Úurllib.parser   r   ÚhttpxÚnumpyr    Ú	safehttpxrì   Úgradio_clientr   r1   ÚPILr   r   r   r   ÚgradioÚgradio._vendorr   Úgradio._vendor.ffmpyr   r   r   Úgradio.contextr   Úgradio.data_classesr   r   r   r   Úgradio.exceptionsr   r    rƒ  r!   Úgradio.route_utilsr"   Úgradio.utilsr#   r$   r%   r&   Úcatch_warningsÚsimplefilterÚpydubr(   Úsync_transportrî   ÚClientr  Ú	getLoggerÚ__name__r  Úgradio.blocksr*   r9   r5   rN   rS   r\   rj   r€   rx   r~   r‚   r…   r‹   rš   r£   r²   r¼   rÂ   rÃ   rí   rÕ   rÖ   ræ   rð   rõ   r  r  r  Úsave_url_to_cacher  r  r&  rK  r9  ri  rr  r}  r•  r¯   r™  Úconvert_to_16_bit_wavrŸ   rù  r  Ú	frozensetr7  r:  rM  r=  rP  rX  rY  rV  rZ  rf  ro  rå   r:   r8   Ú<module>r–     sû  ðÝ "ã Û Û Û Û Û Û Û 	Û Û Û Û ß :Ñ :ß &Ý Ý ß .Ñ .ß *ã Û Û Ý /ß >Ó >å Ý #ß @Ñ @Ý 'ß PÓ Pß 5Ý (Ý )ß RÓ Rà×ÒÕØ×Ò˜(Ô#Ý"÷ ð €Ø€à�lŠl ^Ñ4€à×Ò˜Ó!€æÝ#ô	<ô ö?ò&ò
ô'ñ* ‹O×"Ñ" 7Ó+€	öôôöñ Ð,Ó-ð Øð	Ø	ðàðð ðð ð	ð
 	ôó .ðñ Ð2Ó3à39ðBØ	ðBØ #ðBØ-0ðBàôBó 4ðBñ Ð.Ó/ðØ
ðØ#&ðØ03ðØ@Cðàóó 0ðô*ñ* Ð.Ó/óó 0ðñ Ð!Ó"óó #ðò(Ð ôñ ˆCƒL€öð €ôô,ô2ô0Yð
 ,Ð ð CGðØðØ%(ðØ5?ðàõð8@Ø'ð@Ø05ð@àô@ôEð$ Ø ØðHØ
ðHàðHð õHôV+
ðb Ø ØðIØ
ðIàðIð ðIð 
õIôX	Yô7ðB ;>ð&Øð&Ø"ð&Ø27ð&àõ&ô<ò(%ðV 0Ð ôe#ôP	.ôñ@ "òóÐ ô0ð< ØØØØØñÐ ô
ô/ñj (¨°¨Ó8Ð Ù'¨°¨Ó7Ð ô4ô.ö9õx÷_( Öús   ÃK%Ë%
K4