Ë
    g^(h4j  ã                  ó|  — 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mZ ddlmZmZmZmZ ddl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& erddl'Z'ddl(m)Z) ddl*m+Z+m,Z,  G d„ de-«      Z. ej^                  e0«      Z1dZ2 ejf                  d¬«       G d„ d«      «       Z4ejf                   G d„ d«      «       Z5da6de7d<   da8de7d<    ejf                  d¬«       G d„ d«      «       Z9 ed«      Z: G d„ dejv                  «      Z<e<jz                  Z> G d„ dejv                  «      Z?e?jz                  Z@ejf                   G d „ d!«      «       ZAd"d#œ	 	 	 	 	 	 	 	 	 d1d$„ZBd"d#œ	 	 	 	 	 	 	 	 	 d1d%„ZCd2d&„ZDd3d'„ZEd4d(„ZFd5d)„ZGd6d*„ZHd7d+„ZId8d,„ZJd9d-„ZKd:d.„ZLd:d/„ZMd8d0„ZNy);a  
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)ÚSelf)ÚCompileEventLoggerÚdynamo_timedÚset_feature_useÚ	warn_once)Ú	is_fbcode)Útrace_structured_artifact)ÚCacheArtifactManagerÚCacheArtifactType)ÚInstructionTranslator)Ú
JsonDataTyÚRemoteCachec                  ó   — e Zd Zy)ÚReservedWorkflowIdUserErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úO/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/pgo.pyr   r   0   s   „ Ør   r   é
   T)Úfrozenc                  ó>   — e Zd ZU ded<   ded<   ded<   edd„«       Zy)	ÚCodeIdÚstrÚfilenameÚintÚfirstlinenoÚnamec                óX   — t        | j                  | j                  | j                  «      S ©N)r    Úco_filenameÚco_firstlinenoÚco_name)Úcodes    r   ÚmakezCodeId.makeq   s!   € ä�d×&Ñ&¨×(;Ñ(;¸T¿\¹\ÓJÐJr   N)r+   ztypes.CodeTypeÚreturnr    )r   r   r   Ú__annotations__Ústaticmethodr,   r   r   r   r    r    k   s&   … àƒMØÓØ
ƒIàòKó ñKr   r    c                  ó@   — e Zd ZU  ej                  d„ ¬«      Zded<   y)Ú	CodeStatec                 ó    — t        t        «      S r'   )r   ÚFrameStateSizeEntryr   r   r   ú<lambda>zCodeState.<lambda>y   s   € ¤Ô,?Ó @€ r   )Údefault_factoryz%defaultdict[str, FrameStateSizeEntry]Úautomatic_dynamicN)r   r   r   ÚdataclassesÚfieldr6   r.   r   r   r   r1   r1   v   s!   … à?P¸{×?PÑ?PÙ@ô@ÐÐ<ô r   r1   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.
    r#   ÚdimN)r   r   r   Ú__doc__r.   r   r   r   r<   r<   �   s   … ñð  
„Hr   r<   Ú_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   r>   Útokenr   r   r   rA   rA   ™   ó   „ ñð
 �Er   rA   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   NrB   r   r   r   rF   rF   ¥   rD   r   rF   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)r3   )Ú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(ú))Úauto_dynamicÚ
auto_unsetÚ
isinstancer<   r=   r!   )Ú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r'   r   )Ú.0rS   rT   s     €r   ú	<genexpr>zCFrameStateSizeEntry.render.<locals>.render_tuple.<locals>.<genexpr>Ë   s   øè ø€ Ò"@¸¡=°×#3Ñ"@ùs   ƒú])Újoin)ÚssrT   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)})rS   z/Union[int, AutoDynamic, AutoUnset, InferStride]r-   r!   )r\   z0tuple[Union[int, AutoDynamic, InferStride], ...]r-   r!   )rJ   rP   rK   rI   rR   Útuple)Úselfr]   rT   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 r'   )rR   rI   ÚtorchÚSymIntrJ   r^   rK   )r_   rS   Ú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)rJ   rP   rQ   ©r_   r=   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r'   )Útyper#   )rX   rS   s     r   rY   z8FrameStateSizeEntry.is_stride_dynamic.<locals>.<genexpr>û   s   è ø€ Ò0SÀA´°a³¼C´Ñ0Sùs   ‚FT)rR   rJ   r^   ÚallrK   rP   rQ   rg   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r'   )rR   rb   rc   rP   )rX   Úxs     r   rY   z4FrameStateSizeEntry._munge_symint.<locals>.<genexpr>  s"   è ø€ ÒTÈA¤Z°´5·<±<Ô%@•\ÀaÓGÑTùs   ‚,.)r^   )Úxss    r   Ú_munge_symintz!FrameStateSizeEntry._munge_symint  s   € äÑTÐQSÔTÓTÐTr   c                ó.   — t        |t        t        ¬«      S ©N)rI   rJ   rK   )r3   rP   )Úclsrp   s     r   Úmake_scalarzFrameStateSizeEntry.make_scalar  s   € ä"¨!´,Ä|ÔTÐTr   c                ób   — t        t        | j                  |«      | j                  |«      ¬«      S rt   )r3   rP   rr   )ru   rJ   rK   s      r   Úmake_tensorzFrameStateSizeEntry.make_tensor  s0   € ô #ÜØ×"Ñ" 4Ó(Ø×$Ñ$ VÓ,ô
ð 	
r   c                óL   — t        t        | j                  |«      t        ¬«      S rt   )r3   rQ   rr   )ru   rJ   s     r   Ú	make_sizezFrameStateSizeEntry.make_size  s#   € ä"ÜØ×"Ñ" 4Ó(Üô
ð 	
r   c                ód   — | t         u r|S |t         u r| S | t        u s|t        u s| |k7  rt        S | S r'   )rQ   rP   )rp   Úys     r   Ú_merge_atomzFrameStateSizeEntry._merge_atom  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r'   )r}   )rX   rp   r|   ru   s      €r   rY   z6FrameStateSizeEntry._merge_atom_tup.<locals>.<genexpr>6  s    øè ø€ ÒC©t¨q°!�S—_‘_ Q¨×*ÑCùs   ƒ")rQ   rP   Úlenr^   Úzip)ru   rq   Úyss   `  r   Ú_merge_atom_tupz#FrameStateSizeEntry._merge_atom_tup(  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 r'   )r}   rI   rƒ   rJ   rK   )r_   Úothers     r   Ú__ior__zFrameStateSizeEntry.__ior__8  s[   € Ø×&Ñ& t§{¡{°E·L±LÓAˆŒØ×(Ñ(¨¯©°E·J±JÓ?ˆŒ	Ø×*Ñ*¨4¯;©;¸¿¹ÓEˆŒØˆr   N)r-   r!   ©r-   ÚNone)r=   r#   r-   Úbool)rq   útuple[int, ...]r-   z#tuple[Union[AutoDynamic, int], ...])rp   r#   r-   r3   )rJ   rŠ   rK   rŠ   r-   r3   )rJ   rŠ   r-   r3   )rp   r?   r|   r?   r-   zUnion[AutoDynamic, _T])rq   ú-Union[AutoDynamic, AutoUnset, tuple[_T, ...]]r‚   r‹   r-   zAUnion[AutoDynamic, AutoUnset, tuple[Union[AutoDynamic, _T], ...]])r…   r	   r-   r	   )r   r   r   r7   r8   rQ   rI   r.   rJ   rK   r`   re   rh   rm   r/   rr   Úclassmethodrv   rx   rz   r}   rƒ   r†   r   r   r   r3   r3   ±   s)  … à1B°×1BÑ1BÈ:Ô1V€FÐ.ÓVð 	ˆ×Ñ *Ô-ð 	Ð
Ló ð
 	ˆ×Ñ *Ô-ð ð ó .ó&ó:<ó.ó0ð4 òUó ðUð òUó ðUð ð
Ø"ð
Ø,;ð
à	ò
ó ð
ð ò
ó ð
ð òó ðð ðDà9ðDð :ðDð 
Kò	Dó ðDôr   r3   F©Úis_unspecialized_nn_modulec          
     óÆ  ‡‡‡
— t         j                  | j                  «      }t        «       |   }‰|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 )Nz%automatic dynamic int %s val %s != %sr6   rI   zscalar change©r%   Ú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 != %sr6   rl   r�   )ÚgetattrÚlogÚdebugr
   Úinstantr!   )	Útup_nameÚshort_reasonÚlong_reasonÚiÚ	entry_tupÚold_entry_tupÚentryr%   Ú	old_entrys	         €€€r   Úlog_tupz)update_automatic_dynamic.<locals>.log_tuph  s¤   ø€ ð )*¨	ŒG�E˜8Ô$´w¸uÀhÓ7OÐPQÑ7Rð 	ð
 ˆyô �I˜xÔ(ä˜ HÓ-¨aÑ0ð 	ô
 	�	‰	Ø1ØØØàØô	
ô 	×"Ñ"ØàØ()¨	™u°qØ%Ü˜mÓ,Ü˜9“~ñõ		
r   rJ   r=   zdimensionality changezsize(rO   zsize changer…   rK   zstride(zstride changer'   )
rš   r!   r›   r!   rœ   r!   r�   zOptional[int]r-   rˆ   )r    r,   Úf_codeÚget_code_stater6   ÚcopyrI   r—   r˜   r
   r™   r!   ÚinforJ   rR   r^   r€   ÚrangerK   )Útxr%   r    rŽ   Úcode_idÚframe_stateÚ	is_updateÚ	mut_entryr¢   r�   r¡   s    ``       @r   Úupdate_automatic_dynamicr­   ?  s£  ú€ ô �k‰k˜"Ÿ)™)Ó$€GÜ Ó" 7Ñ+€KØ˜×5Ñ5Ð5€IØ×-Ñ-¨dÑ3€IÜ—	‘	˜)Ó$€IØ�Ñ€Iñ �Y×%Ñ%¨×)9Ñ)9Ò9Ü�	‰	Ø3ØØ�L‰LØ×Ñô		
ô 	×"Ñ"ØàØ'Ø)Ü˜i×.Ñ.Ó/Ü˜5Ÿ<™<Ó(ñô		
ñ &Ü�H‰HðKð ô	ð PTð
Øð
Ø%(ð
Ø7:ð
Ø?Lð
à	÷
ñ> �Y—^‘^ y§~¡~Ò5Ü�i—n‘n¤eÔ,´¸E¿J¹JÌÔ1NÜ�9—>‘>Ó"¤c¨%¯*©*£oÒ5Ù˜ Ð'>Õ?äœs 5§:¡:›Ó/ò H�AØ —~‘~ aÑ(¨E¯J©J°q©MÓ9Ù ¨%°¨s°!¨°mÀQÕGñHñ �F˜G WÔ-á�Y×%Ñ%¨×)9Ñ)9Ò9Ü�i×&Ñ&¬Ô.´:¸e¿l¹lÌEÔ3RÜ�9×#Ñ#Ó$¬¨E¯L©LÓ(9Ò9Ù˜ %Ð)@ÔAð Ðô œs 5§<¡<Ó0Ó1ò N�AØ ×'Ñ'¨Ñ*¨e¯l©l¸1©oÓ=Ù ¨G°A°3°a¨.¸/È1ÕMðNð Ðñ �H˜g wÔ/àÐ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_stater6   )r¨   r%   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_cachesz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.ú:)rb   Ú	_inductorÚconfigÚ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)rb   Ú_dynamor¹   Úautomatic_dynamic_local_pgor—   r˜   Ú%torch._inductor.runtime.runtime_utilsrÍ   ÚreÚsubÚosÚpathr[   )Ú	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)rb   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â   ü  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é     s)   € Ý9ä-Ô/ØáØÜ‹Ø Øó	ð r   c                óN   — dj                  d„ | j                  «       D «       «      S )Nú
c              3  óÖ   K  — | ]a  \  }}|j                   › d |j                  › d |j                  › d�dj                  d„ |j                  j                  «       D «       «      z   –— Œc y­w)r·   z:
rë   c              3  óN   K  — | ]  \  }}d |› d|j                  «       › �–— Œ y­w)z  z: N)r`   )rX   ÚsrcÚfss      r   rY   z.render_code_state.<locals>.<genexpr>.<genexpr>$  s,   è ø€ ò 
Ù*1¨#¨rˆb���R˜Ÿ	™	›�}Ô%ñ
ùs   ‚#%N)r"   r$   r%   r[   r6   Úitems)rX   ÚkÚvs      r   rY   z$render_code_state.<locals>.<genexpr>"  sj   è ø€ ò ñ
 ˆAˆqð	 �:‰:ˆ,�a˜Ÿ™� a¨¯© x¨sÐ3Ø
�)‰)ñ 
Ø56×5HÑ5H×5NÑ5NÓ5Pô
ó 
õ	
ñùs   ‚A'A))r[   rð   )Úcss    r   Úrender_code_staterô   !  s(   € Ø�9‰9ñ ð
 —H‘H“Jôó ð 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¬«      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 r'   ©rô   r:   r   r   r   r4   z-get_code_state.<locals>.hit.<locals>.<lambda>>  ó   € Ô%¤kÓ2€ r   ÚpgoT)rR   r:   r   r—   r¦   r€   r   r   r¥   Údeepcopyr9   )Útyr×   s    €r   Úhitzget_code_state.<locals>.hit7  sf   ø€ äœ+¤{Ô3Ð3Ð3Ü�‰Ð7¸¸rÄ3Ä{ÓCSÔTÜ!Ø�2�$�kÐ"ØÙ2ô	
ô
 	˜˜tÔ$ÜŸ=™=¬Ó5ÐÜÐr   zpgo.get_local_code_stateT©Úlog_pt2_compile_event©rØ   Úrb©Úcache_size_bytesÚlocalz&get_code_state failed while reading %s)Úexc_infozpgo.get_remote_code_stateÚ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ÿ   r!   r-   údefaultdict[CodeId, CodeState]) r:   r   r1   rË   rÚ   rÖ   r×   Úexistsr   r
   Úpt2_compileÚopenÚreadÚpickleÚloadsÚtellr   Úrecord_artifactr   ÚPGOÚ	Exceptionr—   Úwarningré   ÚgetrR   Údictr!   Úbase64Ú	b64decoder€   r¦   )
rØ   r   r%   ÚfÚcontentÚremote_cacheÚ
cache_datar	  Ú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Ü)×-Ñ-¨y¸'ôñ ˜w›<÷(ð (÷	(ñ 	(ô, $Ó%€LØÑÜØ/Ð/ˆDÀtô
ñ "	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°9¸gôñ  # 8›}÷A"	Lñ "	LôD —H‘HÐ?ÀÕK÷E"	LôH ‡H�HÐ+Ô,äÐ"Ð"Ð"ÜÐøôi !ò Ü—K‘KØ@À$ÐQUð  ö ðúð÷(÷ (ñ (ú÷	(÷ 	(ó 	(ûô\ %ò ÜŸ™ØOØ%Ø%)ð $ö ðûô ò Ü—‘Ø=¸yÐSWð ö ðú÷"	Lð "	Lúsª   Á0$JÂJÂA
IÃ ,JÄ	JÄ;K5ÅKÅ%K5Å(A3J'Ç,K5ÈK5É!I7É4JÉ6I7É7JÉ;	JÊJ	Ê	JÊJ$Ê'!KËK5Ë
KËK5Ë!K2Ë/K5Ë1K2Ë2K5Ë5K>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¦   r9   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  Úwriter  Úreplace)rØ   Úpickled_coder×   Útmp_pathÚ	lock_pathr%  r  rJ   s           r   Úwrite_local_implr2  ›  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 disabledr  z*put_code_state: wrote local %s, %d entriesr!  rù   c                 ó    — t        t        «      S r'   rû   r   r   r   r4   z&put_local_code_state.<locals>.<lambda>Ê  rü   r   )r   r
   r  r:   r  Údumpsr   r  r   r  r2  r—   r¦   r€   r   )rØ   r%   r/  Úmetar×   rJ   s         r   r!  r!  ´  sÜ   € Ü	Ð8Ð8�dÐPTÔ	Uñ 
Ü×&Ñ& t°yÕAÜÐ&Ð&Ð&ä—|‘|¤KÓ0ˆä×,Ñ,Ü×!Ñ! 9¨lô	
ô   	¨<Ó8ˆØˆ<Ü�H‰HÐ;Ô<Ø÷
ð 
ð ‰
ˆˆdä×&Ñ& t¸dÕCÜ�‰Ð=¸tÄSÌÓEUÔVÜ!Ø"ØÙ2ô	
÷%
÷ 
ñ 
ús   �BC2ÂAC2Ã2C;c                ó&  — t        dx}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_stateTr  r  z%put_code_state: remote cache disabledr  r	  Úasciiz+put_code_state: wrote remote %s, %d entriesr"  rù   c                 ó    — t        t        «      S r'   rû   r   r   r   r4   z'put_remote_code_state.<locals>.<lambda>æ  rü   r   )r   r
   r  r:   ré   r—   r¦   r  r5  r€   r  Ú	b64encodeÚdecodeÚputr   )rØ   r%   r  r  r  s        r   r"  r"  Î  sï   € Ü	Ð9Ð9�dÐQUÔ	Vñ 
Ü×&Ñ& t°yÕAÜÐ&Ð&Ð&ä'Ó)ˆàÐÜ�H‰HÐ<Ô=Ø÷
ð 
ô —,‘,œ{Ó+ˆÜ×&Ñ& t¼cÀ'»lÕKà”F×$Ñ$ WÓ-×4Ñ4°WÓ=ð"
ˆ
ð 	×Ñ˜ JÔ/Ü�‰Ø9¸9ÄcÌ+ÓFVô	
ô 	"Ø#ØÙ2ô	
÷)
÷ 
ñ 
ús   �ADÁB#DÄDc                 ó   — d a d ay r'   )r:   r9   r   r   r   Úreset_code_stater>  ë  s   € à€KØÑr   )
r¨   r   r%   r!   r    r3   rŽ   r‰   r-   r3   )r-   úOptional[str])rØ   r!   r-   r?  )r-   r‰   )r-   z!Optional[RemoteCache[JsonDataTy]])ró   r  r-   r!   )r-   r  r‡   )rØ   r!   r/  Úbytesr-   zOptional[tuple[str, int]])rØ   r!   r-   rˆ   )Or>   Ú
__future__r   r  r¥   r7   ÚenumÚloggingrÖ   r  rÔ   Úcollectionsr   Útypingr   r   r   r   Útyping_extensionsr	   Útorch._dynamo.configrb   Útorch._utils_internalÚtorch.compiler.configÚtorch.distributedÚdistributedr»   Útorch._dynamo.utilsr
   r   r   r   Útorch._environmentr   Útorch._logging._internalr   Útorch.compiler._cacher   r   ÚtypesÚtorch._dynamo.symbolic_convertr   rè   r   r   Ú
ValueErrorr   Ú	getLoggerr   r—   r,  Ú	dataclassr    r1   r9   r.   r:   r<   r?   ÚEnumrA   rC   rQ   rF   rP   r3   r­   rµ   rË   rÚ   râ   ré   rô   r¤   r#  r2  r!  r"  r>  r   r   r   ú<module>rV     s(  ðò	õ #ã Û Û Û Û Û 	Û Û 	Ý #ß :Ó :Ý "ã Û Û Ý  ÷ó õ )Ý >ß Iñ ÛåDßDô	 *ô 	ð €g×Ñ˜Ó!€à€ðj €×Ñ˜dÔ#÷Kð Kó $ðKð ×Ñ÷ð ó ðð >BÐ Ð:Ó AØ8<€Ð5Ó <ð €×Ñ˜dÔ#÷ð ó $ðñ( ˆTƒ]€ô�—	‘	ô ð �_‰_€
ô�$—)‘)ô ð × Ñ €ð ×Ñ÷Jð Jó ðJðd (-ñ^Øð^à
ð^ð ð^ð
 !%ð^ð ó^ðL (-ñ+Øð+à
ð+ð ð+ð
 !%ð+ð ó+ó\óF?óó.óó[ó|%ó$ó2
ó4
ô:r   