
    9i1                     t   % 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rS SKrS SKJrJr  S SK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'  S SK(J)r)  S SK*J+r+  S SK,J-r-  S SK.J/r/J0r0  S SK1J2r2  S SK3J4r4  S SK5J6r6  S SK7J8r8  SSK9J:r:J;r;  SSK;J<r<  SSK=J>r>J?r?J@r@JArAJBrB  SSKCJDrD  \R                  " \F5      rGSqH\\I\J\K\L4         \MS'   SqN\O\MS'   SqP\\J\Q\\K   4      \MS'   \'" \FS5      rR\'" \FS5      rS\I\   rT\ R                  " SSS /5      rV/ S!QrW\R                  S"\O4S# j5       rY  S`S$\I\>   S%\OS&\\K   S"S4S' jjrZS(\I\>   S"\R                  4S) jr\  SaS$\\T   S*\J\K\K4   S+\\K   S,\QS"S4
S- jjr]S*\J\K\K4   S"\J\K\V4   4S. jr^S/\R>                  RZ                  S(\TS"S4S0 jr_\R                  S"\S   4S1 j5       ra0 qb\J\K\J\K\I\K   4   4   \MS2'   0 qc\J\K\I\K   4   \MS3'   Sqd\\Q   \MS4'   0 qe\J\K\K4   \MS5'   0 qf\J\K\I\K   4   \MS6'   S qg\Q\MS7'   SbS8 jrh\R                  S"\S   4S9 j5       ri " S: S;5      rj " S< S=5      rkS$\TS"S4S> jrlS$\TS"S4S? jrmS@\I\\KS4      S"S4SA jrnS$\\>   S"S4SB jroSC\\p\\q4      S"S4SD jrrSbSE jrs\R                  S"\S   4SF j5       rt\R                   " SG SH5      5       rv\R                  " 5       rxSI\\Q   SJ\J\K\4   S"\J\K\J\K\I\K   4   4   4SK jrySL\J\K\4   S"\J\K\J\K\4   4   4SM jrzS"\J\K\4   4SN jr{S"\J\K\J\K\I\K   4   4   4SO jr| ScSP\\\>   \<4   SQ\KSR\OS"\\Q   4SS jjr}ST\SU\S"S4SV jr~SW\KS"\4SX jrSSY.SZ\S[\K4   S\\GR                   GR                  S]\J\K\4   S^\\4   S"\K4
S_ jjrg)d    N)IteratorSequence)AnyCallableIOOptionalUnion)patch)
draw_graphget_aot_graph_nameget_graph_being_compiled)fx)save_graph_repro)get_debug_dir)utils)getArtifactLogger)trace_structured)signpost_event)GraphModule)_extract_tensor_metadataTensorMetadata)legalize_graph)FileLike)
OrderedSet)tree_map   )configir)ExternKernel)BaseSchedulerNodeFusedSchedulerNodeNopKernelSchedulerNode
OutputNodeSchedulerNode)VGRAPH_EXECUTION_ORDERFRECORD_GRAPH_EXECUTIONGRAPH_COMPILE_IDSir_pre_fusionir_post_fusionBufMetanamen_origin)dotz-Gnslimit=2z-Gnslimit1=2z-Gmaxiter=5000returnc                  2    [         R                  " S5      S L$ )Nr.   )shutilwhich     U/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/_inductor/debug.pyhas_dotr6   >   s    <<d**r4   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)r6   logwarningr   create_fx_from_snodesr7   metagroup
isinstancetupleintr   ComputedBufferdatadtyper   printr   r   graphlintr   r   tracer>   )	r7   r8   r9   rK   noderC   rI   metadatagms	            r5   draw_buffersrQ   C   s"    99@A}(*!%(E		)		-(..eU##%(C((qa dB--..IIOOE!%dD$M#+		- ! $ e	R	B2HHMMO
eV\\5Q5Qr4   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   r3   )rV   s    r5   func1;create_fx_from_snodes.<locals>.get_fake_func.<locals>.func1w   s    r4   )r   rF   __name__)r,   rY   s     r5   get_fake_func,create_fx_from_snodes.<locals>.get_fake_funcv   s!    	 	 	 r4   
FusionMeta)rC   snodetypeNexterntemplatenopcomputefusedzUnknown node typeoriginal_atenz: 
get_devicedevicer3   rV   kwargsr_   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Nr3   ).0x	in_outputs     r5   	<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rm   )usersrD   rN   r#   )rn   bufusers      r5   rq   rr      s6      .CIID 499j11% 2.s   ;=)rD   r!   anyrR   get_outputs)r_   rp   s    r5   rp   (create_fx_from_snodes.<locals>.in_output   sI    %!344>>>>  ,,.  r4   r;   r   r   )'strr   rF   collections
namedtupletorchr   Graph	is_externis_templaterD   r"   r$   rC   r!   RuntimeError	_inductorr   get_fused_kernel_name	get_nodeshasattrrg   call_functionr	   r    boolappendget_namer,   rB   rx   read_writesreadsinserting_beforeplaceholderrE   rV   outputlen)rR   r\   r^   buf_to_fx_nodenode_to_fx_noderK   
first_nodeoutputsrC   r_   	node_type
fused_name	func_name	node_funcrj   fx_noder,   ru   depsnew_argsdepdep_noderp   s                         @r5   rA   rA   q   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_namerN   originsr,   )
r7   r   r   r   rN   buf_namechildren_nodesir_nodeorigin	node_names
             r5   r   r      s     }==?)%#n*=*A0%+3
 ~&!+q0AT0III))?goo5ooFI 5 / 7H_ &0 &# r4   c                     0 nU R                  5        H-  u  p#X1;  a  [        U/5      X'   M  X   R                  U5        M/     0 nU R                  5        H  u  p#[        X   5      n[	        X55      XB'   M!     U$ rm   )itemsr   addr   r+   )r   buf_name_to_n_noder   r   node_name_to_buf_metan_nodes         r5   get_node_name_to_buf_metar      s     4::<	-+5yk+B((,,Y7	  = 4::<	'12+28+D(  = ! r4   rP   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)rT   Nbuf_meta)r   r   rK   r7   r,   getrB   )rP   rR   r   r   rN   s        r5   annotate_orig_fx_with_snodesr     sc     -/(G$56KL99--$9$=$=dii$HDIIj! r4   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_autogradr[   
contextlib	ExitStackcloseenter_contextr
   pathjoinr   makedirsFileHandlerr   setLevelDEBUGsetFormatter	Formatter
addHandlerremoveHandler)compile_debugr}   r?   stackr   fhs         r5   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 _inductor_post_to_pre_grad_nodes._inductor_triton_kernel_to_post_grad_node_info_pre_grad_graph_id#_inductor_pre_grad_node_stack_trace_inductor_kernel_stack_trace(_inductor_kernel_provenance_debug_handlec                      Sq g rX   )r   r3   r4   r5   -reset_inductor_kernel_provenance_debug_handler   L  s    /0,r4   c               #     #    [         n [        R                  5       n[        R                  5       n[        R                  5       n[
        R                  5       nSq 0 q0 q0 q0 q Sv   U q UqUqUqUqg! U q UqUqUqUqf = f7f)zvContext manager that resets provenance tracking globals upon entering
and restores their original values when exiting.N)r   r   copyr   r   r   )original_pre_grad_graph_idoriginal_post_to_pre_grad_nodes-original_triton_kernel_to_post_grad_node_info+original_inductor_pre_grad_node_stack_trace$original_inductor_kernel_stack_traces        r5   reset_provenance_globalsr   Q  s      "4&F&K&K&M#6;;= 2 	,002 0 ,H+L+L+N( ')$572*,'#% 
 8+J(9 	7 (L$7 	, 8+J(9 	7 (L$7 	,s   A!B$A3 (B3A??B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) DebugContexti|  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   rM   	debug_dirr   r   _counterr   r   r   existsr   )r   r   ndirnames       r5   create_debug_dirDebugContext.create_debug_dir  sy    LL**=mo	&&Aggll-q$G
 77>>'**G$ ' r4   Nc                 T    S U l         S U l        [        R                  " 5       U l        g rm   )_prof_pathr   r   _stack)selfs    r5   __init__DebugContext.__init__  s     

 **,r4   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   r1   rmtreecopytreeOSErrorr?   r@   )r   r   r   s      r5   r   DebugContext.copy  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_moderV   rj   c                     U R                   (       d   e[        [        R                  R	                  U R                   U5      U/UQ70 UD6$ rm   r   openr   r   r   )r   r  r  rV   rj   s        r5   fopenDebugContext.fopen  s:     zzzBGGLLX6
TTTVTTr4   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rm   r  )r   r  r  rV   rj   fs         r5   fopen_contextDebugContext.fopen_context  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      $ rm   )r   r   r   r   )r   r  s     r5   r  DebugContext.filename  s'    zzzww||DJJ//r4   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   rM   
upload_tartarfiler   r   r   r   basenamer  r   )r   r  tar_filetars       r5   r  DebugContext.upload_tar  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 rm   )r   )r  r?   s    r5   reset_log_level/DebugContext.__enter__.<locals>.reset_log_level  s    U#r4   z	debug.logzinfo.log)r   debugr   r   r  r   r   r   r   callbackr   r%   set_debug_handlerrM   enabledr   r   r   	debug_log_setup_log_captureinfo_logINFO)r   
prev_levelr  r?   s      @r5   	__enter__DebugContext.__enter__  s    <<##O4CJLL'$s $t $ KK  =!!!"5"5d";<||##**+=+?@
<<!!##K?<<  ##J= !r4   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  r?   fdchs         r5   r!  DebugContext._setup_log_capture  s    
  12[[&&tzz(';<""2&
E
ST	
 	rSE*+S..3r4   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  r?   r@   r   r   r   )r   r-  r.  r/  s       r5   __exit__DebugContext.__exit__  sa     ::JJ ##%::OOKK,.F.H$**Ur4   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      r5   r2  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_inforV   rj   r/   c                      g rm   r3   ri   s     r5   ignored)DebugContext.__getattr__.<locals>.ignored  s    r4   )	r   rM   r  getattrDebugFormatter	Exceptionr?   r@   r   )r   r,   rF  s      r5   __getattr__DebugContext.__getattr__	  s|    <<GFLL$$?$?~d3T::s c d  N  >Ns    A* *B
B)r   r   r   r/   N)w) r[   
__module____qualname____firstlineno__	itertoolscountr   staticmethodrz   r   r   r   r   r   r   r  r   contextmanagerr   r
  r  r  r%  rF   r!  r`   BaseExceptionr3  r2  r   rK  __static_attributes__r3   r4   r5   r   r   |  s    Hc hsm  -
S T & UU U 	U
 U 
CU  		 	 		
 	 
"S'		 	0s 0s 0
.>.44 4 
	4 4./ -( 	
 
	# )1D(E r4   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\4S j5       rS
\SS4S jrS\R                  R                  S
\SS4S jrSS\S\SS4S jjrS\S\	\R.                     S\S\4   S\S\S\\   SS4S jrSrg)rI  i  handlerr/   Nc                 v    UR                   U l         UR                  U l        UR                  U l        Xl        g rm   )r  r
  r  rY  )r   rY  s     r5   r   DebugFormatter.__init__  s-    ]]
$22((r4   rP   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  r}   r   r   rM   save_real_tensors_subclasses
fake_utilstry_convert_fake_to_realr   r   r   r,   r
   r   writeprint_readable)r   rP   r\  r*  r_  r`  s         r5   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.pyFra  )r  rg  rh  )r   rP   r\  r*  s       r5   fx_graph_transformed#DebugFormatter.fx_graph_transformed=  s9    
 ZZ12bHHR&&E&:; 322s	   :
Ar7   c                     U R                  S5       nUR                  U R                  U5      5        S S S 5        g ! , (       d  f       g = f)Nzir_pre_fusion.txtr  rg  	_write_irr   r7   r*  s      r5   r)   DebugFormatter.ir_pre_fusionE  s2    ZZ+,HHT^^E*+ -,,	   !<
A
c                     U R                  S5       nUR                  U R                  U5      5        S S S 5        g ! , (       d  f       g = f)Nzir_post_fusion.txtro  rq  s      r5   r*   DebugFormatter.ir_post_fusionI  s2    ZZ,-HHT^^E*+ .--rs  c                     [         R                  " 5       nU  H3  nUR                  UR                  5       5        UR                  S5        M5     UR	                  5       $ )Nz


)ioStringIOrg  	debug_strgetvalue)r7   ru   rN   s      r5   rp  DebugFormatter._write_irM  sD    kkmDIIdnn&'IIh  ||~r4   c                 4    [        XR                  S5      S9  g )Nzgraph_diagram.svg)r9   )rQ   r  )r   r7   s     r5   graph_diagramDebugFormatter.graph_diagramU  s    U--0C"DEr4   c           	          [        X5        [        UU R                  S5      S[        S[        R
                  R                  S9  g )Nzorig_fx_graph_diagram.svgFT)r9   r=   progparse_stack_tracer>   )r   r   r  GRAPHVIZ_COMMAND_SCALABLEr   rM   r>   )r   rP   r7   s      r5   draw_orig_fx_graph!DebugFormatter.draw_orig_fx_graphX  s:    
 	%R/-- ;<*""LL88	
r4   r  	extensionc                 T    [         R                  " XR                  SU 35      5        g )Nzoutput_code.)r1   r   r  )r   r  r  s      r5   output_codeDebugFormatter.output_codeg  s    Hmml9+,FGHr4   r,   input_nodestimingsChoiceCallerelapseprecompile_elapseprescreening_elapsec           	      Z  ^^ 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US.nU R                  SSS	S
9 n	UR                  5        HZ  u  p[        U
R                  5       5      nUR                  U5        XS'   [        R                  " X5        U	R                  S5        M\     S S S 5        g s  snf ! , (       d  f       g = f)Nr   )FixedLayoutrN   r/   c           	      R  > [        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     GNf = f! [         a     GNf = f! [         a     GNf = f! [         a     GNof = f! [         a     GN<f = f! [         a     GN	f = f)Nr,    )r,   r`   r   )fallback)rI   sizestrideoffsetlayoutrI   rh   r  r  numelrH   )r   r,   r`   r[   get_output_specrD   rF   r  rJ  r%   rK   sizevars	size_hintrh   rI   
size_hintsr  r  rz   	get_dtyperg   
get_strideget_size	get_numelrH   r   IRNode)rN   r   	node_infor  r  static_layoutr  build_node_infos         r5   r  >DebugFormatter.log_autotuning_results.<locals>.build_node_infou  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K% AK6 AL AL -
K 82J-*K -
J<7K 8K ;J<<K  K 
KK
K"!K"%
K32K36
LL
LL
L&%L&)op_namecuda_device_namecuda_device_countr  autotuning_timeprecompile_timeprescreening_timezautotuning_result_json_list.txtatzutf-8)encodingbenchmark_result
)r   r  r  dictrz   r}   cudaget_device_namedevice_countr
  r   	info_dictupdatejsondumprg  )r   r,   r  r  r  r  r  rN   general_propertiesr*  callertimer  r  r  s                @@r5   log_autotuning_results%DebugFormatter.log_autotuning_resultsj  s    	$:	")) :	S#X :	 :	z  %

 : : <!&!8!8!:>IJkdOD1kJ%0!4
 -tg   
 ' !1!1!34	  !3404,-		)( !0
 
 K

 
s   4D
A/D
D*)r  r  r
  rY  )py)r[   rO  rP  rQ  r   r   r}   r   r   listTensorri  rl  SchedulerNodeListr)   r*   rT  rz   rp  r}  r  r  r   r  r  floatr   r  rW  r3   r4   r5   rI  rI    s     <HH  < U\\"< 
	<<<HH  < U\\"< 
	<,#4 , ,,$5 ,$ , * s  F#4 F F
HH  
 !
 
	
IC IC I4 IXX "))_X ne+,	X
 X !X &e_X 
Xr4   rI  c                     [         R                  [        R                  5      (       a)  [         R	                  S[
        R                  U 5      5        [        R                  R                  U 5        g )NzBEFORE FUSION
%s)
ir_pre_fusion_logisEnabledForr   r#  inforI  rp  r%   r  r)   r7   s    r5   log_ir_pre_fusionr    sE    %%gll332N4L4LU4STGG% r4   c                     [         R                  [        R                  5      (       a)  [         R	                  S[
        R                  U 5      5        [        R                  R                  U 5        g )NzAFTER FUSION
%s)
ir_post_fusion_logr  r   r#  r  rI  rp  r%   r  r*   r  s    r5   log_ir_post_fusionr    sE    &&w||44 2N4L4LU4STGG5!r4   schedulec                 p   ^   [        SS U 4S jS9  g ! [         a    [        R                  SSS9   g f = f)Nartifactc                      SSS.$ )Ninductor_collective_scheduler  r,   r  r3   r3   r4   r5   <lambda>+_dump_collective_schedule.<locals>.<lambda>  s    6"!r4   c                     > T $ rm   r3   r  s   r5   r  r    s    xr4   metadata_fn
payload_fnzAFailed to log inductor_collective_schedule via structured loggingTrC  )r   rJ  r?   r  r  s   `r5   _dump_collective_scheduler    sE    
 (	
  
		O 	 	

s    55c           
          U  Vs/ s H>  n[        [        USS 5      =n[        R                  5      (       d  M1  [        USS 5      PM@     nnU(       a  [	        U5        g g s  snf )NrN   python_kernel_name)rD   rH  r   _CollectiveKernelr  )r7   rN   opr  s       r5   log_collective_scheduler    se     DGD&$77b9M9MN 	0($/   !(+ s
   0A A node_runtimesc           	        ^^  [         R                  R                  R                  mS[        [
        [              S[        [           4U4S jjnS[        S[        [           4S jn/ mU  GH  u  p4[        UR                  SUR                  5       5      n[        R                  " UR                  5      (       a  SOSn/ n UR                  5        H  nUR                  n	U	R                  5       n
[!        U	R"                  [$        R&                  5      (       a  U	R)                  5       OS	nU	R+                  5       nUR-                  U" U
5      U" U5      U" U5      S
.5        M     TR-                  UUUUS.5        GM     [1        SS U4S jS9  g	! [.         a     N8f = f! [.         a    [2        R5                  SSS9   g	f = f)zDLog per-op runtime estimates and output tensor metadata for TLParse.ro   r/   c                 0   > U b  [        T" U 5      5      $ / $ rm   )r  )ro   to_size_hintss    r5   to_list,log_runtime_and_tensor_meta.<locals>.to_list  s    -.]4a()BBr4   rI   c                 F    U c  g [        U 5      nUR                  S5      nU$ )Nztorch.)rz   removeprefix)rI   ss     r5   dtype_to_str1log_runtime_and_tensor_meta.<locals>.dtype_to_str  s&    }E
Ax(AHr4   r  
collectiverd   N)shaper  rI   )r,   r`   estimated_runtime_nsr   r  c                      SSS.$ )N inductor_runtime_and_tensor_metar  r  r3   r3   r4   r5   r  -log_runtime_and_tensor_meta.<locals>.<lambda>&  s    :"!r4   c                     > ST 0$ )Nopsr3   )r  s   r5   r  r  *  s	    s|r4   r  z.Failed to log inductor_runtime_and_tensor_metaTrC  )r%   rK   r  r  r   r   r   r  rz   rH  rN   r   r   is_collectiverx   maybe_get_sizerD   r  r   Layoutr  maybe_get_dtyper   rJ  r   r?   r  )r  r  r  r  
runtime_nsr,   op_typer   ru   irnoder  r  rI   r  r  s                @@r5   log_runtime_and_tensor_metar    s   :S((33	Cx. 	C49 	C	 	 	 %'*MA166#7FD&+&9&9!&&&A&AlyG -/G==?C XXF"113E &fmmRYY?? ))+! 
 #224ENN%,U^&-fo%1%%8 +& JJ #,6&	5 +F 	 ,	
  (  S		BT	RSs7   B?F% B%F)+F% 
F"F% !F""F% %GGc                      [         (       d  g [        SS S S9  g! [         a    [        R	                  SSS9   gf = f)	z:Emit a structured artifact with the graph execution order.Nr  c                      SSS.$ )Ngraph_executionr  r  r3   r3   r4   r5   r  %log_graph_execution.<locals>.<lambda>7  s    )"!r4   c                      S[         0$ )Ngraph_execution_order)r&   r3   r4   r5   r  r  ;  s     79NOr4   r  zFailed to log graph_executionTrC  )r&   r   rJ  r?   r  r3   r4   r5   log_graph_executionr  0  sK      
B P	
  B		1D	ABs    ==c               #   l   #    / q 0 qSq Sv   [        5         SqSq Sqg! [        5         SqSq Sqf = f7f)z5Record graph execution order and log it once on exit.TNF)r&   r(   r'   r  r3   r4   r5   $record_and_log_graph_execution_orderr  A  sT      !!!& $  	!& $ s   4 414c                   >    \ rS rSr% \\S'   \R                  \S'   Srg)TensorMetadataHolderiQ  tensor_metadatarh   r3   N)	r[   rO  rP  rQ  r   __annotations__r}   rh   rW  r3   r4   r5   r  r  Q  s    ##LLr4   r  pre_grad_graph_idpost_to_pre_grad_nodes_jsonc           	      f  ^ 0 0 S.n[        U[        5      (       d  [        R                  S5        U$ [        U [        5      (       d  U$ [
        R                  " [        5      n[
        R                  " [        5      n S[        [        [        4   S[        4S jnUR                  5        GH[  u  pg[        U[        5      (       d  [        R                  S5        Us  $ U GH   nU" U5      (       d  Us  s  $ UR                  S5      U :X  a,  X8S      R                  U5        XF   R                  US   5        UR                  S	/ 5       V	s/ s H  oU4PM     n
n	U
(       d  M  U
R                  5       u  nmU" U5      (       d  Us  s  $ UR                  S5      U :X  a-  X;S      R                  T5        UT   R                  US   5        U
R!                  U4S
 jUR                  S	/ 5       5       5        U
(       a  M  GM#     GM^     S[        [        [        4   SS4S jnU" U5        U" U5        UUS.$ s  sn	f ! ["         ae  n[%        SSS[        U5      [&        R(                  " 5       S.5        [        R                  SU5        [        R                  SU 5        Us SnA$ SnAff = f)zl
Create bidirectional mappings between pre_grad graph nodes
and post_grad graph code nodes, and vice versa.
)	preToPost	postToPrezCProvenance tacking error: post_to_pre_grad_nodes_json is not a dictrN   r/   c                     [        U [        5      (       d  [        R                  S5        gSU ;  d  SU ;  d  SU ;  a  [        R                  S5        gg)NzVProvenance tacking error: node provenance in post_to_pre_grad_nodes_json is not a dictFgraph_idr,   	from_nodezYProvenance tacking error: node provenance in post_to_pre_grad_nodes_json has wrong formatT)rD   r  r?   error)rN   s    r5   check_format8create_mapping_pre_post_grad_nodes.<locals>.check_formatv  sQ    dD))		l %t);{RV?V		o r4   zIProvenance tacking error: post_to_pre_grad_nodes_json value is not a listr  r,   r  c              3   *   >#    U  H  oT4v   M
     g 7frm   r3   )rn   r   
parent_keys     r5   rq   5create_mapping_pre_post_grad_nodes.<locals>.<genexpr>  s      !1RAJ1Rs   dNc                 J    U  H  n[        X   5      X'   M     [        U 5      n g rm   r  r  r  keys     r5   convert_sets_to_listsAcreate_mapping_pre_post_grad_nodes.<locals>.convert_sets_to_lists  "    af QAr4   r^  provenance_tracking_error"create_mapping_pre_post_grad_nodesfunction	error_msgstack_tracez post_to_pre_grad_nodes_json:  %szpre_grad_graph_id:  %s)rD   r  r?   r  rF   r{   defaultdictr   rz   r   r   r   r  r   r   popextendrJ  r   	traceback
format_exc)r  r  empty_returnpre_to_postpost_to_prer  	outer_key
node_arrayrN   r   r   current_noder  er  s                 @r5   r  r  Z  s    5L
 1488		WX'-- "-"9"9*"EK"-"9"9*"EKD	tCH~ 	$ 	 &A%F%F%H!Ij$//		_ $#"#D))''88J'+<<V-11)<*..tF|< 26+r1JK1JAY1JKe/4yy{,L*'55++#''
37HH#$89==jI#J/33L4HILL !1=1A1A+r1R!  e # &I6	T#s(^ 	 	 	k*k*$$
 	
) L0   	'@ V(335	
 			46QR		*,=>sR   ?A!I !I :AI H<I '%I A4I 8I <I 
J0AJ+%J0+J0triton_kernel_to_post_grad_jsonc           	      f   0 0 S.n[        U [        5      (       d  [        R                  S5        U$ [        R
                  " [        5      n U R                  5        HO  u  p4[        U[        5      (       d  [        R                  S5        Us  $ U H  nX%   R                  U5        M     MQ     S[        [        [        4   SS4S jnU" U5        U US.$ ! [         aO  n[        SS	S
[        U5      [        R                  " 5       S.5        [        R                  SU 5        Us SnA$ SnAff = f)ziCreate bidirectional mappings between triton kernel name and post_grad
graph code nodes, and vice versa.
)cppCodeToPostpostToCppCodezGProvenance tacking error: triton_kernel_to_post_grad_json is not a dictzMProvenance tacking error: triton_kernel_to_post_grad_json value is not a listr  r/   Nc                 J    U  H  n[        X   5      X'   M     [        U 5      n g rm   r  r  s     r5   r  Fcreate_node_mapping_kernel_to_post_grad.<locals>.convert_sets_to_lists  r  r4   r^  r  "create_mapping_kernel_to_post_gradr  z$triton_kernel_to_post_grad_json:  %s)rD   r  r?   r  r{   r"  r   r   r  r   rz   r   rJ  r   r%  r&  )r.  r'  post_to_cpp_coder*  r+  	curr_noder  r-  s           r5   'create_node_mapping_kernel_to_post_gradr7    s3    /L
 5t<<		U	
 '2'>'>z'J$%D%J%J%L!Ij$//		c $#'	 +//	: ( &M	T#s(^ 	 	 	./<-
 	
   	'@ V(335	
 			24S	
 s'   AC AC 
D0!AD+%D0+D0c            	          0 n [         (       aw  [        [        5      n0 [        EUEn [        R
                  R                  (       a?  [        R                  R                  SS5       n[        R                  " X5        S S S 5        SU S'   U $ ! , (       d  f       N= f! [         a9  n[        SSS[        U5      [        R                   " 5       S.5        0 s S nA$ S nAff = f)	Nz/inductor_provenance_tracking_node_mappings.jsonrN  g       @versionr^  r  dump_inductor_provenance_infor  )r   r7  r   r   r   rM   r  r%   r  r  r  r  rJ  r   rz   r%  r&  )node_mappingnode_mapping_kernelr*  r-  s       r5   r:  r:    s    " (*"I>#2%L ||##WW]]EsIIl/ #&Y    	'; V(335	
 	s6   A%B 'B>B 
BB 
C!(.CC!C!c            	      *    [         R                  S0 5      n [        [        R	                  5       5      [        [
        R	                  5       5      -  n0 nU Hr  n[
        R                  U/ 5      n[        5       nU H$  nUR                  U R                  U/ 5      5        M&     [        R                  U/ 5      U[        U5      S.X#'   Mt     U$ ! [         a9  n[        SSS[        U5      [        R                  " 5       S.5        0 s SnA$ SnAff = f)zCreate kernel information JSONr
  )stack_tracespost_grad_nodespre_grad_nodesr^  r  create_kernel_information_jsonr  N)r   r   r   r   keysr   r  r  rJ  r   rz   r%  r&  )r)  all_kernelsresultkernel_namer?  r@  	post_noder-  s           r5   rA  rA    s   %
 7::;K !=!B!B!DE
:??AI
 
 &KLPPRO /9lN,	%%kooi&DE - != @ @b Q#2"&~"6#F '  
'< V(335	
 	
s   CC 
D.DDDnode_schedulerE  r   c           	        ^
  SSK JnJn  [        S-  q/ nU S[         3nU(       a  [	        U [
        5      (       d   e[        R                  U/ 5      m
U R                  (       a.  U R                  R                  nUT
;  a  T
R                  U5        O%T
R                  U
4S jU R                   5       5        [        U R                  5       5      nO[	        U [        5      (       d   e[        5       nU  H  nXU4;  d  M  UR                   c  M  [        R                  U/ 5      m
UR#                  UR                   R                  5       5        T
R                  U
4S jUR                   R                   5       5        M     [        U5      n[$        R                  U/ 5      R                  U5        [        $ ! [&         a7  n	[)        SSS	[+        U	5      [,        R.                  " 5       S
.5         Sn	A	gSn	A	ff = f)z
Set the mapping between `kernel_name` and the post_grad nodes in `node_schedule`.

Returns a unique int debug handler for each call to this function.
r   )DisableReductionEnableReduction:c              3   `   >#    U  H#  nUR                   T;  d  M  UR                   v   M%     g 7frm   r,   rn   r   curr_node_infos     r5   rq   :set_kernel_post_grad_provenance_tracing.<locals>.<genexpr>i  s*      &"7{{.8  FKK"7   ..Nc              3   `   >#    U  H#  nUR                   T;  d  M  UR                   v   M%     g 7frm   rM  rN  s     r5   rq   rP  {  s*      .*<%{{.@ (FKK*<rQ  r^  r  'set_kernel_post_grad_provenance_tracingr  )codegen.simd_kernel_featuresrI  rJ  r   rD   r   r   
setdefaultorigin_noder,   r   r$  r   r  get_stack_tracesr   rN   r  r   rJ  r   rz   r%  r&  )rG  rE  r   rI  rJ  r>  origin_node_namestack_traces_setr_   r-  rO  s             @r5   rS  rS  G  s   =S 	1A50"$$Q'O&PQm\::::KVVRN ((#0#<#<#A#A #>9"))*:;%% &"/"7"7& 
   > > @ALmT22220:&2B CCzz-JUU +R '
 )//

0K0K0MN&-- .*/***<*<.  '   01L$//R@GGU77  	'E V(335	
 s%   C;F9 F9 B'F9 9
G:-G55G:rV   rj   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_argsro   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.
)rD   r}   r  r  r   rh   ro   s    r5   handle_tensor5save_args_for_compile_fx_inner.<locals>.handle_tensor  s1     a&&'(@(CQXXNNHr4   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  r?   r  r   r   rJ   )
rV   rj   folderr]  args_to_savekwargs_to_savefn_namer   r	  messages
             r5   save_args_for_compile_fx_innerrl    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_  rbro   r/   c                    [        U [        5      (       ar  [        R                  R                  R                  U R                  R                  U R                  R                  U R                  R                  U R                  5      $ U $ rm   )rD   r  r}   _dynamotestingrand_stridedr  r  r  rI   rh   r\  s    r5   r]  9load_args_and_run_compile_fx_inner.<locals>.handle_tensor  sh    a-..==((55!!''!!((!!''	  Hr4   T)allow_non_fake_inputs	save_argsF)torch._inductor.compile_fxr_  r  rf  loadr   r}   rd  FakeTensorModer   r
   r   )r   r_  r	  rV   rj   r]  	fake_modes          r5   "load_args_and_run_compile_fx_innerrz    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          	         SSK Jn  SSKJn  SSKJn  SSKJn  UR                  R                  nUR                  SS9n	[        U	[        R                  R                  5      (       d   eUR                  u  p U(       a"  UR                  R                   S:X  a  U" US	US
9  U(       a  UR                  R                   S:X  a  ["        R$                  " U	5      n["        R$                  " UR                  5      n["        R$                  " U5      nU" UUS   US   US
9u  p['        U5      n[        R(                  R)                  UUSS9nU " UR                  SS9UUUSSS9  U " U	U
UUUUS9$ ! U a%  nU" USSUS9  [*        R-                  S5        UeS nAf[.         a5  nU(       a'  SnUR                  R                   S:X  a  SnU" US	UUS9  UeS nAff = f)Nr   )AccuracyError)dump_to_minify)r   )_aoti_flatten_inputsF)check_guards   aot_inductor)options   r   )strictTaccuracy)r~  r{  load_and_runcheck_accuracy)r~  r{  r  aot_inductor_accuracyminify)commandr  zAccuracy failedrun)torch._dynamo.debug_utilsr  torch._dynamo.repro.aotir  torch._inductorr   rv  r  r  dump_aoti_minifiermodulerD   r}   r   r   example_inputsrepro_levelr   deepcopyrE   exportr?   r@   rJ  )r|  r}  r~  r{  r  r  r   r  use_minifierrP   rV   rj   gm_copyexample_inputs_copyconfig_copyflat_example_inputstuple_inputsflattened_epr-  r  s                       r5   aot_inductor_minifier_wrapperr    s    87&?&&99L		 	 e	 	4Bb%((..////#22LD>F//;;q@ (
 F//;;q@ mmB'G"&--0@0O0O"P--(89K/C#A&#A&#	0, !!45L <<..wU.SL###7!,)!) -%%
 	
  #$		
 	%& G""..!3 (	 s%   8C3E, ,G2 FG0GG)FNrX   rM  )F)r{   r   r   dataclasses	functoolsrw  rR  r  r   r   os.pathrf  r;  r1   r%  collections.abcr   r   typingr   r   r   r   r	   unittest.mockr
   r}   functorch.compiler   r   r   r   torch._dynamo.repro.after_aotr   torch._dynamo.utilsr   r  r   torch._loggingr   torch._logging._internalr   torch._utils_internalr   torch.fx.graph_moduler   torch.fx.passes.shape_propr   r   torch.fx.passes.tools_commonr   torch.typesr   torch.utils._ordered_setr   torch.utils._pytreer   r  r   r   r   	schedulerr    r!   r"   r#   r$   virtualizedr%   r   r[   r?   r&   r  r  rz   objectr  r'   r   r(   rF   r  r  r  r|   r+   r  cacher6   rQ   r~   rA   r   r   r   rU  r   r   r   r   r   r   r   r   r   r   rI  r  r  r  r  rE   r  r  r  r  	dataclassr  rS  re  r  r7  r:  rA  rS  rl  rz  r  ExportedProgramr  r3   r4   r5   <module>r     s        	    	      . 5 5   V V  : - ! , 5 0 - O 7   / (     ! <@ xT#v+%6 78 ?$  $8< 8Dhsm!345 <%h@ &x1AB I 

 
 VZ,@
AT  + + + +!"++ C=+ 
	+\_$'8"9 _bhh _J &*	 %& S>  c]  	 
 
 F!S>!	#w,!"III 
I" %HTN % %V EG  $sDd3i,@'@"A FGI .S$s)^0D I$( HSM (68 #T#s(^ 857 d3S	>2 701 (# 11
 '
(4. '
 '
TY Yxj jZ!. !4 !"/ "D "
U39-=(> 
4 
"	,8,=#> 	,4 	,=Sxc5j8I/J =St =S@B" !htn ! !   
 !^}^!%c3h^ 
#tCcN#
#$^B9%)#s(^9	#tCH~
9x#tCH~ #L'S$sDI~2F-F(G 'Z H"34lBCHH H c]	HV+# + + +\1S 1S 18 (,Q
38
Qll22Q 38n	Q
 8$Q 	Qr4   