+
    &jV                      a  0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIHt ^ RIHtHt ^ RIHtHt ^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtH t H!t! ^ RI"H#t# ^ RI$H%t% ^ R	I&H't'H(t(H)t) ^ R
I*H+t+ ]'       d   ^ RI,t,^ RI-H.t. ^ RI/H0t0H1t1  ! R R]24      t3]	Ph                  ! ]54      t6^
t7]Pp                  R R l4       t9R R lt:R R lt;]Px                  ! RR7       ! R R4      4       t=]Px                   ! R R4      4       t>Rs?R]@R&   RsAR]@R&   RsBR]@R &   ]C! 4       sDR!]@R"&   ]Px                  ! RR7       ! R# R$4      4       tE]! R%4      tF ! R& R']P                  4      tH]HP                  tJ ! R( R)]P                  4      tK]KP                  tL]Px                   ! R* R+4      4       tMR,R/R- R. lltNR,R/R/ R0 lltOR1 R2 ltPR3 R4 ltQR5 R6 ltRR7 R8 ltSR9 R: ltTR; R< ltUR= R> ltVR? R@ ltWRA RB ltXRC RD ltYRE RF ltZ](P                   ! RG RH]'4      4       t\RI RJ lt]RK RL lt^R_RM RN llt_RO RP lt`RQ RR ltaRS RT ltbRU RV ltcRW RX ltdRY RZ lteR`R[ R\ lltfR] R^ ltgR# )aa  
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                      ] tR t^7tRtR# )ReservedWorkflowIdUserError N)__name__
__module____qualname____firstlineno____static_attributes__r       i/Users/jameslopez/projects/CWCArchive/cwc-podcast/.venv/lib/python3.14/site-packages/torch/_dynamo/pgo.pyr   r   7   s    r   r   c                    V ^8  d   QhRRRR/# )   filepathstrreturnr   )formats   "r   __annotate__r%   s   s     	 	C 	C 	r   c                ,   \         P                  P                  V 4      '       g   V # \        V R 4      ;_uu_ 4       pVP	                  4       p\
        P                  ! V4      p\        VR,          R4      pVuuRRR4       #   + '       g   i     R# ; i)rbl    08xN)ospathexistsopenreadzlibcrc32r$   )r!   filecontentcrc32_valuehashs   &    r   _hash_containing_filer4   r   sg     77>>(##	h		))+jj)kJ.6	 
			s   ;BB	c                    V ^8  d   QhRRRR/# r    r1   ztypes.CellTyper#   objectr   )r$   s   "r   r%   r%      s      . V r   c                d    \        V 4      '       d   \        V R 4      '       d   V P                  # R# )__code__N)callablehasattrr9   r1   s   &r   _get_closure_contentr=      s(    WWj99r   c                    V ^8  d   QhRRRR/# r6   r   )r$   s   "r   r%   r%      s      N v r   c                R     \        V P                  4      #   \         d     R # i ; iN)r=   cell_contents
ValueErrorr<   s   &r   _get_cell_hash_contentrC      s*    #G$9$9:: s    &&T)frozenc                      ] tR t^t$ R]R&   R]R&   R]R&   R]R&   RtR]R	&   R
 R ltR R ltR R lt]	RR R ll4       t
RtR# )CodeIdr"   filenameintfirstlinenoname	file_hashN
int | Noneclosure_hashc                    V ^8  d   QhRRRR/# )r    otherr7   r#   boolr   )r$   s   "r   r%   CodeId.__annotate__   s     
 
F 
t 
r   c                	*   \        V\        4      '       g   R # V P                  VP                  8H  ;'       d\    V P                  VP                  8H  ;'       d;    V P                  VP                  8H  ;'       d    V P
                  VP
                  8H  # F)
isinstancerF   rK   rI   rJ   rM   )selfrO   s   &&r   __eq__CodeId.__eq__   s    %((NNeoo- 8 8  E$5$558 8		UZZ'8 8 !!U%7%77		
r   c                   V ^8  d   QhRR/# )r    r#   rH   r   )r$   s   "r   r%   rQ      s     V V# Vr   c                	p    \        V P                  V P                  V P                  V P                  34      # r@   )r3   rK   rJ   rI   rM   rU   s   &r   __hash__CodeId.__hash__   s*    T^^TYY0@0@$BSBSTUUr   c                   V ^8  d   QhRR/# r    r#   r"   r   )r$   s   "r   r%   rQ      s     W W Wr   c                	n    R V P                    RV P                   RV P                   RV P                   2# )zhash():)rK   rG   rI   rJ   rZ   s   &r   __str__CodeId.__str__   s5    t~~&aa8H8H7I499+VVr   c               $    V ^8  d   QhRRRRRR/# )r    codetypes.CodeTypeclosurez!tuple[types.CellType, ...] | Noner#   rF   r   )r$   s   "r   r%   rQ      s$     
 

'H
	
r   c                	    R pV'       d6   \        \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      4      p\        V P                  V P                  V P
                  \        V P                  4      V4      # )Nc              3  8   "   T F  p\        V4      x  K  	  R # 5ir@   )rC   ).0cs   & r   	<genexpr>CodeId.make.<locals>.<genexpr>   s     %QA&<Q&?&?s   )r3   tuplerF   co_filenameco_firstlinenoco_namer4   )re   rg   rM   s   && r   makeCodeId.make   sf     %Q%Q%Q%Q QRLLL!$"2"23
 	
r   r   r@   )r   r   r   r   __annotations__rM   rV   r[   rb   staticmethodrr   r   r   r   r   rF   rF      sH    M
I N#L*#
VW 
 
r   rF   c                  J    ] tR t^t$ ]P
                  ! R R7      tR]R&   RtR# )	CodeStatec                 	     \        \        4      # r@   )r   FrameStateSizeEntryr   r   r   <lambda>CodeState.<lambda>   s
    ,? @r   )default_factoryz%defaultdict[str, FrameStateSizeEntry]automatic_dynamicr   N)	r   r   r   r   dataclassesfieldr}   rt   r   r   r   r   rw   rw      s    ?J?P?P@@< r   rw   %defaultdict[CodeId, CodeState] | None_INIT_CODE_STATE_CODE_STATEFrP   _LOGGED_DYNAMIC_ALLOWLISTzset[str]_KNOWN_DYNAMIC_SOURCESc                  &    ] tR t^t$ RtR]R&   RtR# )InferStridea(  
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.
rH   dimr   N)r   r   r   r   __doc__rt   r   r   r   r   r   r      s      
Hr   r   _Tc                      ] tR t^tRt^ tRtR# )	AutoUnsetz
The identity element of our semilattice, a generic "don't know" element that
is always subsumed when we get more information.
r   Nr   r   r   r   r   tokenr   r   r   r   r   r          
 Er   r   c                      ] tR t^tRt^ tRtR# )AutoDynamiczv
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                     ] tR t^t$ ]P
                  ! ]R7      tR]R&   ]P
                  ! ]R7      t	R]R&   ]P
                  ! ]R7      t
R]R&   ]P
                  ! RR	R
7      tR]R&   ]P
                  ! RR	R
7      tR]R&   R R ltR R ltR R ltR R lt]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R  l4       t]R! R" l4       tR# R$ ltR%tR# )&ry   )defaultzint | AutoDynamic | AutoUnsetscalarz7AutoDynamic | AutoUnset | tuple[int | AutoDynamic, ...]sizezEAutoDynamic | AutoUnset | tuple[int | AutoDynamic | InferStride, ...]strideNF)r   compareztuple[int | None, ...] | Noneexcluded_sizesrL   excluded_scalarc                   V ^8  d   QhRR/# r^   r   )r$   s   "r   r%    FrameStateSizeEntry.__annotate__  s     ' ' 'r   c                	  a R  R loR V3R llpV P                   \        J d:   V P                  \        J d&   V P                  \        J d   R# RV P                   2# V P                  \        J di   \	        V P                   \
        4      '       dI   \	        V P                  \
        4      '       d)   RV! V P                   4       RV! V P                  4       2# R\        V 4       2# )	c                    V ^8  d   QhRRRR/# )r    sz+int | AutoDynamic | AutoUnset | InferStrider#   r"   r   )r$   s   "r   r%   0FrameStateSizeEntry.render.<locals>.__annotate__  s     		 		H 		S 		r   c                    V \         J d   R # V \        J d   R# \        V \        4      '       d   RV P                   R2# \        V 4      # )?z
auto unsetzS(r`   )auto_dynamic
auto_unsetrT   r   r   r"   )r   s   &r   render_single1FrameStateSizeEntry.render.<locals>.render_single  s?    L j#A{++AEE7!}$1vr   c                    V ^8  d   QhRRRR/# )r    ssz+tuple[int | AutoDynamic | InferStride, ...]r#   r"   r   )r$   s   "r   r%   r     s     	G 	GH 	GS 	Gr   c                V   < R RP                  V3R lV  4       4      ,           R,           # )[z, c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir@   r   )rj   r   r   s   & r   rl   CFrameStateSizeEntry.render.<locals>.render_tuple.<locals>.<genexpr>  s     "@R=#3#3Rs   ])join)r   r   s   &r   render_tuple0FrameStateSizeEntry.render.<locals>.render_tuple  s"    "@R"@@@3FFr   zfully dynamic scalar or tensorzscalar ztensor size=z stride=zunusual )r   r   r   r   rT   rn   repr)rU   r   r   s   & @r   renderFrameStateSizeEntry.render  s    			G 	G 99$)D{{l*7 ..[[L($))U++
4;;0N0N%l499&=%>h|TXT_T_G`Fabb $t*&&r   c                   V ^8  d   QhRR/# r    r#   Noner   )r$   s   "r   r%   r   (  s     < <t <r   c                	   \        V P                  \        P                  4      '       d   Q V P                  4       h\        V P                  \
        4      '       d;   V P                   F*  p\        V\        P                  4      '       g   K%  Q V4       h	  \        V P                  \
        4      '       d=   V P                   F*  p\        V\        P                  4      '       g   K%  Q V4       h	  R # R # r@   )rT   r   torchSymIntr   rn   r   )rU   r   s1s   &  r   __post_init__!FrameStateSizeEntry.__post_init__(  s    dkk5<<88E$++E8dii''YY%a66996 dkk5))kk%b%,,77;;7 " *r   c                    V ^8  d   QhRRRR/# r    r   rH   r#   rP   r   )r$   s   "r   r%   r   1  s     . .3 .4 .r   c                	    V P                   \        J d   R # V P                   \        J d   R# V P                   V,          \        J # )TF)r   r   r   rU   r   s   &&r   is_size_dynamic#FrameStateSizeEntry.is_size_dynamic1  s3    99$99
"yy~--r   c                    V ^8  d   QhRRRR/# r   r   )r$   s   "r   r%   r   8  s     0 0S 0T 0r   c                	l   \        V P                  \        4      '       dO   \        ;QJ d&    R  V P                   4       F  '       d   K   RM	  RM! R  V P                   4       4      '       g   R# V P                  \
        J d   R# V P                  \        J d   R# V P                  V,          \
        J # )c              3  D   "   T F  p\        V4      \        J x  K  	  R # 5ir@   typerH   rj   r   s   & r   rl   8FrameStateSizeEntry.is_stride_dynamic.<locals>.<genexpr>I  s     0SAaCs    FT)rT   r   rn   allr   r   r   r   s   &&r   is_stride_dynamic%FrameStateSizeEntry.is_stride_dynamic8  sr    " tyy%((SS0S0SSSS0S0S-S-S;;,&;;*${{3<//r   c                    V ^8  d   QhRRRR/# )r    xstuple[int, ...]r#   ztuple[AutoDynamic | int, ...]r   )r$   s   "r   r%   r   S  s     U U/ U.K Ur   c                	Z    \         ;QJ d    . R  V  4       F  NK  	  5# ! R  V  4       4      # )c              3  r   "   T F-  p\        V\        P                  4      '       d   \        MTx  K/  	  R # 5ir@   )rT   r   r   r   )rj   xs   & r   rl   4FrameStateSizeEntry._munge_symint.<locals>.<genexpr>T  s'     TQSAZ5<<%@%@\aGQSs   57)rn   )r   s   &r   _munge_symint!FrameStateSizeEntry._munge_symintR  s&    uTQSTuTuTQSTTTr   c                    V ^8  d   QhRRRR/# )r    r   rH   r#   ry   r   )r$   s   "r   r%   r   W  s     U UC U$7 Ur   c                	.    \        V\        \        R 7      # )r   r   r   )ry   r   )clsr   s   &&r   make_scalarFrameStateSizeEntry.make_scalarV  s    "!,|TTr   c               $    V ^8  d   QhRRRRRR/# )r    r   r   r   r#   ry   r   )r$   s   "r   r%   r   [  s$     
 
"
,;
	
r   c                	b    \        \        V P                  V4      V P                  V4      R 7      # r   )ry   r   r   )r   r   r   s   &&&r   make_tensorFrameStateSizeEntry.make_tensorZ  s0     #""4($$V,
 	
r   c                    V ^8  d   QhRRRR/# )r    r   r   r#   ry   r   )r$   s   "r   r%   r   e  s     
 
_ 
1D 
r   c                	L    \        \        V P                  V4      \        R 7      # r   )ry   r   r   )r   r   s   &&r   	make_sizeFrameStateSizeEntry.make_sized  s#    """4(
 	
r   c               $    V ^8  d   QhRRRRRR/# )r    r   r   yr#   zAutoDynamic | _Tr   )r$   s   "r   r%   r   m  s"      r b %5 r   c                	v    V \         J d   V# V\         J d   V # V \        J g   V\        J g   W8w  d   \        # V # r@   )r   r   )r   r   s   &&r   _merge_atomFrameStateSizeEntry._merge_atoml  s8    
?H
?H\ 1QVr   c               $    V ^8  d   QhRRRRRR/# )r    r   z(AutoDynamic | AutoUnset | tuple[_T, ...]ysr#   z6AutoDynamic | AutoUnset | tuple[AutoDynamic | _T, ...]r   )r$   s   "r   r%   r   w  s.     D D4D 5D 
@	Dr   c                	.  a  V\         J d   V# V\         J d   V# V\        J g   V\        J d   \        # \        V4      \        V4      8w  d   \        # \        ;QJ d     . V 3R  l\	        W4       4       F  NK  	  5# ! V 3R  l\	        W4       4       4      # )c              3  J   <"   T F  w  rSP                  W4      x  K  	  R # 5ir@   )r   )rj   r   r   r   s   &  r   rl   6FrameStateSizeEntry._merge_atom_tup.<locals>.<genexpr>  s     C{tqS__Q**{s    #)r   r   lenrn   zip)r   r   r   s   f&&r   _merge_atom_tup#FrameStateSizeEntry._merge_atom_tupv  st     II|!3r7c"guCs2{CuCuCs2{CCCr   c                    V ^8  d   QhRRRR/# )r    rO   r   r#   r   )r$   s   "r   r%   r     s      T d r   c                	@   V P                  V P                  VP                  4      p\        V P                  \        4      '       dl   W P                  8w  dG   \        ;QJ d    . R  V P                   4       F  NK  	  5M! R  V P                   4       4      V n        MV P                  e   RV n        W n        \        V P                  4      \        J dK   \        VP                  4      \        J d.   V P                  VP                  8w  d   V P                  V n        M)V P                  \        J d   V P                  e   RV n        V P                  V P                  VP                  4      V n        V P                  V P                  VP                  4      V n        V # )c              3  P   "   T F  p\        V4      \        J d   TMR x  K  	  R # 5ir@   r   r   s   & r   rl   .FrameStateSizeEntry.__ior__.<locals>.<genexpr>  s"      ,;DaaCAT19s   $&N)r   r   rT   rn   r   r   r   rH   r   r   r   r   )rU   rO   new_sizes   && r   __ior__FrameStateSizeEntry.__ior__  s%    ''		5::>dii''99$&+e ,;?99,ee ,;?99, '# $$0&*#	
 $U\\"c)u||+#';;D [[L(T-A-A-M#'D &&t{{ELLA**4;;Er   )r   r   r   r   r   )r   r   r   r   r~   r   r   r   rt   r   r   r   r   r   r   r   r   ru   r   classmethodr   r   r   r   r   r   r   r   r   r   ry   ry      s*   ,7,=,=j,QF)Q EPDUDUED
A  	*- Q  5@4E4Ee5N1  #."3"3D%"POZP':<.04 U U U U 
 
 
 
   D D r   ry   is_unspecialized_nn_modulec          
     ,    V ^8  d   QhRRRRRRRRR	R/# 
r    txr   rJ   r"   entryry   r   rP   r#   r   )r$   s   "r   r%   r%     sA     i ii
i i
 !%i ir   c                 aaa
 \         P                  V P                  V P                  4      p\	        4       V,          p\
        P                  P                  P                  '       Ed   SVP                  9   pVP                  S,          p\        P                  ! V4      o
VS,          pV'       d   S
P                  VP                  8w  d   \        P                  R SSP                  S
P                  4       \        P                  ! RRSRRRRR\!        S
P                  4      R\!        SP                  4      /4       V'       d   \        P#                  R	S4       RR
 VVV
3R lllpV'       d   S
P$                  VP$                  8w  d   \'        S
P$                  \(        4      '       d   \'        SP$                  \(        4      '       d   \+        S
P$                  4      \+        SP$                  4      8w  d   V! RRR4       Mj\-        \+        SP$                  4      4       F=  p	S
P$                  V	,          SP$                  V	,          8w  g   K.  V! RRV	 R2RV	4       K?  	  M
V! RRR4       V'       Ed   S
P.                  VP.                  8w  d   \'        S
P.                  \(        4      '       d   \'        SP.                  \(        4      '       d   \+        S
P.                  4      \+        SP.                  4      8w  d   V! RRR4       V# \-        \+        SP.                  4      4       F=  p	S
P.                  V	,          SP.                  V	,          8w  g   K.  V! RRV	 R2RV	4       K?  	   V# V! RRR4       V# VP                  S,          o
\        P                  RSS
P                  SP                  4       SVP                  S&   SpV# )z%automatic dynamic int %s val %s != %sr}   rJ   dim_changedr   reasonzscalar changecachednewz%s is converted to a symbolic integer. It is an attribute of a user defined nn module class. If you wish to keep it static, you can mark the nn module class as `torch._dynamo.mark_static`.c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r    tup_namer"   short_reasonlong_reasonirL   r#   r   r   )r$   s   "r   r%   .update_automatic_dynamic.<locals>.__annotate__  s4     	 		),	;>	CM		r   c                :  < Vf   \        SV 4      M\        SV 4      V,          pVf   \        SV 4      M\        SV 4      V,          p\        P                  RV SVVV4       \        P                  ! RRSRVf   RMTRVR\        V4      R\        V4      /4       R # )	Nz#automatic dynamic %s %s %s %s != %sr}   rJ   r   r   r   r   r  )getattrlogdebugr   instantr"   )	r  r  r  r  	entry_tupold_entry_tupr   rJ   	old_entrys	   &&&&  r   log_tup)update_automatic_dynamic.<locals>.log_tup  s     -.Ix(75(;STU;V 
 9 	8,Y1!4 
 II5 &&#D!AI51kc-03y>	r   r   r   zdimensionality changezsize(r`   zsize changerO   r   zstride(zstride changez9automatic dynamic is off, overwriting int %s val %s -> %sr@   )rF   rr   f_coderg   get_code_stater   _dynamoconfigautomatic_dynamic_shapesr}   copyr   r
  r  r   r  r"   infor   rT   rn   r   ranger   )r   rJ   r   r   code_idframe_state	is_update	mut_entryr  r  r  s   &ff$      @r   update_automatic_dynamicr    s    kk"))RZZ0G "7+K}}444K999	11$7	IIi(	U	 ))Y-=-==II7  	 &&#D!8oc)"2"233u||,	 *O 		 	> 9>>9)..%00Z

E5R5Ry~~&#ejj/9FE+BC"3uzz?3$>>!,

1=#FeA3aL-K 4 19))Y-=-==)**E22z%,,PU7V7Vy''(C,==He-DE$ ! #3u||#45$++A.%,,q/A#Hs!noqQ 6   '73   11$7			GLL		
 /4%%d+	r   c          
     ,    V ^8  d   QhRRRRRRRRR	R/# r   r   )r$   s   "r   r%   r%     s:     + ++
+ +
 !%+ +r   c               .   V P                   ;pf   \        V VVVR7      # VP                  f   W$P                  P                  V&   V# R pVP                   F5  pWP                  9   g   K  \        V VVP                  V,          VR7      pK7  	  Vf   Q hV# )N)r   )distributed_stater  
all_stateslocal_stater}   )r   rJ   r   r   stres	sub_states   &&&$   r   process_automatic_dynamicr'    s     """+''A	
 	
 
	 27((. I222.//5/I	 ' 
r   c                    V ^8  d   QhRRRR/# )r    keyr"   r#   r   )r$   s   "r   r%   r%   @  s     ! !# !# !r   c                    R p\         P                  ! 4       '       d1   \         P                  ! 4       '       d   \         P                  ! 4       p\        P
                  P                  P                  pV  RV RV 2# )Nra   )distis_availableis_initializedget_rankr   compilerr  cache_key_tag)r)  ranktags   &  r   format_cache_keyr3  @  s]     Dt2244}}
..


-
-CU!D63%  r   c                   V ^8  d   QhRR/# )r    r#   
str | Noner   )r$   s   "r   r%   r%   K  s      z r   c                    \         P                  P                  P                  '       d   \	        R 4       R# \         P                  P                  P
                  ;p e.   V P                  R4      '       d   \        R4      h\        V 4      # \         P                  P                  4       ;pe   Vw  r#\        RV RV 24      # R# )Gdynamo_pgo force disabled by torch.compiler.config.force_disable_cachesN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.ra   )r   r/  r  force_disable_cachesr   job_id
startswithr   r3  _utils_internalget_mast_job_name_version)rname_versionmast_job_namemast_job_versions       r   get_cache_keyrB  K  s    ~~111U	
  ^^"")))6<<  -$ 
  ""--GGIIV*6'%a8H7I JKKr   c                    V ^8  d   QhRRRR/# )r    
sticky_keyr"   r#   r5  r   )r$   s   "r   r%   r%   e  s     ( (C (J (r   c                    \         P                  P                  P                  '       d   \	        R 4       R# \        V 4      # )r7  N)r   r/  r  r9  r   r3  )rD  s   &r   get_extra_cache_keyrF  e  s3    ~~111U	
 J''r   c                    V ^8  d   QhRRRR/# )r    	cache_keyr"   r#   r5  r   )r$   s   "r   r%   r%   p  s     ? ?s ?z ?r   c                   \         P                  P                  P                  '       g   \        P                  R 4       R# ^ RIHp \        P                  ! RRRV  R24      p\        P                  P                  V! 4       RV4      # )z'automatic_dynamic_local_pgo not enabledN)	cache_dirz[<>:"/\\|?*]_code_state_z.pkldynamo)r   r  r  automatic_dynamic_local_pgor
  r  %torch._inductor.runtime.runtime_utilsrJ  resubr)   r*   r   )rH  rJ  code_state_keys   &  r   code_state_pathrS  p  s_    ==;;;		;<?VVOSK	{$2OPN77<<	X~>>r   c                   V ^8  d   QhRR/# )r    r#   rP   r   )r$   s   "r   r%   r%   {  s      D r   c                    \         P                  P                  P                  '       d   R # \         P                  P                  P
                  ;p e   V # \        4       '       g   R # \         P                  P                  4       '       d   R #  ^ RI	H
p T\         P                  P                  R4      8  #   \         d     R # i ; i)F)REMOTE_CACHE_VERSIONz'pytorch/remote_cache:dynamo_pgo_version)r   r/  r  r9  r  automatic_dynamic_remote_pgor   r<  is_fb_unit_testtorch._inductor.fb.remote_cacherV  ModuleNotFoundErrorjustknobs_getval_int)r>  rV  s     r   "should_use_remote_dynamo_pgo_cacher\  {  s    ~~111]]!!>>>K;;,,..H  5#8#8#M#M1$    s   B8 8CCc                   V ^8  d   QhRR/# )r    r#   zRemoteCache[JsonDataTy] | Noner   )r$   s   "r   r%   r%     s      8 r   c                 X    ^ RI Hp  \        4       '       g   R# V ! R\        4       RR4      # )    create_cacheNz
dynamo-pgoFbRemoteDynamoPGOCacheRemoteDynamoPGOCache)torch._inductor.remote_cachera  r\  r   r`  s    r   get_remote_cachere    s,    9-// 	 r   c                    V ^8  d   QhRRRR/# )r    
code_staterw   r#   OrderedSet[str]r   )r$   s   "r   r%   r%     s     
 
 
 
r   c                0   \        4       pV P                  P                  4        Fm  w  r#R p\        VP                  \
        4      '       d   \        VP                  9   pMVP                  \        8X  d   RpV'       g   K\  VP                  V4       Ko  	  V# )FT)	r   r}   itemsrT   r   rn   r   r   add)rg  dynamic_sourcessrcfsdynamics   &    r   _collect_dynamic_sourcesrp    st    '1|O//557bggu%%"bgg-GYY,&G7$ 8 r   c                    V ^8  d   QhRRRR/# )r    all_sourcesrh  r#   r   )r$   s   "r   r%   r%     s      / o r   c                    ^ RI Hp \        4       pV  FF  pV\        9   d   K  V! V4      '       d   \        P	                  V4       K5  VP	                  V4       KH  	  V# )r_  )is_dynamic_source)torch._dynamo.variables.builderrt  r   r   rk  )rr  rt  missing_sourcesrm  s   &   r   _collect_missing_sourcesrw    sV    A (2|O((s##"&&s+C   r   c                    V ^8  d   QhRRRR/# )r    r  rf   r#   r   r   )r$   s   "r   r%   r%     s       4 r   c                n   \         P                  V R 4      p\        4       V,          p\        V4      pRP	                  V4      pRP	                  \        V4      4      pV'       d<   \        R;pRR7      ;_uu_ 4        \        P                  ! VVVR7       R R R 4       R # R #   + '       g   i     R # ; i)N,zpgo.dynamic_whitelistTlog_pt2_compile_event)recompile_dynamic_whitelistmissing_dynamic_whitelist)	rF   rr   r  rp  r   rw  r	   r   pt2_compile)r  r  r  all_dynamic_sourcesframe_whitelistmissing_whitelistrJ   s   &      r   log_frame_dynamic_whitelistr    s    kk&$'G "7+K2;?hh23O!9:M!NO"99$QUVV**,;*; WV VVVs   =B##B4	c                   V ^8  d   QhRR/# r   r   )r$   s   "r   r%   r%     s     ) )d )r   c                 j    \         '       g'   \        P                  P                  R RRR7       Rs R# R# )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_descriptionTN)r   r   r<  add_mlhub_insightr   r   r   _log_size_mismatch_recompiler    s9    $$//.:!% 	0 	
 %)! %r   c                    V ^8  d   QhRRRR/# )r    csdefaultdict[CodeId, CodeState]r#   r"   r   )r$   s   "r   r%   r%     s      8 S r   c                   R P                  R V P                  4        4       4      p\        4       pV P                  4        F  pVP	                  \        V4      4       K  	  V'       d   VRRP                  V4       R2,          pV# )
c              3     "   T FA  w  rV R 2RP                  R VP                  P                  4        4       4      ,           x  KC  	  R# 5i)z:
r  c              3  R   "   T F  w  rR V RVP                  4        2x  K  	  R# 5i)z  z: N)r   )rj   rm  rn  s   &  r   rl   .render_code_state.<locals>.<genexpr>.<genexpr>  s)      
5P'#bR		}%5Ps   %'N)r   r}   rj  )rj   kvs   &  r   rl   $render_code_state.<locals>.<genexpr>  sU      
 DA	 #S	
)) 
565H5H5N5N5P
 
	
 	
 s   A	A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="rz  ")r   rj  r   valuesupdaterp  )r  code_state_strrl  states   &   r   render_code_stater    s    YY 
 HHJ N (2|O7>? GGJxxP_G`Faabd	

 r   c                  b    ] tR tRt]R R l4       t]]R R l4       4       t]R R l4       tRt	R	# )
PGOCacheArtifacti  c                   V ^8  d   QhRR/# r   r   )r$   s   "r   r%   PGOCacheArtifact.__annotate__  s          r   c                	p    \        V P                  V P                  4      V P                  4      pVf   Q hR # r@   )write_local_impl!_rewrite_cache_key_for_mega_cacher)  r1   )rU   metas   & r   populate_cachePGOCacheArtifact.populate_cache  s2    22488<dll
 r   c                   V ^8  d   QhRR/# r^   r   )r$   s   "r   r%   r    s      # r   c                 	    R # )pgor   r   r   r   r   PGOCacheArtifact.type  s     r   c                    V ^8  d   QhRRRR/# )r    original_keyr"   r#   r   )r$   s   "r   r%   r    s        r   c                X    V P                  R4      '       g   V # \        4       ;pe   V# V # )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.
r8  )r;  rB  )r  new_keys   & r   r  2PGOCacheArtifact._rewrite_cache_key_for_mega_cache  s3     &&w//$&G3Nr   r   N)
r   r   r   r   r   r  ru   r   r  r   r   r   r   r  r    sD            r   r  c               $    V ^8  d   QhRRRRRR/# )r    r)  r"   tyr#   r  r   )r$   s   "r   r%   r%     s"      S c < r   c                    \        \        \        4      '       g   Q h\        P	                  R W\        \        4      4       \        RV R2RR 4       \        RR4       \        P                  ! \        4      s
\        # )z$get_code_state %s hit %s, %d entriesget__code_statestringc                      \        \        4      # r@   r  r   r   r   r   rz   hit.<locals>.<lambda>  s
    !+.r   r  T)rT   r   r   r
  r  r   r   r
   r  deepcopyr   )r)  r  s   &&r   hitr    sf    k;////HH3Sc+>NO
rd+.
 E4 }}[1r   c                    V ^8  d   QhRRRR/# r    rH  r"   r#   r   r   )r$   s   "r   r%   r%     s      C ,Q r   c                   \        V 4      pVe   \        P                  P                  V4      '       d   \	        R;pRR7      ;_uu_ 4        \
        P                  ! W R7       \        VR4      ;_uu_ 4       p VP                  4       p\        P                  ! V4      s\
        P                  ! W#P                  4       R7       \        P                  ! \        P!                  4       W4       \#        VR4      uuR R R 4       uuR R R 4       # R #   \$         d    \&        P)                  RTRR	7        Mi ; i R R R 4       M  + '       g   i     M; iR R R 4       R #   + '       g   i     R # ; i)
Nzpgo.get_local_code_stateTr{  rH  r'   cache_size_byteslocalz&get_code_state failed while reading %sexc_info)rS  r)   r*   r+   r	   r   r  r,   r-   pickleloadsr   tellr   record_artifactr  r   r  	Exceptionr
  warning)rH  r*   rJ   fr1   s   &    r   get_local_code_stater    s'   9%DBGGNN400..Dd
 
 **4E dD!!Q.ffhG"(,,w"7K&224&&(S )88(--/ tW- "!
 
(  ! KK@$QU    "!!!
( )
 
( sO   ,E 8E	:AD4E	9
E #D63E	5D66E	:	E EE  E1	c               (    V ^8  d   QhRRRRRRRR/# )	r    remote_cachezRemoteCache[JsonDataTy]rH  r"   
event_namer5  r#   r   r   )r$   s   "r   r%   r%   4  s0     " ")"" " +	"r   c                x   R p V P                  V4      pVe    \        V\        4      '       g   Q hVR,          p\        V\        4      '       g   Q h\        P
                  ! V4      pVe"   \        P                  ! V\        V4      R7       \        P                  ! V4      p\        P                  ! \        P                  4       W4       V# \         P%                  RV4        V#   \         d    \         P#                  RTRR7        T# i ; i  \         d    \         P#                  RTRR7        T# i ; i)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)getrT   dictr"   base64	b64decoder   r  r   r  r  r   r  r  r   r  r
  r  r  )r  rH  r  rg  
cache_datar  payloads   &&&    r   lookup_remote_cache_entryr  4  s7   
 JD!%%i0
 !!*d3333!&)!$,,,, **40)&22"S\ $\\'2
 %44$))+Y
  HH7C  G!     Y=ySWX2 5Ys#   D B
C( (#DD#D98D9c                    V ^8  d   QhRRRR/# r  r   )r$   s   "r   r%   r%   Y  s      S -R r   c                   \        4       pVed   \        R;pRRR7      ;_uu_ 4        \        P                  ! W R7       \	        WV4      pVe   Vs\        V R4      uuR R R 4       #  R R R 4       R # R #   + '       g   i     R # ; i)Nzpgo.get_remote_code_stateT!pgo_get_remote_code_state_time_usr|  dynamo_compile_column_usr  remote)re  r	   r   r  r  r   r  rH  r  rJ   rg  s   &   r   get_remote_code_stater  Y  s    #%L//D"&%H
 

 **4E2<DQJ%(9h/
 
 &
 
 
 s   5A44B	c                    V ^8  d   QhRRRR/# r    rH  r"   r#   r   r   )r$   s   "r   r%   r%   j  s      3 4 r   c           	       a \         f   Q h\        4       pVe   \        R;pRRR7      ;_uu_ 4        \        P                  ! W R7       \        W4      o\        P                  RT Se   \        S4      M^ 4       Se"   \         '       d   Q hSs \        RR	V3R
 l4       RRR4       R# R#   + '       g   i     R# ; i)zg
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  r  z'get_extra_code_state %s hit, %d entriesget_extra_remote_code_stater  c                    < \        S 4      # r@   )r  )rg  s   r   rz   -get_extra_remote_code_state.<locals>.<lambda>  s    -j9r   )
r   re  r	   r   r  r  r
  r  r   r   r  s   &  @r   r  r  j  s    
 """#%L55D"&%H
 

 **4E2<KJHH9#-#9Jq
 %&;&()19!
 
  
 
 
s   AB,B,,B=	c                   V ^8  d   QhRR/# )r    r#   r  r   )r$   s   "r   r%   r%     s      6 r   c                 ~   \         e   \         # \        \        4      s \        4       p V f   \         # \	        V 4      pVf   \        V 4       \         '       gC   \        P                  P                  P                  ;pe   \        V4      pVe   \        V4       \        P                  R4       \         f   Q h\         # )Nzget_code_state using default)r   r   rw   rB  r  r  r   r/  r  pgo_extra_read_keyrF  r  r
  r  )rH  local_code_statesticky_readextra_read_keys       r   r  r    s     i(KI ,I6 i( K!NN11DDD[Q,[9%'7HH+,"""r   c                   V ^8  d   QhRR/# r   r   )r$   s   "r   r%   r%     s     3 3 3r   c                    \         f   \        P                  R4       R # \         \        8X  d   \        P                  R4       R # \	        4       p V f   \        P                  R4       R # \        V 4       \        V 4       \        P                  P                  P                  ;pe   \        V4      pVe   \        V4       R # R # R # )Nz1put_code_state: never initialized, will not writez#put_code_state: no change, skippingz&put_code_state: no cache key, skipping)r   r
  r  r   rB  put_local_code_stateput_remote_code_stater   r/  r  pgo_extra_write_keyrF  )rH  sticky_writeextra_write_keys      r   put_code_stater    s    DE&&67I9:#)$--AAAN-l;&!/2 ' Or   c               $    V ^8  d   QhRRRRRR/# )r    rH  r"   pickled_codebytesr#   ztuple[str, int] | Noner   )r$   s   "r   r%   r%     s"       5 =S r   c           	        \        V 4      pVf   R # TR,           pVR,           p^ RIHp \        P                  ! \        P
                  P                  V4      RR7       V! V\        R7      ;_uu_ 4        \        VR4      ;_uu_ 4       pVP                  V4       VP                  4       pR R R 4       \        P                  ! W24       R R R 4       VX3#   + '       g   i     L2; i  + '       g   i     TX3# ; i)Nz.tmpz.lock)FileLockT)exist_ok)timeoutwb)rS  torch.utils._filelockr  r)   makedirsr*   dirnameLOCK_TIMEOUTr,   writer  replace)rH  r  r*   tmp_path	lock_pathr  r  r   s   &&      r   r  r    s    9%D|
 f}HwI /KK%5	)\	2	2(D!!QGGL!668D " 	

8"	 
3
 :	 "! 
3	2
 :s$   5C)
"C	,C)C&!C))C<	c                    V ^8  d   QhRRRR/# r  r   )r$   s   "r   r%   r%     s     
 
C 
D 
r   c           	     .   \        R ;pRR7      ;_uu_ 4        \        P                  ! WR7       \        f   Q h\        P
                  ! \        4      p\        P                  ! \        P                  4       W4       \        W4      pVf!   \        P                  R4        RRR4       R# Vw  rE\        P                  ! WR7       \        P                  RV\        \        4      4       \        RR	R
 4       RRR4       R#   + '       g   i     R# ; i)zpgo.put_local_code_stateTr{  r  Nz$put_code_state: local cache disabledr  z*put_code_state: wrote local %s, %d entriesr  r  c                      \        \        4      # r@   r  r   r   r   rz   &put_local_code_state.<locals>.<lambda>  
    %k2r   )r	   r   r  r   r  dumpsr   r  r  r   r  r
  r  r   r   )rH  rJ   r  r  r*   r   s   &     r   r  r    s    	88dPT	U	U&&tA&&&||K0,,!!#Y	
  	8<HH;< 
V	U 
&&tC=tSEUV!"2	
% 
V	U	U	Us   B
D,ADD	c               $    V ^8  d   QhRRRRRR/# )r    rH  r"   extra_code_staterP   r#   r   r   )r$   s   "r   r%   r%     s!     "
 "
S "
D "
T "
r   c           
     x   V'       g   R MRp\        RV 2;pRRR7      ;_uu_ 4        \        P                  ! W0R7       \        f   Q h\	        4       pVf"   \
        P                  RV4        RRR4       R# \        P                  ! \        4      p\        P                  ! V\        V4      R	7       R
\        P                  ! V4      P                  R4      /pVP                  W4       \
        P                  RW \        \        4      4       \        VRR 4       RRR4       R#   + '       g   i     R# ; i)r  put_extra_remote_code_statezpgo.T!pgo_put_remote_code_state_time_usr  r  Nz%s: remote cache disabledr  r  asciiz%s: wrote remote %s, %d entriesr  c                      \        \        4      # r@   r  r   r   r   rz   'put_remote_code_state.<locals>.<lambda>  r  r   )r	   r   r  r   re  r
  r  r  r	  r   r  	b64encodedecodeputr   )rH  r  r  rJ   r  r1   r  s   &&     r   r  r    s      	 * 
 
zl##"!D
 

 	&&tA&&&')HH0*=
 
 ,,{+&&tc'lKF$$W-44W="

 	/-zc+FV	
 	"2	
1
 
 
 
s   AD(9B%D((D9	c                   V ^8  d   QhRR/# r   r   )r$   s   "r   r%   r%     s     & &$ &r   c                     R s R sRsR # )NF)r   r   r   r   r   r   reset_code_stater    s    K %r   r@   rS   )h__conditional_annotations__r   
__future__r   r  r  r~   enum	functoolsloggingr)   r  rP  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   rd  r   r   rB   r   	getLoggerr   r
  r  cacher4   r=   rC   	dataclassrF   rw   r   rt   r   r   setr   r   r   Enumr   r   r   r   r   ry   r  r'  r3  rB  rF  rS  r\  re  rp  rw  r  r  r  registerr  r  r  r  r  r  r  r  r  r  r  r  )r  s   @r   <module>r2     sl  	 #       	  	  # ) ,       ) > 
 0 DD	* 	 !j 	 	 d#-
 -
 $-
`    ;? 7 >592 9"' 4 '#&5  ( d#  $( T]		  __
$))     g g gTi
 (-iX+
 (-+\!4(?.
 )( }  86"J"@D3,2
4"
L&r   