Ë
    òÍ:j�}  ã                  ó
  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZmZmZmZ ddlmZmZ ddlZddlZddlZddlmZ ddlmZm Z m!Z!m"Z" ddl#m$Z$ dd	l%m&Z& dd
l'm(Z(m)Z)m*Z* ddl+m,Z, erddl-Z-ddl.m/Z/ ddl0m1Z1m2Z2  G d„ de3«      Z4 ejj                  e6«      Z7dZ8ejr                  d7d„«       Z: ejv                  d¬«       G d„ d«      «       Z<ejv                   G d„ d«      «       Z=da>de?d<   da@de?d<    ejv                  d¬«       G d„ d«      «       ZA ed«      ZB G d„ dej†                  «      ZDeDjŠ                  ZF G d „ d!ej†                  «      ZGeGjŠ                  ZHejv                   G d"„ d#«      «       ZId$d%œ	 	 	 	 	 	 	 	 	 d8d&„ZJd$d%œ	 	 	 	 	 	 	 	 	 d8d'„ZKd9d(„ZLd:d)„ZMd;d*„ZNd<d+„ZOd=d,„ZPd>d-„ZQd?d.„ZRe)j¦                   G d/„ d0e(«      «       ZTd@d1„ZUdAd2„ZVdBd3„ZWdCd4„ZXdCd5„ZYdAd6„ZZy)Da  
Profile Guided Optimization (PGO) implementation for Dynamo.

This module provides functionality for caching and managing code state profiles
that guide optimization decisions in Dynamo. It implements both local and remote
caching mechanisms for storing profile information across runs, handles profile
merging across distributed ranks, and manages the lifecycle of profile data
during compilation. The profiles track dynamic vs static properties of tensors
and help Dynamo make better specialization decisions.
é    )ÚannotationsN)Údefaultdict)ÚOptionalÚTYPE_CHECKINGÚTypeVarÚUnion)ÚoverrideÚSelf)ÚCompileEventLoggerÚdynamo_timedÚset_feature_useÚ	warn_once)Ú	is_fbcode)Útrace_structured_artifact)ÚCacheArtifactÚCacheArtifactFactoryÚCacheArtifactManager)Ú
OrderedSet)ÚInstructionTranslator)Ú
JsonDataTyÚRemoteCachec                  ó   — e Zd Zy)ÚReservedWorkflowIdUserErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úf/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torch/_dynamo/pgo.pyr   r   7   s   „ Ør   r   é
   c                óô   — t         j                  j                  | «      s| S t        | d«      5 }|j	                  «       }t        j                  |«      }t        |dz  d«      }|cd d d «       S # 1 sw Y   y xY w)NÚrbl   ÿÿ Ú08x)ÚosÚpathÚexistsÚopenÚreadÚzlibÚcrc32Úformat)ÚfilepathÚfileÚcontentÚcrc32_valueÚhashs        r   Ú_hash_containing_filer1   r   sg   € ô �7‰7�>‰>˜(Ô#Øˆä	ˆh˜Ó	ð  Ø—)‘)“+ˆÜ—j‘j Ó)ˆÜ�k JÑ.°Ó6ˆØ÷	÷ ò ús   ®6A.Á.A7T)Úfrozenc                  ó`   — e Zd ZU ded<   ded<   ded<   ded<   dd„Zdd„Zdd	„Zedd
„«       Zy)ÚCodeIdÚstrÚfilenameÚintÚfirstlinenoÚnameÚ	file_hashc                óÂ   — t        |t        «      sy| j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S )NF)Ú
isinstancer4   r:   r8   r9   ©ÚselfÚothers     r   Ú__eq__zCodeId.__eq__�   sR   € Ü˜%¤Ô(Øà�N‰N˜eŸo™oÑ-ò (Ø× Ñ  E×$5Ñ$5Ñ5ò(à—	‘	˜UŸZ™ZÑ'ð	
r   c                óZ   — t        | j                  | j                  | j                  f«      S ©N)r0   r:   r9   r8   ©r>   s    r   Ú__hash__zCodeId.__hash__—   s"   € Ü�T—^‘^ T§Y¡Y°×0@Ñ0@ÐAÓBÐBr   c                ón   — d| j                   › d| j                  › d| j                  › d| j                  › �S )Nzhash(ú)ú:)r:   r6   r8   r9   rC   s    r   Ú__str__zCodeId.__str__š   s5   € Ø�t—~‘~Ð& a¨¯© °a¸×8HÑ8HÐ7IÈÈ4Ï9É9È+ÐVÐVr   c                ó€   — t        | j                  | j                  | j                  t	        | j                  «      «      S rB   )r4   Úco_filenameÚco_firstlinenoÚco_namer1   )Úcodes    r   ÚmakezCodeId.make�   s6   € äØ×ÑØ×ÑØ�L‰LÜ! $×"2Ñ"2Ó3ó	
ð 	
r   N)r?   ÚobjectÚreturnÚbool)rP   r7   ©rP   r5   )rM   útypes.CodeTyperP   r4   )	r   r   r   Ú__annotations__r@   rD   rH   ÚstaticmethodrN   r   r   r   r4   r4      s>   … àƒMØÓØ
ƒIð ƒNó
óCóWð ò
ó ñ
r   r4   c                  ó@   — e Zd ZU  ej                  d„ ¬«      Zded<   y)Ú	CodeStatec                 ó    — t        t        «      S rB   )r   ÚFrameStateSizeEntryr   r   r   ú<lambda>zCodeState.<lambda>ª   s   € ¤Ô,?Ó @€ r   )Údefault_factoryz%defaultdict[str, FrameStateSizeEntry]Úautomatic_dynamicN)r   r   r   ÚdataclassesÚfieldr\   rT   r   r   r   rW   rW   §   s!   … à?P¸{×?PÑ?PÙ@ô@ÐÐ<ô r   rW   z(Optional[defaultdict[CodeId, CodeState]]Ú_INIT_CODE_STATEÚ_CODE_STATEc                  ó   — e Zd ZU dZded<   y)ÚInferStrideaX  
    Denotes the quantity stride[dim] * size[dim], which is what the stride would
    be for the next physical dimension that results in a contiguous layout.

    For example, given size = [2, 3], stride = [3, 1], we can replace this with
    stride = [InferStride(1), 1], because InferStride(1) = stride[1] * size[1] = 1 * 3 = 3

    Indirecting the representation in this way is important for the join operation
    on strides as if we join [2, 3][3, 1] and [2, 4][4, 1],
    we don't want [2, None][None, 1] which would get eventually symbolized into
    [2, s0][s1, 1] (notice that the relationship between s0 and s1 is broken).
    If we instead rewrite the expressions as InferStride so we have [2, 3][InferStride(1), 1]
    and [2, 4][InferStride(1), 1] we now join to [2, None][InferStride(1), 1] will
    result in [2, s0][s0, 1], as desired.
    r7   ÚdimN)r   r   r   Ú__doc__rT   r   r   r   rb   rb   ²   s   … ñð  
„Hr   rb   Ú_Tc                  ó   — e Zd ZdZdZy)Ú	AutoUnsetz‹
    The identity element of our semilattice, a generic "don't know" element that
    is always subsumed when we get more information.
    r   N©r   r   r   rd   Útokenr   r   r   rg   rg   Ê   ó   „ ñð
 �Er   rg   c                  ó   — e Zd ZdZdZy)ÚAutoDynamicz‚
    The top element of our (bounded) semilattice, whenever you merge this with
    any other element you always get it again
    r   Nrh   r   r   r   rl   rl   Ö   rj   r   rl   c                  óJ  — e Zd ZU  ej                  e¬«      Zded<    ej                  e¬«      Zded<    ej                  e¬«      Z	ded<   dd„Z
dd	„Zdd
„Zdd„Zedd„«       Zedd„«       Ze	 	 	 	 	 	 dd„«       Zedd„«       Zedd„«       Ze	 	 	 	 	 	 dd„«       Zdd„Zy)rY   )Údefaultz"Union[int, AutoDynamic, AutoUnset]ÚscalarzBUnion[AutoDynamic, AutoUnset, tuple[Union[int, AutoDynamic], ...]]ÚsizezOUnion[AutoDynamic, AutoUnset, tuple[Union[int, AutoDynamic, InferStride], ...]]Ústridec                ó‚  ‡— dd„Šd	ˆfd„}| j                   t        u r4| j                  t        u r"| j                  t        u ryd| j                  › �S | j                  t        u r\t	        | j                   t
        «      rBt	        | j                  t
        «      r(d || j                   «      › d || j                  «      › �S y)
Nc                ó|   — | t         u ry| t        u ryt        | t        «      rd| j                  › d�S t        | «      S )Nú?z
auto unsetzS(rF   )Úauto_dynamicÚ
auto_unsetr<   rb   rc   r5   )Úss    r   Úrender_singlez1FrameStateSizeEntry.render.<locals>.render_singleð   s<   € Ø”LÑ ØØ”j‘à#Ü˜Aœ{Ô+Ø˜AŸE™E˜7 !�}Ð$ä˜1“v�r   c                óD   •— ddj                  ˆfd„| D «       «      z   dz   S )Nú[z, c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wrB   r   )Ú.0rw   rx   s     €r   ú	<genexpr>zCFrameStateSizeEntry.render.<locals>.render_tuple.<locals>.<genexpr>ü   s   øè ø€ Ò"@¸¡=°×#3Ñ"@ùs   ƒú])Újoin)Ússrx   s    €r   Úrender_tuplez0FrameStateSizeEntry.render.<locals>.render_tupleû   s"   ø€ Ø˜Ÿ™Ó"@¸RÔ"@Ó@Ñ@À3ÑFÐFr   zfully dynamic scalar or tensorzscalar ztensor size=z stride=zunusual {repr(self)})rw   z/Union[int, AutoDynamic, AutoUnset, InferStride]rP   r5   )r€   z0tuple[Union[int, AutoDynamic, InferStride], ...]rP   r5   )rp   ru   rq   ro   r<   Útuple)r>   r�   rx   s     @r   ÚrenderzFrameStateSizeEntry.renderî   s�   ø€ ó		õ	Gð �9‰9œÑ$¨¯©¼Ñ)DØ�{‰{œlÑ*Ø7à  §¡ Ð.Ð.Ø�[‰[œLÑ(Ü˜$Ÿ)™)¤UÔ+´
¸4¿;¹;ÌÔ0NØ%¡l°4·9±9Ó&=Ð%>¸hÁ|ÐTX×T_ÑT_ÓG`ÐFaÐbÐbð &r   c                ó   — t        | j                  t        j                  «      rJ | j                  «       ‚t        | j                  t
        «      r2| j                  D ]#  }t        |t        j                  «      sŒJ |«       ‚ t        | j                  t
        «      r3| j                  D ]#  }t        |t        j                  «      sŒJ |«       ‚ y y rB   )r<   ro   ÚtorchÚSymIntrp   r‚   rq   )r>   rw   Ús1s      r   Ú__post_init__z!FrameStateSizeEntry.__post_init__  sœ   € Ü˜dŸk™k¬5¯<©<Ô8ÐE¸$¿+¹+ÓEÐ8Ü�d—i‘i¤Ô'Ø—Y‘Yò :�Ü% a¬¯©Õ6Ð9¸Ó9Ð6ð:ä�d—k‘k¤5Ô)Ø—k‘kò <�Ü% b¬%¯,©,Õ7Ð;¸Ó;Ð7ñ<ð *r   c                óx   — | j                   t        u ry| j                   t        u ry| j                   |   t        u S )NTF)rp   ru   rv   ©r>   rc   s     r   Úis_size_dynamicz#FrameStateSizeEntry.is_size_dynamic  s3   € Ø�9‰9œÑ$ØØ�9‰9œ
Ñ"ØØ�y‰y˜‰~¤Ð-Ð-r   c                óæ   — t        | j                  t        «      rt        d„ | j                  D «       «      sy| j                  t
        u ry| j                  t        u ry| j                  |   t
        u S )Nc              3  ó>   K  — | ]  }t        |«      t        u –— Œ y ­wrB   )Útyper7   )r|   rw   s     r   r}   z8FrameStateSizeEntry.is_stride_dynamic.<locals>.<genexpr>,  s   è ø€ Ò0SÀA´°a³¼C´Ñ0Sùs   ‚FT)r<   rp   r‚   Úallrq   ru   rv   rŠ   s     r   Úis_stride_dynamicz%FrameStateSizeEntry.is_stride_dynamic  sX   € ô" �t—y‘y¤%Ô(¬SÑ0SÈÏÉÔ0SÔ-SàØ�;‰;œ,Ñ&ØØ�;‰;œ*Ñ$ØØ�{‰{˜3Ñ¤<Ð/Ð/r   c                ó&   — t        d„ | D «       «      S )Nc              3  ó`   K  — | ]&  }t        |t        j                  «      rt        n|–— Œ( y ­wrB   )r<   r…   r†   ru   )r|   Úxs     r   r}   z4FrameStateSizeEntry._munge_symint.<locals>.<genexpr>7  s"   è ø€ ÒTÈA¤Z°´5·<±<Ô%@•\ÀaÓGÑTùs   ‚,.)r‚   )Úxss    r   Ú_munge_symintz!FrameStateSizeEntry._munge_symint5  s   € äÑTÐQSÔTÓTÐTr   c                ó.   — t        |t        t        ¬«      S ©N)ro   rp   rq   )rY   ru   )Úclsr“   s     r   Úmake_scalarzFrameStateSizeEntry.make_scalar9  s   € ä"¨!´,Ä|ÔTÐTr   c                ób   — t        t        | j                  |«      | j                  |«      ¬«      S r—   )rY   ru   r•   )r˜   rp   rq   s      r   Úmake_tensorzFrameStateSizeEntry.make_tensor=  s0   € ô #ÜØ×"Ñ" 4Ó(Ø×$Ñ$ VÓ,ô
ð 	
r   c                óL   — t        t        | j                  |«      t        ¬«      S r—   )rY   rv   r•   )r˜   rp   s     r   Ú	make_sizezFrameStateSizeEntry.make_sizeG  s#   € ä"ÜØ×"Ñ" 4Ó(Üô
ð 	
r   c                ód   — | t         u r|S |t         u r| S | t        u s|t        u s| |k7  rt        S | S rB   )rv   ru   )r“   Úys     r   Ú_merge_atomzFrameStateSizeEntry._merge_atomO  s:   € à”
‰?ØˆHØ”
‰?ØˆHØ”Ñ ¤\Ñ 1°Q¸!²VÜÐØˆr   c                óÎ   ‡ — |t         u r|S |t         u r|S |t        u s|t        u rt        S t        |«      t        |«      k7  rt        S t        ˆ fd„t	        ||«      D «       «      S )Nc              3  óH   •K  — | ]  \  }}‰j                  ||«      –— Œ y ­wrB   )r    )r|   r“   rŸ   r˜   s      €r   r}   z6FrameStateSizeEntry._merge_atom_tup.<locals>.<genexpr>g  s    øè ø€ ÒC©t¨q°!�S—_‘_ Q¨×*ÑCùs   ƒ")rv   ru   Úlenr‚   Úzip)r˜   r”   Úyss   `  r   Ú_merge_atom_tupz#FrameStateSizeEntry._merge_atom_tupY  sa   ø€ ð ”ÑØˆIØ”ÑØˆIØ”Ñ ¤|Ñ!3ÜÐÜˆr‹7”c˜"“gÒÜÐÜÓC´s¸2¸r³{ÔCÓCÐCr   c                ó  — | j                  | j                  |j                  «      | _        | j                  | j                  |j                  «      | _        | j                  | j                  |j                  «      | _        | S rB   )r    ro   r¦   rp   rq   r=   s     r   Ú__ior__zFrameStateSizeEntry.__ior__i  s[   € Ø×&Ñ& t§{¡{°E·L±LÓAˆŒØ×(Ñ(¨¯©°E·J±JÓ?ˆŒ	Ø×*Ñ*¨4¯;©;¸¿¹ÓEˆŒØˆr   NrR   ©rP   ÚNone)rc   r7   rP   rQ   )r”   útuple[int, ...]rP   z#tuple[Union[AutoDynamic, int], ...])r“   r7   rP   rY   )rp   r«   rq   r«   rP   rY   )rp   r«   rP   rY   )r“   re   rŸ   re   rP   zUnion[AutoDynamic, _T])r”   ú-Union[AutoDynamic, AutoUnset, tuple[_T, ...]]r¥   r¬   rP   zAUnion[AutoDynamic, AutoUnset, tuple[Union[AutoDynamic, _T], ...]])r?   r
   rP   r
   )r   r   r   r]   r^   rv   ro   rT   rp   rq   rƒ   rˆ   r‹   r�   rU   r•   Úclassmethodr™   r›   r�   r    r¦   r¨   r   r   r   rY   rY   â   s)  … à1B°×1BÑ1BÈ:Ô1V€FÐ.ÓVð 	ˆ×Ñ *Ô-ð 	Ð
Ló ð
 	ˆ×Ñ *Ô-ð ð ó .ó&ó:<ó.ó0ð4 òUó ðUð òUó ðUð ð
Ø"ð
Ø,;ð
à	ò
ó ð
ð ò
ó ð
ð òó ðð ðDà9ðDð :ðDð 
Kò	Dó ðDôr   rY   F©Úis_unspecialized_nn_modulec          
     ó¬  ‡‡‡
— t         j                  | j                  «      }t        «       |   }t        j
                  j                  j                  �r³‰|j                  v }|j                  ‰   }t        j                  |«      Š
|‰z  }|rŸ‰
j                  |j                  k7  r†t        j                  d‰‰j                  ‰
j                  «       t        j                  d‰ddt        ‰
j                  «      t        ‰j                  «      dœ«       |rt        j!                  d‰«       	 d	 	 	 	 	 	 	 	 	 dˆˆˆ
fd„}|rà‰
j"                  |j"                  k7  rÇt%        ‰
j"                  t&        «      r£t%        ‰j"                  t&        «      r‰t)        ‰
j"                  «      t)        ‰j"                  «      k7  r |dd	d
«       n]t+        t)        ‰j"                  «      «      D ]1  }	‰
j"                  |	   ‰j"                  |	   k7  sŒ# |dd|	› d�d|	«       Œ3 n
 |ddd«       |râ‰
j,                  |j,                  k7  rÉt%        ‰
j,                  t&        «      r¥t%        ‰j,                  t&        «      r‹t)        ‰
j,                  «      t)        ‰j,                  «      k7  r |dd	d
«       |S t+        t)        ‰j,                  «      «      D ]1  }	‰
j,                  |	   ‰j,                  |	   k7  sŒ# |dd|	› d�d|	«       Œ3 |S  |ddd«       |S |j                  ‰   Š
t        j                  d‰‰
j                  ‰j                  «       ‰|j                  ‰<   ‰}|S )Nz%automatic dynamic int %s val %s != %sr\   ro   zscalar change©r9   Údim_changedÚreasonÚcachedÚnewz¼%s is converted to a symbolic integer. It is an attribute of a user defined nn module class. If you wish to keep it static, you can mark the nn module class as `torch._dynamo.mark_static`.c           
     ó  •— |€t        ‰| «      nt        ‰| «      |   }|€t        ‰| «      nt        ‰| «      |   }t        j                  d| ‰|||«       t        j                  d‰|€dn||t        |«      t        |«      dœ«       y )Nz#automatic dynamic %s %s %s %s != %sr\   r�   r±   )ÚgetattrÚlogÚdebugr   Úinstantr5   )	Útup_nameÚshort_reasonÚlong_reasonÚiÚ	entry_tupÚold_entry_tupÚentryr9   Ú	old_entrys	         €€€r   Úlog_tupz)update_automatic_dynamic.<locals>.log_tupš  s¤   ø€ ð -.¨I”˜˜xÔ(¼7À5È(Ó;SÐTUÑ;Vð ð
 �9ô ˜	 8Ô,ä˜Y¨Ó1°!Ñ4ð ô
 �I‰IØ5ØØØàØôô ×&Ñ&Ø#à Ø,-¨I¡5¸1Ø)Ü! -Ó0Ü˜y›>ñõ	r   rp   rc   zdimensionality changezsize(rF   zsize changer?   rq   zstride(zstride changez9automatic dynamic is off, overwriting int %s val %s -> %srB   )
r»   r5   r¼   r5   r½   r5   r¾   zOptional[int]rP   rª   )r4   rN   Úf_codeÚget_code_stater…   Ú_dynamoÚconfigÚautomatic_dynamic_shapesr\   Úcopyro   r¸   r¹   r   rº   r5   Úinforp   r<   r‚   r£   Úrangerq   )Útxr9   rÁ   r¯   Úcode_idÚframe_stateÚ	is_updateÚ	mut_entryrÃ   r¾   rÂ   s    ``       @r   Úupdate_automatic_dynamicrÑ   p  s
  ú€ ô �k‰k˜"Ÿ)™)Ó$€GÜ Ó" 7Ñ+€KÜ‡}�}×Ñ×4Ó4Ø˜K×9Ñ9Ð9ˆ	Ø×1Ñ1°$Ñ7ˆ	Ü—I‘I˜iÓ(ˆ	Ø�UÑˆ	ñ ˜×)Ñ)¨Y×-=Ñ-=Ò=Ü�I‰IØ7ØØ—‘Ø× Ñ ô	ô ×&Ñ&Ø#à Ø#+Ø-Ü! )×"2Ñ"2Ó3Ü˜uŸ|™|Ó,ñô	ñ *Ü—‘ðOð ô	ð TXð	Øð	Ø),ð	Ø;>ð	ØCPð	à÷	ñ> ˜Ÿ™¨9¯>©>Ò9Ü˜)Ÿ.™.¬%Ô0´ZÀÇ
Á
ÌEÔ5RÜ�y—~‘~Ó&¬#¨e¯j©j«/Ò9Ù˜F EÐ+BÕCä"¤3 u§z¡z£?Ó3ò L˜Ø$Ÿ>™>¨!Ñ,°·
±
¸1±Ó=Ù# F¨e°A°3°a¨L¸-ÈÕKñLñ ˜ ¨Ô1á˜×)Ñ)¨Y×-=Ñ-=Ò=Ü˜)×*Ñ*¬EÔ2´zÀ%Ç,Á,ÔPUÔ7VÜ�y×'Ñ'Ó(¬C°·±Ó,=Ò=Ù˜H eÐ-DÔEð$ Ðô! #¤3 u§|¡|Ó#4Ó5ò R˜Ø$×+Ñ+¨AÑ.°%·,±,¸q±/ÓAÙ# H°¸°s¸!¨n¸oÈqÕQðRð  Ðñ ˜ '¨7Ô3ð Ðð  ×1Ñ1°$Ñ7ˆ	Ü�	‰	ØGØØ×ÑØ�L‰Lô		
ð /4ˆ×%Ñ% dÑ+Øˆ	àÐr   c               ó  — | j                   x}€t        | |||¬«      S |j                  €||j                  j                  |<   |S d }|j                  D ]-  }||j                  v sŒt        | ||j                  |   |¬«      }Œ/ |€J ‚|S )Nr®   )Údistributed_staterÑ   Ú
all_statesÚlocal_stater\   )rÌ   r9   rÁ   r¯   ÚstÚresÚ	sub_states          r   Úprocess_automatic_dynamicrÙ   Ü  s¯   € ð ×"Ñ"Ð"ˆÐ+Ü'ØØØØ'Aô	
ð 	
ð 
�‰Ð	ð 27ˆ�‰×(Ñ(¨Ñ.Øˆð ˆØŸ™ò 	ˆIØ�y×2Ñ2Ò2Ü.ØØØ×/Ñ/°Ñ5Ø/Iô	‘ð	ð ˆÐˆØˆ
r   c                 ó&  — t         j                  j                  j                  rt	        d«       y d } t        j                  «       r(t        j                  «       rt        j                  «       } t         j                  j                  j                  }t         j                  j                  j                  x}�&|j                  d«      rt        d«      ‚|› d| › d|› �S t         j                  j                  «       x}�|\  }}d|› d|› d| › d|› �S y )NzHdynamo_pgo force disabled by torch._inductor.config.force_disable_cachesúmast:z•torch.compiler.config.job_id with prefix 'mast:' is reserved for automatically generated job id associated with a specific MAST job name and version.rG   )r…   Ú	_inductorrÇ   Úforce_disable_cachesr   ÚdistÚis_availableÚis_initializedÚget_rankÚcompilerÚcache_key_tagÚjob_idÚ
startswithr   Ú_utils_internalÚget_mast_job_name_version)ÚrankÚtagÚrÚname_versionÚmast_job_nameÚmast_job_versions         r   Úget_cache_keyrî   
  s   € ä‡�×Ñ×2Ò2ÜØVô	
ð ð €DÜ×ÑÔœt×2Ñ2Ô4Ü�}‰}‹ˆä
�.‰.×
Ñ
×
-Ñ
-€Cô �^‰^×"Ñ"×)Ñ)Ð)ˆÐ6Ø�<‰<˜Ô Ü-ð$óð ð
 ��A�d�V˜1˜S˜EÐ"Ð"ä×-Ñ-×GÑGÓIÐIˆÐVØ*6Ñ'ˆÐ'Ø�}�o QÐ'7Ð&8¸¸$¸¸qÀÀÐFÐFàr   c                ó  — t         j                  j                  j                  st        j                  d«       y ddlm} t        j                  ddd| › d�«      }t        j                  j                   |«       d|«      S )	Nz'automatic_dynamic_local_pgo not enabledr   )Ú	cache_dirz[<>:"/\\|?*]Ú_Úcode_state_z.pklÚdynamo)r…   rÆ   rÇ   Úautomatic_dynamic_local_pgor¸   r¹   Ú%torch._inductor.runtime.runtime_utilsrð   ÚreÚsubr$   r%   r   )Ú	cache_keyrð   Úcode_state_keys      r   Úcode_state_pathrú   -  s\   € Ü�=‰=×Ñ×;Ò;Ü�	‰	Ð;Ô<Øå?ä—V‘V˜O¨S°KÀ	¸{È$Ð2OÓP€NÜ�7‰7�<‰<™	› X¨~Ó>Ð>r   c                 ó`  — t         j                  j                  j                  ryt         j                  j                  j
                  x} �| S t        «       syt         j                  j                  «       ry	 ddl	m
} |t         j                  j                  d«      k\  S # t        $ r Y yw xY w)NFr   )ÚREMOTE_CACHE_VERSIONz'pytorch/remote_cache:dynamo_pgo_version)r…   rÜ   rÇ   rÝ   rÆ   Úautomatic_dynamic_remote_pgor   ræ   Úis_fb_unit_testÚtorch._inductor.fb.remote_cacherü   ÚModuleNotFoundErrorÚjustknobs_getval_int)rê   rü   s     r   Ú"should_use_remote_dynamo_pgo_cacher  8  s–   € Ü‡�×Ñ×2Ò2Øä�]‰]×!Ñ!×>Ñ>Ð>ˆÐKØˆäŒ;Øä×Ñ×,Ñ,Ô.ØðÝHð  ¤5×#8Ñ#8×#MÑ#MØ1ó$ñ ð øô ò Ùðús   Á9B! Â!	B-Â,B-c                 óJ   — ddl m}  t        «       sy  | dt        «       dd«      S )Nr   ©Úcreate_cachez
dynamo-pgoÚFbRemoteDynamoPGOCacheÚRemoteDynamoPGOCache)Útorch._inductor.remote_cacher  r  r   r  s    r   Úget_remote_cacher	  O  s)   € Ý9ä-Ô/ØáØÜ‹Ø Øó	ð r   c                ó  — t        «       }| j                  j                  «       D ]]  \  }}d}t        |j                  t
        «      rt        |j                  v }n|j                  t        k(  rd}|sŒM|j                  |«       Œ_ |S )NFT)	r   r\   Úitemsr<   rp   r‚   ru   ro   Úadd)Ú
code_stateÚdynamic_sourcesÚsrcÚfsÚdynamics        r   Ú_collect_dynamic_sourcesr  ]  sv   € Ü'1£|€OØ×/Ñ/×5Ñ5Ó7ò %‰ˆˆRØˆÜ�b—g‘gœuÔ%Ü" b§g¡gÐ-‰GØ�Y‰Yœ,Ò&ØˆGÚØ×Ñ Õ$ð%ð Ðr   c                óø   — t         j                  | «      }t        «       |   }dj                  t	        |«      «      }|r0t        dx}d¬«      5  t        j                  ||¬«       d d d «       y y # 1 sw Y   y xY w)Nú,zpgo.dynamic_whitelistT©Úlog_pt2_compile_event)Úrecompile_dynamic_whitelist)r4   rN   rÅ   r   r  r   r   Úpt2_compile)rÄ   rÍ   rÎ   Úframe_whitelistr9   s        r   Úlog_frame_dynamic_whitelistr  j  sw   € Ü�k‰k˜&Ó!€GÜ Ó" 7Ñ+€KØ—h‘hÔ7¸ÓDÓE€OÙÜÐ"9Ð9˜$ÐQUÔVñ 	Ü×*Ñ*Ø°/õ÷	ð 	ð ÷	ð 	ús   ÁA0Á0A9c                óø   — dj                  d„ | j                  «       D «       «      }t        «       }| j                  «       D ]  }|j	                  t        |«      «       Œ |r|ddj                  |«      › d�z  }|S )Nú
c              3  óŽ   K  — | ]=  \  }}|› d �dj                  d„ |j                  j                  «       D «       «      z   –— Œ? y­w)z:
r  c              3  óN   K  — | ]  \  }}d |› d|j                  «       › �–— Œ y­w)z  z: N)rƒ   )r|   r  r  s      r   r}   z.render_code_state.<locals>.<genexpr>.<genexpr>x  s,   è ø€ ò 
Ù*1¨#¨rˆb���R˜Ÿ	™	›�}Ô%ñ
ùs   ‚#%N)r   r\   r  )r|   ÚkÚvs      r   r}   z$render_code_state.<locals>.<genexpr>v  sQ   è ø€ ò ñ
 ˆAˆqð	 ˆ#ˆSˆ	Ø
�)‰)ñ 
Ø56×5HÑ5H×5NÑ5NÓ5Pô
ó 
õ	
ñùs   ‚AAz°

PGO detected a recompilation due to dynamic shapes. To reduce shape recompilations by compiling dynamically to start, set environment variable TORCH_COMPILE_DYNAMIC_SOURCES="r  ú")r   r  r   ÚvaluesÚupdater  )ÚcsÚcode_state_strr  Ústates       r   Úrender_code_stater'  u  s�   € Ø—Y‘Yñ ð
 —H‘H“Jôó €Nô (2£|€OØ—‘“ò @ˆØ×ÑÔ7¸Ó>Õ?ð@áØðGàGJÇxÁxÐP_ÓG`ÐFaÐabðdñ	
ˆð
 Ðr   c                  óL   — e Zd Zedd„«       Zeedd„«       «       Zedd„«       Zy)ÚPGOCacheArtifactc                ój   — t        | j                  | j                  «      | j                  «      }|€J ‚y rB   )Úwrite_local_implÚ!_rewrite_cache_key_for_mega_cacheÚkeyr.   )r>   Úmetas     r   Úpopulate_cachezPGOCacheArtifact.populate_cache‹  s2   € äØ×2Ñ2°4·8±8Ó<¸d¿l¹ló
ˆð ÐÐÑr   c                  ó   — y)NÚpgor   r   r   r   rŽ   zPGOCacheArtifact.type’  s   € ð r   c                óH   — | j                  d«      s| S t        «       x}�|S | S )zø
        The PGO cache artifact key for a MAST job contains the job name and the version.
        When we want to use the cache artifact on a different MAST job, we need to
        update the key to use the new MAST job's name and version.
        rÛ   )rå   rî   )Úoriginal_keyÚnew_keys     r   r,  z2PGOCacheArtifact._rewrite_cache_key_for_mega_cache—  s0   € ð ×&Ñ& wÔ/àÐÜ$“Ð&ˆGÐ3ØˆNØÐr   Nr©   rR   )r3  r5   rP   r5   )r   r   r   r	   r/  rU   rŽ   r,  r   r   r   r)  r)  ‰  sD   „ àò ó ð ð Øòó ó ðð òó ñr   r)  c                 ó  ‡	— t         �t         S t        t        «      a t        «       } | €t         S dˆ	fd„}t	        | «      Š	‰	�át
        j                  j                  ‰	«      rÂt        dx}d¬«      5  t        j                  || ¬«       t        ‰	d«      5 }	 |j                  «       }t        j                  |«      a t        j                  ||j                  «       ¬«       t!        j"                  t$        j'                  «       | |«        |d«      cd d d «       cd d d «       S t/        «       }|��	t        dx}dd¬«      5  t        j                  || ¬«       	 |j1                  | «      }|�®	 t3        |t4        «      sJ ‚|d   }t3        |t6        «      sJ ‚t9        j:                  |«      }t        j                  |t=        |«      ¬«       t        j                  |«      a t!        j"                  t$        j'                  «       | |«        |d«      cd d d «       S t*        j?                  d| «       	 d d d «       t*        j?                  d«       t         €J ‚t         S # t(        $ r t*        j-                  d	‰	d¬
«       Y nw xY w	 d d d «       n# 1 sw Y   nxY wd d d «       �Œ€# 1 sw Y   �ŒŠxY w# t(        $ r t*        j-                  d| d¬
«       Y Œ¢w xY w# t(        $ r t*        j-                  d| d¬
«       Y ŒÉw xY w# 1 sw Y   ŒÎxY w)Nc                óô   •— t        t        t        «      sJ ‚t        j	                  d‰| t        t        «      «       t        d| › d�dd„ «       t        dd«       t        j                  t        «      a
t        S )Nz$get_code_state %s hit %s, %d entriesÚget_Ú_code_stateÚstringc                 ó    — t        t        «      S rB   ©r'  r`   r   r   r   rZ   z-get_code_state.<locals>.hit.<locals>.<lambda>¹  ó   € Ô%¤kÓ2€ r   r1  T)r<   r`   r   r¸   rÊ   r£   r   r   rÉ   Údeepcopyr_   )Útyr%   s    €r   Úhitzget_code_state.<locals>.hit²  sf   ø€ äœ+¤{Ô3Ð3Ð3Ü�‰Ð7¸¸rÄ3Ä{ÓCSÔTÜ!Ø�2�$�kÐ"ØÙ2ô	
ô
 	˜˜tÔ$ÜŸ=™=¬Ó5ÐÜÐr   zpgo.get_local_code_stateTr  ©rø   r"   ©Úcache_size_bytesÚlocalz&get_code_state failed while reading %s)Úexc_infozpgo.get_remote_code_stateÚ!pgo_get_remote_code_state_time_us©r  Údynamo_compile_column_usÚdataÚremotez1get_code_state failed parsing remote result on %sz get_code_state remote miss on %sz'get_code_state failed remote read on %szget_code_state using default)r>  r5   rP   údefaultdict[CodeId, CodeState]) r`   r   rW   rî   rú   r$   r%   r&   r   r   r  r'   r(   ÚpickleÚloadsÚtellr   Úrecord_artifactr)  rŽ   Ú	Exceptionr¸   Úwarningr	  Úgetr<   Údictr5   Úbase64Ú	b64decoder£   rÊ   )
rø   r?  r9   Úfr.   Úremote_cacheÚ
cache_datarH  Úpayloadr%   s
            @r   rÅ   rÅ   ¦  så  ø€ äÐÜÐô œiÓ(€Kä“€IØÐÜÐõô ˜9Ó%€DØÐœBŸG™GŸN™N¨4Ô0ÜØ.Ð.ˆDÀdô
ñ 	(ô ×*Ñ*¨4¸9ÕEô �d˜DÓ!ð ( Qð(ØŸf™f›h�GÜ"(§,¡,¨wÓ"7�KÜ&×2Ñ2°4È!Ï&É&Ë(ÕSô )×8Ñ8Ü(×-Ñ-Ó/°¸Gôñ ˜w›<÷(ð (÷	(ñ 	(ô, $Ó%€LØÑÜØ/Ð/ˆDØ"&Ø%Hô
ñ $	Lô
 ×*Ñ*¨4¸9ÕEðLØ)×-Ñ-¨iÓ8�
ð Ð)ð-Ü)¨*´dÔ;Ð;Ð;Ø)¨&Ñ1˜Ü)¨$´Ô4Ð4Ð4Ü"(×"2Ñ"2°4Ó"8˜Ü*×6Ñ6Ø ´3°w³<õô '-§l¡l°7Ó&;˜ô -×<Ñ<Ü,×1Ñ1Ó3°YÀôñ  # 8›}÷E$	Lñ $	LôH —H‘HÐ?ÀÕK÷I$	LôL ‡H�HÐ+Ô,äÐ"Ð"Ð"ÜÐøôm !ò Ü—K‘KØ@À$ÐQUð  ö ðúð÷(÷ (ñ (ú÷	(÷ 	(ó 	(ûô` %ò ÜŸ™ØOØ%Ø%)ð $ö ðûô ò Ü—‘Ø=¸yÐSWð ö ðú÷$	Lð $	Lúsª   Á0$J#ÂJÂA
IÃ 0JÄ	J#Å K>ÅKÅ*K>Å-A3J0Ç 0K>ÈK>É!J É=JÉ?J Ê JÊ	J#ÊJ	ÊJ#Ê#J-Ê0!KËK>ËKËK>Ë!K;Ë8K>Ë:K;Ë;K>Ë>Lc                 óò   — t         €t        j                  d«       y t         t        k(  rt        j                  d«       y t	        «       } | €t        j                  d«       y t        | «       t        | «       y )Nz1put_code_state: never initialized, will not writez#put_code_state: no change, skippingz&put_code_state: no cache key, skipping)r`   r¸   rÊ   r_   rî   Úput_local_code_stateÚput_remote_code_stater@  s    r   Úput_code_stater\    s^   € ÜÐÜ�‰ÐDÔEØäÔ&Ò&Ü�‰Ð6Ô7Øä“€IØÐÜ�‰Ð9Ô:Øä˜Ô#Ü˜)Õ$r   c                óª  — t        | «      }|€y |dz   }|dz   }ddlm} t        j                  t        j
                  j                  |«      d¬«        ||t        ¬«      5  t        |d«      5 }|j                  |«       |j                  «       }d d d «       t        j                  ||«       d d d «       |fS # 1 sw Y   Œ+xY w# 1 sw Y   |fS xY w)	Nz.tmpz.lockr   )ÚFileLockT)Úexist_ok)ÚtimeoutÚwb)rú   Útorch.utils._filelockr^  r$   Úmakedirsr%   ÚdirnameÚLOCK_TIMEOUTr'   ÚwriterM  Úreplace)rø   Úpickled_coder%   Útmp_pathÚ	lock_pathr^  rU  rp   s           r   r+  r+    sÂ   € Ü˜9Ó%€Dà€|Øð
 �f‰}€HØ�w‘€Iõ /ä‡K�K”—‘—‘ Ó%°Õ5á	�)¤\Ô	2ñ #Ü�(˜DÓ!ð 	 QØ�G‰G�LÔ!Ø—6‘6“8ˆD÷	ô 	�
‰
�8˜TÔ"÷	#ð
 �ˆ:Ð÷		ð 	ú÷#ð
 �ˆ:Ðús$   Á!CÁ."B:ÂCÂ:C	Â?CÃCc                ó  — t        dx}d¬«      5  t        j                  || ¬«       t        €J ‚t	        j
                  t        «      }t        j                  t        j                  «       | |«       t        | |«      }|€t        j                  d«       	 d d d «       y |\  }}t        j                  ||¬«       t        j                  d|t        t        «      «       t        dd	d
„ «       d d d «       y # 1 sw Y   y xY w)Nzpgo.put_local_code_stateTr  r@  z$put_code_state: local cache disabledrA  z*put_code_state: wrote local %s, %d entriesrZ  r9  c                 ó    — t        t        «      S rB   r;  r   r   r   rZ   z&put_local_code_state.<locals>.<lambda>G  r<  r   )r   r   r  r`   rK  Údumpsr   rN  r)  rŽ   r+  r¸   rÊ   r£   r   )rø   r9   rh  r.  r%   rp   s         r   rZ  rZ  1  sß   € Ü	Ð8Ð8�dÐPTÔ	Uñ 
Ü×&Ñ& t°yÕAÜÐ&Ð&Ð&ä—|‘|¤KÓ0ˆä×,Ñ,Ü×!Ñ!Ó# Y°ô	
ô   	¨<Ó8ˆØˆ<Ü�H‰HÐ;Ô<Ø÷
ð 
ð ‰
ˆˆdä×&Ñ& t¸dÕCÜ�‰Ð=¸tÄSÌÓEUÔVÜ!Ø"ØÙ2ô	
÷%
÷ 
ñ 
ús   �BC6ÂAC6Ã6C?c                ó(  — t        dx}dd¬«      5  t        j                  || ¬«       t        €J ‚t	        «       }|€t
        j                  d«       	 d d d «       y t        j                  t        «      }t        j                  |t        |«      ¬«       dt        j                  |«      j                  d	«      i}|j                  | |«       t
        j                  d
| t        t        «      «       t        ddd„ «       d d d «       y # 1 sw Y   y xY w)Nzpgo.put_remote_code_stateTÚ!pgo_put_remote_code_state_time_usrF  r@  z%put_code_state: remote cache disabledrA  rH  Úasciiz+put_code_state: wrote remote %s, %d entriesr[  r9  c                 ó    — t        t        «      S rB   r;  r   r   r   rZ   z'put_remote_code_state.<locals>.<lambda>g  r<  r   )r   r   r  r`   r	  r¸   rÊ   rK  rm  r£   rS  Ú	b64encodeÚdecodeÚputr   )rø   r9   rV  r.   rW  s        r   r[  r[  K  sö   € Ü	Ø+Ð+ˆØ"Ø!Dô
ñ 
ô
 	×&Ñ& t°yÕAÜÐ&Ð&Ð&ä'Ó)ˆàÐÜ�H‰HÐ<Ô=Ø÷
ð 
ô —,‘,œ{Ó+ˆÜ×&Ñ& t¼cÀ'»lÕKà”F×$Ñ$ WÓ-×4Ñ4°WÓ=ð"
ˆ
ð 	×Ñ˜ JÔ/Ü�‰Ø9¸9ÄcÌ+ÓFVô	
ô 	"Ø#ØÙ2ô	
÷1
÷ 
ñ 
ús   ‘ADÁB#DÄDc                 ó   — d a d ay rB   )r`   r_   r   r   r   Úreset_code_staterv  l  s   € à€KØÑr   )r,   r5   rP   r5   )
rÌ   r   r9   r5   rÁ   rY   r¯   rQ   rP   rY   )rP   úOptional[str])rø   r5   rP   rw  )rP   rQ   )rP   z!Optional[RemoteCache[JsonDataTy]])r  rW   rP   zOrderedSet[str])rÄ   rS   rP   rª   )r$  rJ  rP   r5   )rP   rJ  r©   )rø   r5   rh  ÚbytesrP   zOptional[tuple[str, int]])rø   r5   rP   rª   )[rd   Ú
__future__r   rS  rÉ   r]   ÚenumÚ	functoolsÚloggingr$   rK  rö   r)   Úcollectionsr   Útypingr   r   r   r   Útyping_extensionsr	   r
   Útorch._dynamo.configr…   Útorch._utils_internalÚtorch.compiler.configÚtorch.distributedÚdistributedrÞ   Útorch._dynamo.utilsr   r   r   r   Útorch._environmentr   Útorch._logging._internalr   Útorch.compiler._cacher   r   r   Útorch.utils._ordered_setr   ÚtypesÚtorch._dynamo.symbolic_convertr   r  r   r   Ú
ValueErrorr   Ú	getLoggerr   r¸   re  Úcacher1   Ú	dataclassr4   rW   r_   rT   r`   rb   re   ÚEnumrg   ri   rv   rl   ru   rY   rÑ   rÙ   rî   rú   r  r	  r  r  r'  Úregisterr)  rÅ   r\  r+  rZ  r[  rv  r   r   r   ú<module>r’     s|  ðò	õ #ã Û Û Û Û Û Û 	Û Û 	Û Ý #ß :Ó :ß ,ã Û Û Ý  ÷ó õ )Ý >÷ñ õ
 0ñ ÛåDßDô	 *ô 	ð €g×Ñ˜Ó!€à€ðj ‡�ò	ó ð	ð €×Ñ˜dÔ#÷$
ð $
ó $ð$
ðN ×Ñ÷ð ó ðð >BÐ Ð:Ó AØ8<€Ð5Ó <ð €×Ñ˜dÔ#÷ð ó $ðñ( ˆTƒ]€ô�—	‘	ô ð �_‰_€
ô�$—)‘)ô ð × Ñ €ð ×Ñ÷Jð Jó ðJðd (-ñiØðià
ðið ðið
 !%ðið óiðb (-ñ+Øð+à
ð+ð ð+ð
 !%ð+ð ó+ó\óF?óó.ó
óóð( ×Ñô�}ó ó ðó8]ó@%ó$ó2
ó4
ôBr   