
    %Vji&                    8   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        d^d            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 <    ej;        d           G d! d"                      ZB ed#          ZC G d$ d%ejD                  ZEeEjF        ZG G d& d'ejD                  ZHeHjF        ZIej;         G d( d)                      ZJdd*d_d0ZKdd*d_d1ZLd`d3ZMdad5ZNdbd7ZOdcd9ZPddd:ZQded<ZRdfd?ZSdgdCZTdhdFZUdidIZVe)jW         G dJ dKe(                      ZXdjdMZYdkdNZZ	 dldmdRZ[dkdSZ\dndTZ]dodUZ^dpdVZ_dqdZZ`dnd[Zadnd\Zbdpd]ZcdS )ra  
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__     K/root/voice-cloning/.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_ALLOWLISTc                      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   re   re      s%            HHHHHr   re   _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   rg   tokenr   r   r   rj   rj               
 EEEr   rj   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   Nrk   r   r   r   ro   ro      rm   r   ro   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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   re   rf   r"   )rv   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   ).0rv   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 {repr(self)})rv   rw   r#   r"   )r}   r~   r#   r"   )rs   rz   rt   rr   rA   tuple)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 &%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   rr   torchSymIntrs   r   rt   )rC   rv   s1s      r   __post_init__z!FrameStateSizeEntry.__post_init__  s    dk5<88EE$+EE8di'' 	:Y : :%a66999969dk5)) 	<k < <%b%,77;;;;7;	< 	<< <r   rf   r8   r>   c                j    | j         t          u rdS | j         t          u rdS | j         |         t          u S )NTF)rs   rz   r{   rC   rf   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   rv   s     r   r   z8FrameStateSizeEntry.is_stride_dynamic.<locals>.<genexpr>-  s,      0S0SAaC0S0S0S0S0S0Sr   FT)rA   rs   r   allrt   rz   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   rz   )r   xs     r   r   z4FrameStateSizeEntry._munge_symint.<locals>.<genexpr>8  s7      TTAZ5<%@%@G\\aTTTTTTr   )r   )r   s    r   _munge_symintz!FrameStateSizeEntry._munge_symint6  s     TTQSTTTTTTr   r   c                :    t          |t          t                    S N)rr   rs   rt   )rZ   rz   )clsr   s     r   make_scalarzFrameStateSizeEntry.make_scalar:  s    "!,|TTTTr   c                |    t          t          |                     |          |                     |                    S r   )rZ   rz   r   )r   rs   rt   s      r   make_tensorzFrameStateSizeEntry.make_tensor>  s@     #""4(($$V,,
 
 
 	
r   c                `    t          t          |                     |          t                    S r   )rZ   r{   r   )r   rs   s     r   	make_sizezFrameStateSizeEntry.make_sizeH  s0    """4((
 
 
 	
r   rh   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{   rz   )r   r   s     r   _merge_atomzFrameStateSizeEntry._merge_atomP  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>h  s5      CCtq!S__Q**CCCCCCr   )r{   rz   lenr   zip)r   r   r   s   `  r   _merge_atom_tupz#FrameStateSizeEntry._merge_atom_tupZ  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   rr   r   rs   rt   rB   s     r   __ior__zFrameStateSizeEntry.__ior__j  sX    &&t{ELAA((EJ??	**4;EEr   NrT   r#   r   )rf   r8   r#   r>   )r   r   r#   r   )r   r8   r#   rZ   )rs   r   rt   r   r#   rZ   )rs   r   r#   rZ   )r   rh   r   rh   r#   r   )r   r   r   r   r#   r   )r<   r
   r#   r
   )r   r   r   r^   r_   r{   rr   rU   rs   rt   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]   rr   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   rs   rf   zdimensionality changezsize(rJ   zsize changer<   rt   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]   copyrr   r   r   r   r   r"   infors   rA   r   r   rangert   )r   r:   r   r   code_idframe_state	is_update	mut_entryr   r   r   s    ``       @r   update_automatic_dynamicr   q  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   0  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  F  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   rs   r   rz   rr   add)r  dynamic_sourcessrcfsdynamics        r   _collect_dynamic_sourcesr$  k  s    '1||O/5577 % %Rbgu%% 	"bg-GGY,&&G 	%$$$r   r   rN   r   c                   t                               |           }t                      |         }d                    t	          |                    }|rnt          dx}d          5  t          j        ||           d d d            n# 1 swxY w Y   t          s(t          j
                            ddd	           dad S d S d S )
N,zpgo.dynamic_whitelistTlog_pt2_compile_event)recompile_dynamic_whitelist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_description)r6   rS   r   r   r$  r   r   pt2_compilerc   r   r   add_mlhub_insight)r   r   r   frame_whitelistr:   s        r   log_frame_dynamic_whitelistr1  x  s*   kk&!!G ""7+Khh7DDEEO -"99$QUVVV 	 	*/   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ) 		-!332>%) 4    )-%%%- -
		- 		-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:
r5  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$  )r2  code_state_strr   states       r   render_code_stater?    s    YY  
 HHJJ    N (2||O @ @7>>???? 
dGJxxP_G`G`d d d	

 r   r!  dstc                L    dd} ||            ||          k    r|| z  }d S d S )Nr   rZ   r#   r8   c                b    t          | j        t                    sdS t          | j                  S )N)rA   rs   r   r   )r   s    r   r   zmerge_pgo_entry.<locals>.rank  s)    %*e,, 	25:r   )r   rZ   r#   r8   r   )r!  r@  r   s      r   merge_pgo_entryrD    sH       
 tCyyDDIIs
 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   )rN  new_keys     r   rI  z2PGOCacheArtifact._rewrite_cache_key_for_mega_cache  s:     &&w// 	 $&G3Nr   Nr   rT   )rN  r"   r#   r"   )r   r   r   r	   rK  rV   r   rI  r   r   r   rF  rF    s|              X     \ X    \  r   rF  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   r?  rb   r   r   r   r[   zhit.<locals>.<lambda>  s    !+.. r   rM  T)rA   rb   r   r   r   r   r   r   r   deepcopyra   )r   rQ  s     r   hitrY    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   r.  r*   r+   pickleloadsrb   tellr   record_artifactrF  r   rY  	Exceptionr   warning)r   r(   r:   fr0   s        r   get_local_code_staterh    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datar\  z1get_code_state failed parsing remote result on %sTr_  z get_code_state remote miss on %sz'get_code_state failed remote read on %s)getrA   dictr"   base64	b64decoder   r.  r   ra  rb  r   rd  rF  r   re  r   rf  r   )ri  r   rk  r  
cache_datarm  payloads          r   lookup_remote_cache_entryrt    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r(  dynamo_compile_column_usr[  remote)r  r   r   r.  rt  rb   rY  )r   ri  r:   r  s       r   get_remote_code_staterz    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                R   t           J t                      }|t          dx}dd          5  t          j        ||            t          ||           t                              d| t                    nd           	                                D ]^\  }}|t           v rF|j
        	                                D ]+\  }}t          |t           |         j
        |                    ,T|t           |<   _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.add_extra_remote_code_stateTrv  rw  r[  z'add_extra_code_state %s hit, %d entriesr   add_extra_remote_code_staterU  c                 "    t                     S rF   )r?  )r  s   r   r[   z-add_extra_remote_code_state.<locals>.<lambda>O  s    -j99 r   )rb   r  r   r   r.  rt  r   r   r   r  r]   rD  r   )r   ri  r:   r   r>  r!  r   r  s          @r   r|  r|  (  s   
 """#%%L55D"&%H
 
 
 	 	
 *49EEEE2<KKJHH9#-#9Jq  
 %&0&6&6&8&8 5 5NGU+--*/*A*G*G*I*I  JC
 , %{7';'Mc'R    05G,,)19999  7	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  s   CDD!Dc                 x   t           t           S t          t                    a t                      } | t           S t	          |           }|t          |            t          j        j        j	        x} t          |          }|t          |           t                              d           t           J t           S )Nzget_code_state using default)rb   r   rX   r   rh  rz  r   r   r   pgo_extra_read_keyr   r|  r   r   )r   local_code_statesticky_readextra_read_keys       r   r   r   S  s     i((KI ,I66 i((( ~,??L,[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  r  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*   writerc  replace)r   r  r(   tmp_path	lock_pathr  rg  rs   s           r   rH  rH    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'  r[  z$put_code_state: local cache disabledr\  z*put_code_state: wrote local %s, %d entriesr  rU  c                 *    t          t                    S rF   rW  r   r   r   r[   z&put_local_code_state.<locals>.<lambda>      %k22 r   )r   r   r.  rb   ra  dumpsr   rd  rF  r   rH  r   r   r   r   )r   r:   r  rJ  r(   rs   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 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_usrw  r[  z%put_code_state: remote cache disabledr\  rm  asciiz+put_code_state: wrote remote %s, %d entriesr  rU  c                 *    t          t                    S rF   rW  r   r   r   r[   z'put_remote_code_state.<locals>.<lambda>  r  r   )r   r   r.  rb   r  r   r   ra  r  r   rp  	b64encodedecodeputr   )r   r:   ri  r0   rr  s        r   r  r    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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   rN   r#   r   )r2  r3  r#   r"   )r!  rZ   r@  rZ   r#   r   )r   r"   rQ  r"   r#   r3  )r   r"   r#   r`   rF   )ri  rj  r   r"   rk  r   r#   r`   )r   r"   r#   r   )r#   r3  r   )r   r"   r  r  r#   r  )drg   
__future__r   rp  r   r^   enum	functoolsloggingr'   ra  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   re   rh   Enumrj   rl   r{   ro   rz   rZ   r   r   r   r   r   r
  r  r  r$  r1  r?  rD  registerrF  rY  rh  rt  rz  r|  r   r  rH  r  r  r  r   r   r   <module>r     sQ  	 	 	 # " " " " "             				  				  # # # # # # : : : : : : : : : : : : , , , , , , , ,                                    ) ( ( ( ( ( > > > > > >         
 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 (-+ + + + + +\! ! ! !   4( ( ( (? ? ? ?   .   
 
 
 
- - - -,   (        }   8      < !%" " " " "J   "( ( ( (V   >3 3 3 3,   2
 
 
 
4
 
 
 
B& & & & & &r   