Ë
    g^(hêû  ã                   óä  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZ d dlZd dlZd dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZmZmZmZmZmZ d d
lmZ  ej@                  e!«      Z"d„ Z#d„ Z$deejJ                  jL                  ejN                  jP                  f   dee	   de)ejT                  e+d   e	e
ejX                     f   fd„Z-d„ Z.d„ Z/d„ Z0dejb                  jd                  fd„Z3d„ Z4d<de5de5de5fd„Z6de5de5fd„Z7d„ Z8ejr                  d ejt                  dejv                  dejx                  dejz                  d ej|                  d!ej~                  d"ej€                  d#ej‚                  d$ej„                  d%ej†                  d&ejˆ                  d'ejŠ                  d(ejŒ                  d)ejŽ                  d*iZHeHj“                  «       D � �ci c]  \  } }|| “Œ
 c}} ZJd+„ ZKe j˜                  e jš                  ejœ                  ejž                  ej                   ej¢                  ej¤                  eKeSej¨                  jª                  j¬                  ej¨                  jª                  j®                  ej¨                  jª                  j°                  ej¨                  jª                  j²                  d,œZZd-„ Z[d.„ Z\d/ej                  jT                  de)e]ej                  j¼                  e_e5   f   e]e5e5f   f   fd0„Z`d1e]e5e5f   d2ej                  jÂ                  de5fd3„Zbd2ej                  jÂ                  fd4„Zc G d5„ d6«      Zd G d7„ d8ed«      Zeed9„ «       Zf G d:„ d;«      Zgyc c}} w )=é    N)ÚSequence)Úcontextmanager)ÚAnyÚOptionalÚUnion)Ú_C)Ú'replace_quantized_ops_with_standard_ops)Ú_tree_map_with_pathÚDim)ÚExportedProgram)ÚConstantArgumentÚCustomObjArgumentÚ	InputKindÚ	InputSpecÚ
OutputKindÚ
OutputSpecÚTensorArgument)Úsubgraph_rewriterc                 ó$  — g }t        | j                  «       |«      D ]p  \  }}dt        |j                  «       «      v r=t        j
                  j                  |«      \  }}|j                  t        |«      «       Œ^|j                  |d u«       Œr |S )NÚPackedParams)	ÚzipÚinputsÚstrÚtypeÚtorchÚjitÚ_flattenÚappendÚlen)Úmethod_graphÚargs_paramsÚparam_count_listÚinput_Úarg_params_Úin_varsÚ_s          úU/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_export/converter.pyÚ_get_param_count_listr(   "   s„   € ØÐÜ" <×#6Ñ#6Ó#8¸+ÓFò =Ñˆ�ØœS §¡£Ó/Ñ/ÜŸ™×+Ñ+¨KÓ8‰JˆG�QØ×#Ñ#¤C¨£LÕ1à×#Ñ# K°tÐ$;Õ<ð=ð Ðó    c                 ó¦  — t         j                  j                  | «      j                  «       }t        j                  «       }t        j
                  d«       t         j                  j                  | |ddd¬«      \  }}}t        j
                  |«       |t         j                  j                  | «      j                  «       k7  rt        d«      ‚||fS )NFT)ÚstrictÚ_force_outplaceÚ_return_inputs_stateszXstate_dict changed after running the tracer; something weird is happening in your model!)r   r   Ú_unique_state_dictÚkeysÚis_autocast_cache_enabledÚset_autocast_cache_enabledÚ_get_trace_graphÚRuntimeError)ÚmodelÚargsÚorig_state_dict_keysÚprev_autocast_cache_enabledÚtrace_graphÚ	torch_outÚ_inputs_statess          r'   Ú_trace_and_get_graph_from_modelr;   .   sÁ   € ô !Ÿ9™9×7Ñ7¸Ó>×CÑCÓEÐô
 #(×"AÑ"AÓ"CÐÜ	×$Ñ$ UÔ+Ü-2¯Y©Y×-GÑ-GØØØØØ"ð .Hó .Ñ*€K�˜Nô 
×$Ñ$Ð%@ÔAàœuŸy™y×;Ñ;¸EÓB×GÑGÓIÒIÜð:ó
ð 	
ð
 ˜	Ð!Ð!r)   r4   r5   Úreturnz	_C.IValuec                 ó
  — t        | t        j                  j                  t        j                  j                  f«      �r¸t        t        j                  j                  t        |«      «      d   «      }d }t        | t        j                  j                  «      �r	 | j                  j                  }t        j                  |«       t        j                  t        j                  t        j                  | j                   «      d¬«      }t        j"                  |«      \  }}|j%                  d«      j                  }	t        |«      t        |«      z   }
t'        |	|
«      }t        j                  j                  |
«      \  }}t        j(                  |	t        |«      |dd«      }||||fS g }| j                  }t        j                  |«       t'        ||«      }t        j(                  |||dd«      }|||d fS t+        | |«      \  }}t        j,                  |«       t        j                  j/                  | «      }t1        |j3                  «       «      }t1        |j5                  «       «      }t7        |«      t7        |«      z
  }t1        |j9                  «       «      }t;        |«      D ]"  \  }}||k\  sŒ|j=                  |||z
     «       Œ$ t        j                  |«       |||d fS # t        $ r}t        d«      |‚d }~ww xY w)Nr   z('forward' method must be a script methodT)ÚpreserveParametersÚforwardF)Ú
isinstancer   r   ÚScriptFunctionÚScriptModuleÚtupler   r?   ÚgraphÚAttributeErrorr3   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   r/   Ú	enumerateÚsetDebugName)r4   r5   Úflattened_argsr9   rD   Ú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Ñ2´E·I±I×4JÑ4JÐKÕLÜœuŸy™y×1Ñ1´%¸³+Ó>¸qÑAÓBˆØˆ	ä�eœUŸY™Y×3Ñ3Õ4ðVØŸ™×+Ñ+�ô ×3Ñ3°EÔ:Ü×.Ñ.Ü—‘œBŸO™O¨U¯X©XÓ6È4ôˆNô  ×?Ñ?ÀÓO‰NˆF�FØ!×-Ñ-¨iÓ8×>Ñ>ˆLÜ ›+¬¨f«Ñ5ˆKÜ4°\À;ÓOÐÜŸ™×+Ñ+¨KÓ8‰JˆG�QÜ×9Ñ9Øœe G›nÐ.>ÀÀuóˆEð ˜& )¨VÐ3Ð3ð ˆØ—‘ˆÜ
×/Ñ/°Ô6Ü0°¸Ó=ÐÜ×5Ñ5Ø�>Ð#3°U¸Eó
ˆð �f˜i¨Ð-Ð-ä6°u¸dÓCÑ€Eˆ9Ü×Ñ˜5Ô!Ü—‘×-Ñ-¨eÓ4€JÜ�*×#Ñ#Ó%Ó&€FÜ˜Ÿ™›Ó'€LÜ˜Ó&¬¨Z«Ñ8€NÜ�z—‘Ó(Ó)€KÜ˜LÓ)ò >‰ˆˆ3Ø�ÓØ×Ñ˜[¨¨^Ñ);Ñ<Õ=ð>ô ×+Ñ+¨EÔ2Ø�&˜) TÐ)Ð)øôK "ò VÜ"Ð#MÓNÐTUÐUûðVús   ÂK( Ë(	LË1K=Ë=Lc                 ó   — | |z   S ©N© )ÚaÚbs     r'   Úlist_addrd   |   s   € Øˆq‰5€Lr)   c                 ó   — | |gz   S r`   ra   )Ú	containerÚelements     r'   Úlist_appendrh   €   s   € Ø˜�yÑ Ð r)   c                 ó4   — |d| }||d } | g |¢|‘|¢­i |¤ŽS )z 
    subgraph: GraphModule from sub-block.
    iter_idx: The index of interation.
    len_loop_local_arguments: The number of loop local arguments in args.
    Nra   )ÚsubgraphÚiter_idxÚlen_loop_local_argumentsr5   ÚkwargsÚloop_local_argsÚglobal_argss          r'   Úexecute_subgraph_from_prim_looprp   „   s?   € ð Ð4Ð4Ð5€Oð
 Ð/Ð0Ð1€KÙÐG�[ÐG (ÐG¨_ÒGÀÑGÐGr)   Úgmc                 ó>   — d„ }d„ }t        j                  | ||«       y )Nc                 ó’  — t         j                  j                  j                  j	                  | |«      }t         j                  j                  j                  |«      }t         j                  j                  j                  j                  ||d¬«      }t         j                  j                  j                  j                  |«      }|S )NÚtrunc)Úrounding_mode)
r   ÚopsÚatenÚsym_sizeÚintÚscalar_tensorÚdivÚScalar_modeÚIntÚTensor)ÚimÚdimÚscaleÚsym_size_intrz   Údiv_scalar_modeÚ
int_tensors          r'   Úpatternz.inplace_optimize_sym_size_div.<locals>.pattern™   sŠ   € Ü—y‘y—~‘~×.Ñ.×2Ñ2°2°sÓ;ˆÜŸ	™	Ÿ™×4Ñ4°\ÓBˆÜŸ)™)Ÿ.™.×,Ñ,×8Ñ8Ø˜5°ð 9ó 
ˆô —Y‘Y—^‘^×'Ñ'×.Ñ.¨Ó?ˆ
ØÐr)   c                 ót   — t         j                  j                  j                  j	                  | |«      }||z  S r`   )r   rv   rw   rx   ry   )r   r€   r�   r‚   s       r'   Úreplacementz2inplace_optimize_sym_size_div.<locals>.replacement¢   s-   € Ü—y‘y—~‘~×.Ñ.×2Ñ2°2°sÓ;ˆØ˜uÑ$Ð$r)   )r   Úreplace_pattern)rq   r…   r‡   s      r'   Úinplace_optimize_sym_size_divr‰   ˜   s    € òò%ô ×%Ñ% b¨'°;Õ?r)   c                 ó^   — t        | «      dk(  rt        d«      ‚| d   j                  «       ryy)Nr   zEmpty argument name for codegenFT)r   r3   Úisdigit©Únames    r'   Úis_valid_for_codegenrŽ   ©   s-   € Ü
ˆ4ƒy�A‚~ÜÐ<Ó=Ð=ØˆA�w‡�ÔØØr)   r�   Úprefixc                 óN   — | j                  dd«      } t        | «      r| S |› d| › �S )Nú.r&   )ÚreplacerŽ   )r�   r�   s     r'   Únormalize_namer“   ±   s0   € Ø�<‰<˜˜SÓ!€DÜ˜DÔ!ØˆØˆX�Q�t�fÐÐr)   c                 óL   — | j                  d«      }ddj                  |«      z   S )zprim::If -> convert_prim_Ifú::Úconvert_r&   )ÚsplitÚjoin)r�   Ú	name_lists     r'   Úir_name_to_func_namerš   ¸   s$   € à—
‘
˜4Ó €IØ˜Ÿ™ Ó+Ñ+Ð+r)   c                 óJ   — |r| j                  |«      S | j                  |«      S r`   )Úget_attrÚplaceholder)Úfx_graphr�   Úis_top_level_graphs      r'   Ú#get_node_as_placeholder_or_get_attrr    ¾   s'   € ÙØ× Ñ  Ó&Ð&Ø×Ñ Ó%Ð%r)   é   é   é   é   é   é   é   é   é	   é
   é   é   é   é   c                 óX   — | j                   }|t        vrt        d|› �«      ‚t        |   S )z¿
    prim::dtype has the signature "Tensor a) -> int", where it gets the dtype of
    the tensor and returns the integer corresponding to this dtype based on the
    enum in ScalarType.h
    zUnsupported dtype )ÚdtypeÚ_TORCH_DTYPE_TO_ENUMr3   )Útensorr°   s     r'   Úget_dtype_as_intr³   Ù   s4   € ð �L‰L€EØÔ(Ñ(ÜÐ/°¨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                 ó¦   — | j                  «       j                  «       | j                  «       j                  «       }}| j                  d«      }|||fS ©Nr�   )ÚinputÚ	debugNameÚoutputÚs)ÚnodeÚirv_parent_nameÚirv_nameÚ	attr_names       r'   Ú&get_ir_value_parent_name_and_attr_namer¾   û   sC   € Ø $§
¡
£× 6Ñ 6Ó 8¸$¿+¹+»-×:QÑ:QÓ:S�X€OØ—‘�v“€IØ�_ iÐ/Ð/r)   c                 ó~   — g }| |v r|j                  ||    «       ||    } | |v rŒdj                  t        |«      «      S ©Nr‘   )r   r˜   Úreversed)ÚirÚref_mapÚname_mapr™   s       r'   Úconstruct_fqnrÅ     sH   € Ø€IØ
�‰-Ø×Ñ˜ "™Ô&Ø�R‰[ˆð �Š-ð �8‰8”H˜YÓ'Ó(Ð(r)   rD   c                 ó^   ‡‡‡‡‡— i Ši Ši Šˆˆˆfd„Šˆˆˆˆfd„Š ‰| «        ‰| «       ‰‰fS )a–  
    Perform two passes to get a mapping of blocks to a set of FQNs of its lifted attributes.
    When a graph has control flow, the graph will be divided into multiple blocks. We want to convert
    each block to a graph which will be passed into torch.cond. A restriction for torch.cond is that model
    parameters/buffers are expected to be lifted as inputs to the subgraphs. Before converting the model,
    we will run this pass which will:
        1. Figure out which params/buffers are used within blocks through tracing the GetAttr calls.
        2. Process the graph bottom up to find the lifted attributes of each block by taking the union
        of the attributes used in the current block, and the lifted attributes of all its child blocks.

    Returns:
        A mapping of blocks to a set of FQNs of its lifted attributes, and a
        mapping of node names to the FQNs of its lifted attributes.
    c                 óÂ   •— | j                  «       D ]K  }|j                  «       dk(  rt        |«      \  }}}|‰|<   |‰|<   |j                  «       D ]
  } ‰|«       Œ ŒM y)zI
        First DFS path to construct reference map and name map.
        úprim::GetAttrN)ÚnodesÚkindr¾   Úblocks)	Úentryrº   r¼   r»   r½   ÚblockÚ_dfs_get_attr_dependencyÚnode_to_attr_nameÚnode_to_parent_maps	         €€€r'   rÎ   z;get_block_to_lifted_attrs.<locals>._dfs_get_attr_dependency*  ss   ø€ ð —K‘K“Mò 
	0ˆDØ�y‰y‹{˜oÒ-ô
 ;¸4Ó@ñ	ØØ#Øà/>Ð" 8Ñ,Ø.7Ð! (Ñ+ØŸ™›ò 0�Ù(¨Õ/ñ0ñ
	0r)   c                 óÄ  •— t        «       }| j                  «       D ]˜  }|j                  «       D ]  }|j                   ‰|«      «      }Œ |j	                  «       dk(  sŒC|j                  «       j                  «       }|t        ‰j                  «       «      vsŒ}|j                  t        |‰‰«      «       Œš t        | t        j                  j                  «      s|‰| <   |S )z|
        Walk the graph in a bottom-up fashion to build the expected to be
        lifted arguments for each block.
        rÈ   )ÚsetrÉ   rË   ÚunionrÊ   r¸   r·   rP   ÚaddrÅ   r@   r   r   ÚGraph)	rÌ   Ú	argumentsrº   rÍ   r¼   Ú_map_blocks_to_lifted_attrsÚblocks_to_lifted_attrsrÏ   rÐ   s	        €€€€r'   r×   z>get_block_to_lifted_attrs.<locals>._map_blocks_to_lifted_attrs:  sÈ   ø€ ô
 "›eˆ	Ø—K‘K“Mò 	ˆDØŸ™›ò P�à%ŸO™OÑ,GÈÓ,NÓO‘	ðPð �y‰y‹{˜oÓ-ØŸ;™;›=×2Ñ2Ó4�ð ¤3Ð'9×'@Ñ'@Ó'BÓ#CÒCØ—M‘MÜ% hÐ0BÐDUÓVõð	ô ˜%¤§¡§¡Ô0Ø,5Ð" 5Ñ)ØÐr)   ra   )rD   rÎ   r×   rØ   rÏ   rÐ   s    @@@@@r'   Úget_block_to_lifted_attrsrÙ   	  sD   ü€ ð& >@Ðð *,Ðð )+Ðö0÷ ñ2 ˜UÔ#Ù Ô&à!Ð#4Ð4Ð4r)   Úname_to_attribute_fqnrº   c                 ód  ‡ — dt         fˆ fd„}|j                  «       dk(  r(t        |j                  «       «      j	                  «       }nA|j                  «       dk(  r|j                  «       j	                  «       }nt        d|› d�«      ‚|j                  d«      } ||«      }|r	|› d|› �}|S |}|S )Nr�   c                 ó4   •— | ‰v r‰|    S t        d| › d�«      ‚©Nz
Attribute ú
 not found)Ú
ValueError)r�   rÚ   s    €r'   rœ   z0get_attribute_fqn_from_ts_node.<locals>.get_attr\  s+   ø€ ØÐ(Ñ(Ø(¨Ñ.Ð.ä˜z¨$¨¨zÐ:Ó;Ð;r)   úprim::SetAttrrÈ   z7Unexpected node kind when getting attribute fqn. node: ú r‘   )r   rÊ   Únextr   r·   r¶   r3   r¹   )rÚ   rº   rœ   Ú
input_namer½   Úroot_attr_nameÚattr_fqns   `      r'   Úget_attribute_fqn_from_ts_noderæ   Y  s²   ø€ ð<”sõ <ð ‡y�yƒ{�oÒ%Ü˜$Ÿ+™+›-Ó(×2Ñ2Ó4‰
Ø	�‰‹˜Ò	'Ø—Z‘Z“\×+Ñ+Ó-‰
äØEÀdÀVÈ1ÐMó
ð 	
ð —‘�v“€IÙ˜jÓ)€NÙ2@�.Ð!  9 +Ð.€Hà€Oð GP€Hà€Or)   c                 óî  — | j                  «       }|dk7  s
J d| › �«       ‚t        j                  j                  |«      }t	        |j
                  «      j                  d«      \  }}|j                  }	 t        t        j                  |«      }t        ||«      }|rt        ||«      }|S |j                  }	 |S # t        $ r3}	t        d| j                  «       › d| j                  «       › �«      |	‚d }	~	ww xY w)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Úgetattrrv   ÚdefaultÚ	Exceptionr3   rÊ   )
rº   Ú
schema_strré   ÚnsÚop_nameÚoverrideÚop_overload_modÚop_overload_packetÚop_overloadrT   s
             r'   Úget_op_overloadrö   r  sñ   € Ø—‘“€JØ˜Ò&ÐFÐ*?À¸vÐ(FÓFÐ&Ü&+§h¡h×&;Ñ&;¸JÓ&G€FÜ�f—k‘kÓ"×(Ñ(¨Ó.�K€BˆØ×#Ñ#€Hð
Ü!¤%§)¡)¨RÓ0ˆÜ$ _°gÓ>ÐÙÜ!Ð"4°hÓ?ˆKð Ðð -×4Ñ4‰Kð Ðøô ò ÜØ& t§y¡y£{ m°=ÀÇÁÃÀÐPó
àð	ûðús   Á34B8 Â)B8 Â8	C4Ã.C/Ã/C4c                   ó|	  — e Zd Zdeej
                  j                  ej
                  j                  f   dee	ej                  f   dee	ej                  f   deej
                  j                  ee	   f   dee	ef   dee	ef   dee	e	f   fd„Zd	„ Zd
ej
                  j                  dee	   fd„Zd„ Zd„ Zde	fd„Zd
ej
                  j                  fd„Zdej
                  j,                  fd„Zd„ Zdej2                  j4                  fd„Zd„ Zd
ej
                  j                  fd„Zd
ej
                  j                  fd„Zd
ej
                  j                  fd„Zd
ej
                  j                  fd„Z d
ej
                  j                  fd„Z!d
ej
                  j                  fd„Z"d
ej
                  j                  fd„Z#d
ej
                  j                  fd„Z$d
ej
                  j                  fd„Z%d
ej
                  j                  fd „Z&d
ej
                  j                  fd!„Z'd
ej
                  j                  fd"„Z(d
ej
                  j                  fd#„Z)d
ej
                  j                  fd$„Z*d
ej
                  j                  fd%„Z+d
ej
                  j                  fd&„Z,d
ej
                  j                  fd'„Z-d
ej
                  j                  fd(„Z.d
ej
                  j                  fd)„Z/d
ej
                  j                  fd*„Z0d
ej
                  j                  fd+„Z1d
ej
                  j                  fd,„Z2d
ej
                  j                  fd-„Z3d
ej
                  j                  fd.„Z4d/„ Z5d
ej
                  j                  fd0„Z6d1ej
                  j                  fd2„Z7d
ej
                  j                  fd3„Z8d
ej
                  j                  fd4„Z9d
ej
                  j                  fd5„Z:d
ej
                  j                  fd6„Z;d
ej
                  j                  fd7„Z<d
ej
                  j                  fd8„Z=d
ej
                  j                  fd9„Z>d
ej
                  j                  fd:„Z?d
ej
                  j                  fd;„Z@d
ej
                  j                  fd<„ZAd=„ ZBy>)?ÚTS2FXGraphConverterÚts_graphÚname_to_paramÚname_to_bufferrØ   Úname_to_non_tensor_attributeÚname_to_constantrÚ   c                 óz  ‡ — |‰ _         |‰ _        |‰ _        t        j                  j                  «       ‰ _        g ‰ _        g ‰ _        i ‰ _	        |‰ _
        |‰ _        i ‰ _        |‰ _        i ‰ _        |‰ _        t         j#                  «       D ]  }t%        |«      }	t'        ‰ |	ˆ fd„«       Œ t)        «       ‰ _        y )Nc                 ó&   •— ‰j                  | «      S r`   )Ú_convert_standard_operators)rº   Úselfs    €r'   ú<lambda>z.TS2FXGraphConverter.__init__.<locals>.<lambda>Å  s   ø€ ˜T×=Ñ=¸dÓC€ r)   )rù   rú   rû   r   ÚfxrÕ   rž   Úinput_specsÚoutput_specsÚname_to_noderý   rÚ   Ú!name_to_non_tensor_attribute_noderü   Ú	subgraphsrØ   Úkind_to_standard_operatorsr/   rš   ÚsetattrrÒ   Ú#name_update_from_subblock_to_parent)
r  rù   rú   rû   rØ   rü   rý   rÚ   ÚkÚhandler_func_names
   `         r'   Ú__init__zTS2FXGraphConverter.__init__‰  sÎ   ø€ ð !ˆŒà*ˆÔà,ˆÔä(-¯©¯©Ó(8ˆŒØ,.ˆÔØ.0ˆÔð
 ð 	Ôð
 1AˆÔð 6KˆÔ"ð BDˆÔ.ð
 =YˆÔ)à:<ˆŒð '=ˆÔ#ô ,×0Ñ0Ó2ò 	ˆAÜ 4°QÓ 7Ðô ØØ!ÛCõð		ô >A»UˆÕ0r)   c                 ó°   — || j                   v xsG || j                  v xs7 || j                  v xr' t        | j                  |   t        j
                  «      S r`   )rû   rú   rý   r@   r   ÚScriptObject)r  Úfqns     r'   Ú_is_get_attr_nodez%TS2FXGraphConverter._is_get_attr_nodeÏ  s^   € à�4×&Ñ&Ð&ò Ø�d×(Ñ(Ð(òð �t×,Ñ,Ð,ò OÜ˜t×4Ñ4°SÑ9¼5×;MÑ;MÓNð	
r)   rº   rÖ   c           
      óò  — g g }}|j                  «       D ]Ý  }t        || j                  | j                  | j                  i | j
                  | j                  «      }|D ]7  }t        |«      }|j                  j                  |«      }	|	|j                  |<   Œ9 |j                  «       }
| j                  |
«      }|j                  | j                  j                  |«      «       |j                  |«       Œß ||fS r`   )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_noderj   Úsubgraph_names               r'   Ú_convert_block_to_subgraphz.TS2FXGraphConverter._convert_block_to_subgraphÙ  s  € Ø.0°"Ð+ˆØ—[‘[“]ò 	;ˆEÜ!4ØØ×"Ñ"Ø×#Ñ#Ø×+Ñ+ØØ×%Ñ%Ø×*Ñ*ó"Ðð 'ò N�	Ü,:¸9Ó,EÐ)Ø#5×#>Ñ#>×#JÑ#JØ-ó$Ð ð >NÐ"×/Ñ/°	Ò:ðNð *×1Ñ1Ó3ˆHØ ×-Ñ-¨hÓ7ˆMØ×!Ñ! $§-¡-×"8Ñ"8¸Ó"GÔHØ×&Ñ&Ð'9Õ:ð+	;ð, Ð2Ð2Ð2r)   c                 óŠ  — t        «       }|j                  «       D ]¥  }|j                  «       D ]�  }|j                  «       D ][  }|j	                  «       | j
                  v sŒ |j	                  «       | j                  vsŒ=|j                  |j	                  «       «       Œ] |j                  | j                  |«      «      }Œ’ Œ§ |S )aW  
        Identify inputs from the innermost sub-block. This is needed
        for nested sub-blocks when the input is hidden in the nested sub-block.
        E.g., example IR of input is hidden in the nested sub-block.
        Graph[x.1]
        %1 = ...
            Block[]
                Block[x.1]
                    %2 = x.1 ...
        )
rÒ   rË   rÉ   r   r·   r  rÚ   rÔ   rÓ   Ú_identify_inputs_as_arguments)r  rÌ   rÖ   rÍ   Ú
block_nodeÚblock_node_ins         r'   r  z1TS2FXGraphConverter._identify_inputs_as_argumentsó  s¸   € ô "›eˆ	Ø—\‘\“^ò 
	ˆEØ#Ÿk™k›mò 	�
Ø%/×%6Ñ%6Ó%8ò A�Mà%×/Ñ/Ó1°T×5FÑ5FÒFØ)×3Ñ3Ó5¸T×=WÑ=WÒWà!Ÿ™ m×&=Ñ&=Ó&?Õ@ðAð &ŸO™OØ×6Ñ6°zÓBó‘	ñ	ð
	ð Ðr)   c                 ó^   — t        | j                  t        j                  j                  «      S r`   )r@   rù   r   r   rÕ   )r  s    r'   rŸ   z&TS2FXGraphConverter.is_top_level_graph  s   € Ü˜$Ÿ-™-¬¯©¯©Ó8Ð8r)   r<   c                 óT   — dt        | j                  «      › �}|| j                  |<   |S )NÚ	subgraph_)r   r  )r  rj   r�   s      r'   r  z TS2FXGraphConverter.add_subgraph  s+   € Øœ3˜tŸ~™~Ó.Ð/Ð0ˆØ'ˆ�‰�tÑØˆr)   c                 ó  — g }i }t        |j                  «       |j                  «      D ]P  \  }}|j                  r| j	                  |«      ||j
                  <   Œ1|j                  | j	                  |«      «       ŒR t        |«      |fS r`   )r   r   rÖ   Ú
kwarg_onlyÚget_fx_value_by_ir_valuer�   r   rC   )r  rº   ré   r5   rm   r¶   Ú
schema_args          r'   Úget_args_kwargsz#TS2FXGraphConverter.get_args_kwargs  s   € ØˆØˆÜ!$ T§[¡[£]°F×4DÑ4DÓ!Eò 	BÑˆE�:Ø×$Ò$Ø*.×*GÑ*GÈÓ*N��z—‘Ò'à—‘˜D×9Ñ9¸%Ó@ÕAð		Bô �T‹{˜FÐ"Ð"r)   Úvaluec                 ó”  — |j                  «       }|| j                  v r| j                  |   }|S || j                  v rQt        | j                  |   t        j
                  «      r| j                  j                  |«      S | j                  |   S || j                  v r| j                  | j                  |   «      S t        d|› d�«      ‚)NzInput rÞ   )r·   r  rý   r@   r   r  rž   rœ   rÚ   Úget_fx_value_by_fqnrß   )r  r*  Ú
value_nameÚ
input_nodes       r'   r'  z,TS2FXGraphConverter.get_fx_value_by_ir_value  s¿   € Ø—_‘_Ó&ˆ
à˜×*Ñ*Ñ*Ø×*Ñ*¨:Ñ6ˆJØÐØ˜4×0Ñ0Ñ0Ü˜$×/Ñ/°
Ñ;¼U×=OÑ=OÔPØ—}‘}×-Ñ-¨jÓ9Ð9Ø×(Ñ(¨Ñ4Ð4Ø˜4×5Ñ5Ñ5Ø×+Ñ+¨D×,FÑ,FÀzÑ,RÓSÐSä˜v j \°Ð<Ó=Ð=r)   c                 ó  — || j                   v r| j                   |   }|S || j                  v r| j                  |   }|S || j                  v r| j                  |   }|S || j                  v r| j                  |   }|S t	        d|› d�«      ‚rÝ   )r  rý   r  rü   rß   )r  r�   Úfx_nodes      r'   r,  z'TS2FXGraphConverter.get_fx_value_by_fqn.  s²   € Ø�4×$Ñ$Ñ$Ø×'Ñ'¨Ñ-ˆGð ˆð �T×*Ñ*Ñ*Ø×+Ñ+¨DÑ1ˆGð ˆð �T×;Ñ;Ñ;Ø×<Ñ<¸TÑBˆGð
 ˆð	 �T×6Ñ6Ñ6Ø×7Ñ7¸Ñ=ˆGð ˆô ˜z¨$¨¨zÐ:Ó;Ð;r)   c                 ó¼  — | j                  «        | j                  j                  «       D ]  }| j                  |«       Œ | j	                  «        t
        j                  j                  i | j                  ¥| j                  ¥| j                  ¥| j                  ¥| j                  ¥| j                  «      }t        |«       |j                  j!                  «        |S r`   )Úconvert_graph_inputsrù   rÉ   Úconvert_nodeÚconvert_graph_outputsr   r  ÚGraphModuler  rú   rû   rü   rý   rž   r‰   rD   Úlint)r  rº   rq   s      r'   r  zTS2FXGraphConverter.convert;  sÐ   € Ø×!Ñ!Ô#à—M‘M×'Ñ'Ó)ò 	$ˆDØ×Ñ˜dÕ#ð	$ð 	×"Ñ"Ô$ô �X‰X×!Ñ!ðØ—.‘.ðà×$Ñ$ðð ×%Ñ%ðð ×3Ñ3ð	ð
 ×'Ñ'ðð �M‰Mó	
ˆô 	& bÔ)à
�‰�‰Œàˆ	r)   c           
      ó   — | j                   j                  «       D �]`  }|j                  «       }|| j                  v rqt	        |«      }| j
                  j                  t        t        j                  t        |¬«      |¬«      «       t        | j                  || j                  «       «      }�n¿|| j                  v rrt	        |«      }| j
                  j                  t        t        j                  t        |¬«      |d¬«      «       t        | j                  || j                  «       «      }�n?|| j                   v r t#        | j                   |   t$        j&                  «      sJ d«       ‚t	        |«      }| j
                  j                  t        t        j(                  t+        ||¬«      |d¬«      «       t        | j                  || j                  «       «      }n‘t#        |j-                  «       t$        j.                  «      r�Œët	        |d¬	«      }| j
                  j                  t        t        j0                  t        |¬«      |¬«      «       | j                  j3                  |«      }|| j4                  |<   �Œc y )
NrŒ   ©ÚargÚtargetT)r9  r:  Ú
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ý   r@   r   r  Ú
CUSTOM_OBJr   r   Ú	ClassTypeÚ
USER_INPUTr�   r  )r  Úgraph_inputr�   Únormalized_namer0  s        r'   r2  z(TS2FXGraphConverter.convert_graph_inputsU  s(  € ØŸ=™=×/Ñ/Ó1ó <	.ˆKØ×(Ñ(Ó*ˆDà�t×)Ñ)Ñ)Ü"0°Ó"6�Ø× Ñ ×'Ñ'ÜÜ!×+Ñ+Ü*°Ô@Ø#ôôô >Ø—M‘M 4¨×)@Ñ)@Ó)Bó’ð ˜×,Ñ,Ñ,Ü"0°Ó"6�Ø× Ñ ×'Ñ'ÜÜ!×(Ñ(Ü*°Ô@Ø#Ø#'ô	ôô >Ø—M‘M 4¨×)@Ñ)@Ó)Bó’ð ˜×.Ñ.Ñ.Ü!Ø×)Ñ)¨$Ñ/´×1CÑ1Côð @à?ó@ð ô #1°Ó"6�Ø× Ñ ×'Ñ'ÜÜ!×,Ñ,Ü-Ø!0¸Oôð  $Ø#(ôô	ô >Ø—M‘M 4¨×)@Ñ)@Ó)Bó‘ô ˜K×,Ñ,Ó.´·±Ô@áä"0°¸gÔ"F�Ø× Ñ ×'Ñ'ÜÜ!×,Ñ,Ü*°Ô@Ø#ôôð Ÿ-™-×3Ñ3°OÓD�à&-ˆD×Ñ˜dÓ#ñy<	.r)   c                 ó  — d„ }|j                  «       D �cg c]  }| j                  |«      ‘Œ }}| j                  j                  |t	        |«      «      }|| j
                  |j                  «       j                  «       <   y c c}w )Nc                 ó^   — | j                  t        j                  ¬«      j                  «       S )N)r°   )Útor   ÚfloatÚitem)Úts    r'   Úto_float_tensorz?TS2FXGraphConverter.convert_aten_Float.<locals>.to_float_tensor•  s    € Ø—4‘4œeŸk™k�4Ó*×/Ñ/Ó1Ð1r)   )r   r'  rž   Úcall_functionrC   r  r¸   r·   )r  rº   rJ  r]   Úinp_listr0  s         r'   Úconvert_aten_Floatz&TS2FXGraphConverter.convert_aten_Float”  sz   € ò	2ð ;?¿+¹+»-ö
Ø36ˆD×)Ñ)¨#Õ.ð
ˆð 
ð —-‘-×-Ñ-ØÜ�(‹Oó
ˆð 8?ˆ×Ñ˜$Ÿ+™+›-×1Ñ1Ó3Ò4ùò
s   –Bc                 óî  ‡— | j                  |t        j                  j                  j                  j
                  j                  «      \  }}|D ]  }|dk(  sŒ	t        ||   «      ||<   Œ t        d„ |D «       «      rt        j                  nt        j                  j                  Šˆfd„}|j                  «       j                  «       }| j                  j                  |||«      }|| j                  |<   y)z9aten::tensor creates a constant tensor ad-hoc --> GetAttrÚrequires_gradc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr`   )r@   ry   )Ú.0rb   s     r'   ú	<genexpr>z:TS2FXGraphConverter.convert_aten_tensor.<locals>.<genexpr>«  s   è ø€ Ò4¨!”:˜a¤×%Ñ4ùs   ‚c                  óD   •— d|v r|d   �t         |d      |d<    ‰| i |¤ŽS )Nr°   )Ú_TORCH_ENUM_TO_DTYPE)r5   rm   Ú	to_tensors     €r'   r:  z7TS2FXGraphConverter.convert_aten_tensor.<locals>.target¯  s6   ø€ Ø˜&Ñ  V¨G¡_Ð%@Ü"6°v¸g±Ñ"G��w‘Ù˜dÐ- fÑ-Ð-r)   N)r)  r   rv   rw   r²   rí   Ú_schemaÚboolÚallÚ_refsr¸   r·   rž   rK  r  )	r  rº   r5   rm   r  r:  Úoutput_namer0  rU  s	           @r'   Úconvert_aten_tensorz'TS2FXGraphConverter.convert_aten_tensor¡  sÉ   ø€ à×+Ñ+¨D´%·)±)·.±.×2GÑ2G×2OÑ2O×2WÑ2WÓX‰ˆˆfàò 	,ˆAØ�OÓ#Ü  ¨¡›O��q’	ð	,ô Ñ4¨tÔ4Ô4ô �LŠLä—‘×#Ñ#ð 	ô	.ð —k‘k“m×-Ñ-Ó/ˆØ—-‘-×-Ñ-¨f°d¸FÓCˆØ)0ˆ×Ñ˜+Ò&r)   c                 ó  ‡ — t        j                  d«       t        ˆ fd„|j                  «       D «       «      }‰ j                  j                  t        |«      }|‰ j                  |j                  «       j                  «       <   |‰ j                  |j                  d«      j                  «       <   ‰ j                  «       sL|d   j                  dk(  r9‰ j                  j                  |j                  d«      j                  «       «       y y y )Nz±Converting 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   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr`   ©r'  )rQ  r]   r  s     €r'   rR  z:TS2FXGraphConverter.convert_aten_append.<locals>.<genexpr>È  s   øè ø€ ÒQ¸C�T×2Ñ2°3×7ÑQùó   ƒr   r�   )ÚwarningsÚwarnrC   r   rž   rK  rh   r  r¸   r·   ÚinputsAtrŸ   Úopr  rÔ   )r  rº   r5   r0  s   `   r'   Úconvert_aten_appendz'TS2FXGraphConverter.convert_aten_append½  sÕ   ø€ ô 	�‰ð|ô	
ô
 ÓQÀ4Ç;Á;Ã=ÔQÓQˆØ—-‘-×-Ñ-¬k¸4Ó@ˆØ7>ˆ×Ñ˜$Ÿ+™+›-×1Ñ1Ó3Ñ4ð ;Bˆ×Ñ˜$Ÿ-™-¨Ó*×4Ñ4Ó6Ñ7ð ×&Ñ&Ô(¨T°!©W¯Z©Z¸=Ò-HØ×4Ñ4×8Ñ8¸¿¹ÀqÓ9I×9SÑ9SÓ9UÕVð .IÐ(r)   c                 ó,  — |j                  «       j                  «       }d }|j                  d«      rÒ|j                  d«      }|dk(  r|j	                  d«      }n¬|dk(  r|j                  d«      }n•|dk(  r|j                  d«      }n~|dk(  rCd|› �}| j                  j                  |«      }|| j                  |<   ||j                  d«      }}n6|dk(  r|j                  d«      }nt        d|j                  d«      › �«      ‚d }|| j                  |<   y )	Nr*  r\   Úfr¹   rI  Úlifted_tensor_ÚivalzUnsupported constant type: )r¸   r·   ÚhasAttributeÚkindOfr\   rf  r¹   rž   rœ   r  rI  rh  rß   rý   )r  rº   r�   r*  Úconstant_kindÚ
alias_namer0  s          r'   Úconvert_prim_Constantz)TS2FXGraphConverter.convert_prim_ConstantÓ  s  € Ø�{‰{‹}×&Ñ&Ó(ˆàˆØ×Ñ˜WÔ%Ø ŸK™K¨Ó0ˆMØ Ò#ØŸ™˜w›‘Ø #Ò%ØŸ™˜w›‘Ø #Ò%ØŸ™˜w›‘Ø #Ò%à$ T FÐ+ð ð Ÿ-™-×0Ñ0°Ó<�Ø*1�×!Ñ! $Ñ'Ø(¨$¯&©&°«/�e‘Ø &Ò(ØŸ	™	 'Ó*‘ä Ð#>¸t¿{¹{È7Ó?SÐ>TÐ!UÓVÐVàˆEà&+ˆ×Ñ˜dÒ#r)   c                 ó$  — |j                  «       D �cg c]  }| j                  |«      ‘Œ }}| j                  j                  |j	                  d«      t        |«      «      }|| j                  |j                  «       j                  «       <   y c c}w rµ   )	r   r'  rž   Úcall_methodr¹   rC   r  r¸   r·   )r  rº   r]   rL  r0  s        r'   Úconvert_prim_CallMethodz+TS2FXGraphConverter.convert_prim_CallMethodï  s{   € à:>¿+¹+»-ö
Ø36ˆD×)Ñ)¨#Õ.ð
ˆð 
ð —-‘-×+Ñ+Ø�F‰F�6‹NÜ�(‹Oó
ˆð 8?ˆ×Ñ˜$Ÿ+™+›-×1Ñ1Ó3Ò4ùò
s   “Bc                 óF  — |j                  «       j                  «       }|j                  t        j                  j
                  j                  «       «      r>|j                  «       }|j                  «       j                  «       }|| j                  |<   y t        d|› d�«      ‚)NzUnsupported JitType (z) when get device)r¶   r   ÚisSubtypeOfr   r   Ú
TensorTypeÚgetÚdevicer¸   r·   rý   rß   )r  rº   Ú
input_typeru  rZ  s        r'   Úconvert_prim_devicez'TS2FXGraphConverter.convert_prim_deviceù  s   € Ø—Z‘Z“\×&Ñ&Ó(ˆ
Ø×!Ñ!¤%§(¡(×"5Ñ"5×"9Ñ"9Ó";Ô<Ø×&Ñ&Ó(ˆFØŸ+™+›-×1Ñ1Ó3ˆKØ17ˆD×!Ñ! +Ò.äÐ4°Z°LÐ@QÐRÓSÐSr)   c                 ó  — t        | j                  |«      }|j                  «       j                  «       }|| j                  |<   | j	                  «       r�| j                  |«      r)| j                  j                  |«      | j                  |<   y || j                  vr| j                  |   | j                  |<   | j                  |   | j                  |<   y | j                  |«      r| j                  |   | j                  |<   y y r`   )ræ   rÚ   r¸   r·   rŸ   r  rž   rœ   r  r  rü   )r  rº   rå   rZ  s       r'   Úconvert_prim_GetAttrz(TS2FXGraphConverter.convert_prim_GetAttr  sô   € ä1°$×2LÑ2LÈdÓSˆØ—k‘k“m×-Ñ-Ó/ˆØ2:ˆ×"Ñ" ;Ñ/à×"Ñ"Ô$Ø×%Ñ% hÔ/ð 26·±×1GÑ1GÈÓ1Q�×!Ñ! +Ò.à 4×#IÑ#IÑIð ×9Ñ9¸(ÑCð ×:Ñ:Ø ñð 26×1WÑ1WØñ2�×!Ñ! +Ò.ð ×%Ñ% hÔ/Ø15×1BÑ1BÀ8Ñ1L�×!Ñ! +Ò.ð 0r)   c                 ón  — t        | j                  |«      }t        |j                  «       «      d   }| j	                  |«      }| j                  |«      rR| j                  j                  |«      }| j                  j                  t        j                  j                  ||f«       y || j                  |<   y ©Nr¡   )ræ   rÚ   rC   r   r'  r  rž   rœ   rK  r   r~   Úcopy_r  )r  rº   rå   Ú
attr_valueÚts_graph_tensor_inputÚfx_attr_nodes         r'   Úconvert_prim_SetAttrz(TS2FXGraphConverter.convert_prim_SetAttr  s—   € Ü1°$×2LÑ2LÈdÓSˆÜ˜4Ÿ;™;›=Ó)¨!Ñ,ˆ
Ø $× =Ñ =¸jÓ IÐØ×!Ñ! (Ô+ØŸ=™=×1Ñ1°(Ó;ˆLØ�M‰M×'Ñ'Ü—‘×"Ñ" \Ð3HÐ$Iõð @UˆD×2Ñ2°8Ò<r)   c                 óì  — t        |«      }| j                  ||j                  «      \  }}| j                  j	                  |||«      }|j                  «       dk(  r.|j                  «       j                  «       }|| j                  |<   y t        |j                  «       «      D ]P  \  }}|j                  «       }| j                  j	                  t        j                  ||f«      }	|	| j                  |<   ŒR y r{  )rö   r)  rV  rž   rK  ÚoutputsSizer¸   r·   r  rQ   ÚoutputsÚoperatorÚgetitem)
r  rº   r:  r5   rm   r0  rZ  r\   ÚoutpÚnext_fx_nodes
             r'   Úconvert_call_function_opz,TS2FXGraphConverter.convert_call_function_op*  sÔ   € Ü  Ó&ˆà×+Ñ+¨D°&·.±.ÓA‰ˆˆfà—-‘-×-Ñ-¨f°d¸FÓCˆð
 ×ÑÓ Ò"ØŸ+™+›-×1Ñ1Ó3ˆKØ-4ˆD×Ñ˜kÒ*ä$ T§\¡\£^Ó4ò >‘��4Ø"Ÿn™nÓ.�Ø#Ÿ}™}×:Ñ:Ü×$Ñ$ w° ló �ð 2>�×!Ñ! +Ò.ñ>r)   c                 ó&   — | j                  |«       y r`   ©Ú_convert_prim_iterator©r  rº   s     r'   Úconvert_prim_TupleConstructz/TS2FXGraphConverter.convert_prim_TupleConstruct?  ó   € Ø×#Ñ# DÕ)r)   c                 ó&   — | j                  |«       y r`   rŠ  rŒ  s     r'   Úconvert_prim_ListConstructz.TS2FXGraphConverter.convert_prim_ListConstructB  rŽ  r)   c                 óÀ   — |j                  «       D �cg c]  }| j                  |«      ‘Œ }}|j                  «       j                  «       }|| j                  |<   y c c}w r`   )r   r'  r¸   r·   r  )r  rº   r]   Úoutput_listrZ  s        r'   r‹  z*TS2FXGraphConverter._convert_prim_iteratorE  sP   € ØEIÇ[Á[Ã]ÖS¸c�t×4Ñ4°SÕ9ÐSˆÐSà—k‘k“m×-Ñ-Ó/ˆØ)4ˆ×Ñ˜+Ò&ùò Ts   “Ac                 óD  — i }d\  }}t        |j                  «       «      D ]E  \  }}|dz  dk(  r| j                  |«      }Œ | j                  |«      }|�|€J d«       ‚|||<   d\  }}ŒG |€|�J d«       ‚|j                  «       j	                  «       }|| j
                  |<   y )N)NNr¢   r   z*DictConstruct has an empty key value pair.zGDictConstruct has an odd number of elements (violating our assumption).)rQ   r   r'  r¸   r·   r  )r  rº   Úoutput_dictr  Úvr\   r]   rZ  s           r'   Úconvert_prim_DictConstructz.TS2FXGraphConverter.convert_prim_DictConstructK  sË   € ØˆØ‰ˆˆ1Ü §¡£Ó.ò 	"‰FˆAˆsð �1‰u˜ŠzØ×1Ñ1°#Ó6‘à×1Ñ1°#Ó6�à�M a mð@à?ó@Ø3à!"�˜A‘Ø!‘�‘1ð	"ð ˆI˜!˜)ð	UàTó	UØ#ð —k‘k“m×-Ñ-Ó/ˆØ)4ˆ×Ñ˜+Ò&r)   c                 ó&   — | j                  |«       y r`   ©Ú_convert_prim_unpack_iteratorrŒ  s     r'   Úconvert_prim_ListUnpackz+TS2FXGraphConverter.convert_prim_ListUnpackb  ó   € Ø×*Ñ*¨4Õ0r)   c                 ó&   — | j                  |«       y r`   r˜  rŒ  s     r'   Úconvert_prim_TupleUnpackz,TS2FXGraphConverter.convert_prim_TupleUnpacke  r›  r)   c                 ó  — t        |j                  «       «      D ]o  \  }}|j                  «       }| j                  |j	                  «       «      }| j
                  j                  t        j                  ||f«      }|| j                  |<   Œq y r`   )
rQ   rƒ  r·   r'  r¶   rž   rK  r„  r…  r  )r  rº   r\   r†  Ú	outp_namer]   r0  s          r'   r™  z1TS2FXGraphConverter._convert_prim_unpack_iteratorh  sr   € ä  §¡£Ó0ò 	3‰GˆAˆtØŸ™Ó(ˆIØ×/Ñ/°·
±
³Ó=ˆCØ—m‘m×1Ñ1´(×2BÑ2BÀSÈ!ÀHÓMˆGØ+2ˆD×Ñ˜iÒ(ñ		3r)   c                 óì  ‡ — t         j                  j                  j                  j                  }t        ˆ fd„|j                  «       D «       «      }‰ j                  j                  ||dt         j                  i«      }‰ j                  j                  t         j                  j                  j                  j                  |f«      }|j                  «       j                  «       }|‰ j                  |<   y )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr`   r^  ©rQ  r¶   r  s     €r'   rR  z7TS2FXGraphConverter.convert_aten_Int.<locals>.<genexpr>s  ó   øè ø€ ÒU¸e�T×2Ñ2°5×9ÑUùr_  r°   )r   rv   rw   Ú_to_copyrí   rC   r   rž   rK  Úint32Ú_local_scalar_denser¸   r·   r  )r  rº   r:  r5   Úto_copy_noder0  rZ  s   `      r'   Úconvert_aten_Intz$TS2FXGraphConverter.convert_aten_Intp  s¨   ø€ ä—‘—‘×(Ñ(×0Ñ0ˆÜÓUÀtÇ{Á{Ã}ÔUÓUˆØ—}‘}×2Ñ2°6¸4À'Ì5Ï;É;ÐAWÓXˆà—-‘-×-Ñ-Ü�I‰I�N‰N×.Ñ.×6Ñ6¸¸ó
ˆð —k‘k“m×-Ñ-Ó/ˆØ)0ˆ×Ñ˜+Ò&r)   c                 óF  ‡ — t         j                  j                  j                  }t	        ˆ fd„|j                  «       D «       «      }‰ j                  j                  ||dt         j                  i«      }|j                  «       j                  «       }|‰ j                  |<   y )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr`   r^  r¢  s     €r'   rR  z?TS2FXGraphConverter.convert_prim_NumToTensor.<locals>.<genexpr>ˆ  r£  r_  r°   )r   rv   rw   rz   rC   r   rž   rK  Úlongr¸   r·   r  ©r  rº   r:  r5   r0  rZ  s   `     r'   Úconvert_prim_NumToTensorz,TS2FXGraphConverter.convert_prim_NumToTensor€  ss   ø€ ô —‘—‘×-Ñ-ˆÜÓUÀtÇ{Á{Ã}ÔUÓUˆà—-‘-×-Ñ-¨f°d¸WÄeÇjÁjÐ<QÓRˆØ—k‘k“m×-Ñ-Ó/ˆØ)0ˆ×Ñ˜+Ò&r)   c                 ó^   — |j                  «       j                  «       }d| j                  |<   y )NÚ )r¸   r·   rÚ   ©r  rº   rZ  s      r'   Úconvert_prim_CreateObjectz-TS2FXGraphConverter.convert_prim_CreateObjectŽ  s&   € Ø—k‘k“m×-Ñ-Ó/ˆØ24ˆ×"Ñ" ;Ò/r)   c                 ó2  — t         j                  j                  j                  j                  }| j                  ||j                  «      \  }}| j                  j                  |||«      }|j                  «       j                  «       }|| j                  |<   y r`   )r   rv   rw   Úconvolutionrí   r)  rV  rž   rK  r¸   r·   r  )r  rº   r:  r5   rm   r0  rZ  s          r'   Úconvert_aten__convolutionz-TS2FXGraphConverter.convert_aten__convolution’  ss   € ô —‘—‘×+Ñ+×3Ñ3ˆØ×+Ñ+¨D°&·.±.ÓA‰ˆˆfà—-‘-×-Ñ-¨f°d¸FÓCˆà—k‘k“m×-Ñ-Ó/ˆØ)0ˆ×Ñ˜+Ò&r)   c                 óÀ  — t        |«      }|j                  }| j                  ||«      \  }}|j                  dk(  �r|d   j                  }|| j
                  v rôt        | j
                  |   t        j                  «      rÍ| j
                  |   }|j                  «       dk(  r«t        |«      }| j
                  |   j                  «       |d<   | j                  j                  t        j                  j                  j                   j"                  t%        |«      |«      }	|j'                  «       j)                  «       }
|	| j*                  |
<   y | j-                  |«       y )NÚTensor_moder¡   )rö   rV  r)  rë   r�   rý   r@   r   r~   ÚnumelrO   rH  rž   rK  rv   rw   r{   r|   rC   r¸   r·   r  rˆ  )r  rº   r:  ré   r5   rm   Ú	arg1_nameÚtensor_constantÚupdated_argsr0  rZ  s              r'   Úconvert_aten_divz$TS2FXGraphConverter.convert_aten_div�  s'  € Ü  Ó&ˆØ—‘ˆà×+Ñ+¨D°&Ó9‰ˆˆfð ×Ñ =Ó0Ø˜Q™Ÿ™ˆIØ˜D×1Ñ1Ñ1´jØ×%Ñ% iÑ0´%·,±,ô7ð #'×"7Ñ"7¸	Ñ"B�Ø"×(Ñ(Ó*¨aÒ/Ü#'¨£:�LØ&*×&;Ñ&;¸IÑ&F×&KÑ&KÓ&M�L ‘Oà"Ÿm™m×9Ñ9ÜŸ	™	Ÿ™×*Ñ*×6Ñ6Ü˜lÓ+Øó�Gð #'§+¡+£-×"9Ñ"9Ó";�KØ5<�D×%Ñ% kÑ2Øà×%Ñ% dÕ+r)   c                 ó  ‡ — t        ˆ fd„|j                  «       D «       «      \  }}‰ j                  j                  t        j
                  ||f«      }|j                  «       j                  «       }|‰ j                  |<   y )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr`   r^  r¢  s     €r'   rR  z?TS2FXGraphConverter.convert_aten___getitem__.<locals>.<genexpr>¿  s!   øè ø€ ò '
Ø5:ˆD×)Ñ)¨%×0ñ'
ùr_  )	rC   r   rž   rK  r„  r…  r¸   r·   r  )r  rº   Úinput_containerÚindexr0  rZ  s   `     r'   Úconvert_aten___getitem__z,TS2FXGraphConverter.convert_aten___getitem__¾  sq   ø€ Ü!&ó '
Ø>B¿k¹k»mô'
ó "
Ñˆ˜ð —-‘-×-Ñ-Ü×Ñ˜°Ð6ó
ˆð —k‘k“m×-Ñ-Ó/ˆØ)0ˆ×Ñ˜+Ò&r)   c                 ó  — t        |«      }| j                  ||j                  «      \  }}|t        j                  j
                  j                  j                  k(  s2|t        j                  j
                  j                  j                  k(  �r\|j                  «       j                  «       D �cg c]  }|j                  ‘Œ }}|D �cg c]   }|j                  «       dk7  rt        |«      ‘Œ" }}t        d„ |D «       «      }	|	rèt        |«      dk\  sJ ‚t        |«      }
d|
d<   | j                   j#                  t        j                  j
                  j                  j                  t%        |
«      «      }| j                   j#                  t        j                  j
                  j&                  j(                  |f«      }|j                  «       j+                  «       }|| j,                  |<   y | j/                  |«       y c c}w c c}w )Nrè   c              3   óH   K  — | ]  }|j                   j                  –— Œ y ­wr`   )rV  Ú
is_mutable)rQ  r:  s     r'   rR  z6TS2FXGraphConverter.convert_aten_to.<locals>.<genexpr>Ø  s   è ø€ ò %Ø.4�—‘×)Õ)ñ%ùs   ‚ "r¤   Tr£   )rö   r)  rV  r   rv   rw   rF  r°   Ú
prim_dtyper¸   ÚusesÚuserré   Úanyr   rO   rž   rK  rC   Úclonerí   r·   r  rˆ  )r  rº   r:  r5   Ú_kwargsÚuseÚ
user_nodesÚ	user_nodeÚuser_targetsÚhas_mutable_targetÚnew_argsr0  Ú
clone_noderZ  s                 r'   Úconvert_aten_toz#TS2FXGraphConverter.convert_aten_toÈ  sŸ  € Ü  Ó&ˆØ×,Ñ,¨T°6·>±>ÓB‰ˆˆgð ”U—Y‘Y—^‘^×&Ñ&×,Ñ,Ò,°¼%¿)¹)¿.¹.×:KÑ:K×:VÑ:VÓ0VØ.2¯k©k«m×.@Ñ.@Ó.BÖC s˜#Ÿ(›(ÐCˆJÐCð ",öàØ×#Ñ#Ó%¨Ò6ô   	Õ*ðˆLð ô
 "%ñ %Ø8Dô%ó "Ðñ "Ü˜4“y A’~Ð%�~Ü ›:�Ø"�˜‘ØŸ-™-×5Ñ5Ü—I‘I—N‘N×%Ñ%×+Ñ+¬U°8«_ó�ð
 "Ÿ]™]×8Ñ8Ü—I‘I—N‘N×(Ñ(×0Ñ0°7°*ó�
ð #Ÿk™k›m×5Ñ5Ó7�Ø1;�×!Ñ! +Ñ.Øà×%Ñ% dÕ+ùò5 Dùòs   Â.G<Ã%Hc                 óð  — |j                  «       dk(  r«t        |j                  d«      j                  «       t        j
                  «      rft        |j                  d«      j                  «       t        j
                  «      r/t        j                  j                  j                  j                  }nt        d|› �«      ‚t        |«      }|t        j                  j                  j                  j                  k(  rk| j                  ||j                  «      \  }}|j                  «       j                  «       }| j                   j#                  t$        |«      | j&                  |<   y | j)                  |«       y )Nrè   r   r¡   z#unable to determind the target for )ré   r@   rb  r   r   ÚListTyperv   rw   rÔ   rI  r3   rö   r)  rV  r¸   r·   rž   rK  rd   r  rˆ  )r  rº   r:  r5   rÉ  rZ  s         r'   Úconvert_aten_addz$TS2FXGraphConverter.convert_aten_addî  s  € Ø�;‰;‹=˜MÒ)Ü˜$Ÿ-™-¨Ó*×/Ñ/Ó1´5·>±>ÔBÄzØ—‘˜aÓ ×%Ñ%Ó'¬¯©ôHô Ÿ™Ÿ™×+Ñ+×-Ñ-‘ä"Ð%HÈÈÐ#OÓPÐPä$ TÓ*ˆFà”U—Y‘Y—^‘^×'Ñ'×)Ñ)Ò)ð !×0Ñ0°°v·~±~ÓF‰MˆD�'ØŸ+™+›-×1Ñ1Ó3ˆKØ-1¯]©]×-HÑ-HÌÐSWÓ-XˆD×Ñ˜kÒ*à×)Ñ)¨$Õ/r)   c                 ó@  — t        |j                  «       «      }|d   j                  «       | j                  vrt	        d«      ‚t        |j                  «       «      }t        |j                  «       «      j                  «       }|j                  «       D ]ˆ  }|j                  «       dk(  r,|j                  «       j                  «       |k(  rt	        d«      ‚|j                  «       dk\  sŒV|j                  «       D ]   }|j                  «       |k(  sŒt	        d«      ‚ ŒŠ y )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¢   )rO   r   r·   rý   r3   râ   rË   rƒ  rÉ   r‚  r¸   )r  rº   r   ÚsubblockÚcondition_output_namer†  s         r'   Ú_check_prim_loop_supportz,TS2FXGraphConverter._check_prim_loop_support  s  € Ü�d—k‘k“mÓ$ˆð �!‰9×ÑÓ ¨×(=Ñ(=Ñ=ÜØ]óð ô
 ˜Ÿ™›Ó&ˆÜ $ X×%5Ñ%5Ó%7Ó 8× BÑ BÓ DÐØ—N‘NÓ$ò 	ˆDà× Ñ Ó" aÒ'Ø—K‘K“M×+Ñ+Ó-Ð1FÒFä"ØVóð ð ×ÑÓ! QÓ&Ø ŸL™L›Nò �DØ—~‘~Ó'Ð+@Ó@Ü*Ø^óð ññ	r)   c           	      ól  — t        |j                  «       «      }| j                  |«       | j                  |d   «      }|dd  D �cg c]  }|j	                  «       ‘Œ }}| j                  |«      }|j                  «       D ]   }|j                  | j                  |   «      }Œ" t        |«      }| j                  ||«      \  }}	t        |«      dk(  sJ ‚|	d   }
| j                  «       s*| j                  j                  |
j                  «      | _        ||z   D �cg c]  }| j                  |«      ‘Œ }}t        |«      D �]i  }| j                  j!                  t"        |d   |t        |«      g|¢­i «      }|j%                  «       dk\  rt'        |j)                  «       «      D ]c  \  }}|j	                  «       }| j                  j!                  t*        j,                  ||dz   f«      | j.                  |<   | j.                  |   ||<   Œe t'        |
j                  «      D ]‰  \  }}| j                  j!                  t*        j,                  |||j%                  «       z   dz   f«      | j.                  |<   |j1                  |«      }| j.                  |   |||j%                  «       z   |z   <   Œ‹ �Œl y c c}w c c}w )Nr   r¢   r¡   )rO   r   rØ  r'  r·   r  rË   rÓ   rØ   r  r   rŸ   r  r,  Úrangerž   rK  rp   r‚  rQ   rƒ  r„  r…  r  r¿  )r  rº   r   Únum_iterationsr]   Úloop_local_argumentsÚglobal_argumentsrÍ   r  r  r  r�   Úfx_block_argsrk   Ú	loop_noder\   r†  rZ  Úglobal_argument_indexs                      r'   Úconvert_prim_Loopz%TS2FXGraphConverter.convert_prim_Loop  sç  € Ü�d—k‘k“mÓ$ˆØ×%Ñ% dÔ+à×6Ñ6°v¸a±yÓAˆð <BÀ!À"¸:ÖF°C §¡¥ÐFÐÐ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Ò&Ü(¨¯©«Ó8ò 	F‘G�A�tØ"&§.¡.Ó"2�KØ59·]±]×5PÑ5PÜ ×(Ñ(à%Ø ™Eðó6�D×%Ñ% kÑ2ð (,×'8Ñ'8¸Ñ'E�M !Ò$ð	Fô %Ø"×FÑFóò ,‘��4ð +/¯-©-×*EÑ*EÜ×$Ñ$à!Ø˜D×,Ñ,Ó.Ñ.°Ñ2ðó+�×!Ñ! $Ñ'ð )9×(>Ñ(>¸tÓ(DÐ%ð ×%Ñ% dÑ+ð Ø˜×(Ñ(Ó*Ñ*Ð-BÑBòò,ñ7(	,ùò;  Gùò2
s   ÁJ,ÄJ1Úif_nodec                 ó”   — |j                  «       D ]5  }|j                  «       D ]   }|j                  «       dk(  sŒt        d«      ‚ Œ7 y )Nrà   z�During 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Ê   r3   )r  râ  rÍ   rº   s       r'   Ú_check_set_attr_in_if_blockz/TS2FXGraphConverter._check_set_attr_in_if_blockk  sM   € Ø—^‘^Ó%ò 	ˆEØŸ™›ò �Ø—9‘9“; /Ó1Ü&ð-óð ññ	r)   c                 óÐ  — | j                  |«       t        |j                  «       «      }t        |«      dk(  sJ ‚| j	                  |d   «      }| j                  |«      }|j                  «       D ]   }|j                  | j                  |   «      }Œ" t        |«      }| j                  ||«      \  }}t        |«      dk(  sJ ‚|D �cg c]  }| j                  |«      ‘Œ }	}||d   |d   t        |	«      f}
| j                  j                  t        j                  |
i «      }|j!                  «       dk(  r.|j#                  «       j%                  «       }|| j&                  |<   y |j!                  «       dkD  rmt)        |j+                  «       «      D ]P  \  }}|j%                  «       }| j                  j                  t,        j.                  ||f«      }|| j&                  |<   ŒR y y c c}w )Nr¡   r   r¢   )rä  rO   r   r   r'  r  rË   rÓ   rØ   r  r,  rC   rž   rK  r   Úcondr‚  r¸   r·   r  rQ   rƒ  r„  r…  )r  rº   r   Ú	predicaterÖ   rÍ   r  r&   r�   rÞ  r5   Ú	cond_noderZ  r\   r¸   r…  s                   r'   Úconvert_prim_Ifz#TS2FXGraphConverter.convert_prim_Ifu  sÏ  € Ø×(Ñ(¨Ô.ä�d—k‘k“mÓ$ˆÜ�6‹{˜aÒÐÐØ×1Ñ1°&¸±)Ó<ˆ	ð ×6Ñ6°tÓ<ˆ	ð —[‘[“]ò 	LˆEØ!Ÿ™¨×(CÑ(CÀEÑ(JÓK‰Ið	Lô ˜“Oˆ	Ø ×;Ñ;¸DÀ)ÓLÑˆ˜ä�>Ó" aÒ'Ð'Ð'àDMÖN¸D˜×1Ñ1°$Õ7ÐNˆÐNð Ø˜1ÑØ˜1ÑÜ�-Ó ð	
ˆð —M‘M×/Ñ/´·
±
¸DÀ"ÓEˆ	ð ×ÑÓ Ò"ØŸ+™+›-×1Ñ1Ó3ˆKØ-6ˆD×Ñ˜kÒ*Ø×ÑÓ !Ò#Ü& t§|¡|£~Ó6ò 9‘	��6Ø$×.Ñ.Ó0�ØŸ-™-×5Ñ5´h×6FÑ6FÈÐTUÈÓW�Ø18�×!Ñ! +Ò.ñ9ð $ùò Os   ÃG#c                 ó&   — | j                  |«       y r`   )Ú_convert_as_nooprŒ  s     r'   Úconvert_aten_Boolz%TS2FXGraphConverter.convert_aten_Bool�  s   € Ø×Ñ˜dÕ#r)   c                  ó   — y r`   ra   rŒ  s     r'   Úconvert_prim_Enterz&TS2FXGraphConverter.convert_prim_Enter   s   € ð
 	r)   c                  ó   — y r`   ra   rŒ  s     r'   Úconvert_prim_Exitz%TS2FXGraphConverter.convert_prim_Exit§  s   € àr)   c                 ó¼   — t        |«      }|j                  }| j                  ||«      \  }}|j                  «       j	                  «       }|d   | j
                  |<   y )Nr   )rö   rV  r)  r¸   r·   r  )r  rº   r:  ré   r5   rÉ  rZ  s          r'   rë  z$TS2FXGraphConverter._convert_as_noop«  sU   € ô ! Ó&ˆØ—‘ˆà×,Ñ,¨T°6Ó:‰ˆˆgà—k‘k“m×-Ñ-Ó/ˆØ)-¨a©ˆ×Ñ˜+Ò&r)   c                 óÊ   ‡ — t         j                  j                  j                  }t	        ˆ fd„|j                  «       D «       «      }‰ j                  j                  ||«       y )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr`   r^  r¢  s     €r'   rR  zMTS2FXGraphConverter.convert_profiler__record_function_exit.<locals>.<genexpr>»  r£  r_  )r   rv   ÚprofilerÚ_record_function_exitrC   r   rž   rK  )r  rº   r:  r5   s   `   r'   Ú&convert_profiler__record_function_exitz:TS2FXGraphConverter.convert_profiler__record_function_exit¶  sD   ø€ ô —‘×#Ñ#×9Ñ9ˆÜÓUÀtÇ{Á{Ã}ÔUÓUˆØ�‰×#Ñ# F¨DÕ1r)   c                 óì   — d}| j                  t        |j                  «       «      «      f}| j                  j	                  ||«      }|j                  «       j                  «       }|| j                  |<   y )NÚtolist)r'  râ   r   rž   ro  r¸   r·   r  r¬  s         r'   Úconvert_prim_tolistz'TS2FXGraphConverter.convert_prim_tolist¾  sa   € ð ˆØ×-Ñ-¬d°4·;±;³=Ó.AÓBÐDˆØ—-‘-×+Ñ+¨F°DÓ9ˆØ—k‘k“m×-Ñ-Ó/ˆØ)0ˆ×Ñ˜+Ò&r)   c                 ó‚   — |j                  «       j                  «       }t        j                  «       | j                  |<   y r`   )r¸   r·   r   r~   rý   r°  s      r'   Úconvert_prim_Uninitializedz.TS2FXGraphConverter.convert_prim_UninitializedÇ  s.   € ð
 —k‘k“m×-Ñ-Ó/ˆÜ-2¯\©\«^ˆ×Ñ˜kÒ*r)   c                 ó
  ‡ — t         |j                  «          }t        ˆ fd„|j                  «       D «       «      }‰ j                  j                  ||«      }|j                  «       j                  «       }|‰ j                  |<   y )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr`   r^  r¢  s     €r'   rR  zBTS2FXGraphConverter._convert_standard_operators.<locals>.<genexpr>Ñ  r£  r_  )	r	  rÊ   rC   r   rž   rK  r¸   r·   r  r¬  s   `     r'   r   z/TS2FXGraphConverter._convert_standard_operatorsÏ  sc   ø€ Ü+¨D¯I©I«KÑ8ˆÜÓUÀtÇ{Á{Ã}ÔUÓUˆØ—-‘-×-Ñ-¨f°dÓ;ˆØ—k‘k“m×-Ñ-Ó/ˆØ)0ˆ×Ñ˜+Ò&r)   c                 óT  — |j                  «       }t        |«      }t        | || j                  «      }dj	                  t        |«      j                  d«      d d «      }t        j                  d|j                  |«       	  ||«       y # t        $ r}t        d|› �«      |‚d }~ww xY w)Nr¯  ú
r¡   z[%s] converts [%s]zTS2EPConverter failed for node )rÊ   rš   rì   rˆ  r˜   r   r—   ÚlogÚdebugÚ__name__rî   r3   )r  rº   Ú	node_kindr  Úhandler_funcÚnode_strrT   s          r'   r3  z TS2FXGraphConverter.convert_nodeÖ  s    € Ø—I‘I“Kˆ	ô
 1°Ó;ÐÜ˜tÐ%6¸×8UÑ8UÓVˆð
 —7‘7œ3˜t›9Ÿ?™?¨4Ó0°°!Ð4Ó5ˆÜ�	‰	Ð&¨×(=Ñ(=¸xÔHð	UÙ˜ÕøÜò 	UÜÐ!@ÀÀÐLÓMÐSTÐTûð	Uús   ÂB
 Â
	B'ÂB"Â"B'c                 ó¼  — g }| j                   j                  «       D �cg c]  }|j                  «       ‘Œ c}t        | j                  «      z   }|D �]g  }|| j
                  v rÎ| j
                  |   }| j                  «       s^t        |t        j                  j                  «      r:|j                  dk(  r+| j                  j                  t        j                  |f«      }|j                  |«       | j                   j                  t#        t$        j&                  t)        |¬«      |¬«      «       Œà|| j*                  v rm|j                  | j*                  |   «       | j                   j                  t#        t$        j&                  t-        || j*                  |   ¬«      |¬«      «       �Œ[t/        d|› d�«      ‚ t1        |«      dk(  r| j                  j3                  g «       y t1        |«      dk(  r| j                  j3                  |d   «       y t1        |«      dkD  r| j                  j3                  |«       y | j                  j3                  |«       y c c}w )	Nr�   rŒ   r8  )r�   r*  zOutput rÞ   r   r¡   )rù   rƒ  r·   rO   r  r  rŸ   r@   r   r  ÚNoderc  rž   rK  rÈ  r   r  r   r   ÚUSER_OUTPUTr   rý   r   rß   r   r¸   )r  r5   r†  Úoutp_name_listrZ  r0  s         r'   r4  z)TS2FXGraphConverter.convert_graph_outputsé  s÷  € ØˆØ7;·}±}×7LÑ7LÓ7NÖO¨t˜$Ÿ.™.Õ*ÒOÔRVØ×4Ñ4óS
ñ 
ˆð *ó 	DˆKØ˜d×/Ñ/Ñ/Ø×+Ñ+¨KÑ8�ð ×/Ñ/Ô1Ü" 7¬E¯H©H¯M©MÔ:ØŸ
™
 mÒ3à"Ÿm™m×9Ñ9¼%¿+¹+ÈÀzÓR�GØ—‘˜GÔ$Ø×!Ñ!×(Ñ(ÜÜ"×.Ñ.Ü*°Ô<Ø*ôõð  × 5Ñ 5Ñ5Ø—‘˜D×1Ñ1°+Ñ>Ô?Ø×!Ñ!×(Ñ(ÜÜ"×.Ñ.Ü,Ø!,°D×4IÑ4IÈ+Ñ4Vôð  +ôöô ! 7¨;¨-°zÐ!BÓCÐCð?	DôB ˆt‹9˜Š>à�M‰M× Ñ  Õ$Ü�‹Y˜!Š^Ø�M‰M× Ñ Ø�Q‘õô �‹Y˜Š]Ø�M‰M× Ñ Øõð
 �M‰M× Ñ  Õ&ùòc Ps   ŸIN)Cr  Ú
__module__Ú__qualname__r   r   r   rÕ   ÚBlockÚdictr   r~   rÒ   r   r  r  r  rO   r  r  rŸ   r  r)  ÚValuer'  r,  r  r5  r  r2  rM  r[  rd  rm  rp  rw  ry  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   r3  r4  ra   r)   r'   rø   rø   ˆ  s-  „ ðDCà˜Ÿ™Ÿ™¨¯©¯©Ð6Ñ7ðDCð ˜C §¡Ð-Ñ.ðDCð ˜S %§,¡,Ð.Ñ/ð	DCð
 !% U§X¡X§^¡^°S¸±XÐ%=Ñ >ðDCð '+¨3°¨8¡nðDCð ˜s C˜x™.ðDCð  $ C¨ H™~óDCòL
ð3¨u¯x©x¯}©}ð 3ÈÈcÉó 3ò4ò29ð¨ó ð
	# E§H¡H§M¡Mó 	#ð>¨e¯h©h¯n©nó >òð˜Ÿ™×-Ñ-ó ò4=.ð~? u§x¡x§}¡}ó ?ð1¨¯©¯©ó 1ð8W¨¯©¯©ó Wð,,¨%¯(©(¯-©-ó ,ð8?¨E¯H©H¯M©Mó ?ðT¨¯©¯©ó TðM¨¯©¯©ó Mð8
U¨¯©¯©ó 
Uð>¨U¯X©X¯]©]ó >ð**°·±·±ó *ð*¨u¯x©x¯}©}ó *ð5¨5¯8©8¯=©=ó 5ð5¨u¯x©x¯}©}ó 5ð.1¨E¯H©H¯M©Mó 1ð1¨U¯X©X¯]©]ó 1ð3°%·(±(·-±-ó 3ð1 U§X¡X§]¡]ó 1ð 1¨U¯X©X¯]©]ó 1ð5¨e¯h©h¯m©mó 5ð	1¨e¯h©h¯m©mó 	1ð, U§X¡X§]¡]ó ,ðB1¨U¯X©X¯]©]ó 1ð$, E§H¡H§M¡Mó $,ðL0 U§X¡X§]¡]ó 0ò(ð6L, e§h¡h§m¡mó L,ð\°5·8±8·=±=ó ð&9 E§H¡H§M¡Mó &9ðP$ e§h¡h§m¡mó $ð u§x¡x§}¡}ó ð e§h¡h§m¡mó ð	1 U§X¡X§]¡]ó 	1ð2¸5¿8¹8¿=¹=ó 2ð1¨¯©¯©ó 1ð<¨u¯x©x¯}©}ó <ð1°·±·±ó 1ðU §¡§¡ó Uó&3'r)   rø   c                   óR  ‡ — e Zd ZdZ G d„ de«      Zdeej                  j                  ej                  j                  f   deeej                  f   deeej                  f   deej                  j                  ee   f   deeef   d	eeef   d
eeef   fˆ fd„Zd„ Zˆ fd„Zˆ xZS )ÚExplainTS2FXGraphConverterzú
    Run TS2FXGraphConverter in an explain mode. It collects all failed operators conversions
    and provide that information to users. In order to collect all failed conversions, it
    also mocks some internal attributes (e.g., name_to_node).
    c                   ó.   ‡ — e Zd Zˆ fd„Zˆ fd„Zd„ Zˆ xZS )ú$ExplainTS2FXGraphConverter._DictMockc                 ó2   •— t         ‰| �  |«       || _        y r`   )Úsuperr  Ú
mock_value)r  Ú	dict_datar  Ú	__class__s      €r'   r  z-ExplainTS2FXGraphConverter._DictMock.__init__'  s   ø€ Ü‰GÑ˜YÔ'Ø(ˆD�Or)   c                 óX   •— t         ‰| �  |«      s| j                  S t         ‰| �  |«      S r`   )r  Ú__contains__r  Ú__getitem__)r  Úkeyr  s     €r'   r  z0ExplainTS2FXGraphConverter._DictMock.__getitem__+  s,   ø€ ô ‘7Ñ'¨Ô,Ø—‘Ð&Ü‘7Ñ& sÓ+Ð+r)   c                  ó   — y©NTra   )r  r  s     r'   r  z1ExplainTS2FXGraphConverter._DictMock.__contains__2  s   € Ør)   )r  r
  r  r  r  r  Ú__classcell__©r  s   @r'   Ú	_DictMockr  &  s   ø„ ô	)ô	,ö	r)   r   rù   rú   rû   rØ   rü   rý   rÚ   c                 óÎ   •— t         ‰| �  |||||||«       g | _        t        j	                  | j
                  t        j                  j                  d ddd„ di «      «      | _        y )NÚmockrK  c                   ó   — y r`   ra   ra   r)   r'   r  z5ExplainTS2FXGraphConverter.__init__.<locals>.<lambda>T  s   � r)   ra   )	r  r  Úunsupported_node_listr  r   r  r   r  r  )	r  rù   rú   rû   rØ   rü   rý   rÚ   r  s	           €r'   r  z#ExplainTS2FXGraphConverter.__init__5  sq   ø€ ô 	‰ÑØØØØ"Ø(ØØ!ô	
ð ;=ˆÔ"ô 7×@Ñ@Ø×Ñä�H‰H�M‰MØØØÙØØóó
ˆÕr)   c                 ó¤   — | j                  «        | j                  j                  «       D ]  }| j                  |«       Œ | j	                  «        y r`   )r2  rù   rÉ   r3  r4  rŒ  s     r'   Úexplainz"ExplainTS2FXGraphConverter.explainZ  sD   € Ø×!Ñ!Ô#Ø—M‘M×'Ñ'Ó)ò 	$ˆDØ×Ñ˜dÕ#ð	$à×"Ñ"Õ$r)   c                 óz   •— 	 t         ‰| �  |«       y # t        $ r | j                  j	                  |«       Y y w xY wr`   )r  r3  rî   r$  r   )r  rº   r  s     €r'   r3  z'ExplainTS2FXGraphConverter.convert_node`  s8   ø€ ð	4Ü‰GÑ  Õ&øÜò 	4Ø×&Ñ&×-Ñ-¨dÖ3ð	4ús   ƒ “$:¹:)r  r
  r  Ú__doc__r  r   r   r   r   rÕ   r  r   r~   rÒ   r   r  r&  r3  r  r  s   @r'   r  r    sÑ   ø„ ñô�Dô ð#
à˜Ÿ™Ÿ™¨¯©¯©Ð6Ñ7ð#
ð ˜C §¡Ð-Ñ.ð#
ð ˜S %§,¡,Ð.Ñ/ð	#
ð
 !% U§X¡X§^¡^°S¸±XÐ%=Ñ >ð#
ð '+¨3°¨8¡nð#
ð ˜s C˜x™.ð#
ð  $ C¨ H™~õ#
òJ%÷4ð 4r)   r  c              #   ób   K  — | j                   }d| _         	 d –— || _         y # || _         w xY w­wr  )Údisabled)r   r*  s     r'   Údisable_loggingr+  g  s,   è ø€ à�|‰|€HØ€C„Lð Ûàˆ�ø�xˆ�üs   ‚/—# ›/£	,¬/c            
       ó
  — e Zd Z	 ddeej
                  j                  ej
                  j                  f   dee	df   de
eee	f      fd„Zdefd„Z ee«      dd	„«       Zd
ej&                  j(                  deee	f   fd„Zd„ Zy)ÚTS2EPConverterNÚts_modelÚsample_args.Úsample_kwargsc                 ó†  ‡— || _         t        ||«      \  | _        | _        }}|| _        || _        i | _        i | _        t        | j                   t        j                  j                  «      s#t        | j                   j                  «       «      ng }t        | j                   t        j                  j                  «      sc| j                   j                  «       j                  «       D ]8  \  }Št!        ˆfd„|D «       «      r‰| j                  |<   Œ*‰| j                  |<   Œ: i | _        i | _        | j'                  «        y )Nc              3   óv   •K  — | ]0  }‰j                   |j                   k(  r‰|k(  j                  «       –— Œ2 y ­wr`   )ÚshaperX  )rQ  Úparamr²   s     €r'   rR  z*TS2EPConverter.__init__.<locals>.<genexpr>‰  s6   øè ø€ ò àØ—|‘| u§{¡{Ò2ð ˜u‘_×)Ñ)×+ñùs   ƒ69)r.  r^   rù   rW   r/  r0  rú   rû   r@   r   r   rA   rO   Ú
parametersrX   ÚitemsrÇ  Úname_to_non_tensor_attributesrý   Úlift_get_attr)r  r.  r/  r0  r&   Ú
param_listr  r²   s          @r'   r  zTS2EPConverter.__init__s  s  ø€ ð !ˆŒÜ+<¸XÀ{Ó+SÑ(ˆŒ�t”{ A qà&ˆÔØ*ˆÔà68ˆÔØ79ˆÔô ˜dŸm™m¬U¯X©X×-DÑ-DÔEô �—‘×)Ñ)Ó+Ô,àð 	ô
 ˜$Ÿ-™-¬¯©×)@Ñ)@ÔAØ!Ÿ]™]×5Ñ5Ó7×=Ñ=Ó?ò 	4‘	��6äó à!+ôô ð
 -3�D×&Ñ& qÒ)à-3�D×'Ñ'¨Ò*ð	4ð >@ˆÔ*Ø02ˆÔà×ÑÕr)   r<   c           	      ó6  — t         j                  d«       t         j                  d| j                  «       t        | j                  «      \  }}t	        | j                  | j
                  | j                  || j                  | j                  |«      }|j                  «       }t        |«       t         j                  d|j                  d¬«      «       | j                  ||j                  «      }t         j                  d|«       t        | j                  t        j                   j"                  «      sg| j                  j%                  «       j'                  «       D ]<  \  }}||j$                  vsŒt)        j*                  d|› d�«       ||j$                  |<   Œ> |S )	Nzü
TS2EPConverter logging starts from here.

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

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

%s
zGraphModule: %sF)Úprint_outputz%szManually populate zN into state_dict ExportedProgram, but it is never used by the ExportedProgram.)r   Úinforù   rÙ   rø   rú   rû   r7  rý   r  r	   Úprint_readableÚretrace_as_exported_programr@   r.  r   r   rA   rX   r6  r`  ra  )r  rØ   rÚ   Úgraph_converterrq   Úepr  r²   s           r'   r  zTS2EPConverter.convert—  s_  € Ü�‰ðô
	
ô 	�‰Ð,¨d¯m©mÔ<ä8QØ�M‰Mó9
Ñ5ÐÐ 5ô .Ø�M‰MØ×ÑØ×ÑØ"Ø×.Ñ.Ø×!Ñ!Ø!ó
ˆð ×$Ñ$Ó&ˆô 	0°Ô3Ü�‰Ð" B×$5Ñ$5À5Ð$5Ó$IÔJà×-Ñ-ØØ×,Ñ,ó
ˆô 	�‰��rÔô
 ˜$Ÿ-™-¬¯©×)@Ñ)@ÔAØ!Ÿ]™]×5Ñ5Ó7×=Ñ=Ó?ò .‘	��6Ø˜BŸM™MÒ)Ü—M‘MØ,¨Q¨CÐ/}Ð~ôð (.�B—M‘M !Ò$ð.ð ˆ	r)   c           	      óü  — t        | j                  «      \  }}t        | j                  | j                  | j                  || j
                  | j                  |«      }|j                  «        t        |j                  «      dkD  rid}t        |j                  «      D ]N  \  }}dj                  t        |«      j                  d«      d d «      }|d|› d|j                  «       › d|› d	�z  }ŒP nd
}|rt        |«       |S )Nr   z2Unsupported nodes are found in the following list:r¯  rÿ  r¡   z

    z. z [ú]zSuccess!)rÙ   rù   r  rú   rû   r7  rý   r&  r   r$  rQ   r˜   r   r—   rÊ   Úprint)	r  r;  rØ   rÚ   r?  Úexplain_strr\   Únr  s	            r'   r&  zTS2EPConverter.explainË  sü   € ä8QØ�M‰Mó9
Ñ5ÐÐ 5ô 5Ø�M‰MØ×ÑØ×ÑØ"Ø×.Ñ.Ø×!Ñ!Ø!ó
ˆð 	×ÑÔ!Üˆ×4Ñ4Ó5¸Ò9ØNˆKÜ! /×"GÑ"GÓHò G‘��1ØŸ7™7¤3 q£6§<¡<°Ó#5°b°qÐ#9Ó:�Ø ¨!¨¨B¨q¯v©v«x¨j¸¸8¸*ÀAÐFÑF‘ñGð %ˆKÙÜ�+ÔØÐr)   rq   rý   c                 óJ  — t        d„ | j                  «      }t        j                  j                  j                  || j                  |dd¬«      }|j                  j                  |j                  «       D ��ci c]2  \  }}t        |t        j                  t        j                  f«      r||“Œ4 c}}«       |D ]  }|j                  j                  |d «       Œ  |j                  j                  D ]‹  }|j                   t"        j$                  k(  sŒ!|j&                  |v sŒ0t        ||j&                     t        j                  «      s J t)        ||j&                     «      › d�«       ‚t"        j*                  |_        Œ� |j-                  «       j/                  |«       |S c c}}w )Nc                 ó~   — t        |t        j                  «      r"t        j                  g|j                  «       z  S d S r`   )r@   r   r~   r   ÚAUTOr€   )ÚpathÚxs     r'   r  z<TS2EPConverter.retrace_as_exported_program.<locals>.<lambda>ì  s0   € Ü(2°1´e·l±lÔ(C”—‘�
˜QŸU™U›WÑ$ð ØIMð r)   FT)Údynamic_shapesr+   Úpre_dispatchz& has been erroneously marked as buffer)r
   r/  r   ÚexportÚ_traceÚ_exportÚ
_constantsÚupdater6  r@   r~   r  rX   ÚpopÚgraph_signaturer  rÊ   r   r>  r:  r   ÚCONSTANT_TENSORÚverifierÚcheck)r  rq   rý   rK  r@  r  r•  Úspecs           r'   r>  z*TS2EPConverter.retrace_as_exported_programæ  s  € ô
 -ñð ×Ñó	
ˆô �\‰\× Ñ ×(Ñ(ØØ×ÑØ)ØØð )ó 
ˆð 	�‰×Ñð -×2Ñ2Ó4÷á�A�qÜ˜a¤%§,¡,´×0BÑ0BÐ!CÔDð �1‘óô	
ð "ò 	'ˆAØ�M‰M×Ñ˜a Õ&ð	'ð ×&Ñ&×2Ñ2ò 	6ˆDà�y‰yœI×,Ñ,Ó,°·±Ð@PÒ1PÜ!Ø$ T§[¡[Ñ1´5·<±<ôð bäÐ+¨D¯K©KÑ8Ó9Ð:Ð:`Ðaóbð ô &×5Ñ5�•	ð	6ð 	�‰‹×Ñ˜BÔàˆ	ùó%s   Á87F
c                 ó    ‡ ‡‡‡‡— i Šdt         fˆ fd„Šdt        j                  j                  fˆfd„Šˆˆˆˆˆ fd„Š ‰‰ j                  «       y )Nr  c                 óh   •— | j                  d«      }‰j                  }|D ]  }t        ||«      }Œ |S rÀ   )r—   r.  rì   )r  r�   r•  rE  r  s       €r'   rœ   z.TS2EPConverter.lift_get_attr.<locals>.get_attr'  s8   ø€ Ø—9‘9˜S“>ˆDØ—‘ˆAØò "�Ü˜A˜q“M‘ð"àˆHr)   rº   c                 óŠ   •— | j                  d«      }| j                  «       j                  «       }‰|   }|r	|› d|› �}|S |}|S )Nr�   r‘   )r¹   r¶   r·   )rº   r½   rã   rä   rå   rÚ   s        €r'   Úget_fqnz-TS2EPConverter.lift_get_attr.<locals>.get_fqn.  sT   ø€ ØŸ™˜v›ˆIØŸ™›×/Ñ/Ó1ˆJØ2°:Ñ>ˆNÙ:H˜.Ð)¨¨9¨+Ð6ˆHØˆOð OXˆHØˆOr)   c                 ód  •— | j                  «       D �]  }|j                  «       dk(  r#|j                  «       j                  «       }d‰	|<   |j                  «       dk(  r² ‰|«      } ‰|«      }|j                  «       j                  «       }|‰	|<   t	        |t
        j                  «      r|‰
j                  vrW|‰
j                  |<   nGt	        |t
        j                  «      r|‰
j                  vr|‰
j                  |<   n|‰
j                  |<   |j                  «       D ]
  } ‰|«       Œ �Œ y )Nzprim::CreateObjectr¯  rÈ   )rÉ   rÊ   r¸   r·   r@   r   r~   rû   r  rý   r7  rË   )rÍ   rº   rZ  rå   r*  rÖ  Ú_dfs_get_attrrœ   r[  rÚ   r  s         €€€€€r'   r]  z3TS2EPConverter.lift_get_attr.<locals>._dfs_get_attr5  s  ø€ ØŸ™›ó ,�Ø—9‘9“;Ð"6Ò6Ø"&§+¡+£-×"9Ñ"9Ó";�KØ9;Ð)¨+Ñ6à—9‘9“; /Ò1Ù& t›}�HÙ$ XÓ.�EØ"&§+¡+£-×"9Ñ"9Ó";�KØ9AÐ)¨+Ñ6Ü! %¬¯©Ô6Ø#¨4×+>Ñ+>Ñ>à<A˜D×/Ñ/°Ò9Ü# E¬5×+=Ñ+=Ô>Ø#¨4×+@Ñ+@Ñ@Ø>C˜D×1Ñ1°(Ò;àGL˜×:Ñ:¸8ÑDà $§¡£ò ,�HÙ! (Õ+ò,ñ),r)   )r   r   r   r  rù   )r  r]  rœ   r[  rÚ   s   `@@@@r'   r8  zTS2EPConverter.lift_get_attr  sC   ü€ ð" 13Ðð	œ#õ 	ð	œ%Ÿ(™(Ÿ-™-õ 	÷	,ð 	,ñ0 	�d—m‘mÕ$r)   r`   )T)r  r
  r  r   r   r   rB   rA   rC   r   r   r  r   r  r   r  r+  r   r&  r  r5  r>  r8  ra   r)   r'   r-  r-  q  s±   „ ð 37ñ	"à˜Ÿ	™	×.Ñ.°·	±	×0HÑ0HÐHÑIð"ð ˜3 ˜8‘_ð"ð    S¨# X¡Ñ/ó	"ðH2˜ó 2ñh �SÓòó ðð4,à�H‰H× Ñ ð,ð ˜s C˜x™.ó,ó\9%r)   r-  )Úrename)hÚbuiltinsÚloggingr„  rH   r`  Úcollections.abcr   Ú
contextlibr   r   r   r   r   Útorch.export._tracer   ÚAtorch._export.passes.replace_quantized_ops_with_standard_ops_passr	   Útorch.export.dynamic_shapesr
   r   Útorch.export.exported_programr   Útorch.export.graph_signaturer   r   r   r   r   r   r   Útorch.fxr   Ú	getLoggerr  r   r(   r;   ÚnnÚModuler   rA   rC   rÕ   rO   rB   r^   rd   rh   rp   r  r5  r‰   rŽ   r   r“   rš   r    Úuint8Úint8Úint16r¥  Úint64Úfloat16Úfloat32Úfloat64Ú	complex32Ú	complex64Ú
complex128rW  Úqint8Úquint8Úbfloat16r±   r6  rT  r³   ÚmaxÚminr…  Úis_Úis_notÚnot_Úcontainsr   rv   rw   Ú	sym_numelrx   Úsym_storage_offsetÚ
sym_strider	  r¾   rÅ   r  r  rÒ   rÙ   r  ræ   rö   rø   r  r+  r-  )r  r*  s   00r'   ú<module>r‚     sH  ðã Û Û Û Û Ý $Ý %ß 'Ñ 'ã Û Ý õ÷ AÝ 9÷÷ ñ õ 'ð €g×Ñ˜Ó!€ò	ò"ð8/*Ø�—‘—‘ %§)¡)×":Ñ":Ð:Ñ;ð/*ØCKÈCÁ=ð/*à
ˆ5�;‰;˜˜[Ñ)¨3°¸×9KÑ9KÑ0LÐLÑMó/*òdò!òHð(@ e§h¡h×&:Ñ&:ó @ò"ñ˜ð  cð ¸ó ð,˜sð , só ,ò&ð 
‡K�K�Ø	‡J�J�Ø	‡K�K�Ø	‡K�K�Ø	‡K�K�Ø	‡M�M�1Ø	‡M�M�1Ø	‡M�M�1Ø	‡O�O�QØ	‡O�O�QØ	×Ñ�bØ	‡J�J�Ø	‡K�K�Ø	‡L�L�"Ø	‡N�N�BðÐ ð$ 6J×5OÑ5OÓ5Q×R¡z s¨E˜˜s™
ÓRÐ ò	'ð  —‘Ø—‘Ø ×(Ñ(Ø—L‘LØ—‘Ø—]‘]Ø"×+Ñ+Ø#Øð —9‘9—>‘>×+Ñ+Ø—)‘)—.‘.×)Ñ)Ø!ŸI™IŸN™N×=Ñ=Ø—I‘I—N‘N×-Ñ-ñÐ ò&0ò)ðM5Ø�8‰8�>‰>ðM5à
ˆ4�—‘—‘  C¡Ð(Ñ)¨4°°S°©>Ð9Ñ:óM5ð`Ø  S ™>ðØ16·±·±ðàóð2˜%Ÿ(™(Ÿ-™-ó ÷,T'ñ T'ônE4Ð!4ô E4ðP ñ ó ð ÷\%ò \%ùów$ Ss   ÇM,