
    a,jV                    h   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 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l.m/Z/m0Z0  G d de1          Z2 ej3        e4          Z5dZ6ej7        dfd            Z8dgdZ9dgd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/ d0                      ZLd#d1dhd7ZMd#d1dhd8ZNdid:ZOdjd<ZPdkd>ZQdld@ZRdmdAZSdndCZTdodFZUdpdHZVdqdLZWdrdMZXdsdPZYe'jZ         G dQ dRe&                      Z[dtdTZ\dudUZ]	 dvdwdYZ^dudZZ_dxd[Z`dyd\Zadrd]ZbdzdaZcdxdbZdd{d|ddZedrdeZfdS )}a  
Profile Guided Optimization (PGO) implementation for Dynamo.

This module provides functionality for caching and managing code state profiles
that guide optimization decisions in Dynamo. It implements both local and remote
caching mechanisms for storing profile information across runs, handles profile
merging across distributed ranks, and manages the lifecycle of profile data
during compilation. The profiles track dynamic vs static properties of tensors
and help Dynamo make better specialization decisions.
    )annotationsN)defaultdict)TYPE_CHECKINGTypeVar)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__     Q/var/www/html/banglarbhumi/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_filer1   r   s     7>>(## 	h		 ))++j))kJ.66	                 s   =A<<B B r.   types.CellTypeobjectc                R    t          |           rt          | d          r| j        S d S )N__code__)callablehasattrr5   r.   s    r   _get_closure_contentr9      s1      WWj99  4r   c                N    	 t          | j                  S # t          $ r Y d S w xY wN)r9   cell_contents
ValueErrorr8   s    r   _get_cell_hash_contentr>      s:    #G$9:::   tts    
$$T)frozenc                  z    e Zd ZU ded<   ded<   ded<   ded<   dZded	<   ddZddZddZe	 ddd            Z	dS )CodeIdr    filenameintfirstlinenoname	file_hashN
int | Noneclosure_hashotherr3   r!   boolc                    t          |t                    sdS | j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S NF)
isinstancerA   rF   rD   rE   rH   )selfrI   s     r   __eq__zCodeId.__eq__   sc    %(( 	5Neo- 8 E$558	UZ'8 !U%77		
r   c                P    t          | j        | j        | j        | j        f          S r;   )r0   rF   rE   rD   rH   rN   s    r   __hash__zCodeId.__hash__   s#    T^TY0@$BSTUUUr   c                F    d| j          d| j         d| j         d| j         S )Nzhash():)rF   rB   rD   rE   rQ   s    r   __str__zCodeId.__str__   s1    Vt~VVVV8HVV49VVVr   codetypes.CodeTypeclosure!tuple[types.CellType, ...] | Nonec                    d }|r&t          t          d |D                                 }t          | j        | j        | j        t          | j                  |          S )Nc              3  4   K   | ]}t          |          V  d S r;   )r>   ).0cs     r   	<genexpr>zCodeId.make.<locals>.<genexpr>   s+      %Q%QA&<Q&?&?%Q%Q%Q%Q%Q%Qr   )r0   tuplerA   co_filenameco_firstlinenoco_namer1   )rW   rY   rH   s      r   makezCodeId.make   sj      	S%Q%Q%Q%Q%Q Q QRRLL!$"233
 
 	
r   )rI   r3   r!   rJ   )r!   rC   r!   r    r;   )rW   rX   rY   rZ   r!   rA   )
r   r   r   __annotations__rH   rO   rR   rV   staticmethodrd   r   r   r   rA   rA      s         MMMIII NNN#L####
 
 
 
V V V VW W W W KO
 
 
 
 \
 
 
r   rA   c                  >    e Zd ZU  ej        d           Zded<   dS )	CodeStatec                 *    t          t                    S r;   )r   FrameStateSizeEntryr   r   r   <lambda>zCodeState.<lambda>   s    ,? @ @ r   )default_factoryz%defaultdict[str, FrameStateSizeEntry]automatic_dynamicN)r   r   r   dataclassesfieldrn   rf   r   r   r   ri   ri      sM         ?P{?P@@@ @ @      r   ri   %defaultdict[CodeId, CodeState] | None_INIT_CODE_STATE_CODE_STATEFrJ   _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.
    rC   dimN)r   r   r   __doc__rf   r   r   r   rw   rw      s%            HHHHHr   rw   _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   ry   tokenr   r   r   r|   r|               
 EEEr   r|   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   Nr}   r   r   r   r   r      r   r   r   c                     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<    ej        dd	
          Z
ded<    ej        dd	
          Zded<   d,dZd-dZd.dZd.dZed/d            Zed0d            Zed1d            Zed2d             Zed3d$            Zed4d(            Zd5d+ZdS )6rk   )defaultzint | AutoDynamic | AutoUnsetscalarz7AutoDynamic | AutoUnset | tuple[int | AutoDynamic, ...]sizezEAutoDynamic | AutoUnset | tuple[int | AutoDynamic | InferStride, ...]strideNF)r   compareztuple[int | None, ...] | Noneexcluded_sizesrG   excluded_scalarr!   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+int | AutoDynamic | AutoUnset | InferStrider!   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(rT   )auto_dynamic
auto_unsetrM   rw   rx   r    )r   s    r   render_singlez1FrameStateSizeEntry.render.<locals>.render_single  sM    L  sj#|A{++ $AE}}}$1vvr   ss+tuple[int | AutoDynamic | InferStride, ...]c                R    dd                     fd| D                       z   dz   S )N[z, c              3  .   K   | ]} |          V  d S r;   r   )r]   r   r   s     r   r_   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 )r   r   r!   r    )r   r   r!   r    )r   r   r   r   rM   r`   repr)rN   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 r;   )rM   r   torchSymIntr   r`   r   )rN   r   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   rx   rC   rJ   c                j    | j         t          u rdS | j         t          u rdS | j         |         t          u S )NTF)r   r   r   rN   rx   s     r   is_size_dynamicz#FrameStateSizeEntry.is_size_dynamic1  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 r;   typerC   r]   r   s     r   r_   z8FrameStateSizeEntry.is_stride_dynamic.<locals>.<genexpr>I  s,      0S0SAaC0S0S0S0S0S0Sr   FT)rM   r   r`   allr   r   r   r   s     r   is_stride_dynamicz%FrameStateSizeEntry.is_stride_dynamic8  sv    " ty%((	-00S0S0S0S0S-S-S	 5;,&&4;*$$5{3<//r   xstuple[int, ...]tuple[AutoDynamic | int, ...]c                4    t          d | D                       S )Nc              3  \   K   | ]'}t          |t          j                  rt          n|V  (d S r;   )rM   r   r   r   )r]   xs     r   r_   z4FrameStateSizeEntry._munge_symint.<locals>.<genexpr>T  s7      TTAZ5<%@%@G\\aTTTTTTr   )r`   )r   s    r   _munge_symintz!FrameStateSizeEntry._munge_symintR  s     TTQSTTTTTTr   r   c                :    t          |t          t                    S N)r   r   r   )rk   r   )clsr   s     r   make_scalarzFrameStateSizeEntry.make_scalarV  s    "!,|TTTTr   c                |    t          t          |                     |          |                     |                    S r   )rk   r   r   )r   r   r   s      r   make_tensorzFrameStateSizeEntry.make_tensorZ  s@     #""4(($$V,,
 
 
 	
r   c                `    t          t          |                     |          t                    S r   )rk   r   r   )r   r   s     r   	make_sizezFrameStateSizeEntry.make_sized  s0    """4((
 
 
 	
r   rz   yAutoDynamic | _Tc                p    | t           u r|S |t           u r| S | t          u s|t          u s| |k    rt          S | S r;   )r   r   )r   r   s     r   _merge_atomzFrameStateSizeEntry._merge_atoml  sF    
??H
??H\ 1 1Q!VVr   (AutoDynamic | AutoUnset | tuple[_T, ...]ys6AutoDynamic | AutoUnset | tuple[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 r;   )r   )r]   r   r   r   s      r   r_   z6FrameStateSizeEntry._merge_atom_tup.<locals>.<genexpr>  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_tupv  s     II|!3!3r77c"ggCCCCs2r{{CCCCCCr   rI   r   c                t   |                      | j        |j                  }t          | j        t                    r=|| j        k    r$t          d | j        D                       | _        n| j        d | _        || _        t          | j                  t          u r8t          |j                  t          u r| j        |j        k    r| j        | _        n| j        t          u r| j        d | _        | 
                    | j        |j                  | _        |                      | j        |j                  | _        | S )Nc              3  J   K   | ]}t          |          t          u r|nd V  d S r;   r   r   s     r   r_   z.FrameStateSizeEntry.__ior__.<locals>.<genexpr>  sE       , ,67aCAAT, , , , , ,r   )r   r   rM   r`   r   r   r   rC   r   r   r   r   )rN   rI   new_sizes      r   __ior__zFrameStateSizeEntry.__ior__  s+    ''	5:>>di'' 	+49$$&+ , ,;?9, , , ' '## $0&*#	
 $$U\""c))u|++#';D  [L((T-A-M#'D &&t{ELAA**4;EEr   re   r!   r   )rx   rC   r!   rJ   )r   r   r!   r   )r   rC   r!   rk   )r   r   r   r   r!   rk   )r   r   r!   rk   )r   rz   r   rz   r!   r   )r   r   r   r   r!   r   )rI   r   r!   r   )r   r   r   ro   rp   r   r   rf   r   r   r   r   r   r   r   r   rg   r   classmethodr   r   r   r   r   r   r   r   r   rk   rk      s&        ,=K,=j,Q,Q,QFQQQQ EVKDUE E ED     	*---      5FK4Ee5 5 5N     #4+"3D%"P"P"POPPPP' ' ' ':< < < <. . . .0 0 0 04 U U U \U U U U [U 
 
 
 [
 
 
 
 [
    \ D D D [D     r   rk   is_unspecialized_nn_moduletxr   rE   entryr   c          
     B  
 t                               | j        | 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 != %srn   r   zscalar changerE   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irG   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 != %srn   r   r   )getattrlogdebugr	   instantr    )	r   r   r   r   	entry_tupold_entry_tupr   rE   	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   r   rx   zdimensionality changezsize(rT   zsize changerI   r   zstride(zstride changez9automatic dynamic is off, overwriting int %s val %s -> %sr;   )
r   r    r   r    r   r    r   rG   r!   r   )rA   rd   f_coderY   get_code_stater   _dynamoconfigautomatic_dynamic_shapesrn   copyr   r   r   r	   r   r    infor   rM   r`   r   ranger   )r   rE   r   r   code_idframe_state	is_update	mut_entryr   r   r   s    ``       @r   update_automatic_dynamicr     s    kk")RZ00G ""7+K}4 ^K99	1$7	Ii((	U	  	)Y-===II7 	   &# #+-!)"233u|,, 	 	 	 * O 	   QU	 	 	 	 	 	 	 	 	>  		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_statern   )r   rE   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 )NrU   )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   
str | Nonec                 ^   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.rU   )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  K  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  e  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   p  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(  {  s    ~1 u]!>>K;; u,,.. uHHHHHHH   uu  5#8#M#M1$ $  s   $A+ +
A98A9RemoteCache[JsonDataTy] | Nonec                 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_cacher0    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   rn   itemsrM   r   r`   r   r   add)r1  dynamic_sourcessrcfsdynamics        r   _collect_dynamic_sourcesr:    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   ru   r5  )r;  r=  missing_sourcesr7  s       r   _collect_missing_sourcesr@    s    AAAAAA (2||O ! !(((s## 	"&&s+++C    r   r   rX   r   c                ~   t                               | d           }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)	rA   rd   r   r:  r   r@  r
   r	   pt2_compile)r   r   r   all_dynamic_sourcesframe_whitelistmissing_whitelistrE   s          r   log_frame_dynamic_whitelistrK    s   kk&$''G ""7+K2;??hh233O!9:M!N!NOO "99$QUVVV 	 	*,;*;   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   B00B47B4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)rt   r   r  add_mlhub_insightr   r   r   _log_size_mismatch_recompilerR    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:
rV  c              3  P   K   | ]!\  }}d | d|                                  V  "dS )z  z: N)r   )r]   r7  r8  s      r   r_   z.render_code_state.<locals>.<genexpr>.<genexpr>  sP       
 
*1#r%%%		%%
 
 
 
 
 
r   N)r   rn   r4  )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="rB  ")r   r4  r   valuesupdater:  )rS  code_state_strr6  states       r   render_code_stater`    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 r;   )write_local_impl!_rewrite_cache_key_for_mega_cacher   r.   )rN   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  )rj  new_keys     r   re  z2PGOCacheArtifact._rewrite_cache_key_for_mega_cache  s:     &&w// 	 $&G3Nr   Nr   re   )rj  r    r!   r    )r   r   r   r   rg  rg   r   re  r   r   r   rb  rb    s|              X     \ X    \  r   rb  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 r;   r`  rs   r   r   r   rl   zhit.<locals>.<lambda>  s    !+.. r   ri  T)rM   rs   r   r   r   r   r   r   r   deepcopyrr   )r   rm  s     r   hitru    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_stateTrC  r  r#   cache_size_byteslocalz&get_code_state failed while reading %sexc_info)r   r%   r&   r'   r
   r	   rG  r(   r)   pickleloadsrs   tellr   record_artifactrb  r   ru  	Exceptionr   warning)r  r&   rE   fr.   s        r   get_local_code_stater    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datarx  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)getrM   dictr    base64	b64decoder	   rG  r   r}  r~  r   r  rb  r   r  r   r  r   )r  r  r  r1  
cache_datar  payloads          r   lookup_remote_cache_entryr  4  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rD  dynamo_compile_column_usrw  remote)r0  r
   r	   rG  r  rs   ru  r  r  rE   r1  s       r   get_remote_code_stater  Y  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  rw  z'get_extra_code_state %s hit, %d entriesr   get_extra_remote_code_staterq  c                 "    t                     S r;   )r`  )r1  s   r   rl   z-get_extra_remote_code_state.<locals>.<lambda>  s    -j99 r   )
rs   r0  r
   r	   rG  r  r   r   r   r   r  s      @r   r  r  j  sB   
 """#%%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)rs   r   ri   r  r  r  r   r   r   pgo_extra_read_keyr  r  r   r   )r  local_code_statesticky_readextra_read_keys       r   r   r     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)rs   r   r   rr   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    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tuple[str, int] | Nonec                   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(   writer  replace)r  r  r&   tmp_path	lock_pathr  r  r   s           r   rd  rd    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_stateTrC  rw  z$put_code_state: local cache disabledrx  z*put_code_state: wrote local %s, %d entriesr  rq  c                 *    t          t                    S r;   rs  r   r   r   rl   z&put_local_code_state.<locals>.<lambda>      %k22 r   )r
   r	   rG  rs   r}  dumpsr   r  rb  r   rd  r   r   r   r   )r  rE   r  rf  r&   r   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  rw  z%s: remote cache disabledrx  r  asciiz%s: wrote remote %s, %d entriesrq  c                 *    t          t                    S r;   rs  r   r   r   rl   z'put_remote_code_state.<locals>.<lambda>  r  r   )r
   r	   rG  rs   r0  r   r   r}  r  r   r  	b64encodedecodeputr   )r  r  r  rE   r  r.   r  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 rL   )rs   rr   rt   r   r   r   reset_code_stater    s    K %r   )r   r    r!   r    )r.   r2   r!   r3   )
r   r   rE   r    r   rk   r   rJ   r!   rk   )r   r    r!   r    )r!   r  )r  r    r!   r  )r  r    r!   r  )r!   rJ   )r!   r)  )r1  ri   r!   r2  )r;  r2  r!   r2  )r   rX   r!   r   r   )rS  rT  r!   r    )r   r    rm  r    r!   rT  )r  r    r!   rq   r;   )r  r  r  r    r  r  r!   rq   )r  r    r!   r   )r!   rT  )r  r    r  r  r!   r  )F)r  r    r  rJ   r!   r   )gry   
__future__r   r  r   ro   enum	functoolsloggingr%   r}  r  r*   collectionsr   typingr   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   r=   r   	getLoggerr   r   r  cacher1   r9   r>   	dataclassrA   ri   rr   rf   rs   rt   setru   rw   rz   Enumr|   r~   r   r   r   rk   r   r   r  r  r  r   r(  r0  r:  r@  rK  rR  r`  registerrb  ru  r  r  r  r  r   r  rd  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###-
 -
 -
 -
 -
 -
 -
 $#-
`         ;?  > > > >59 9 9 9 9"'  ' ' ' '#&355  ( ( ( ( d###       $#( WT]]    	    _
    $)      g g g g g g g g^ (-i i i i i ib (-+ + + + + +\! ! ! !   4( ( ( (? ? ? ?   .   
 
 
 
       ) ) ) )   (     }   8      < "" " " " "J   "   @   D3 3 3 3,   2
 
 
 
4"
 "
 "
 "
 "
L& & & & & &r   