o
    h                     @   s  U 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Zd dlZd dlZd dlmZ d dl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& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< e=e>Z?e$e>dZ@e$e>dZAeBe ZCe DdddgZEg dZFejGdeHfddZI		dRdeBe6 deHd eeJ ddfd!d"ZKd#eBe6 dejLfd$d%ZM		 dSdeeC d&eNeJeJf d'eeJ d(eOddf
d)d*ZPd&eNeJeJf deNeJeEf fd+d,ZQd-ejj&d#eCddfd.d/ZRejSded fd0d1ZTi ZUeNeJef eVd2< dZWeeO eVd3< G d4d5 d5ZXG d6d7 d7ZYdeCddfd8d9ZZdeCddfd:d;Z[ej\G d<d= d=Z]e^ Z_d>eOd?eNeJef d@eNeJef deNeJeNeJef f fdAdBZ`dCedDeddfdEdFZadGeJdefdHdIZbddJdKedLeJf dMejcjddNeNeJef dOee- deJf
dPdQZedS )T    N)Iterator)AnyCallableIOOptionalUnion)patch)
draw_graphget_aot_graph_nameget_graph_being_compiled)fx)save_graph_repro)get_debug_dir)getArtifactLogger)GraphModule)_extract_tensor_metadataTensorMetadata)legalize_graph)FileLike)
OrderedSet)tree_map   )configir)BaseSchedulerNodeFusedSchedulerNodeNopKernelSchedulerNode
OutputNodeSchedulerNode)Vir_pre_fusionir_post_fusionBufMetanameZn_origin)dotz-Gnslimit=2z-Gnslimit1=2z-Gmaxiter=5000returnc                   C   s   t dd uS )Nr$   )shutilwhich r(   r(   [/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/torch/_inductor/debug.pyhas_dot5   s   r*   Fnodesprint_graphfnamec           	   	   C   s   t  s
td dS |du rt }t| }|jD ]?}d|jvr q|jd j}t|t	r<t|d t
r8|d f}n|d }d}t|tjrH|jj}t||ddddd}||jd< q|r^t| ti |}t| |j  t||dtjjd dS )z$
    Draw a graph in fname.svg.
    z*draw_buffers() requires `graphviz` packageNfusion_metar   Ztensor_metaF)
clear_metadot_graph_shape)r*   logwarningr   create_fx_from_snodesr+   metagroup
isinstancetupleintr   ZComputedBufferdatadtyper   printr   r   graphZlintr	   r   tracer0   )	r+   r,   r-   r<   noder5   r:   metadatagmr(   r(   r)   draw_buffers:   s6   






rA   snodesc              
      sf  dt dtdtf fdd}tdg d}i }i }tj }d}g }d}| D ]}	|	 r1d	}
|
}n-|		 r:d
}
|
}n$t
|	trDd}
|
}nt
|	trOd}
|	j}nt
|	trZd}
|	j}ntdtjj|	 d}|
 d| }||}i }t|	drd|	 i}|j|d|d}dtttf dtf fdd  |	r|| |	 }||_|||	|
|jd< |||< |	 D ]}||| < q|du r|}q&| D ]Q}	|	 }|	jj }|| }g }|D ]9}|j|v r||j }n!|!| |"|j}|||j< W d   n	1 sw   Y  ||krq|| qt#||_$q|%t&|dkr,|d  |S t#| |S )B
    Creates a FX Graph from a list of SchedulerNode objects.
    r#   r%   .c                 S   s   dt dtfdd}| |_|S )Nargsr%   c                  W   s   dS Nr   r(   )rD   r(   r(   r)   func1n      z;create_fx_from_snodes.<locals>.get_fake_func.<locals>.func1)r   r8   __name__)r#   rF   r(   r(   r)   get_fake_funcm   s   z,create_fx_from_snodes.<locals>.get_fake_func
FusionMeta)r5   snodetypeNZexterntemplateZnopZcomputeZfusedzUnknown node typeZoriginal_atenz: 
get_devicedevicer(   rD   kwargsrK   c                    s8   t | trt fdd| jD S tdd |  D S )Nc                 3   s    | ]} |V  qd S Nr(   ).0x	in_outputr(   r)   	<genexpr>   s    z;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>c                 s   s(    | ]}|j D ]	}t|jtV  qqd S rR   )Zusersr6   r>   r   )rS   bufuserr(   r(   r)   rW      s    
)r6   r   anyrB   get_outputs)rK   rU   r(   r)   rV      s
   
z(create_fx_from_snodes.<locals>.in_outputr.   r   r   )'strr   r8   collections
namedtupletorchr   GraphZ	is_externZis_templater6   r   r   r5   r   RuntimeError	_inductorutilsZget_fused_kernel_name	get_nodeshasattrrN   Zcall_functionr   r   boolappendget_namer#   r4   r[   Zread_writesZreadsZinserting_beforeplaceholderr7   rD   outputlen)rB   rI   rJ   Zbuf_to_fx_nodeZnode_to_fx_noder<   Z
first_nodeZoutputsr5   rK   Z	node_typeZ
fused_name	func_nameZ	node_funcrQ   Zfx_noder#   rX   depsnew_argsdepZdep_noder(   rU   r)   r3   h   s   




	



r3   node_name_to_buf_nameparent_buf_name	n_originsc           
      C   s   | d u rd S | D ]S}|  }| }|d ur)t|dkr)t|||d u r%|n| qt|dkr5|d |ks7J |j}|d u sC|jd u rDq|jD ]}|j}	|	|vrZ|d u rV|n|||	< qGqd S )Nr   r   )rh   rd   rk   $update_orig_fx_node_name_to_buf_namer>   Zoriginsr#   )
r+   rp   rq   rr   r>   buf_nameZchildren_nodesZir_nodeorigin	node_namer(   r(   r)   rs      s0   
rs   c                 C   sp   i }|   D ]\}}||vrt|g||< q|| | qi }|   D ]\}}t|| }t||||< q$|S rR   )itemsr   addrk   r"   )rp   Zbuf_name_to_n_noderv   rt   node_name_to_buf_metaZn_noder(   r(   r)   get_node_name_to_buf_meta   s   rz   r@   c                 C   sP   i }t || |du rdS t|}| jjD ]}|j|v r%||j|jd< qdS )rC   NZbuf_meta)rs   rz   r<   r+   r#   getr4   )r@   rB   rp   ry   r>   r(   r(   r)   annotate_orig_fx_with_snodes   s   

r|   c               	   c   s    t jdddk} dd l}t|jjj}t	
 }| s,z
d V  W |  d S |  w |tdd t jt d}t j|dd tt j|d	t  d
}|tj |td || zd V  W || |  d S || |  w )NZTORCH_COMPILE_DEBUG01r   z*functorch.compile.config.debug_partitionerTtorchinductor)exist_okZaot_z
_debug.log3[%(filename)s:%(lineno)d %(levelname)s] %(message)s)osenvironr{   Ztorch._functorch.aot_autogradlogging	getLoggerZ
_functorchZaot_autogradrH   
contextlib	ExitStackcloseenter_contextr   pathjoinr   makedirsFileHandlerr
   setLevelDEBUGsetFormatter	Formatter
addHandlerremoveHandler)Zcompile_debugr_   r1   stackr   fhr(   r(   r)   enable_aot_logging  s>   




r    _inductor_post_to_pre_grad_nodes_pre_grad_graph_idc                   @   sD  e Zd ZU e Zi Zeee	e f e
d< ededee fddZd*ddZd	eddfd
dZ	d+dededededee f
ddZej	d+dededededeee  f
ddZdedefddZd*ddZd*ddZdededdfddZdeee  d ee d!ee ddfd"d#Zd*d$d%Zd&edee d'  fd(d)Z!dS ),DebugContext._inductor_triton_kernel_to_post_grad_node_infofolder_namer%   c                 C   sV   t jjpt }tjD ]}tj|d|  d| }tj	|s(t
| |  S q
d S )Nr   .)r   r=   	debug_dirr   r   _counterr   r   r   existsr   )r   r   ndirnamer(   r(   r)   create_debug_dirE  s   

zDebugContext.create_debug_dirNc                 C   s   d | _ d | _t | _d S rR   )_prof_pathr   r   _stack)selfr(   r(   r)   __init__S  s   zDebugContext.__init__new_pathc                 C   s   | j sd S |dsJ |ddlm} z.|| d tj|r(t| t	| j | W d    W d S 1 s;w   Y  W d S  t
yT   td| j | Y d S w )Nz.debugr   )FileLockz.lockz(Failed to copy debug files from %s to %s)r   endswithfilelockr   r   r   r   r&   rmtreecopytreeOSErrorr1   r2   )r   r   r   r(   r(   r)   copyX  s   
&
zDebugContext.copywfilename
write_moderD   rQ   c                 O   s.   | j sJ ttj| j ||g|R i |S rR   r   openr   r   r   )r   r   r   rD   rQ   r(   r(   r)   fopenh  s   
$zDebugContext.fopenc                 o   s\    | j sJ ttj| j ||g|R i |}|V  W d    d S 1 s'w   Y  d S rR   r   )r   r   r   rD   rQ   fr(   r(   r)   fopen_contextr  s
   
&"zDebugContext.fopen_contextsuffixc                 C   s   | j sJ tj| j |S rR   )r   r   r   r   )r   r   r(   r(   r)   r   ~  s   
zDebugContext.filenamec                 C   s   t jjd urJdd l}| jsJ tj| jtj| j d}|	|d}|j
| jtj| jd W d    n1 s=w   Y  t j| d S d S )Nr   z.tar.gzzw:gz)arcname)r   r=   
upload_tartarfiler   r   r   r   basenamer   rx   )r   r   Ztar_filetarr(   r(   r)   r     s   
zDebugContext.upload_tarc                    s   t jr#td  j} tj dtdd f fdd}| j	|| | j
t|  t jjs2d S | t | _t jjrD| dtj t jjrQ| dtj d S d S )Nztorch._dynamolevelr%   c                    s     |  d S rR   )r   )r   r1   r(   r)   reset_log_level  s   z/DebugContext.__enter__.<locals>.reset_log_levelz	debug.logzinfo.log)r   debugr   r   r   r   r   r   r   callbackr   r   Zset_debug_handlerr=   enabledr   r
   r   Z	debug_log_setup_log_captureZinfo_logINFO)r   Z
prev_levelr   r(   r   r)   	__enter__  s   
zDebugContext.__enter__r   c                 C   sp   t d}| j| |}t |}|| |t 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   r1   fdchr(   r(   r)   r     s   



zDebugContext._setup_log_captureexc_typeexc_valexc_tbc                 C   sF   | j r| j   |   | jr|   tdt | j | j	  d S )Nz%s debug trace: %s)
r   disable_save_profile_datar   r   r1   r2   r   r   r   )r   r   r   r   r(   r(   r)   __exit__  s   
zDebugContext.__exit__c                 C   s   | j sJ | j | d | d)}tj| j |d}|  |d |d |d |d W d    d S 1 s?w   Y  d S )Nzcompile.profzcompile.stats)streamZcumtimed   Ztottime)	r   Z
dump_statsr   r   pstatsZStatsZ
strip_dirsZ
sort_statsZprint_stats)r   r   statsr(   r(   r)   r     s   



"zDebugContext._save_profile_datar#   ).Nc                 C   sb   t jjr$tt j|r$ztt| |W S  ty#   tjddd Y d S w dtdtdd fdd}|S )	Nz Ignoring exception in debug codeT)exc_inforD   rQ   r%   c                  _   s   d S rR   r(   rP   r(   r(   r)   ignored  rG   z)DebugContext.__getattr__.<locals>.ignored)	r   r=   r   getattrDebugFormatter	Exceptionr1   r2   r   )r   r#   r   r(   r(   r)   __getattr__  s   zDebugContext.__getattr__)r%   N)r   )"rH   
__module____qualname__	itertoolscountr   r   dictr\   list__annotations__staticmethodr   r   r   r   r   r   r   r   contextmanagerr   r   r   r   r   r8   r   rL   BaseExceptionr   r   r   r   r(   r(   r(   r)   r   ?  sj   
 









r   c                   @   sF  e Zd ZdeddfddZdejjdeej	 ddfdd	Z
dejjdeej	 ddfd
dZdeddfddZdeddfddZededefddZdeddfddZdejjdeddfddZd(dededdfddZ	d)dedeeeee f eeef f fddZded eej d!ed"ef d#ed$ed%ee ddfd&d'ZdS )*r   handlerr%   Nc                 C   s"   |j | _ |j| _|j| _|| _d S rR   )r   r   r   r   )r   r   r(   r(   r)   r     s   
zDebugFormatter.__init__r@   inputsc              
   C   s   |  dH}d }tjjjjrtjj|}t	j
|j}tjjjj}tjjddd t|||d||d W d    n1 sAw   Y  W d    n1 sPw   Y  |  d}||jdd W d    d S 1 sow   Y  d S )Nzfx_graph_runnable.pyF)ztrace.enabledztrace.save_real_tensorsZinductor)save_dirstable_hashzfx_graph_readable.pyZprint_output)r   r_   rb   r   r=   Zsave_real_tensors_subclassesZ
fake_utilsZtry_convert_fake_to_realr   r   r   r#   r   r   writeprint_readable)r   r@   r   r   r   r   r(   r(   r)   fx_graph  s.   "zDebugFormatter.fx_graphc                 C   sB   |  d}||jdd W d    d S 1 sw   Y  d S )Nzfx_graph_transformed.pyFr   )r   r   r   )r   r@   r   r   r(   r(   r)   fx_graph_transformed  s   "z#DebugFormatter.fx_graph_transformedr+   c                 C   @   |  d}|| | W d    d S 1 sw   Y  d S )Nzir_pre_fusion.txtr   r   	_write_irr   r+   r   r(   r(   r)   r         "zDebugFormatter.ir_pre_fusionc                 C   r   )Nzir_post_fusion.txtr   r   r(   r(   r)   r!     r   zDebugFormatter.ir_post_fusionc                 C   s2   t  }| D ]}||  |d q| S )Nz


)ioStringIOr   Z	debug_strgetvalue)r+   rX   r>   r(   r(   r)   r     s
   zDebugFormatter._write_irc                 C   s   t || dd d S )Nzgraph_diagram.svg)r-   )rA   r   )r   r+   r(   r(   r)   graph_diagram  s   zDebugFormatter.graph_diagramc                 C   s,   t || t|| ddtdtjjd d S )Nzorig_fx_graph_diagram.svgFT)r-   r/   progZparse_stack_tracer0   )r|   r	   r   GRAPHVIZ_COMMAND_SCALABLEr   r=   r0   )r   r@   r+   r(   r(   r)   draw_orig_fx_graph  s   

z!DebugFormatter.draw_orig_fx_graphpyr   	extensionc                 C   s   t || d|  d S )Nzoutput_code.)r&   r   r   )r   r   r   r(   r(   r)   output_code-  s   zDebugFormatter.output_code1inductor_generated_kernel_to_post_grad_nodes.jsonc                 C   s   i }|  |d}td|j tj}t|| W d    n1 s#w   Y  i }trQ|  dd}t	tt
|}t|| W d    ||fS 1 sLw   Y  ||fS )Nr   z/Writing provenance tracing debugging info to %sz/inductor_provenance_tracking_node_mappings.json)r   r1   infor#   r   r   jsondumpr   create_node_mappingr   )r   r   Z
debug_infor   Znode_mappingr(   r(   r)   1log_inductor_triton_kernel_to_post_grad_node_info0  s(   
z@DebugFormatter.log_inductor_triton_kernel_to_post_grad_node_infor#   input_nodestimingsZChoiceCallerelapseprecompile_elapseprescreening_elapsec                    s   ddl m  dt jdtttf f fdd|tj tj fdd|D |||d	}| j	d
ddd,}|
 D ]\}	}
t|	 }|| |
|d< t|| |d q;W d    d S 1 sew   Y  d S )Nr   )FixedLayoutr>   r%   c                    s  t | dr	| j}nd}|t| jd}z\|  }t| rhd}zt|j}W n tyE   zt	j
jj|jdd}W n	 tyB   Y nw Y nw  |j|jg t	j
j|jg t	j
j|j|d}t||d< nt||d< W n	 tyx   Y nw z
t|  |d< W n	 ty   Y nw z
t|  |d	< W n	 ty   Y nw ztt	j
j|  |d
< W n	 ty   Y nw ztt	j
j|  |d< W n	 ty   Y nw ztt	j
j|  |d< W n	 ty   Y nw t | drt| jtjr| j|d< |S )Nr#    )r#   rL   r   )fallback)r:   sizestrideoffsetlayoutr:   rO   r  r  Znumelr9   )re   r#   rL   rH   Zget_output_specr6   r8   r  r   r   r<   ZsizevarsZ	size_hintrO   r:   Z
size_hintsr  r  r\   Z	get_dtyperN   Z
get_strideget_sizeZ	get_numelr9   r   IRNode)r>   rv   Z	node_infor  r  Zstatic_layoutr	  build_node_infor(   r)   r  N  s   


z>DebugFormatter.log_autotuning_results.<locals>.build_node_infoc                    s   g | ]} |qS r(   r(   )rS   r>   )r  r(   r)   
<listcomp>      z9DebugFormatter.log_autotuning_results.<locals>.<listcomp>)Zop_nameZcuda_device_nameZcuda_device_countr  Zautotuning_timeZprecompile_timeZprescreening_timezautotuning_result_json_list.txtatzutf-8)encodingZbenchmark_result
)r   r	  r  r   r\   r_   cudaZget_device_nameZdevice_countr   rw   	info_dictupdater   r  r   )r   r#   r  r  r  r  r  Zgeneral_propertiesr   Zcallertimer  r(   r  r)   log_autotuning_resultsC  s,   	"=	
"z%DebugFormatter.log_autotuning_results)r   )r   )rH   r   r   r   r   r_   r   r   r   Tensorr   r   SchedulerNodeListr    r!   r   r\   r   r   r   r   r7   r   r   r  r   r  floatr   r  r(   r(   r(   r)   r     sd    




r   c                 C   .   t tjrt dt|  tj	|  d S )NzBEFORE FUSION
%s)
ir_pre_fusion_logisEnabledForr   r   r   r   r   r   r   r    r+   r(   r(   r)   log_ir_pre_fusion     r%  c                 C   r!  )NzAFTER FUSION
%s)
ir_post_fusion_logr#  r   r   r   r   r   r   r   r!   r$  r(   r(   r)   log_ir_post_fusion  r&  r(  c                   @   s    e Zd ZU eed< ejed< dS )TensorMetadataHoldertensor_metadatarO   N)rH   r   r   r   r   r_   rO   r(   r(   r(   r)   r)    s   
 r)  pre_grad_graph_idpost_to_pre_grad_nodes_jsontriton_kernel_to_post_grad_jsonc              
      s  i i i i d}t d t|tst d |S t|ts$t d |S t| ts0t d |S tt}tt}tt}z|	 D ]\ }t|t
sWt d |  W S |D ]	}||   qYqDdtttf dtfd	d
}	|	 D ]\ }t|t
st d |  W S |D ]q}
|	|
s|    W S |
d| kr||
d    |  |
d   fdd|
dg D }|r| \}|	|s|    W S |d| kr||d   | |d  |fdd|dg D  |sqqudtttf ddfdd}|| || || ||||dW S  tyQ } z't d| t d| t d| t d|  t t  |W  Y d}~S d}~ww )zCreate bidirectional mappings between:

    - pre_grad graph nodes and post_grad graph code nodes, and vice versa
    - triton kernel name and post_grad graph code nodes, and vice versa
    )Z	preToPostZ	postToPreZcppCodeToPostZpostToCppCodez.Creating node mappings for provenance trackingzCProvenance tacking error: post_to_pre_grad_nodes_json is not a dictzGProvenance tacking error: triton_kernel_to_post_grad_json is not a dictz9Provenance tacking error: pre_grad_graph_id is not an intzMProvenance tacking error: triton_kernel_to_post_grad_json value is not a listr>   r%   c                 S   sB   t | tstd dS d| vsd| vsd| vrtd dS dS )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)r6   r   r1   error)r>   r(   r(   r)   check_format  s   
z)create_node_mapping.<locals>.check_formatzIProvenance tacking error: post_to_pre_grad_nodes_json value is not a listr.  r#   c                    s   g | ]}| fqS r(   r(   rS   r   )	outer_keyr(   r)   r    r  z'create_node_mapping.<locals>.<listcomp>r/  c                 3   s    | ]}| fV  qd S rR   r(   r2  )
parent_keyr(   r)   rW     s    
z&create_node_mapping.<locals>.<genexpr>dNc                 S   s&   | D ]
}t | | | |< qt| } d S rR   )r   r   )r5  keyr(   r(   r)   convert_sets_to_lists  s   z2create_node_mapping.<locals>.convert_sets_to_listsz+Unexpected error in create_node_mapping: %sz post_to_pre_grad_nodes_json:  %sz$triton_kernel_to_post_grad_json:  %szpre_grad_graph_id:  %s)r1   r   r6   r   r0  r8   r]   defaultdictr   rw   r   rx   r\   r   rf   r{   popextendr   	traceback
format_exc)r+  r,  r-  Zempty_returnZpre_to_postZpost_to_preZpost_to_cpp_codeZ
node_arrayZ	curr_noder1  r>   r   Zcurrent_noder7  er(   )r3  r4  r)   r    s   













r  rD   rQ   c            
      O   s   d}t j|st | dtdtfdd}t|| |f\}}d}| d| dtt d	}t|d
}t	
||f| W d   n1 sFw   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_argsrT   r%   c                 S   s    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.
        )r6   r_   r  r)  r   rO   rT   r(   r(   r)   handle_tensor6  s   z5save_args_for_compile_fx_inner.<locals>.handle_tensor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  r1   r#  r   r   r;   )
rD   rQ   folderr?  Zargs_to_saveZkwargs_to_savefn_namer   r   messager(   r(   r)   save_args_for_compile_fx_inner+  s$   
rK  r   c              	   C   s   ddl m} t| d}t|\}}W d    n1 sw   Y  dtdtfdd}tjjdd	}|6 t	
d
d t|||f\}}||i |W  d    W  d    S 1 s]w   Y  W d    d S 1 smw   Y  d S )Nr   )r@  rbrT   r%   c                 S   s0   t | trtjj| jj| jj| jj	| j
S | S rR   )r6   r)  r_   Z_dynamoZtestingZrand_stridedr*  shaper  r:   rO   r>  r(   r(   r)   r?  _  s   
z9load_args_and_run_compile_fx_inner.<locals>.handle_tensorT)Zallow_non_fake_inputsZ	save_argsF)torch._inductor.compile_fxr@  r   rG  loadr   r_   r   ZFakeTensorModer   r   r   )r   r@  r   rD   rQ   r?  Z	fake_moder(   r(   r)   "load_args_and_run_compile_fx_innerY  s   RrP  )package_pathfunc.exported_programinductor_configsrQ  c             
   C   s  ddl m} ddlm} ddlm} ddlm} |jj	}|
 }	t|	tjjs)J |j\}
}zY|r>|jjdkr>||d|d |r}|jjd	kr}t|	}t|j}t|}|||d |d
 |d\}}t|}tjj||dd}| |
 |||ddd | |	|
||||dW S  |y } z||dd|d td |d }~w ty } z|rd}|jjd
krd}||d||d |d }~ww )Nr   )AccuracyError)dump_to_minify)r   )_aoti_flatten_inputs   aot_inductor)options   r   F)strictTZaccuracy)rT  rQ  load_and_runZcheck_accuracy)rT  rQ  r]  Zaot_inductor_accuracyZminify)commandrZ  zAccuracy failedrun)Ztorch._dynamo.debug_utilsrU  Ztorch._dynamo.repro.aotirV  Ztorch._inductorr   rN  rW  rY  Zdump_aoti_minifiermoduler6   r_   r   r   Zexample_inputsZrepro_levelr   deepcopyr7   exportr1   r2   r   )rR  rS  rT  rQ  rU  rV  r   rW  Zuse_minifierr@   rD   rQ   Zgm_copyZexample_inputs_copyconfig_copyZflat_example_inputsZtuple_inputsZflattened_epr=  r^  r(   r(   r)   aot_inductor_minifier_wrapperp  s   



	
rd  )FNrE   )fr]   r   r   dataclasses	functoolsr   r   r   r   r   Zos.pathrG  r   r&   r;  collections.abcr   typingr   r   r   r   r   Zunittest.mockr   r_   Zfunctorch.compiler	   r
   r   r   Ztorch._dynamo.repro.after_aotr   Ztorch._dynamo.utilsr   Ztorch._loggingr   Ztorch.fx.graph_moduler   Ztorch.fx.passes.shape_propr   r   Ztorch.fx.passes.tools_commonr   Ztorch.typesr   Ztorch.utils._ordered_setr   Ztorch.utils._pytreer   r
  r   r   Z	schedulerr   r   r   r   r   Zvirtualizedr   r   rH   r1   r"  r'  r   r  r^   r"   r   cacherf   r*   r\   rA   r`   r3   r   r8   rs   rz   r|   r   r   r   r   r   r   r   r%  r(  	dataclassr)  r   rF  r  rK  rP  rb  ZExportedProgramrd  r(   r(   r(   r)   <module>   s   
 



.e

#



+   A


v.

