
    IЦi                        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JrJ	r	J
r
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  S SKJrJrJrJrJrJrJr  S SKJr  \R@                  " \!5      r"S	 r#S
 r$S\\RJ                  RL                  \RN                  RP                  4   S\\   S\\RR                  \	S   \\
\RT                     4   4S jr+S r,S r-S r.S\R^                  R`                  4S jr1S r2S:S\3S\3S\34S jjr4S\3S\34S jr5S r6\Rn                  S \Rp                  S\Rr                  S\Rt                  S\Rv                  S\Rx                  S\Rz                  S \R|                  S!\R~                  S"\R                  S#\R                  S$\R                  S%\R                  S&\R                  S'\R                  S(0rF\FR                  5        V Vs0 s H  u  pX_M	     snn rHS) rI\ R                  \ R                  \R                  \R                  \R                  \R                  \R                  \I\Q\R                  R                  R                  \R                  R                  R                  \R                  R                  R                  \R                  R                  R                  S*.rXS+ rYS, rZS-\R"                  RR                  S\\\R"                  R                  \\3   4   \\3\34   4   4S. jr\S/\\3\34   S0\R"                  R                  S\34S1 jr^S0\R"                  R                  4S2 jr_ " S3 S45      r` " S5 S6\`5      ra\S7 5       rb " S8 S95      rcgs  snn f );    N)contextmanager)AnyDictListOptionalSequenceSetTupleUnion)_C)'replace_quantized_ops_with_standard_ops)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          V/var/www/html/ai-image-ml/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+,1II,F,F" -G -)KM 
$$%@Auyy;;EBGGII:
 	

 !!r+   r6   r7   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   rA   graphAttributeErrorr5   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_lintr0   listvaluesr   r!   r1   	enumeratesetDebugName)r6   r7   flattened_argsr;   rF   efreezed_modulemoduleparamsr"   r#   r$   r'   r(   
state_dictgraph_inputsuser_input_numparam_namesiinps                       r)   _create_jit_graphr`   H   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_addrf   z   s	    5Lr+   c                     X/-   $ rb   rc   )	containerelements     r)   list_appendrj   ~   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 interation.
len_loop_local_arguments: The number of loop local arguments in args.
Nrc   )subgraphiter_idxlen_loop_local_argumentsr7   kwargsloop_local_argsglobal_argss          r)   execute_subgraph_from_prim_looprr      s<     445O
 01KG[G(G_GGGr+   gmc                 >    S nS n[         R                  " XU5      n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-  $ rb   )r   rx   ry   rz   r{   )r   r   r   r   s       r)   replacement2inplace_optimize_sym_size_div.<locals>.replacement   s)    yy~~..222;$$r+   )r   replace_pattern)rs   r   r   replaced_patternss       r)   inplace_optimize_sym_size_divr      s!    % *99"{S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!   r5   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      $ rb   )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_ENUMr5   )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::stridec                     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+   rF   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   rR   addr   rB   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_attrs8  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+   rc   )rF   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_attrZ  s+    (((..z$z:;;r+   prim::SetAttrr   z7Unexpected node kind when getting attribute fqn. node:  r   )r   r   nextr   r   r   r5   r   )r   r   r   
input_namer   root_attr_nameattr_fqns   `      r)   get_attribute_fqn_from_ts_noder   W  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getattrrx   default	Exceptionr5   r   )
r   
schema_strr   nsop_nameoverrideop_overload_modop_overload_packetop_overloadrV   s
             r)   get_op_overloadr   p  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      $ rb   )_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   kind_to_standard_operatorsr1   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      $ rb   )r  r  r  rB   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$ rb   )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_noderl   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      $ rb   )rB   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	  rl   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$ rb   )r   r   r   
kwarg_onlyget_fx_value_by_ir_valuer   r    rE   )r	  r   r   r7   ro   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  rB   r   r  r   r   r   get_fx_value_by_fqnr   )r	  r:  
value_name
input_nodes       r)   r6  ,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$ rb   )convert_graph_inputsr  r   convert_nodeconvert_graph_outputsr   r  GraphModuler  r  r  r  r  r   r   rF   lint)r	  r   rs   s      r)   r  TS2FXGraphConverter.convert9  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)rL  rM  
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  rB   r   r  
CUSTOM_OBJr   r   	ClassType
USER_INPUTr   r  )r	  graph_inputr   normalized_namerA  s        r)   rD  (TS2FXGraphConverter.convert_graph_inputsS  s   ==//1K((*D)))"0"6  ''!++*@# >MM4)@)@)B ,,,"0"6  ''!((*@##'	 >MM4)@)@)B ...!))$/1C1C  @?@  #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   r6  r   call_functionrE   r  r   r   )r	  r   r^  r_   inp_listrA  s         r)   convert_aten_Float&TS2FXGraphConverter.convert_aten_Float  sx    	2 ;?++-
:G3))#.- 	 
 ----(O
 8?$++-1134
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rb   )rB   r{   ).0rd   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)r7   ro   	to_tensors     r)   rM  7TS2FXGraphConverter.convert_aten_tensor.<locals>.target  s6    & VG_%@"6vg"Gwd-f--r+   N)r8  r   rx   ry   r   r   _schemaboolall_refsr   r   r   r`  r  )	r	  r   r7   ro   r  rM  output_namerA  rl  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rb   r6  )rg  r_   r	  s     r)   rh  :TS2FXGraphConverter.convert_aten_append.<locals>.<genexpr>  s     Q=CT22377=   !r   r   )warningswarnrE   r   r   r`  rj   r  r   r   inputsAtr   opr  r   )r	  r   r7   rA  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 )	Nr:  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   r:  constant_kind
alias_namerA  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   r6  r   call_methodr   rE   r  r   r   )r	  r   r_   ra  rA  s        r)   convert_prim_CallMethod+TS2FXGraphConverter.convert_prim_CallMethod  sy    :>++-
:G3))#.- 	 
 --++FF6N(O
 8?$++-1134
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  rr  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 rb   )r   r   r   r   r   r  r   r   r  r  r  )r	  r   r   rr  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 ::  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   rE   r   r6  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   r8  rn  r   r`  outputsSizer   r   r  rS   outputsoperatorgetitem)
r	  r   rM  r7   ro   rA  rr  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 rb   _convert_prim_iteratorr	  r   s     r)   convert_prim_TupleConstruct/TS2FXGraphConverter.convert_prim_TupleConstruct=      ##D)r+   c                 &    U R                  U5        g rb   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 rb   )r   r6  r   r   r  )r	  r   r_   output_listrr  s        r)   r  *TS2FXGraphConverter._convert_prim_iteratorC  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).)rS   r   r6  r   r   r  )r	  r   output_dictr  vr^   r_   rr  s           r)   convert_prim_DictConstruct.TS2FXGraphConverter.convert_prim_DictConstructI  s    .FA 1uz11#611#6Mam@?@3!"A!1 / I!)	UT	U# kkm--/)4+&r+   c                 &    U R                  U5        g rb   _convert_prim_unpack_iteratorr  s     r)   convert_prim_ListUnpack+TS2FXGraphConverter.convert_prim_ListUnpack`      **40r+   c                 &    U R                  U5        g rb   r  r  s     r)   convert_prim_TupleUnpack,TS2FXGraphConverter.convert_prim_TupleUnpackc  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 rb   )
rS   r  r   r6  r   r   r`  r  r  r  )r	  r   r^   r  	outp_namer_   rA  s          r)   r  1TS2FXGraphConverter._convert_prim_unpack_iteratorf  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rb   rw  rg  r   r	  s     r)   rh  7TS2FXGraphConverter.convert_aten_Int.<locals>.<genexpr>q       U}eT22599}ry  r   )r   rx   ry   _to_copyr   rE   r   r   r`  int32_local_scalar_denser   r   r  )r	  r   rM  r7   to_copy_noderA  rr  s   `      r)   convert_aten_Int$TS2FXGraphConverter.convert_aten_Intn  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rb   rw  r  s     r)   rh  ?TS2FXGraphConverter.convert_prim_NumToTensor.<locals>.<genexpr>  r  ry  r   )r   rx   ry   r|   rE   r   r   r`  longr   r   r  r	  r   rM  r7   rA  rr  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   rr  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 rb   )r   rx   ry   convolutionr   r8  rn  r   r`  r   r   r  )r	  r   rM  r7   ro   rA  rr  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   rn  r8  r   r   r  rB   r   r   numelrQ   r\  r   r`  rx   ry   r}   r~   rE   r   r   r  r  )r	  r   rM  r   r7   ro   	arg1_nametensor_constantupdated_argsrA  rr  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rb   rw  r  s     r)   rh  ?TS2FXGraphConverter.convert_aten___getitem__.<locals>.<genexpr>  s"      '
>KUD))%00mry  )	rE   r   r   r`  r  r  r   r   r  )r	  r   input_containerindexrA  rr  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rb   )rn  
is_mutable)rg  rM  s     r)   rh  6TS2FXGraphConverter.convert_aten_to.<locals>.<genexpr>  s      %8Df))s   "$r   Tr   )r   r8  rn  r   rx   ry   rZ  r   
prim_dtyper   usesuserr   anyr!   rQ   r   r`  rE   cloner   r   r  r  )r	  r   rM  r7   ro   use
user_nodes	user_nodeuser_targetshas_mutable_targetnew_argsrA  
clone_noderr  s                 r)   convert_aten_to#TS2FXGraphConverter.convert_aten_to  s    &++D..A 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 determind the target for )r   rB   r|  r   r   ListTyperx   ry   r   r]  r5   r   r8  rn  r   r   r   r`  rf   r  r  )r	  r   rM  r7   ro   rr  s         r)   convert_aten_add$TS2FXGraphConverter.convert_aten_add  s   ;;=M)$--*//15>>BBza %%'H H ++--"%H#OPP$T*FUYY^^'')))  //nnELD++-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   )rQ   r   r   r  r5   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   UXR%                  5       -   U-   '   M     GMn     g s  snf s  snf )Nr   r   r   )rQ   r   r  r6  r   r+  r   r   r   r(  r!   r   r  r<  ranger   r`  rr   r  rS   r  r  r  r  r  )r	  r   r   num_iterationsr_   loop_local_argumentsglobal_argumentsr   r!  r"  r#  r   fx_block_argsrm   	loop_noder^   r  rr  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+ ((**-BB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   r5   )r	  r  r   r   s       r)   _check_set_attr_in_if_block/TS2FXGraphConverter._check_set_attr_in_if_blocki  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  rQ   r   r!   r6  r+  r   r   r   r(  r<  rE   r   r`  r   condr  r   r   r  rS   r  r  r  )r	  r   r   	predicater   r   r!  r(   r   r  r7   	cond_noderr  r^   r   r  s                   r)   convert_prim_If#TS2FXGraphConverter.convert_prim_Ifs  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 rb   )_convert_as_noopr  s     r)   convert_aten_Bool%TS2FXGraphConverter.convert_aten_Bool  s    d#r+   c                     g rb   rc   r  s     r)   convert_prim_Enter&TS2FXGraphConverter.convert_prim_Enter  s    
 	r+   c                     g rb   rc   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   rn  r8  r   r   r  )r	  r   rM  r   r7   ro   rr  s          r)   r"  $TS2FXGraphConverter._convert_as_noop  sQ     !&++D9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rb   rw  r  s     r)   rh  MTS2FXGraphConverter.convert_profiler__record_function_exit.<locals>.<genexpr>  r  ry  )r   rx   profiler_record_function_exitrE   r   r   r`  )r	  r   rM  r7   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)r6  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 rb   )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rb   rw  r  s     r)   rh  BTS2FXGraphConverter._convert_standard_operators.<locals>.<genexpr>  r  ry  )	r  r   rE   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   r5   )r	  r   	node_kindr  handler_funcnode_strrV   s          r)   rE   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   rK  )r   r:  zOutput r   r   r   )r  r  r   rQ   r  r  r   rB   r   r  Noder}  r   r`  r  r    r  r   r   USER_OUTPUTr   r  r   r   r!   r   )r	  r7   r  outp_name_listrr  rA  s         r)   rF  )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)ErC  
__module____qualname____firstlineno__r   r   r   r   Blockr   r   r   r	   r   r  r  rI  r   r(  r+  r   r   r8  Valuer6  r<  r  rG  r  rD  rb  rs  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"  r2  r6  r9  r  rE  rF  __static_attributes__rc   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 rb   )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      $ rb   )rX  __contains__rY  __getitem__)r	  keyr[  s     r)   r_  0ExplainTS2FXGraphConverter._DictMock.__getitem__)  s/     7',,&7&s++r+   c                     gNTrc   )r	  r`  s     r)   r^  1ExplainTS2FXGraphConverter._DictMock.__contains__0  s    r+   )rY  )	rC  rM  rN  rO  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 rb   rc   rc   r+   r)   r
  5ExplainTS2FXGraphConverter.__init__.<locals>.<lambda>R  s    r+   rc   )	rX  r  unsupported_node_listrT  rg  r  r   r  rI  )	r	  r  r  r  r   r  r  r   r[  s	           r)   r  #ExplainTS2FXGraphConverter.__init__3  sq     	"(!	
 ;=" 7@@HHMM
r+   c                     U R                  5         U R                  R                  5        H  nU R                  U5        M     U R	                  5         g rb   )rD  r  r   rE  rF  r  s     r)   explain"ExplainTS2FXGraphConverter.explainX  s?    !!#MM'')Dd# *""$r+   c                    >  [         TU ]  U5        g ! [         a%  nU R                  R	                  U5         S nAg S nAff = frb   )rX  rE  r   rl  r    )r	  r   rV   r[  s      r)   rE  'ExplainTS2FXGraphConverter.convert_node^  s<    	4G & 	4&&--d33	4s    
A=A)r  rl  )rC  rM  rN  rO  __doc__dictrg  r   r   r   r   rP  r   r   r   r	   r   r  ro  rE  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)rA  rv  s     r)   disable_loggingrw  e  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)TS2EPConverterio  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rb   )shaperp  )rg  paramr   s     r)   rh  *TS2EPConverter.__init__.<locals>.<genexpr>  s:      !+||u{{2 ,Vu_))++!+s   ??)rz  r`   r  rY   r{  r|  r  r  rB   r   r   rC   rQ   
parametersrZ   itemsr  name_to_non_tensor_attributesr  lift_get_attr)r	  rz  r{  r|  r(   
param_listr  r   s          @r)   r  TS2EPConverter.__init__q  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.)rA  infor  r   r   r  r  r  r  r  r   print_readableretrace_as_exported_programrB   rz  r   r   rC   rZ   r  rz  r{  )r	  r   r   graph_converterrs   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  rS   r   r   r   r   print)	r	  r  r   r   r  explain_strr^   nrF  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+   rs   r  c                 R   [         R                  R                  R                  UU R                  SSS9nUR
                  R                  UR                  5        VVs0 s H8  u  pE[        U[         R                  [         R                  45      (       d  M6  XE_M:     snn5        U H  nUR                  R                  US 5        M!     [        UR                  R                  5       H  u  pgUR                   ["        R$                  :X  d  M%  UR&                  U;   d  M7  [        X'R&                     [         R                  5      (       d   [)        X'R&                     5       S35       e["        R*                  Ul        M     UR-                  5       R/                  U5        U$ s  snnf )NFT)r-   pre_dispatchz& has been erroneously marked as buffer)r   export_trace_exportr{  
_constantsupdater  rB   r   r  rZ   poprS   graph_signaturer  r   r   rQ  rM  r   CONSTANT_TENSORverifiercheck)r	  rs   r  r  r  r  r^   specs           r)   r  *TS2EPConverter.retrace_as_exported_program  sb    \\  ((	 ) 
 	 -2244DAa%,,0B0B!CD 4	
 "AMMa& " !!3!3!?!?@GAyyI,,,@P1P!$[[15<<  b+KK89::`ab  &55	 A 	B	%s   5F#
F#
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   rz  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   rB   r   r   r  r  r  r  r   )r   r   rr  r   r:  r	  _dfs_get_attrr   r  r   r	  s         r)   r  3TS2EPConverter.lift_get_attr.<locals>._dfs_get_attr+  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   rI  r  )r	  r  r   r  r   s   `@@@@r)   r  TS2EPConverter.lift_get_attr
  sC    " 13	# 		%((-- 		, 	,0 	dmm$r+   )	r  r  r  r  rY   r{  r|  r  rz  rb   )T)rC  rM  rN  rO  r   r   r   rD   rC   r
   r   r   r   r   r  r   r  rw  rA  ro  r  rG  r  r  rR  rc   r+   r)   ry  ry  o  s     37	"		..		0H0HHI" 38_"  S#X/	"H2 2h S 4$HH  $ sCx.$L9%r+   ry  )rename)dbuiltinsloggingr  rJ   rz  
contextlibr   r   r   r   r   r   r	   r
   r   r   torch.export._tracer   Atorch._export.passes.replace_quantized_ops_with_standard_ops_passr   torch.export.exported_programr   torch.export.graph_signaturer   r   r   r   r   r   r   torch.fxr   	getLoggerrC  rA  r*   r=   nnModuler   rC   r   rD   r`   rf   rj   rr   r  rG  r   r   r   r   r   r   uint8int8int16r  int64float16float32float64	complex32	complex64
complex128ro  qint8quint8bfloat16r   r  rk  r   maxminr  is_is_notnot_containsr!   rx   ry   	sym_numelrz   sym_storage_offset
sym_strider  r   r   rP  r   rI  r   r   r   rT  rw  ry  )r`  r:  s   00r)   <module>r     sD        % I I I    :   ' !	"8/*%))":"::;/*CKC=/*
5;;[)39K9K0LLM/*d!H(Tehh&:&: T" 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-- &0)M588>>M5
4C()4S>9:M5`S>162%((-- ,T' T'nE4!4 E4P    T% T%w$ Ss   M1