
    {Yh}                       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j5        e6          Z7dZ8ej9        dMd            Z: ej;        d           G d d                      Z<ej;         G d d                      Z=da>de?d<   da@de?d<    ej;        d           G d d                      ZA ed           ZB G d! d"ejC                  ZDeDjE        ZF G d# d$ejC                  ZGeGjE        ZHej;         G d% d&                      ZId'd(dNd/ZJd'd(dNd0ZKdOd2ZLdPd4ZMdQd5ZNdRd7ZOdSd:ZPdTd>ZQdUdAZRe)jS         G dB dCe(                      ZTdVdDZUdWdEZVdXdIZWdYdJZXdYdKZYdWdLZZdS )Za  
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dS )ReservedWorkflowIdUserErrorN)__name__
__module____qualname__     c/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/_dynamo/pgo.pyr   r   7   s        Dr   r   
   filepathstrreturnc                   t           j                            |           s| S t          | d          5 }|                                }t          j        |          }t          |dz  d          }|cd d d            S # 1 swxY w Y   d S )Nrbl    08x)ospathexistsopenreadzlibcrc32format)r!   filecontentcrc32_valuehashs        r   _hash_containing_filer3   r   s     7>>(## 	h		 ))++j))kJ.66	                 s   =A<<B B T)frozenc                  h    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dS )CodeIdr"   filenameintfirstlinenoname	file_hashotherobjectr#   boolc                    t          |t                    sdS | j        |j        k    o| j        |j        k    o| j        |j        k    S )NF)
isinstancer6   r;   r9   r:   selfr<   s     r   __eq__zCodeId.__eq__   sN    %(( 	5Neo- ( E$55(	UZ'	
r   c                D    t          | j        | j        | j        f          S N)r2   r;   r:   r9   rB   s    r   __hash__zCodeId.__hash__   s    T^TY0@ABBBr   c                F    d| j          d| j         d| j         d| j         S )Nzhash():)r;   r7   r9   r:   rF   s    r   __str__zCodeId.__str__   s1    Vt~VVVV8HVV49VVVr   codetypes.CodeTypec                h    t          | j        | j        | j        t	          | j                            S rE   )r6   co_filenameco_firstlinenoco_namer3   )rL   s    r   makezCodeId.make   s3    L!$"233	
 
 	
r   N)r<   r=   r#   r>   )r#   r8   r#   r"   )rL   rM   r#   r6   )	r   r   r   __annotations__rC   rG   rK   staticmethodrR   r   r   r   r6   r6      s         MMMIII NNN
 
 
 
C C C CW W W W 
 
 
 \
 
 
r   r6   c                  >    e Zd ZU  ej        d           Zded<   dS )	CodeStatec                 *    t          t                    S rE   )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      sM         ?P{?P@@@ @ @      r   rW   z(Optional[defaultdict[CodeId, CodeState]]_INIT_CODE_STATE_CODE_STATEc                      e Zd ZU dZded<   dS )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.
    r8   dimN)r   r   r   __doc__rT   r   r   r   rb   rb      s%            HHHHHr   rb   _Tc                      e Zd ZdZdZdS )	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               
 EEEr   rg   c                      e Zd ZdZdZdS )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                  L   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d%S )0rY   )defaultz"Union[int, AutoDynamic, AutoUnset]scalarzBUnion[AutoDynamic, AutoUnset, tuple[Union[int, AutoDynamic], ...]]sizezOUnion[AutoDynamic, AutoUnset, tuple[Union[int, AutoDynamic, InferStride], ...]]strider#   r"   c                T   dddfd}| j         t          u r(| j        t          u r| j        t          u rd	S d
| j         S | j        t          u rXt	          | j         t
                    r>t	          | j        t
                    r$d || j                    d || j                   S dS )Ns/Union[int, AutoDynamic, AutoUnset, InferStride]r#   r"   c                    | t           u rdS | t          u rdS t          | t                    rd| j         dS t          |           S )N?z
auto unsetzS(rI   )auto_dynamic
auto_unsetr@   rb   rc   r"   )rs   s    r   render_singlez1FrameStateSizeEntry.render.<locals>.render_single   sM    L  sj#|A{++ $AE}}}$1vvr   ss0tuple[Union[int, AutoDynamic, InferStride], ...]c                R    dd                     fd| D                       z   dz   S )N[z, c              3  .   K   | ]} |          V  d S rE   r   ).0rs   ry   s     r   	<genexpr>zCFrameStateSizeEntry.render.<locals>.render_tuple.<locals>.<genexpr>   s-      "@"@==#3#3"@"@"@"@"@"@r   ])join)rz   ry   s    r   render_tuplez0FrameStateSizeEntry.render.<locals>.render_tuple   s4    "@"@"@"@R"@"@"@@@@3FFr   zfully dynamic scalar or tensorzscalar ztensor size=z stride=zunusual {repr(self)})rs   rt   r#   r"   )rz   r{   r#   r"   )rp   rw   rq   ro   r@   tuple)rB   r   ry   s     @r   renderzFrameStateSizeEntry.render   s    		 		 		 			G 	G 	G 	G 	G 	G 9$$)D)D{l**77....[L(($)U++ c
4;0N0N cbll49&=&=bb||TXT_G`G`bbb &%r   Nonec                   t          | j        t          j                  rJ | j                    t          | j        t
                    r.| j        D ]&}t          |t          j                  r
J |            't          | j        t
                    r.| j        D ](}t          |t          j                  r
J |            'd S d S rE   )r@   ro   torchSymIntrp   r   rq   )rB   rs   s1s      r   __post_init__z!FrameStateSizeEntry.__post_init__  s    dk5<88EE$+EEEdi'' 	:Y : :%a66999999dk5)) 	<k < <%b%,77;;;;;;	< 	<< <r   rc   r8   r>   c                j    | j         t          u rdS | j         t          u rdS | j         |         t          u S )NTF)rp   rw   rx   rB   rc   s     r   is_size_dynamicz#FrameStateSizeEntry.is_size_dynamic  s7    9$$49
""5y~--r   c                    t          | j        t                    rt          d | j        D                       sdS | j        t
          u rdS | j        t          u rdS | j        |         t
          u S )Nc              3  B   K   | ]}t          |          t          u V  d S rE   )typer8   )r   rs   s     r   r   z8FrameStateSizeEntry.is_stride_dynamic.<locals>.<genexpr>,  s,      0S0SAaC0S0S0S0S0S0Sr   FT)r@   rp   r   allrq   rw   rx   r   s     r   is_stride_dynamicz%FrameStateSizeEntry.is_stride_dynamic  sv    " ty%((	-00S0S0S0S0S-S-S	 5;,&&4;*$$5{3<//r   xstuple[int, ...]#tuple[Union[AutoDynamic, int], ...]c                4    t          d | D                       S )Nc              3  \   K   | ]'}t          |t          j                  rt          n|V  (d S rE   )r@   r   r   rw   )r   xs     r   r   z4FrameStateSizeEntry._munge_symint.<locals>.<genexpr>7  s7      TTAZ5<%@%@G\\aTTTTTTr   )r   )r   s    r   _munge_symintz!FrameStateSizeEntry._munge_symint5  s     TTQSTTTTTTr   r   c                :    t          |t          t                    S N)ro   rp   rq   )rY   rw   )clsr   s     r   make_scalarzFrameStateSizeEntry.make_scalar9  s    "!,|TTTTr   c                |    t          t          |                     |          |                     |                    S r   )rY   rw   r   )r   rp   rq   s      r   make_tensorzFrameStateSizeEntry.make_tensor=  s@     #""4(($$V,,
 
 
 	
r   c                `    t          t          |                     |          t                    S r   )rY   rx   r   )r   rp   s     r   	make_sizezFrameStateSizeEntry.make_sizeG  s0    """4((
 
 
 	
r   re   yUnion[AutoDynamic, _T]c                p    | t           u r|S |t           u r| S | t          u s|t          u s| |k    rt          S | S rE   )rx   rw   )r   r   s     r   _merge_atomzFrameStateSizeEntry._merge_atomO  sF    
??H
??H\ 1 1Q!VVr   -Union[AutoDynamic, AutoUnset, tuple[_T, ...]]ysAUnion[AutoDynamic, AutoUnset, tuple[Union[AutoDynamic, _T], ...]]c                    |t           u r|S |t           u r|S |t          u s	|t          u rt          S t          |          t          |          k    rt          S t           fdt	          ||          D                       S )Nc              3  J   K   | ]\  }}                     ||          V  d S rE   )r   )r   r   r   r   s      r   r   z6FrameStateSizeEntry._merge_atom_tup.<locals>.<genexpr>g  s5      CCtq!S__Q**CCCCCCr   )rx   rw   lenr   zip)r   r   r   s   `  r   _merge_atom_tupz#FrameStateSizeEntry._merge_atom_tupY  s     II|!3!3r77c"ggCCCCs2r{{CCCCCCr   r<   r
   c                    |                      | j        |j                  | _        |                     | j        |j                  | _        |                     | j        |j                  | _        | S rE   )r   ro   r   rp   rq   rA   s     r   __ior__zFrameStateSizeEntry.__ior__i  sX    &&t{ELAA((EJ??	**4;EEr   NrS   r#   r   )rc   r8   r#   r>   )r   r   r#   r   )r   r8   r#   rY   )rp   r   rq   r   r#   rY   )rp   r   r#   rY   )r   re   r   re   r#   r   )r   r   r   r   r#   r   )r<   r
   r#   r
   )r   r   r   r]   r^   rx   ro   rT   rp   rq   r   r   r   r   rU   r   classmethodr   r   r   r   r   r   r   r   r   rY   rY      s        1B1B:1V1V1VFVVVV 	*--- 	    
 	*---  . . . .& & & &:< < < <. . . .0 0 0 04 U U U \U U U U [U 
 
 
 [
 
 
 
 [
    \ D D D [D     r   rY   Fis_unspecialized_nn_moduletxr   r:   entryr   r>   c          
     6  
 t                               | j                  }t                      |         }t          j        j        j        r|j        v }|j                 }t          j	        |          
|z  }|r
j
        |j
        k    rt                              dj
        
j
                   t          j        dddt          
j
                  t          j
                  d           |rt                              d           	 dd
fd}|r܉
j        |j        k    rt%          
j        t&                    rt%          j        t&                    rt)          
j                  t)          j                  k    r |ddd           n`t+          t)          j                            D ]0}	
j        |	         j        |	         k    r |dd|	 dd|	           1n |ddd           |r܉
j        |j        k    rt%          
j        t&                    rt%          j        t&                    rt)          
j                  t)          j                  k    r |ddd           nt+          t)          j                            D ]0}	
j        |	         j        |	         k    r |dd|	 dd|	           1nN |ddd           n@|j                 
t                              d
j
        j
                   |j        <   }|S )Nz%automatic dynamic int %s val %s != %sr\   ro   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`.tup_namer"   short_reasonlong_reasoniOptional[int]r#   r   c           
     X   |t          |           nt          |           |         }|t          |           nt          |           |         }t                              d| |||           t          j        d|dn||t          |          t          |          d           d S )Nz#automatic dynamic %s %s %s %s != %sr\   r   r   )getattrlogdebugr   instantr"   )	r   r   r   r   	entry_tupold_entry_tupr   r:   	old_entrys	         r   log_tupz)update_automatic_dynamic.<locals>.log_tup  s     -.Ix(((75(;S;STU;V 
 9 	8,,,Y11!4 
 II5   &# ,-I551)!-00y>> 	 	 	 	 	r   rp   rc   zdimensionality changezsize(rI   zsize changer<   rq   zstride(zstride changez9automatic dynamic is off, overwriting int %s val %s -> %srE   )
r   r"   r   r"   r   r"   r   r   r#   r   )r6   rR   f_codeget_code_stater   _dynamoconfigautomatic_dynamic_shapesr\   copyro   r   r   r   r   r"   inforp   r@   r   r   rangerq   )r   r:   r   r   code_idframe_state	is_update	mut_entryr   r   r   s    ``       @r   update_automatic_dynamicr   p  s}    kk")$$G ""7+K}4 ^K99	1$7	Ii((	U	  	)Y-===II7 	   &# #+-!)"233u|,, 	 	 	 * O 	   TX	 	 	 	 	 	 	 	 	>  		29>99).%00 2Z
E5R5R 2y~&&#ej//99GFE+BCCCC"3uz??33 L L$>!,
1==#GFLALLL-KKKL 111 		4)Y-===)*E22 4z%,PU7V7V 4y'((C,=,===GHe-DEEEE"3u|#4#455 R R$+A.%,q/AA#GHnnnnoqQQQR '73331$7			GL		
 	
 	
 /4%d+	r   c                   | j         x}t          | |||          S |j        ||j        j        |<   |S d }|j        D ])}||j        v rt          | ||j        |         |          }*|J |S )Nr   )distributed_stater   
all_stateslocal_stater\   )r   r:   r   r   stres	sub_states          r   process_automatic_dynamicr     s     ""+''A	
 
 
 	
 
	 27(.  	 	Iy222./5/I	   
r   Optional[str]c                    t           j        j        j        rt	          d           d S d } t          j                    r&t          j                    rt          j                    } t           j	        j        j
        }t           j	        j        j        x}.|                    d          rt          d          | d|  d| S t           j                                        x}|\  }}d| d| d|  d| S d S )NzHdynamo_pgo force disabled by torch._inductor.config.force_disable_cachesmast:ztorch.compiler.config.job_id with prefix 'mast:' is reserved for automatically generated job id associated with a specific MAST job name and version.rJ   )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 V	
 	
 	
 t D t244 }
.

-C ^"))6<<   	-$  
 ""d""S"""-GGIIIV*6''F}FF'7FF$FFFFF4r   	cache_keyc                    t           j        j        j        st                              d           d S ddlm} t          j	        ddd|  d          }t          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   )r   r   code_state_keys      r   code_state_pathr  -  sy    =; 		;<<<t??????VOS2O	2O2O2OPPN7<<		X~>>>r   c                 >   t           j        j        j        rdS t           j        j        j        x} | S t                      sdS t           j                                        rdS 	 ddl	m
} n# t          $ r Y dS w xY w|t           j                            d          k    S )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 u]!>>K;; u,,.. uHHHHHHH   uu  5#8#M#M1$ $  s   $A+ +
A98A9!Optional[RemoteCache[JsonDataTy]]c                 b    ddl m}  t                      sd S  | 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  sK    999999-// t< 	  r   
code_stateOrderedSet[str]c                   t                      }| j                                        D ]Y\  }}d}t          |j        t
                    rt          |j        v }n|j        t          k    rd}|r|                    |           Z|S )NFT)	r   r\   itemsr@   rp   r   rw   ro   add)r  dynamic_sourcessrcfsdynamics        r   _collect_dynamic_sourcesr  ]  s    '1||O/5577 % %Rbgu%% 	"bg-GGY,&&G 	%$$$r   r   rM   r   c                2   t                               |           }t                      |         }d                    t	          |                    }|rDt          dx}d          5  t          j        ||           d d d            d S # 1 swxY w Y   d S d S )N,zpgo.dynamic_whitelistTlog_pt2_compile_event)recompile_dynamic_whitelist)r6   rR   r   r   r  r   r   pt2_compile)r   r   r   frame_whitelistr:   s        r   log_frame_dynamic_whitelistr#  j  s    kk&!!G ""7+Khh7DDEEO "99$QUVVV 	 	*/   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   &B

BBcsdefaultdict[CodeId, CodeState]c                2   d                     d |                                 D                       }t                      }|                                 D ]$}|                    t          |                     %|r|dd                     |           dz  }|S )N
c              3     K   | ]C\  }}| d d                     d |j                                        D                       z   V  DdS )z:
r'  c              3  P   K   | ]!\  }}d | d|                                  V  "dS )z  z: N)r   )r   r  r  s      r   r   z.render_code_state.<locals>.<genexpr>.<genexpr>x  sP       
 
*1#r%%%		%%
 
 
 
 
 
r   N)r   r\   r  )r   kvs      r   r   z$render_code_state.<locals>.<genexpr>v  s        
 Aq	 			
)) 
 
565H5N5N5P5P
 
 
 
 
	
     r   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  )r$  code_state_strr  states       r   render_code_stater1  u  s    YY  
 HHJJ    N (2||O @ @7>>???? 
dGJxxP_G`G`d d d	

 r   c                  f    e Zd Zed	d            Zeed
d                        Zedd            ZdS )PGOCacheArtifactr#   r   c                h    t          |                     | j                  | j                  }|J d S rE   )write_local_impl!_rewrite_cache_key_for_mega_cachekeyr0   )rB   metas     r   populate_cachezPGOCacheArtifact.populate_cache  s<    2248<<dl
 
 r   r"   c                     dS )Npgor   r   r   r   r   zPGOCacheArtifact.type  s	     ur   original_keyc                X    |                      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   )r<  new_keys     r   r6  z2PGOCacheArtifact._rewrite_cache_key_for_mega_cache  s:     &&w// 	 $&G3Nr   Nr   rS   )r<  r"   r#   r"   )r   r   r   r	   r9  rU   r   r6  r   r   r   r3  r3    s|              X     \ X    \  r   r3  c                   	 t           t           S t          t                    a t                      } | t           S d	fd}t	          |           		Xt
          j                            	          r8t          dx}d          5  t          j
        || 	           t          	d
          5 }	 |                                }t          j        |          a t          j
        ||                                           t!          j        t$                                          | |            |d          cd d d            cd d d            S # t(          $ r  t*                              d	d           Y nw xY w	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t/                      }|t          dx}dd          5  t          j
        || 	           	 |                    |           }|	 t3          |t4                    sJ |d         }t3          |t6                    sJ t9          j        |          }t          j
        |t=          |                     t          j        |          a t!          j        t$                                          | |            |d          cd d d            S # t(          $ r  t*                              d| d           Y nMw xY wt*                              d|            n-# t(          $ r  t*                              d| d           Y nw xY wd d d            n# 1 swxY w Y   t*                              d           t           J t           S )Ntyr"   r#   r%  c                &   t          t          t                    sJ t                              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 rE   r1  r`   r   r   r   rZ   z-get_code_state.<locals>.hit.<locals>.<lambda>      %k22 r   r;  T)r@   r`   r   r   r   r   r   r   r   deepcopyr_   )r@  r(   s    r   hitzget_code_state.<locals>.hit  s    +{333337r3{CSCSTTT!"2"""22	
 	
 	

 	t$$$=5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@  r"   r#   r%  ) r`   r   rW   r   r  r'   r(   r)   r   r   r!  r*   r+   pickleloadstellr   record_artifactr3  r   	Exceptionr   warningr  getr@   dictr"   base64	b64decoder   r   )
r   rI  r:   fr0   remote_cache
cache_datarR  payloadr(   s
            @r   r   r     s    i((KI      9%%DBGNN400..Dd
 
 
 	( 	( *49EEEE dD!! (Q(ffhhG"(,w"7"7K&24!&&((SSSS )8(--//G   3w<<( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( !   KK@$QU       ( ( ( ( ( ( ( ( ( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(, $%%L//D"&%H
 
 
 $	L $	L
 *49EEEEL)--i88
 )-)*d;;;;;)&1)$44444"("24"8"8*6 3w<<    '-l7&;&; -<,1133Y    #s8}}E$	L $	L $	L $	L $	L $	L $	L $	L0 %   O%%) $      HH?KKKK7    =ySW      $	L $	L $	L $	L $	L $	L $	L $	L $	L $	L $	L $	L $	L $	L $	LL HH+,,,"""s   'F -F	/AE?7F	6F 'E96F	8E99F	=F 	F	F F	F  F$'F$M(L=M BK7M'K/,M.K//M'L85M7L88MMMc                 8   t           t                              d           d S t           t          k    rt                              d           d S t	                      } | t                              d           d S t          |            t          |            d S )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_staterJ  s    r   put_code_statere    s    DEEE&&&6777I9:::###)$$$$$r   pickled_codebytesOptional[tuple[str, int]]c                   t          |           }|d S |dz   }|dz   }ddlm} t          j        t          j                            |          d            ||t                    5  t          |d          5 }|	                    |           |
                                }d d d            n# 1 swxY w Y   t          j        ||           d d d            n# 1 swxY w Y   ||fS )	Nz.tmpz.lockr   )FileLockT)exist_ok)timeoutwb)r  torch.utils._filelockrj  r'   makedirsr(   dirnameLOCK_TIMEOUTr*   writerV  replace)r   rf  r(   tmp_path	lock_pathrj  r^  rp   s           r   r5  r5    so   9%%D|t
 f}HwI /.....K%%5555	)\	2	2	2 # #(D!! 	QGGL!!!6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
8T"""	# # # # # # # # # # # # # # #
 :s6   )C:*B0$C0B4	4C7B4	8CC #C c                R   t          dx}d          5  t          j        ||            t          J t	          j        t                    }t          j        t          	                                | |           t          | |          }|(t                              d           	 d d d            d S |\  }}t          j        ||           t                              d|t          t                               t          dd	d
            d d d            d S # 1 swxY w Y   d S )Nzpgo.put_local_code_stateTr  rJ  z$put_code_state: local cache disabledrK  z*put_code_state: wrote local %s, %d entriesrc  rD  c                 *    t          t                    S rE   rF  r   r   r   rZ   z&put_local_code_state.<locals>.<lambda>G  rG  r   )r   r   r!  r`   rT  dumpsr   rW  r3  r   r5  r   r   r   r   )r   r:   rf  r8  r(   rp   s         r   rc  rc  1  s   	88dPT	U	U	U 
 
&tyAAAA&&&|K00,!!##Y	
 	
 	
  	<88<HH;<<<
 
 
 
 
 
 
 
 
d&tdCCCC=tSEUEUVVV!"22	
 	
 	
%
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   BD4ADD #D c                   t          dx}dd          5  t          j        ||            t          J t	                      }|(t
                              d           	 d d d            d S t          j        t                    }t          j        |t          |                     dt          j        |                              d	          i}|                    | |           t
                              d
| t          t                               t          ddd            d d d            d S # 1 swxY w Y   d S )Nzpgo.put_remote_code_stateT!pgo_put_remote_code_state_time_usrP  rJ  z%put_code_state: remote cache disabledrK  rR  asciiz+put_code_state: wrote remote %s, %d entriesrd  rD  c                 *    t          t                    S rE   rF  r   r   r   rZ   z'put_remote_code_state.<locals>.<lambda>g  rG  r   )r   r   r!  r`   r  r   r   rT  rx  r   r\  	b64encodedecodeputr   )r   r:   r_  r0   r`  s        r   rd  rd  K  s   	++"!D
 
 
 
 

 	&tyAAAA&&&'))HH<===
 
 
 
 
 
 
 
 ,{++&tc'llKKKKF$W--44W=="

 	J///99c+FVFV	
 	
 	
 	"#22	
 	
 	
1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AD5-B;D55D9<D9c                     d a d ad S rE   )r`   r_   r   r   r   reset_code_stater  l  s    Kr   )r!   r"   r#   r"   )
r   r   r:   r"   r   rY   r   r>   r#   rY   )r#   r   )r   r"   r#   r   )r#   r>   )r#   r
  )r  rW   r#   r  )r   rM   r#   r   )r$  r%  r#   r"   )r#   r%  r   )r   r"   rf  rg  r#   rh  )r   r"   r#   r   )[rd   
__future__r   r\  r   r]   enum	functoolsloggingr'   rT  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   rq  cacher3   	dataclassr6   rW   r_   rT   r`   rb   re   Enumrg   ri   rx   rl   rw   rY   r   r   r   r  r	  r  r  r#  r1  registerr3  r   re  r5  rc  rd  r  r   r   r   <module>r     s  	 	 	 # " " " " "             				  				  # # # # # # : : : : : : : : : : : : , , , , , , , ,                                    ) ( ( ( ( ( > > > > > >         
 0 / / / / /  ELLLDDDDDDDDDDDDDD	 	 	 	 	* 	 	 	 g!!j 	 	 	 	 d###$
 $
 $
 $
 $
 $
 $
 $#$
N         >B  A A A A8< < < < < d###       $#( WT]]    	    _
    $)      J J J J J J J Jd (-i i i i i ib (-+ + + + + +\   F? ? ? ?   .   
 
 
 
      (     }   8] ] ] ]@% % % %$   2
 
 
 
4
 
 
 
B     r   