Ë
    øÿæig+  ã                   ó„  — d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZmZmZ d d	lmZ  ej.                  e«      Z ej4                  d
¬«       G d„ de«      «       Z G d„ d«      Zej4                   G d„ d«      «       Zdeddddfd„Zdeddfd„Ze e!e"e   f   Z# G d„ d«      Z$y)é    N)ÚABCÚabstractmethod)Údefaultdict)Ú	Generator)Úcontextmanager)Úchain)ÚAnyÚOptional)ÚAppendingByteSerializerÚBytesReaderÚBytesWriter)Ú
OrderedSetT)Úfrozenc                   óÊ   — e Zd ZU dZeed<    ej                  d¬«      Ze	ed<   e
dedd dd	fd
„«       Ze
dededd fd„«       Ze
dede	fd„«       Zedd„«       Ze
defd„«       Zy	)ÚCacheArtifactzO
    Data for each cache artifact that will be serialized and deserialized
    ÚkeyF)ÚreprÚcontentÚwriterÚclsÚreturnNc                 óp   — | j                  |j                  «       | j                  |j                  «       y ©N)Ú	write_strr   Úwrite_bytesr   )r   r   s     új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/torch/compiler/_cache.pyÚ	serializezCacheArtifact.serialize   s&   € à×Ñ˜Ÿ™Ô!Ø×Ñ˜3Ÿ;™;Õ'ó    Úartifact_typeÚreaderc                 óp   — |j                  «       }|j                  «       }t        j                  | ||«      S r   )Úread_strÚ
read_bytesÚCacheArtifactFactoryÚcreate)r   r    r   r   s       r   ÚdeserializezCacheArtifact.deserialize$   s1   € à�o‰oÓˆØ×#Ñ#Ó%ˆÜ#×*Ñ*¨=¸#¸wÓGÐGr   c                 óT   — t        | t        «      st        dt        | «      › �«      ‚| S )NzExpected bytes, got )Ú
isinstanceÚbytesÚAssertionErrorÚtype)r   s    r   ÚencodezCacheArtifact.encode*   s(   € ä˜'¤5Ô)Ü Ð#7¼¸W»°Ð!GÓHÐHØˆr   c                  ó   — y r   © ©Úselfs    r   Úpopulate_cachezCacheArtifact.populate_cache0   s   € àr   c                  ó   — t        d«      ‚)a  
        Returns the type of the artifact. Must be unique across all CacheArtifact classes.

        CacheArtifactFactory.register will add property method to CacheInfo based on this (def {type}_artifacts)
        that returns all artifacts for specific cache.
        z9CacheArtifact is an abstract class, please use a subclass)ÚRuntimeErrorr.   r   r   r+   zCacheArtifact.type4   s   € ô ÐVÓWÐWr   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__ÚdataclassesÚfieldr   r)   Ústaticmethodr   r   r   r&   r	   r,   r   r1   r+   r.   r   r   r   r      sÎ   … ñð 
ƒHØ&�[×&Ñ&¨EÔ2€GˆUÓ2àð(˜+ð (¨Oð (Àò (ó ð(ð ðH 3ð H°ð HÀò Hó ðHð
 ð˜ð  ò ó ðð
 òó ðð ðX�#ò Xó ñXr   r   c            	       óº   — e Zd ZU dZi Zeeee   f   e	d<   e
dee   dee   fd„«       Ze
dedee   fd„«       Ze
deded	edefd
„«       Ze
deded	edefd„«       Zy)r$   zH
    Factory for creating CacheArtifact objects based on their type
    Ú_artifact_typesÚartifact_clsr   c                 óÜ   ‡— |j                  «       Š|j                  «       | j                  v rt        d‰› d�«      ‚|| j                  ‰<   t        t        ‰› d�t        ˆfd„«      «       |S )NúArtifact of type=z2 already registered in mega-cache artifact factoryÚ
_artifactsc                 ó"   •— | j                   ‰   S r   ©Ú	artifacts)r0   Úartifact_type_keys    €r   Ú<lambda>z/CacheArtifactFactory.register.<locals>.<lambda>Q   s   ø€  $§.¡.Ð1BÒ"Cr   )r+   r?   r*   ÚsetattrÚ	CacheInfoÚproperty)r   r@   rG   s     @r   ÚregisterzCacheArtifactFactory.registerF   s   ø€ à(×-Ñ-Ó/ÐØ×ÑÓ #×"5Ñ"5Ñ5Ü Ø#Ð$5Ð#6Ð6hÐióð ð 2>ˆ×ÑÐ-Ñ.ÜÜØ Ð! Ð,ÜÓCÓDô	
ð
 Ðr   rG   c                 óZ   — || j                   vrt        d|› d�«      ‚| j                   |   S )NrB   z. not registered in mega-cache artifact factory)r?   r*   )r   rG   s     r   Ú_get_artifact_typez'CacheArtifactFactory._get_artifact_typeU   s@   € à C×$7Ñ$7Ñ7Ü Ø#Ð$5Ð#6Ð6dÐeóð ð ×"Ñ"Ð#4Ñ5Ð5r   r   r   c                 ó6   — | j                  |«      } |||«      S r   )rN   ©r   rG   r   r   r@   s        r   r%   zCacheArtifactFactory.create]   s    € à×-Ñ-Ð.?Ó@ˆá˜C Ó)Ð)r   c                 óT   — | j                  |«      } |||j                  |«      «      S r   )rN   r,   rP   s        r   Úencode_createz"CacheArtifactFactory.encode_createc   s-   € ð ×-Ñ-Ð.?Ó@ˆá˜C ×!4Ñ!4°WÓ!=Ó>Ð>r   N)r5   r6   r7   r8   r?   Údictr9   r+   r   r:   ÚclassmethodrL   rN   r)   r%   r	   rR   r.   r   r   r$   r$   ?   s×   … ñð 79€O�T˜#˜t MÑ2Ð2Ñ3Ó8àð D¨Ñ$7ð ¸DÀÑ<Oò ó ðð ð6°3ð 6¸4ÀÑ;Nò 6ó ð6ð ð* sð *°ð *¸uð *Èò *ó ð*ð
 ð?Ø #ð?Ø*-ð?Ø8;ð?à	ò?ó ñ?r   r$   c                   ó  — e Zd ZU dZ ej
                  d„ ¬«      Zeee	e   f   e
d<   ede	e   fd„«       Zede	e   fd„«       Zede	e   fd„«       Zede	e   fd	„«       Zede	e   fd
„«       Zdeddfd„Zdd„Zdefd„Zy)rJ   zb
    Return value of serialization and deserialization for the purpose of
    instrumentation
    c                  ó    — t        t        «      S r   )r   Úlistr.   r   r   rH   zCacheInfo.<lambda>t   s	   € ¤¬DÔ 1r   )Údefault_factoryrF   r   c                  ó   — y r   r.   r/   s    r   Úinductor_artifactszCacheInfo.inductor_artifactsx   ó   € àr   c                  ó   — y r   r.   r/   s    r   Úautotune_artifactszCacheInfo.autotune_artifacts|   r[   r   c                  ó   — y r   r.   r/   s    r   Úaot_autograd_artifactsz CacheInfo.aot_autograd_artifacts€   r[   r   c                  ó   — y r   r.   r/   s    r   Úpgo_artifactszCacheInfo.pgo_artifacts„   r[   r   c                  ó   — y r   r.   r/   s    r   Úprecompile_artifactszCacheInfo.precompile_artifactsˆ   r[   r   ÚartifactNc                 óp   — | j                   |j                  «          j                  |j                  «       y r   )rF   r+   Úappendr   )r0   rd   s     r   ÚaddzCacheInfo.addŒ   s#   € Ø�‰�x—}‘}“Ñ'×.Ñ.¨x¯|©|Õ<r   c                 ó8   — | j                   j                  «        y r   )rF   Úclearr/   s    r   ri   zCacheInfo.clear�   s   € Ø�‰×ÑÕr   c                 ó   — | j                    S r   rE   r/   s    r   ÚemptyzCacheInfo.empty’   s   € Ø—>‘>Ð!Ð!r   r4   )r5   r6   r7   r8   r;   r<   rF   r   r9   rW   r:   rK   rZ   r]   r_   ra   rc   r   rg   ri   Úboolrk   r.   r   r   rJ   rJ   l   sñ   … ñð
 .?¨[×->Ñ->Ù1ô.€Iˆ{˜3  S¡	˜>Ñ*ó ð
 ð D¨¡Iò ó ðð ð D¨¡Iò ó ðð ð¨¨S©	ò ó ðð ð˜t C™yò ó ðð ð d¨3¡iò ó ðð=˜Mð =¨dó =óð"�tô "r   rJ   r   r   ztuple[str, list[CacheArtifact]]r   c                 ó¦   — | j                  |d   «       | j                  t        |d   «      «       |d   D ]  }t        j	                  | |«       Œ y )Nr   é   )r   Úwrite_uint64Úlenr   r   )r   r   rd   s      r   Ú_serialize_single_cacherq   –   sJ   € ð ×Ñ�S˜‘VÔØ
×Ñœ˜C ™F›Ô$Ø˜”FˆÜ×Ñ ¨Õ1ñ r   r    c                 ó¸   — g }| j                  «       }| j                  «       }t        |«      D ]'  }|j                  t        j                  || «      «       Œ) ||fS r   )r"   Úread_uint64Úrangerf   r   r&   )r    rF   rG   Únum_artifactsÚ_s        r   Ú_deserialize_single_cacherw   Ÿ   s\   € ð €IØŸ™Ó)ÐØ×&Ñ&Ó(€MÜ�=Ö!ˆØ×Ñœ×2Ñ2Ð3DÀfÓMÕNð "ð ˜iÐ'Ð'r   c            	       óv  — e Zd ZU dZ ee«      Zeed<    e	«       Z
e	e   ed<    ee¬«      Zeeeee   f      ed<    e«       Zeed<   edd	„«       Zeeded
   fd„«       «       Zededededdfd„«       Zedefd„«       Zedeeeef      fd„«       Zededee   fd„«       Z ededefd„«       Z!edd„«       Z"y)ÚCacheArtifactManageraQ  
    Lightweight manager class for collecting and processing cache artifacts for
    hot loading

    Intended Lifecycle:
    - Execute code via torch.compile, this will call
        CacheArtifactManager.record_artifact on each cache artifact
    - Call CacheArtifactManager.serialize to convert all the cache artifacts
        to portable format
    - Call CacheArtifactManager.deserialize to hot load the cache artifacts on
        a potentially different process

    NOTE: There's no FB/FC guarantees, results of cache artifacts will not be
          used unless code version matches.
    Ú_new_cache_artifactsÚ_seen_artifacts©Úserialize_fnÚ_serializerÚ_cache_infor   Nc                 óÔ   — | j                   j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        y r   )rz   ri   r{   r~   r   ©r   s    r   ri   zCacheArtifactManager.clearÌ   sF   € à× Ñ ×&Ñ&Ô(Ø×Ñ×!Ñ!Ô#Ø�‰×ÑÔØ�‰×ÑÕr   )NNNc              #   óž  K  — | j                   }| j                  }| j                  }| j                  }t	        t
        «      | _         t        «       | _        t        t        ¬«      | _        | j                  j                  «       | _        	 d –— || _         || _        || _        || _        y # || _         || _        || _        || _        w xY w­w)Nr|   )
rz   r{   r~   r   r   rW   r   r   rq   Ú	__class__)r   Úoriginal_new_cache_artifactsÚoriginal_seen_artifactsÚoriginal_serializerÚoriginal_cache_infos        r   Úwith_fresh_cachez%CacheArtifactManager.with_fresh_cacheÓ   s´   è ø€ ð (+×'?Ñ'?Ð$Ø"%×"5Ñ"5ÐØ!Ÿo™oÐØ!Ÿo™oÐä#.¬tÓ#4ˆÔ Ü(›lˆÔÜ1Ô?VÔWˆŒØŸ/™/×3Ñ3Ó5ˆŒð	2Ûà'CˆCÔ$Ø"9ˆCÔØ1ˆCŒOØ1ˆC�Oøð (DˆCÔ$Ø"9ˆCÔØ1ˆCŒOØ1ˆC�Oüs   ‚BCÂB, ÂCÂ,C
Ã
Cr   r   r   c                 ó   — t         j                  |||«      }|| j                  v ryt        j	                  dt        |«      «       | j                  |   j                  |«       | j                  j                  |«       y)zg
        Called from each caching operation to record the artifact in this
        "mega" list
        NzRecording %s)	r$   rR   r{   ÚlogÚdebugr9   rz   rf   rg   )r   r   r   r   rd   s        r   Úrecord_artifactz$CacheArtifactManager.record_artifactç   sh   € ô (×5Ñ5°mÀSÈ'ÓRˆØ�s×*Ñ*Ñ*ØÜ�	‰	�.¤# h£-Ô0Ø× Ñ  Ñ/×6Ñ6°xÔ@Ø×Ñ×Ñ Õ)r   c                 ó2   — t        | j                  «      dk7  S )zG
        Have we seen new artifacts since last serialize call?
        r   )rp   rz   r�   s    r   Úneed_serializez#CacheArtifactManager.need_serializeù   s   € ô
 �3×+Ñ+Ó,°Ñ1Ð1r   c                 óF  — t        | j                  j                  «       Ž D ]3  }t        j	                  d|«       | j
                  j                  |«       Œ5 | j
                  j                  «       ry	 t        j                  | j
                  «      }| j                  j                  | j                  j                  «       «       | j                  j                  «       }| j                  j                  «        ||fS # t        $ r t        j!                  dd¬«       Y yw xY w)z?
        Converts the "mega" list into portable format
        z
saving: %sNz Failed to pickle cache artifactsT©Úexc_info)r   rz   ÚvaluesrŠ   r‹   r   rg   rk   ÚcopyÚdeepcopyr~   ÚextendÚitemsÚto_bytesri   Ú	ExceptionÚwarning)r   rd   ÚinfoÚartifact_bytess       r   r   zCacheArtifactManager.serialize   sé   € ô
 ˜s×7Ñ7×>Ñ>Ó@ÓAˆHÜ�I‰I�l HÔ-Ø�O‰O×Ñ Õ)ð Bð �?‰?× Ñ Ô"ð ð		Kô —=‘= §¡Ó1ˆDØ�O‰O×"Ñ" 3×#;Ñ#;×#AÑ#AÓ#CÔDØ Ÿ_™_×5Ñ5Ó7ˆNØ×$Ñ$×*Ñ*Ô,Ø! 4Ð'Ð'øÜò 	KÜ�K‰KÐ:ÀTˆKÕJØð	Kús   Á3B	C= Ã= D ÄD Úserialized_artifactsc                 óÄ   — 	 t         j                  «        t        t        j                  | t
        ¬«      «      }|S # t        $ r t        j                  dd¬«       Y yw xY w)zG
        Converts the portable format back into CacheArtifacts
        )Údeserialize_fnz#Failed to un-pickle cache artifactsTr�   N)	ry   Ú"_ensure_cache_artifacts_registeredrS   r   Úto_listrw   r˜   rŠ   r™   )rœ   rF   s     r   r&   z CacheArtifactManager.deserialize  s^   € ð

	Ü ×CÑCÔEÜÜ'×/Ñ/Ø(Ü#<ôóˆIð Ðøô	 ò 	Ü�K‰KÐ=ÈˆKÔMÙð	ús   ‚8< ¼ AÁArF   c                 ó¾   — t        «       }t        | j                  «       Ž D ]9  }t        j	                  d|«       |j                  |«       |j                  «        Œ; |S )Nzwriting: %s)rJ   r   r’   rŠ   r‹   rg   r1   )rF   rš   rd   s      r   Úpopulate_cachesz$CacheArtifactManager.populate_caches-  sN   € ä‹{ˆÜ˜y×/Ñ/Ó1Ó2ˆHÜ�I‰I�m XÔ.Ø�H‰H�XÔØ×#Ñ#Õ%ð 3ð
 ˆr   c                 ó@   — ddl m} ddlm} ddlm} ddlm} ddlm	} y)zòWhen deserializing caches in fresh process, we need to ensure that all
        cache artifacts are registered in the cache registry. This is done by
        simply importing all the cache artifacts already wrapped with register call.
        r   )ÚPrecompileCacheArtifact)ÚPGOCacheArtifact)ÚAOTAutogradCacheArtifact)ÚInductorCacheArtifact)ÚAutotuneCacheArtifactN)
Útorch._dynamo.packager¤   Útorch._dynamo.pgor¥   Ú-torch._functorch._aot_autograd.autograd_cacher¦   Útorch._inductor.codecacher§   Ú&torch._inductor.runtime.autotune_cacher¨   )r   r¤   r¥   r¦   r§   r¨   s         r   rŸ   z7CacheArtifactManager._ensure_cache_artifacts_registered7  s   € õ 	BÝ6õ	
õ 	Dö	
r   r4   )#r5   r6   r7   r8   r   rW   rz   ÚCacheArtifactsResultr:   r   r{   r   r   rq   r~   Útupler9   rJ   r   rT   ri   r   r   rˆ   r	   rŒ   rl   rŽ   r
   r)   r   r=   r&   r¢   rŸ   r.   r   r   ry   ry   ®   s€  … ññ" 2=¸TÓ1BÐÐ.ÓBñ 2<³€O�Z Ñ.Ó=ñ
 	 Ð-DÔEð Ð(¨¨s°D¸Ñ4GÐ/GÑ)HÑIó ñ '›[€K�Ó(àò ó ð ð Øð2 Ð+;Ñ!<ò 2ó ó ð2ð$ ð*àð*ð ð*ð ð	*ð
 
ò*ó ð*ð" ð2˜tò 2ó ð2ð ð˜( 5¨°	Ð)9Ñ#:Ñ;ò ó ðð2 ð¨%ð °HÐ=QÑ4Rò ó ðð$ ðÐ#7ð ¸Iò ó ðð ò
ó ñ
r   ry   )%r“   r;   ÚloggingÚabcr   r   Úcollectionsr   Úcollections.abcr   Ú
contextlibr   Ú	itertoolsr   Útypingr	   r
   Ú&torch.utils._appending_byte_serializerr   r   r   Útorch.utils._ordered_setr   Ú	getLoggerr5   rŠ   Ú	dataclassr   r$   rJ   rq   rw   rS   r9   rW   r®   ry   r.   r   r   Ú<module>r»      sï   ðÛ Û Û ß #Ý #Ý %Ý %Ý ß  ÷ñ õ
 0ð €g×Ñ˜Ó!€ð €×Ñ˜dÔ#ô%X�Có %Xó $ð%X÷P*?ñ *?ðZ ×Ñ÷&"ð &"ó ð&"ðR2Øð2Ø?ð2à	ó2ð	(Øð	(à&ó	(ð ˜C  mÑ!4Ð4Ñ5Ð ÷W
ò W
r   