
    IЦi^                     >   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKJrJrJrJrJrJrJrJrJr  S SKJr  S SKrS SKJrJrJr  S SKJr  S SKJ r   S SK!J"r"  S SK#J$r$  S S	K%J&r&J'r'  S S
K(J)r)  S SK*J+r+  SSK,J-r-J.r.  SSK/J0r0J1r1J2r2J3r3J4r4  SSK5J6r6  \Rn                  " \85      r9\\   r:\ Rv                  " SSS/5      r</ SQr=\R|                  " S5      S\?4S j5       r@  S6S\\0   S\?S\\A   SS4S jjrBS\\0   S\R                  4S jrD  S7S\\:   S\\A\A4   S\\A   S\ESS4
S jjrFS\\A\A4   S\\A\<4   4S  jrGS!\R<                  RH                  S\:SS4S" jrH\R                  S\S   4S# j5       rJ " S$ S%5      rK " S& S'5      rL\R                   " S( S)5      5       rN\R                  " 5       rPS*\S+\SS4S, jrQS-\AS\4S. jrRSS/.S0\S1\A4   S2\R                  R                  S3\\A\4   S4\\\A\R                  4      S\A4
S5 jjrVg)8    N)	AnyCallableDictIOIteratorListOptionalTypeUnion)patch)
draw_graphget_aot_graph_nameget_graph_being_compiled)fx)save_graph_repro)get_debug_dir)GraphModule)_extract_tensor_metadataTensorMetadata)legalize_graph)tree_map   )configir)BaseSchedulerNodeFusedSchedulerNodeNopKernelSchedulerNode
OutputNodeSchedulerNode)VBufMetanamen_origin)dotz-Gnslimit=2z-Gnslimit1=2z-Gmaxiter=5000returnc                       [         R                  " SS/[         R                  S9  g! [         R                   a     gf = f)Nwhichr$   )stderrTF)
subprocesscheck_outputPIPESubprocessError     T/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/_inductor/debug.pyhas_dotr0   -   s;    % 0I%% s   %( ??nodesprint_graphfnamec           
         [        5       (       d  [        R                  S5        gUc
  [        5       n[	        U 5      nUR
                   H  nSUR                  ;  a  M  UR                  S   R                  n[        U[        5      (       a$  [        US   [        5      (       a  US   4nOUS   nSn[        U[        R                  5      (       a  UR                  R                  n[        XVSSSSS5      nXtR                  S'   M     U(       a  [!        U5        [#        0 U5      n[%        U5        UR&                  R)                  5         [+        XS[,        R.                  R0                  S9  g)z
Draw a graph in fname.svg.
z*draw_buffers() requires `graphviz` packageNfusion_metar   tensor_metaF)
clear_metadot_graph_shape)r0   logwarningr   create_fx_from_snodesr1   metagroup
isinstancetupleintr   ComputedBufferdatadtyper   printr   r   graphlintr   r   tracer8   )	r1   r2   r3   rE   noder=   rC   metadatagms	            r/   draw_buffersrK   6   s"    99@A}(*!%(E		)		-(..eU##%(C((qa dB--..IIOOE!%dD$M#+		- ! $ e	R	B2HHMMO
eV\\5Q5Qr.   snodesc                 t  ^ S[         S[        S[        4   4S jn[        R                  " S/ SQ5      n0 n0 n[
        R                  R                  5       nSn/ nSnU  GH  n	U	R                  5       (       a  Sn
U
nOU	R                  5       (       a  S	n
U
nOm[        U	[        5      (       a  S
n
U
nOS[        U	[        5      (       a  Sn
U	R                  nO/[        U	[        5      (       a  Sn
U	R                  nO[        S5      e[
        R                   R"                  R%                  U	R'                  5       S5      nU
 SU 3nU" U5      n0 n[)        U	S5      (       a  SU	R+                  5       0nUR-                  USUS9nS[.        [0        [        4   S[2        4U4S jjmT" U	5      (       a  UR5                  U5        U	R7                  5       nUUl        U" XU
5      UR:                  S'   XU'   U	R=                  5        H  nXUR7                  5       '   M     Ub  GM  UnGM     U  H  n	U	R7                  5       nU	R>                  R@                  nUU   n/ nU H  nUR8                  U;   a  UUR8                     nODURC                  U5         URE                  UR8                  5      nUUUR8                  '   SSS5        WU:X  a  Mo  UR5                  U5        M     [G        U5      Ul$        M     URK                  [M        U5      S:X  a  US   5        U$ [G        U5      5        U$ ! , (       d  f       Nu= f):
Creates a FX Graph from a list of SchedulerNode objects.
r"   r%   .c                 4    S[         S[        4S jnXl        U$ )Nargsr%   c                      gNr   r-   )rP   s    r/   func1;create_fx_from_snodes.<locals>.get_fake_func.<locals>.func1j   s    r.   )r   r@   __name__)r"   rS   s     r/   get_fake_func,create_fx_from_snodes.<locals>.get_fake_funci   s!    	 	 	 r.   
FusionMeta)r=   snodetypeNexterntemplatenopcomputefusedzUnknown node typeoriginal_atenz: 
get_devicedevicer-   rP   kwargsrY   c                    > [        U [        5      (       a  [        U4S jU R                   5       5      $ [        S U R	                  5        5       5      $ )Nc              3   4   >#    U  H  nT" U5      v   M     g 7fNr-   ).0x	in_outputs     r/   	<genexpr>;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>   s     >A9Q<<s   c              3   ~   #    U  H3  nUR                     H  n[        UR                  [        5      v   M!     M5     g 7frg   )usersr>   rH   r   )rh   bufusers      r/   rk   rl      s6      .CIID 499j11% 2.s   ;=)r>   r   anyrL   get_outputs)rY   rj   s    r/   rj   (create_fx_from_snodes.<locals>.in_output   sI    %!344>>>>  ,,.  r.   r5   r   r   )'strr   r@   collections
namedtupletorchr   Graph	is_externis_templater>   r   r   r=   r   RuntimeError	_inductorutilsget_fused_kernel_name	get_nodeshasattrra   call_functionr   r   boolappendget_namer"   r<   rr   read_writesreadsinserting_beforeplaceholderr?   rP   outputlen)rL   rV   rX   buf_to_fx_nodenode_to_fx_noderE   
first_nodeoutputsr=   rY   	node_type
fused_name	func_name	node_funcrd   fx_noder"   ro   depsnew_argsdepdep_noderj   s                         @r/   r;   r;   d   s   
C HS#X$6  ''6PQJNOHHNNEJGE?? IE  "IE566IE}--!IKKE122IKKE233__**@@OO

 !kJ<0	!),	5,'' 0 0 23F%%ib%H	U#46H#HI 	d 	 UNN7#~~&0y&I]# '$$&C-43<<>* '  Je j ~~  &&!$'Cxx>))#((3++J7$00:H/7N388, 8 7"OOH%  X# & 
LLs7|q0EL 7<GnEL 87s   +L))
L7node_name_to_buf_nameparent_buf_name	n_originsc                 x   U c  g U  H  nUR                  5       nUR                  5       nUb#  [        U5      S:  a  [        UUUc  UOU5        MI  [        U5      S:X  a	  US   U:X  d   eUR                  nUb  UR
                  c  M  UR
                   H  nUR                  n	X;  d  M  Uc  UOUX'   M!     M     g )Nr   r   )r   r   r   $update_orig_fx_node_name_to_buf_namerH   originsr"   )
r1   r   r   r   rH   buf_namechildren_nodesir_nodeorigin	node_names
             r/   r   r      s     }==?)%#n*=*A0%+3
 ~&!+q0AT0III))?goo5ooFI 5 / 7H_ &0 &# r.   c                     0 nU R                  5        H$  u  p#X1;  a  U1X'   M  X   R                  U5        M&     0 nU R                  5        H  u  p#[        X   5      n[        X55      XB'   M!     U$ rg   )itemsaddr   r!   )r   buf_name_to_n_noder   r   node_name_to_buf_metan_nodes         r/   get_node_name_to_buf_metar      s     4::<	-,5;((,,Y7	  = 4::<	'12+28+D(  = ! r.   rJ   c                     0 n[        X5        Uc  g[        U5      nU R                  R                   H=  nUR                  U;   d  M  UR                  UR                  5      UR                  S'   M?     g)rN   Nbuf_meta)r   r   rE   r1   r"   getr<   )rJ   rL   r   r   rH   s        r/   annotate_orig_fx_with_snodesr      sc     -/(G$56KL99--$9$=$=dii$HDIIj! r.   c               #     #    [         R                  R                  SS5      S:H  n SS Kn[        R
                  " UR                  R                  R                  5      n[        R                  " 5       nU (       d   S v   UR                  5         g UR                  [        SS5      5        [         R                  R                  [!        5       S5      n[         R"                  " USS9  [        R$                  " [         R                  R                  US	['        5        S
35      5      nUR)                  [        R*                  5        UR-                  [        R.                  " S5      5        UR1                  U5         S v   UR3                  U5        UR                  5         g ! UR                  5         f = f! UR3                  U5        UR                  5         f = f7f)NTORCH_COMPILE_DEBUG01r   z*functorch.compile.config.debug_partitionerTtorchinductor)exist_okaot_z
_debug.log3[%(filename)s:%(lineno)d %(levelname)s] %(message)s)osenvironr   torch._functorch.aot_autogradlogging	getLogger
_functorchaot_autogradrU   
contextlib	ExitStackcloseenter_contextr   pathjoinr   makedirsFileHandlerr   setLevelDEBUGsetFormatter	Formatter
addHandlerremoveHandler)compile_debugrw   r9   stackr   fhs         r/   enable_aot_loggingr     sY    JJNN#8#>#EM(


E,,99BB
CC  "E	KKM 
JDQR77<<9DKKt$			
%'(
3	

B KKOOOP NN2"3 KKM0 	"s7   A8G;F$ ?C>G>F9 "G$F66G9#GGc                      \ rS rSr\R
                  " 5       r\S\S\	\   4S j5       r
SS jrS\SS4S jr SS	\S
\S\S\S\\   4
S jjr\R"                   SS	\S
\S\S\S\\\      4
S jj5       rS\S\4S jrSS jrSS jrS	\S\SS4S jrS\	\\      S\	\   S\	\   SS4S jrSS jrS\S\	\S      4S jrSrg) DebugContexti4  folder_namer%   c                 P   [         R                  R                  =(       d
    [        5       n[        R
                   Hg  n[        R                  R                  USU  SU 35      n[        R                  R                  U5      (       a  MO  [        R                  " U5        Us  $    g )Nr   .)r   rG   	debug_dirr   r   _counterr   r   r   existsr   )r   r   ndirnames       r/   create_debug_dirDebugContext.create_debug_dir7  sy    LL**=mo	&&Aggll-q$G
 77>>'**G$ ' r.   Nc                 T    S U l         S U l        [        R                  " 5       U l        g rg   )_prof_pathr   r   _stack)selfs    r/   __init__DebugContext.__init__E  s     

 **,r.   new_pathc                    U R                   (       d  g UR                  S5      (       d   U5       eSSKJn   U" U S35         [        R
                  R                  U5      (       a  [        R                  " U5        [        R                  " U R                   U5        S S S 5        g ! , (       d  f       g = f! [         a$    [        R                  SU R                   U5         g f = f)Nz.debugr   )FileLockz.lockz(Failed to copy debug files from %s to %s)r   endswithfilelockr   r   r   r   shutilrmtreecopytreeOSErrorr9   r:   )r   r   r   s      r/   copyDebugContext.copyJ  s    zz  **4H4*%	XJe,-77>>(++MM(+

H5 .--  	KK:DJJ	s0   B8 AB'B8 '
B51B8 5B8 8+C&%C&filename
write_moderP   rd   c                     U R                   (       d   e[        [        R                  R	                  U R                   U5      U/UQ70 UD6$ rg   r   openr   r   r   )r   r   r   rP   rd   s        r/   fopenDebugContext.fopenZ  s:     zzzBGGLLX6
TTTVTTr.   c              /      #    U R                   (       d   e[        [        R                  R	                  U R                   U5      U/UQ70 UD6 nUv   S S S 5        g ! , (       d  f       g = f7frg   r   )r   r   r   rP   rd   fs         r/   fopen_contextDebugContext.fopen_contextd  sN      zzz"'',,tzz84jR4R6RVWG SRRs   AA-A	A-
A*&A-suffixc                 |    U R                   (       d   e[        R                  R                  U R                   U5      $ rg   )r   r   r   r   )r   r   s     r/   r   DebugContext.filenamep  s'    zzzww||DJJ//r.   c                 *   [         R                  R                  b  SS KnU R                  (       d   e[
        R                  R                  U R                  [
        R                  R                  U R                  5       S35      nUR                  US5       nUR                  U R                  [
        R                  R                  U R                  5      S9  S S S 5        [         R                  R                  U5        g g ! , (       d  f       N/= f)Nr   z.tar.gzzw:gz)arcname)r   rG   
upload_tartarfiler   r   r   r   basenamer   r   )r   r   tar_filetars       r/   r   DebugContext.upload_tart  s    <<"".:::ww||

rww//

;<GDH h/3

BGG,<,<TZZ,HI 0LL##H- / 0/s   AD
Dc                   ^ [         R                  (       al  [        R                  " S5      mTR                  nTR                  [        R                  5        S[        SS 4U4S jjnU R                  R                  X!5        U R                  R                  [        R                  " U 5      5        [         R                  R                  (       d  g U R                  [!        5       5      U l        [         R                  R$                  (       a   U R'                  S[        R                  5        [         R                  R(                  (       a!  U R'                  S[        R*                  5        g g )Nztorch._dynamolevelr%   c                 (   > TR                  U 5        g rg   )r   )r  r9   s    r/   reset_log_level/DebugContext.__enter__.<locals>.reset_log_level  s    U#r.   z	debug.logzinfo.log)r   debugr   r   r  r   r   r   r   callbackr   r    set_debug_handlerrG   enabledr   r   r   	debug_log_setup_log_captureinfo_logINFO)r   
prev_levelr  r9   s      @r/   	__enter__DebugContext.__enter__  s    <<##O4CJLL'$s $t $ KK  =!!!"5"5d";<||##**+=+?@
<<!!##K?<<  ##J= !r.   r  c                    [         R                  " S5      nU R                  R                  U R	                  U5      5      n[         R
                  " U5      nUR                  U5        UR                  [         R                  " S5      5        UR                  U5        UR                  [        UR                  U5      5        U R                  R                  UR                  U5        g )Nztorch._inductorr   )r   r   r   r   r   StreamHandlerr   r   r   r   minr  r	  r   )r   r   r  r9   fdchs         r/   r  DebugContext._setup_log_capture  s    
  12[[&&tzz(';<""2&
E
ST	
 	rSE*+S..3r.   exc_typeexc_valexc_tbc                 B   U R                   (       a*  U R                   R                  5         U R                  5         U R                  (       a9  U R	                  5         [
        R                  S[        5       U R                  5        U R                  R                  5         g )Nz%s debug trace: %s)
r   disable_save_profile_datar   r   r9   r:   r   r   r   )r   r  r  r  s       r/   __exit__DebugContext.__exit__  sa     ::JJ ##%::OOKK,.F.H$**Ur.   c                    U R                   (       d   eU R                   R                  U R                  S5      5        U R                  S5       n[        R
                  " U R                   US9nUR                  5         UR                  S5        UR                  S5        UR                  S5        UR                  S5        S S S 5        g ! , (       d  f       g = f)Nzcompile.profzcompile.stats)streamcumtimed   tottime)	r   
dump_statsr   r   pstatsStats
strip_dirs
sort_statsprint_stats)r   r  statss      r/   r  DebugContext._save_profile_data  s    zzz

dmmN;<ZZ(BLLB7EY'c"Y'c" )((s   A4C
Cr"   ).Nc                    [         R                  R                  (       a5  [        [         R                  U5      (       a   [        [	        U 5      U5      $ S[        S[        SS 4S jnU$ ! [
         a    [        R                  SSS9   g f = f)Nz Ignoring exception in debug codeT)exc_inforP   rd   r%   c                      g rg   r-   rc   s     r/   ignored)DebugContext.__getattr__.<locals>.ignored  s    r.   )	r   rG   r  getattrDebugFormatter	Exceptionr9   r:   r   )r   r"   r1  s      r/   __getattr__DebugContext.__getattr__  s|    <<GFLL$$?$?~d3T::s c d  N  >Ns    A* *B
B)r   r   r   )r%   N)w) rU   
__module____qualname____firstlineno__	itertoolscountr   staticmethodrt   r	   r   r   r   r   r   r   r   contextmanagerr   r   r   r   r  r@   r  r
   BaseExceptionr  r  r   r6  __static_attributes__r-   r.   r/   r   r   4  s    Hc hsm  -
S T & UU U 	U
 U 
CU  		 	 		
 	 
"S'		 	0s 0s 0
.>.44 4 
	4 4./ -( 	
 
	# )1D(E r.   r   c                      \ rS rSrS\SS4S jrS\R                  R                  S\	\R                     SS4S jrS\R                  R                  S\	\R                     SS4S	 jrS
\SS4S jrS
\SS4S jrS\S
\SS4S jrS
\SS4S jrS\R                  R                  S
\SS4S jrS\SS4S jrS\S\	\R,                     S\S\4   S\S\SS4S jrSrg)r4  i  handlerr%   Nc                 v    UR                   U l         UR                  U l        UR                  U l        Xl        g rg   )r   r   r   rC  )r   rC  s     r/   r   DebugFormatter.__init__  s-    ]]
$22((r.   rJ   inputsc                    U R                  S5       nS n[        R                  R                  R                  R
                  (       aR  [        R                  R                  R                  U5      n[        R                  R                  UR                  5      n[        R                  R                  R                  R
                  n[        R                  R                  R                  SSS.5         [        UUUSUUS9  S S S 5        S S S 5        U R                  S5       nUR                  UR!                  SS95        S S S 5        g ! , (       d  f       NO= f! , (       d  f       NX= f! , (       d  f       g = f)Nzfx_graph_runnable.pyF)ztrace.enabledztrace.save_real_tensorsinductor)save_dirstable_hashzfx_graph_readable.pyprint_output)r   rw   r|   r   rG   save_real_tensors_subclasses
fake_utilstry_convert_fake_to_realr   r   r   r"   r   r   writeprint_readable)r   rJ   rF  r  rI  rJ  s         r/   fx_graphDebugFormatter.fx_graph  s   
 ZZ./2H%%++==**55NNvV77??2773
  //0066HHK''--"'EJ !% + 0, ZZ./2HHR&&E&:; 0/  0/, 0/s0   C"E4EE$E.
E	E
E+.
E<c                     U R                  S5       nUR                  UR                  SS95        S S S 5        g ! , (       d  f       g = f)Nzfx_graph_transformed.pyFrK  )r   rQ  rR  )r   rJ   rF  r  s       r/   fx_graph_transformed#DebugFormatter.fx_graph_transformed  s9    
 ZZ12bHHR&&E&:; 322s	   :
Ar1   c                 (    U R                  SU5        g )Nzir_pre_fusion.txt	_write_irr   r1   s     r/   ir_pre_fusionDebugFormatter.ir_pre_fusion  s    *E2r.   c                 (    U R                  SU5        g )Nzir_post_fusion.txtrY  r[  s     r/   ir_post_fusionDebugFormatter.ir_post_fusion   s    +U3r.   r   c                    U R                  U5       n[        R                  SUR                  5        U H3  nUR	                  UR                  5       5        UR	                  S5        M5     S S S 5        g ! , (       d  f       g = f)NzWriting debug ir to  %sz


)r   r9   infor"   rQ  	debug_str)r   r   r1   r  rH   s        r/   rZ  DebugFormatter._write_ir  sZ    
 ZZ!RHH.8)*"  "!!s   AA55
Bc                 4    [        XR                  S5      S9  g )Nzgraph_diagram.svg)r3   )rK   r   r[  s     r/   graph_diagramDebugFormatter.graph_diagram  s    U--0C"DEr.   c           	          [        X5        [        UU R                  S5      S[        S[        R
                  R                  S9  g )Nzorig_fx_graph_diagram.svgFT)r3   r7   progparse_stack_tracer8   )r   r   r   GRAPHVIZ_COMMAND_SCALABLEr   rG   r8   )r   rJ   r1   s      r/   draw_orig_fx_graph!DebugFormatter.draw_orig_fx_graph  s:    
 	%R/-- ;<*""LL88	
r.   c                 N    [         R                  " XR                  S5      5        g )Nzoutput_code.py)r   r   r   )r   r   s     r/   output_codeDebugFormatter.output_code   s    Hmm,<=>r.   r"   input_nodestimingsChoiceCallerelapseprecompile_elapsec           	      V  ^^ SS K nSSKJm  S[        R                  S[        [
        [
        4   4UU4S jjmU[        R                  R                  5       [        R                  R                  5       U Vs/ s H  nT" U5      PM     snUUS.nU R                  SS	S
S9 n	UR                  5        HU  u  p[        U
R                  5       5      nUR                  U5        XS'   UR                  X5        U	R!                  S5        MW     S S S 5        g s  snf ! , (       d  f       g = f)Nr   r   )FixedLayoutrH   r%   c           	        > [        U S5      (       a  U R                  nOSnU[        U 5      R                  S.n U R	                  5       n[        UT5      (       a  Sn [        UR                  5      nT" UR                  UR                  / [        R                  R                  R                  UR                   5      Q/ [        R                  R                  R                  UR"                  5      QUS9n[%        U5      US'   O[%        U5      US'     [%        U R'                  5       5      US'    [%        U R)                  5       5      US	'    [%        [        R                  R                  R                  U R+                  5       5      5      US
'    [%        [        R                  R                  R                  U R-                  5       5      5      US'    [%        [        R                  R                  R                  U R/                  5       5      5      US'   [        U S5      (       a>  [        U R0                  [2        R4                  5      (       a  T" U R0                  5      US'   U$ ! [         aI     [        R                  R                  R                  UR                  SS9n GN9! [         a      GNGf = ff = f! [         a  n S nAGNS nAff = f! [         a  n S nAGNS nAff = f! [         a  n S nAGNS nAff = f! [         a  n S nAGNS nAff = f! [         a  n S nAGN[S nAff = f! [         a  n S nAGN/S nAff = f)Nr"    )r"   rZ   r   )fallback)rC   sizestrideoffsetlayoutrC   rb   r|  r{  numelrB   )r   r"   rZ   rU   get_output_specr>   r@   r}  r5  r    rE   sizevars	size_hintrb   rC   
size_hintsr{  r|  rt   	get_dtypera   
get_strideget_size	get_numelrB   r   IRNode)	rH   r   	node_infor~  r}  static_layouterw  build_node_infos	          r/   r  >DebugFormatter.log_autotuning_results.<locals>.build_node_info/  s   tV$$ II		!T
++I--/fk22F!!$V]]!3 %0$llHqww//::6;;GHL!1!1!<!<V]]!KL%%M +.m*<Ih'*-f+Ih'%()9%:	'"&)$//*;&<	(#&)GG$$//0AB'	(#
$'(8(8(C(CDMMO(T$U	&!%()9)9)C)CDNNDT)U%V	'" tV$$DIIryy)I)I$3DII$>	&!W % !!%&WW%5%5%?%? & &@ &F  ) ! !!"            s   #K I- 4BK K K 4K3 AL AL# AL; -
K 82J-*K -
J<7K 8K ;J<<K  K 
KK
K0+K03
LL
L L #
L83L8;
MM)op_namecuda_device_namecuda_device_countrq  autotuning_timeprecompile_timezautotuning_result_json_list.txtatzutf-8)encodingbenchmark_result
)jsonr   rw  r  r   rt   rw   cudaget_device_namedevice_countr   r   dict	info_dictupdatedumprQ  )r   r"   rq  rr  rt  ru  r  rH   general_propertiesr  callertimer  rw  r  s                @@r/   log_autotuning_results%DebugFormatter.log_autotuning_results#  s    	#:	")) :	S#X :	 :	z  %

 : : <!&!8!8!:>IJkdOD1kJ%0
 -tg   
 ' !1!1!34	  !3404,-		)( !0
 
	 K
 
s   8D
"A*D
D()r   r   r   rC  )rU   r9  r:  r;  r   r   rw   r   r   r   TensorrS  rV  SchedulerNodeListr\  r_  rt   rZ  rf  rl  ro  r   r  r   floatr  rA  r-   r.   r/   r4  r4    ss     <HH  < U\\"< 
	<<<HH  < U\\"< 
	<3#4 3 34$5 4$ 4	#	# !	# 
		#F#4 F F
HH  
 !
 
	
?C ?D ?XX "))_X ne+,	X
 X !X 
Xr.   r4  c                   >    \ rS rSr% \\S'   \R                  \S'   Srg)TensorMetadataHolderi~  tensor_metadatarb   r-   N)	rU   r9  r:  r;  r   __annotations__rw   rb   rA  r-   r.   r/   r  r  ~  s    ##LLr.   r  rP   rd   c                     Sn[         R                  R                  U5      (       d  [         R                  " U5        S[        S[        4S jn[        X0U45      u  pESnU SU S[        [        5       S3n[        US	5       n[        R                  " XE4U5        S
S
S
5        [        R                  [        R                  5      (       a  SU SU< S3n	[        U	5        g
g
! , (       d  f       NM= f)z
This function is used to save arguments for a compile_fx_inner function call
to the file system.  Later on one can replay the compile_fx_inner call
with the saved arguments using load_args_and_run_compile_fx_inner.
z/tmp/inductor_saved_argsri   r%   c                     [        U [        R                  5      (       a  [        [	        U 5      U R
                  5      $ U $ )z
Pickle FakeTensor will result in error:
AttributeError: Can't pickle local object 'WeakValueDictionary.__init__.<locals>.remove'

Convert all Tensor to metadata. This may also makes pickle faster.
)r>   rw   r  r  r   rb   ri   s    r/   handle_tensor5save_args_for_compile_fx_inner.<locals>.handle_tensor  s1     a&&'(@(CQXXNNHr.   compile_fx_inner/_z.pklwbNz3
Arguments for a compile_fx_inner call is saved to z. To replay the call,
run the following:

from torch._inductor.debug import load_args_and_run_compile_fx_inner
load_args_and_run_compile_fx_inner(z
)
        )r   r   r   mkdirr   r   nextsave_args_cntr   pickler  r9   isEnabledForr   r   rD   )
rP   rd   folderr  args_to_savekwargs_to_savefn_namer   r   messages
             r/   save_args_for_compile_fx_innerr    s     (F77>>&!!

 
 
 $,M&>#J L GXQwiqm!4 5T:D	dD	Q\2A6 
 &&337& 9$ %)8 ,	 	g ' 
	s   C##
C1r   c                    SSK Jn  [        U S5       n[        R                  " U5      u  p4S S S 5        S[
        S[
        4S jn[        R                  R                  SS9nU   [        R                  " S	S
5         [        UWW45      u  p4U" U0 UD6sS S S 5        sS S S 5        $ ! , (       d  f       N= f! , (       d  f       O= fS S S 5        g ! , (       d  f       g = f)Nr   )r  rbri   r%   c                    [        U [        5      (       ar  [        R                  R                  R                  U R                  R                  U R                  R                  U R                  R                  U R                  5      $ U $ rg   )r>   r  rw   _dynamotestingrand_stridedr  shaper|  rC   rb   r  s    r/   r  9load_args_and_run_compile_fx_inner.<locals>.handle_tensor  sh    a-..==((55!!''!!((!!''	  Hr.   T)allow_non_fake_inputs	save_argsF)torch._inductor.compile_fxr  r   r  loadr   rw   rN  FakeTensorModer   r   r   )r   r  r   rP   rd   r  	fake_modes          r/   "load_args_and_run_compile_fx_innerr    s    ;	dD	Q{{1~ 
	 	 	 !!00t0LI	FLLe4f~>00 54 
	 54s/   B'$C<B8	C'
B58
C	C
C )package_pathfunc.exported_programinductor_configsr  c          	      6   SSK Jn  UR                  R                  nUR	                  5       n[        U[        R                  R                  5      (       d   eUR                  u  px U " UUUUUUS9$ ! [         a  n	U(       a  SSKJn
  U
" USUS9  U	eS n	A	ff = f)Nr   )r   )r  r  load_and_run)dump_to_minifycompile_fx_aot)options)torch._inductorr   aot_inductordump_aoti_minifiermoduler>   rw   r   r   example_inputsr5  torch._dynamo.repro.aotir  )r  r  r  r  r   use_minifierrJ   rP   rd   r  r  s              r/   aot_inductor_minifier_wrapperr    s     '&&99L		 	 	"Bb%((..////#22LD-%%
 	
  
?  (
 
s   '
A2 2
B<BB)FNrR   )Wru   r   dataclasses	functoolsior<  r   r   os.pathr  r'  r   r)   typingr   r   r   r   r   r   r	   r
   r   unittest.mockr   rw   functorch.compiler   r   r   r   torch._dynamo.repro.after_aotr   torch._dynamo.utilsr   torch.fx.graph_moduler   torch.fx.passes.shape_propr   r   torch.fx.passes.tools_commonr   torch.utils._pytreer   ry  r   r   	schedulerr   r   r   r   r   virtualizedr    r   rU   r9   r  rv   r!   rk  	lru_cacher   r0   rt   rK   rx   r;   r@   r   r   r   r?  r   r   r4  	dataclassr  r=  r  r  r  exportExportedProgramBytesIOr  r-   r.   r/   <module>r     s       	   	      Q Q Q   V V  : - - O 7 (    !I 

 
 VZ,@
AT  T   +!"++ C=+ 
	+\_$'8"9 _bhh _J &*	 %& S>  c]  	 
 
 F!S>!	#w,!"III 
I" %HTN % %PY Yxk k\   
 !+# + + +\1S 1S 18 6:#
38
#ll22# 38n	#
 5bjj12# 	#r.   