
    #hve                    d   U 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
mZ d dlmZmZmZmZmZmZ d dl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 d dl m!Z! d dl"m#Z# erd dl$Z$d d	l%m&Z& d d
l'm(Z(m)Z)  G d de*      Z+ ejX                  e-      Z.dZ/ ej`                  d       G d d             Z1ej`                   G d d             Z2da3de4d<   da5de4d<    ej`                  d       G d d             Z6 ed      Z7 G d dejp                        Z9e9jt                  Z; G d dejp                        Z<e<jt                  Z=ej`                   G d d             Z>d d!	 	 	 	 	 	 	 	 	 d.d"Z?d d!	 	 	 	 	 	 	 	 	 d.d#Z@d/d$ZAd0d%ZBd1d&ZCd2d'ZDd3d(ZEd4d)ZFd5d*ZGd6d+ZHd6d,ZId5d-ZJy)7    )annotationsN)defaultdict)DefaultDictOptionalTupleTYPE_CHECKINGTypeVarUnion)Self)dynamo_timedget_chromium_event_logger	warn_once)	is_fbcode)trace_structured_artifact)InstructionTranslator)
JsonDataTyRemoteCachec                      e Zd Zy)ReservedWorkflowIdUserErrorN)__name__
__module____qualname__     N/var/www/html/sandstorm/venv/lib/python3.12/site-packages/torch/_dynamo/pgo.pyr   r      s    r   r   
   T)frozenc                  >    e Zd ZU ded<   ded<   ded<   edd       Zy)	CodeIdstrfilenameintfirstlinenonamec                X    t        | j                  | j                  | j                        S N)r   co_filenameco_firstlinenoco_name)codes    r   makezCodeId.make`   s!    d&&(;(;T\\JJr   N)r*   ztypes.CodeTypereturnr   )r   r   r   __annotations__staticmethodr+   r   r   r   r   r   Z   s&    M
IK Kr   r   c                  @    e Zd ZU  ej                  d       Zded<   y)	CodeStatec                      t        t              S r&   )r   FrameStateSizeEntryr   r   r   <lambda>zCodeState.<lambda>h   s    ,? @ r   )default_factoryz%DefaultDict[str, FrameStateSizeEntry]automatic_dynamicN)r   r   r   dataclassesfieldr5   r-   r   r   r   r0   r0   e   s!    ?P{?P?P@@< r   r0   z(Optional[DefaultDict[CodeId, CodeState]]_INIT_CODE_STATE_CODE_STATEc                      e Zd ZU dZded<   y)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.
    r"   dimN)r   r   r   __doc__r-   r   r   r   r;   r;   p   s      
Hr   r;   _Tc                      e Zd ZdZdZy)	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=   tokenr   r   r   r@   r@          
 Er   r@   c                      e Zd ZdZdZy)AutoDynamicz
    The top element of our (bounded) semilattice, whenever you merge this with
    any other element you always get it again
    r   NrA   r   r   r   rE   rE      rC   r   rE   c                  J   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y)r2   )defaultz"Union[int, AutoDynamic, AutoUnset]scalarzBUnion[AutoDynamic, AutoUnset, Tuple[Union[int, AutoDynamic], ...]]sizezOUnion[AutoDynamic, AutoUnset, Tuple[Union[int, AutoDynamic, InferStride], ...]]stridec                   ddd	fd}| j                   t        u r4| j                  t        u r"| j                  t        u ryd| j                   S | j                  t        u r\t	        | j                   t
              rBt	        | j                  t
              r(d || j                          d || j                         S y)
Nc                |    | t         u ry| t        u ryt        | t              rd| j                   dS t        |       S )N?z
auto unsetzS())auto_dynamic
auto_unset
isinstancer;   r<   r    )ss    r   render_singlez1FrameStateSizeEntry.render.<locals>.render_single   s<    L j#A{+AEE7!}$1vr   c                D    ddj                  fd| D              z   dz   S )N[z, c              3  .   K   | ]  } |        y wr&   r   ).0rR   rS   s     r   	<genexpr>zCFrameStateSizeEntry.render.<locals>.render_tuple.<locals>.<genexpr>   s     "@=#3"@s   ])join)ssrS   s    r   render_tuplez0FrameStateSizeEntry.render.<locals>.render_tuple   s"    "@R"@@@3FFr   zfully dynamic scalar or tensorzscalar ztensor size=z stride=zunusual {repr(self)})rR   z/Union[int, AutoDynamic, AutoUnset, InferStride]r,   r    )r[   z0Tuple[Union[int, AutoDynamic, InferStride], ...]r,   r    )rI   rO   rJ   rH   rQ   tuple)selfr\   rS   s     @r   renderzFrameStateSizeEntry.render   s    			G 99$)D{{l*7 ..[[L($))U+
4;;0N%l499&=%>h|TXT_T_G`Fabb &r   c                   t        | j                  t        j                        rJ | j                         t        | j                  t
              r2| j                  D ]#  }t        |t        j                        sJ |        t        | j                  t
              r3| j                  D ]#  }t        |t        j                        sJ |        y y r&   )rQ   rH   torchSymIntrI   r]   rJ   )r^   rR   s1s      r   __post_init__z!FrameStateSizeEntry.__post_init__   s    dkk5<<8E$++E8dii'YY :%a6996:dkk5)kk <%b%,,7;;7< *r   c                x    | j                   t        u ry| j                   t        u ry| j                   |   t        u S )NTF)rI   rO   rP   r^   r<   s     r   is_size_dynamicz#FrameStateSizeEntry.is_size_dynamic   s3    99$99
"yy~--r   c                    t        | j                  t              rt        d | j                  D              sy| j                  t
        u ry| j                  t        u ry| j                  |   t
        u S )Nc              3  >   K   | ]  }t        |      t        u   y wr&   )typer"   )rW   rR   s     r   rX   z8FrameStateSizeEntry.is_stride_dynamic.<locals>.<genexpr>   s     0SAaC0Ss   FT)rQ   rI   r]   allrJ   rO   rP   rf   s     r   is_stride_dynamicz%FrameStateSizeEntry.is_stride_dynamic   sX    " tyy%(S0S0S-S;;,&;;*${{3<//r   c                &    t        d | D              S )Nc              3  `   K   | ]&  }t        |t        j                        rt        n| ( y wr&   )rQ   ra   rb   rO   )rW   xs     r   rX   z4FrameStateSizeEntry._munge_symint.<locals>.<genexpr>   s"     TAZ5<<%@\aGTs   ,.)r]   )xss    r   _munge_symintz!FrameStateSizeEntry._munge_symint   s    TQSTTTr   c                .    t        |t        t              S N)rH   rI   rJ   )r2   rO   )clsro   s     r   make_scalarzFrameStateSizeEntry.make_scalar   s    "!,|TTr   c                b    t        t        | j                  |      | j                  |            S rs   )r2   rO   rq   )rt   rI   rJ   s      r   make_tensorzFrameStateSizeEntry.make_tensor   s0     #""4($$V,
 	
r   c                L    t        t        | j                  |      t              S rs   )r2   rP   rq   )rt   rI   s     r   	make_sizezFrameStateSizeEntry.make_size  s#    """4(
 	
r   c                d    | t         u r|S |t         u r| S | t        u s|t        u s| |k7  rt        S | S r&   )rP   rO   )ro   ys     r   _merge_atomzFrameStateSizeEntry._merge_atom  s:    
?H
?H\ 1Q!Vr   c                     |t         u r|S |t         u r|S |t        u s|t        u rt        S t        |      t        |      k7  rt        S t         fdt	        ||      D              S )Nc              3  H   K   | ]  \  }}j                  ||        y wr&   )r|   )rW   ro   r{   rt   s      r   rX   z6FrameStateSizeEntry._merge_atom_tup.<locals>.<genexpr>%  s      Ctq!S__Q*Cs   ")rP   rO   lenr]   zip)rt   rp   yss   `  r   _merge_atom_tupz#FrameStateSizeEntry._merge_atom_tup  sa     II|!3r7c"gCs2r{CCCr   c                   | j                  | j                  |j                        | _        | j                  | j                  |j                        | _        | j                  | j                  |j                        | _        | S r&   )r|   rH   r   rI   rJ   )r^   others     r   __ior__zFrameStateSizeEntry.__ior__'  s[    &&t{{ELLA((EJJ?	**4;;Er   N)r,   r    r,   None)r<   r"   r,   bool)rp   Tuple[int, ...]r,   z#Tuple[Union[AutoDynamic, int], ...])ro   r"   r,   r2   )rI   r   rJ   r   r,   r2   )rI   r   r,   r2   )ro   r>   r{   r>   r,   zUnion[AutoDynamic, _T])rp   -Union[AutoDynamic, AutoUnset, Tuple[_T, ...]]r   r   r,   zAUnion[AutoDynamic, AutoUnset, Tuple[Union[AutoDynamic, _T], ...]])r   r   r,   r   )r   r   r   r6   r7   rP   rH   r-   rI   rJ   r_   rd   rg   rl   r.   rq   classmethodru   rw   ry   r|   r   r   r   r   r   r2   r2      s+   1B1B1B:1VF.V
 	*- 	  .
 	*-   .&:<.04 U U U U 
"
,;
	
 
 
 
   D9D :D 
K	D Dr   r2   Fis_unspecialized_nn_modulec                 
 t         j                  | j                        }t               |   }|j                  v }|j                     }t        j
                  |      
|z  }|r
j                  |j                  k7  rt        j                  dj                  
j                         t               j                  dt        j                         ddt        
j                        t        j                        d       |rt        j                  d       	 d	 	 	 	 	 	 	 	 	 d
fd}|r
j                  |j                  k7  rt!        
j                  t"              rt!        j                  t"              rt%        
j                        t%        j                        k7  r |dd	d
       n]t'        t%        j                              D ]1  }	
j                  |	   j                  |	   k7  s# |dd|	 dd|	       3 n
 |ddd       |r
j(                  |j(                  k7  rt!        
j(                  t"              rt!        j(                  t"              rt%        
j(                        t%        j(                        k7  r |dd	d
       |S t'        t%        j(                              D ]1  }	
j(                  |	   j(                  |	   k7  s# |dd|	 dd|	       3 |S  |ddd       |S )Nz%automatic dynamic int %s val %s != %sr5   rH   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`.c                @   |t        |       nt        |       |   }|t        |       nt        |       |   }t        j                  d| |||       t               j	                  dt        j                         |dn||t        |      t        |      d       y )Nz#automatic dynamic %s %s %s %s != %sr5   rk   r   )getattrlogdebugr   log_instant_eventtimetime_nsr    )	tup_nameshort_reasonlong_reasoni	entry_tupold_entry_tupentryr$   	old_entrys	         r   log_tupz)update_automatic_dynamic.<locals>.log_tupX  s     )*	GE8$wuh7OPQ7R 	
 y Ix(H-a0 	
 			1	
 	"#55LLN()	uq%m,9~
	
r   rI   r<   zdimensionality changezsize(rN   zsize changer   rJ   zstride(zstride changer&   )
r   r    r   r    r   r    r   zOptional[int]r,   r   )r   r+   f_codeget_code_stater5   copyrH   r   r   r   r   r   r   r    inforI   rQ   r]   r   rangerJ   )txr$   r   r   code_idframe_state	is_update	mut_entryr   r   r   s    ``       @r   update_automatic_dynamicr   .  s    kk"))$G "7+K555I--d3I		)$II Y%%)9)99		3LL		
 	"#55LLN')i../5<<(
	
 &HHK 	 PT

%(
7:
?L
	
@ Y^^y~~5inne,EJJ1N9>>"c%**o5'>?s5::/ HA ~~a(EJJqM9%s!mQGH FGW-Y%%)9)99i&&.:ellE3R9##$ELL(99%)@A  s5<<01 NA ''*ell1o=GA3a./1MN  Hgw/r   c                  | j                   x}t        | |||      S |j                  ||j                  j                  |<   |S d }|j                  D ]-  }||j                  v st        | ||j                  |   |      }/ |J |S )Nr   )distributed_stater   
all_stateslocal_stater5   )r   r$   r   r   stres	sub_states          r   process_automatic_dynamicr     s     """+''A	
 	
 
	 27((.  	Iy222.//5/I		 
r   c                 &   t         j                  j                  j                  rt	        d       y d } t        j                         r(t        j                         rt        j                         } t         j                  j                  j                  }t         j                  j                  j                  x}&|j                  d      rt        d      | d|  d| S t         j                  j                         x}|\  }}d| d| d|  d| S y )NzHdynamo_pgo force disabled by torch._inductor.config.force_disable_cachesz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   	_inductorconfigforce_disable_cachesr   distis_availableis_initializedget_rankcompilercache_key_tagjob_id
startswithr   _utils_internalget_mast_job_name_version)ranktagrname_versionmast_job_namemast_job_versions         r   get_cache_keyr     s    22V	
  Dt224}}
..


-
-C ^^"")))6<< -$ 
 AdV1SE""--GGIIV*6''}oQ'7&8$qFFr   c                    t         j                  j                  j                  st        j                  d       y ddlm} t        j                  j                   |       dd|  d      S )Nz'automatic_dynamic_local_pgo not enabledr   )	cache_dirdynamocode_state_z.pkl)ra   _dynamor   automatic_dynamic_local_pgor   r   %torch._inductor.runtime.runtime_utilsr   ospathrZ   )	cache_keyr   s     r   code_state_pathr     sJ    ==;;		;<?77<<	XYKt/LMMr   c                 `   t         j                  j                  j                  ryt         j                  j                  j
                  x} | S t               syt         j                  j                         ry	 ddl	m
} |t         j                  j                  d      k\  S # t        $ r Y yw xY w)NFr   )REMOTE_CACHE_VERSIONz'pytorch/remote_cache:dynamo_pgo_version)ra   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    22]]!!>>>K;,,.H  5#8#8#M#M1$    s   9B! !	B-,B-c                 J    ddl m}  t               sy  | dt               dd      S )Nr   create_cachez
dynamo-pgoFbRemoteDynamoPGOCacheRemoteDynamoPGOCache)torch._inductor.remote_cacher   r   r   r   s    r   get_remote_cacher     s)    9-/ 	 r   c                N    dj                  d | j                         D              S )N
c              3     K   | ]a  \  }}|j                    d |j                   d |j                   ddj                  d |j                  j                         D              z    c yw)r   z:
r   c              3  N   K   | ]  \  }}d | d|j                            yw)z  z: N)r_   )rW   srcfss      r   rX   z.render_code_state.<locals>.<genexpr>.<genexpr>  s,      
*1#rbR		}%
s   #%N)r!   r#   r$   rZ   r5   items)rW   kvs      r   rX   z$render_code_state.<locals>.<genexpr>  sj      
 Aq	 ::,aaxs3
)) 
565H5H5N5N5P
 
	
s   A'A))rZ   r   )css    r   render_code_stater     s(    99 
 HHJ  r   c                 @  	 t         t         S t               } t        t              a t	               }|t         S d	fd}t        |      		t        j                  j                  	      rt        dx}d      5  | j                  ||       t        	d      5 }	 t        j                  |      a | j                  ||j                                 |d      cd d d        cd d d        S t%               }|t        dx}d      5  | j                  ||       	 |j'                  |      }|	 t)        |t*              sJ |d   }t)        |t,              sJ t/        j0                  |      }| j                  |t3        |             t        j4                  |      a  |d      cd d d        S t         j7                  d|       	 d d d        t         j7                  d       t         J t         S # t        $ r t         j#                  d		d
       Y nw xY w	 d d d        n# 1 sw Y   nxY wd d d        M# 1 sw Y   WxY w# t        $ r t         j#                  d|d
       Y w xY w# t        $ r t         j#                  d|d
       Y w xY w# 1 sw Y   xY w)Nc                    t        t        t              sJ t        j	                  d| t        t                     t        d|  d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   r9   r   r   r   r3   z-get_code_state.<locals>.hit.<locals>.<lambda>0      %k2 r   )
rQ   r9   r   r   r   r   r   r   deepcopyr8   )tyr   s    r   hitzget_code_state.<locals>.hit)  s\    +{3337r3{CST!2$k"2	

  ==5r   zpgo.get_local_code_stateTlog_pt2_compile_eventr   rbcache_size_byteslocalz&get_code_state failed while reading %s)exc_infozpgo.get_remote_code_statedataremotez1get_code_state failed parsing remote result on %sz get_code_state remote miss on %sz'get_code_state failed remote read on %szget_code_state using default)r   r    r,   DefaultDict[CodeId, CodeState])r9   r   r   r0   r   r   r   r   existsr   add_event_dataopenpickleloadtell	Exceptionr   warningr   getrQ   dictr    base64	b64decoder   loadsr   )
chromium_logr   r   r$   fremote_cache
cache_datar  payloadr   s
            @r   r   r     s   ,.L i(KI
 9%DBGGNN40..Dd
 	( ''	'B dD! 	(Q("(++a.K //qvvx/P w<	( 	(	( 	($ $%L//Dt
 	L ''	'BL)--i8
 )-)*d;;;)&1)$444"("2"24"8$33D3w<3X&,ll7&;  #8}7	L 	L: HH?K;	L> HH+,"""Y ! KK@$QU   	( 	( 	(	( 	( 	(P % O%%) $   =ySW  	L 	Ls   : H9H#6G2H#	H9JI--J0A/IJ0J2!HH#HH#	H9#H,	(H99I!I*'J)I**J-!JJJJJc                     t         t        j                  d       y t         t        k(  rt        j                  d       y t	               } | t        j                  d       y t        |        t        |        y )Nz1put_code_state: never initialized, will not writez#put_code_state: no change, skippingz&put_code_state: no cache key, skipping)r9   r   r   r8   r   put_local_code_stateput_remote_code_stater   s    r   put_code_stater  q  s^    DE&&67I9:#)$r   c           	        t        dx}d      5  t               }|j                  ||        t        J t	        |       }|t
        j                  d       	 d d d        y |dz   }|dz   }dd	lm} t        j                  t        j                  j                  |      d
        ||t              5  t        |d      5 }t        j                   t        |       |j                  ||j#                                d d d        t        j$                  ||       t
        j                  d|t'        t                     t)        ddd        d d d        d d d        y # 1 sw Y   bxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nzpgo.put_local_code_stateTr   r   z$put_code_state: local cache disabledz.tmpz.lockr   )FileLock)exist_ok)timeoutwbr  z*put_code_state: wrote local %s, %d entriesr  r   c                      t        t              S r&   r   r   r   r   r3   z&put_local_code_state.<locals>.<lambda>  s    )+6 r   )r   r   r	  r9   r   r   r   filelockr  r   makedirsr   dirnameLOCK_TIMEOUTr
  r  dumpr  renamer   r   )r   r$   r  r   tmp_path	lock_pathr  r  s           r   r  r    sW   	88dPT	U "02##DI#>&&&y)<HH;<" " &=7N	 	&
BGGOOD)D9i6 	h% MK+++D1668+LM IIh%HH<dCDT &&6	-" ".M M	 	-" "sD   A	E6"AE64E*<E=AE*E6E'#E**E3	/E66E?c                *   t        dx}d      5  t               }|j                  ||        t        J t	               }|t
        j                  d       	 d d d        y t        j                  t              }|j                  |t        |             dt        j                  |      j                  d      i}|j                  | |       t
        j                  d	| t        t                     t        d
dd        d d d        y # 1 sw Y   y xY w)Nzpgo.put_remote_code_stateTr   r   z%put_code_state: remote cache disabledr  r  asciiz+put_code_state: wrote remote %s, %d entriesr  r   c                      t        t              S r&   r   r   r   r   r3   z'put_remote_code_state.<locals>.<lambda>  r   r   )r   r   r	  r9   r   r   r   r  dumpsr   r  	b64encodedecodeputr   )r   r$   r  r  contentr  s         r   r  r    s    	99dQU	V 
02##DI#>&&&')HH<=
 
 ,,{+##D3w<#HF$$W-44W="

 	J/99c+FV	
 	"#2	
+
 
 
s   AD	!BD		Dc                     d a d ay r&   )r9   r8   r   r   r   reset_code_stater5    s    Kr   )
r   r   r$   r    r   r2   r   r   r,   r2   )r,   Optional[str])r   r    r,   r6  )r,   r   )r,   z!Optional[RemoteCache[JsonDataTy]])r   r  r,   r    )r,   r  r   )r   r    r,   r   )K
__future__r   r  r   r6   enumloggingr   r  r   collectionsr   typingr   r   r   r   r	   r
   typing_extensionsr   torch._dynamo.configra   torch._utils_internaltorch.compiler.configtorch.distributeddistributedr   torch._dynamo.utilsr   r   r   torch._environmentr   torch._logging._internalr   typestorch._dynamo.symbolic_convertr   r   r   r   
ValueErrorr   	getLoggerr   r   r'  	dataclassr   r0   r8   r-   r9   r;   r>   Enumr@   rB   rP   rE   rO   r2   r   r   r   r   r   r   r   r   r  r  r  r5  r   r   r   <module>rK     s   "      	   # N N "      R R ( > DD	* 	 g!j d#K K $K    >B : A8<5 < d#  $( T]		  __
$))     J J Jd (-``
` `
 !%` `P (-++
+ +
 !%+ +\FN.Sl%$#L
<r   