§
    ÎÐj�!  ã                  ó  — U d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
 d dlmZ d dlZdZda e
¦   «         Zi Zd	ed
<    e¦   «         Zded<   dZd$d„Zd%d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd&d„Zdddœd„Zd'd!„Z d(d"„Z!g d#¢Z"dS ))é    )Úannotations)ÚOrderedDict)ÚnullcontextN)ÚPath)ÚRLock)ÚAnyFzXdict[tuple[int, str, str, str, tuple[int, int]], tuple[weakref.ReferenceType[Any], str]]Ú_cachez<OrderedDict[tuple[str, str, str, tuple[int, int], str], str]Ú_content_cacheé   ÚmessageÚstrÚreturnÚNonec                ó@   — t           rt          d| › �d¬¦  «         d S d S )Nz[WanGP gradio-image-cache] T)Úflush)ÚWANGP_GRADIO_IMAGE_DEBUGÚprint)r   s    úSC:\Users\johnn\OneDrive\Documents\AI\shared\gradio\gradio_save_image_cache_patch.pyÚ_debugr      s9   € Ýð CÝÐ5¨GÐ5Ð5¸TÐBÑBÔBÐBÐBÐBðCð Có    c                óÌ  — t          j        |€|                      ¦   «         n|¦  «                             ¦   «         }| j        €| j        r}| j        �%| j        j        | j                             ¦   «         fnd }t          j        |t          || j        f¦  «        z                        ¦   «         ¦  «                             ¦   «         }t          |¦  «        || j        | j
        |fS ©N)ÚhashlibÚsha256ÚtobytesÚ	hexdigestÚpaletteÚinfoÚmodeÚreprÚencoder   Úsize)ÚyÚ	cache_dirÚformatÚpixelsÚdigestÚmetadatas         r   Ú_content_keyr)      s»   € ÝŒ^¨6¨>˜AŸIšI™KœK˜K¸vÑFÔF×PÒPÑRÔR€FØ„yÐ ¤ÐØ<=¼IÐ<Q�A”I”N A¤I×$5Ò$5Ñ$7Ô$7Ð8Ð8ÐW[ˆÝ” ­$°¸!¼&Ð/AÑ*BÔ*BÑ!B× JÒ JÑ LÔ LÑMÔM×WÒWÑYÔYˆÝ�	‰NŒN˜F A¤F¨A¬F°FÐ;Ð;r   c                ó˜   — d|                       ¦   «         v r3|                      d¦  «                             ¦   «         d         dk     rdS |S )NÚAr   éÿ   Úpng)ÚgetbandsÚ
getchannelÚ
getextrema)Úimager%   s     r   Ú_effective_formatr2   #   sJ   € Ø
ˆe�nŠnÑÔÐÐ 5×#3Ò#3°CÑ#8Ô#8×#CÒ#CÑ#EÔ#EÀaÔ#HÈ3Ò#NÐ#NØˆuØ€Mr   c                ó  — t          | dd ¦  «        }|sd S t          |¦  «                             ¦   «         }t          |¦  «                             ¦   «         }|                     ¦   «         r||k    s	||j        v rt          |¦  «        S d S )NÚfilename)Úgetattrr   ÚresolveÚexistsÚparentsr   )r1   r$   r4   ÚpathÚ
cache_roots        r   Ú_existing_cache_filer;   )   s…   € Ý�u˜j¨$Ñ/Ô/€HØð ØˆtÝ�‰>Œ>×!Ò!Ñ#Ô#€DÝ�i‘”×(Ò(Ñ*Ô*€JØ‡{‚{�}„}ð ˜$ *Ò,Ð,°
¸d¼lÐ0JÐ0JÝ�4‰yŒyÐØˆ4r   c                óL  — ddl m} |                     ¦   «         dk    r?ddlm}  |¦   «         }|                      |ddd¬¦  «         |                     ¦   «         dfS 	 |                     | |¦  «        |fS # t          t          f$ r |                     | d	¦  «        d	fcY S w xY w)
Nr   ©Úprocessing_utilsÚwebp©ÚBytesIOÚWEBPTé   )r%   ÚlosslessÚmethodr-   )
Úgradior>   ÚlowerÚiorA   ÚsaveÚgetvalueÚencode_pil_to_bytesÚKeyErrorÚ
ValueError)r1   r%   r>   rA   Úbuffers        r   Ú_encode_pil_to_bytesrO   4   sÙ   € Ø'Ð'Ð'Ð'Ð'Ð'à‡|‚|�~„~˜ÒÐØÐÐÐÐÐà�‘”ˆØ�
Š
�6 &°4Àˆ
ÑBÔBÐBØ�ŠÑ Ô  &Ð(Ð(ðIØ×3Ò3°E¸6ÑBÔBÀFÐJÐJøÝ•jÐ!ð Ið Ið IØ×3Ò3°E¸5ÑAÔAÀ5ÐHÐHÐHÐHðIøøøs   ÁA7 Á7)B#Â"B#c           
     ó^  — t          | |¦  «        \  }}t          j        ¦   «         }|                     |› d| j        › d| j        d         › d| j        d         › d�                     ¦   «         ¦  «         |                     |¦  «         t          |¦  «        |                     ¦   «         z  }| 	                    dd¬¦  «         |d|› �z   
                    ¦   «         }|                     ¦   «         r|                     ¦   «         |k    r|                     |¦  «         t          |¦  «        S )Nú:r   Úxé   T)Úexist_okr8   úimage.)rO   r   r   Úupdater   r"   r!   r   r   Úmkdirr6   r7   Ú
read_bytesÚwrite_bytesr   )r1   r$   r%   Ú
bytes_dataÚsuffixr'   Útemp_dirr9   s           r   Ú_save_pil_to_mode_aware_cacher]   D   s  € Ý-¨e°VÑ<Ô<Ñ€J�ÝŒ^ÑÔ€FØ
‡M‚M�VÐKÐK˜eœjÐKÐK¨5¬:°a¬=ÐKÐK¸5¼:Àa¼=ÐKÐKÐK×RÒRÑTÔTÑUÔUÐUØ
‡M‚M�*ÑÔÐÝ�I‰Œ ×!1Ò!1Ñ!3Ô!3Ñ3€HØ‡N‚N˜D¨$€NÑ/Ô/Ð/ØÐ( Ð(Ð(Ñ(×1Ò1Ñ3Ô3€DØ�;Š;‰=Œ=ð %˜DŸOšOÑ-Ô-°Ò;Ð;Ø×Ò˜Ñ$Ô$Ð$Ýˆt‰9Œ9Ðr   c                ó|   — t           5  t                               | d ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r   )Ú_lockr	   Úpop)Úkeys    r   Ú_remove_keyrb   Q   s€   € Ý	ð ð Ý�
Š
�3˜ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ˆ1±5¸5c                ó  — 	 t          j        || fd„¦  «        }nF# t          $ r9 t          dt	          |¦  «        › d|j        › d|j        › d|› d|› �
¦  «         Y d S w xY wt          5  ||ft          | <   d d d ¦  «         d S # 1 swxY w Y   d S )Nc                ó    — t          |¦  «        S r   )rb   )Ú_refra   s     r   ú<lambda>z!_store_identity.<locals>.<lambda>X   s   € µ;¸sÑ3CÔ3C€ r   zcache_skip_no_weakref id=ú mode=ú size=ú format=ú path=)	ÚweakrefÚrefÚ	TypeErrorr   Úidr   r"   r_   r	   )ra   r#   r9   r%   rl   s        r   Ú_store_identityro   V   s  € ðÝŒk˜!¨cÐCÐCÐCÑDÔDˆˆøÝð ð ð ÝÐj­2¨a©5¬5ÐjÐj¸¼ÐjÐjÀaÄfÐjÐjÐV\ÐjÐjÐdhÐjÐjÑkÔkÐkØˆˆðøøøõ 
ð "ð "Ø˜D�k�ˆs‰ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð "ð "s!   ‚ ›?AÁAÁ(BÂBÂ	Bc                ó8  — t           5  |t          | <   t                               | ¦  «         t          t          ¦  «        t          k    r8t                               d¬¦  «         t          t          ¦  «        t          k    °8d d d ¦  «         d S # 1 swxY w Y   d S )NF)Úlast)r_   r
   Úmove_to_endÚlenÚ_CONTENT_CACHE_LIMITÚpopitem)ra   r9   s     r   Ú_store_contentrv   `   sË   € Ý	ð /ð /Ø"��sÑÝ×"Ò" 3Ñ'Ô'Ð'Ý•.Ñ!Ô!Õ$8Ò8Ð8Ý×"Ò"¨Ð"Ñ.Ô.Ð.õ •.Ñ!Ô!Õ$8Ò8Ð8ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð /ð /s   ˆA:BÂBÂBr-   c                ó’  — t          | |¦  «        }t          | ||¦  «        }t          5  t                               |¦  «        }|�It          |¦  «                             ¦   «         r(t                               |¦  «         |cddd¦  «         S ddd¦  «         n# 1 swxY w Y   t          | ||¦  «        }t          ||¦  «         |S )zKReuse encoded pixels across form copies, checking mutable images each time.N)
r2   r)   r_   r
   Úgetr   Úis_filerr   r]   rv   )r1   r$   r%   ra   r9   s        r   Úsave_image_by_contentrz   h   s  € å˜u fÑ-Ô-€FÝ
�u˜i¨Ñ
0Ô
0€CÝ	ð ð Ý×!Ò! #Ñ&Ô&ˆØÐ¥ T¡
¤
× 2Ò 2Ñ 4Ô 4ÐÝ×&Ò& sÑ+Ô+Ð+Øð	ð ð ð ñ ô ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ
 )¨°	¸6ÑBÔB€DÝ�3˜ÑÔÐØ€Ks   ©ABÂBÂ"BT)Úcache_identityÚdecoded_sourcec               ó*  — ddl m} ddlm} ddlm} t          | |j        ¦  «        r|€dS t          | |¦  «        }	|                      ¦   «         }
t          | ||	|
¦  «        }t          | ¦  «        t          |¦  «        |	| j        | j        f}t          5  t                               |¦  «        }|�]t#          |¦  «                             ¦   «         r<t                               |¦  «         |rt)          || ||	¦  «         	 ddd¦  «         dS ddd¦  «         n# 1 swxY w Y   t          |t*          t,          t.          f¦  «        }|€'|                     |r ||¦  «        n|j        ¦  «        nt5          |¦  «        5 }|j        dvst9          |dd¦  «        dk    r	 ddd¦  «         dS |j        | j        k    p|j        d	k    o
| j        d
k    }|j        d
k    r6| j        d	k    r+|                     d¦  «                             ¦   «         dk    }|j        | j        k    s|s	 ddd¦  «         dS |j        | j        k    r|n|                     | j        ¦  «        }|                     ¦   «         |
k    r	 ddd¦  «         dS |j                              ¦   «         }ddd¦  «         n# 1 swxY w Y   |r| !                    |d|› �|¦  «        }n| "                    |j        |¦  «        }tG          ||¦  «         |rt)          || ||	¦  «         dS dS )zEReuse unchanged uploaded pixels, including copies made by form state.r   r@   r=   )ÚImageN>   ÚPNGÚJPEGrB   Ún_framesrS   ÚRGBÚRGBAr+   )r,   r,   rU   )$rH   rA   rF   r>   ÚPILr~   Ú
isinstancer2   r   r)   rn   r   r   r"   r_   r
   rx   r   r7   rr   ro   ÚbytesÚ	bytearrayÚ
memoryviewÚopenr9   r   r%   r5   r/   r0   ÚconvertrG   Úsave_bytes_to_cacheÚsave_file_to_cacherv   )r1   Úsourcer$   r%   r{   r|   rA   r>   r~   Úeffective_formatr&   Úcontent_keyÚidentity_keyÚexistingÚsource_bytesÚoriginalÚcompatible_modeÚdecodedr[   r9   s                       r   Úremember_source_imager–   v   s=  € àÐÐÐÐÐà'Ð'Ð'Ð'Ð'Ð'ØÐÐÐÐÐå�e˜Uœ[Ñ)Ô)ð ¨V¨^ØˆÝ(¨°Ñ7Ô7ÐØ�]Š]‰_Œ_€FÝ˜u iÐ1AÀ6ÑJÔJ€KÝ�u‘I”I�s 9™~œ~Ð/?ÀÄÈUÌZÐX€LÝ	ð ð Ý!×%Ò% kÑ2Ô2ˆØÐ¥D¨¡N¤N×$9Ò$9Ñ$;Ô$;Ðõ ×&Ò& {Ñ3Ô3Ð3Øð QÝ ¨e°XÐ?OÑPÔPÐPØðð ð ñ ô ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ ˜f¥u­i½Ð&DÑEÔE€LØIWÐI_ˆ�Š |ÐD�G�G˜F‘O”O�O¸¼Ñ	EÔ	EÐ	EÕepÐqñ  fAô  fAð )ð  EMØŒ?Ð"9Ð9Ð9½WÀXÈzÐ[\Ñ=]Ô=]ÐabÒ=bÐ=bØð)ð )ð )ñ )ô )ð )ð )ð )ð #œ-¨5¬:Ò5Ðj¸(¼-È5Ò:PÐ:iÐUZÔU_ÐciÒUiˆØŒ=˜FÒ"Ð" u¤z°UÒ':Ð':Ø&×1Ò1°#Ñ6Ô6×AÒAÑCÔCÀzÒQˆOØŒ=˜EœJÒ&Ð&¨oÐ&Øð)ð )ð )ñ )ô )ð )ð )ð )ð 'œm¨u¬zÒ9Ð9�(�(¸x×?OÒ?OÐPUÔPZÑ?[Ô?[ˆØ�?Š?ÑÔ Ò&Ð&Øð)ð )ð )ñ )ô )ð )ð )ð )ð ”×&Ò&Ñ(Ô(ˆð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )ð ð KØ×3Ò3°FÐ<MÀVÐ<MÐ<MÈyÑYÔYˆˆà×2Ò2°6´;À	ÑJÔJˆÝ�; Ñ%Ô%Ð%Øð EÝ˜ e¨TÐ3CÑDÔDÐDÐDÐDðEð Es9   ÂA-DÄDÄ!DÅ? J*Æ,A:J*È3AJ*ÊJ*Ê*J.Ê1J.Úboolc                 ó¦   ‡‡— t           rdS dd lŠddlm}  | j        Št          ‰dd¦  «        rda dS ddˆˆfd
„}d|_        ‰|_        || _        da dS )NTr   )Úimage_utilsÚ!_wangp_save_image_cache_installedFr?   r$   r   r%   c                ó2  •— t          | t          t          f¦  «        rt          d| › �¦  «          ‰| ||¦  «        S t          | ‰
j        j        ¦  «        s ‰| ||¦  «        S t          | |¦  «        }|�4t          dt          | ¦  «        › d| j        › d| j        › d|› �¦  «         |S t          | |¦  «        }||k    r|› d|› �n|}t          | ¦  «        t          |¦  «        || j        | j        f}t          5  t                               |¦  «        }|��|\  }}	 |¦   «         | u rdt          |	¦  «                             ¦   «         rCt          dt          | ¦  «        › d| j        › d| j        › d|› d|	› �
¦  «         |	cd d d ¦  «         S t                               |d ¦  «         d d d ¦  «         n# 1 swxY w Y   t          | ||¦  «        }	t!          || |	|¦  «         t          d	t          | ¦  «        › d| j        › d| j        › d|› d|	› �
¦  «         |	S )
Nzalready_file path=zalready_file_image id=rg   rh   rj   z->zcache_hit id=ri   zcache_store id=)r…   r   r   r   r~   r;   rn   r   r"   r2   r_   r	   rx   r7   r`   rz   ro   )r#   r$   r%   Úexisting_pathrŽ   Úformat_labelra   Úentryrl   r9   r„   Úoriginal_save_images             €€r   Úpatched_save_imagez#install.<locals>.patched_save_image±   s¬  ø€ Ý�a�#�t˜Ñ%Ô%ð 	=ÝÐ+¨Ð+Ð+Ñ,Ô,Ð,Ø&Ð& q¨)°VÑ<Ô<Ð<å˜!˜SœYœ_Ñ-Ô-ð 	=Ø&Ð& q¨)°VÑ<Ô<Ð<å,¨Q°	Ñ:Ô:ˆØÐ$ÝÐd­B¨q©E¬EÐdÐd¸¼ÐdÐdÀqÄvÐdÐdÐUbÐdÐdÑeÔeÐeØ Ð å,¨Q°Ñ7Ô7ÐØ:JÈfÒ:TÐ:T˜&Ð6Ð6Ð$4Ð6Ð6Ð6ÐZ`ˆå�!‰uŒu•c˜)‘n”nÐ&6¸¼ÀÄÐGˆÝð 	&ð 	&Ý—J’J˜s‘O”OˆEØÐ Ø!‘	��TØ�3‘5”5˜A�:�:¥$ t¡*¤*×"3Ò"3Ñ"5Ô"5�:ÝÐp­2¨a©5¬5ÐpÐp¸¼ÐpÐpÀaÄfÐpÐpÐVbÐpÐpÐjnÐpÐpÑqÔqÐqØð	&ð 	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&õ —
’
˜3 Ñ%Ô%Ð%ð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&õ % Q¨	Ð3CÑDÔDˆÝ˜˜Q Ð&6Ñ7Ô7Ð7ÝÐf¥ A¡¤ÐfÐf¨a¬fÐfÐf¸A¼FÐfÐfÈLÐfÐfÐ`dÐfÐfÑgÔgÐgØˆs   Ã;BF4ÆF4Æ4F8Æ;F8)r?   )r$   r   r%   r   )Ú
_installedÚ	PIL.ImagerF   r™   Ú
save_imager5   rš   Ú_wangp_original_save_image)r™   r    r„   rŸ   s     @@r   Úinstallr¥   ¤   s§   øø€ åð ØˆtàÐÐÐØ"Ð"Ð"Ð"Ð"Ð"à%Ô0ÐÝÐ"Ð$GÈÑOÔOð Øˆ
Øˆtðð ð ð ð ð ð ð ð> <@ÐÔ8Ø4GÐÔ1Ø/€KÔØ€JØˆ4r   c                 óª   — t           5  t                               ¦   «          t                               ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S r   )r_   r	   Úclearr
   © r   r   r§   r§   ×   s‹   € Ý	ð ð Ý�Š‰ŒˆÝ×ÒÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ˆ3AÁAÁA)r   r§   r¥   r–   rz   )r   r   r   r   r   )r-   )r   r—   )r   r   )#Ú
__future__r   Úcollectionsr   Ú
contextlibr   r   Úpathlibr   Ú	threadingr   Útypingr   rk   r   r¡   r_   r	   Ú__annotations__r
   rt   r   r)   r2   r;   rO   r]   rb   ro   rv   rz   r–   r¥   r§   Ú__all__r¨   r   r   ú<module>r±      sÜ  ðà "Ð "Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #Ø "Ð "Ð "Ð "Ð "Ð "Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€ð !Ð à€
Øˆ‰Œ€Øce€Ð eÐ eÐ eÑ eØOZÈ{É}Ì}€Ð \Ð \Ð \Ñ \ØÐ ðCð Cð Cð Cð
<ð <ð <ð <ðð ð ðð ð ðIð Ið Ið 
ð 
ð 
ðð ð ð
"ð "ð "ð/ð /ð /ðð ð ð ð OSÐcgð +Eð +Eð +Eð +Eð +Eð\0ð 0ð 0ð 0ðfð ð ð ð mÐ
lÐ
l€€€r   