
    קgtW                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlZd dlmZmZmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z# d d	l$m%Z%m&Z& d d
l'm(Z( d dl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5  ej6        e7          Z8ee         Z9 e j:        dddg          Z;g dZ< ej=        d          de>fd            Z?	 	 d0dee/         de>dee@         ddfdZAdee/         dejB        fdZC	 	 d1dee9         dee@e@f         dee@         deDddf
d ZEdee@e@f         dee@e;f         fd!ZFd"ej        j#        de9ddfd#ZGejH        ded         fd$            ZI G d% d&          ZJ G d' d(          ZKejL         G d) d*                      ZM ejN                    ZOd+ed,eddfd-ZPd.e@defd/ZQdS )2    N)	AnyCallableDictIOIteratorListOptionalTypeUnion)patch)
draw_graphget_aot_graph_nameget_graph_being_compiled)fx)save_graph_repro)get_debug_dir)GraphModule)_extract_tensor_metadataTensorMetadata)legalize_graph)tree_map   )configir)BaseSchedulerNodeFusedSchedulerNodeNopKernelSchedulerNode
OutputNodeSchedulerNode)VBufMetanamen_origin)dotz-Gnslimit=2z-Gnslimit1=2z-Gmaxiter=5000returnc                  x    	 t          j        ddgt           j                   dS # t           j        $ r Y dS w xY w)Nwhichr$   )stderrTF)
subprocesscheck_outputPIPESubprocessError     Q/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_inductor/debug.pyhas_dotr0   ,   sN    % 0IIIIt%   uus   "& 99Fnodesprint_graphfnamec           
         t                      st                              d           dS |t                      }t	          |           }|j        D ]}d|j        vr|j        d         j        }t          |t                    r-t          |d         t                    r
|d         f}n|d         }d}t          |t          j                  r|j        j        }t          ||ddddd          }||j        d<   |rt!          |           t#          i |          }t%          |           |j                                         t+          ||dt,          j        j                   dS )z$
    Draw a graph in fname.svg.
    z*draw_buffers() requires `graphviz` packageNfusion_metar   tensor_metaF)
clear_metadot_graph_shape)r0   logwarningr   create_fx_from_snodesr1   metagroup
isinstancetupleintr   ComputedBufferdatadtyper   printr   r   graphlintr   r   tracer8   )	r1   r2   r3   rE   noder=   rC   metadatagms	            r/   draw_buffersrK   5   sn    99 @AAA}(**!%((E , ,	))	-(.eU## 	!%(C(( !qa dB-.. 	$IOE!%dD$MM#+	-   e	R		B2HMMOOO
EeV\5Q     r.   snodesc                    dt           dt          dt          f         fd}t          j        dg d          }i }i }t
          j                                        }d}g }d}| D ]}	|	                                rd}
|
}n|		                                rd	}
|
}ngt          |	t                    rd
}
|
}nMt          |	t                    r
d}
|	j        }n.t          |	t                    r
d}
|	j        }nt          d          t
          j        j                            |	                                d          }|
 d| } ||          }i }t)          |	d          rd|	                                i}|                    |d|          }dt.          t0          t          f         dt2          ffd |	          r|                    |           |	                                }||_         |||	|
          |j        d<   |||<   |	                                D ]}|||                                <   ||}| D ]}	|	                                }|	j        j         }||         }g }|D ]}|j        |v r||j                 }nQ|!                    |          5  |"                    |j                  }|||j        <   ddd           n# 1 swxY w Y   ||k    rq|                    |           tG          |          |_$        |%                    tM          |          dk    r|d         ntG          |                     |S )B
    Creates a FX Graph from a list of SchedulerNode objects.
    r"   r%   .c                 8    dt           dt          fd}| |_        |S )Nargsr%   c                      dS Nr   r-   )rP   s    r/   func1z;create_fx_from_snodes.<locals>.get_fake_func.<locals>.func1i   s    1r.   )r   r@   __name__)r"   rS   s     r/   get_fake_funcz,create_fx_from_snodes.<locals>.get_fake_funch   s2    	 	 	 	 	 	 r.   
FusionMeta)r=   snodetypeNexterntemplatenopcomputefusedzUnknown node typeoriginal_atenz: 
get_devicedevicer-   rP   kwargsrW   c                     t          | t                    r t          fd| j        D                       S t          d |                                 D                       S )Nc              3   .   K   | ]} |          V  d S Nr-   ).0x	in_outputs     r/   	<genexpr>z;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>   s+      >>A99Q<<>>>>>>r.   c              3   ^   K   | ](}|j         D ]}t          |j        t                    V  )d S re   )usersr>   rH   r   )rf   bufusers      r/   ri   z;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>   s[        I   49j11      r.   )r>   r   anyrL   get_outputs)rW   rh   s    r/   rh   z(create_fx_from_snodes.<locals>.in_output   su    %!344 ?>>>>>>>>>>   ,,..     r.   r5   r   r   )'strr   r@   collections
namedtupletorchr   Graph	is_externis_templater>   r   r   r=   r   RuntimeError	_inductorutilsget_fused_kernel_name	get_nodeshasattrr_   call_functionr   r   boolappendget_namer"   r<   ro   read_writesreadsinserting_beforeplaceholderr?   rP   outputlen)rL   rU   rV   buf_to_fx_nodenode_to_fx_noderE   
first_nodeoutputsr=   rW   	node_type
fused_name	func_name	node_funcrb   fx_noder"   rl   depsnew_argsdepdep_noderh   s                         @r/   r;   r;   c   s   
C HS#X$6     '6P6P6PQQJNOHNNEJGE 2! 2!?? 	4 IEE   	4"IEE566 
	4IEE}-- 	4!IKEE122 	4IKEE2333_*@@OO
 

 !00J00	!M),,	5,'' 	4 0 0 2 23F%%ib%HH	U#46H#HI 	d 	 	 	 	 	 	 9U 	$NN7###~~&0jy&I&I]# '$$&& 	5 	5C-4N3<<>>** J  ' '~~ &!$' 		& 		&Cx>)))#(3++J77 8 8$00::H/7N38,8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7""OOH%%%%X	LLs7||q00eGnnEEELs   %KK	K	node_name_to_buf_nameparent_buf_name	n_originsc                 ^   | d S | D ]}|                                 }|                                }|)t          |          dk    rt          ||||n|           Ut          |          dk    r|d         |k    sJ |j        }||j        |j        D ]}|j        }	|	|vr	||n|||	<   d S )Nr   r   )r   r{   r   $update_orig_fx_node_name_to_buf_namerH   originsr"   )
r1   r   r   r   rH   buf_namechildren_nodesir_nodeorigin	node_names
             r/   r   r      s    }  ==??))%#n*=*=*A*A0%+3  
 ~&&!++q0AT0I0I0I0I)?go5o 	 	FI  555 / 7HH_ &i0	# r.   c                    i }|                                  D ]+\  }}||vr|h||<   ||                             |           ,i }|                                  D ]-\  }}t          ||                   }t          ||          ||<   .|S re   )itemsaddr   r!   )r   buf_name_to_n_noder   r   node_name_to_buf_metan_nodes         r/   get_node_name_to_buf_metar      s     4::<< 8 8	8---,5;x((x(,,Y77774::<< E E	8'122+28V+D+Di((  r.   rJ   c                     i }t          ||           |dS t          |          }| j        j        D ]-}|j        |v r"|                    |j                  |j        d<   .dS )rN   Nbuf_meta)r   r   rE   r1   r"   getr<   )rJ   rL   r   r   rH   s        r/   annotate_orig_fx_with_snodesr      s     -/(1FGGG$56KLL I I9---$9$=$=di$H$HDIj!I Ir.   c               #     K   t           j                            dd          dk    } dd l}t	          j        |j        j        j                  }t          j
                    }| s5	 d V  |                                 n# |                                 w xY wd S |                    t          dd                     t           j                            t!                      d          }t          j        |d           t	          j        t           j                            |d	t'                       d
                    }|                    t          j                   |                    t	          j        d                     |                    |           	 d V  |                    |           |                                 d S # |                    |           |                                 w xY w)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_autogradrT   
contextlib	ExitStackcloseenter_contextr   pathjoinr   makedirsFileHandlerr   setLevelDEBUGsetFormatter	Formatter
addHandlerremoveHandler)compile_debugrs   r9   stackr   fhs         r/   enable_aot_loggingr   
  s     JNN#8#>>#EM((((

E,9B
C
CC ""E 	EEEKKMMMMEKKMMMM 
JDQQRRR7<<99DKt$$$$		
3%''333	
 	

 
B KKOOOPP   NN2" 	"s   $A= =BG
 
+G5c                      e Zd Z ej                    Zededee         fd            Z	ddZ
deddfdZ	 dd	ed
edededee         f
dZej        	 dd	ed
edededeee                  f
d            ZdedefdZddZddZd	ededdfdZdeee                  dee         dee         ddfdZddZdedeed                  fdZdS )DebugContextfolder_namer%   c                    t           j        j        pt                      }t          j        D ]_}t          j                            |d|  d|           }t          j        	                    |          st          j
        |           |c S `d S )Nr   .)r   rG   	debug_dirr   r   _counterr   r   r   existsr   )r   r   ndirnames       r/   create_debug_dirzDebugContext.create_debug_dir6  s    L*=moo	& 	 	Agll$$$$ G
 7>>'** G$$$ tr.   Nc                 R    d | _         d | _        t          j                    | _        d S re   )_prof_pathr   r   _stack)selfs    r/   __init__zDebugContext.__init__D  s$    

 *,,r.   new_pathc                    | j         sd S |                    d          s
J |            ddlm} 	  || d          5  t          j                            |          rt          j        |           t          j	        | j         |           d d d            d S # 1 swxY w Y   d S # t          $ r% t                              d| j         |           Y d S w xY w)Nz.debugr   )FileLockz.lockz(Failed to copy debug files from %s to %s)r   endswithfilelockr   r   r   r   shutilrmtreecopytreeOSErrorr9   r:   )r   r   r   s      r/   copyzDebugContext.copyI  sL   z 	F  **44H444%%%%%%	X,,,-- 6 67>>(++ ,M(+++
H5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6  	 	 	KK:DJ     	s5   B& ABB& BB&  B!B& &+CCwfilename
write_moderP   rb   c                 |    | j         sJ t          t          j                            | j         |          |g|R i |S re   r   openr   r   r   )r   r   r   rP   rb   s        r/   fopenzDebugContext.fopenY  sD     zBGLLX66
TTTTTVTTTr.   c              /      K   | j         sJ t          t          j                            | j         |          |g|R i |5 }|V  d d d            d S # 1 swxY w Y   d S re   r   )r   r   r   rP   rb   fs         r/   fopen_contextzDebugContext.fopen_contextc  s       z"',,tz844jR4RRR6RR 	VWGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    AAAsuffixc                 ^    | j         sJ t          j                            | j         |          S re   )r   r   r   r   )r   r   s     r/   r   zDebugContext.filenameo  s(    zw||DJ///r.   c                    t           j        j        dd l}| j        sJ t
          j                            | j        t
          j                            | j                   d          }|	                    |d          5 }|
                    | j        t
          j                            | j                             d d d            n# 1 swxY w Y   t           j                            |           d S d S )Nr   z.tar.gzzw:gz)arcname)r   rG   
upload_tartarfiler   r   r   r   basenamer   r   )r   r   tar_filetars       r/   r   zDebugContext.upload_tars  s!   <".NNN:w||
rw//
;;DDD H h// J3
BG,<,<TZ,H,HIIIJ J J J J J J J J J J J J J JL##H----- /.s   ??C

CCc                 z   t           j        rdt          j        d          j        }                    t          j                   dt          dd ffd}| j        	                    ||           | j        
                    t          j        |                      t           j        j        sd S |                     t!                                | _        t           j        j        r |                     dt          j                   t           j        j        r"|                     dt          j                   d S d S )Nztorch._dynamolevelr%   c                 2                         |            d S re   )r   )r   r9   s    r/   reset_log_levelz/DebugContext.__enter__.<locals>.reset_log_level  s    U#####r.   z	debug.logzinfo.log)r   debugr   r   r   r   r   r   r   callbackr   r    set_debug_handlerrG   enabledr   r   r   	debug_log_setup_log_captureinfo_logINFO)r   
prev_levelr   r9   s      @r/   	__enter__zDebugContext.__enter__  s(   < 	>#O44CJLL'''$s $t $ $ $ $ $ $ K  *===!!!"5d";";<<<|# 	F**+=+?+?@@
<! 	@##K???<  	>##J=====	> 	>r.   r   c                    t          j        d          }| j                            |                     |                    }t          j        |          }|                    |           |                    t          j        d                     |	                    |           |                    t          |j        |                     | j                            |j        |           d S )Nztorch._inductorr   )r   r   r   r   r   StreamHandlerr   r   r   r   minr   r   r   )r   r   r   r9   fdchs         r/   r  zDebugContext._setup_log_capture  s    
  122[&&tzz(';';<<"2&&
E
STT	
 	
 	
 	rSE**+++S.33333r.   exc_typeexc_valexc_tbc                 0   | j         r-| j                                          |                                  | j        rA|                                  t
                              dt                      | j                   | j        	                                 d S )Nz%s debug trace: %s)
r   disable_save_profile_datar   r   r9   r:   r   r   r   )r   r  r  r  s       r/   __exit__zDebugContext.__exit__  s     : 	&J   ##%%%: 	VOOKK,.F.H.H$*UUUr.   c                    | j         sJ | j                             |                     d                     |                     d          5 }t	          j        | j         |          }|                                 |                    d           |                    d           |                    d           |                    d           d d d            d S # 1 swxY w Y   d S )Nzcompile.profzcompile.stats)streamcumtimed   tottime)	r   
dump_statsr   r   pstatsStats
strip_dirs
sort_statsprint_stats)r   r
  statss      r/   r  zDebugContext._save_profile_data  s   z
dmmN;;<<<ZZ(( 	#BLB777EY'''c"""Y'''c"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   BCC!$C!r"   ).Nc                    t           j        j        ret          t           j        |          rK	 t          t	          |           |          S # t
          $ r  t                              dd           Y d S w xY wdt          dt          dd fd}|S )Nz Ignoring exception in debug codeT)exc_inforP   rb   r%   c                      d S re   r-   ra   s     r/   ignoredz)DebugContext.__getattr__.<locals>.ignored  s    r.   )	r   rG   r   getattrDebugFormatter	Exceptionr9   r:   r   )r   r"   r"  s      r/   __getattr__zDebugContext.__getattr__  s    < 	GFL$$?$? 	~d33T:::   >NNNtt
s c d     Ns   A
 
&A43A4)r%   N)r   )rT   
__module____qualname__	itertoolscountr   staticmethodrp   r	   r   r   r   r   r   r   r   contextmanagerr   r   r   r   r  r@   r  r
   BaseExceptionr  r  r   r&  r-   r.   r/   r   r   3  sS       y  Hc hsm    \- - - -
S T    & U UU U 	U
 U 
CU U U U  	 		 	 		
 	 
"S'		 	 	 	0s 0s 0 0 0 0
. 
. 
. 
.> > > >.44 4 
	4 4 4 4 4./ -( 	
 
   	# 	# 	# 	# )1D(E      r.   r   c                   \   e Zd ZdeddfdZdej        j        deej	                 ddfdZ
dej        j        deej	                 ddfdZd	eddfd
Zd	eddfdZded	eddfdZd	eddfdZdej        j        d	eddfdZdeddfdZdedeej                 dedef         dededdfdZdS )r$  handlerr%   Nc                 \    |j         | _         |j        | _        |j        | _        || _        d S re   )r   r   r   r/  )r   r/  s     r/   r   zDebugFormatter.__init__  s+    ]
$2(r.   rJ   inputsc                 2   |                      d          5 }t          |||d           d d d            n# 1 swxY w Y   |                      d          5 }|                    |                    d                     d d d            d S # 1 swxY w Y   d S )Nzfx_graph_runnable.pyinductorzfx_graph_readable.pyFprint_output)r   r   writeprint_readabler   rJ   r1  r
  s       r/   fx_graphzDebugFormatter.fx_graph  s   
 ZZ.// 	92RVZ888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 ZZ.// 	<2HHR&&E&::;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   599*BBBc                     |                      d          5 }|                    |                    d                     d d d            d S # 1 swxY w Y   d S )Nzfx_graph_transformed.pyFr4  )r   r6  r7  r8  s       r/   fx_graph_transformedz#DebugFormatter.fx_graph_transformed  s    
 ZZ122 	<bHHR&&E&::;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   *AAAr1   c                 2    |                      d|           d S )Nzir_pre_fusion.txt	_write_irr   r1   s     r/   ir_pre_fusionzDebugFormatter.ir_pre_fusion  s    *E22222r.   c                 2    |                      d|           d S )Nzir_post_fusion.txtr=  r?  s     r/   ir_post_fusionzDebugFormatter.ir_post_fusion  s    +U33333r.   r   c                 &   |                      |          5 }t                              d|j                   |D ]>}|                    |                                           |                    d           ?	 d d d            d S # 1 swxY w Y   d S )NzWriting debug ir to  %sz


)r   r9   infor"   r6  	debug_str)r   r   r1   r
  rH   s        r/   r>  zDebugFormatter._write_ir  s    
 ZZ!! 	#RHH.888 # #))***""""#	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   A"BB
B
c                 N    t          ||                     d                     d S )Nzgraph_diagram.svg)r3   )rK   r   r?  s     r/   graph_diagramzDebugFormatter.graph_diagram  s(    U$--0C"D"DEEEEEEr.   c                     t          ||           t          ||                     d          dt          dt          j        j                   d S )Nzorig_fx_graph_diagram.svgFT)r3   r7   progparse_stack_tracer8   )r   r   r   GRAPHVIZ_COMMAND_SCALABLEr   rG   r8   )r   rJ   r1   s      r/   draw_orig_fx_graphz!DebugFormatter.draw_orig_fx_graph  sY    
 	%R///-- ;<<*""L8	
 	
 	
 	
 	
 	
r.   c                 V    t          j        ||                     d                     d S )Nzoutput_code.py)r   r   r   )r   r   s     r/   output_codezDebugFormatter.output_code  s'    Hdmm,<==>>>>>r.   r"   input_nodestimingsChoiceCallerelapseprecompile_elapsec                 t   dd l }ddlm dt          j        dt          t
          t
          f         ffd|t          j                                        t          j        	                                fd|D             ||d}| 
                    d	d
d          5 }|                                D ]k\  }	}
t          |	                                          }|                    |           |
|d<   |                    ||           |                    d           l	 d d d            d S # 1 swxY w Y   d S )Nr   r   )FixedLayoutrH   r%   c           
         t          | d          r| j        }nd}|t          |           j        d}	 |                                 }t          |          rd}	 t          |j                  }nM# t          $ r@ 	 t          j
        j                            |j        d          }n# t          $ r Y nw xY wY nw xY w |j        |j        t          t          j
        j                            |j                            t          t          j
        j                            |j                            |          }t'          |          |d<   n$t'          |                                           |d<   n# t          $ r
}Y d }~nd }~ww xY w	 t'          |                                           |d<   n# t          $ r
}Y d }~nd }~ww xY w	 t'          |                                           |d	<   n# t          $ r
}Y d }~nd }~ww xY w	 t'          t          j
        j                            |                                                     |d
<   n# t          $ r
}Y d }~nd }~ww xY w	 t'          t          j
        j                            |                                                     |d<   n# t          $ r
}Y d }~nd }~ww xY w	 t'          t          j
        j                            |                                                     |d<   n# t          $ r
}Y d }~nd }~ww xY wt          | d          r2t          | j        t4          j                  r | j                  |d<   |S )Nr"    )r"   rX   r   )fallback)rC   sizestrideoffsetlayoutrC   r`   rZ  rY  numelrB   )r|   r"   rX   rT   
get_layoutr>   r@   r[  r%  r    rE   sizevars	size_hintr`   rC   list
size_hintsrY  rZ  rp   	get_dtyper_   
get_strideget_size	get_numelrB   r   IRNode)	rH   r   	node_infor\  r[  static_layouterU  build_node_infos	          r/   rk  z>DebugFormatter.log_autotuning_results.<locals>.build_node_info  s   tV$$  I			!T

+ I**fk22 AF!!$V]!3!3$ ! ! !!%&W%5%?%? & &@ & &FF  ) ! ! ! D!! %0K$l!!'"2"="=fk"J"JKK#AG$4$?$?$N$NOO%% % %M +.m*<*<Ih''*-doo.?.?*@*@Ih'   %()9)9%:%:	'""   &)$//*;*;&<&<	(##   &)G$//0A0ABB' '	(##    $'(8(C(CDMMOO(T(T$U$U	&!!   %()9)C)CDNNDTDT)U)U%V%V	'""   tV$$ ?DIry)I)I ?$3ODI$>$>	&!s   &E7 A0 /E7 0
B:;+B'&B:'
B41B:3B44B:7E7 9B::B<E7 7
FF$F4 4
GG$G1 1
H H	AI 
I$I$(AJ/ /
K>KAL 
L"L"c                 &    g | ]} |          S r-   r-   )rf   rH   rk  s     r/   
<listcomp>z9DebugFormatter.log_autotuning_results.<locals>.<listcomp>[  s#    JJJdOOD11JJJr.   )op_namecuda_device_namecuda_device_countrO  autotuning_timeprecompile_timezautotuning_result_json_list.txtatzutf-8)encodingbenchmark_result
)jsonr   rU  rg  r   rp   rs   cudaget_device_namedevice_countr   r   dict	info_dictupdatedumpr6  )r   r"   rO  rP  rR  rS  rw  general_propertiesr
  callertimer|  rU  rk  s               @@r/   log_autotuning_resultsz%DebugFormatter.log_autotuning_results  s    	######:	") :	S#X :	 :	 :	 :	 :	 :	 :	z  %
 : : < <!&!8!8!:!:JJJJkJJJ%0
 
 -tg   
 
 	 '   !1!1!3!344	  !344404	,-		)R(((	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BD--D14D1)rT   r'  r(  r   r   rs   r   r   r   Tensorr9  r;  SchedulerNodeListr@  rB  rp   r>  rG  rL  rN  r   rg  r   floatr  r-   r.   r/   r$  r$    s            	<H 	< U\"	< 
		< 	< 	< 	<<H < U\"< 
	< < < <3#4 3 3 3 3 34$5 4$ 4 4 4 4	#	# !	# 
		# 	# 	# 	#F#4 F F F F F
H 
 !
 
	
 
 
 
?C ?D ? ? ? ?XX ")_X ne+,	X
 X !X 
X X X X X Xr.   r$  c                   .    e Zd ZU eed<   ej        ed<   dS )TensorMetadataHoldertensor_metadatar`   N)rT   r'  r(  r   __annotations__rs   r`   r-   r.   r/   r  r  j  s,         ####Lr.   r  rP   rb   c                     d}t           j                            |          st          j        |           dt          dt          fd}t          || |f          \  }}d}| d| dt          t                     d}t          |d	          5 }t          j
        ||f|           d
d
d
           n# 1 swxY w Y   t                              t          j                  rd| d|d}	t          |	           d
S d
S )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_argsrg   r%   c                 ~    t          | t          j                  r"t          t	          |           | j                  S | S )z
        Pickle FakeTensor will result in error:
        AttributeError: Can't pickle local object 'WeakValueDictionary.__init__.<locals>.remove'

        Convert all Tensor to metadata. This may also makes pickle faster.
        )r>   rs   r  r  r   r`   rg   s    r/   handle_tensorz5save_args_for_compile_fx_inner.<locals>.handle_tensor~  s8     a&& 	'(@(C(CQXNNNHr.   compile_fx_inner/_z.pklwbNz3
Arguments for a compile_fx_inner call is saved to z. To replay the call,
run the following:

from torch._inductor.debug import load_args_and_run_compile_fx_inner
load_args_and_run_compile_fx_inner(z
)
        )r   r   r   mkdirr   r   nextsave_args_cntr   pickler~  r9   isEnabledForr   r   rD   )
rP   rb   folderr  args_to_savekwargs_to_savefn_namer   r   messages
             r/   save_args_for_compile_fx_innerr  s  sl    (F7>>&!! 

 
 
 
 
 
 $,MD&>#J#J L. G::w::m!4!4:::D	dD		 7Q\>2A6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 && 37 
 %)   	g s   B00B47B4r   c                    ddl m} t          | d          5 }t          j        |          \  }}d d d            n# 1 swxY w Y   dt
          dt
          fd}t          j                            d          }|5  t          j
        d	d
          5  t          |||f          \  }} ||i |cd d d            cd d d            S # 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   )r  rbrg   r%   c                     t          | t                    rJt          j        j                            | j        j        | j        j        | j        j	        | j
                  S | S re   )r>   r  rs   _dynamotestingrand_stridedr  shaperZ  rC   r`   r  s    r/   r  z9load_args_and_run_compile_fx_inner.<locals>.handle_tensor  sY    a-.. 	=(55!'!(!'	   Hr.   T)allow_non_fake_inputs	save_argsF)torch._inductor.compile_fxr  r   r  loadr   rs   _subclassesFakeTensorModer   r   r   )r   r  r   rP   rb   r  	fake_modes          r/   "load_args_and_run_compile_fx_innerr    s   ;;;;;;	dD		 &Q{1~~f& & & & & & & & & & & & & & &	 	 	 	 	 	 !00t0LLI	 1 1FLe44 1 1f~>>f0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1sC   ;??:CC-CC
	
CC
	CC"%C")FNrR   )Rrq   r   dataclasses	functoolsr)  r   r   os.pathr  r  r   r)   typingr   r   r   r   r   r   r	   r
   r   unittest.mockr   rs   functorch.compiler   r   r   r   torch._dynamo.repro.after_aotr   torch._dynamo.utilsr   torch.fx.graph_moduler   torch.fx.passes.shape_propr   r   torch.fx.passes.tools_commonr   torch.utils._pytreer   rW  r   r   	schedulerr   r   r   r   r   virtualizedr    r   rT   r9   r  rr   r!   rK  	lru_cacher~   r0   rp   rK   rt   r;   r@   r   r   r   r,  r   r   r$  	dataclassr  r*  r  r  r  r-   r.   r/   <module>r     s                        				         Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q        V V V V V V V V V V       : : : : : : - - - - - - - - - - - - O O O O O O O O 7 7 7 7 7 7 ( ( ( ( ( (                            g!!I 
 +
 VZ,@
A
ATTT  T     + +!"++ C=+ 
	+ + + +\_$'8"9 _bh _ _ _ _J &*	   %& S>  c]  	 
 
       F!S>!	#w,! ! ! !"III 
I I I I" %HTN % % % %PY Y Y Y Y Y Y YxX X X X X X X Xv        
  	!!+# + + + + + +\1S 1S 1 1 1 1 1 1r.   