§
    ÎÐjÉ  ã                  óš   — d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlZd dlmZ e G d„ d¦  «        ¦   «         Z G d	„ d
¦  «        ZdS )é    )Úannotations)ÚOrderedDict)Ú	dataclass)ÚAnyÚCallableÚIterableÚHashableN)Útext_encoding_promptsc                  ó$   — e Zd ZU ded<   ded<   dS )Ú_CacheEntryr   ÚvalueÚintÚ
size_bytesN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úGC:\Users\johnn\OneDrive\Documents\AI\shared\utils\text_encoder_cache.pyr   r      s"   € € € € € € à€J€J�JØ€O€O�O€O€Or   r   c                  óP   — e Zd Zd d!d„Z	 	 	 d"d#d„Zd$d„Zd%d„Zd&d„Zd'd„Zd(d„Z	dS ))ÚTextEncoderCacheéd   Úmax_size_mbÚfloatÚreturnÚNonec                ón   — t          |dz  dz  ¦  «        | _        t          ¦   «         | _        d| _        d S )Ni   r   )r   Úmax_size_bytesr   Ú_entriesÚ_size_bytes)Úselfr   s     r   Ú__init__zTextEncoderCache.__init__   s5   € Ý! +°Ñ"4°tÑ";Ñ<Ô<ˆÔÝ>I¹m¼mˆŒØˆÔÐÐr   NFÚ	encode_fnú Callable[[list[str]], list[Any]]ÚpromptsúIterable[str] | strÚdeviceútorch.device | str | NoneÚparallelÚboolÚ
cache_keysú$Iterable[Hashable] | Hashable | Noneú	list[Any]c           	     ó  ‡ — t          |t          ¦  «        r|g}nt          |¦  «        }|sg S |€|}njt          |¦  «        dk    rt          |t          ¦  «        s|g}nt          |¦  «        }t          |¦  «        t          |¦  «        k    rt	          d¦  «        ‚|�sGt          t          ˆ fd„t                               |¦  «        D ¦   «         ¦  «        d¬¦  «        5  g }t          ||¦  «        D ]Ø\  }	}
‰ j
                             |
¦  «        }|�I‰ j
                             |
¦  «         |                     ‰                      |j        |¦  «        ¦  «         Œj ||	g¦  «        }t          |t          t           f¦  «        r|st	          d¦  «        ‚|d         }n|}|                     ‰                      |
||¦  «        ¦  «         ŒÙ|cd d d ¦  «         S # 1 swxY w Y   d gt          |¦  «        z  }g }g }g }t%          t          ||¦  «        ¦  «        D ]œ\  }\  }	}
‰ j
                             |
¦  «        }|€@|                     |	¦  «         |                     |¦  «         |                     |
¦  «         Œd‰ j
                             |
¦  «         ‰                      |j        |¦  «        ||<   Œ�|rÆt          t          |¦  «        d¬¦  «        5   ||¦  «        }d d d ¦  «         n# 1 swxY w Y   t          |t          ¦  «        st          |¦  «        }t          |¦  «        t          |¦  «        k    rt	          d¦  «        ‚t          |||¦  «        D ] \  }
}}‰                      |
||¦  «        ||<   Œ!|S )	Né   z,cache_keys must match the number of prompts.c              3  ó*   •K  — | ]}|‰j         vV — Œd S ©N)r    )Ú.0Úkeyr"   s     €r   ú	<genexpr>z*TextEncoderCache.encode.<locals>.<genexpr>1   s*   øè è € Ð*hÐ*hÈ¨3°d´mÐ+CÐ*hÐ*hÐ*hÐ*hÐ*hÐ*hr   T)Úinheritz$encode_fn returned empty embeddings.r   z3encode_fn returned unexpected number of embeddings.)Ú
isinstanceÚstrÚlistÚlenÚ
ValueErrorr
   ÚsumÚdictÚfromkeysÚzipr    ÚgetÚmove_to_endÚappendÚ
_to_devicer   ÚtupleÚ_storeÚ	enumerate)r"   r$   r&   r(   r*   r,   Úprompts_listÚ	keys_listÚresultsÚpromptÚ	cache_keyÚcachedÚencodedÚencoded_itemÚmissing_promptsÚmissing_indicesÚmissing_keysÚidxÚencoded_batchs   `                  r   ÚencodezTextEncoderCache.encode   s(  ø€ õ �g�sÑ#Ô#ð 	)Ø#˜9ˆLˆLå ™=œ=ˆLØð 	ØˆIØÐØ$ˆIˆIå�<Ñ Ô  AÒ%Ð%­j¸ÅTÑ.JÔ.JÐ%Ø'˜L�	�	å  Ñ,Ô,�	Ý�9‰~Œ~¥ \Ñ!2Ô!2Ò2Ð2Ý Ð!OÑPÔPÐPàñ 	Ý&¥sÐ*hÐ*hÐ*hÐ*hÍtÏ}Ê}Ð]fÑOgÔOgÐ*hÑ*hÔ*hÑ'hÔ'hÐrvÐwÑwÔwð ð Ø%'�Ý),¨\¸9Ñ)EÔ)Eð Qð QÑ%�F˜IØ!œ]×.Ò.¨yÑ9Ô9�FØÐ)Øœ×1Ò1°)Ñ<Ô<Ð<ØŸš t§¢°v´|ÀVÑ'LÔ'LÑMÔMÐMØ Ø'˜i¨¨Ñ1Ô1�GÝ! '­Dµ%¨=Ñ9Ô9ð /Ø&ð UÝ",Ð-SÑ"TÔ"TÐTØ'.¨q¤z˜˜à'.˜Ø—N’N 4§;¢;¨y¸,ÈÑ#OÔ#OÑPÔPÐPÐPØð!ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð$ �&�3˜|Ñ,Ô,Ñ,ˆØ%'ˆØ%'ˆØ')ˆå(1µ#°lÀIÑ2NÔ2NÑ(OÔ(Oð 	Að 	AÑ$ˆCÑ$�&˜)Ø”]×&Ò& yÑ1Ô1ˆFØˆ~Ø×&Ò& vÑ.Ô.Ð.Ø×&Ò& sÑ+Ô+Ð+Ø×#Ò# IÑ.Ô.Ð.ØØŒM×%Ò% iÑ0Ô0Ð0ØŸ?š?¨6¬<¸Ñ@Ô@ˆG�C‰LˆLàð 	GÝ&¥s¨?Ñ';Ô';ÀTÐJÑJÔJð ;ð ;Ø ) 	¨/Ñ :Ô :�ð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;å˜m­TÑ2Ô2ð 4Ý $ ]Ñ 3Ô 3�Ý�=Ñ!Ô!¥S¨Ñ%9Ô%9Ò9Ð9Ý Ð!VÑWÔWÐWÝ+.¨|¸_ÈmÑ+\Ô+\ð Gð GÑ'�	˜3 Ø#Ÿ{š{¨9°g¸vÑFÔF�˜‘�àˆs%   Ã"C-GÇG Ç#G ËK2Ë2K6Ë9K6rK   r	   rM   r   c                ó¼  — |                       |¦  «        }|                      |¦  «        }|| j        k    ro| j                             |d ¦  «        }|�| xj        |j        z  c_        t          ||¦  «        | j        |<   | xj        |z  c_        |                      ¦   «          n#|| j        v r| j         	                    |¦  «         |  
                    ||¦  «        S r2   )Ú_detach_to_cpuÚ_estimate_size_bytesr   r    Úpopr!   r   r   Ú_purge_if_neededrA   rC   )r"   rK   rM   r(   Úcached_valuer   Úexistings          r   rE   zTextEncoderCache._store^   sà   € Ø×*Ò*¨7Ñ3Ô3ˆØ×.Ò.¨|Ñ<Ô<ˆ
Ø˜Ô,Ò,Ð,Ø”}×(Ò(¨°DÑ9Ô9ˆHØÐ#ØÐ Ô  HÔ$7Ñ7Ð Ô Ý'2°<ÀÑ'LÔ'LˆDŒM˜)Ñ$ØÐÔ 
Ñ*ÐÔØ×!Ò!Ñ#Ô#Ð#Ð#à˜DœMÐ)Ð)Ø”×)Ò)¨)Ñ4Ô4Ð4Ø�Š˜w¨Ñ/Ô/Ð/r   c                óø   — | j         | j        k    rd S | j        r\| j         | j        k    rP| j                             d¬¦  «        \  }}| xj         |j        z  c_         | j        r| j         | j        k    °Jd S d S d S d S )NF)Úlast)r!   r   r    Úpopitemr   )r"   Ú_Úentrys      r   rY   z!TextEncoderCache._purge_if_neededm   s¡   € ØÔ˜tÔ2Ò2Ð2ØˆFØŒmð 	1 Ô 0°4Ô3FÒ FÐ FØ”}×,Ò,°%Ð,Ñ8Ô8‰HˆAˆuØÐÔ Ô 0Ñ0ÐÔð Œmð 	1 Ô 0°4Ô3FÒ FÐ FÐ FÐ Fð 	1ð 	1ð 	1ð 	1Ð FÐ Fr   r   r   c                óŽ  ‡ — t          j        |¦  «        r6t          |                     ¦   «         |                     ¦   «         z  ¦  «        S t          |t          ¦  «        r-t          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        S t          |t          t          f¦  «        rt          ˆ fd„|D ¦   «         ¦  «        S dS )Nc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r2   ©rW   ©r3   Úvr"   s     €r   r5   z8TextEncoderCache._estimate_size_bytes.<locals>.<genexpr>x   s1   øè è € ÐLÐL¸�t×0Ò0°Ñ3Ô3ÐLÐLÐLÐLÐLÐLr   c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r2   rc   rd   s     €r   r5   z8TextEncoderCache._estimate_size_bytes.<locals>.<genexpr>z   s1   øè è € ÐCÐC¸�t×0Ò0°Ñ3Ô3ÐCÐCÐCÐCÐCÐCr   r   )ÚtorchÚ	is_tensorr   ÚnumelÚelement_sizer7   r=   r<   Úvaluesr9   rD   )r"   r   s   ` r   rW   z%TextEncoderCache._estimate_size_bytest   s¹   ø€ ÝŒ?˜5Ñ!Ô!ð 	=Ý�u—{’{‘}”} u×'9Ò'9Ñ';Ô';Ñ;Ñ<Ô<Ð<Ý�e�TÑ"Ô"ð 	MÝÐLÐLÐLÐL¸U¿\º\¹^¼^ÐLÑLÔLÑLÔLÐLÝ�e�d¥E˜]Ñ+Ô+ð 	DÝÐCÐCÐCÐC¸UÐCÑCÔCÑCÔCÐCØˆqr   c                ó  ‡ — t          j        |¦  «        rK|j        j        dk    r|                     ¦   «         S |                     ¦   «                              d¦  «        S t          |t          ¦  «        r ˆ fd„|                     ¦   «         D ¦   «         S t          |t          ¦  «        r7ˆ fd„|D ¦   «         }t          |d¦  «        r
 |j        |Ž S t          |¦  «        S t          |t          ¦  «        rˆ fd„|D ¦   «         S |S )NÚcpuc                óB   •— i | ]\  }}|‰                      |¦  «        “ŒS r   ©rV   )r3   Úkre   r"   s      €r   ú
<dictcomp>z3TextEncoderCache._detach_to_cpu.<locals>.<dictcomp>ƒ   s-   ø€ ÐHÐHÐH±$°!°Q�A�t×*Ò*¨1Ñ-Ô-ÐHÐHÐHr   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   ro   rd   s     €r   ú
<listcomp>z3TextEncoderCache._detach_to_cpu.<locals>.<listcomp>…   s'   ø€ Ð;Ð;Ð;°�T×(Ò(¨Ñ+Ô+Ð;Ð;Ð;r   Ú_fieldsc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   ro   rd   s     €r   rs   z3TextEncoderCache._detach_to_cpu.<locals>.<listcomp>Š   s'   ø€ Ð:Ð:Ð:¨q�D×'Ò'¨Ñ*Ô*Ð:Ð:Ð:r   )rg   rh   r(   ÚtypeÚdetachÚtor7   r=   ÚitemsrD   ÚhasattrÚ	__class__r9   )r"   r   ry   s   `  r   rV   zTextEncoderCache._detach_to_cpu}   s  ø€ ÝŒ?˜5Ñ!Ô!ð 	,ØŒ|Ô  EÒ)Ð)Ø—|’|‘~”~Ð%Ø—<’<‘>”>×$Ò$ UÑ+Ô+Ð+Ý�e�TÑ"Ô"ð 	IØHÐHÐHÐH¸%¿+º+¹-¼-ÐHÑHÔHÐHÝ�e�UÑ#Ô#ð 	 Ø;Ð;Ð;Ð;°UÐ;Ñ;Ô;ˆEÝ�u˜iÑ(Ô(ð /Ø&�u”¨Ð.Ð.Ý˜‘<”<ÐÝ�e�TÑ"Ô"ð 	;Ø:Ð:Ð:Ð:°EÐ:Ñ:Ô:Ð:Øˆr   c                ó²  ‡ ‡— ‰€|S t          j        |¦  «        r|                     ‰¦  «        S t          |t          ¦  «        r!ˆˆ fd„|                     ¦   «         D ¦   «         S t          |t          ¦  «        r8ˆˆ fd„|D ¦   «         }t          |d¦  «        r
 |j        |Ž S t          |¦  «        S t          |t          ¦  «        rˆˆ fd„|D ¦   «         S |S )Nc                óD   •— i | ]\  }}|‰                      |‰¦  «        “ŒS r   ©rC   )r3   rp   re   r(   r"   s      €€r   rq   z/TextEncoderCache._to_device.<locals>.<dictcomp>“   s-   ø€ ÐLÐLÐL±d°a¸�A�t—’ q¨&Ñ1Ô1ÐLÐLÐLr   c                ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS r   r~   ©r3   re   r(   r"   s     €€r   rs   z/TextEncoderCache._to_device.<locals>.<listcomp>•   s'   ø€ Ð?Ð?Ð?°A�T—_’_ Q¨Ñ/Ô/Ð?Ð?Ð?r   rt   c                ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS r   r~   r€   s     €€r   rs   z/TextEncoderCache._to_device.<locals>.<listcomp>š   s'   ø€ Ð>Ð>Ð>°1�D—O’O A vÑ.Ô.Ð>Ð>Ð>r   )
rg   rh   rx   r7   r=   ry   rD   rz   r{   r9   )r"   r   r(   ry   s   ` ` r   rC   zTextEncoderCache._to_device�   sù   øø€ Øˆ>ØˆLÝŒ?˜5Ñ!Ô!ð 	$Ø—8’8˜FÑ#Ô#Ð#Ý�e�TÑ"Ô"ð 	MØLÐLÐLÐLÐL¸e¿kºk¹m¼mÐLÑLÔLÐLÝ�e�UÑ#Ô#ð 	 Ø?Ð?Ð?Ð?Ð?¸Ð?Ñ?Ô?ˆEÝ�u˜iÑ(Ô(ð /Ø&�u”¨Ð.Ð.Ý˜‘<”<ÐÝ�e�TÑ"Ô"ð 	?Ø>Ð>Ð>Ð>Ð>¸Ð>Ñ>Ô>Ð>Øˆr   )r   )r   r   r   r   )NFN)r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r   r.   )rK   r	   rM   r   r(   r)   r   r   )r   r   )r   r   r   r   )r   r   r   r   )r   r   r(   r)   r   r   )
r   r   r   r#   rT   rE   rY   rW   rV   rC   r   r   r   r   r      s»   € € € € € ðð ð ð ð ð -1ØØ;?ðDð Dð Dð Dð DðL0ð 0ð 0ð 0ð1ð 1ð 1ð 1ðð ð ð ðð ð ð ð ð ð ð ð ð r   r   )Ú
__future__r   Úcollectionsr   Údataclassesr   Útypingr   r   r   r	   rg   Úshared.utils.phase_progressr
   r   r   r   r   r   ú<module>r‡      sê   ðà "Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #Ø !Ð !Ð !Ð !Ð !Ð !Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4à €€€Ø =Ð =Ð =Ð =Ð =Ð =ð ðð ð ð ð ñ ô ñ „ðð
Ið Ið Ið Ið Iñ Iô Ið Ið Ið Ir   