
    9i                        % S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
JrJr  S SKrS SKrS SKJr  S SKJr  S SKJrJr  S SKJr  S S	KJrJrJrJrJrJrJr  S S
KJ r   \RB                  " \"5      r#S r$S r%S\\RL                  RN                  \RP                  RR                  4   S\\	   S\*\RV                  \,S   \	\\RZ                     4   4S jr.S r/S r0S r1S\Rd                  Rf                  4S jr4S r5S>S\6S\6S\64S jjr7S\6S\64S jr8S r9\Rt                  S \Rv                  S\Rx                  S\Rz                  S\R|                  S \R~                  S!\R                  S"\R                  S#\R                  S$\R                  S%\R                  S&\R                  S'\R                  S(\R                  S)\R                  S*0rI\IR                  5        V Vs0 s H  u  pX_M	     snn rKS+ rL\ R                  \ R                  \R                  \R                  \R                  \R                  \R                  \L\T\R                  R                  R                  \R                  R                  R                  \R                  R                  R                  \R                  R                  R                  S,.r[\\\6\
S-\	4   4   \]S.'   S/ r^S0 r_S1\R                  RV                  S\*\\\R                  R                  \a\6   4   \\\6\64   4   4S2 jrbS3\\\6\64   S4\R                  R                  S\64S5 jrdS4\R                  R                  4S6 jre " S7 S85      rf " S9 S:\f5      rg\S; 5       rh " S< S=5      rigs  snn f )?    N)Sequence)contextmanager)AnyCallableOptionalUnion)_C)'replace_quantized_ops_with_standard_ops)_tree_map_with_pathDim)ExportedProgram)ConstantArgumentCustomObjArgument	InputKind	InputSpec
OutputKind
OutputSpecTensorArgument)subgraph_rewriterc                 *   / n[        U R                  5       U5       Hr  u  p4S[        UR                  5       5      ;   a=  [        R
                  R                  U5      u  pVUR                  [        U5      5        M_  UR                  US L5        Mt     U$ )NPackedParams)	zipinputsstrtypetorchjit_flattenappendlen)method_graphargs_paramsparam_count_listinput_arg_params_in_vars_s          W/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/_export/converter.py_get_param_count_listr)   "   s|    "<#6#6#8+FS//++K8JG##CL1##Kt$;<  G     c                    [         R                  R                  U 5      R                  5       n[         R                  " 5       n[         R
                  " S5        [         R                  R                  U USSSS9u  pEn[         R
                  " U5        U[         R                  R                  U 5      R                  5       :w  a  [        S5      eXE4$ )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     !9977>CCE
 #("A"A"C	$$U+-2YY-G-G" .H .*KN 
$$%@Auyy;;EBGGII:
 	

 !!r*   r5   r6   returnz	_C.IValuec                    [        U [        R                  R                  [        R                  R                  45      (       Ga  [        [        R                  R                  [        U5      5      S   5      nS n[        U [        R                  R                  5      (       Ga   U R                  R                  n[        R                  " U5        [        R                  " [        R                  " [        R                  U R                   5      SS9n[        R"                  " U5      u  pxUR%                  S5      R                  n	[        U5      [        U5      -   n
['        X5      n[        R                  R                  U
5      u  p[        R(                  " U	[        U5      USS5      nXHX74$ / nU R                  n[        R                  " U5        ['        XA5      n[        R(                  " XBUSS5      nXHUS 4$ [+        X5      u  pC[        R,                  " U5        [        R                  R/                  U 5      n[1        UR3                  5       5      n[1        UR5                  5       5      n[7        U5      [7        U5      -
  n[1        UR9                  5       5      n[;        U5       H%  u  nnUU:  d  M  UR=                  UUU-
     5        M'     [        R                  " U5        XHUS 4$ ! [         a  n[        S5      UeS nAff = f)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{    %%))22EII4J4JKLLuyy11%+>qAB	eUYY3344V++ 33E:..BOOUXX64N  ??ONF!--i8>>L+f5K4\O++K8JG99eGn.>uE )33 
//60=55#3UE
 i--6uCE5!--e4J*##%&F'L&Z8Nz()KL)3[^);<= * ++E2)T))K " V"#MNTUUVs   &K1 1
L;LLc                 
    X-   $ N )abs     r(   list_addre   |   s	    5Lr*   c                     X/-   $ ra   rb   )	containerelements     r(   list_appendri      s    y  r*   c                 2    USU nX2S nU " / UQUPUQ70 UD6$ )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      s<     445O
 01KG[G(G_GGGr*   gmc                 >    S nS n[         R                  " XU5        g )Nc                    [         R                  R                  R                  R	                  X5      n[         R                  R                  R                  U5      n[         R                  R                  R                  R                  XBSS9n[         R                  R                  R                  R                  U5      nU$ )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(   pattern.inplace_optimize_sym_size_div.<locals>.pattern   s    yy~~..222;		44\B))..,,88 9 
 YY^^''..?
r*   c                 p    [         R                  R                  R                  R	                  X5      nX2-  $ ra   )r   rw   rx   ry   rz   )r   r   r   r   s       r(   replacement2inplace_optimize_sym_size_div.<locals>.replacement   s)    yy~~..222;$$r*   )r   replace_pattern)rr   r   r   s      r(   inplace_optimize_sym_size_divr      s    % %%b;?r*   c                 j    [        U 5      S:X  a  [        S5      eU S   R                  5       (       a  gg)Nr   zEmpty argument name for codegenFT)r    r4   isdigitnames    r(   is_valid_for_codegenr      s0    
4yA~<==Awr*   r   prefixc                 X    U R                  SS5      n [        U 5      (       a  U $ U SU  3$ )N.r'   )replacer   )r   r   s     r(   normalize_namer      s3    <<S!DD!!XQtfr*   c                 L    U R                  S5      nSSR                  U5      -   $ )zprim::If -> convert_prim_If::convert_r'   )splitjoin)r   	name_lists     r(   ir_name_to_func_namer      s$    

4 I+++r*   c                 T    U(       a  U R                  U5      $ U R                  U5      $ ra   )get_attrplaceholder)fx_graphr   is_top_level_graphs      r(   #get_node_as_placeholder_or_get_attrr      s'      &&%%r*                           	   
               c                 \    U R                   nU[        ;  a  [        SU 35      e[        U   $ )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      s4     LLE((/w7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                     U R                  5       R                  5       U R                  5       R                  5       p!U R                  S5      nX!U4$ Nr   )input	debugNameoutputs)nodeirv_parent_nameirv_name	attr_names       r(   &get_ir_value_parent_name_and_attr_namer      s?     $

 6 6 8$++-:Q:Q:SXvIi//r*   c                     / nX;   a  UR                  X    5        X   n X;   a  M  SR                  [        U5      5      $ Nr   )r   r   reversed)irref_mapname_mapr   s       r(   construct_fqnr     s@    I
-&[ - 88HY'((r*   rE   c                 b   ^^^^^ 0 m0 m0 mUUU4S jmUUUU4S jmT" U 5        T" U 5        TT4$ )af  
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                    > U R                  5        HO  nUR                  5       S:X  a  [        U5      u  nnnUTU'   UTU'   UR                  5        H  nT" U5        M     MQ     g)z9
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   ;get_block_to_lifted_attrs.<locals>._dfs_get_attr_dependency*  si     KKMDyy{o-
 ;4@	#/>"8,.7!(+(/ ' "r*   c                   > [        5       nU R                  5        H  nUR                  5        H  nUR                  T" U5      5      nM     UR	                  5       S:X  d  MG  UR                  5       R                  5       nU[        TR                  5       5      ;  d  M  UR                  [        UTT5      5        M     [        U [        R                  R                  5      (       d  UTU '   U$ )zd
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   >get_block_to_lifted_attrs.<locals>._map_blocks_to_lifted_attrs:  s    
 "e	KKMD%OO,G,NO	 ' yy{o-;;=224 3'9'@'@'B#CCMM%h0BDUV " %00,5"5)r*   rb   )rE   r   r   r   r   r   s    @@@@@r(   get_block_to_lifted_attrsr   	  sI    & >@ *, )+0  2 U#&!#444r*   name_to_attribute_fqnr   c                 v  ^  S[         4U 4S jjnUR                  5       S:X  a(  [        UR                  5       5      R	                  5       nOBUR                  5       S:X  a  UR                  5       R	                  5       nO[        SU S35      eUR                  S5      nU" U5      nU(       a	  U SU 3nU$ UnU$ )Nr   c                 8   > U T;   a  TU    $ [        SU  S35      eNz
Attribute 
 not found)
ValueError)r   r   s    r(   r   0get_attribute_fqn_from_ts_node.<locals>.get_attr\  s+    (((..z$z:;;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
		'ZZ\++-
EdV1M
 	
 vIj)N2@.!9+.HO GPHOr*   c                    U R                  5       nUS:w  d
   SU  35       e[        R                  R                  U5      n[	        UR
                  5      R                  S5      u  p4UR                  n [        [        R                  U5      n[        Xd5      nU(       a  [        Xu5      nU$ UR                  n U$ ! [         a3  n	[        SU R                  5        SU R                  5        35      U	eS n	A	ff = f)N(no schema)zgot empty schema for r   zUnable to find operator z with schema )schemar   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&F*?v(FF&&+hh&;&;J&GFfkk"((.KB##H
!%))R0$_>!"4?K  -44K   &tyy{m=P
	s   37B; ,B; ;
C8.C33C8c                   	   \ rS rSrS\\R                  R                  \R                  R                  4   S\	\
\R                  4   S\	\
\R                  4   S\	\R                  R                  \\
   4   S\	\
\4   S\	\
\4   S\	\
\
4   4S	 jrS
 rS\R                  R                   S\\
   4S jrS rS rS\
4S jrS\R                  R                   4S jrS\R                  R.                  4S jrS rS\R4                  R6                  4S jrS rS\R                  R                   4S jrS\R                  R                   4S jrS\R                  R                   4S jr S\R                  R                   4S jr!S\R                  R                   4S jr"S\R                  R                   4S jr#S\R                  R                   4S jr$S\R                  R                   4S jr%S\R                  R                   4S  jr&S\R                  R                   4S! jr'S\R                  R                   4S" jr(S\R                  R                   4S# jr)S\R                  R                   4S$ jr*S\R                  R                   4S% jr+S\R                  R                   4S& jr,S\R                  R                   4S' jr-S\R                  R                   4S( jr.S\R                  R                   4S) jr/S\R                  R                   4S* jr0S\R                  R                   4S+ jr1S\R                  R                   4S, jr2S\R                  R                   4S- jr3S\R                  R                   4S. jr4S\R                  R                   4S/ jr5S0 r6S\R                  R                   4S1 jr7S2\R                  R                   4S3 jr8S\R                  R                   4S4 jr9S\R                  R                   4S5 jr:S\R                  R                   4S6 jr;S\R                  R                   4S7 jr<S\R                  R                   4S8 jr=S\R                  R                   4S9 jr>S\R                  R                   4S: jr?S\R                  R                   4S; jr@S\R                  R                   4S< jrAS\R                  R                   4S= jrBS> rCS?rDg@)ATS2FXGraphConverteri  ts_graphname_to_paramname_to_bufferr   name_to_non_tensor_attributename_to_constantr   c                   ^  UT l         UT l        UT l        [        R                  R                  5       T l        / T l        / T l        0 T l	        UT l
        UT l        0 T l        UT l        0 T l        UT l        [         R#                  5        H  n[%        U5      n	['        T U	U 4S j5        M!     [)        5       T l        g )Nc                 &   > TR                  U 5      $ ra   )_convert_standard_operators)r   selfs    r(   <lambda>.TS2FXGraphConverter.__init__.<locals>.<lambda>  s    T==dCr*   )r   r  r  r   fxr   r   input_specsoutput_specsname_to_noder  r   !name_to_non_tensor_attribute_noder  	subgraphsr   r   r0   r   setattrr   #name_update_from_subblock_to_parent)
r  r   r  r  r   r  r  r   khandler_func_names
   `         r(   __init__TS2FXGraphConverter.__init__  s     !*,(-(8,..0
  	
 1A 6K" BD.
 =Y):< '=# ,002A 4Q 7 !C	 3 >AU0r*   c                     XR                   ;   =(       dQ    XR                  ;   =(       d<    XR                  ;   =(       a'    [        U R                  U   [        R
                  5      $ ra   )r  r  r  rA   r   ScriptObject)r  fqns     r(   _is_get_attr_node%TS2FXGraphConverter._is_get_attr_node  sX    &&& ((( ,,, Ot44S95;M;MN	
r*   r   r   c           
         / / pCUR                  5        H  n[        UU R                  U R                  U R                  0 U R
                  U R                  5      nU H7  n[        U5      nUR                  R                  U5      n	XR                  U'   M9     UR                  5       n
U R                  U
5      nUR                  U R                  R                  U5      5        UR                  U5        M     X44$ 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_subgraph.TS2FXGraphConverter._convert_block_to_subgraph  s    .0"+[[]E!4""##++%%**" '	,:9,E)#5#>#>#J#J-$  >N//	: ' *113H --h7M!!$--"8"8"GH&&'9:+ #, 22r*   c                    [        5       nUR                  5        H  nUR                  5        H  nUR                  5        Hb  nUR	                  5       U R
                  ;   d  M#  UR	                  5       U R                  ;  d  MC  UR                  UR	                  5       5        Md     UR                  U R                  U5      5      nM     M     U$ )a  
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)  1TS2FXGraphConverter._identify_inputs_as_arguments  s     "e	\\^E#kkm
%/%6%6%8M%//1T5F5FF)335T=W=WW!m&=&=&?@ &9 &OO66zB	 , $ r*   c                 ^    [        U R                  [        R                  R                  5      $ ra   )rA   r   r   r	   r   )r  s    r(   r   &TS2FXGraphConverter.is_top_level_graph  s    $--88r*   r=   c                 R    S[        U R                  5       3nXR                  U'   U$ )N	subgraph_)r    r  )r  rk   r   s      r(   r   TS2FXGraphConverter.add_subgraph  s)    3t~~./0'tr*   c                    / n0 n[        UR                  5       UR                  5       HU  u  pVUR                  (       a  U R	                  U5      XFR
                  '   M5  UR                  U R	                  U5      5        MW     [        U5      U4$ 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_kwargs#TS2FXGraphConverter.get_args_kwargs  su    !$T[[]F4D4D!EE$$*.*G*G*N'D99%@A	 "F T{F""r*   valuec                    UR                  5       nX R                  ;   a  U R                  U   nU$ X R                  ;   aV  [        U R                  U   [        R
                  5      (       a  U R                  R                  U5      $ U R                  U   $ X R                  ;   a  U R                  U R                  U   5      $ [        SU S35      e)NzInput r   )r   r  r  rA   r   r  r   r   r   get_fx_value_by_fqnr   )r  r8  
value_name
input_nodes       r(   r4  ,TS2FXGraphConverter.get_fx_value_by_ir_value  s    __&
*****:6J000$//
;U=O=OPP}}--j99((44555++D,F,Fz,RSSvj\<==r*   c                     XR                   ;   a  U R                   U   nU$ XR                  ;   a  U R                  U   nU$ XR                  ;   a  U R                  U   nU$ XR                  ;   a  U R                  U   nU$ [	        SU S35      er   )r  r  r  r  r   )r  r   fx_nodes      r(   r:  'TS2FXGraphConverter.get_fx_value_by_fqn.  s    $$$''-G  ***++D1G  ;;;<<TBG
 	 66677=G  z$z:;;r*   c                    U R                  5         U R                  R                  5        H  nU R                  U5        M     U R	                  5         [
        R                  R                  0 U R                  EU R                  EU R                  EU R                  EU R                  EU R                  5      n[        U5        UR                  R!                  5         U$ 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  TS2FXGraphConverter.convert;  s    !!#MM'')Dd# * 	""$ XX!!..$$ %% 33	
 '' MM	
 	&b)
	r*   c                    U R                   R                  5        GHO  nUR                  5       nX R                  ;   aj  [	        U5      nU R
                  R                  [        [        R                  [        US9US95        [        U R                  X R                  5       5      nGOX R                  ;   ak  [	        U5      nU R
                  R                  [        [        R                  [        US9USS95        [        U R                  X R                  5       5      nGO:X R                   ;   a  [#        U R                   U   [$        R&                  5      (       d   S5       e[	        U5      nU R
                  R                  [        [        R(                  [+        X3S9USS95        [        U R                  X R                  5       5      nO[#        UR-                  5       [$        R.                  5      (       a  GM  [	        USS	9nU R
                  R                  [        [        R0                  [        US9US95        U R                  R3                  U5      nX@R4                  U'   GMR     g )
Nr   argtargetT)rJ  rK  
persistentz*Input conversion only handles ScriptObject)r   	class_fqnFr   )r   )r   r   r   r  r   r  r   r   r   	PARAMETERr   r   r   r   r  BUFFERr  rA   r   r  
CUSTOM_OBJr   r   	ClassType
USER_INPUTr   r  )r  graph_inputr   normalized_namer?  s        r(   rB  (TS2FXGraphConverter.convert_graph_inputsU  s   ==//1K((*D)))"0"6  ''!++*@# >MM4)@)@)B ,,,"0"6  ''!((*@##'	 >MM4)@)@)B ...!$"7"7"=u?Q?QRR @R #1"6  ''!,,-!0  $#(	 >MM4)@)@)B K,,.@@"0g"F  ''!,,*@# --33OD&-d#y 2r*   c                    S nUR                  5        Vs/ s H  o0R                  U5      PM     nnU R                  R                  U[	        U5      5      nXPR
                  UR                  5       R                  5       '   g s  snf )Nc                 X    U R                  [        R                  S9R                  5       $ )N)r   )tor   floatitem)ts    r(   to_float_tensor?TS2FXGraphConverter.convert_aten_Float.<locals>.to_float_tensor  s     44ekk4*//11r*   )r   r4  r   call_functionrD   r  r   r   )r  r   r\  r^   inp_listr?  s         r(   convert_aten_Float&TS2FXGraphConverter.convert_aten_Float  sq    	2 CG++-P-311#6-P----(O
 8?$++-1134 Qs   Bc                   ^ U R                  U[        R                  R                  R                  R
                  R                  5      u  p#U H  nUS:X  d  M  [        X4   5      X4'   M     [        S U 5       5      (       a  [        R                  O[        R                  R                  mU4S jnUR                  5       R                  5       nU R                  R                  XRU5      nXpR                  U'   g)z9aten::tensor creates a constant tensor ad-hoc --> GetAttrrequires_gradc              3   B   #    U  H  n[        U[        5      v   M     g 7fra   )rA   rz   ).0rc   s     r(   	<genexpr>:TS2FXGraphConverter.convert_aten_tensor.<locals>.<genexpr>  s     4t!:a%%ts   c                  J   > SU;   a  US   b  [         US      US'   T" U 0 UD6$ )Nr   )_TORCH_ENUM_TO_DTYPE)r6   rn   	to_tensors     r(   rK  7TS2FXGraphConverter.convert_aten_tensor.<locals>.target  s6    & VG_%@"6vg"Gwd-f--r*   N)r6  r   rw   rx   r   r   _schemaboolall_refsr   r   r   r^  r  )	r  r   r6   rn   r  rK  output_namer?  rj  s	           @r(   convert_aten_tensor'TS2FXGraphConverter.convert_aten_tensor  s    ++D%))..2G2G2O2O2W2WXAO# O	  4t444 LL## 		. kkm--/----fFC)0+&r*   c                 *  ^  [         R                  " S5        [        U 4S jUR                  5        5       5      nT R                  R                  [        U5      nUT R                  UR                  5       R                  5       '   UT R                  UR                  S5      R                  5       '   T R                  5       (       dM  US   R                  S:X  a9  T R                  R                  UR                  S5      R                  5       5        g g g )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!c              3   F   >#    U  H  nTR                  U5      v   M     g 7fra   r4  )re  r^   r  s     r(   rf  :TS2FXGraphConverter.convert_aten_append.<locals>.<genexpr>  s     Q=CT22377=   !r   r   )warningswarnrD   r   r   r^  ri   r  r   r   inputsAtr   opr  r   )r  r   r6   r?  s   `   r(   convert_aten_append'TS2FXGraphConverter.convert_aten_append  s     	|	

 Q4;;=QQ----k4@7>$++-1134 ;B$--*4467 &&((T!WZZ=-H4488q9I9S9S9UV .I(r*   c                 8   UR                  5       R                  5       nS nUR                  S5      (       a  UR                  S5      nUS:X  a  UR	                  S5      nOUS:X  a  UR                  S5      nOUS:X  a  UR                  S5      nO}US:X  a@  SU 3nU R                  R                  U5      nX`R                  U'   XQR                  S5      p2O7US:X  a  UR                  S5      nO[        SUR                  S5       35      eS nX0R                  U'   g )	Nr8  r]   fr   r[  lifted_tensor_ivalzUnsupported constant type: )r   r   hasAttributekindOfr]   r  r   r   r   r  r[  r  r   r  )r  r   r   r8  constant_kind
alias_namer?  s          r(   convert_prim_Constant)TS2FXGraphConverter.convert_prim_Constant  s   {{}&&(W%% KK0M#w#%w#%w#%$TF+  --00<*1!!$'(&&/e&(		'* #>t{{7?S>T!UVVE&+d#r*   c                 &   UR                  5        Vs/ s H  o R                  U5      PM     nnU R                  R                  UR	                  S5      [        U5      5      nX@R                  UR                  5       R                  5       '   g s  snf r   )	r   r4  r   call_methodr   rD   r  r   r   )r  r   r^   r_  r?  s        r(   convert_prim_CallMethod+TS2FXGraphConverter.convert_prim_CallMethod  sp    BF++-P-311#6-P--++FF6N(O
 8?$++-1134 Qs   Bc                 N   UR                  5       R                  5       nUR                  [        R                  R
                  R                  5       5      (       a=  UR                  5       nUR                  5       R                  5       nX0R                  U'   g [        SU S35      e)NzUnsupported JitType (z) when get device)r   r   isSubtypeOfr   r	   
TensorTypegetdevicer   r   r  r   )r  r   
input_typer  rp  s        r(   convert_prim_device'TS2FXGraphConverter.convert_prim_device  s    ZZ\&&(
!!%(("5"5"9"9";<<&&(F++-113K17!!+.4ZL@QRSSr*   c                 &   [        U R                  U5      nUR                  5       R                  5       nX R                  U'   U R	                  5       (       a  U R                  U5      (       a)  U R                  R                  U5      U R                  U'   g X R                  ;  a  U R                  U   U R                  U'   U R                  U   U R                  U'   g U R                  U5      (       a  U R                  U   U R                  U'   g g ra   )r   r   r   r   r   r  r   r   r  r  r  )r  r   r   rp  s       r(   convert_prim_GetAttr(TS2FXGraphConverter.convert_prim_GetAttr  s    1$2L2LdSkkm--/2:"";/""$$%%h// 261G1G1Q!!+.#I#II99(C ::8D 261W1W2!!+. %%h//151B1B81L!!+. 0r*   c                 t   [        U R                  U5      n[        UR                  5       5      S   nU R	                  U5      nU R                  U5      (       aQ  U R                  R                  U5      nU R                  R                  [        R                  R                  XT45        g X@R                  U'   g Nr   )r   r   rD   r   r4  r  r   r   r^  r   r   copy_r  )r  r   r   
attr_valuets_graph_tensor_inputfx_attr_nodes         r(   convert_prim_SetAttr(TS2FXGraphConverter.convert_prim_SetAttr  s    1$2L2LdS4;;=)!,
 $ = =j I!!(++==11(;LMM''""\$I @U228<r*   c                    [        U5      nU R                  XR                  5      u  p4U R                  R	                  X#U5      nUR                  5       S:X  a-  UR                  5       R                  5       nXPR                  U'   g [        UR                  5       5       HN  u  pxUR                  5       nU R                  R	                  [        R                  XW45      n	XR                  U'   MP     g r  )r   r6  rl  r   r^  outputsSizer   r   r  rR   outputsoperatorgetitem)
r  r   rK  r6   rn   r?  rp  r]   outpnext_fx_nodes
             r(   convert_call_function_op,TS2FXGraphConverter.convert_call_function_op&  s     &++D..A----fFC
 "++-113K-4k*$T\\^4"nn.#}}::$$wl  2>!!+. 5r*   c                 &    U R                  U5        g ra   _convert_prim_iteratorr  r   s     r(   convert_prim_TupleConstruct/TS2FXGraphConverter.convert_prim_TupleConstruct;      ##D)r*   c                 &    U R                  U5        g ra   r  r  s     r(   convert_prim_ListConstruct.TS2FXGraphConverter.convert_prim_ListConstruct>  r  r*   c                     UR                  5        Vs/ s H  o R                  U5      PM     nnUR                  5       R                  5       nX0R                  U'   g s  snf ra   )r   r4  r   r   r  )r  r   r^   output_listrp  s        r(   r  *TS2FXGraphConverter._convert_prim_iteratorA  sM    EI[[]S]c44S9]Skkm--/)4+& Ts   Ac                 J   0 nSu  p4[        UR                  5       5       HG  u  pVUS-  S:X  a  U R                  U5      nM!  U R                  U5      nUb  Uc   S5       eXBU'   Su  p4MI     Uc  Ub   S5       eUR                  5       R	                  5       nX R
                  U'   g )N)NNr   r   z*DictConstruct has an empty key value pair.zGDictConstruct has an odd number of elements (violating our assumption).)rR   r   r4  r   r   r  )r  r   output_dictr  vr]   r^   rp  s           r(   convert_prim_DictConstruct.TS2FXGraphConverter.convert_prim_DictConstructG  s    .FA 1uz11#611#6} @6 "#A!1 / yQY 	
U	
& kkm--/)4+&r*   c                 &    U R                  U5        g ra   _convert_prim_unpack_iteratorr  s     r(   convert_prim_ListUnpack+TS2FXGraphConverter.convert_prim_ListUnpack^      **40r*   c                 &    U R                  U5        g ra   r  r  s     r(   convert_prim_TupleUnpack,TS2FXGraphConverter.convert_prim_TupleUnpacka  r  r*   c                    [        UR                  5       5       Hm  u  p#UR                  5       nU R                  UR	                  5       5      nU R
                  R                  [        R                  XR45      nX`R                  U'   Mo     g ra   )
rR   r  r   r4  r   r   r^  r  r  r  )r  r   r]   r  	outp_namer^   r?  s          r(   r  1TS2FXGraphConverter._convert_prim_unpack_iteratord  sg     0GA(I//

=Cmm11(2B2BSHMG+2i(	 1r*   c                   ^  [         R                  R                  R                  R                  n[        U 4S jUR                  5        5       5      nT R                  R                  X#S[         R                  05      nT R                  R                  [         R                  R                  R                  R                  U45      nUR                  5       R                  5       nUT R                  U'   g )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fra   ru  re  r   r  s     r(   rf  7TS2FXGraphConverter.convert_aten_Int.<locals>.<genexpr>o       U}eT22599}rw  r   )r   rw   rx   _to_copyr   rD   r   r   r^  int32_local_scalar_denser   r   r  )r  r   rK  r6   to_copy_noder?  rp  s   `      r(   convert_aten_Int$TS2FXGraphConverter.convert_aten_Intl  s    ((00Ut{{}UU}}226'5;;AWX----IINN..66
 kkm--/)0+&r*   c                 F  ^  [         R                  R                  R                  n[	        U 4S jUR                  5        5       5      nT R                  R                  X#S[         R                  05      nUR                  5       R                  5       nUT R                  U'   g )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fra   ru  r  s     r(   rf  ?TS2FXGraphConverter.convert_prim_NumToTensor.<locals>.<genexpr>  r  rw  r   )r   rw   rx   r{   rD   r   r   r^  longr   r   r  r  r   rK  r6   r?  rp  s   `     r(   convert_prim_NumToTensor,TS2FXGraphConverter.convert_prim_NumToTensor|  sq     --Ut{{}UU----fWejj<QRkkm--/)0+&r*   c                 ^    UR                  5       R                  5       nSU R                  U'   g )N )r   r   r   r  r   rp  s      r(   convert_prim_CreateObject-TS2FXGraphConverter.convert_prim_CreateObject  s&    kkm--/24"";/r*   c                 *   [         R                  R                  R                  R                  nU R                  XR                  5      u  p4U R                  R                  X#U5      nUR                  5       R                  5       nXPR                  U'   g ra   )r   rw   rx   convolutionr   r6  rl  r   r^  r   r   r  )r  r   rK  r6   rn   r?  rp  s          r(   convert_aten__convolution-TS2FXGraphConverter.convert_aten__convolution  sk     ++33++D..A----fFCkkm--/)0+&r*   c                    [        U5      nUR                  nU R                  X5      u  pEUR                  S:X  Ga  US   R                  nX`R
                  ;   a  [        U R
                  U   [        R                  5      (       a  U R
                  U   nUR                  5       S:X  a  [        U5      nU R
                  U   R                  5       US'   U R                  R                  [        R                  R                  R                   R"                  [%        U5      U5      n	UR'                  5       R)                  5       n
XR*                  U
'   g U R-                  U5        g )NTensor_moder   )r   rl  r6  r   r   r  rA   r   r   numelrP   rZ  r   r^  rw   rx   r|   r}   rD   r   r   r  r  )r  r   rK  r   r6   rn   	arg1_nametensor_constantupdated_argsr?  rp  s              r(   convert_aten_div$TS2FXGraphConverter.convert_aten_div  s$    &++D9 =0QI111j%%i0%,,7 7 #'"7"7	"B"((*a/#':L&*&;&;I&F&K&K&MLO"mm99		**66l+G #'++-"9"9";K5<%%k2%%d+r*   c                    ^  [        U 4S jUR                  5        5       5      u  p#T R                  R                  [        R
                  X#45      nUR                  5       R                  5       nUT R                  U'   g )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fra   ru  r  s     r(   rf  ?TS2FXGraphConverter.convert_aten___getitem__.<locals>.<genexpr>  s"      '
>KUD))%00mrw  )	rD   r   r   r^  r  r  r   r   r  )r  r   input_containerindexr?  rp  s   `     r(   convert_aten___getitem__,TS2FXGraphConverter.convert_aten___getitem__  sm    !& '
>Bkkm'
 "
 ----6
 kkm--/)0+&r*   c                 &   [        U5      nU R                  XR                  5      u  p4U[        R                  R
                  R                  R                  :X  d3  U[        R                  R
                  R                  R                  :X  Gai  UR                  5       R                  5        Vs/ s H  oUR                  PM     nnU Vs/ s H$  nUR                  5       S:w  d  M  [        U5      PM&     nn[        S U 5       5      n	U	(       a  [        U5      S:  d   e[        U5      n
SU
S'   U R                   R#                  [        R                  R
                  R                  R                  [%        U
5      5      nU R                   R#                  [        R                  R
                  R&                  R(                  U45      nUR                  5       R+                  5       nXR,                  U'   g U R/                  U5        g s  snf s  snf )Nr   c              3   L   #    U  H  oR                   R                  v   M     g 7fra   )rl  
is_mutable)re  rK  s     r(   rf  6TS2FXGraphConverter.convert_aten_to.<locals>.<genexpr>  s      %8Df))s   "$r   Tr   )r   r6  rl  r   rw   rx   rX  r   
prim_dtyper   usesuserr   anyr    rP   r   r^  rD   cloner   r   r  r  )r  r   rK  r6   _kwargsuse
user_nodes	user_nodeuser_targetshas_mutable_targetnew_argsr?  
clone_noderp  s                 r(   convert_aten_to#TS2FXGraphConverter.convert_aten_to  s    &,,T>>B UYY^^&&,,,%))..:K:K:V:V0V.2kkm.@.@.BC.Bs((.BJC ",!+I##%6 +	*!+  
 "% %8D% " "4yA~%~:"--55IINN%%++U8_
 "]]88IINN((007*
 #kkm5571;!!+.%%d+5 Ds   .H		H%Hc                    UR                  5       S:X  a  [        UR                  S5      R                  5       [        R
                  5      (       ak  [        UR                  S5      R                  5       [        R
                  5      (       a/  [        R                  R                  R                  R                  nO[        SU 35      e[        U5      nU[        R                  R                  R                  R                  :X  ai  U R                  XR                  5      u  p4UR                  5       R                  5       nU R                   R#                  [$        U5      U R&                  U'   g U R)                  U5        g )Nr   r   r   z$unable to determined the target for )r   rA   rz  r   r   ListTyperw   rx   r   r[  r4   r   r6  rl  r   r   r   r^  re   r  r  )r  r   rK  r6   r  rp  s         r(   convert_aten_add$TS2FXGraphConverter.convert_aten_add  s   ;;=M)$--*//15>>BBza %%'H H ++--"%I$#PQQ$T*FUYY^^''))) !00~~FMD++-113K-1]]-H-HSW-XDk*))$/r*   c                 V   [        UR                  5       5      nUS   R                  5       U R                  ;  a  [	        S5      e[        UR                  5       5      n[        UR                  5       5      R                  5       nUR                  5        H  nUR                  5       S:X  a-  UR                  5       R                  5       U:X  a  [	        S5      eUR                  5       S:  d  MZ  UR                  5        H"  nUR                  5       U:X  d  M  [	        S5      e   M     g )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_support,TS2FXGraphConverter._check_prim_loop_support  s    dkkm$ !9 (=(==] 
 & $X%5%5%7 8 B B DNN$D  "a'KKM++-1FF"V  !Q& LLND~~'+@@*^  + %r*   c           	         [        UR                  5       5      nU R                  U5        U R                  US   5      nUSS   Vs/ s H  oDR	                  5       PM     nnU R                  U5      nUR                  5        H!  nUR                  U R                  U   5      nM#     [        U5      nU R                  X5      u  p[        U5      S:X  d   eU	S   n
U R                  5       (       d*  U R                  R                  U
R                  5      U l        XV-    Vs/ s H  nU R                  U5      PM     nn[        U5       GHk  nU R                  R!                  ["        US   U[        U5      /UQ70 5      nUR%                  5       S:  a  ['        UR)                  5       5       Hc  u  nnUR	                  5       nU R                  R!                  [*        R,                  UUS-   45      U R.                  U'   U R.                  U   X'   Me     ['        U
R                  5       H  u  pU R                  R!                  [*        R,                  UXR%                  5       -   S-   45      U R.                  U'   UR1                  U5      nU R.                  U   XUR%                  5       -   U-   '   M     GMn     g s  snf s  snf )Nr   r   r   )rP   r   r
  r4  r   r)  r   r   r   r&  r    r   r  r:  ranger   r^  rq   r  rR   r  r  r  r  r  )r  r   r   num_iterationsr^   loop_local_argumentsglobal_argumentsr   r  r   r!  r   fx_block_argsrl   	loop_noder]   r  rp  global_argument_indexs                      r(   convert_prim_Loop%TS2FXGraphConverter.convert_prim_Loop  s   dkkm$%%d+66vayA <B!":F:C:F==dC [[]E/55++E2  #
   01.2.M.M/
+ >"a'''03&&((88>>&JJ 4 -?
? $$T*? 	 
 n-H33/ #1%,- #	 
I !Q&(8GAt"&.."2K59]]5P5P ((%E6D%%k2 (,'8'8'EM$  9 %"FF +/--*E*E$$!,,..2+!!$' )9(>(>t(D%%%d+ $"2"2"447LLM7 .;  G2
s   J9 J>if_nodec                     UR                  5        H9  nUR                  5        H"  nUR                  5       S:X  d  M  [        S5      e   M;     g )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_block/TS2FXGraphConverter._check_set_attr_in_if_blockg  sC    ^^%E99;/1&-  & &r*   c                    U R                  U5        [        UR                  5       5      n[        U5      S:X  d   eU R	                  US   5      nU R                  U5      nUR                  5        H!  nUR                  U R                  U   5      nM#     [        U5      nU R                  X5      u  pg[        U5      S:X  d   eU Vs/ s H  oR                  U5      PM     n	nUUS   US   [        U	5      4n
U R                  R                  [        R                  U
0 5      nUR!                  5       S:X  a-  UR#                  5       R%                  5       nXR&                  U'   g UR!                  5       S:  al  [)        UR+                  5       5       HN  u  pUR%                  5       nU R                  R                  [,        R.                  X45      nXR&                  U'   MP     g g s  snf )Nr   r   r   )r  rP   r   r    r4  r)  r   r   r   r&  r:  rD   r   r^  r   condr  r   r   r  rR   r  r  r  )r  r   r   	predicater   r   r  r'   r   r  r6   	cond_noderp  r]   r   r  s                   r(   convert_prim_If#TS2FXGraphConverter.convert_prim_Ifq  s   ((.dkkm$6{a11&)<	 66t<	 [[]E!(C(CE(JKI # O	 ;;DL>"a'''DMNID11$7IN 11- 	
 MM//

D"E	 "++-113K-6k*!#&t||~6	$..0--55h6F6FW18!!+. 7 $ Os   	G'c                 &    U R                  U5        g ra   )_convert_as_noopr  s     r(   convert_aten_Bool%TS2FXGraphConverter.convert_aten_Bool  s    d#r*   c                     g ra   rb   r  s     r(   convert_prim_Enter&TS2FXGraphConverter.convert_prim_Enter  s    
 	r*   c                     g ra   rb   r  s     r(   convert_prim_Exit%TS2FXGraphConverter.convert_prim_Exit  s    r*   c                     [        U5      nUR                  nU R                  X5      u  pEUR                  5       R	                  5       nUS   U R
                  U'   g )Nr   )r   rl  r6  r   r   r  )r  r   rK  r   r6   r  rp  s          r(   r!  $TS2FXGraphConverter._convert_as_noop  sQ     !&,,T:kkm--/)-a+&r*   c                    ^  [         R                  R                  R                  n[	        U 4S jUR                  5        5       5      nT R                  R                  X#5        g )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fra   ru  r  s     r(   rf  MTS2FXGraphConverter.convert_profiler__record_function_exit.<locals>.<genexpr>  r  rw  )r   rw   profiler_record_function_exitrD   r   r   r^  )r  r   rK  r6   s   `   r(   &convert_profiler__record_function_exit:TS2FXGraphConverter.convert_profiler__record_function_exit  sB     ##99Ut{{}UU##F1r*   c                     SnU R                  [        UR                  5       5      5      4nU R                  R	                  X#5      nUR                  5       R                  5       nX@R                  U'   g )Ntolist)r4  r   r   r   r  r   r   r  r  s         r(   convert_prim_tolist'TS2FXGraphConverter.convert_prim_tolist  s]     --d4;;=.ABD--++F9kkm--/)0+&r*   c                     UR                  5       R                  5       n[        R                  " 5       U R                  U'   g ra   )r   r   r   r   r  r  s      r(   convert_prim_Uninitialized.TS2FXGraphConverter.convert_prim_Uninitialized  s.    
 kkm--/-2\\^k*r*   c                 
  ^  [         UR                  5          n[        U 4S jUR                  5        5       5      nT R                  R                  X#5      nUR                  5       R                  5       nUT R                  U'   g )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fra   ru  r  s     r(   rf  BTS2FXGraphConverter._convert_standard_operators.<locals>.<genexpr>  r  rw  )	r   r   rD   r   r   r^  r   r   r  r  s   `     r(   r  /TS2FXGraphConverter._convert_standard_operators  sa    +DIIK8Ut{{}UU----f;kkm--/)0+&r*   c                 T   UR                  5       n[        U5      n[        XU R                  5      nSR	                  [        U5      R                  S5      S S 5      n[        R                  SUR                  U5         U" U5        g ! [         a  n[        SU 35      UeS nAff = f)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(   rC   TS2FXGraphConverter.convert_node  s    IIK	
 1;t8U8UV
 773t9??40!45		&(=(=xH	U 	U!@LMSTT	Us    B	 	
B'B""B'c                    / nU R                   R                  5        Vs/ s H  o"R                  5       PM     sn[        U R                  5      -   nU GHi  nX@R
                  ;   a  U R
                  U   nU R                  5       (       dd  [        U[        R                  R                  5      (       a;  UR                  S:X  a+  U R                  R                  [        R                  U45      nUR                  U5        U R                   R                  [#        [$        R&                  [)        US9US95        M  X@R*                  ;   ag  UR                  U R*                  U   5        U R                   R                  [#        [$        R&                  [-        X@R*                  U   S9US95        GM]  [/        SU S35      e   [1        U5      S:X  a  U R                  R3                  / 5        g [1        U5      S:X  a  U R                  R3                  US   5        g [1        U5      S:  a  U R                  R3                  U5        g U R                  R3                  U5        g s  snf )	Nr   r   rI  )r   r8  zOutput r   r   r   )r   r  r   rP   r  r  r   rA   r   r  Noder{  r   r^  r  r   r  r   r   USER_OUTPUTr   r  r   r   r    r   )r  r6   r  outp_name_listrp  r?  s         r(   rD  )TS2FXGraphConverter.convert_graph_outputs  s   7;}}7L7L7NO7Nt..*7NORV44S
 
 *K///++K8 //11"7EHHMM::

m3"mm99%++zRGG$!!(("..*<*  5 55D11+>?!!(("..,!,4I4I+4V  + !7;-z!BCC? *B t9>MM  $Y!^MM  Q Y]MM  
 MM  &c Ps   I!)r   r   r  r   r  r  r  r  r  r  r  r  r  r   N)ErB  
__module____qualname____firstlineno__r   r   r	   r   Blockdictr   r   r   r   r  r  rH  rP   r&  r)  r   r  r6  Valuer4  r:  r  rE  r  rB  r`  rq  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!  r1  r5  r8  r  rC  rD  __static_attributes__rb   r*   r(   r   r     s-   DC67DC C-.DC S%,,./	DC
 !%UXX^^SX%= >DC '+38nDC sCx.DC  $CH~DCL
3uxx}} 3c 3429 
	#EHHMM 	#>ehhnn >-- 4=.~	?uxx}} 	?1 18W W,,%((-- ,8?EHHMM ?T TM M8
U 
U>UXX]] >** **uxx}} *5588== 55uxx}} 5.1EHHMM 11UXX]] 13%((-- 31UXX]] 1 1UXX]] 15ehhmm 5	1ehhmm 	1,UXX]] ,B1UXX]] 1$,EHHMM $,L0UXX]] 0(6Lehhmm L\588== &9EHHMM &9P$ehhmm $uxx}} ehhmm 	1UXX]] 	12588== 21 1<uxx}} <1 1U U&3'r*   r   c                   `  ^  \ rS rSrSr " S S\5      rS\\R                  R                  \R                  R                  4   S\\\R                  4   S\\\R                  4   S\\R                  R                  \\   4   S	\\\4   S
\\\4   S\\\4   4U 4S jjrS rU 4S jrSrU =r$ )ExplainTS2FXGraphConverteri  z
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                   :   ^  \ rS rSrU 4S jrU 4S jrS rSrU =r$ )$ExplainTS2FXGraphConverter._DictMocki"  c                 0   > [         TU ]  U5        X l        g ra   )superr  
mock_value)r  	dict_datarY  	__class__s      r(   r  -ExplainTS2FXGraphConverter._DictMock.__init__#  s    GY'(Or*   c                 b   > [         TU ]  U5      (       d  U R                  $ [         TU ]  U5      $ ra   )rX  __contains__rY  __getitem__)r  keyr[  s     r(   r_  0ExplainTS2FXGraphConverter._DictMock.__getitem__'  s/     7',,&7&s++r*   c                     gNTrb   )r  r`  s     r(   r^  1ExplainTS2FXGraphConverter._DictMock.__contains__.  s    r*   )rY  )	rB  rL  rM  rN  r  r_  r^  rR  __classcell__r[  s   @r(   	_DictMockrV  "  s    	)	,	 	r*   rg  r   r  r  r   r  r  r   c                    > [         TU ]  UUUUUUU5        / U l        [        R	                  U R
                  [        R                  R                  S SSS S0 5      5      U l        g )Nmockr^  c                      g ra   rb   rb   r*   r(   r	  5ExplainTS2FXGraphConverter.__init__.<locals>.<lambda>P  s    r*   rb   )	rX  r  unsupported_node_listrT  rg  r  r   r  rH  )	r  r   r  r  r   r  r  r   r[  s	           r(   r  #ExplainTS2FXGraphConverter.__init__1  sq     	"(!	
 ;=" 7@@HHMM
r*   c                     U R                  5         U R                  R                  5        H  nU R                  U5        M     U R	                  5         g ra   )rB  r   r   rC  rD  r  s     r(   explain"ExplainTS2FXGraphConverter.explainV  s?    !!#MM'')Dd# *""$r*   c                 |   >  [         TU ]  U5        g ! [         a    U R                  R	                  U5         g f = fra   )rX  rC  r   rl  r   )r  r   r[  s     r(   rC  'ExplainTS2FXGraphConverter.convert_node\  s8    	4G & 	4&&--d3	4s    %;;)r  rl  )rB  rL  rM  rN  __doc__rP  rg  r   r   r	   r   rO  r   r   r   r   r  ro  rC  rR  re  rf  s   @r(   rT  rT    s    D #
67#
 C-.#
 S%,,./	#

 !%UXX^^SX%= >#
 '+38n#
 sCx.#
  $CH~#
J%4 4r*   rT  c              #   ^   #    U R                   nSU l          S v   Xl         g ! Xl         f = f7frc  )disabled)r@  ru  s     r(   disable_loggingrv  c  s'     ||HCL xs   -" -*-c            
          \ rS rSr SS\\R                  R                  \R                  R                  4   S\	\
S4   S\\\\
4      4S jjrS\4S	 jr\" \5      SS
 j5       rS\R(                  R*                  S\\\
4   4S jrS rSrg)TS2EPConverterim  Nts_modelsample_args.sample_kwargsc                   ^ Xl         [        X5      u  U l        U l          nX l        X0l        0 U l        0 U l        [        U R                   [        R                  R                  5      (       d#  [        U R                   R                  5       5      O/ n[        U R                   [        R                  R                  5      (       dl  U R                   R                  5       R                  5        H@  u  nm[!        U4S jU 5       5      (       a  TU R                  U'   M1  TU R                  U'   MB     0 U l        0 U l        U R'                  5         g )Nc              3      >#    U  H4  nTR                   UR                   :X  d  M  TU:H  R                  5       v   M6     g 7fra   )shapern  )re  paramr   s     r(   rf  *TS2EPConverter.__init__.<locals>.<genexpr>  s:      !+||u{{2 ,Vu_))++!+s   ??)ry  r_   r   rX   rz  r{  r  r  rA   r   r	   rB   rP   
parametersrY   itemsr  name_to_non_tensor_attributesr  lift_get_attr)r  ry  rz  r{  r'   
param_listr  r   s          @r(   r  TS2EPConverter.__init__o  s    !+<X+S(t{Aq&*6879 dmmUXX-D-DEE ))+, 	
 $--)@)@AA!]]557==?	6 !+  
 -3D&&q)-3D''* @ >@*02r*   r=   c           	      >   [         R                  S5        [         R                  SU R                  5        [        U R                  5      u  p[	        U R                  U R
                  U R                  UU R                  U R                  U5      nUR                  5       n[        U5        [         R                  SUR                  SS95        U R                  UUR                  5      n[         R                  SU5        [        U R                  [        R                   R"                  5      (       dj  U R                  R%                  5       R'                  5        H>  u  pgXeR$                  ;  d  M  [(        R*                  " SU S35        XuR$                  U'   M@     U$ )	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@  infor   r   r   r  r  r  r  r  r
   print_readableretrace_as_exported_programrA   ry  r   r	   rB   rY   r  rx  ry  )r  r   r   graph_converterrr   epr  r   s           r(   r  TS2EPConverter.convert  sU   
	
 	,dmm<8QMM9
5 .MM"..!!!
 $$& 	03"B$5$55$5$IJ--,,
 	r
 $--)@)@AA!]]557==?	MM)MM,QC/}~ (.MM!$ @ 	r*   c           	         [        U R                  5      u  p#[        U R                  U R                  U R                  UU R
                  U R                  U5      nUR                  5         [        UR                  5      S:  aj  Sn[        UR                  5       HN  u  pgSR                  [        U5      R                  S5      S S 5      nUSU SUR                  5        SU S	3-  nMP     OS
nU(       a  [        U5        U$ )Nr   z2Unsupported nodes are found in the following list:r  r?  r   z

    z. z []zSuccess!)r   r   rT  r  r  r  r  ro  r    rl  rR   r   r   r   r   print)	r  r  r   r   r  explain_strr]   nrE  s	            r(   ro  TS2EPConverter.explain  s    8QMM9
5 5MM"..!!!
 	!4459NK!/"G"GH773q6<<#5bq#9:!Bqvvxj8*AFF I %K+r*   rr   r  c                 z   [        S U R                  5      n[        R                  R                  R                  UU R                  USSS9nUR                  R                  UR                  5        VVs0 s H8  u  pV[        U[        R                  [        R                  45      (       d  M6  XV_M:     snn5        U H  nUR                  R                  US 5        M!     UR                  R                   H  nUR                   ["        R$                  :X  d  M#  UR&                  U;   d  M5  [        X'R&                     [        R                  5      (       d   [)        X'R&                     5       S35       e["        R*                  Ul        S Ul        M     UR/                  5       R1                  U5        U$ s  snnf )Nc                     [        U[        R                  5      (       a"  [        R                  /UR                  5       -  $ S $ ra   )rA   r   r   r   AUTOr   )pathxs     r(   r	  <TS2EPConverter.retrace_as_exported_program.<locals>.<lambda>  s.    (21ell(C(C
QUUW$MMr*   FT)dynamic_shapesr,   pre_dispatchz& has been erroneously marked as buffer)r   rz  r   export_trace_export
_constantsupdater  rA   r   r  rY   popgraph_signaturer  r   r   rO  rK  r   CONSTANT_TENSORrL  verifiercheck)r  rr   r  r  r  r  r  specs           r(   r  *TS2EPConverter.retrace_as_exported_program  sx   
 - 	
 \\  (() ) 
 	 -2244DAa%,,0B0B!CD 4	
 "AMMa& " &&22DyyI,,,@P1P!"2;;"?NN ,[[9:;;abN &55	"& 3 	B	's   55F7
.F7
c                    ^ ^^^^ 0 mS[         4U 4S jjmS[        R                  R                  4U4S jjmUUUUU 4S jmT" T R                  5        g )Nr  c                 j   > U R                  S5      nTR                  nU H  n[        X#5      nM     U$ r   )r   ry  r   )r  r   r  r  r  s       r(   r   .TS2EPConverter.lift_get_attr.<locals>.get_attr$  s1    99S>DAAM Hr*   r   c                    > U R                  S5      nU R                  5       R                  5       nTU   nU(       a	  U SU 3nU$ UnU$ )Nr   r   )r   r   r   )r   r   r   r   r   r   s        r(   get_fqn-TS2EPConverter.lift_get_attr.<locals>.get_fqn+  sT    vI//1J2:>N:H.)9+6HO OXHOr*   c                   > U R                  5        GH.  nUR                  5       S:X  a#  UR                  5       R                  5       nST	U'   UR                  5       S:X  a  T" U5      nT" U5      nUR                  5       R                  5       nUT	U'   [	        U[
        R                  5      (       a   UT
R                  ;  a  UT
R                  U'   ON[	        U[
        R                  5      (       a   UT
R                  ;  a  UT
R                  U'   OUT
R                  U'   UR                  5        H  nT" U5        M     GM1     g )Nzprim::CreateObjectr  r   )r   r   r   r   rA   r   r   r  r  r  r  r   )r   r   rp  r   r8  r  _dfs_get_attrr   r  r   r  s         r(   r  3TS2EPConverter.lift_get_attr.<locals>._dfs_get_attr2  s   99;"66"&++-"9"9";K9;)+699;/1&t}H$X.E"&++-"9"9";K9A)+6!%66#4+>+>><AD//9#E5+=+=>>#4+@+@@>CD11(;GL::8D $H!(+ !.) &r*   )r   r   r	   rH  r   )r  r  r   r  r   s   `@@@@r(   r  TS2EPConverter.lift_get_attr  sC    " 13	# 		%((-- 		, 	,0 	dmm$r*   )	r  r  r  r  rX   rz  r{  r   ry  ra   )T)rB  rL  rM  rN  r   r   r   rC   rB   rD   r   r   rP  r   r  r   r  rv  r@  ro  r  rE  r  r  rR  rb   r*   r(   rx  rx  m  s     37	"		..		0H0HHI" 38_"  S#X/	"H2 2h S 4-HH  - sCx.-^9%r*   rx  )rename)jbuiltinsloggingr  rI   rx  collections.abcr   
contextlibr   r   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   	getLoggerrB  r@  r)   r<   nnModuler   rB   rD   r   rP   rC   r_   re   ri   rq   r  rE  r   r   r   r   r   r   uint8int8int16r  int64float16float32float64	complex32	complex64
complex128rm  qint8quint8bfloat16r   r  ri  r   maxminr  is_is_notnot_containsr    rw   rx   	sym_numelry   sym_storage_offset
sym_strider   rP  __annotations__r   r   rO  r   r   rH  r   r   r   rT  rv  rx  )r`  r8  s   00r(   <module>r     sb        $ % 1 1    A 9   ' !	"8/*%))":"::;/*CKC=/*
5;;[)39K9K0LLM/*d!H(@ehh&:&: @" c  ,s ,s ,& 
KK	JJ	KK	KK	KK	MM1	MM1	MM1	OOQ	OOQ	b	JJ	KK	LL"	NNB $ 6J5O5O5QR5Qzs
5QR 	'   ((LL]]"++# 99>>++))..))!IINN==IINN--= DhsCx&8!89 &0)M588>>M5
4C()4S>9:M5`S>162%((-- ,P' P'fE4!4 E4P    ]% ]%o$ Ss   %N