
    rh}                    
   U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZmZmZmZ ddlmZmZ ddlZddlZddlZddlmZ ddlmZm Z m!Z!m"Z" ddl#m$Z$ dd	l%m&Z& dd
l'm(Z(m)Z)m*Z* ddl+m,Z, erddl-Z-ddl.m/Z/ ddl0m1Z1m2Z2  G d de3      Z4 ejj                  e6      Z7dZ8ejr                  d7d       Z: ejv                  d       G d d             Z<ejv                   G d d             Z=da>de?d<   da@de?d<    ejv                  d       G d d             ZA ed      ZB G d dej                        ZDeDj                  ZF G d  d!ej                        ZGeGj                  ZHejv                   G d" d#             ZId$d%	 	 	 	 	 	 	 	 	 d8d&ZJd$d%	 	 	 	 	 	 	 	 	 d8d'ZKd9d(ZLd:d)ZMd;d*ZNd<d+ZOd=d,ZPd>d-ZQd?d.ZRe)j                   G d/ d0e(             ZTd@d1ZUdAd2ZVdBd3ZWdCd4ZXdCd5ZYdAd6ZZy)Da  
Profile Guided Optimization (PGO) implementation for Dynamo.

This module provides functionality for caching and managing code state profiles
that guide optimization decisions in Dynamo. It implements both local and remote
caching mechanisms for storing profile information across runs, handles profile
merging across distributed ranks, and manages the lifecycle of profile data
during compilation. The profiles track dynamic vs static properties of tensors
and help Dynamo make better specialization decisions.
    )annotationsN)defaultdict)OptionalTYPE_CHECKINGTypeVarUnion)overrideSelf)CompileEventLoggerdynamo_timedset_feature_use	warn_once)	is_fbcode)trace_structured_artifact)CacheArtifactCacheArtifactFactoryCacheArtifactManager)
OrderedSet)InstructionTranslator)
JsonDataTyRemoteCachec                      e Zd Zy)ReservedWorkflowIdUserErrorN)__name__
__module____qualname__     d/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/_dynamo/pgo.pyr   r   7   s    r   r   
   c                    t         j                  j                  |       s| S t        | d      5 }|j	                         }t        j                  |      }t        |dz  d      }|cd d d        S # 1 sw Y   y xY w)Nrbl    08x)ospathexistsopenreadzlibcrc32format)filepathfilecontentcrc32_valuehashs        r   _hash_containing_filer1   r   sg     77>>(#	h	 ))+jj)kJ.6	  s   6A..A7T)frozenc                  `    e Zd ZU ded<   ded<   ded<   ded<   ddZddZdd	Zedd
       Zy)CodeIdstrfilenameintfirstlinenoname	file_hashc                    t        |t              sy| j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S )NF)
isinstancer4   r:   r8   r9   selfothers     r   __eq__zCodeId.__eq__   sR    %(NNeoo- (  E$5$55(		UZZ'	
r   c                Z    t        | j                  | j                  | j                  f      S N)r0   r:   r9   r8   r>   s    r   __hash__zCodeId.__hash__   s"    T^^TYY0@0@ABBr   c                n    d| j                    d| j                   d| j                   d| j                   S )Nzhash():)r:   r6   r8   r9   rC   s    r   __str__zCodeId.__str__   s5    t~~&aa8H8H7I499+VVr   c                    t        | j                  | j                  | j                  t	        | j                              S rB   )r4   co_filenameco_firstlinenoco_namer1   )codes    r   makezCodeId.make   s6    LL!$"2"23	
 	
r   N)r?   objectreturnbool)rP   r7   rP   r5   )rM   types.CodeTyperP   r4   )	r   r   r   __annotations__r@   rD   rH   staticmethodrN   r   r   r   r4   r4      s>    M
I N
CW 
 
r   r4   c                  @    e Zd ZU  ej                  d       Zded<   y)	CodeStatec                      t        t              S rB   )r   FrameStateSizeEntryr   r   r   <lambda>zCodeState.<lambda>   s    ,? @ r   )default_factoryz%defaultdict[str, FrameStateSizeEntry]automatic_dynamicN)r   r   r   dataclassesfieldr\   rT   r   r   r   rW   rW      s!    ?P{?P?P@@< r   rW   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.
    r7   dimN)r   r   r   __doc__rT   r   r   r   rb   rb      s      
Hr   rb   _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   rd   tokenr   r   r   rg   rg          
 Er   rg   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   Nrh   r   r   r   rl   rl      rj   r   rl   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)rY   )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(rF   )auto_dynamic
auto_unsetr<   rb   rc   r5   )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rB   r   ).0rw   rx   s     r   	<genexpr>zCFrameStateSizeEntry.render.<locals>.render_tuple.<locals>.<genexpr>   s     "@=#3"@s   ])join)ssrx   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)})rw   z/Union[int, AutoDynamic, AutoUnset, InferStride]rP   r5   )r   z0tuple[Union[int, AutoDynamic, InferStride], ...]rP   r5   )rp   ru   rq   ro   r<   tuple)r>   r   rx   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 rB   )r<   ro   torchSymIntrp   r   rq   )r>   rw   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)rp   ru   rv   r>   rc   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rB   )typer7   )r|   rw   s     r   r}   z8FrameStateSizeEntry.is_stride_dynamic.<locals>.<genexpr>,  s     0SAaC0Ss   FT)r<   rp   r   allrq   ru   rv   r   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rB   )r<   r   r   ru   )r|   xs     r   r}   z4FrameStateSizeEntry._munge_symint.<locals>.<genexpr>7  s"     TAZ5<<%@\aGTs   ,.)r   )xss    r   _munge_symintz!FrameStateSizeEntry._munge_symint5  s    TQSTTTr   c                .    t        |t        t              S N)ro   rp   rq   )rY   ru   )clsr   s     r   make_scalarzFrameStateSizeEntry.make_scalar9  s    "!,|TTr   c                b    t        t        | j                  |      | j                  |            S r   )rY   ru   r   )r   rp   rq   s      r   make_tensorzFrameStateSizeEntry.make_tensor=  s0     #""4($$V,
 	
r   c                L    t        t        | j                  |      t              S r   )rY   rv   r   )r   rp   s     r   	make_sizezFrameStateSizeEntry.make_sizeG  s#    """4(
 	
r   c                d    | t         u r|S |t         u r| S | t        u s|t        u s| |k7  rt        S | S rB   )rv   ru   )r   ys     r   _merge_atomzFrameStateSizeEntry._merge_atomO  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rB   )r   )r|   r   r   r   s      r   r}   z6FrameStateSizeEntry._merge_atom_tup.<locals>.<genexpr>g  s      Ctq!S__Q*Cs   ")rv   ru   lenr   zip)r   r   yss   `  r   _merge_atom_tupz#FrameStateSizeEntry._merge_atom_tupY  sa     II|!3r7c"gCs2r{CCCr   c                   | j                  | j                  |j                        | _        | j                  | j                  |j                        | _        | j                  | j                  |j                        | _        | S rB   )r   ro   r   rp   rq   r=   s     r   __ior__zFrameStateSizeEntry.__ior__i  s[    &&t{{ELLA((EJJ?	**4;;Er   NrR   rP   None)rc   r7   rP   rQ   )r   tuple[int, ...]rP   z#tuple[Union[AutoDynamic, int], ...])r   r7   rP   rY   )rp   r   rq   r   rP   rY   )rp   r   rP   rY   )r   re   r   re   rP   zUnion[AutoDynamic, _T])r   -Union[AutoDynamic, AutoUnset, tuple[_T, ...]]r   r   rP   zAUnion[AutoDynamic, AutoUnset, tuple[Union[AutoDynamic, _T], ...]])r?   r
   rP   r
   )r   r   r   r]   r^   rv   ro   rT   rp   rq   r   r   r   r   rU   r   classmethodr   r   r   r   r   r   r   r   r   rY   rY      s)   1B1B1B:1VF.V 	*- 	
L 
 	*-   .&:<.04 U U U U 
"
,;
	
 
 
 
   D9D :D 
K	D Dr   rY   Fis_unspecialized_nn_modulec          
       
 t         j                  | j                        }t               |   }t        j
                  j                  j                  r|j                  v }|j                     }t        j                  |      
|z  }|r
j                  |j                  k7  rt        j                  dj                  
j                         t        j                  d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 |j                     
t        j                  d
j                  j                         |j                  <   }|S )Nz%automatic dynamic int %s val %s != %sr\   ro   zscalar changer9   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|dn||t        |      t        |      d       y )Nz#automatic dynamic %s %s %s %s != %sr\   r   r   )getattrlogdebugr   instantr5   )	tup_nameshort_reasonlong_reasoni	entry_tupold_entry_tupentryr9   	old_entrys	         r   log_tupz)update_automatic_dynamic.<locals>.log_tup  s     -.Ix(75(;STU;V 
 9 	8,Y1!4 
 II5 &&# ,-I51)!-0y>	r   rp   rc   zdimensionality changezsize(rF   zsize changer?   rq   zstride(zstride changez9automatic dynamic is off, overwriting int %s val %s -> %srB   )
r   r5   r   r5   r   r5   r   zOptional[int]rP   r   )r4   rN   f_codeget_code_stater   _dynamoconfigautomatic_dynamic_shapesr\   copyro   r   r   r   r   r5   inforp   r<   r   r   rangerq   )txr9   r   r   code_idframe_state	is_update	mut_entryr   r   r   s    ``       @r   update_automatic_dynamicr   p  s
    kk"))$G "7+K}}44K999	11$7	IIi(	U	 ))Y-=-==II7  	 &&# #+-!)"2"23u||,	 *O 	 TX		),	;>	CP		> 9>>9)..%0Z

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

1=#FeA3aL-KL 1))Y-=-==)**E2z%,,PU7Vy''(C,==He-DE$ ! #3u||#45 R$++A.%,,q/A#Hs!noqQR   '73   11$7			GLL		
 /4%%d+	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_stater\   )r   r9   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_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.rG   )r   	_inductorr   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                  ddd|  d      }t        j                  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   )	cache_keyr   code_state_keys      r   code_state_pathr   -  s\    ==;;		;<?VVOSK	{$2OPN77<<	X~>>r   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)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  8  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	  O  s)    9-/ 	 r   c                   t               }| j                  j                         D ]]  \  }}d}t        |j                  t
              rt        |j                  v }n|j                  t        k(  rd}|sM|j                  |       _ |S )NFT)	r   r\   itemsr<   rp   r   ru   ro   add)
code_statedynamic_sourcessrcfsdynamics        r   _collect_dynamic_sourcesr  ]  sv    '1|O//557 %Rbggu%"bgg-GYY,&G$% r   c                    t         j                  |       }t               |   }dj                  t	        |            }|r0t        dx}d      5  t        j                  ||       d d d        y y # 1 sw Y   y xY w)N,zpgo.dynamic_whitelistTlog_pt2_compile_event)recompile_dynamic_whitelist)r4   rN   r   r   r  r   r   pt2_compile)r   r   r   frame_whitelistr9   s        r   log_frame_dynamic_whitelistr  j  sw    kk&!G "7+Khh7DEO"99$QUV 	**/	 	 	 	s   A00A9c                    dj                  d | j                         D              }t               }| j                         D ]  }|j	                  t        |              |r|ddj                  |       dz  }|S )N
c              3     K   | ]=  \  }}| d dj                  d |j                  j                         D              z    ? yw)z:
r  c              3  N   K   | ]  \  }}d | d|j                            yw)z  z: N)r   )r|   r  r  s      r   r}   z.render_code_state.<locals>.<genexpr>.<genexpr>x  s,      
*1#rbR		}%
s   #%N)r   r\   r  )r|   kvs      r   r}   z$render_code_state.<locals>.<genexpr>v  sQ      
 Aq	 #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="r  ")r   r  r   valuesupdater  )cscode_state_strr  states       r   render_code_stater'  u  s    YY 
 HHJ N (2|O @7>?@GGJxxP_G`Faabd	

 r   c                  L    e Zd Zedd       Zeedd              Zedd       Zy)PGOCacheArtifactc                j    t        | j                  | j                        | j                        }|J y rB   )write_local_impl!_rewrite_cache_key_for_mega_cachekeyr.   )r>   metas     r   populate_cachezPGOCacheArtifact.populate_cache  s2    22488<dll
 r   c                      y)Npgor   r   r   r   r   zPGOCacheArtifact.type  s     r   c                H    | j                  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   )original_keynew_keys     r   r,  z2PGOCacheArtifact._rewrite_cache_key_for_mega_cache  s0     &&w/$&G3Nr   Nr   rR   )r3  r5   rP   r5   )r   r   r   r	   r/  rU   r   r,  r   r   r   r)  r)    sD            r   r)  c                   	 t         t         S t        t              a t               } | t         S d	fd}t	        |       		t
        j                  j                  	      rt        dx}d      5  t        j                  ||        t        	d      5 }	 |j                         }t        j                  |      a t        j                  ||j                                t!        j"                  t$        j'                         | |        |d      cd d d        cd d d        S t/               }|	t        dx}dd      5  t        j                  ||        	 |j1                  |       }|	 t3        |t4              sJ |d   }t3        |t6              sJ t9        j:                  |      }t        j                  |t=        |             t        j                  |      a t!        j"                  t$        j'                         | |        |d      cd d d        S t*        j?                  d|        	 d d d        t*        j?                  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        # 1 sw Y   x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        dd       t        j                  t              a
t        S )Nz$get_code_state %s hit %s, %d entriesget__code_statestringc                      t        t              S rB   r'  r`   r   r   r   rZ   z-get_code_state.<locals>.hit.<locals>.<lambda>      %k2 r   r1  T)r<   r`   r   r   r   r   r   r   r   deepcopyr_   )tyr%   s    r   hitzget_code_state.<locals>.hit  sf    +{3337r3{CST!2$k"2	

 	t$==5r   zpgo.get_local_code_stateTr  r   r"   cache_size_byteslocalz&get_code_state failed while reading %s)exc_infozpgo.get_remote_code_state!pgo_get_remote_code_state_time_usr  dynamo_compile_column_us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>  r5   rP   defaultdict[CodeId, CodeState]) r`   r   rW   r   r   r$   r%   r&   r   r   r  r'   r(   pickleloadstellr   record_artifactr)  r   	Exceptionr   warningr	  getr<   dictr5   base64	b64decoder   r   )
r   r?  r9   fr.   remote_cache
cache_datarH  payloadr%   s
            @r   r   r     s    i(KI 9%DBGGNN40..Dd
 	( **49E dD! (Q(ffhG"(,,w"7K&224!&&(S )88(--/G w<( (	( 	(, $%L//D"&%H
 $	L
 **49EL)--i8
 )-)*d;;;)&1)$444"("2"24"8*66 3w< '-ll7&; -<<,113Y  #8}E$	L $	LH HH?KI$	LL HH+,"""m ! KK@$QU   ( ( (	( 	( 	(` % O%%) $   =ySW  $	L $	Ls   0$J#JA
I 0J	J# K>K*K>-A3J0 0K>K>!J =J?J  J	J#J	J##J-0!KK>KK>!K;8K>:K;;K>>L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)r`   r   r   r_   r   put_local_code_stateput_remote_code_stater@  s    r   put_code_stater\    s^    DE&&67I9:#)$r   c                   t        |       }|y |dz   }|dz   }ddlm} t        j                  t        j
                  j                  |      d        ||t              5  t        |d      5 }|j                  |       |j                         }d d d        t        j                  ||       d d d        |fS # 1 sw Y   +xY w# 1 sw Y   |fS xY w)	Nz.tmpz.lockr   )FileLockT)exist_ok)timeoutwb)r   torch.utils._filelockr^  r$   makedirsr%   dirnameLOCK_TIMEOUTr'   writerM  replace)r   pickled_coder%   tmp_path	lock_pathr^  rU  rp   s           r   r+  r+    s    9%D|
 f}HwI /KK%5	)\	2 #(D! 	QGGL!668D	 	

8T"	#
 :		 	#
 :s$   !C."B:C:C	?CCc                   t        dx}d      5  t        j                  ||        t        J t	        j
                  t              }t        j                  t        j                         | |       t        | |      }|t        j                  d       	 d d d        y |\  }}t        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_local_code_stateTr  r@  z$put_code_state: local cache disabledrA  z*put_code_state: wrote local %s, %d entriesrZ  r9  c                      t        t              S rB   r;  r   r   r   rZ   z&put_local_code_state.<locals>.<lambda>G  r<  r   )r   r   r  r`   rK  dumpsr   rN  r)  r   r+  r   r   r   r   )r   r9   rh  r.  r%   rp   s         r   rZ  rZ  1  s    	88dPT	U 
&&tyA&&&||K0,,!!#Y	
  	<8<HH;<
 
 
d&&tdC=tSEUV!"2	
%
 
 
s   BC6AC66C?c                (   t        dx}dd      5  t        j                  ||        t        J t	               }|t
        j                  d       	 d d d        y t        j                  t              }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_stateT!pgo_put_remote_code_state_time_usrF  r@  z%put_code_state: remote cache disabledrA  rH  asciiz+put_code_state: wrote remote %s, %d entriesr[  r9  c                      t        t              S rB   r;  r   r   r   rZ   z'put_remote_code_state.<locals>.<lambda>g  r<  r   )r   r   r  r`   r	  r   r   rK  rm  r   rS  	b64encodedecodeputr   )r   r9   rV  r.   rW  s        r   r[  r[  K  s    	++"!D
 

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

 	J/99c+FV	
 	"#2	
1
 
 
s   ADB#DDc                     d a d ay rB   )r`   r_   r   r   r   reset_code_staterv  l  s    Kr   )r,   r5   rP   r5   )
r   r   r9   r5   r   rY   r   rQ   rP   rY   )rP   Optional[str])r   r5   rP   rw  )rP   rQ   )rP   z!Optional[RemoteCache[JsonDataTy]])r  rW   rP   zOrderedSet[str])r   rS   rP   r   )r$  rJ  rP   r5   )rP   rJ  r   )r   r5   rh  bytesrP   zOptional[tuple[str, int]])r   r5   rP   r   )[rd   
__future__r   rS  r   r]   enum	functoolsloggingr$   rK  r   r)   collectionsr   typingr   r   r   r   typing_extensionsr	   r
   torch._dynamo.configr   torch._utils_internaltorch.compiler.configtorch.distributeddistributedr   torch._dynamo.utilsr   r   r   r   torch._environmentr   torch._logging._internalr   torch.compiler._cacher   r   r   torch.utils._ordered_setr   typestorch._dynamo.symbolic_convertr   r  r   r   
ValueErrorr   	getLoggerr   r   re  cacher1   	dataclassr4   rW   r_   rT   r`   rb   re   Enumrg   ri   rv   rl   ru   rY   r   r   r   r   r  r	  r  r  r'  registerr)  r   r\  r+  rZ  r[  rv  r   r   r   <module>r     s|  	 #       	  	  # : : ,       ) > 
 0 DD	* 	 g!j 	 	 d#$
 $
 $$
N    >B : A8<5 < d#  $( T]		  __
$))     J J Jd (-ii
i i
 !%i ib (-++
+ +
 !%+ +\F?.
( }  8]@%$2
4
Br   