
    Wjk                     Z   U 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 d dlm	Z	 d dlm
Z
mZmZ d dlZd dl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mZmZmZmZmZmZ d d
lm Z   ej!        e"          Z#d Z$d Z%deej&        j'        ej(        j)        f         dee
         de*ej+        e,d         e
eej-                 f         fdZ.d Z/d Z0d Z1dej2        j3        fdZ4d Z5d@de6de6de6fdZ7de6de6fdZ8d Z9ej:        d ej;        dej<        dej=        d ej>        d!ej?        d"ej@        d#ejA        d$ejB        d%ejC        d&ejD        d'ejE        d(ejF        d)ejG        d*ejH        d+iZId, eIJ                                D             ZKd- ZLe jM        e jN        ejO        ejP        ejQ        ejR        ejS        eLeTejU        jV        jW        ejU        jV        jX        ejU        jV        jY        ejU        jV        jZ        d.Z[e\e6ed/e
f         f         e]d0<   d1 Z^d2 Z_d3ej        j+        de*e\ej        j`        eae6         f         e\e6e6f         f         fd4Zbd5e\e6e6f         d6ej        jc        de6fd7Zdd6ej        jc        fd8Ze G d9 d:          Zf G d; d<ef          Zge	d=             Zh G d> d?          ZidS )A    N)CallableSequence)contextmanager)AnyOptionalUnion)_C)'replace_quantized_ops_with_standard_ops)_tree_map_with_pathDim)ExportedProgram)ConstantArgumentCustomObjArgument	InputKind	InputSpec
OutputKind
OutputSpecTensorArgument)subgraph_rewriterc                 X   g }t          |                                 |          D ]\  }}dt          |                                          v rEt          j                            |          \  }}|                    t          |                     m|                    |d u           |S )NPackedParams)	zipinputsstrtypetorchjit_flattenappendlen)method_graphargs_paramsparam_count_listinput_arg_params_in_vars_s          \/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/_export/converter.py_get_param_count_listr)   "   s    "<#6#6#8#8+FF = =S////++K88JGQ##CLL1111##Kt$;<<<<    c                    t           j                            |                                           }t          j                    }t          j        d           t           j                            | |ddd          \  }}}t          j        |           |t           j                            |                                           k    rt          d          ||fS )NFT)strict_force_outplace_return_inputs_stateszXstate_dict changed after running the tracer; something weird is happening in your model!)r   r   _unique_state_dictkeysis_autocast_cache_enabledset_autocast_cache_enabled_get_trace_graphRuntimeError)modelargsorig_state_dict_keysprev_autocast_cache_enabledtrace_graph	torch_out_inputs_statess          r(   _trace_and_get_graph_from_modelr<   .   s     !977>>CCEE
 #("A"C"C	$U+++-2Y-G-G" .H . .*KN 
$%@AAAuy;;EBBGGIIII:
 
 	

 	!!r*   r5   r6   returnz	_C.IValuec                 D   t          | t          j        j        t          j        j        f          rt          t          j                            t          |                    d                   }d }t          | t          j        j                  r)	 | j        j        }n"# t          $ r}t          d          |d }~ww xY wt          j        |           t          j        t          j        t          j        | j                  d          }t          j        |          \  }}|                    d          j        }	t          |          t          |          z   }
t'          |	|
          }t          j                            |
          \  }}t          j        |	t          |          |dd          }||||fS g }| j        }t          j        |           t'          ||          }t          j        |||dd          }|||d fS t+          | |          \  }}t          j        |           t          j                            |           }t1          |                                          }t1          |                                          }t7          |          t7          |          z
  }t1          |                                          }t;          |          D ])\  }}||k    r|                    |||z
                      *t          j        |           |||d fS )Nr   z('forward' method must be a script methodT)preserveParametersforwardF)
isinstancer   r   ScriptFunctionScriptModuletupler   r@   graphAttributeErrorr4   r	   $_jit_pass_onnx_function_substitution_freeze_moduletypingcast_c_jit_onnx_list_model_parameters_get_methodr)   "_propagate_and_assign_input_shapesr<   _jit_pass_onnx_lintr/   listvaluesr   r    r0   	enumeratesetDebugName)r5   r6   flattened_argsr:   rE   efreezed_modulemoduleparamsr!   r"   r#   r&   r'   
state_dictgraph_inputsuser_input_numparam_namesiinps                       r(   _create_jit_graphr_   J   s    %%)2EI4JKLL .uy11%++>>qABB	eUY344 	4V+! V V V"#MNNTUUV3E:::.BOUX664  N  ?OONFF!--i88>L++f5K4\;OO++K88JGQ9eGnn.>u E &)V33 
/6660==5>#3UE
 
 fi--6udCCE95!!!--e44J*##%%&&F''L&&Z8Nz(())KL)) > >3[^);<===+E222&)T))s   B! !
C +B;;C c                     | |z   S N )abs     r(   list_addre   |   s    q5Lr*   c                     | |gz   S ra   rb   )	containerelements     r(   list_appendri      s    y  r*   c                 H    |d|         }||d         } | g |||R i |S )z
    subgraph: GraphModule from sub-block.
    iter_idx: The index of interaction.
    len_loop_local_arguments: The number of loop local arguments in args.
    Nrb   )subgraphiter_idxlen_loop_local_argumentsr6   kwargsloop_local_argsglobal_argss          r(   execute_subgraph_from_prim_looprq      sP     4445O
 /001K8G[G(G_GGGGGGr*   gmc                 >    d }d }t          j        | ||           d S )Nc                 L   t           j        j        j                            | |          }t           j        j                            |          }t           j        j        j                            ||d          }t           j        j        j        	                    |          }|S )Ntrunc)rounding_mode)
r   opsatensym_sizeintscalar_tensordivScalar_modeIntTensor)imdimscalesym_size_intr{   div_scalar_mode
int_tensors          r(   patternz.inplace_optimize_sym_size_div.<locals>.pattern   s    y~.222s;;	44\BB).,885 9 
 
 Y^'..??
r*   c                 `    t           j        j        j                            | |          }||z  S ra   )r   rw   rx   ry   rz   )r   r   r   r   s       r(   replacementz2inplace_optimize_sym_size_div.<locals>.replacement   s)    y~.222s;;u$$r*   )r   replace_pattern)rr   r   r   s      r(   inplace_optimize_sym_size_divr      s=      % % % %b';?????r*   c                     t          |           dk    rt          d          | d                                         rdS dS )Nr   zEmpty argument name for codegenFT)r    r4   isdigitnames    r(   is_valid_for_codegenr      s@    
4yyA~~<===Aw u4r*   renamer   prefixc                 ^    |                      dd          } t          |           r| S | d|  S )N.r'   )replacer   )r   r   s     r(   normalize_namer      s>    <<S!!DD!! tr*   c                 \    |                      d          }dd                    |          z   S )zprim::If -> convert_prim_If::convert_r'   )splitjoin)r   	name_lists     r(   ir_name_to_func_namer      s*    

4  I++++r*   c                 Z    |r|                      |          S |                     |          S ra   )get_attrplaceholder)fx_graphr   is_top_level_graphs      r(   #get_node_as_placeholder_or_get_attrr      s2     '  &&&%%%r*                           	   
               c                     i | ]\  }}||	S rb   rb   ).0keyvalues      r(   
<dictcomp>r      s    RRRzsEsRRRr*   c                 `    | j         }|t          vrt          d|           t          |         S )z
    prim::dtype has the signature "Tensor a) -> int", where it gets the dtype of
    the tensor and returns the integer corresponding to this dtype based on the
    enum in ScalarType.h
    zUnsupported dtype )dtype_TORCH_DTYPE_TO_ENUMr4   )tensorr   s     r(   get_dtype_as_intr      s9     LE(((777888&&r*   )z	prim::maxz	prim::minzprim::TupleIndexzaten::__is__zaten::__isnot__zaten::__not__zaten::__contains__zprim::dtypez	aten::lenzaten::numelz
aten::sizezaten::storage_offsetzaten::stride.kind_to_standard_operatorsc                     |                                                                  |                                                                 }}|                     d          }|||fS )Nr   )input	debugNameoutputs)nodeirv_parent_nameirv_name	attr_names       r(   &get_ir_value_parent_name_and_attr_namer      sO     $

 6 6 8 8$++--:Q:Q:S:SXOvI_i//r*   c                     g }| |v r'|                     ||                     ||          } | |v 'd                    t          |                    S Nr   )r   r   reversed)irref_mapname_mapr   s       r(   construct_fqnr     sX    I
--"&&&R[ -- 88HY''(((r*   rE   c                 j    i i i fdfd |             |            fS )a  
    Perform two passes to get a mapping of blocks to a set of FQNs of its lifted attributes.
    When a graph has control flow, the graph will be divided into multiple blocks. We want to convert
    each block to a graph which will be passed into torch.cond. A restriction for torch.cond is that model
    parameters/buffers are expected to be lifted as inputs to the subgraphs. Before converting the model,
    we will run this pass which will:
        1. Figure out which params/buffers are used within blocks through tracing the GetAttr calls.
        2. Process the graph bottom up to find the lifted attributes of each block by taking the union
        of the attributes used in the current block, and the lifted attributes of all its child blocks.

    Returns:
        A mapping of blocks to a set of FQNs of its lifted attributes, and a
        mapping of node names to the FQNs of its lifted attributes.
    c                     |                                  D ]Y}|                                dk    rt          |          \  }}}||<   ||<   |                                D ]} |           ZdS )zI
        First DFS path to construct reference map and name map.
        prim::GetAttrN)nodeskindr   blocks)	entryr   r   r   r   block_dfs_get_attr_dependencynode_to_attr_namenode_to_parent_maps	         r(   r   z;get_block_to_lifted_attrs.<locals>._dfs_get_attr_dependency*  s     KKMM 
	0 
	0Dyy{{o--
 ;4@@	#/>"8,.7!(+ 0 0((////0
	0 
	0r*   c                    t                      }|                                 D ]}|                                D ] }|                     |                    }!|                                dk    rm|                                                                }|t                                                    vr$|                    t          |                     t          | t          j        j                  s|| <   |S )z|
        Walk the graph in a bottom-up fashion to build the expected to be
        lifted arguments for each block.
        r   )setr   r   unionr   r   r   rQ   addr   rA   r   r	   Graph)	r   	argumentsr   r   r   _map_blocks_to_lifted_attrsblocks_to_lifted_attrsr   r   s	        r(   r   z>get_block_to_lifted_attrs.<locals>._map_blocks_to_lifted_attrs:  s    
 "ee	KKMM 	 	D P P%OO,G,G,N,NOO		yy{{o--;;==2244 3'9'@'@'B'B#C#CCCMM%h0BDUVV   %00 	6,5"5)r*   rb   )rE   r   r   r   r   r   s    @@@@@r(   get_block_to_lifted_attrsr   	  s    & >@ *, )+0 0 0 0 0 0 0        2 U###&&&!#444r*   name_to_attribute_fqnr   c                     dt           f fd}|                                dk    r4t          |                                                                          }nR|                                dk    r'|                                                                }nt          d| d          |                    d          } ||          }|r| d| n|}|S )Nr   c                 B    | v r|          S t          d|  d          Nz
Attribute 
 not found)
ValueError)r   r   s    r(   r   z0get_attribute_fqn_from_ts_node.<locals>.get_attr\  s4    ((((..:$:::;;;r*   prim::SetAttrr   z7Unexpected node kind when getting attribute fqn. node:  r   )r   r   nextr   r   r   r4   r   )r   r   r   
input_namer   root_attr_nameattr_fqns   `      r(   get_attribute_fqn_from_ts_noder   Y  s    <s < < < < < < yy{{o%%$++--((2244

		'	'ZZ\\++--

MdMMM
 
 	
 vIXj))N2@O...9...iHOr*   c                 "   |                                  }|dk    rt          d|            t          j                            |          }t          |j                                      d          \  }}|j        }	 t          t          j
        |          }t          ||          }|rt          ||          }n|j        }nL# t          $ r?}	t          d|                                  d|                                             |	d }	~	ww xY w|S )N(no schema)zgot empty schema for r   zUnable to find operator z with schema )schemaAssertionErrorr   r	   parse_schemar   r   r   overload_namegetattrrw   default	Exceptionr4   r   )
r   
schema_strr   nsop_nameoverrideop_overload_modop_overload_packetop_overloadrU   s
             r(   get_op_overloadr   r  s   J]"";T;;<<<&+h&;&;J&G&GFfk""((..KB#H
!%)R00$_g>> 	5!"4h??KK,4K   Ptyy{{PPPP
 
	
 s   >AC 
D:DDc                   D   e Zd Zdeej        j        ej        j        f         dee	ej
        f         dee	ej
        f         deej        j        ee	         f         dee	ef         dee	ef         dee	e	f         fdZd	 Zd
ej        j        dee	         fdZd Zd Zde	fdZd
ej        j        fdZdej        j        fdZd Zdej        j        fdZd Zd
ej        j        fdZd
ej        j        fdZd
ej        j        fdZd
ej        j        fdZ d
ej        j        fdZ!d
ej        j        fdZ"d
ej        j        fdZ#d
ej        j        fdZ$d
ej        j        fdZ%d
ej        j        fd Z&d
ej        j        fd!Z'd
ej        j        fd"Z(d
ej        j        fd#Z)d
ej        j        fd$Z*d
ej        j        fd%Z+d
ej        j        fd&Z,d
ej        j        fd'Z-d
ej        j        fd(Z.d
ej        j        fd)Z/d
ej        j        fd*Z0d
ej        j        fd+Z1d
ej        j        fd,Z2d
ej        j        fd-Z3d
ej        j        fd.Z4d/ Z5d
ej        j        fd0Z6d1ej        j        fd2Z7d
ej        j        fd3Z8d
ej        j        fd4Z9d
ej        j        fd5Z:d
ej        j        fd6Z;d
ej        j        fd7Z<d
ej        j        fd8Z=d
ej        j        fd9Z>d
ej        j        fd:Z?d
ej        j        fd;Z@d
ej        j        fd<ZAd= ZBd>S )?TS2FXGraphConverterts_graphname_to_paramname_to_bufferr   name_to_non_tensor_attributename_to_constantr   c                 v    | _         | _        | _        t          j                                         _        g  _        g  _        i  _	        | _
        | _        i  _        | _        i  _        | _        t           D ]%}t#          |          }	t%           |	 fd           &t'                       _        d S )Nc                 .                         |           S ra   )_convert_standard_operators)r   selfs    r(   <lambda>z.TS2FXGraphConverter.__init__.<locals>.<lambda>  s    T==dCC r*   )r  r  r  r   fxr   r   input_specsoutput_specsname_to_noder  r   !name_to_non_tensor_attribute_noder  	subgraphsr   r   r   setattrr   #name_update_from_subblock_to_parent)
r	  r  r  r  r   r  r  r   khandler_func_names
   `         r(   __init__zTS2FXGraphConverter.__init__  s     !*,(-(8(8,..0
  	
 1A 6K" BD.
 =Y):< '=# , 	 	A 4Q 7 7 !CCCC    >AUU000r*   c                     || j         v p6|| j        v p-|| j        v o$t          | j        |         t          j                  S ra   )r  r  r  rA   r   ScriptObject)r	  fqns     r(   _is_get_attr_nodez%TS2FXGraphConverter._is_get_attr_node  sR    4&& d(( t,, Ot4S95;MNN	
r*   r   r   c           
         g g }}|                                 D ]}t          || j        | j        | j        i | j        | j                  }|D ]5}t          |          }|j        	                    |          }	|	|j
        |<   6|                                }
|                     |
          }|                    | j                            |                     |                    |           ||fS ra   )r   r   r  r  r   r  r   r   r   r   r  convertadd_subgraphr   r   )r	  r   r   subgraph_nodessubgraph_convertersr   subgraph_converter	block_argnormalized_block_arg_nameplaceholder_noderk   subgraph_names               r(   _convert_block_to_subgraphz.TS2FXGraphConverter._convert_block_to_subgraph  s   .0"+[[]] 	; 	;E!4"#+%*" " ' N N	,:9,E,E)#5#>#J#J-$ $  >N"/	::)1133H --h77M!!$-"8"8"G"GHHH&&'9::::222r*   c                    t                      }|                                D ]}|                                D ]}|                                D ]_}|                                | j        v rB|                                | j        vr'|                    |                                           `|                    | 	                    |                    }|S )aW  
        Identify inputs from the innermost sub-block. This is needed
        for nested sub-blocks when the input is hidden in the nested sub-block.
        E.g., example IR of input is hidden in the nested sub-block.
        Graph[x.1]
        %1 = ...
            Block[]
                Block[x.1]
                    %2 = x.1 ...
        )
r   r   r   r   r   r  r   r   r   _identify_inputs_as_arguments)r	  r   r   r   
block_nodeblock_node_ins         r(   r&  z1TS2FXGraphConverter._identify_inputs_as_arguments  s     "ee	\\^^ 
	 
	E#kkmm 	 	
%/%6%6%8%8 A AM%//11T5FFF)3355T=WWW!m&=&=&?&?@@@%OO66zBB 			 r*   c                 J    t          | j        t          j        j                  S ra   )rA   r  r   r	   r   )r	  s    r(   r   z&TS2FXGraphConverter.is_top_level_graph  s    $-888r*   r=   c                 H    dt          | j                   }|| j        |<   |S )N	subgraph_)r    r  )r	  rk   r   s      r(   r  z TS2FXGraphConverter.add_subgraph  s*    03t~..00'tr*   c                     g }i }t          |                                |j                  D ]R\  }}|j        r|                     |          ||j        <   *|                    |                     |                     St          |          |fS ra   )r   r   r   
kwarg_onlyget_fx_value_by_ir_valuer   r   rD   )r	  r   r   r6   rn   r   
schema_args          r(   get_args_kwargsz#TS2FXGraphConverter.get_args_kwargs  s    !$T[[]]F4D!E!E 	B 	BE:$ B*.*G*G*N*Nz''D99%@@AAAAT{{F""r*   r   c                 |   |                                 }|| j        v r| j        |         }|S || j        v rLt          | j        |         t          j                  r| j                            |          S | j        |         S || j        v r | 	                    | j        |                   S t          d| d          )NzInput r   )r   r  r  rA   r   r  r   r   r   get_fx_value_by_fqnr   )r	  r   
value_name
input_nodes       r(   r.  z,TS2FXGraphConverter.get_fx_value_by_ir_value   s    __&&
****:6J4000$/
;U=OPP :}--j999(444555++D,Fz,RSSS<j<<<===r*   c                     || j         v r| j         |         }nX|| j        v r| j        |         }nA|| j        v r| j        |         }n*|| j        v r| j        |         }nt	          d| d          |S r   )r  r  r  r  r   )r	  r   fx_nodes      r(   r2  z'TS2FXGraphConverter.get_fx_value_by_fqn/  s    4$$$'-GGT***+D1GGT;;;<TBGGT6667=GG:$:::;;;r*   c                    |                                   | j                                        D ]}|                     |           |                                  t
          j                            i | j        | j	        | j
        | j        | j        | j                  }t          |           |j                                         |S ra   )convert_graph_inputsr  r   convert_nodeconvert_graph_outputsr   r  GraphModuler  r  r  r  r  r   r   rE   lint)r	  r   rr   s      r(   r  zTS2FXGraphConverter.convert<  s    !!###M'')) 	$ 	$Dd####""$$$ X!!.$ % 3	
 ' M	
 	
 	&b)))
	r*   c           
      n   | j                                         D ]}|                                }|| j        v r{t	          |          }| j                            t          t          j	        t          |          |                     t          | j        ||                                           }n|| j        v r|t	          |          }| j                            t          t          j        t          |          |d                     t          | j        ||                                           }no|| j        v rt#          | j        |         t$          j                  s*t)          dt+          | j        |                              t	          |          }| j                            t          t          j        t/          ||          |d                     t          | j        ||                                           }nt#          |                                t$          j                  r"t	          |d	          }| j                            t          t          j        t          |          |                     | j                            |          }|| j        |<   d S )
Nr   argtargetT)r?  r@  
persistentz0Input conversion only handles ScriptObject, got )r   	class_fqnFr   )r   )r  r   r   r  r   r  r   r   r   	PARAMETERr   r   r   r   r  BUFFERr  rA   r   r  r   r   
CUSTOM_OBJr   	ClassType
USER_INPUTr   r  )r	  graph_inputr   normalized_namer6  s        r(   r8  z(TS2FXGraphConverter.convert_graph_inputsV  s   =//11 =	. =	.K((**Dt)))"0"6"6 ''!+*@@@#     >M4)@)@)B)B  ,,,"0"6"6 ''!(*@@@##'	     >M4)@)@)B)B  ...!$"7"=u?QRR (n4PTPefjPkKlKlnn   #1"6"6 ''!,-!0O    $#(  	 	 	 >M4)@)@)B)B  K,,..@@ E"0g"F"F"F ''!,*@@@#     -33ODD&-Dd##{=	. =	.r*   c                      d } fd|                                 D             } j                            |t          |                    }| j        |                                                                <   d S )Nc                 f    |                      t          j                                                  S )N)r   )tor   floatitem)ts    r(   to_float_tensorz?TS2FXGraphConverter.convert_aten_Float.<locals>.to_float_tensor  s$    44ek4**//111r*   c                 :    g | ]}                     |          S rb   r.  r   r^   r	  s     r(   
<listcomp>z:TS2FXGraphConverter.convert_aten_Float.<locals>.<listcomp>  '    PPP3D11#66PPPr*   )r   r   call_functionrD   r  r   r   )r	  r   rP  inp_listr6  s   `    r(   convert_aten_Floatz&TS2FXGraphConverter.convert_aten_Float  s    	2 	2 	2 QPPP$++--PPP---(OO
 
 8?$++--1133444r*   c                    |                      |t          j        j        j        j        j                  \  }}|D ] }|dk    rt          ||                   ||<   !t          d |D                       rt          j        nt          j	        j        fd}|
                                                                }| j                            |||          }|| j        |<   dS )z9aten::tensor creates a constant tensor ad-hoc --> GetAttrrequires_gradc              3   @   K   | ]}t          |t                    V  d S ra   )rA   rz   )r   rc   s     r(   	<genexpr>z:TS2FXGraphConverter.convert_aten_tensor.<locals>.<genexpr>  s,      44!:a%%444444r*   c                  X    d|v r|d         t           |d                  |d<    | i |S )Nr   )_TORCH_ENUM_TO_DTYPE)r6   rn   	to_tensors     r(   r@  z7TS2FXGraphConverter.convert_aten_tensor.<locals>.target  s>    &  VG_%@"6vg"Gw9d-f---r*   N)r0  r   rw   rx   r   r   _schemaboolall_refsr   r   r   rV  r  )	r	  r   r6   rn   r  r@  output_namer6  r_  s	           @r(   convert_aten_tensorz'TS2FXGraphConverter.convert_aten_tensor  s    ++D%).2G2O2WXXf 	, 	,AO## OOq	 44t44444$ELL# 		. 	. 	. 	. 	. kkmm--//---fdFCC)0+&&&r*   c                 X    t          j        dd           t           fd|                                D                       } j                            t          |          }| j        |                                	                                <   | j        |
                    d          	                                <                                    sR|d         j        dk    rC j                            |
                    d          	                                           d S d S d S )NzConverting aten::append.t, which is a inplace mutation of the list. This makes the converter non-functional: the result depends on the order of the append nodes being converter!r   
stacklevelc              3   B   K   | ]}                     |          V  d S ra   rR  rS  s     r(   r\  z:TS2FXGraphConverter.convert_aten_append.<locals>.<genexpr>  s1      QQCT22377QQQQQQr*   r   r   )warningswarnrD   r   r   rV  ri   r  r   r   inputsAtr   opr  r   )r	  r   r6   r6  s   `   r(   convert_aten_appendz'TS2FXGraphConverter.convert_aten_append  s!    	|	
 	
 	
 	
 QQQQ4;;==QQQQQ---k4@@7>$++--11334 ;B$--**44667 &&(( 	WT!WZ=-H-H488q9I9I9S9S9U9UVVVVV	W 	W-H-Hr*   c                 z   |                                                                 }d }|                    d          r|                    d          }|dk    r|                    d          }n|dk    r|                    d          }n|dk    r|                    d          }n|dk    rAd| }| j                            |          }|| j	        |<   ||
                    d          }}nC|dk    r|                    d          }n't          d|                    d                     d }|| j        |<   d S )	Nr   r]   fr   rO  lifted_tensor_ivalzUnsupported constant type: )r   r   hasAttributekindOfr]   rp  r   r   r   r  rO  rr  r   r  )r	  r   r   r   constant_kind
alias_namer6  s          r(   convert_prim_Constantz)TS2FXGraphConverter.convert_prim_Constant  sH   {{}}&&((W%% 	 KK00M##w#%%w#%%w#%%+T++  -00<<*1!$'($&&//e&((		'** !Ut{{7?S?S!U!UVVVE&+d###r*   c                      fd|                                 D             } j                            |                    d          t	          |                    }| j        |                                                                <   d S )Nc                 :    g | ]}                     |          S rb   rR  rS  s     r(   rT  z?TS2FXGraphConverter.convert_prim_CallMethod.<locals>.<listcomp>  rU  r*   r   )r   r   call_methodr   rD   r  r   r   )r	  r   rW  r6  s   `   r(   convert_prim_CallMethodz+TS2FXGraphConverter.convert_prim_CallMethod  sz    PPPP$++--PPP-++FF6NN(OO
 
 8?$++--1133444r*   c                 l   |                                                                 }|                    t          j        j                                                  rF|                                }|                                	                                }|| j
        |<   d S t          d| d          )NzUnsupported JitType (z) when get device)r   r   isSubtypeOfr   r	   
TensorTypegetdevicer   r   r  r   )r	  r   
input_typer  rd  s        r(   convert_prim_devicez'TS2FXGraphConverter.convert_prim_device  s    ZZ\\&&((
!!%("5"9"9";";<< 	T&&((F++--1133K17D!+...RZRRRSSSr*   c                    t          | j        |          }|                                                                }|| j        |<   |                                 rn|                     |          r$| j                            |          | j        |<   d S || j	        vr| j
        |         | j	        |<   | j	        |         | j        |<   d S |                     |          r| j        |         | j        |<   d S d S ra   )r   r   r   r   r   r  r   r   r  r  r  )r	  r   r   rd  s       r(   convert_prim_GetAttrz(TS2FXGraphConverter.convert_prim_GetAttr  s   1$2LdSSkkmm--//2:";/""$$ 	M%%h//  261G1G1Q1Q!+...4#III9(C :8D 261W2!+... %%h// M151B81L!+...M Mr*   c                 v   t          | j        |          }t          |                                          d         }|                     |          }|                     |          rH| j                            |          }| j                            t          j
        j        ||f           d S || j        |<   d S Nr   )r   r   rD   r   r.  r  r   r   rV  r   r   copy_r  )r	  r   r   
attr_valuets_graph_tensor_inputfx_attr_nodes         r(   convert_prim_SetAttrz(TS2FXGraphConverter.convert_prim_SetAttr  s    1$2LdSS4;;==))!,
 $ = =j I I!!(++ 	U=11(;;LM''"\3H$I     @UD28<<<r*   c                    t          |          }|                     ||j                  \  }}| j                            |||          }|                                dk    r2|                                                                }|| j        |<   d S t          |
                                          D ]J\  }}|                                }| j                            t          j        ||f          }	|	| j        |<   Kd S r  )r   r0  r`  r   rV  outputsSizer   r   r  rR   outputsoperatorgetitem)
r	  r   r@  r6   rn   r6  rd  r]   outpnext_fx_nodes
             r(   convert_call_function_opz,TS2FXGraphConverter.convert_call_function_op)  s     &&++D&.AAf---fdFCC
 ""++--1133K-4Dk***$T\\^^44 > >4"nn..#}::$wl    2>!+..> >r*   c                 0    |                      |           d S ra   _convert_prim_iteratorr	  r   s     r(   convert_prim_TupleConstructz/TS2FXGraphConverter.convert_prim_TupleConstruct>      ##D)))))r*   c                 0    |                      |           d S ra   r  r  s     r(   convert_prim_ListConstructz.TS2FXGraphConverter.convert_prim_ListConstructA  r  r*   c                       fd|                                 D             }|                                                                }| j        |<   d S )Nc                 :    g | ]}                     |          S rb   rR  rS  s     r(   rT  z>TS2FXGraphConverter._convert_prim_iterator.<locals>.<listcomp>E  s'    SSSct44S99SSSr*   )r   r   r   r  )r	  r   output_listrd  s   `   r(   r  z*TS2FXGraphConverter._convert_prim_iteratorD  sP    SSSST[[]]SSSkkmm--//)4+&&&r*   c                    i }d\  }}t          |                                          D ]V\  }}|dz  dk    r|                     |          }$|                     |          }||t          d          |||<   d\  }}W||t          d          |                                                                }|| j        |<   d S )N)NNr   r   z*DictConstruct has an empty key value pair.zGDictConstruct has an odd number of elements (violating our assumption).)rR   r   r.  r   r   r   r  )r	  r   output_dictr  vr]   r^   rd  s           r(   convert_prim_DictConstructz.TS2FXGraphConverter.convert_prim_DictConstructJ  s    1.. 
	" 
	"FAs 1uzz11#6611#669	()UVVV!"A!11=AM Y   kkmm--//)4+&&&r*   c                 0    |                      |           d S ra   _convert_prim_unpack_iteratorr  s     r(   convert_prim_ListUnpackz+TS2FXGraphConverter.convert_prim_ListUnpacka      **400000r*   c                 0    |                      |           d S ra   r  r  s     r(   convert_prim_TupleUnpackz,TS2FXGraphConverter.convert_prim_TupleUnpackd  r  r*   c                 ,   t          |                                          D ]q\  }}|                                }|                     |                                          }| j                            t          j        ||f          }|| j	        |<   rd S ra   )
rR   r  r   r.  r   r   rV  r  r  r  )r	  r   r]   r  	outp_namer^   r6  s          r(   r  z1TS2FXGraphConverter._convert_prim_unpack_iteratorg  s     00 	3 	3GAt((I//

==Cm11(2BS!HMMG+2Di((		3 	3r*   c                     t           j        j        j        j        }t           fd|                                D                       } j                            ||dt           j	        i          } j                            t           j        j        j
        j        |f          }|                                                                }| j        |<   d S )Nc              3   B   K   | ]}                     |          V  d S ra   rR  r   r   r	  s     r(   r\  z7TS2FXGraphConverter.convert_aten_Int.<locals>.<genexpr>r  1      UUeT22599UUUUUUr*   r   )r   rw   rx   _to_copyr   rD   r   r   rV  int32_local_scalar_denser   r   r  )r	  r   r@  r6   to_copy_noder6  rd  s   `      r(   convert_aten_Intz$TS2FXGraphConverter.convert_aten_Into  s    (0UUUUt{{}}UUUUU}2264'5;AWXX---IN.6
 
 kkmm--//)0+&&&r*   c                 >    t           j        j        j        }t	           fd|                                D                       } j                            ||dt           j        i          }|	                                
                                }| j        |<   d S )Nc              3   B   K   | ]}                     |          V  d S ra   rR  r  s     r(   r\  z?TS2FXGraphConverter.convert_prim_NumToTensor.<locals>.<genexpr>  r  r*   r   )r   rw   rx   r{   rD   r   r   rV  longr   r   r  r	  r   r@  r6   r6  rd  s   `     r(   convert_prim_NumToTensorz,TS2FXGraphConverter.convert_prim_NumToTensor  s     -UUUUt{{}}UUUUU---fdWej<QRRkkmm--//)0+&&&r*   c                 f    |                                                                 }d| j        |<   d S )N )r   r   r   r	  r   rd  s      r(   convert_prim_CreateObjectz-TS2FXGraphConverter.convert_prim_CreateObject  s.    kkmm--//24";///r*   c                    t           j        j        j        j        }|                     ||j                  \  }}| j                            |||          }|	                                
                                }|| j        |<   d S ra   )r   rw   rx   convolutionr   r0  r`  r   rV  r   r   r  )r	  r   r@  r6   rn   r6  rd  s          r(   convert_aten__convolutionz-TS2FXGraphConverter.convert_aten__convolution  ss     +3++D&.AAf---fdFCCkkmm--//)0+&&&r*   c                    t          |          }|j        }|                     ||          \  }}|j        dk    r|d         j        }|| j        v rt          | j        |         t          j                  r| j        |         }|	                                dk    rt          |          }| j        |                                         |d<   | j                            t          j        j        j        j        t%          |          |          }	|                                                                }
|	| j        |
<   d S |                     |           d S )NTensor_moder   )r   r`  r0  r   r   r  rA   r   r   numelrP   rN  r   rV  rw   rx   r|   r}   rD   r   r   r  r  )r	  r   r@  r   r6   rn   	arg1_nametensor_constantupdated_argsr6  rd  s              r(   convert_aten_divz$TS2FXGraphConverter.convert_aten_div  s=    &&++D&99f =00QID111j%i0%,7 71 #'"7	"B"((**a//#'::L&*&;I&F&K&K&M&MLO"m99	*6l++ G #'++--"9"9";";K5<D%k2F%%d+++++r*   c                     t           fd|                                D                       \  }} j                            t          j        ||f          }|                                                                }| j        |<   d S )Nc              3   B   K   | ]}                     |          V  d S ra   rR  r  s     r(   r\  z?TS2FXGraphConverter.convert_aten___getitem__.<locals>.<genexpr>  sB       '
 '
5:D))%00'
 '
 '
 '
 '
 '
r*   )	rD   r   r   rV  r  r  r   r   r  )r	  r   input_containerindexr6  rd  s   `     r(   convert_aten___getitem__z,TS2FXGraphConverter.convert_aten___getitem__  s    !& '
 '
 '
 '
>Bkkmm'
 '
 '
 "
 "
 ---6
 
 kkmm--//)0+&&&r*   c                    t          |          }|                     ||j                  \  }}|t          j        j        j        j        u s|t          j        j        j        j        u rEd |	                                
                                D             }d |D             }t          d |D                       }|rt          |          dk     rt          dt          |                     t          |          }d|d<   | j                            t          j        j        j        j        t#          |                    }	| j                            t          j        j        j        j        |	f          }
|	                                                                }|
| j        |<   d S |                     |           d S )Nc                     g | ]	}|j         
S rb   )user)r   uses     r(   rT  z7TS2FXGraphConverter.convert_aten_to.<locals>.<listcomp>  s    CCCs#(CCCr*   c                 \    g | ])}|                                 d k    t          |          *S )r   )r   r   )r   	user_nodes     r(   rT  z7TS2FXGraphConverter.convert_aten_to.<locals>.<listcomp>  sA       ##%%66  	**666r*   c              3   .   K   | ]}|j         j        V  d S ra   )r`  
is_mutable)r   r@  s     r(   r\  z6TS2FXGraphConverter.convert_aten_to.<locals>.<genexpr>  s8       % %.4)% % % % % %r*   r   zexpected at least 4 args, got Tr   )r   r0  r`  r   rw   rx   rL  r   
prim_dtyper   usesanyr    r   rP   r   rV  rD   cloner   r   r  r  )r	  r   r@  r6   _kwargs
user_nodesuser_targetshas_mutable_targetnew_argsr6  
clone_noderd  s               r(   convert_aten_toz#TS2FXGraphConverter.convert_aten_to  s    &&,,T6>BBg UY^&,,,%).:K:V0V0VCCdkkmm.@.@.B.BCCCJ !+  L
 "% % %8D% % % " " " t99q==()U#d)))U)UVVV::"-55IN%+U8__ 
 "]88IN(07* 
 #kkmm55771;!+.%%d+++++r*   c                    |                                 dk    rt          |                    d                                          t          j                  r[t          |                    d                                          t          j                  rt          j        j        j        j	        }n!t          d|           t          |          }|t          j        j        j        j	        u rn|                     ||j                  \  }}|                                                                }| j                            t$          |          | j        |<   d S |                     |           d S )Nr   r   r   z$unable to determined the target for )r   rA   rl  r   r   ListTyperw   rx   r   rO  r4   r   r0  r`  r   r   r   rV  re   r  r  )r	  r   r@  r6   r  rd  s         r(   convert_aten_addz$TS2FXGraphConverter.convert_aten_add  s7   ;;==M))$--**//115>BB Rza  %%''H H R +-"#P$#P#PQQQ$T**FUY^'))) !00v~FFMD'++--1133K-1]-H-HSW-X-XDk***))$/////r*   c                    t          |                                          }|d                                         | j        vrt	          d          t          |                                          }t          |                                                                          }|                                D ]}|	                                dk    r9|
                                                                |k    rt	          d          |	                                dk    r>|                                D ])}|                                |k    rt	          d          *d S )Nr   zKprim::Loop currently cannot run with dynamic value of number of iterations.r   z@prim::Loop currently cannot run with dynamic value of condition.r   )rP   r   r   r  r4   r   r   r  r   r  r   )r	  r   r   subblockcondition_output_namer  s         r(   _check_prim_loop_supportz,TS2FXGraphConverter._check_prim_loop_support  sZ   dkkmm$$ !9  (===]  
 && $X%5%5%7%7 8 8 B B D DNN$$ 	 	D  ""a''KKMM++--1FFF"V   !!Q&& LLNN  D~~''+@@@*^   A	 	r*   c           	          t          |                                          }                     |                                |d                   }d |dd          D             }                     |          }|                                D ]"}|                     j        |                   }#t          |          }                     ||          \  }}t          |          dk    rt          dt          |                     |d         }	                                 s$ j                            |	j                   _         fd||z   D             }
t          |          D ]p} j                            t           |d         |t          |          g|
R i           }|                                dk    r}t%          |                                          D ][\  }}|                                } j                            t*          j        ||dz   f           j        |<    j        |         |
|<   \t%          |	j                  D ]\  }} j                            t*          j        |||                                z   dz   f           j        |<   |                    |          } j        |         |
||                                z   |z   <   rd S )Nr   c                 6    g | ]}|                                 S rb   r   )r   r^   s     r(   rT  z9TS2FXGraphConverter.convert_prim_Loop.<locals>.<listcomp>$  s     FFFCFFFr*   r   r   zexpected 1 subgraph node, got c                 :    g | ]}                     |          S rb   r2  r   r   r	  s     r(   rT  z9TS2FXGraphConverter.convert_prim_Loop.<locals>.<listcomp>>  s7     
 
 
 $$T**
 
 
r*   )rP   r   r  r.  r&  r   r   r   r$  r    r   r   r  ranger   rV  rq   r  rR   r  r   r  r  r  r  )r	  r   r   num_iterationsloop_local_argumentsglobal_argumentsr   r  r  r  fx_block_argsrl   	loop_noder]   r  rd  r   global_argument_indexs   `                 r(   convert_prim_Loopz%TS2FXGraphConverter.convert_prim_Loop  sH   dkkmm$$%%d+++66vayAA  GF6!"":FFF==dCC [[]] 	 	E/55+E2      011.2.M.M"/
 /
++ ~!## !W#nBUBU!W!WXXX03&&(( 	8>>&J  4
 
 
 
,/??
 
 
 n-- )	 )	H33/ #1%,-- #	  
 
I !!Q&&(88 	F 	FGAt"&.."2"2K59]5P5P (%E6 6D%k2 (,'8'EM!$$ %"F   4 +/-*E*E$!D,,...2+ +!$' )9(>(>t(D(D%%d+ a$"2"2"4"447LLMM9)	 )	r*   if_nodec                     |                                 D ]@}|                                D ])}|                                dk    rt          d          *Ad S )Nr   zDuring converting prim::If to torch.cond, found prim::SetAttr op which is not supported yet. Please file an issue if you come across this error.)r   r   r   r4   )r	  r  r   r   s       r(   _check_set_attr_in_if_blockz/TS2FXGraphConverter._check_set_attr_in_if_blockm  sp    ^^%% 	 	E  99;;/11&-   2	 	r*   c                                           |           t          |                                          }t          |          dk    rt	          dt          |                                          |d                   }                     |          }|                                D ]"}|                     j	        |                   }#t          |          } 
                    ||          \  }}t          |          dk    rt	          dt          |                      fd|D             }||d         |d         t          |          f}	 j                            t          j        |	i           }
|                                dk    r2|                                                                }|
 j        |<   d S |                                dk    rlt)          |                                          D ]L\  }}|                                } j                            t,          j        |
|f          }| j        |<   Kd S d S )Nr   z#expected 1 input for prim::If, got r   r   zexpected 2 subgraph nodes, got c                 :    g | ]}                     |          S rb   r  r  s     r(   rT  z7TS2FXGraphConverter.convert_prim_If.<locals>.<listcomp>  s'    NNND11$77NNNr*   )r  rP   r   r    r   r.  r&  r   r   r   r$  rD   r   rV  r   condr  r   r   r  rR   r  r  r  )r	  r   r   	predicater   r   r  r'   r  r6   	cond_noderd  r]   r   r  s   `              r(   convert_prim_Ifz#TS2FXGraphConverter.convert_prim_Ifw  sJ   ((...dkkmm$$v;;! !Ts6{{!T!TUUU11&)<<	 66t<<	 [[]] 	L 	LE!(CE(JKKIIOO	 ;;D)LL~!## G#n2E2EGG   ONNNINNN 11-  	
 M//
D"EE	 ""++--1133K-6Dk***!##&t||~~66 9 9	6$..00-55h6FTUWW18!+..	 $#9 9r*   c                 0    |                      |           d S ra   )_convert_as_noopr  s     r(   convert_aten_Boolz%TS2FXGraphConverter.convert_aten_Bool  s    d#####r*   c                     d S ra   rb   r  s     r(   convert_prim_Enterz&TS2FXGraphConverter.convert_prim_Enter  s	    
 	r*   c                     d S ra   rb   r  s     r(   convert_prim_Exitz%TS2FXGraphConverter.convert_prim_Exit  s    r*   c                     t          |          }|j        }|                     ||          \  }}|                                                                }|d         | j        |<   d S )Nr   )r   r`  r0  r   r   r  )r	  r   r@  r   r6   r  rd  s          r(   r  z$TS2FXGraphConverter._convert_as_noop  sa     !&&,,T6::gkkmm--//)-a+&&&r*   c                      t           j        j        j        }t	           fd|                                D                       } j                            ||           d S )Nc              3   B   K   | ]}                     |          V  d S ra   rR  r  s     r(   r\  zMTS2FXGraphConverter.convert_profiler__record_function_exit.<locals>.<genexpr>  r  r*   )r   rw   profiler_record_function_exitrD   r   r   rV  )r	  r   r@  r6   s   `   r(   &convert_profiler__record_function_exitz:TS2FXGraphConverter.convert_profiler__record_function_exit  sZ     #9UUUUt{{}}UUUUU##FD11111r*   c                 
   d}|                      t          |                                                    f}| j                            ||          }|                                                                }|| j        |<   d S )Ntolist)r.  r   r   r   rz  r   r   r  r  s         r(   convert_prim_tolistz'TS2FXGraphConverter.convert_prim_tolist  sr     --d4;;==.A.ABBD-++FD99kkmm--//)0+&&&r*   c                     |                                                                 }t          j                    | j        |<   d S ra   )r   r   r   r   r  r  s      r(   convert_prim_Uninitializedz.TS2FXGraphConverter.convert_prim_Uninitialized  s6    
 kkmm--//-2\^^k***r*   c                 6    t           |                                         }t           fd|                                D                       } j                            ||          }|                                                                }| j        |<   d S )Nc              3   B   K   | ]}                     |          V  d S ra   rR  r  s     r(   r\  zBTS2FXGraphConverter._convert_standard_operators.<locals>.<genexpr>  r  r*   )	r   r   rD   r   r   rV  r   r   r  r  s   `     r(   r  z/TS2FXGraphConverter._convert_standard_operators  s    +DIIKK8UUUUt{{}}UUUUU---fd;;kkmm--//)0+&&&r*   c                    |                                 }t          |          }t          | || j                  }d                    t          |                              d          d d                   }t                              d|j	        |           	  ||           d S # t          $ r}t          d|           |d }~ww xY w)Nr  
r   z[%s] converts [%s]zTS2EPConverter failed for node )r   r   r   r  r   r   r   logdebug__name__r   r4   )r	  r   	node_kindr  handler_funcnode_strrU   s          r(   r9  z TS2FXGraphConverter.convert_node  s    IIKK	
 1;;t%68UVV
 773t99??400!455		&(=xHHH	UL 	U 	U 	ULLLMMSTT	Us   B& &
C0CCc                    g }d | j                                         D             t          | j                  z   }|D ]_}|| j        v r| j        |         }|                                 sPt          |t          j        j	                  r1|j
        dk    r&| j                            t          j        |f          }|                    |           | j                            t!          t"          j        t'          |          |                     || j        v rp|                    | j        |                    | j                            t!          t"          j        t+          || j        |                   |                     Nt-          d| d          t/          |          dk    r| j                            g            d S t/          |          d	k    r"| j                            |d                    d S t/          |          d	k    r| j                            |           d S | j                            |           d S )
Nc                 6    g | ]}|                                 S rb   r  )r   r  s     r(   rT  z=TS2FXGraphConverter.convert_graph_outputs.<locals>.<listcomp>  s"    OOOt$..**OOOr*   r   r   r>  )r   r   zOutput r   r   r   )r  r  rP   r  r  r   rA   r   r  Noderm  r   rV  r  r   r  r   r   USER_OUTPUTr   r  r   r   r    r   )r	  r6   outp_name_listrd  r6  s        r(   r:  z)TS2FXGraphConverter.convert_graph_outputs  s   OOt}7L7L7N7NOOORV4S
 S
 
 * 	D 	DKd///+K8 //11S"7EHM::S  
m33"m99%+zRRGG$$$!((".*<<<*       555D1+>???!((".,!,D4I+4V    +      !!B;!B!B!BCCCt99>>M  $$$$$YY!^^M  Q     YY]]M      
 M  &&&&&r*   N)Cr  
__module____qualname__r   r   r	   r   Blockdictr   r   r   r   r  r  r  rP   r$  r&  r   r  r0  Valuer.  r2  r  r;  r  r8  rX  re  rn  rw  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r
  r  r  r  r9  r:  rb   r*   r(   r   r     sb       DC67DC C-.DC S%,./	DC
 !%UX^SX%= >DC '+38nDC sCx.DC  $CH~DC DC DC DCL
 
 
3ux} 3c 3 3 3 34  29 9 9    
	#EHM 	# 	# 	# 	#>ehn > > > >  -    4>. >. >.@	?ux} 	? 	? 	? 	?1 1 1 1 18W W W W W.,%(- , , , ,8?EHM ? ? ? ?T T T T TM M M M M8
U 
U 
U 
U 
U>UX] > > > >** * * * **ux} * * * *558= 5 5 5 55ux} 5 5 5 5.1EHM 1 1 1 11UX] 1 1 1 13%(- 3 3 3 31UX] 1 1 1 1 1UX] 1 1 1 15ehm 5 5 5 5	1ehm 	1 	1 	1 	1,UX] , , , ,B1UX] 1 1 1 1%,EHM %, %, %, %,N0UX] 0 0 0 0(  6Nehm N N N N`58=    *9EHM *9 *9 *9 *9X$ehm $ $ $ $ux}    ehm    	1UX] 	1 	1 	1 	1258= 2 2 2 21 1 1 1 1<ux} < < < <1 1 1 1 1U U U U U&3' 3' 3' 3' 3'r*   r   c                   8    e Zd ZdZ G d de          Zdeej        j	        ej        j
        f         deeej        f         deeej        f         deej        j
        ee         f         deeef         d	eeef         d
eeef         f fdZd Z fdZ xZS )ExplainTS2FXGraphConverterz
    Run TS2FXGraphConverter in an explain mode. It collects all failed operators conversions
    and provide that information to users. In order to collect all failed conversions, it
    also mocks some internal attributes (e.g., name_to_node).
    c                   .     e Zd Z fdZ fdZd Z xZS )$ExplainTS2FXGraphConverter._DictMockc                 X    t                                          |           || _        d S ra   )superr  
mock_value)r	  	dict_datar*  	__class__s      r(   r  z-ExplainTS2FXGraphConverter._DictMock.__init__-  s&    GGY'''(DOOOr*   c                     t                                          |          s| j        S t                                          |          S ra   )r)  __contains__r*  __getitem__)r	  r   r,  s     r(   r/  z0ExplainTS2FXGraphConverter._DictMock.__getitem__1  s?     77'',, '&77&&s+++r*   c                     dS NTrb   )r	  r   s     r(   r.  z1ExplainTS2FXGraphConverter._DictMock.__contains__8  s    4r*   )r  r  r   r  r/  r.  __classcell__r,  s   @r(   	_DictMockr'  ,  s`        	) 	) 	) 	) 	)	, 	, 	, 	, 	,	 	 	 	 	 	 	r*   r4  r  r  r  r   r  r  r   c                     t                                          |||||||           g | _        t                              | j        t          j                            d ddd di                     | _        d S )NmockrV  c                      d S ra   rb   rb   r*   r(   r
  z5ExplainTS2FXGraphConverter.__init__.<locals>.<lambda>Z  s     r*   rb   )	r)  r  unsupported_node_listr%  r4  r  r   r  r  )	r	  r  r  r  r   r  r  r   r,  s	           r(   r  z#ExplainTS2FXGraphConverter.__init__;  s     	"(!	
 	
 	
 ;=" 7@@HMM 
 
r*   c                     |                                   | j                                        D ]}|                     |           |                                  d S ra   )r8  r  r   r9  r:  r  s     r(   explainz"ExplainTS2FXGraphConverter.explain`  s`    !!###M'')) 	$ 	$Dd####""$$$$$r*   c                     	 t                                          |           d S # t          $ r | j                            |           Y d S w xY wra   )r)  r9  r   r8  r   )r	  r   r,  s     r(   r9  z'ExplainTS2FXGraphConverter.convert_nodef  sa    	4GG  &&&&& 	4 	4 	4&--d333333	4s   !& $AA)r  r  r   __doc__r"  r4  r   r   r	   r   r!  r   r   r   r   r  r:  r9  r2  r3  s   @r(   r%  r%  %  s2            D   #
67#
 C-.#
 S%,./	#

 !%UX^SX%= >#
 '+38n#
 sCx.#
  $CH~#
 #
 #
 #
 #
 #
J% % %4 4 4 4 4 4 4 4 4r*   r%  c              #   V   K   | j         }d| _         	 d V  || _         d S # || _         w xY wr1  )disabled)r  r>  s     r(   disable_loggingr?  m  s@      |HCL xs    	(c            
           e Zd Z	 ddeej        j        ej        j        f         dee	df         de
eee	f                  fdZdefdZ ee          dd
            Zdej        j        deee	f         fdZd ZdS )TS2EPConverterNts_modelsample_args.sample_kwargsc                 r   || _         t          ||          \  | _        | _        }}|| _        || _        i | _        i | _        t          | j         t          j
        j                  s&t          | j                                                   ng }t          | j         t          j
        j                  sa| j                                                                         D ]5\  }t!          fd|D                       r| j        |<   +| j        |<   6i | _        i | _        |                                  d S )Nc              3   h   K   | ],}j         |j         k    |k                                    V  -d S ra   )shaperb  )r   paramr   s     r(   r\  z*TS2EPConverter.__init__.<locals>.<genexpr>  sN        |u{22 u_))++2222 r*   )rB  r_   r  rX   rC  rD  r  r  rA   r   r	   rB   rP   
parametersrY   itemsr  name_to_non_tensor_attributesr  lift_get_attr)r	  rB  rC  rD  r'   
param_listr  r   s          @r(   r  zTS2EPConverter.__init__y  sP    !+<X{+S+S(t{Aq&*6879 dmUX-DEED))++,,, 	
 $-)@AA 
	4!]5577==?? 	4 	4	6    !+     4
 -3D&q))-3D'**=?*02r*   r=   c           	         t                               d           t                               d| j                   t          | j                  \  }}t	          | j        | j        | j        || j        | j        |          }|	                                }t          |           t                               d|                    d                     |                     ||j                  }t                               d|           t          | j        t          j        j                  s^| j                                                                        D ]2\  }}||j        vr$t)          j        d| dd	
           ||j        |<   3|S )Nz
TS2EPConverter logging starts from here.

INFO: (TORCH_LOGS="export" <cmd>)
    * Log TorchScript IR.

DEBUG: (TORCH_LOGS="+export" <cmd>), additionally
    * Log conversion IR by IR in a format of [<conversion handler name>] converts [<IR>].
        zTorchScript graph

%s
zGraphModule: %sF)print_outputz%szManually populate zN into state_dict ExportedProgram, but it is never used by the ExportedProgram.r   rg  )r  infor  r   r   r  r  rK  r  r  r
   print_readableretrace_as_exported_programrA   rB  r   r	   rB   rY   rJ  rj  rk  )r	  r   r   graph_converterrr   epr  r   s           r(   r  zTS2EPConverter.convert  s   
	
 
	
 
	
 	,dm<<<8QM9
 9
5 5 .M".!!
 
 $$&& 	0333"B$5$55$5$I$IJJJ--,
 
 	r
 $-)@AA 	.!]5577==?? . .	6BM))M~Q~~~#$    (.BM!$	r*   Tc           	         t          | j                  \  }}t          | j        | j        | j        || j        | j        |          }|                                 t          |j	                  dk    r{d}t          |j	                  D ]c\  }}d                    t          |                              d          d d                   }|d| d|                                 d| d	z  }dnd
}|rt          |           |S )Nr   z2Unsupported nodes are found in the following list:r  r  r   z

    z. z []zSuccess!)r   r  r%  r  r  rK  r  r:  r    r8  rR   r   r   r   r   print)	r	  rO  r   r   rS  explain_strr]   nr  s	            r(   r:  zTS2EPConverter.explain  s%   8QM9
 9
5 5 5M".!!
 
 	!!!45599NK!/"GHH G G1773q66<<#5#5bqb#9::F!FFqvvxxFF8FFFFG %K 	+r*   rr   r  c                    t          d | j                  }t          j        j                            || j        |dd          }|j                            d |                                D                        |D ]}|j	        
                    |d            |j        j        D ]}|j        t          j        k    rp|j        |v rgt#          ||j                 t          j                  s*t'          t)          ||j                            d          t          j        |_        d |_        |                                                    |           |S )Nc                 ~    t          |t          j                  r"t          j        g|                                z  nd S ra   )rA   r   r   r   AUTOr   )pathxs     r(   r
  z<TS2EPConverter.retrace_as_exported_program.<locals>.<lambda>  s1    (21el(C(CM
QUUWW$$ r*   FT)dynamic_shapesr,   pre_dispatchc                 f    i | ].\  }}t          |t          j        t          j        f          +||/S rb   )rA   r   r   r  )r   r  r  s      r(   r   z>TS2EPConverter.retrace_as_exported_program.<locals>.<dictcomp>  sH       Aqa%,0B!CDD1  r*   z& has been erroneously marked as buffer)r   rC  r   export_trace_export
_constantsupdaterJ  rY   popgraph_signaturer  r   r   rD  r@  rA   r   r   r   CONSTANT_TENSORrA  verifiercheck)r	  rr   r  r_  rT  r  specs          r(   rR  z*TS2EPConverter.retrace_as_exported_program  sy   
 -  	
 
 \ (() ) 
 
 	 ,2244  	
 	
 	
 " 	' 	'AMa&&&&&2 	' 	'DyI,,,@P1P1P!"24;"?NN ( 0 =>>fff   &5	"&
B	r*   c                      i dt           f fddt          j        j        ffd fd  j                   d S )Nr  c                 j    |                      d          }j        }|D ]}t          ||          }|S r   )r   rB  r   )r  r   r  rY  r	  s       r(   r   z.TS2EPConverter.lift_get_attr.<locals>.get_attr0  s<    99S>>DA " "AqMMHr*   r   c                     |                      d          }|                                                                 }|         }|r| d| n|}|S )Nr   r   )r   r   r   )r   r   r   r   r   r   s        r(   get_fqnz-TS2EPConverter.lift_get_attr.<locals>.get_fqn7  sW    vI//11J2:>N:HW.669666iHOr*   c                    |                                  D ]'}|                                dk    r+|                                                                }d	|<   |                                dk    r |          } |          }|                                                                }|	|<   t	          |t
          j                  r|
j        vr
|
j        |<   n8t	          |t
          j                  r|
j	        vr
|
j	        |<   n
|
j
        |<   |                                D ]} |           )d S )Nzprim::CreateObjectr  r   )r   r   r   r   rA   r   r   r  r  r  rK  r   )r   r   rd  r   r   r  _dfs_get_attrr   rp  r   r	  s         r(   rr  z3TS2EPConverter.lift_get_attr.<locals>._dfs_get_attr>  sN    , ,99;;"666"&++--"9"9";";K9;)+699;;/11&wt}}H$HX..E"&++--"9"9";";K9A)+6!%66 M#4+>>><AD/9#E5+=>> M#4+@@@>CD1(;GL:8D $ , ,H!M(++++,), ,r*   )r   r   r	   r  r  )r	  rr  r   rp  r   s   `@@@@r(   rL  zTS2EPConverter.lift_get_attr  s    " 13	# 	 	 	 	 	 		%(- 	 	 	 	 	 		, 	, 	, 	, 	, 	, 	, 	, 	,0 	dm$$$$$r*   ra   )T)r  r  r   r   r   r   rC   rB   rD   r   r   r"  r   r  r   r  r?  r  r:  r  r;  rR  rL  rb   r*   r(   rA  rA  w  s        37	" "	.	0HHI" 38_"  S#X/	" " " "H3 3 3 3 3j _S   4.H . sCx.. . . .`9% 9% 9% 9% 9%r*   rA  )r   )jbuiltinsloggingr  rI   rj  collections.abcr   r   
contextlibr   r   r   r   r   torch.export._tracer	   Atorch._export.passes.replace_quantized_ops_with_standard_ops_passr
   torch.export.dynamic_shapesr   r   torch.export.exported_programr   torch.export.graph_signaturer   r   r   r   r   r   r   torch.fxr   	getLoggerr  r  r)   r<   nnModuler   rB   rD   r   rP   rC   r_   re   ri   rq   r  r;  r   r   r   r   r   r   uint8int8int16r  int64float16float32float64	complex32	complex64
complex128ra  qint8quint8bfloat16r   rJ  r^  r   maxminr  is_is_notnot_containsr    rw   rx   	sym_numelry   sym_storage_offset
sym_strider   r"  __annotations__r   r   r!  r   r   r  r   r   r   r%  r?  rA  rb   r*   r(   <module>r     se        . . . . . . . . % % % % % % ' ' ' ' ' ' ' ' ' '                 A @ @ @ @ @ @ @ 9 9 9 9 9 9                  ' & & & & & g!!	 	 	" " "8/*%)"::;/*CKC=/*
5;[)39K0LLM/* /* /* /*d  ! ! !H H H(@eh&: @ @ @ @"    c     ,s ,s , , , ,& & & 
K	J	K	K	K	M1	M1	M1	OQ	OQ	b	J	K	L"	NB $ SR5I5O5O5Q5QRRR 	' 	' 	'   (L]"+# 9>+).)!IN=IN-= = DhsCx&8!89   &0 0 0) ) )M58>M5
4C()4S>9:M5 M5 M5 M5`S>16   2%(-    .Y' Y' Y' Y' Y' Y' Y' Y'xE4 E4 E4 E4 E4!4 E4 E4 E4P      _% _% _% _% _% _% _% _% _% _%r*   