ó
    Eñig+  ã                   ó‚  • S SK r S SKrS SKrS SKJrJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJrJr  S SKJrJrJr  S S	KJr  \R.                  " \5      r\R4                  " S
S9 " S S\5      5       r " S S5      r\R4                   " S S5      5       rS\SSSS4S jrS\SS4S jr\ \!\"\   4   r# " S S5      r$g)é    N)ÚABCÚabstractmethod)Údefaultdict)Ú	Generator)Úcontextmanager)Úchain)ÚAnyÚOptional)ÚAppendingByteSerializerÚBytesReaderÚBytesWriter)Ú
OrderedSetT)Úfrozenc                   óÖ   • \ rS rSr% Sr\\S'   \R                  " SS9r	\
\S'   \S\SS S	S
4S j5       r\S\S\S	S 4S j5       r\S\S	\
4S j5       r\SS j5       r\S	\4S j5       rSrg
)ÚCacheArtifacté   zG
Data for each cache artifact that will be serialized and deserialized
ÚkeyF)ÚreprÚcontentÚwriterÚclsÚreturnNc                 óp   • U R                  UR                  5        U R                  UR                  5        g ©N)Ú	write_strr   Úwrite_bytesr   )r   r   s     ÚR/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/compiler/_cache.pyÚ	serializeÚCacheArtifact.serialize   s&   € à×Ñ˜Ÿ™Ô!Ø×Ñ˜3Ÿ;™;Õ'ó    Úartifact_typeÚreaderc                 ón   • UR                  5       nUR                  5       n[        R                  XU5      $ r   )Úread_strÚ
read_bytesÚCacheArtifactFactoryÚcreate)r!   r"   r   r   s       r   ÚdeserializeÚCacheArtifact.deserialize$   s/   € à�o‰oÓˆØ×#Ñ#Ó%ˆÜ#×*Ñ*¨=¸wÓGÐGr    c                 ó^   • [        U [        5      (       d  [        S[        U 5       35      eU $ )NzExpected bytes, got )Ú
isinstanceÚbytesÚAssertionErrorÚtype)r   s    r   ÚencodeÚCacheArtifact.encode*   s+   € ä˜'¤5×)Ñ)Ü Ð#7¼¸W»°Ð!GÓHÐHØˆr    c                 ó   • g r   © ©Úselfs    r   Úpopulate_cacheÚCacheArtifact.populate_cache0   s   € àr    c                  ó   • [        S5      e)zí
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)ÚRuntimeErrorr2   r    r   r.   ÚCacheArtifact.type4   s   € ô ÐVÓWÐWr    r2   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚstrÚ__annotations__ÚdataclassesÚfieldr   r,   Ústaticmethodr   r   r   r(   r	   r/   r   r5   r.   Ú__static_attributes__r2   r    r   r   r      sÌ   ‡ ñð 
ƒHØ ×&Ò&¨EÑ2€GˆUÓ2àð(˜+ð (¨Oð (Àó (ó ð(ð ðH 3ð H°ð HÀó Hó ðHð
 ð˜ð  ó ó ðð
 óó ðð ðX�#ó Xó óXr    r   c            	       óÊ   • \ rS rSr% Sr0 r\\\\	   4   \
S'   \S\\	   S\\	   4S j5       r\S\S\\	   4S j5       r\S\S	\S
\S\	4S j5       r\S\S	\S
\S\	4S j5       rSrg)r&   é?   z@
Factory for creating CacheArtifact objects based on their type
Ú_artifact_typesÚartifact_clsr   c                 óà   ^• UR                  5       mUR                  5       U R                  ;   a  [        ST S35      eXR                  T'   [        [        T S3[        U4S j5      5        U$ )NúArtifact of type=z2 already registered in mega-cache artifact factoryÚ
_artifactsc                 ó"   >• U R                   T   $ r   ©Ú	artifacts)r4   Úartifact_type_keys    €r   Ú<lambda>Ú/CacheArtifactFactory.register.<locals>.<lambda>Q   s   ø€  $§.¡.Ð1BÒ"Cr    )r.   rH   r-   ÚsetattrÚ	CacheInfoÚproperty)r   rI   rP   s     @r   ÚregisterÚCacheArtifactFactory.registerF   s}   ø€ à(×-Ñ-Ó/ÐØ×ÑÓ #×"5Ñ"5Ó5Ü Ø#Ð$5Ð#6Ð6hÐióð ð 2>×ÑÐ-Ñ.ÜÜØ Ð! Ð,ÜÔCÓDô	
ð
 Ðr    rP   c                 ó\   • XR                   ;  a  [        SU S35      eU R                   U   $ )NrK   z. not registered in mega-cache artifact factory)rH   r-   )r   rP   s     r   Ú_get_artifact_typeÚ'CacheArtifactFactory._get_artifact_typeU   s>   € à×$7Ñ$7Ó7Ü Ø#Ð$5Ð#6Ð6dÐeóð ð ×"Ñ"Ð#4Ñ5Ð5r    r   r   c                 ó4   • U R                  U5      nU" X#5      $ r   )rY   ©r   rP   r   r   rI   s        r   r'   ÚCacheArtifactFactory.create]   s   € à×-Ñ-Ð.?Ó@ˆá˜CÓ)Ð)r    c                 óR   • U R                  U5      nU" X$R                  U5      5      $ r   )rY   r/   r\   s        r   Úencode_createÚ"CacheArtifactFactory.encode_createc   s+   € ð ×-Ñ-Ð.?Ó@ˆá˜C×!4Ñ!4°WÓ!=Ó>Ð>r    r2   N)r;   r<   r=   r>   r?   rH   Údictr@   r.   r   rA   ÚclassmethodrV   rY   r,   r'   r	   r_   rE   r2   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                   ó  • \ rS rSr% Sr\R                  " S S9r\\	\
\	   4   \S'   \S\
\	   4S j5       r\S\
\	   4S j5       r\S\
\	   4S	 j5       r\S\
\	   4S
 j5       r\S\
\	   4S j5       rS\SS4S jrSS jrS\4S jrSrg)rT   él   zV
Return value of serialization and deserialization for the purpose of
instrumentation
c                  ó    • [        [        5      $ r   )r   Úlistr2   r    r   rQ   ÚCacheInfo.<lambda>t   s	   € ¤¬DÔ 1r    )Údefault_factoryrO   r   c                 ó   • g r   r2   r3   s    r   Úinductor_artifactsÚCacheInfo.inductor_artifactsx   ó   € àr    c                 ó   • g r   r2   r3   s    r   Úautotune_artifactsÚCacheInfo.autotune_artifacts|   rl   r    c                 ó   • g r   r2   r3   s    r   Úaot_autograd_artifactsÚ CacheInfo.aot_autograd_artifacts€   rl   r    c                 ó   • g r   r2   r3   s    r   Úpgo_artifactsÚCacheInfo.pgo_artifacts„   rl   r    c                 ó   • g r   r2   r3   s    r   Úprecompile_artifactsÚCacheInfo.precompile_artifactsˆ   rl   r    ÚartifactNc                 óp   • U R                   UR                  5          R                  UR                  5        g r   )rO   r.   Úappendr   )r4   ry   s     r   ÚaddÚCacheInfo.addŒ   s#   € Ø�‰�x—}‘}“Ñ'×.Ñ.¨x¯|©|Õ<r    c                 ó8   • U R                   R                  5         g r   )rO   Úclearr3   s    r   r   ÚCacheInfo.clear�   s   € Ø�‰×ÑÕr    c                 ó$   • U R                   (       + $ r   rN   r3   s    r   ÚemptyÚCacheInfo.empty’   s   € Ø—>‘>Ô!Ð!r    r2   r:   )r;   r<   r=   r>   r?   rB   rC   rO   r   r@   rf   rA   rU   rj   rn   rq   rt   rw   r   r|   r   Úboolr‚   rE   r2   r    r   rT   rT   l   sï   ‡ ñð
 .9×->Ò->Ù1ñ.€Iˆ{˜3  S¡	˜>Ñ*ó ð
 ð D¨¡Ió ó ðð ð D¨¡Ió ó ðð ð¨¨S©	ó ó ðð ð˜t C™yó ó ðð ð d¨3¡ió ó ðð=˜Mð =¨dô =ôð"�t÷ "r    rT   r   r   ztuple[str, list[CacheArtifact]]r   c                 ó¨   • U R                  US   5        U R                  [        US   5      5        US    H  n[        R	                  X5        M     g )Nr   é   )r   Úwrite_uint64Úlenr   r   )r   r   ry   s      r   Ú_serialize_single_cacher‰   –   sH   € ð ×Ñ�S˜‘VÔØ
×Ñœ˜C ™F›Ô$Ø˜”FˆÜ×Ñ Ö1ò r    r"   c                 ó¸   • / nU R                  5       nU R                  5       n[        U5       H'  nUR                  [        R                  X 5      5        M)     X!4$ r   )r$   Úread_uint64Úranger{   r   r(   )r"   rO   rP   Únum_artifactsÚ_s        r   Ú_deserialize_single_cacher�   Ÿ   sX   € ð €IØŸ™Ó)ÐØ×&Ñ&Ó(€MÜ�=Ö!ˆØ×Ñœ×2Ñ2Ð3DÓMÖNñ "ð Ð'Ð'r    c            	       óˆ  • \ rS rSr% Sr\" \5      r\\	S'   \
" 5       r\
\   \	S'   \" \S9r\\\\\   4      \	S'   \" 5       r\\	S'   \SS
 j5       r\\S\S   4S j5       5       r\S\S\S\SS	4S j5       r\S\4S j5       r\S\\\\4      4S j5       r\ S\S\\   4S j5       r!\ S\S\4S j5       r"\SS j5       r#Sr$g	)ÚCacheArtifactManageré®   a!  
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                 óÔ   • U R                   R                  5         U R                  R                  5         U R                  R                  5         U R                  R                  5         g r   )r“   r   r”   r—   r˜   ©r   s    r   r   ÚCacheArtifactManager.clearÌ   sF   € à× Ñ ×&Ñ&Ô(Ø×Ñ×!Ñ!Ô#Ø�‰×ÑÔØ�‰×ÑÕr    )NNNc              #   óˆ  #   • U R                   nU R                  nU R                  nU R                  n[	        [
        5      U l         [        5       U l        [        [        S9U l        U R                  R                  5       U l         S v •  Xl         X l        X0l        X@l        g ! Xl         X l        X0l        X@l        f = f7f)Nr•   )
r“   r”   r—   r˜   r   rf   r   r   r‰   Ú	__class__)r   Úoriginal_new_cache_artifactsÚoriginal_seen_artifactsÚoriginal_serializerÚoriginal_cache_infos        r   Úwith_fresh_cacheÚ%CacheArtifactManager.with_fresh_cacheÓ   s£   é € ð (+×'?Ñ'?Ð$Ø"%×"5Ñ"5ÐØ!Ÿo™oÐØ!Ÿo™oÐä#.¬tÓ#4ˆÔ Ü(›lˆÔÜ1Ô?VÑWˆŒØŸ/™/×3Ñ3Ó5ˆŒð	2Ûà'CÔ$Ø"9ÔØ1ŒOØ1�Oøð (DÔ$Ø"9ÔØ1ŒOØ1�Oüs   ‚BCÂB% ÂCÂ%B?Â?Cr!   r   r   c                 ó   • [         R                  XU5      nX@R                  ;   a  g[        R	                  S[        U5      5        U R                  U   R                  U5        U R                  R                  U5        g)zO
Called from each caching operation to record the artifact in this
"mega" list
NzRecording %s)	r&   r_   r”   ÚlogÚdebugr@   r“   r{   r|   )r   r!   r   r   ry   s        r   Úrecord_artifactÚ$CacheArtifactManager.record_artifactç   sd   € ô (×5Ñ5°mÈ'ÓRˆØ×*Ñ*Ó*ØÜ�	‰	�.¤# h£-Ô0Ø× Ñ  Ñ/×6Ñ6°xÔ@Ø×Ñ×Ñ Õ)r    c                 ó2   • [        U R                  5      S:g  $ )z7
Have we seen new artifacts since last serialize call?
r   )rˆ   r“   rš   s    r   Úneed_serializeÚ#CacheArtifactManager.need_serializeù   s   € ô
 �3×+Ñ+Ó,°Ñ1Ð1r    c                 óP  • [        U R                  R                  5       6  H4  n[        R	                  SU5        U R
                  R                  U5        M6     U R
                  R                  5       (       a  g [        R                  " U R
                  5      nU R                  R                  U R                  R                  5       5        U R                  R                  5       nU R                  R                  5         X24$ ! [         a    [        R!                  SSS9   gf = f)z/
Converts the "mega" list into portable format
z
saving: %sNz Failed to pickle cache artifactsT©Úexc_info)r   r“   Úvaluesr¥   r¦   r˜   r|   r‚   ÚcopyÚdeepcopyr—   ÚextendÚitemsÚto_bytesr   Ú	ExceptionÚwarning)r   ry   ÚinfoÚartifact_bytess       r   r   Ú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Ø×$Ñ$×*Ñ*Ô,Ø!Ð'Ð'øÜó 	KÜ�K‰KÐ:ÀTˆKÒJØð	Kús   Á:B	D ÄD%Ä$D%Úserialized_artifactsc                 ó¼   •  [         R                  5         [        [        R                  " U [
        S95      nU$ ! [         a    [        R                  SSS9   gf = f)z7
Converts the portable format back into CacheArtifacts
)Údeserialize_fnz#Failed to un-pickle cache artifactsTr­   N)	r‘   Ú"_ensure_cache_artifacts_registeredra   r   Úto_listr�   rµ   r¥   r¶   )rº   rO   s     r   r(   Ú CacheArtifactManager.deserialize  s^   € ð

	Ü ×CÑCÔEÜÜ'×/Ò/Ø(Ü#<ñóˆIð Ðøô	 ó 	Ü�K‰KÐ=ÈˆKÑMÙð	ús   ‚6: ºAÁArO   c                 óÂ   • [        5       n[        U R                  5       6  H:  n[        R	                  SU5        UR                  U5        UR                  5         M<     U$ )Nzwriting: %s)rT   r   r¯   r¥   r¦   r|   r5   )rO   r·   ry   s      r   Úpopulate_cachesÚ$CacheArtifactManager.populate_caches-  sN   € ä‹{ˆÜ˜y×/Ñ/Ó1Ó2ˆHÜ�I‰I�m XÔ.Ø�H‰H�XÔØ×#Ñ#Ö%ñ 3ð
 ˆr    c                 ó@   • SSK Jn  SSKJn  SSKJn  SSKJn  SSKJ	n  g)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½   Ú7CacheArtifactManager._ensure_cache_artifacts_registered7  s   € õ 	BÝ6õ	
õ 	Dö	
r    r2   r:   )%r;   r<   r=   r>   r?   r   rf   r“   ÚCacheArtifactsResultrA   r   r”   r   r   r‰   r—   Útupler@   rT   r˜   rb   r   r   r   r¢   r	   r§   r„   rª   r
   r,   r   rD   r(   rÁ   r½   rE   r2   r    r   r‘   r‘   ®   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    r‘   )%r°   rB   ÚloggingÚabcr   r   Úcollectionsr   Úcollections.abcr   Ú
contextlibr   Ú	itertoolsr   Útypingr	   r
   Ú&torch.utils._appending_byte_serializerr   r   r   Útorch.utils._ordered_setr   Ú	getLoggerr;   r¥   Ú	dataclassr   r&   rT   r‰   r�   ra   r@   rf   rÏ   r‘   r2   r    r   Ú<module>rÜ      së   ðÛ Û Û ß #Ý #Ý %Ý %Ý ß  ÷ñ õ
 0ð ×Ò˜Ó!€ð ×Ò˜dÑ#ô%X�Có %Xó $ð%X÷P*?ñ *?ðZ ×Ñ÷&"ð &"ó ð&"ðR2Øð2Ø?ð2à	ô2ð	(Øð	(à&ô	(ð ˜C  mÑ!4Ð4Ñ5Ð ÷W
ò W
r    