
    3j                     j   % 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rS SKJrJrJr  S SK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.J/r/  S SK0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r7  SSK8J9r9J:r:  SSK:J;r;  SSK<J=r=J>r>J?r?J@r@JArA  SSKBJCrC  \R                  " \E5      rFSqG\H\I\J\K4      S-  \LS'   SqM\N\LS'   SqO\I\P\JS-  4   S-  \LS'   \&" \ES5      rQ\&" \ES5      rR\H\   rS\ R                  " SSS /5      rU/ S!QrV\R                  S"\N4S# j5       rX  S`S$\H\=   S%\NS&\JS-  S"S4S' jjrYS(\H\=   S"\R                  4S) jr[  SaS$\SS-  S*\I\J\J4   S+\JS-  S,\PS"S4
S- jjr\S*\I\J\J4   S"\I\J\U4   4S. jr]S/\R<                  RX                  S(\SS"S4S0 jr^\R                  S"\S   4S1 j5       r`0 qa\I\J\I\J\H\J   4   4   \LS2'   0 qb\I\J\H\J   4   \LS3'   Sqc\PS-  \LS4'   0 qd\I\J\J4   \LS5'   0 qe\I\J\H\J   4   \LS6'   S qf\P\LS7'   SbS8 jrg\R                  S"\S   4S9 j5       rh " S: S;5      ri " S< S=5      rjS$\SS"S4S> jrkS$\SS"S4S? jrlS@\H\JS-     S"S4SA jrmS$\\=   S"S4SB jrnSC\\o\\p4      S"S4SD jrqSbSE jrr\R                  S"\S   4SF j5       rs\R                   " SG SH5      5       ru\R                  " 5       rwSI\PS-  SJ\I\J\4   S"\I\J\I\J\H\J   4   4   4SK jrxSL\I\J\4   S"\I\J\I\J\4   4   4SM jryS"\I\J\4   4SN jrzS"\I\J\I\J\H\J   4   4   4SO jr{ ScSP\\=   \;-  SQ\JSR\NS"\PS-  4SS jjr|ST\SU\S"S4SV jr}SW\JS"\4SX jr~SSY.SZ\S[\J4   S\\R                  GR                   S]\I\J\4   S^\3S-  S"\J4
S_ jjrg)d    N)CallableIteratorSequence)AnyIO)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     O/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/_inductor/debug.pyhas_dotr4   ?   s    <<d**r2   nodesprint_graphfnamec           
         [        5       (       d  [        R                  S5        gUc
  [        5       n[	        U 5      nUR
                   GH,  nSUR                  ;  a  M  UR                  S   R                  n[        U[        5      (       a%  [        US   [        5      (       a  US   4nOtUS   nOn[        U[        5      (       aY   UR                  S   R                  nUR                  5       S   R                  R                  5       nU(       a  [        U5      OSnSn[        U["        R$                  5      (       a  UR&                  R(                  n[+        XXSSSSS5      n	XR                  S'   GM/     U(       a  [-        U5        [/        0 U5      n
[1        U
5        U
R2                  R5                  5         [7        XS[8        R:                  R<                  S	9  g! [          a    Sn Nf = f)
z
Draw a graph in fname.svg.
z*draw_buffers() requires `graphviz` packageNfusion_metar   r   r1   tensor_metaF)
clear_metadot_graph_shape)r4   logwarningr   create_fx_from_snodesr5   metagroup
isinstancetupleintstrsnodeget_outputsnodemaybe_get_size	Exceptionr   ComputedBufferdatadtyper   printr   r   graphlintr	   r   tracer<   )r5   r6   r7   rO   rH   rA   rF   sizerM   metadatagms              r3   draw_buffersrU   D   s    99@A}(*!%(E		)		-(..eU##%(C((qas##		-066((*1-22AAC'+d
 dB--..IIOOE!%dD$M#+		- 7 : e	R	B2HHMMO
eV\\5Q5Q%  s   	AG""G10G1snodesc                 h  ^ 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[.        [        -  S[0        4U4S jjmT" U	5      (       a  UR3                  U5        U	R5                  5       nUUl        U" XU
5      UR8                  S'   XU'   U	R;                  5        H  nXUR5                  5       '   M     Ub  GM  UnGM     U  H  n	U	R5                  5       nU	R<                  R>                  nUU   n/ nU H  nUR6                  U;   a  UUR6                     nODURA                  U5         URC                  UR6                  5      nUUUR6                  '   SSS5        WU:X  a  Mo  UR3                  U5        M     [E        U5      Ul#        M     URI                  [K        U5      S:X  a  US   5        U$ [E        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   r1   )rZ   s    r3   func1;create_fx_from_snodes.<locals>.get_fake_func.<locals>.func1   s    r2   )r   rD   __name__)r*   r]   s     r3   get_fake_func,create_fx_from_snodes.<locals>.get_fake_func   s!    	 	 	 r2   
FusionMeta)rA   rF   typeNexterntemplatenopcomputefusedzUnknown node typeoriginal_atenz: 
get_devicedevicer1   rZ   kwargsrF   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Nr1   ).0x	in_outputs     r3   	<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rp   )usersrB   rH   r!   )rq   bufusers      r3   rt   ru      s6      .CIID 499j11% 2.s   ;=)rB   r   anyrV   rG   )rF   rs   s    r3   rs   (create_fx_from_snodes.<locals>.in_output   sI    %!344>>>>  ,,.  r2   r9   r   r   )&rE   r   rD   collections
namedtupletorchr   Graph	is_externis_templaterB   r    r"   rA   r   RuntimeError	_inductorr   get_fused_kernel_name	get_nodeshasattrrj   call_functionr   boolappendget_namer*   r@   rG   read_writesreadsinserting_beforeplaceholderrC   rZ   outputlen)rV   r`   rb   buf_to_fx_nodenode_to_fx_noderO   
first_nodeoutputsrA   rF   	node_type
fused_name	func_name	node_funcrm   fx_noder*   rx   depsnew_argsdepdep_noders   s                         @r3   r?   r?   }   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	.1CC 	 	 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##
L1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*   )
r5   r   r   r   rH   buf_namechildren_nodesir_nodeorigin	node_names
             r3   r   r      s     }==?)%#n*=*A0%+3
  ~&!+q0AT0III))?goo5ooFI 5 / 7H_ &0 &% r2   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$ rp   )itemsr   addr   r)   )r   buf_name_to_n_noder   r   node_name_to_buf_metan_nodes         r3   get_node_name_to_buf_metar     s     4::<	-+5yk+B( (,,Y7  = 4::<	'12+28+D(  = ! r2   rT   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)rX   Nbuf_meta)r   r   rO   r5   r*   getr@   )rT   rV   r   r   rH   s        r3   annotate_orig_fx_with_snodesr     sc     -/(G$56KL99--$9$=$=dii$HDIIj! r2   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         r3   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 r\   )r   r1   r2   r3   -reset_inductor_kernel_provenance_debug_handler   [  s    /0,r2   c               #      #    [         n [        R                  5       n[        R                  5       n[        R                  5       n[
        R                  5       n[        nSq 0 q0 q0 q0 qSq Sv   U q UqUqUqUqUqg! U q 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.r   N)r   r   copyr   r   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_trace0original_inductor_kernel_provenance_debug_handles         r3   reset_provenance_globalsr   `  s      "4&F&K&K&M#6;;= 2 	,002 0 ,H+L+L+N(0 5
 ')$572*,'#% /0,
 8+J(9 	7 (L$7 	, = 	1 8+J(9 	7 (L$7 	, = 	1s   A)B,A= 0B=BBc                      \ rS rSr\R
                  " 5       r\S\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\S-  SS4S jrSS jrS\S\S   S-  4S jrSrg) DebugContexti  folder_namer-   Nc                 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   rQ   	debug_dirr   r   _counterr   r   r   existsr   )r   r   ndirnames       r3   create_debug_dirDebugContext.create_debug_dir  sy    LL**=mo	&&Aggll-q$G
 77>>'**G$ ' r2   c                 T    S U l         S U l        [        R                  " 5       U l        g rp   )_prof_pathr   r   _stack)selfs    r3   __init__DebugContext.__init__  s     

 **,r2   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   r/   rmtreecopytreeOSErrorr=   r>   )r   r   r   s      r3   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_moderZ   rm   c                     U R                   (       d   e[        [        R                  R	                  U R                   U5      U/UQ70 UD6$ rp   r   openr   r   r   )r   r  r  rZ   rm   s        r3   fopenDebugContext.fopen  s:     zzzBGGLLX6
TTTVTTr2   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rp   r  )r   r  r  rZ   rm   fs         r3   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      $ rp   )r   r   r   r   )r   r  s     r3   r  DebugContext.filename  s'    zzzww||DJJ//r2   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   rQ   
upload_tartarfiler   r   r   r   basenamer  r   )r   r  tar_filetars       r3   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 rp   )r   )r  r=   s    r3   reset_log_level/DebugContext.__enter__.<locals>.reset_log_level  s    U#r2   z	debug.logzinfo.log)r   debugr   r   r  r   r   r   r   callbackr   r#   set_debug_handlerrQ   enabledr   r
   r   	debug_log_setup_log_captureinfo_logINFO)r   
prev_levelr  r=   s      @r3   	__enter__DebugContext.__enter__  s    <<##O4CJLL'$s $t $ KK  =!!!"5"5d";<||##**+=+?@
<<!!##K?<<  ##J= !r2   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         r3   r#  DebugContext._setup_log_capture  s    
  12[[&&tzz(';<""2&
E
ST	
 	rSE*+S..3r2   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/  r0  r1  s       r3   __exit__DebugContext.__exit__  sa     ::JJ ##%::OOKK,.F.H$**Ur2   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      r3   r4  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_inforZ   rm   r-   c                      g rp   r1   rl   s     r3   ignored)DebugContext.__getattr__.<locals>.ignored)  s    r2   )	r   rQ   r!  getattrDebugFormatterrJ   r=   r>   r   )r   r*   rH  s      r3   __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   staticmethodrE   r   r   r   r   r   r  r   contextmanagerr   r  r  r  r'  rD   r#  rc   BaseExceptionr5  r4  r   rL  __static_attributes__r1   r2   r3   r   r     s    Hc cDj  -
S T & UU U 	U
 U 
CU  		 	 		
 	 
"S'		 	0s 0s 0
.>.44 4 
	4 }%, % d
	
 
	# (;d(B r2   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S4S jrSrg)rK  i/  handlerr-   Nc                 v    UR                   U l         UR                  U l        UR                  U l        Xl        g rp   )r  r  r  rZ  )r   rZ  s     r3   r   DebugFormatter.__init__0  s-    ]]
$22((r2   rT   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   rQ   save_real_tensors_subclasses
fake_utilstry_convert_fake_to_realr   r   r   r*   r   r   writeprint_readable)r   rT   r]  r,  r`  ra  s         r3   fx_graphDebugFormatter.fx_graph6  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.pyFrb  )r  rh  ri  )r   rT   r]  r,  s       r3   fx_graph_transformed#DebugFormatter.fx_graph_transformedT  s9    
 ZZ12bHHR&&E&:; 322s	   :
Ar5   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  rh  	_write_irr   r5   r,  s      r3   r'   DebugFormatter.ir_pre_fusion\  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.txtrp  rr  s      r3   r(   DebugFormatter.ir_post_fusion`  s2    ZZ,-HHT^^E*+ .--rt  c                     [         R                  " 5       nU  H3  nUR                  UR                  5       5        UR                  S5        M5     UR	                  5       $ )Nz


)ioStringIOrh  	debug_strgetvalue)r5   rx   rH   s      r3   rq  DebugFormatter._write_ird  sD    kkmDIIdnn&'IIh  ||~r2   c                 4    [        XR                  S5      S9  g )Nzgraph_diagram.svg)r7   )rU   r  )r   r5   s     r3   graph_diagramDebugFormatter.graph_diagraml  s    U--0C"DEr2   c           	          [        X5        [        UU R                  S5      S[        S[        R
                  R                  S9  g )Nzorig_fx_graph_diagram.svgFT)r7   r;   progparse_stack_tracer<   )r   r	   r  GRAPHVIZ_COMMAND_SCALABLEr   rQ   r<   )r   rT   r5   s      r3   draw_orig_fx_graph!DebugFormatter.draw_orig_fx_grapho  s:    
 	%R/-- ;<*""LL88	
r2   r  	extensionc                 T    [         R                  " XR                  SU 35      5        g )Nzoutput_code.)r/   r   r  )r   r  r  s      r3   output_codeDebugFormatter.output_code~  s    Hmml9+,FGHr2   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   )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  T" UR                  UR                  [        R                  R                  R                  UR                  5      [        R                  R                  R                  UR                  5      [        R                  R                  R                  UR                  SS9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 R.                  [0        R2                  5      (       a  T" U R.                  5      US'   U$ ! ["         a     GNdf = f! ["         a     GNXf = f! ["         a     GNLf = f! ["         a     GNf = f! ["         a     Nf = f! ["         a     Nf = f)Nr*    )r*   rc   r   )fallback)rM   rR   strideoffsetlayoutrM   rk   r  rR   numelrL   )r   r*   rc   r_   get_output_specrB   rk   rM   r#   rO   sizevarsoptimization_hintsrR   r  optimization_hintr  rE   rJ   	get_dtyperj   
get_strideget_size	get_numelrL   r   IRNode)rH   r   	node_infor  static_layoutr  build_node_infos        r3   r  >DebugFormatter.log_autotuning_results.<locals>.build_node_info  sh   tV$$ II		!T
++I--/fk22$/$llWW--@@M ww//BB6==Q ww//AA"MMA  B  %M +.m*<Ih'*-f+Ih'%()9%:	'"&)$//*;&<	(#&)GG$$778IJ'	(#
$'GG$$77H%	&!
%(GG$$66t~~7GH&	'"
 tV$$DIIryy)I)I$3DII$>	&!=            su   CJ J +J J# %AJ4 )AK -AK 
JJ
J J #
J10J14
KK
KK
K"!K")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  dictrE   r~   cudaget_device_namedevice_countr  r   	info_dictupdatejsondumprh  )r   r*   r  r  r  r  r  rH   general_propertiesr,  callertimer  r  r  s                @@r3   log_autotuning_results%DebugFormatter.log_autotuning_results  s    	$6	")) 6	S#X 6	 6	r  %

 : : <!&!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  rZ  )py)r_   rP  rQ  rR  r   r   r~   r   r   listTensorrj  rm  SchedulerNodeListr'   r(   rU  rE   rq  r~  r  r  r   r  r  floatr  rX  r1   r2   r3   rK  rK  /  s     <HH  < U\\"< 
	<<<HH  < U\\"< 
	<,#4 , ,,$5 ,$ , * s  F#4 F F
HH  
 !
 
	
IC IC I4 ITT "))_T ne+,	T
 T !T #T\T 
Tr2   rK  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%  inforK  rq  r#   r  r'   r5   s    r3   log_ir_pre_fusionr    sE    %%gll332N4L4LU4STGG% r2   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  rK  rq  r#   r  r(   r  s    r3   log_ir_post_fusionr    sE    &&w||44 2N4L4LU4STGG5!r2   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  r1   r1   r2   r3   <lambda>+_dump_collective_schedule.<locals>.<lambda>  s    6"!r2   c                     > T $ rp   r1   r  s   r3   r  r    s    xr2   metadata_fn
payload_fnzAFailed to log inductor_collective_schedule via structured loggingTrE  )r   rJ   r=   r  r  s   `r3   _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 )NrH   python_kernel_name)rB   rJ  r   _CollectiveKernelr  )r5   rH   opr  s       r3   log_collective_scheduler    se     DGD&$77b9M9MN 	0($/   !(+ s
   0A A node_runtimesc           	        ^^  [         R                  R                  R                  mS[        [
           S-  S[        [
           4U4S jjnS[
        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     [/        SS U4S jS9  g! [,         a     N8f = f! [,         a    [0        R3                  SSS9   gf = f)zDLog per-op runtime estimates and output tensor metadata for TLParse.rr   Nr-   c                 0   > U b  [        T" U 5      5      $ / $ rp   )r  )rr   to_optimization_hintss    r3   to_list,log_runtime_and_tensor_meta.<locals>.to_list	  s    56]4-a01JJr2   rM   c                 F    U c  g [        U 5      nUR                  S5      nU$ )Nztorch.)rE   removeprefix)rM   ss     r3   dtype_to_str1log_runtime_and_tensor_meta.<locals>.dtype_to_str  s&    }E
Ax(AHr2   r  
collectiverg   )shaper  rM   )r*   rc   estimated_runtime_nsr   r  c                      SSS.$ )N inductor_runtime_and_tensor_metar  r  r1   r1   r2   r3   r  -log_runtime_and_tensor_meta.<locals>.<lambda>9  s    :"!r2   c                     > ST 0$ )Nopsr1   )r  s   r3   r  r  =  s	    s|r2   r  z.Failed to log inductor_runtime_and_tensor_metaTrE  )r#   rO   r  r  r   r   r  rE   rJ  rH   r   r   is_collectiverG   rI   rB   r  r   Layoutr  maybe_get_dtyper   rJ   r   r=   r  )r  r  r  r  
runtime_nsr*   op_typer   rx   irnoder  r  rM   r  r  s                @@r3   log_runtime_and_tensor_metar    s   :S ! 0 0 C C	Kx}t+ 	KS	 	K	 	d
 	 %'*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   B7F <B%F!+F 
FF FF F>=F>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  r1   r1   r2   r3   r  %log_graph_execution.<locals>.<lambda>J  s    )"!r2   c                      S[         0$ )Ngraph_execution_order)r$   r1   r2   r3   r  r  N  s     79NOr2   r  zFailed to log graph_executionTrE  )r$   r   rJ   r=   r  r1   r2   r3   log_graph_executionr  C  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  r1   r2   r3   $record_and_log_graph_execution_orderr   T  sT      !!!& $  	!& $ s   4 414c                   >    \ rS rSr% \\S'   \R                  \S'   Srg)TensorMetadataHolderid  tensor_metadatark   r1   N)	r_   rP  rQ  rR  r   __annotations__r~   rk   rX  r1   r2   r3   r  r  d  s    ##LLr2   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 dictrH   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)rB   r  r=   error)rH   s    r3   check_format8create_mapping_pre_post_grad_nodes.<locals>.check_format  sQ    dD))		l %t);{RV?V		o r2   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rp   r1   )rq   r   
parent_keys     r3   rt   5create_mapping_pre_post_grad_nodes.<locals>.<genexpr>  s      !1RAJ1Rs   dNc                 J    U  H  n[        X   5      X'   M     [        U 5      n g rp   r  r  r  keys     r3   convert_sets_to_listsAcreate_mapping_pre_post_grad_nodes.<locals>.convert_sets_to_lists  "    af QAr2   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)rB   r  r=   r  rD   r|   defaultdictr   rE   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_arrayrH   r   r   current_noder  er  s                 @r3   r  r  m  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 rp   r  r  s     r3   r  Fcreate_node_mapping_kernel_to_post_grad.<locals>.convert_sets_to_lists  r  r2   r_  r  "create_mapping_kernel_to_post_gradr  z$triton_kernel_to_post_grad_json:  %s)rB   r  r=   r  r|   r!  r   r   r  r   rE   r   rJ   r   r$  r%  )r-  r&  post_to_cpp_coder)  r*  	curr_noder  r,  s           r3   'create_node_mapping_kernel_to_post_gradr6    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.jsonrO  g       @versionr_  r  dump_inductor_provenance_infor  )r   r6  r   r   r   rQ   r!  r#   r  r  r  r  rJ   r   rE   r$  r%  )node_mappingnode_mapping_kernelr,  r,  s       r3   r9  r9  
  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   rE   r$  r%  )r(  all_kernelsresultkernel_namer>  r?  	post_noder,  s           r3   r@  r@  0  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_schedulerD  r   c           	      8  ^
 [         R                  R                  S:X  a  g 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
[1        U	5      [2        R4                  " 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   Nr   )DisableReductionEnableReduction:c              3   `   >#    U  H#  nUR                   T;  d  M  UR                   v   M%     g 7frp   r*   rq   r   curr_node_infos     r3   rt   :set_kernel_post_grad_provenance_tracing.<locals>.<genexpr>  s*      &"7{{.8  FKK"7   ..c              3   `   >#    U  H#  nUR                   T;  d  M  UR                   v   M%     g 7frp   rL  rM  s     r3   rt   rO    s,      . +=%{{.@ (FKK*<rP  r_  r  'set_kernel_post_grad_provenance_tracingr  )r   rQ   provenance_tracking_levelcodegen.simd_kernel_featuresrH  rI  r   rB   r   r   
setdefaultorigin_noder*   r   r#  r   r  get_stack_tracesr   rH   r  r   rJ   r   rE   r$  r%  )rF  rD  r   rH  rI  r=  origin_node_namestack_traces_setrF   r,  rN  s             @r3   rR  rR  Z  s    ||--2?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***<*<.  '    01L$//R@GGU77  	'E V(335	
 s%   C;G !G 0B'G 
H"-HHrZ   rm   c                  J   [         R                  R                  [        R                  " 5       S5      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.
inductor_saved_argsrr   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.
)rB   r~   r  r  r   rk   rr   s    r3   handle_tensor5save_args_for_compile_fx_inner.<locals>.handle_tensor  s1     a&&'(@(CQXXNNHr2   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   tempfile
gettempdirr   mkdirr   r   nextsave_args_cntr  pickler  r=   r  r   r   rN   )
rZ   rm   folderr^  args_to_savekwargs_to_savefn_namer   r  messages
             r3   save_args_for_compile_fx_innerro    s     WW\\(--/1FGF77>>&!!

 
 
 $,M&>#J L GXQwiqm!4 5T:D	dD	Q\2A6 
 &&337& 9$ %)8 ,	 	g ' 
	s   4D
D"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`  rbrr   r-   c                    [        U [        5      (       ar  [        R                  R                  R                  U R                  R                  U R                  R                  U R                  R                  U R                  5      $ U $ rp   )rB   r  r~   _dynamotestingrand_stridedr  r  r  rM   rk   r]  s    r3   r^  9load_args_and_run_compile_fx_inner.<locals>.handle_tensor  sh    a-..==((55!!''!!((!!''	  Hr2   T)allow_non_fake_inputs	save_argsF)torch._inductor.compile_fxr`  r  ri  loadr   r~   re  FakeTensorModer   r   r   )r   r`  r  rZ   rm   r^  	fake_modes          r3   "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          	         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   ry  r  r  dump_aoti_minifiermodulerB   r~   r   r   example_inputsrepro_levelr   deepcopyrC   exportr=   r>   rJ   )r  r  r  r~  r  r  r   r  use_minifierrT   rZ   rm   gm_copyexample_inputs_copyconfig_copyflat_example_inputstuple_inputsflattened_epr,  r  s                       r3   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)FNr\   rN  )F)r|   r   r   dataclasses	functoolsrx  rS  r  r   r   os.pathri  r=  r/   rd  r$  collections.abcr   r   r   typingr   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  rE   objectr  r%   r   r&   rD   r  r  r  r}   r)   r  cacher4   rU   r   r?   r   r   r   rV  r   r   r   r   r   r   r   r   r   r   rK  r  r  r  r  rC   r  r  r  r   	dataclassr  rT  rh  r  r6  r9  r@  rR  ro  r}  r  ExportedProgramr  r1   r2   r3   <module>r     s        	    	       8 8    V V  : - ! , 5 0 - O 7   / (     ! 9= tDf-.5 <$  $26 4S4Z(4/ 6%h@ &x1AB I 

 
 VZ,@
AT  + + + 6!"66 :6 
	6r`$'8"9 `bhh `L #'	!t#!S>! 4Z! 	!
 
!H!S>!	#w,!$III 
I" %HTN % %V EG  $sDd3i,@'@"A FGI .S$s)^0D I!% C$J %68 #T#s(^ 857 d3S	>2 701 (# 11
 /
(4. /
 /
dY Yxf fR!. !4 !"/ "D "
S4Z(8 
T 
"	,8,=#> 	,4 	,=Sxc5j8I/J =St =S@B" !htn ! !   
 !^Tz^!%c3h^ 
#tCcN#
#$^B9%)#s(^9	#tCH~
9x#tCH~ #L'S$sDI~2F-F(G 'Z M-.=MM M 	4Z	M`+# + + +\1S 1S 18 %)Q
38
Qll22Q 38n	Q
 T/Q 	Qr2   