
    ɯwgtW                        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jl                  e7      Z8ee   Z9 e jt                  dddg      Z;g dZ< ejz                  d      de>fd       Z?	 	 d/dee/   de>dee@   ddfdZAdee/   dej                  fdZC	 	 d0d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:                  jF                  de9ddfd"ZGej                  ded   fd#       ZI G d$ d%      ZJ G d& d'      ZKej                   G d( d)             ZM ej                         ZOd*ed+eddfd,ZPd-e@defd.ZQy)1    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                      	 t        j                  ddgt         j                         y# t         j                  $ r Y yw xY w)Nwhichr$   )stderrTF)
subprocesscheck_outputPIPESubprocessError     Z/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torch/_inductor/debug.pyhas_dotr0   ,   s;    % 0I%% s   '* A A nodesprint_graphfnamec           
         t               st        j                  d       y|
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&                  j)                          t+        ||dt,        j.                  j0                         y)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   s"    9@A}(*!%(E ,		)		-(..eU#%(C(qa dB--.IIOOE!%dD$M#+		- !,$ e	R	B2HHMMO
EeV\\5Q5Qr.   snodesc                 
   dt         dt        dt        f   fd}t        j                  dg d      }i }i }t
        j                  j                         }d}g }d}| D ]  }	|	j                         rd}
|
}ns|	j                         rd	}
|
}n^t        |	t              rd
}
|
}nIt        |	t              rd}
|	j                  }n*t        |	t              rd}
|	j                  }nt        d      t
        j                   j"                  j%                  |	j'                         d      }|
 d| } ||      }i }t)        |	d      rd|	j+                         i}|j-                  |d|      }dt.        t0        t        f   dt2        ffd |	      r|j5                  |       |	j7                         }||_         |||	|
      |j:                  d<   |||<   |	j=                         D ]  }|||j7                         <    ||} | D ]  }	|	j7                         }|	j>                  j@                  }||   }g }|D ]{  }|j8                  |v r||j8                     }nD|jC                  |      5  |jE                  |j8                        }|||j8                  <   ddd       |k(  rk|j5                  |       } tG        |      |_$         |jK                  tM        |      dk(  r|d          |S tG        |             |S # 1 sw Y   ixY w)B
    Creates a FX Graph from a list of SchedulerNode objects.
    r"   r%   .c                 4    dt         dt        fd}| |_        |S )Nargsr%   c                       yNr   r-   )rP   s    r/   func1z;create_fx_from_snodes.<locals>.get_fake_func.<locals>.func1i   s    r.   )r   r@   __name__)r"   rS   s     r/   get_fake_funcz,create_fx_from_snodes.<locals>.get_fake_funch   s#    	 	 	 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 | j	                         D              S )Nc              3   .   K   | ]  } |        y wNr-   ).0x	in_outputs     r/   	<genexpr>z;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>   s     >A9Q<>s   c              3   r   K   | ]/  }|j                   D ]  }t        |j                  t                 1 y wre   )usersr>   rH   r   )rf   bufusers      r/   ri   z;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>   s<      II  499j11s   57)r>   r   anyrL   get_outputs)rW   rh   s    r/   rh   z(create_fx_from_snodes.<locals>.in_output   sF    %!3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  ''6PQJNOHHNNEJGE 2!?? IE "IE56IE}-!IKKE1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]# '$$& 	5C-4N3<<>*	5  Je2!j  '~~  &&!$' 		&Cxx>))#((3++J7 8$00:H/7N388,8 7"OOH%		& X#'& 
LLs7|q0EL 7<GnEL8 8s   &+K99Lnode_name_to_buf_nameparent_buf_name	n_originsc                 X   | y | D ]  }|j                         }|j                         }| t        |      dkD  rt        ||||n|       Et        |      dk(  r|d   |k(  sJ |j                  }||j
                  x|j
                  D ]  }|j                  }	|	|vs||n|||	<     y )Nr   r   )r   r{   r   $update_orig_fx_node_name_to_buf_namerH   originsr"   )
r1   r   r   r   rH   buf_namechildren_nodesir_nodeorigin	node_names
             r/   r   r      s     } ==?)%#n*=*A0%+3
 ~&!+q0AT0III))?goo5oo 	FI  55 / 7H_ &i0	#r.   c                     i }| j                         D ]$  \  }}||vr|h||<   ||   j                  |       & i }| j                         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--,5;x(x(,,Y7	8 4::< E	8'12+28V+Di(E ! r.   rJ   c                     i }t        ||       |yt        |      }| j                  j                  D ]9  }|j                  |v s|j                  |j                        |j                  d<   ; y)rN   Nbuf_meta)r   r   rE   r1   r"   getr<   )rJ   rL   r   r   rH   s        r/   annotate_orig_fx_with_snodesr      sm     -/(1FG$56KL I99--$9$=$=dii$HDIIj!Ir.   c               #     K   t         j                  j                  dd      dk(  } dd l}t	        j
                  |j                  j                  j                        }t        j                         }| s	 d  |j                          y |j                  t        dd             t         j                  j                  t!               d      }t        j"                  |d       t	        j$                  t         j                  j                  |d	t'                d
            }|j)                  t        j*                         |j-                  t	        j.                  d             |j1                  |       	 d  |j3                  |       |j                          y # |j                          w xY w# |j3                  |       |j                          w xY w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   
  sZ    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   A1G4F 8C>G7F2 ;"GF//G2#GG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y)DebugContextfolder_namer%   c                 6   t         j                  j                  xs
 t               }t        j
                  D ]`  }t        j                  j                  |d|  d|       }t        j                  j                  |      rIt        j                  |       |c S  y )Nr   .)r   rG   	debug_dirr   r   _counterr   r   r   existsr   )r   r   ndirnames       r/   create_debug_dirzDebugContext.create_debug_dir6  s{    LL**=mo	&& 	Aggll-q$G
 77>>'*G$	 r.   Nc                 R    d | _         d | _        t        j                         | _        y re   )_prof_pathr   r   _stack)selfs    r/   __init__zDebugContext.__init__D  s     

 **,r.   new_pathc                    | j                   sy |j                  d      sJ |       ddlm} 	  || d      5  t        j
                  j                  |      rt        j                  |       t        j                  | j                   |       d d d        y # 1 sw Y   y xY w# t        $ r$ t        j                  d| j                   |       Y y 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  s    zz  *4H4*%	XJe,- 677>>(+MM(+

H56 6 6  	KK:DJJ	s/   B" ABB" BB" B" "*CCfilename
write_moderP   rb   c                     | j                   sJ t        t        j                  j	                  | j                   |      |g|i |S re   r   openr   r   r   )r   r   r   rP   rb   s        r/   fopenzDebugContext.fopenY  s:     zzzBGGLLX6
TTTVTTr.   c              /      K   | j                   sJ t        t        j                  j	                  | j                   |      |g|i |5 }| d d d        y # 1 sw Y   y xY wwre   r   )r   r   r   rP   rb   fs         r/   fopen_contextzDebugContext.fopen_contextc  sW      zzz"'',,tzz84jR4R6R 	VWG	 	 	s   AA#	A	A#A A#suffixc                 r    | j                   sJ t        j                  j                  | j                   |      S re   )r   r   r   r   )r   r   s     r/   r   zDebugContext.filenameo  s'    zzzww||DJJ//r.   c                    t         j                  j                  dd l}| j                  sJ t
        j                  j                  | j                  t
        j                  j                  | j                         d      }|j                  |d      5 }|j                  | j                  t
        j                  j                  | j                               d d d        t         j                  j                  |       y y # 1 sw Y   *xY w)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    <<"".:::ww||

rww//

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

BGG,<,<TZZ,HIJLL##H- /J Js   ADD
c                    t         j                  rjt        j                  d      j                  }j                  t        j                         dt        dd ffd}| j                  j                  ||       | j                  j                  t        j                  |              t         j                  j                  sy | j                  t!                     | _        t         j                  j$                  r | j'                  dt        j                         t         j                  j(                  r!| j'                  dt        j*                         y y )Nztorch._dynamolevelr%   c                 (    j                  |        y 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4CJLL'$s $t $ KK  *=!!!"5"5d";<||##**+=+?@
<<!!##K?<<  ##J= !r.   r   c                    t        j                  d      }| j                  j                  | j	                  |            }t        j
                  |      }|j                  |       |j                  t        j                  d             |j                  |       |j                  t        |j                  |             | j                  j                  |j                  |       y )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[[&&tzz(';<""2&
E
ST	
 	rSE*+S..3r.   exc_typeexc_valexc_tbc                 .   | j                   r*| j                   j                          | j                          | j                  r9| j	                          t
        j                  dt               | j                         | j                  j                          y )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__  sa     ::JJ ##%::OOKK,.F.H$**Ur.   c                    | j                   sJ | j                   j                  | j                  d             | j                  d      5 }t	        j
                  | j                   |      }|j                          |j                  d       |j                  d       |j                  d       |j                  d       d d d        y # 1 sw Y   y xY w)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    zzz

dmmN;<ZZ( 	#BLLB7EY'c"Y'c"	# 	# 	#s   
A6C		Cr"   ).Nc                 
   t         j                  j                  r0t        t         j                  |      r	 t        t	        |       |      S dt        dt        dd fd}|S # t
        $ r t        j                  dd       Y y w xY w)Nz Ignoring exception in debug codeT)exc_inforP   rb   r%   c                       y 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__  sy    <<GFLL$$?~d3T::s c d  N  >Ns   A  BB)r%   N)w)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  s   y Hc hsm  -
S T & UU U 	U
 U 
CU  		 	 		
 	 
"S'		 	0s 0s 0
.>.44 4 
	4 4./ -( 	
 
	# )1D(E r.   r   c                      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y)r#  handlerr%   Nc                 x    |j                   | _         |j                  | _        |j                  | _        || _        y re   )r   r   r   r/  )r   r/  s     r/   r   zDebugFormatter.__init__  s/    ]]
$22((r.   rJ   inputsc                     | j                  d      5 }t        |||d       d d d        | j                  d      5 }|j                  |j                  d             d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)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	9 ZZ./ 	<2HHR&&E&:;	< 	<	9 	9	< 	<s   A%"A1%A.1A:c                     | j                  d      5 }|j                  |j                  d             d d d        y # 1 sw Y   y xY w)Nzfx_graph_transformed.pyFr4  )r   r6  r7  r8  s       r/   fx_graph_transformedz#DebugFormatter.fx_graph_transformed  sB    
 ZZ12 	<bHHR&&E&:;	< 	< 	<s	   "=Ar1   c                 (    | j                  d|       y )Nzir_pre_fusion.txt	_write_irr   r1   s     r/   ir_pre_fusionzDebugFormatter.ir_pre_fusion  s    *E2r.   c                 (    | j                  d|       y )Nzir_post_fusion.txtr=  r?  s     r/   ir_post_fusionzDebugFormatter.ir_post_fusion  s    +U3r.   r   c                     | j                  |      5 }t        j                  d|j                         |D ]2  }|j	                  |j                                |j	                  d       4 	 d d d        y # 1 sw Y   y xY w)NzWriting debug ir to  %sz


)r   r9   infor"   r6  	debug_str)r   r   r1   r	  rH   s        r/   r>  zDebugFormatter._write_ir  sh    
 ZZ! 	#RHH.8 #)*"#	# 	# 	#s   AA44A=c                 <    t        || j                  d             y )Nzgraph_diagram.svg)r3   )rK   r   r?  s     r/   graph_diagramzDebugFormatter.graph_diagram  s    U$--0C"DEr.   c                     t        ||       t        || j                  d      dt        dt        j
                  j                         y )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  s<    
 	%R/-- ;<*""LL88	
r.   c                 N    t        j                  || j                  d             y )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           	      L   dd l }ddlm dt        j                  dt        t
        t
        f   ffd|t        j                  j                         t        j                  j                         |D cg c]
  } |       c}||d}| j                  dd	d
      5 }	|j                         D ]W  \  }
}t        |
j                               }|j                  |       ||d<   |j                  ||	       |	j!                  d       Y 	 d d d        y c c}w # 1 sw Y   y xY w)Nr   r   )FixedLayoutrH   r%   c           
         t        | d      r| j                  }nd}|t        |       j                  d}	 | j	                         }t        |      rd}	 t        |j                        } |j                  |j                  t        t        j                  j                  j!                  |j"                              t        t        j                  j                  j!                  |j$                              |      }t'        |      |d<   nt'        | j	                               |d<   	 t'        | j)                               |d<   	 t'        | j+                               |d	<   	 t'        t        j                  j                  j!                  | j-                                     |d
<   	 t'        t        j                  j                  j!                  | j/                                     |d<   	 t'        t        j                  j                  j                  | j1                                     |d<   t        | d      r9t        | j2                  t4        j6                        r | j2                        |d<   |S # t        $ rJ 	 t        j                  j                  j                  |j                  d      }n# t        $ r Y nw xY wY _w xY w# t        $ r}Y d }~d }~ww xY w# t        $ r}Y d }~d }~ww xY w# t        $ r}Y d }~d }~ww xY w# t        $ r}Y d }~yd }~ww xY w# t        $ r}Y d }~Ld }~ww xY w# t        $ r}Y d }~d }~ww xY w)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$ II		!T
++I*fk2F!!$V]]!3 %0$ll!!''"2"2"="=fkk"JK#AGG$4$4$?$?$NO%%M +.m*<Ih'*-doo.?*@Ih'%()9%:	'"&)$//*;&<	(#&)GG$$//0AB'	(#
$'(8(8(C(CDMMO(T$U	&!%()9)9)C)CDNNDT)U%V	'" tV$DIIryy)I$3DII$>	&!W % !!%&WW%5%5%?%? & &@ &F  ) ! !!"            s   K I7 *C K +K$ K; %AL )AL) -AM  7	K
5J76K
7	K K
KK
K 	K

K 	K!K!$	K83K8;	L
L	L&!L&)	L=8L= 	MM)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  ru  rH   general_propertiesr	  callertimerz  rU  rk  s                @@r/   log_autotuning_resultsz%DebugFormatter.log_autotuning_results  s    	#:	")) :	S#X :	z  %

 : : <!&!8!8!:>IJdOD1J%0
 -tg   
 	 '  !1!1!34	  !3404	,-		)R(	 		 K	 	s   6D
 A+DD#)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#    ss     	<HH  	< U\\"	< 
		<<HH  < U\\"< 
	<3#4 3 34$5 4$ 4	#	# !	# 
		#F#4 F F
HH  
 !
 
	
?C ?D ?XX "))_X ne+,	X
 X !X 
Xr.   r#  c                   6    e Zd ZU eed<   ej                  ed<   y)TensorMetadataHoldertensor_metadatar`   N)rT   r'  r(  r   __annotations__rs   r`   r-   r.   r/   r  r  j  s    ##LLr.   r  rP   rb   c                     d}t         j                  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
       t        j                  t        j                        rd| d|d}	t        |	       y
y
# 1 sw Y   BxY w)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                 x    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~  s.     a&'(@(CQXXNNHr.   compile_fx_inner/_z.pklwbNz3
Arguments for a compile_fx_inner call is saved to z. To replay the call,
run the following:

from torch._inductor.debug import load_args_and_run_compile_fx_inner
load_args_and_run_compile_fx_inner(z
)
        )r   r   r   mkdirr   r   nextsave_args_cntr   pickler|  r9   isEnabledForr   r   rD   )
rP   rb   folderr  args_to_savekwargs_to_savefn_namer   r   messages
             r/   save_args_for_compile_fx_innerr  s  s     (F77>>&!

 
 
 $,MD&>#J L. GXQwiqm!4 5T:D	dD	 7Q\>2A67 &337& 9$ %)8 ,	 	g '7 7s   >CC!r   c                    ddl m} t        | d      5 }t        j                  |      \  }}d d d        dt
        dt
        fd}t        j                  j                  d      }|5  t        j                  d	d
      5  t        |f      \  }} ||i |cd d d        cd d d        S # 1 sw Y   ~xY w# 1 sw Y   nxY wd d d        y # 1 sw Y   y xY w)Nr   )r  rbrg   r%   c                 
   t        | t              rrt        j                  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  se    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LI	 1FLLe4 1f~>f001 1 1& &1 1 1 1 1s/   B)&C
=B5	C
)B25B>	: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     se         	      Q Q Q   V V  : - - O 7 (    g!I 
 +
 
 VZ,@
AT  T   +!"++ C=+ 
	+\_$'8"9 _bhh _J &*	 %& S>  c]  	 
 
 F!S>!	#w,!"III 
I" %HTN % %PY YxX Xv   
  	!+# + + +\1S 1S 1r.   