
    9i'                    `   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        dad            Z: ej;        d           G d d                      Z<ej;         G d d                      Z=da>de?d<   da@de?d<   daAde?d <    eB            aCd!e?d"<    ej;        d           G d# d$                      ZD ed%          ZE G d& d'ejF                  ZGeGjH        ZI G d( d)ejF                  ZJeJjH        ZKej;         G d* d+                      ZLdd,dbd2ZMdd,dbd3ZNdcd5ZOddd7ZPded9ZQdfd;ZRdgd<ZSdhd>ZTdidAZUdjdCZVdkdGZWdldHZXdmdKZYe)jZ         G dL dMe(                      Z[dndOZ\dodPZ]	 dpdqdTZ^dodUZ_drdVZ`dsdWZadldXZbdtd\Zcdrd]Zddudvd_Zedld`ZfdS )wa  
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__     D/var/www/icac/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   rC   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:   rG   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 rF   )r6   co_filenameco_firstlinenoco_namer3   )rM   s    r   makezCodeId.make   s3    L!$"233	
 
 	
r   N)r<   r=   r#   r>   )r#   r8   r#   r"   )rM   rN   r#   r6   )	r   r   r   __annotations__rD   rH   rL   staticmethodrS   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 rF   )r   FrameStateSizeEntryr   r   r   <lambda>zCodeState.<lambda>   s    ,? @ @ r   )default_factoryz%defaultdict[str, FrameStateSizeEntry]automatic_dynamicN)r   r   r   dataclassesfieldr]   rU   r   r   r   rX   rX      sM         ?P{?P@@@ @ @      r   rX   (Optional[defaultdict[CodeId, CodeState]]_INIT_CODE_STATE_CODE_STATEFr>   _LOGGED_DYNAMIC_ALLOWLISTzset[str]_KNOWN_DYNAMIC_SOURCESc                      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__rU   r   r   r   rf   rf      s%            HHHHHr   rf   _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   rh   tokenr   r   r   rk   rk               
 EEEr   rk   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   Nrl   r   r   r   rp   rp      rn   r   rp   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 )0rZ   )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t          |            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(rJ   )auto_dynamic
auto_unsetrA   rf   rg   r"   )rw   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 rF   r   ).0rw   r}   s     r   	<genexpr>zCFrameStateSizeEntry.render.<locals>.render_tuple.<locals>.<genexpr>   s-      "@"@==#3#3"@"@"@"@"@"@r   ])join)r~   r}   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 )rw   rx   r#   r"   )r~   r   r#   r"   )rt   r{   ru   rs   rA   tuplerepr)rC   r   r}   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 '$t**&&&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 rF   )rA   rs   torchSymIntrt   r   ru   )rC   rw   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   rg   r8   r>   c                j    | j         t          u rdS | j         t          u rdS | j         |         t          u S )NTF)rt   r{   r|   rC   rg   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 rF   )typer8   )r   rw   s     r   r   z8FrameStateSizeEntry.is_stride_dynamic.<locals>.<genexpr>/  s,      0S0SAaC0S0S0S0S0S0Sr   FT)rA   rt   r   allru   r{   r|   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 rF   )rA   r   r   r{   )r   xs     r   r   z4FrameStateSizeEntry._munge_symint.<locals>.<genexpr>:  s7      TTAZ5<%@%@G\\aTTTTTTr   )r   )r   s    r   _munge_symintz!FrameStateSizeEntry._munge_symint8  s     TTQSTTTTTTr   r   c                :    t          |t          t                    S N)rs   rt   ru   )rZ   r{   )clsr   s     r   make_scalarzFrameStateSizeEntry.make_scalar<  s    "!,|TTTTr   c                |    t          t          |                     |          |                     |                    S r   )rZ   r{   r   )r   rt   ru   s      r   make_tensorzFrameStateSizeEntry.make_tensor@  s@     #""4(($$V,,
 
 
 	
r   c                `    t          t          |                     |          t                    S r   )rZ   r|   r   )r   rt   s     r   	make_sizezFrameStateSizeEntry.make_sizeJ  s0    """4((
 
 
 	
r   ri   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 rF   )r|   r{   )r   r   s     r   _merge_atomzFrameStateSizeEntry._merge_atomR  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 rF   )r   )r   r   r   r   s      r   r   z6FrameStateSizeEntry._merge_atom_tup.<locals>.<genexpr>j  s5      CCtq!S__Q**CCCCCCr   )r|   r{   lenr   zip)r   r   r   s   `  r   _merge_atom_tupz#FrameStateSizeEntry._merge_atom_tup\  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 rF   )r   rs   r   rt   ru   rB   s     r   __ior__zFrameStateSizeEntry.__ior__l  sX    &&t{ELAA((EJ??	**4;EEr   NrT   r#   r   )rg   r8   r#   r>   )r   r   r#   r   )r   r8   r#   rZ   )rt   r   ru   r   r#   rZ   )rt   r   r#   rZ   )r   ri   r   ri   r#   r   )r   r   r   r   r#   r   )r<   r
   r#   r
   )r   r   r   r^   r_   r|   rs   rU   rt   ru   r   r   r   r   rV   r   classmethodr   r   r   r   r   r   r   r   r   rZ   rZ      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   rZ   is_unspecialized_nn_moduletxr   r:   entryr   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]   rs   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   rt   rg   zdimensionality changezsize(rJ   zsize changer<   ru   zstride(zstride changez9automatic dynamic is off, overwriting int %s val %s -> %srF   )
r   r"   r   r"   r   r"   r   r   r#   r   )r6   rS   f_codeget_code_stater   _dynamoconfigautomatic_dynamic_shapesr]   copyrs   r   r   r   r   r"   infort   rA   r   r   rangeru   )r   r:   r   r   code_idframe_state	is_update	mut_entryr   r   r   s    ``       @r   update_automatic_dynamicr   s  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   keyc                    d }t          j                    r&t          j                    rt          j                    }t          j        j        j        }|  d| d| S )NrK   )distis_availableis_initializedget_rankr   compilerr   cache_key_tag)r   ranktags      r   format_cache_keyr     s^     D t244 }
.

-C  D  3   r   Optional[str]c                 ^   t           j        j        j        rt	          d           d S t           j        j        j        x} 3|                     d          rt          d          t          |           S t           j	        
                                x}|\  }}t          d| d|           S d S )NGdynamo_pgo force disabled by torch.compiler.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.rK   )r   r   r   force_disable_cachesr   job_id
startswithr   r   _utils_internalget_mast_job_name_version)rname_versionmast_job_namemast_job_versions       r   get_cache_keyr     s    ~1 U	
 	
 	
 t ^"))6<<   	-$  
  """-GGIIIV*6'' J J J8H J JKKK4r   
sticky_keyc                n    t           j        j        j        rt	          d           d S t          |           S )Nr   )r   r   r   r   r   r   )r   s    r   get_extra_cache_keyr   2  s<    ~1 U	
 	
 	
 tJ'''r   	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  H  s    ~1 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  _  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]   itemsrA   rt   r   r{   rs   add)r  dynamic_sourcessrcfsdynamics        r   _collect_dynamic_sourcesr&  m  s    '1||O/5577 % %Rbgu%% 	"bg-GGY,&&G 	%$$$r   all_sourcesc                    ddl m} t                      }| D ]G}|t          v r ||          rt                              |           2|                    |           H|S )Nr   )is_dynamic_source)torch._dynamo.variables.builderr)  r   rd   r!  )r'  r)  missing_sourcesr#  s       r   _collect_missing_sourcesr,  z  s    AAAAAA (2||O ! !(((s## 	"&&s+++C    r   r   rN   r   c                |   t                               |           }t                      |         }t          |          }d                    |          }d                    t          |                    }|rEt          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missing_dynamic_whitelist)	r6   rS   r   r&  r   r,  r   r   pt2_compile)r   r   r   all_dynamic_sourcesframe_whitelistmissing_whitelistr:   s          r   log_frame_dynamic_whitelistr7    s   kk&!!G ""7+K2;??hh233O!9:M!N!NOO "99$QUVVV 	 	*,;*;   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   
B//B36B3c                 `    t           s&t          j                            ddd           da d S d S )Ndynamic_shapes_analysisz$Dynamic shape recompilation detectedzPGO detected a recompilation due to dynamic shapes.             Please follow the instruction from the action link to reduce             recompilation overhead.)categoryinsightinsight_descriptionT)rc   r   r   add_mlhub_insightr   r   r   _log_size_mismatch_recompiler>    sM    $ 	)//.:!% 	0 	
 	
 	
 %)!!!	) 	)r   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:
rB  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>  sP       
 
*1#r%%%		%%
 
 
 
 
 
r   N)r   r]   r   )r   kvs      r   r   z$render_code_state.<locals>.<genexpr>  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_staterL    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 rF   )write_local_impl!_rewrite_cache_key_for_mega_cacher   r0   )rC   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   )rV  new_keys     r   rQ  z2PGOCacheArtifact._rewrite_cache_key_for_mega_cache  s:     &&w// 	 $&G3Nr   Nr   rT   )rV  r"   r#   r"   )r   r   r   r	   rS  rV   r   rQ  r   r   r   rN  rN    s|              X     \ X    \  r   rN  tyc                $   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 rF   rL  rb   r   r   r   r[   zhit.<locals>.<lambda>  s    !+.. r   rU  T)rA   rb   r   r   r   r   r   r   r   deepcopyra   )r   rY  s     r   hitra    s    k;/////HH3S"c+>N>NOOOr..  
 E4   }[11r   c                   t          |           }|]t          j                            |          r=t	          dx}d          5  t          j        ||            t          |d          5 }	 |                                }t          j
        |          at          j        ||                                           t          j        t                                          | |           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   d S )
Nzpgo.get_local_code_stateTr/  r  r%   cache_size_byteslocalz&get_code_state failed while reading %sexc_info)r  r'   r(   r)   r   r   r3  r*   r+   pickleloadsrb   tellr   record_artifactrN  r   ra  	Exceptionr   warning)r  r(   r:   fr0   s        r   get_local_code_staterp    s1   9%%DBGNN400..Dd
 
 
 	. 	. *49EEEE dD!! .Q.ffhhG"(,w"7"7K&24!&&((SSSS )8(--//G   tW--. . . . . . .	. 	. 	. 	. 	. 	. 	. 	. !   KK@$QU       . . . . . . . . . . . . . . .	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.( 4sa   'E%-E/AD?<E;E%'D>;E=D>>EE%E	E%E	E%%E),E)remote_cacheRemoteCache[JsonDataTy]
event_namec                   d }	 |                      |          }|	 t          |t                    sJ |d         }t          |t                    sJ t	          j        |          }|#t          j        |t          |                     t          j
        |          }t          j        t                                          ||           nv# t          $ r  t                               d|d           Y nMw xY wt                               d|           n-# t          $ r  t                               d|d           Y nw xY w|S )Ndatard  z1get_code_state failed parsing remote result on %sTrg  z get_code_state remote miss on %sz'get_code_state failed remote read on %s)getrA   dictr"   base64	b64decoder   r3  r   ri  rj  r   rl  rN  r   rm  r   rn  r   )rq  r  rs  r  
cache_dataru  payloads          r   lookup_remote_cache_entryr|    s   
 JD!%%i00
 !!*d33333!&)!$,,,,, *400)&2"S\\    $\'22
 %4$))++Y       G!       HH7CCCC3  Y Y Y=ySWXXXXXY4 s#   D BC 'C76C7'E ?E c                   t                      }|tt          dx}dd          5  t          j        ||            t	          || |          }||at          | d          cd d d            S 	 d d d            n# 1 swxY w Y   d S )Nzpgo.get_remote_code_stateT!pgo_get_remote_code_state_time_usr0  dynamo_compile_column_usrc  remote)r  r   r   r3  r|  rb   ra  r  rq  r:   r  s       r   get_remote_code_stater  &  s    #%%L//D"&%H
 
 
 		0 		0
 *49EEEE2<DQQJ%(9h//		0 		0 		0 		0 		0 		0 		0 		0 &		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 4s   ;A::A>A>c                   t           J t                      }|t          dx}dd          5  t          j        ||            t          ||           t                              d| t                    nd           t           rJ a t          d	d
fd           ddd           dS # 1 swxY w Y   dS dS )zo
    Reads an additional PGO profile from the given cache key, and merges it with the default PGO profile.
    Nzpgo.get_extra_remote_code_stateTr~  r  rc  z'get_extra_code_state %s hit, %d entriesr   get_extra_remote_code_stater]  c                 "    t                     S rF   )rL  )r  s   r   r[   z-get_extra_remote_code_state.<locals>.<lambda>S  s    -j99 r   )
rb   r  r   r   r3  r|  r   r   r   r   r  s      @r   r  r  7  sC   
 """#%%L55D"&%H
 
 
 	 	
 *49EEEE2<KKJHH9#-#9Jq  
 %&&&&()19999  !	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  s   A5B11B58B5c                    t           t           S t          t                    a t                      } | t           S t	          |           }|t          |            t           s8t          j        j        j	        x} t          |          }|t          |           t                              d           t           J t           S )Nzget_code_state using default)rb   r   rX   r   rp  r  r   r   r   pgo_extra_read_keyr   r  r   r   )r  local_code_statesticky_readextra_read_keys       r   r   r   W  s     i((KI ,I66 i((( 8!N1DD[Q,[99%'777HH+,,,"""r   c                    t           t                              d           d S t           t          k    rt                              d           d S t	                      } | t                              d           d S t          |            t          |            t          j        j	        j
        x}"t          |          }|t          |           d S d S d S )Nz1put_code_state: never initialized, will not writez#put_code_state: no change, skippingz&put_code_state: no cache key, skipping)rb   r   r   ra   r   put_local_code_stateput_remote_code_stater   r   r   pgo_extra_write_keyr   )r  sticky_writeextra_write_keys      r   put_code_stater  y  s    DEEE&&&6777I9:::###)$$$-AAN-l;;&!/22222 ON&&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._filelockr  r'   makedirsr(   dirnameLOCK_TIMEOUTr*   writerk  replace)r  r  r(   tmp_path	lock_pathr  ro  rt   s           r   rP  rP    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/  rc  z$put_code_state: local cache disabledrd  z*put_code_state: wrote local %s, %d entriesr  r]  c                 *    t          t                    S rF   r_  r   r   r   r[   z&put_local_code_state.<locals>.<lambda>      %k22 r   )r   r   r3  rb   ri  dumpsr   rl  rN  r   rP  r   r   r   r   )r  r:   r  rR  r(   rt   s         r   r  r    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 extra_code_statec           	        |sdnd}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 S # 1 swxY w Y   d S )Nr  put_extra_remote_code_statezpgo.T!pgo_put_remote_code_state_time_usr  rc  z%s: remote cache disabledrd  ru  asciiz%s: wrote remote %s, %d entriesr]  c                 *    t          t                    S rF   r_  r   r   r   r[   z'put_remote_code_state.<locals>.<lambda>  r  r   )r   r   r3  rb   r  r   r   ri  r  r   rx  	b64encodedecodeputr   )r  r  rs  r:   rq  r0   rz  s          r   r  r    s     	+* 
 
#z###"!D
 
 
 
 

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

 	J///-z9c+FVFV	
 	
 	
 	"22	
 	
 	
1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AE 7B<E  EEc                     d a d adad S r@   )rb   ra   rc   r   r   r   reset_code_stater    s    K %r   )r!   r"   r#   r"   )
r   r   r:   r"   r   rZ   r   r>   r#   rZ   )r   r"   r#   r"   )r#   r   )r   r"   r#   r   )r  r"   r#   r   )r#   r>   )r#   r  )r  rX   r#   r  )r'  r  r#   r  )r   rN   r#   r   r   )r?  r@  r#   r"   )r   r"   rY  r"   r#   r@  )r  r"   r#   r`   rF   )rq  rr  r  r"   rs  r   r#   r`   )r  r"   r#   r   )r#   r@  )r  r"   r  r  r#   r  )F)r  r"   r  r>   r#   r   )grh   
__future__r   rx  r   r^   enum	functoolsloggingr'   ri  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   r  cacher3   	dataclassr6   rX   ra   rU   rb   rc   setrd   rf   ri   Enumrk   rm   r|   rp   r{   rZ   r   r   r   r   r   r  r  r  r&  r,  r7  r>  rL  registerrN  ra  rp  r|  r  r  r   r  rP  r  r  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< < < < <"'  ' ' ' '#&355  ( ( ( ( d###       $#( WT]]    	    _
    $)      J J J J J J J Jd (-i i i i i ib (-+ + + + + +\! ! ! !   4( ( ( (? ? ? ?   .   
 
 
 
       ) ) ) )   (     }   8      < !%" " " " "J   "   @   D3 3 3 3,   2
 
 
 
4"
 "
 "
 "
 "
L& & & & & &r   