ó
    CC˜jr ã                   ó  • % 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Jr  S SKJ	r	  S SKJ
r
  S SKrS SKrS SKJr  S SKJr  S SKJrJr  S SKJr  S S	KJrJrJrJrJrJrJr  S S
KJr  \R>                  " \ 5      r!S r"S r#S\RH                  RJ                  \RL                  RN                  -  S\\
   S\(\RR                  \*S   \
\RV                  S-  4   4S jr,S r-S r.S r/S\R`                  Rb                  4S jr2S r3S>S\4S\4S\44S jjr5S\4S\44S jr6S r7\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)\RŒ                  S*0rG\GR‘                  5        V Vs0 s H  u  pX_M	     snn rIS+ rJ\ R–                  \ R˜                  \Rš                  \Rœ                  \Rž                  \R                   \R¢                  \J\R\R¦                  R¨                  Rª                  \R¦                  R¨                  R¬                  \R¦                  R¨                  R®                  \R¦                  R¨                  R°                  S,.rY\Z\4\S-\
4   4   \[S.'   S/ r\S0 r]S1\R                  RR                  S\(\Z\R                  R¼                  \_\4   4   \Z\4\44   4   4S2 jr`S3\Z\4\44   S4\R                  RÂ                  S\44S5 jrbS4\R                  RÂ                  4S6 jrc " S7 S85      rd " S9 S:\d5      re\	S; 5       rf " S< S=5      rggs  snn f )?é    N)ÚCallableÚSequence)Úcontextmanager)ÚAny)Ú_C)Ú'replace_quantized_ops_with_standard_ops)Ú_tree_map_with_pathÚDim)ÚExportedProgram)ÚConstantArgumentÚCustomObjArgumentÚ	InputKindÚ	InputSpecÚ
OutputKindÚ
OutputSpecÚTensorArgument)Úsubgraph_rewriterc                 ó*  • / n[        U R                  5       U5       Hr  u  p4S[        UR                  5       5      ;   a=  [        R
                  R                  U5      u  pVUR                  [        U5      5        M_  UR                  US L5        Mt     U$ )NÚPackedParams)	ÚzipÚinputsÚstrÚtypeÚtorchÚjitÚ_flattenÚappendÚlen)Úmethod_graphÚargs_paramsÚparam_count_listÚinput_Úarg_params_Úin_varsÚ_s          Ú¥C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\torch/_export/converter.pyÚ_get_param_count_listr'   "   s|   € ØÐÜ" <×#6Ñ#6Ó#8¸+ÖFÑˆØœS §¡£Ó/Ó/ÜŸ™×+Ñ+¨KÓ8‰JˆGØ×#Ñ#¤C¨£LÖ1à×#Ñ# K°tÐ$;Ö<ñ  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½   € ô !Ÿ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(   r3   r4   Ú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
['        Xš5      n[        R                  R                  U
5      u  pÍ[        R(                  " U	[        U5      USS5      nXHX74$ / nU R                  n[        R                  " U5        ['        XA5      n[        R(                  " XBUSS5      nXHUS 4$ [+        X5      u  pC[        R,                  " U5        [        R                  R/                  U 5      n[1        UR3                  5       5      n[1        UR5                  5       5      n[7        U5      [7        U5      -
  n[1        UR9                  5       5      n[;        U5       H%  u  nnUU:¼  d  M  UR=                  UUU-
     5        M'     [        R                  " U5        XHUS 4$ ! [         a  n[        S5      UeS nAff = f)Nr   z('forward' method must be a script methodT)ÚpreserveParametersÚforwardF)Ú
isinstancer   r   ÚScriptFunctionÚScriptModuleÚtupler   r>   ÚgraphÚAttributeErrorr2   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)r3   r4   Úflattened_argsr8   rC   Ú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ÒLÜœuŸy™y×1Ñ1´%¸³+Ó>¸qÑAÓBˆØˆ	ä�eœUŸY™Y×3Ñ3×4Ò4ðVØŸ™×+Ñ+�ô ×3Ò3°EÔ:Ü×.Ò.Ü—’œBŸO™O¨U¯X©XÓ6È4ñˆNô  ×?Ò?ÀÓO‰NˆFØ!×-Ñ-¨iÓ8×>Ñ>ˆLÜ ›+¬¨f«Ñ5ˆKÜ4°\ÓOÐÜŸ™×+Ñ+¨KÓ8‰JˆGÜ×9Ò9Øœe G›nÐ.>ÀÀuóˆEð  )Ð3Ð3ð ˆØ—‘ˆÜ
×/Ò/°Ô6Ü0°Ó=ÐÜ×5Ò5ØÐ#3°U¸Eó
ˆð ˜i¨Ð-Ð-ä6°uÓCÑ€EÜ×Ò˜5Ô!Ü—‘×-Ñ-¨eÓ4€JÜ�*×#Ñ#Ó%Ó&€FÜ˜Ÿ™›Ó'€LÜ˜Ó&¬¨Z«Ñ8€NÜ�z—‘Ó(Ó)€KÜ˜LÖ)‰ˆˆ3Ø�ÕØ×Ñ˜[¨¨^Ñ);Ñ<Ö=ñ *ô ×+Ò+¨EÔ2Ø˜) TÐ)Ð)øôK "ó VÜ"Ð#MÓNÐTUÐUûðVús   Â&K1 Ë1
LË;LÌLc                 ó
   • X-   $ ©N© )ÚaÚbs     r&   Úlist_addrc   |   s	   € Ø‰5€Lr(   c                 ó   • X/-   $ r_   r`   )Ú	containerÚelements     r&   Úlist_appendrg   €   s   € Ø�yÑ Ð r(   c                 ó2   • USU nX2S nU " / UQUPUQ70 UD6$ )z‘
subgraph: GraphModule from sub-block.
iter_idx: The index of interaction.
len_loop_local_arguments: The number of loop local arguments in args.
Nr`   )ÚsubgraphÚiter_idxÚlen_loop_local_argumentsr4   ÚkwargsÚloop_local_argsÚglobal_argss          r&   Úexecute_subgraph_from_prim_loopro   „   s<   € ð Ð4Ð4Ð5€Oð
 Ð0Ð1€KÙÐG�[ÐG (ÐG¨_ÒGÀÑGÐGr(   Úgmc                 ó>   • S nS n[         R                  " XU5        g )Nc                 óˆ  • [         R                  R                  R                  R	                  X5      n[         R                  R                  R                  U5      n[         R                  R                  R                  R                  XBSS9n[         R                  R                  R                  R                  U5      nU$ )NÚtrunc)Úrounding_mode)
r   ÚopsÚatenÚsym_sizeÚintÚscalar_tensorÚdivÚScalar_modeÚIntÚTensor)ÚimÚdimÚscaleÚsym_size_intry   Údiv_scalar_modeÚ
int_tensors          r&   ÚpatternÚ.inplace_optimize_sym_size_div.<locals>.pattern™   s†   € Ü—y‘y—~‘~×.Ñ.×2Ñ2°2Ó;ˆÜŸ	™	Ÿ™×4Ñ4°\ÓBˆÜŸ)™)Ÿ.™.×,Ñ,×8Ñ8Ø°ð 9ð 
ˆô —Y‘Y—^‘^×'Ñ'×.Ñ.¨Ó?ˆ
ØÐr(   c                 óp   • [         R                  R                  R                  R	                  X5      nX2-  $ r_   )r   ru   rv   rw   rx   )r~   r   r€   r�   s       r&   ÚreplacementÚ2inplace_optimize_sym_size_div.<locals>.replacement¢   s)   € Ü—y‘y—~‘~×.Ñ.×2Ñ2°2Ó;ˆØÑ$Ð$r(   )r   Úreplace_pattern)rp   r„   r‡   s      r&   Úinplace_optimize_sym_size_divrŠ   ˜   s   € òò%ô ×%Ò% b°;Õ?r(   c                 ój   • [        U 5      S:X  a  [        S5      eU S   R                  5       (       a  gg)Nr   zEmpty argument name for codegenFT)r   r2   Úisdigit©Únames    r&   Úis_valid_for_codegenr�   ©   s0   € Ü
ˆ4ƒy�Aƒ~ÜÐ<Ó=Ð=ØˆA�w‡�×ÑØØ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×!Ñ!ØˆØˆX�Q�t�fÐÐ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      $ r_   )Ú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_ENUMr2   )Ú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::stride.Úkind_to_standard_operatorsc                 ó¢   • U R                  5       R                  5       U R                  5       R                  5       p!U R                  S5      nX!U4$ ©NrŽ   )ÚinputÚ	debugNameÚoutputÚs)ÚnodeÚirv_parent_nameÚirv_nameÚ	attr_names       r&   Ú&get_ir_value_parent_name_and_attr_namerÀ   û   s?   € Ø $§
¡
£× 6Ñ 6Ó 8¸$¿+¹+»-×:QÑ:QÓ:S�XØ—‘�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Ø
‹-Ø×Ñ˜™Ô&Ø‰[ˆð �-ð �8‰8”H˜YÓ'Ó(Ð(r(   rC   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   ø€ ð —K‘K–MˆDØ�y‰y‹{˜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¹   rO   ÚaddrÇ   r?   r   r   ÚGraph)	rÎ   Ú	argumentsr¼   rÏ   r¾   Ú_map_blocks_to_lifted_attrsÚblocks_to_lifted_attrsrÑ   rÒ   s	        €€€€r&   rÚ   Ú>get_block_to_lifted_attrs.<locals>._map_blocks_to_lifted_attrs:  s¿   ø€ ô
 "›eˆ	Ø—K‘K–MˆDØŸ™ž�à%ŸO™OÑ,GÈÓ,NÓO’	ñ 'ð �y‰y‹{˜oÕ-ØŸ;™;›=×2Ñ2Ó4�ð ¤3Ð'9×'@Ñ'@Ó'BÓ#CÕCØ—M‘MÜ% hÐ0BÐDUÓVöñ "ô ˜%¤§¡§¡×0Ñ0Ø,5Ð" 5Ñ)ØÐr(   r`   )rC   rÐ   rÚ   rÛ   rÑ   rÒ   s    @@@@@r&   Úget_block_to_lifted_attrsrÝ   	  sI   ü€ ð& >@Ðð *,Ðð )+Ð÷0÷ ð ñ2 ˜UÔ#Ù Ô&à!Ð#4Ð4Ð4r(   Úname_to_attribute_fqnr¼   c                 óv  ^ • S[         4U 4S jjnUR                  5       S:X  a(  [        UR                  5       5      R	                  5       nOBUR                  5       S:X  a  UR                  5       R	                  5       nO[        SU S35      eUR                  S5      nU" U5      nU(       a	  U SU 3nU$ UnU$ )NrŽ   c                 ó8   >• U T;   a  TU    $ [        SU  S35      e©Nz
Attribute ú
 not found)Ú
ValueError)rŽ   rÞ   s    €r&   r�   Ú0get_attribute_fqn_from_ts_node.<locals>.get_attr\  s+   ø€ ØÐ(Ó(Ø(¨Ñ.Ð.ä˜z¨$¨¨zÐ:Ó;Ð;r(   úprim::SetAttrrÊ   z7Unexpected node kind when getting attribute fqn. node: Ú r’   )r   rÌ   Únextr   r¹   r¸   r2   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                 óþ  • U R                  5       nUS:X  a  [        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 )ÚschemaÚAssertionErrorr   r   Úparse_schemar   rŽ   r˜   Úoverload_nameÚgetattrru   ÚdefaultÚ	Exceptionr2   rÌ   )
r¼   Ú
schema_strrî   ÚnsÚop_nameÚoverrideÚop_overload_modÚop_overload_packetÚop_overloadrS   s
             r&   Úget_op_overloadrü   r  së   € Ø—‘“€JØ�]Ó"ÜÐ4°T°FÐ;Ó<Ð<Ü&+§h¡h×&;Ñ&;¸JÓ&G€FÜ�f—k‘kÓ"×(Ñ(¨Ó.�K€BØ×#Ñ#€Hð
Ü!¤%§)¡)¨RÓ0ˆÜ$ _Ó>ÐÞÜ!Ð"4Ó?ˆKð Ðð -×4Ñ4‰Kð Ðøô ó ÜØ& t§y¡y£{ m°=ÀÇÁÃÀÐPó
àð	ûðús   Á77B? Â0B? Â?
C<Ã	.C7Ã7C<c                   óÔ	  • \ rS rSrS\R
                  R                  \R
                  R                  -  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\R2                  R4                  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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r4S0 r5S\R
                  R                  4S1 jr6S2\R
                  R                  4S3 jr7S\R
                  R                  4S4 jr8S\R
                  R                  4S5 jr9S\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r@S\R
                  R                  4S= jrAS> rBS?rCg@)AÚTS2FXGraphConverteri‰  Úts_graphÚname_to_paramÚname_to_bufferrÛ   Úname_to_non_tensor_attributeÚname_to_constantrÞ   c                 ód  ^ • 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        [          H  n[#        U5      n	[%        T U	U 4S j5        M!     ['        5       T l        g )Nc                 ó&   >• TR                  U 5      $ r_   )Ú_convert_standard_operators)r¼   Úselfs    €r&   Ú<lambda>Ú.TS2FXGraphConverter.__init__.<locals>.<lambda>Æ  s   ø€ ˜T×=Ñ=¸dÔCr(   )rÿ   r   r  r   ÚfxrØ   rŸ   Úinput_specsÚoutput_specsÚname_to_noder  rÞ   Ú!name_to_non_tensor_attribute_noder  Ú	subgraphsrÛ   rµ   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ˆÔ)à:<ˆŒð '=ˆÔ#÷ ,ˆAÜ 4°QÓ 7Ðô ØØ!ÜCöñ	 ,ô >A»UˆÕ0r(   c                 óÎ   • XR                   ;   =(       dQ    XR                  ;   =(       d<    XR                  ;   =(       a'    [        U R                  U   [        R
                  5      $ r_   )r  r   r  r?   r   ÚScriptObject)r  Úfqns     r&   Ú_is_get_attr_nodeÚ%TS2FXGraphConverter._is_get_attr_nodeÐ  sX   € à×&Ñ&Ñ&÷ Ø×(Ñ(Ñ(÷ð ×,Ñ,Ñ,÷ OÜ˜t×4Ñ4°SÑ9¼5×;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	X–R                  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$ 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_noderi   Úsubgraph_names               r&   Ú_convert_block_to_subgraphÚ.TS2FXGraphConverter._convert_block_to_subgraphÚ  sñ   € Ø.0°"Ð+Ø—[‘[–]ˆEÜ!4ØØ×"Ñ"Ø×#Ñ#Ø×+Ñ+ØØ×%Ñ%Ø×*Ñ*ó"Ðó '�	Ü,:¸9Ó,EÐ)Ø#5×#>Ñ#>×#JÑ#JØ-ó$Ð ð >N×/Ñ/°	Ó:ñ 'ð *×1Ñ1Ó3ˆHØ ×-Ñ-¨hÓ7ˆMØ×!Ñ! $§-¡-×"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Ø#Ÿk™kžm�
Ø%/×%6Ñ%6Ö%8�Mà%×/Ñ/Ó1°T×5FÑ5FÕFØ)×3Ñ3Ó5¸T×=WÑ=WÕWà!Ÿ™ m×&=Ñ&=Ó&?Ö@ñ &9ð &ŸO™OØ×6Ñ6°zÓBó’	ó ,ñ $ð Ðr(   c                 ó^   • [        U R                  [        R                  R                  5      $ r_   )r?   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  ri   rŽ   s      r&   r  Ú TS2FXGraphConverter.add_subgraph  s)   € Øœ3˜tŸ~™~Ó.Ð/Ð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$ r_   )r   r   rÙ   Ú
kwarg_onlyÚget_fx_value_by_ir_valuerŽ   r   rB   )r  r¼   rî   r4   rl   r¸   Ú
schema_args          r&   Úget_args_kwargsÚ#TS2FXGraphConverter.get_args_kwargs  su   € ØˆØˆÜ!$ T§[¡[£]°F×4DÑ4DÖ!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  r?   r   r  rŸ   r�   rÞ   Úget_fx_value_by_fqnrã   )r  r7  Ú
value_nameÚ
input_nodes       r&   r3  Ú,TS2FXGraphConverter.get_fx_value_by_ir_value   s¼   € Ø—_‘_Ó&ˆ
à×*Ñ*Ó*Ø×*Ñ*¨:Ñ6ˆJØÐØ×0Ñ0Ó0Ü˜$×/Ñ/°
Ñ;¼U×=OÑ=O×PÑPØ—}‘}×-Ñ-¨jÓ9Ð9Ø×(Ñ(¨Ñ4Ð4Ø×5Ñ5Ó5Ø×+Ñ+¨D×,FÑ,FÀzÑ,RÓSÐSä˜v j \°Ð<Ó=Ð=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&   r9  Ú'TS2FXGraphConverter.get_fx_value_by_fqn/  sª   € Ø×$Ñ$Ó$Ø×'Ñ'¨Ñ-ˆGð ˆð ×*Ñ*Ó*Ø×+Ñ+¨DÑ1ˆGð ˆð ×;Ñ;Ó;Ø×<Ñ<¸TÑBˆGð
 ˆð	 ×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$ r_   )Úconvert_graph_inputsrÿ   rË   Úconvert_nodeÚconvert_graph_outputsr   r
  ÚGraphModuler  r   r  r  r  rŸ   rŠ   rC   Úlint)r  r¼   rp   s      r&   r  ÚTS2FXGraphConverter.convert<  sË   € Ø×!Ñ!Ô#à—M‘M×'Ñ'Ö)ˆDØ×Ñ˜dÖ#ñ *ð 	×"Ñ"Ô$ô �X‰X×!Ñ!ðØ—.‘.ðà×$Ñ$ðð ×%Ñ%ðð ×3Ñ3ð	ð
 ×'Ñ'ðð �M‰Mó	
ˆô 	& bÔ)à
�‰�‰Œàˆ	r(   c                 ó  • U R                   R                  5        GHl  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OÑX 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OWX R                   ;   aº  [#        U R                   U   [$        R&                  5      (       d$  [)        S[+        U R                   U   5       3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       [$        R0                  5      (       a  GM   [	        USS	9nU R
                  R                  [        [        R2                  [        US9US95        U R                  R5                  U5      nX@R6                  U'   GMo     g )
Nr�   ©ÚargÚtargetT)rI  rJ  Ú
persistentz0Input conversion only handles ScriptObject, got )rŽ   Ú	class_fqnFr¸   )r�   )rÿ   r   r¹   r   r”   r  r   r   r   Ú	PARAMETERr   r¡   rŸ   r    r  ÚBUFFERr  r?   r   r  rï   r   Ú
CUSTOM_OBJr   Ú	ClassTypeÚ
USER_INPUTrž   r  )r  Úgraph_inputrŽ   Únormalized_namer>  s        r&   rA  Ú(TS2FXGraphConverter.convert_graph_inputsV  s,  € ØŸ=™=×/Ñ/×1ˆKØ×(Ñ(Ó*ˆDà×)Ñ)Ó)Ü"0°Ó"6�Ø× Ñ ×'Ñ'ÜÜ!×+Ñ+Ü*°Ñ@Ø#ñôô >Ø—M‘M 4×)@Ñ)@Ó)Bó’ð ×,Ñ,Ó,Ü"0°Ó"6�Ø× Ñ ×'Ñ'ÜÜ!×(Ñ(Ü*°Ñ@Ø#Ø#'ñ	ôô >Ø—M‘M 4×)@Ñ)@Ó)Bó’ð ×.Ñ.Ó.Ü! $×"7Ñ"7¸Ñ"=¼u×?QÑ?Q×RÑRÜ(ØJÌ4ÐPT×PeÑPeÐfjÑPkÓKlÐJmÐnóð ô #1°Ó"6�Ø× Ñ ×'Ñ'ÜÜ!×,Ñ,Ü-Ø!0ñð  $Ø#(ñô	ô >Ø—M‘M 4×)@Ñ)@Ó)Bó‘ô ˜K×,Ñ,Ó.´·±×@Ñ@âä"0°¸gÑ"F�Ø× Ñ ×'Ñ'ÜÜ!×,Ñ,Ü*°Ñ@Ø#ñôð Ÿ-™-×3Ñ3°OÓD�à&-×Ñ˜dÔ#ò{ 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    € Ø—4‘4œeŸk™k�4Ð*×/Ñ/Ó1Ð1r(   )r   r3  rŸ   Úcall_functionrB   r  rº   r¹   )r  r¼   r[  r\   Úinp_listr>  s         r&   Úconvert_aten_FloatÚ&TS2FXGraphConverter.convert_aten_Float–  sq   € ò	2ð CGÇ+Á+Ä-ÓPÂ-¸3×1Ñ1°#Ö6Á-ˆÐPØ—-‘-×-Ñ-ØÜ�(‹Oó
ˆð 8?×Ñ˜$Ÿ+™+›-×1Ñ1Ó3Ò4ùò Qs   –Bc                 óø  ^• U R                  U[        R                  R                  R                  R
                  R                  5      u  p#U H  nUS:X  d  M  [        X4   5      X4'   M     [        S U 5       5      (       a  [        R                  O[        R                  R                  mU4S jnUR                  5       R                  5       nU R                  R                  XRU5      nXpR                  U'   g)z9aten::tensor creates a constant tensor ad-hoc --> GetAttrÚrequires_gradc              3   óB   #   • U  H  n[        U[        5      v •  M     g 7fr_   )r?   rx   )Ú.0ra   s     r&   Ú	<genexpr>Ú:TS2FXGraphConverter.convert_aten_tensor.<locals>.<genexpr>«  s   é € Ð4ªt¨!”:˜a¤×%Ð%ªtùs   ‚c                  óJ   >• SU;   a  US   b  [         US      US'   T" U 0 UD6$ )Nr±   )Ú_TORCH_ENUM_TO_DTYPE)r4   rl   Ú	to_tensors     €r&   rJ  Ú7TS2FXGraphConverter.convert_aten_tensor.<locals>.target¯  s6   ø€ Ø˜&Ó  V¨G¡_Ñ%@Ü"6°v¸g±Ñ"G��w‘Ù˜dÐ- fÑ-Ð-r(   N)r5  r   ru   rv   r³   ró   Ú_schemaÚboolÚallÚ_refsrº   r¹   rŸ   r]  r  )	r  r¼   r4   rl   r  rJ  Úoutput_namer>  ri  s	           @r&   Úconvert_aten_tensorÚ'TS2FXGraphConverter.convert_aten_tensor¡  s½   ø€ à×+Ñ+¨D´%·)±)·.±.×2GÑ2G×2OÑ2O×2WÑ2WÓX‰ˆãˆAØ�OÕ#Ü  ¡›O�“	ñ ô Ñ4©tÓ4×4Ñ4ô �LŠLä—‘×#Ñ#ð 	õ	.ð —k‘k“m×-Ñ-Ó/ˆØ—-‘-×-Ñ-¨f¸FÓCˆØ)0×Ñ˜+Ò&r(   c                 ó(  ^ • [         R                  " SSS9  [        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 )Nz²Converting aten::append.t, which is an inplace mutation of the list. This makes the converter non-functional: the result depends on the order of the append nodes being converted!r£   ©Ú
stacklevelc              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr_   ©r3  )rd  r\   r  s     €r&   re  Ú:TS2FXGraphConverter.convert_aten_append.<locals>.<genexpr>É  s   øé € ÐQÂ=¸C�T×2Ñ2°3×7Ð7Â=ùó   ƒ!r   rž   )ÚwarningsÚwarnrB   r   rŸ   r]  rg   r  rº   r¹   ÚinputsAtr    Úopr  r×   )r  r¼   r4   r>  s   `   r&   Úconvert_aten_appendÚ'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                 ó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O­US:X  a  UR                  S5      nO•U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 )	Nr7  r[   Úfr»   rZ  Úlifted_tensor_ÚivalzUnsupported constant type: )rº   r¹   ÚhasAttributeÚkindOfr[   r€  r»   rŸ   r�   r  rZ  r‚  rã   r  )r  r¼   rŽ   r7  Úconstant_kindÚ
alias_namer>  s          r&   Úconvert_prim_ConstantÚ)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                 ó&  • 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   r3  rŸ   Úcall_methodr»   rB   r  rº   r¹   )r  r¼   r\   r^  r>  s        r&   Úconvert_prim_CallMethodÚ+TS2FXGraphConverter.convert_prim_CallMethodð  sp   € ØBFÇ+Á+Ä-ÓPÂ-¸3×1Ñ1°#Ö6Á-ˆÐPØ—-‘-×+Ñ+Ø�F‰F�6‹NÜ�(‹Oó
ˆð 8?×Ñ˜$Ÿ+™+›-×1Ñ1Ó3Ò4ùò Qs   “Bc                 óN  • UR                  5       R                  5       nUR                  [        R                  R
                  R                  5       5      (       a=  UR                  5       nUR                  5       R                  5       nX0R                  U'   g [        SU S35      e)NzUnsupported JitType (z) when get device)r¸   r   ÚisSubtypeOfr   r   Ú
TensorTypeÚgetÚdevicerº   r¹   r  rã   )r  r¼   Ú
input_typer‘  ro  s        r&   Úconvert_prim_deviceÚ'TS2FXGraphConverter.convert_prim_deviceø  s€   € Ø—Z‘Z“\×&Ñ&Ó(ˆ
Ø×!Ñ!¤%§(¡(×"5Ñ"5×"9Ñ"9Ó";×<Ñ<Ø×&Ñ&Ó(ˆFØŸ+™+›-×1Ñ1Ó3ˆKØ17×!Ñ! +Ò.äÐ4°Z°LÐ@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 r_   )rë   rÞ   rº   r¹   r    r  rŸ   r�   r  r  r  )r  r¼   rê   ro  s       r&   Úconvert_prim_GetAttrÚ(TS2FXGraphConverter.convert_prim_GetAttr  sô   € ä1°$×2LÑ2LÈdÓSˆØ—k‘k“m×-Ñ-Ó/ˆØ2:×"Ñ" ;Ñ/à×"Ñ"×$Ñ$Ø×%Ñ% h×/Ñ/ð 26·±×1GÑ1GÈÓ1Q�×!Ñ! +Ò.à×#IÑ#IÓIà×9Ñ9¸(ÑCð ×:Ñ:¸8ÑDð 26×1WÑ1WØñ2�×!Ñ! +Ò.ð ×%Ñ% h×/Ñ/Ø15×1BÑ1BÀ8Ñ1L�×!Ñ! +Ò.ð 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Þ   rB   r   r3  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°$×2LÑ2LÈdÓSˆÜ˜4Ÿ;™;›=Ó)¨!Ñ,ˆ
Ø $× =Ñ =¸jÓ IÐØ×!Ñ! (×+Ñ+ØŸ=™=×1Ñ1°(Ó;ˆLØ�M‰M×'Ñ'Ü—‘×"Ñ" \Ð$Iõð @U×2Ñ2°8Ò<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	X�R                  U'   MP     g r™  )rü   r5  rk  rŸ   r]  ÚoutputsSizerº   r¹   r  rP   ÚoutputsÚoperatorÚgetitem)
r  r¼   rJ  r4   rl   r>  ro  r[   ÚoutpÚnext_fx_nodes
             r&   Úconvert_call_function_opÚ,TS2FXGraphConverter.convert_call_function_op)  sÁ   € Ü  Ó&ˆà×+Ñ+¨D·.±.ÓA‰ˆà—-‘-×-Ñ-¨f¸FÓCˆð
 ×ÑÓ Ó"ØŸ+™+›-×1Ñ1Ó3ˆKØ-4×Ñ˜kÒ*ä$ T§\¡\£^Ö4‘�Ø"Ÿn™nÓ.�Ø#Ÿ}™}×:Ñ:Ü×$Ñ$ w ló �ð 2>×!Ñ! +Ó.ò 5r(   c                 ó&   • U R                  U5        g r_   ©Ú_convert_prim_iterator©r  r¼   s     r&   Úconvert_prim_TupleConstructÚ/TS2FXGraphConverter.convert_prim_TupleConstruct>  ó   € Ø×#Ñ# DÕ)r(   c                 ó&   • U R                  U5        g r_   rª  r¬  s     r&   Úconvert_prim_ListConstructÚ.TS2FXGraphConverter.convert_prim_ListConstructA  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 r_   )r   r3  rº   r¹   r  )r  r¼   r\   Úoutput_listro  s        r&   r«  Ú*TS2FXGraphConverter._convert_prim_iteratorD  sM   € ØEIÇ[Á[Ä]ÓSÂ]¸c×4Ñ4°SÖ9Á]ˆÐSà—k‘k“m×-Ñ-Ó/ˆØ)4×Ñ˜+Ò&ùò Ts   “Ac                 óZ  • 0 nSu  p4[        UR                  5       5       HK  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  p4MM     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).)rP   r   r3  rï   rº   r¹   r  )r  r¼   Úoutput_dictr  Úvr[   r\   ro  s           r&   Úconvert_prim_DictConstructÚ.TS2FXGraphConverter.convert_prim_DictConstructJ  s¶   € ØˆØ‰ˆÜ §¡£Ö.‰FˆAð �1‰u˜‹zØ×1Ñ1°#Ó6’à×1Ñ1°#Ó6�Ø‘9 ¡	Ü(Ð)UÓVÐVØ!"˜A‘Ø!‘�‘1ñ /ð ‰=˜A™MÜ ØYóð ð —k‘k“m×-Ñ-Ó/ˆØ)4×Ñ˜+Ò&r(   c                 ó&   • U R                  U5        g r_   ©Ú_convert_prim_unpack_iteratorr¬  s     r&   Úconvert_prim_ListUnpackÚ+TS2FXGraphConverter.convert_prim_ListUnpacka  ó   € Ø×*Ñ*¨4Õ0r(   c                 ó&   • U R                  U5        g r_   r¼  r¬  s     r&   Úconvert_prim_TupleUnpackÚ,TS2FXGraphConverter.convert_prim_TupleUnpackd  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 r_   )
rP   r¢  r¹   r3  r¸   rŸ   r]  r£  r¤  r  )r  r¼   r[   r¥  Ú	outp_namer\   r>  s          r&   r½  Ú1TS2FXGraphConverter._convert_prim_unpack_iteratorg  sg   € ä  §¡£Ö0‰GˆAØŸ™Ó(ˆIØ×/Ñ/°·
±
³Ó=ˆCØ—m‘m×1Ñ1´(×2BÑ2BÀSÀHÓMˆGØ+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r_   rv  ©rd  r¸   r  s     €r&   re  Ú7TS2FXGraphConverter.convert_aten_Int.<locals>.<genexpr>r  ó   øé € ÐUÂ}¸e�T×2Ñ2°5×9Ð9Â}ùrx  r±   )r   ru   rv   Ú_to_copyró   rB   r   rŸ   r]  Úint32Ú_local_scalar_denserº   r¹   r  )r  r¼   rJ  r4   Úto_copy_noder>  ro  s   `      r&   Úconvert_aten_IntÚ$TS2FXGraphConverter.convert_aten_Into  s¦   ø€ ä—‘—‘×(Ñ(×0Ñ0ˆÜÔUÀtÇ{Á{Ä}ÓUÓUˆØ—}‘}×2Ñ2°6À'Ì5Ï;É;ÐAWÓXˆà—-‘-×-Ñ-Ü�I‰I�N‰N×.Ñ.×6Ñ6¸¸ó
ˆð —k‘k“m×-Ñ-Ó/ˆØ)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r_   rv  rÉ  s     €r&   re  Ú?TS2FXGraphConverter.convert_prim_NumToTensor.<locals>.<genexpr>‡  rË  rx  r±   )r   ru   rv   ry   rB   r   rŸ   r]  Úlongrº   r¹   r  ©r  r¼   rJ  r4   r>  ro  s   `     r&   Úconvert_prim_NumToTensorÚ,TS2FXGraphConverter.convert_prim_NumToTensor  sq   ø€ ô —‘—‘×-Ñ-ˆÜÔUÀtÇ{Á{Ä}ÓUÓUˆà—-‘-×-Ñ-¨f¸WÄeÇjÁjÐ<QÓRˆØ—k‘k“m×-Ñ-Ó/ˆØ)0ˆ×Ñ˜+Ò&r(   c                 ó^   • UR                  5       R                  5       nSU R                  U'   g )NÚ )rº   r¹   rÞ   ©r  r¼   ro  s      r&   Úconvert_prim_CreateObjectÚ-TS2FXGraphConverter.convert_prim_CreateObject�  s&   € Ø—k‘k“m×-Ñ-Ó/ˆØ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 r_   )r   ru   rv   Úconvolutionró   r5  rk  rŸ   r]  rº   r¹   r  )r  r¼   rJ  r4   rl   r>  ro  s          r&   Úconvert_aten__convolutionÚ-TS2FXGraphConverter.convert_aten__convolution‘  sk   € ô —‘—‘×+Ñ+×3Ñ3ˆØ×+Ñ+¨D·.±.ÓA‰ˆà—-‘-×-Ñ-¨f¸FÓCˆà—k‘k“m×-Ñ-Ó/ˆØ)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
X�R*                  U
'   g U R-                  U5        g )NÚTensor_moder¢   )rü   rk  r5  rñ   rŽ   r  r?   r   r}   ÚnumelrN   rY  rŸ   r]  ru   rv   rz   r{   rB   rº   r¹   r  r§  )r  r¼   rJ  rî   r4   rl   Ú	arg1_nameÚtensor_constantÚupdated_argsr>  ro  s              r&   Úconvert_aten_divÚ$TS2FXGraphConverter.convert_aten_divœ  s$  € Ü  Ó&ˆØ—‘ˆà×+Ñ+¨DÓ9‰ˆð ×Ñ =Ô0Ø˜Q™Ÿ™ˆIØ×1Ñ1Ó1´jØ×%Ñ% iÑ0´%·,±,÷7ñ 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<×%Ñ% 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r_   rv  rÉ  s     €r&   re  Ú?TS2FXGraphConverter.convert_aten___getitem__.<locals>.<genexpr>¾  s"   øé € ð '
Ú>K°UˆD×)Ñ)¨%×0Ð0ºmùrx  )	rB   r   rŸ   r]  r£  r¤  rº   r¹   r  )r  r¼   Úinput_containerÚindexr>  ro  s   `     r&   Úconvert_aten___getitem__Ú,TS2FXGraphConverter.convert_aten___getitem__½  sm   ø€ Ü!&ô '
Ø>B¿k¹k¼mó'
ó "
Ñˆð —-‘-×-Ñ-Ü×Ñ˜Ð6ó
ˆð —k‘k“m×-Ñ-Ó/ˆØ)0ˆ×Ñ˜+Ò&r(   c                 óL  • [        U5      nU R                  XR                  5      u  p4U[        R                  R
                  R                  R                  L d2  U[        R                  R
                  R                  R                  L Ga~  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:  a  [        S[        U5       35      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XÀR.                  U'   g U R1                  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r_   )rk  Ú
is_mutable)rd  rJ  s     r&   re  Ú6TS2FXGraphConverter.convert_aten_to.<locals>.<genexpr>×  s   é € ð %Ú8D¨f—‘×)Ö)ºùs   ‚"$r¥   zexpected at least 4 args, got Tr¤   )rü   r5  rk  r   ru   rv   rW  r±   Ú
prim_dtyperº   ÚusesÚuserrî   Úanyr   rï   rN   rŸ   r]  rB   Úcloneró   r¹   r  r§  )r  r¼   rJ  r4   Ú_kwargsÚuseÚ
user_nodesÚ	user_nodeÚuser_targetsÚhas_mutable_targetÚnew_argsr>  Ú
clone_nodero  s                 r&   Úconvert_aten_toÚ#TS2FXGraphConverter.convert_aten_toÇ  s±  € Ü  Ó&ˆØ×,Ñ,¨T·>±>ÓB‰ˆð ”U—Y‘Y—^‘^×&Ñ&×,Ñ,Ò,°¼%¿)¹)¿.¹.×:KÑ:K×:VÑ:VÓ0VØ.2¯k©k«m×.@Ñ.@Ô.BÓCÒ.B sŸ(œ(Ñ.BˆJÐCñ ",óâ!+�IØ×#Ñ#Ó%¨Ñ6ó +” 	Ö*Ù!+ð ð ô
 "%ñ %Ù8Dó%ó "Ðö "Ü�t“9˜q“=Ü(Ð+IÌ#ÈdË)ÈÐ)UÓVÐVÜ ›:�Ø"�˜‘ØŸ-™-×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Õ+ùò7 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                  L ai  U R                  XR                  5      u  p4UR                  5       R                  5       nU R                   R#                  [$        U5      U R&                  U'   g U R)                  U5        g )Nrí   r   r¢   z$unable to determined the target for )rî   r?   r{  r   r   ÚListTyperu   rv   r×   rZ  r2   rü   r5  rk  rº   r¹   rŸ   r]  rc   r  r§  )r  r¼   rJ  r4   rú  ro  s         r&   Úconvert_aten_addÚ$TS2FXGraphConverter.convert_aten_addî  s  € Ø�;‰;‹=˜MÓ)Ü˜$Ÿ-™-¨Ó*×/Ñ/Ó1´5·>±>×BÑBÄzØ—‘˜aÓ ×%Ñ%Ó'¬¯©÷Hñ Hô Ÿ™Ÿ™×+Ñ+×-Ñ-‘ä"Ð%IÈ$ÈÐ#PÓQÐQä$ TÓ*ˆFà”U—Y‘Y—^‘^×'Ñ'×)Ñ)Ò)ð !×0Ñ0°·~±~ÓF‰MˆDØŸ+™+›-×1Ñ1Ó3ˆKØ-1¯]©]×-HÑ-HÌÐSWÓ-XˆD×Ñ˜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£   )rN   r   r¹   r  r2   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û   € Ü�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           	      ó°  • [        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:w  a  [        S[        U5       35      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 R0                  U'   U R0                  U   XÏ'   Me     [)        U
R                  5       H‡  u  pûU R                   R#                  [,        R.                  UXñR'                  5       -   S-   45      U R0                  U'   UR3                  U5      nU R0                  U   XÏUR'                  5       -   U-   '   M‰     GMn     g s  snf s  snf )Nr   r£   r¢   zexpected 1 subgraph node, got )rN   r   r  r3  r¹   r(  rÍ   rÖ   rÛ   r%  r   rï   r    r  r9  ÚrangerŸ   r]  ro   r¡  rP   r¢  r£  r¤  r  rî  )r  r¼   r   Únum_iterationsr\   Úloop_local_argumentsÚglobal_argumentsrÏ   r  r  r   rŽ   Úfx_block_argsrj   Ú	loop_noder[   r¥  ro  Úglobal_argument_indexs                      r&   Úconvert_prim_LoopÚ%TS2FXGraphConverter.convert_prim_Loop  sÓ  € Ü�d—k‘k“mÓ$ˆØ×%Ñ% dÔ+à×6Ñ6°v¸a±yÓAˆð <BÀ!À"¹:ÓFº:°C§¡¦¹:ÐÐFà×=Ñ=¸dÓCÐð —[‘[–]ˆEØ/×5Ñ5Ø×+Ñ+¨EÑ2ó Òñ #ô
  Ð 0Ó1Ðà.2×.MÑ.MØó/
Ñ+ˆô ˆ~Ó !Ó#Ü Ð#AÄ#ÀnÓBUÐAVÐ!WÓXÐXØ0°Ñ3ÐØ×&Ñ&×(Ñ(à×8Ñ8×>Ñ>Ø&×JÑJóð Ô4ð -Ò?ó
â?�ð ×$Ñ$ TÖ*Ù?ð 	ð 
ô ˜n×-ˆHØŸ™×3Ñ3Ü/ð # 1Ñ%ØÜÐ,Ó-ðð #ñ	ð ó
ˆIð ×ÑÓ! QÓ&Ü(¨¯©«Ö8‘G�A�tØ"&§.¡.Ó"2�KØ59·]±]×5PÑ5PÜ ×(Ñ(à%Ø ™Eðó6�D×%Ñ% kÑ2ð (,×'8Ñ'8¸Ñ'E�MÓ$ñ  9ô %Ø"×FÑFö‘�ð +/¯-©-×*EÑ*EÜ×$Ñ$à!Ø×,Ñ,Ó.Ñ.°Ñ2ðó+�×!Ñ! $Ñ'ð )9×(>Ñ(>¸tÓ(DÐ%à×%Ñ% dÑ+ð  $×"2Ñ"2Ó"4Ñ4Ð7LÑLÓMôò9 .ùò=  Gùò4
s   ÁKÄ5KÚ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å   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Ì   r2   )r  r  rÏ   r¼   s       r&   Ú_check_set_attr_in_if_blockÚ/TS2FXGraphConverter._check_set_attr_in_if_blockm  sC   € Ø—^‘^Ö%ˆEØŸ™ž�Ø—9‘9“; /Õ1Ü&ð-óð ó &ò &r(   c                 ó,  • U R                  U5        [        UR                  5       5      n[        U5      S:w  a  [	        S[        U5       35      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:w  a  [	        S[        U5       35      eU Vs/ s H  o€R                  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X°R(                  U'   g UR#                  5       S:”  al  [+        UR-                  5       5       HN  u  pÞUR'                  5       nU R                  R                  [.        R0                  X½45      nXðR(                  U'   MP     g g s  snf )Nr¢   z#expected 1 input for prim::If, got r   r£   zexpected 2 subgraph nodes, got )r  rN   r   r   rï   r3  r(  rÍ   rÖ   rÛ   r%  r9  rB   rŸ   r]  r   Úcondr¡  rº   r¹   r  rP   r¢  r£  r¤  )r  r¼   r   Ú	predicaterÙ   rÏ   r  r%   rŽ   r  r4   Ú	cond_nodero  r[   rº   r¤  s                   r&   Úconvert_prim_IfÚ#TS2FXGraphConverter.convert_prim_Ifw  sá  € Ø×(Ñ(¨Ô.ä�d—k‘k“mÓ$ˆÜˆv‹;˜!ÓÜ Ð#FÄsÈ6Ã{ÀmÐ!TÓUÐUØ×1Ñ1°&¸±)Ó<ˆ	ð ×6Ñ6°tÓ<ˆ	ð —[‘[–]ˆEØ!Ÿ™¨×(CÑ(CÀEÑ(JÓKŠIñ #ô ˜“Oˆ	Ø ×;Ñ;¸DÓLÑˆäˆ~Ó !Ó#Ü Ø1´#°nÓ2EÐ1FÐGóð ñ ENÓNÂI¸D×1Ñ1°$Ö7ÁIˆÐNð Ø˜1ÑØ˜1ÑÜ�-Ó ð	
ˆð —M‘M×/Ñ/´·
±
¸DÀ"ÓEˆ	ð ×ÑÓ Ó"ØŸ+™+›-×1Ñ1Ó3ˆKØ-6×Ñ˜kÒ*Ø×ÑÓ !Ó#Ü& t§|¡|£~Ö6‘	�Ø$×.Ñ.Ó0�ØŸ-™-×5Ñ5´h×6FÑ6FÈÈÓW�Ø18×!Ñ! +Ó.ò 7ð $ùò Os   Ã3Hc                 ó&   • U R                  U5        g r_   )Ú_convert_as_noopr¬  s     r&   Úconvert_aten_BoolÚ%TS2FXGraphConverter.convert_aten_Bool£  s   € Ø×Ñ˜dÕ#r(   c                 ó   • g r_   r`   r¬  s     r&   Úconvert_prim_EnterÚ&TS2FXGraphConverter.convert_prim_Enter¦  s   € ð
 	r(   c                 ó   • g r_   r`   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ü   rk  r5  rº   r¹   r  )r  r¼   rJ  rî   r4   rú  ro  s          r&   r"  Ú$TS2FXGraphConverter._convert_as_noop±  sQ   € ô ! Ó&ˆØ—‘ˆà×,Ñ,¨TÓ:‰ˆà—k‘k“m×-Ñ-Ó/ˆØ)-¨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r_   rv  rÉ  s     €r&   re  ÚMTS2FXGraphConverter.convert_profiler__record_function_exit.<locals>.<genexpr>Á  rË  rx  )r   ru   ÚprofilerÚ_record_function_exitrB   r   rŸ   r]  )r  r¼   rJ  r4   s   `   r&   Ú&convert_profiler__record_function_exitÚ:TS2FXGraphConverter.convert_profiler__record_function_exit¼  sB   ø€ ô —‘×#Ñ#×9Ñ9ˆÜÔUÀtÇ{Á{Ä}Ó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)r3  rç   r   rŸ   rŠ  rº   r¹   r  rÖ  s         r&   Úconvert_prim_tolistÚ'TS2FXGraphConverter.convert_prim_tolistÄ  s]   € ð ˆØ×-Ñ-¬d°4·;±;³=Ó.AÓBÐDˆØ—-‘-×+Ñ+¨FÓ9ˆØ—k‘k“m×-Ñ-Ó/ˆØ)0×Ñ˜+Ò&r(   c                 ó„   • UR                  5       R                  5       n[        R                  " 5       U R                  U'   g r_   )rº   r¹   r   r}   r  rÛ  s      r&   Úconvert_prim_UninitializedÚ.TS2FXGraphConverter.convert_prim_UninitializedÍ  s.   € ð
 —k‘k“m×-Ñ-Ó/ˆÜ-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r_   rv  rÉ  s     €r&   re  ÚBTS2FXGraphConverter._convert_standard_operators.<locals>.<genexpr>×  rË  rx  )	rµ   rÌ   rB   r   rŸ   r]  rº   r¹   r  rÖ  s   `     r&   r  Ú/TS2FXGraphConverter._convert_standard_operatorsÕ  sa   ø€ Ü+¨D¯I©I«KÑ8ˆÜÔUÀtÇ{Á{Ä}ÓUÓUˆØ—-‘-×-Ñ-¨fÓ;ˆØ—k‘k“m×-Ñ-Ó/ˆØ)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ô   r2   )r  r¼   Ú	node_kindr  Úhandler_funcÚnode_strrS   s          r&   rB  Ú TS2FXGraphConverter.convert_nodeÜ  s�   € Ø—I‘I“Kˆ	ô
 1°Ó;ÐÜ˜t¸×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                 óÌ  • / 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�   rH  )rŽ   r7  zOutput râ   r   r¢   )rÿ   r¢  r¹   rN   r  r  r    r?   r   r
  ÚNoder|  rŸ   r]  rù  r   r  r   r   ÚUSER_OUTPUTr   r  r   rã   r   rº   )r  r4   r¥  Úoutp_name_listro  r>  s         r&   rC  Ú)TS2FXGraphConverter.convert_graph_outputsï  sô  € ØˆØ7;·}±}×7LÑ7LÔ7NÓOÒ7N¨tŸ.™.Ö*Ñ7NÑOÔRVØ×4Ñ4óS
ñ 
ˆô *ˆKØ×/Ñ/Ó/Ø×+Ñ+¨KÑ8�ð ×/Ñ/×1Ñ1Ü" 7¬E¯H©H¯M©M×:Ñ:ØŸ
™
 mÓ3à"Ÿm™m×9Ñ9¼%¿+¹+ÈÀzÓR�GØ—‘˜GÔ$Ø×!Ñ!×(Ñ(ÜÜ"×.Ñ.Ü*°Ñ<Ø*ñöð × 5Ñ 5Ó5Ø—‘˜D×1Ñ1°+Ñ>Ô?Ø×!Ñ!×(Ñ(ÜÜ"×.Ñ.Ü,Ø!,×4IÑ4IÈ+Ñ4Vñð  +ñ÷ô ! 7¨;¨-°zÐ!BÓCÐCñ? *ôB ˆt‹9˜‹>à�M‰M× Ñ  Õ$Ü�‹Y˜!‹^Ø�M‰M× Ñ Ø�Q‘õô �‹Y˜‹]Ø�M‰M× Ñ Øõð
 �M‰M× Ñ  Õ&ùòc Ps   ŸI!)rÛ   rŸ   r  rÞ   r  r  r  r  r  r   r  r  r  rÿ   N)DrC  Ú
__module__Ú__qualname__Ú__firstlineno__r   r   rØ   ÚBlockÚdictr   r}   rÕ   r   r  r  rI  rN   r%  r(  r    r  r5  ÚValuer3  r9  r
  rD  r  rA  r_  rp  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  rB  rC  Ú__static_attributes__r`   r(   r&   rþ   rþ   ‰  s(  † ðDCà—(‘(—.‘. 5§8¡8§>¡>Ñ1ð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ô %,ðN0 U§X¡X§]¡]ô 0ò(ð6N e§h¡h§m¡mô Nð`°5·8±8·=±=ô ð*9 E§H¡H§M¡Mô *9ðX$ 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S rSrSr " S S\5      rS\R                  R                  \R                  R                  -  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 r_   )Úsuperr  Ú
mock_value)r  Ú	dict_datarZ  Ú	__class__s      €r&   r  Ú-ExplainTS2FXGraphConverter._DictMock.__init__-  s   ø€ Ü‰GÑ˜YÔ'Ø(�Or(   c                 ób   >• [         TU ]  U5      (       d  U R                  $ [         TU ]  U5      $ r_   )rY  Ú__contains__rZ  Ú__getitem__)r  Úkeyr\  s     €r&   r`  Ú0ExplainTS2FXGraphConverter._DictMock.__getitem__1  s/   ø€ ô ‘7Ñ'¨×,Ñ,Ø—‘Ð&Ü‘7Ñ& sÓ+Ð+r(   c                 ó   • g©NTr`   )r  ra  s     r&   r_  Ú1ExplainTS2FXGraphConverter._DictMock.__contains__8  s   € Ør(   )rZ  )	rC  rM  rN  rO  r  r`  r_  rS  Ú__classcell__©r\  s   @r&   Ú	_DictMockrW  ,  s   ø† õ	)õ	,÷	ð 	r(   rh  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 r_   r`   r`   r(   r&   r  Ú5ExplainTS2FXGraphConverter.__init__.<locals>.<lambda>Z  s   € ˜r(   r`   )	rY  r  Úunsupported_node_listrU  rh  r  r   r
  rI  )	r  rÿ   r   r  rÛ   r  r  rÞ   r\  s	           €r&   r  Ú#ExplainTS2FXGraphConverter.__init__;  sq   ø€ ô 	‰ÑØØØØ"Ø(ØØ!ô	
ð ;=ˆÔ"ô 7×@Ñ@Ø×Ñä�H‰H�M‰MØØØÙØØóó
ˆÕr(   c                 ó¨   • U R                  5         U R                  R                  5        H  nU R                  U5        M     U R	                  5         g r_   )rA  rÿ   rË   rB  rC  r¬  s     r&   ÚexplainÚ"ExplainTS2FXGraphConverter.explain`  s?   € Ø×!Ñ!Ô#Ø—M‘M×'Ñ'Ö)ˆDØ×Ñ˜dÖ#ñ *à×"Ñ"Õ$r(   c                 ó|   >•  [         TU ]  U5        g ! [         a    U R                  R	                  U5         g f = fr_   )rY  rB  rô   rm  r   )r  r¼   r\  s     €r&   rB  Ú'ExplainTS2FXGraphConverter.convert_nodef  s8   ø€ ð	4Ü‰GÑ  Õ&øÜó 	4Ø×&Ñ&×-Ñ-¨dÖ3ð	4ús   ƒ “%;º;)r  rm  )rC  rM  rN  rO  Ú__doc__rQ  rh  r   r   rØ   rP  r   r}   rÕ   r   r  rp  rB  rS  rf  rg  s   @r&   rU  rU  %  sÌ   ø† ñô�Dô ð#
à—(‘(—.‘. 5§8¡8§>¡>Ñ1ð#
ð ˜C §¡Ð-Ñ.ð#
ð ˜S %§,¡,Ð.Ñ/ð	#
ð
 !% U§X¡X§^¡^°S¸±XÐ%=Ñ >ð#
ð '+¨3°¨8¡nð#
ð ˜s C˜x™.ð#
ð  $ C¨ H™~÷#
òJ%÷4ó 4r(   rU  c              #   ó^   #   • U R                   nSU l          S v •  Xl         g ! Xl         f = f7frd  )Údisabled)rA  rv  s     r&   Údisable_loggingrw  m  s'   é € à�|‰|€HØ€C„Lð Ûà�ø�x�üs   ‚-—" ›-¢*ª-c            	       ó  • \ rS rSr SS\R
                  R                  \R
                  R                  -  S\\	S4   S\
\\	4   S-  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)ÚTS2EPConverteriw  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r_   )Úshaperm  )rd  Úparamr³   s     €r&   re  Ú*TS2EPConverter.__init__.<locals>.<genexpr>�  s:   øé € ð â!+˜Ø—|‘| u§{¡{Ñ2ó ,�V˜u‘_×)Ñ)×+Ð+Ú!+ùs   ƒ?¥?)rz  r]   rÿ   rV   r{  r|  r   r  r?   r   r   r@   rN   Ú
parametersrW   Úitemsrø  Úname_to_non_tensor_attributesr  Úlift_get_attr)r  rz  r{  r|  r%   Ú
param_listr  r³   s          @r&   r  ÚTS2EPConverter.__init__y  s  ø€ ð !ŒÜ+<¸XÓ+SÑ(ˆŒ�t”{ A qà&ÔØ*Ôà68ˆÔØ79ˆÔô ˜dŸm™m¬U¯X©X×-DÑ-D×EÑEô �—‘×)Ñ)Ó+Ô,àð 	ô
 ˜$Ÿ-™-¬¯©×)@Ñ)@×AÑAØ!Ÿ]™]×5Ñ5Ó7×=Ñ=Ö?‘	��6äô á!+ó÷ ñ ð
 -3�D×&Ñ& qÓ)à-3�D×'Ñ'¨Ó*ñ @ð >@ˆÔ*Ø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      (       di  U R                  R%                  5       R'                  5        H=  u  pgXeR$                  ;  d  M  [(        R*                  " SU S3S	S
9  XuR$                  U'   M?     U$ )Nzü
TS2EPConverter logging starts from here.

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

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

%s
zGraphModule: %sF)Úprint_outputz%szManually populate zN into state_dict ExportedProgram, but it is never used by the ExportedProgram.r£   rs  )rA  Úinforÿ   rÝ   rþ   r   r  r„  r  r  r   Úprint_readableÚretrace_as_exported_programr?   rz  r   r   r@   rW   rƒ  ry  rz  )r  rÛ   rÞ   Úgraph_converterrp   Úepr  r³   s           r&   r  ÚTS2EPConverter.convert�  sX  € Ü�‰ðô
	
ô 	�‰Ð,¨d¯m©mÔ<ä8QØ�M‰Mó9
Ñ5Ðô .Ø�M‰MØ×ÑØ×ÑØ"Ø×.Ñ.Ø×!Ñ!Ø!ó
ˆð ×$Ñ$Ó&ˆô 	0°Ô3Ü�‰Ð" B×$5Ñ$5À5Ð$5Ð$IÔJà×-Ñ-ØØ×,Ñ,ó
ˆô 	�‰��rÔô
 ˜$Ÿ-™-¬¯©×)@Ñ)@×AÑAØ!Ÿ]™]×5Ñ5Ó7×=Ñ=Ö?‘	�ØŸM™MÕ)Ü—M’MØ,¨Q¨CÐ/}Ð~Ø#$òð (.—M‘M !Ó$ñ @ð ˆ	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ÿ   rU  r   r  r„  r  rp  r   rm  rP   r™   r   r˜   rÌ   Úprint)	r  r‰  rÛ   rÞ   r�  Úexplain_strr[   ÚnrF  s	            r&   rp  ÚTS2EPConverter.explainÒ  sñ   € ä8QØ�M‰Mó9
Ñ5Ðô 5Ø�M‰MØ×ÑØ×ÑØ"Ø×.Ñ.Ø×!Ñ!Ø!ó
ˆð 	×ÑÔ!Üˆ×4Ñ4Ó5¸Ó9ØNˆKÜ! /×"GÑ"GÖH‘�ØŸ7™7¤3 q£6§<¡<°Ó#5°b°qÐ#9Ó:�Ø ¨!¨¨B¨q¯v©v«x¨j¸¸8¸*ÀAÐFÑF’ò Ið %ˆKÞÜ�+ÔØÐr(   rp   r  c                 ó‚  • [        S U R                  5      n[        R                  R                  R                  UU R                  USSS9nUR                  R                  UR                  5        VVs0 s H8  u  pV[        U[        R                  [        R                  45      (       d  M6  XV_M:     snn5        U H  nUR                  R                  US 5        M!     UR                  R                   HŸ  nUR                   ["        R$                  :X  d  M#  UR&                  U;   d  M5  [        X'R&                     [        R                  5      (       d#  [)        [+        X'R&                     5       S35      e["        R,                  Ul        S Ul        M¡     UR1                  5       R3                  U5        U$ s  snnf )Nc                 óˆ   • [        U[        R                  5      (       a"  [        R                  /UR                  5       -  $ S $ r_   )r?   r   r}   r
   ÚAUTOr   )ÚpathÚxs     r&   r  Ú<TS2EPConverter.retrace_as_exported_program.<locals>.<lambda>ó  s.   € Ü(2°1´e·l±l×(CÑ(C”—‘�
˜QŸU™U›WÑ$ÐMÈÐMr(   FT)Údynamic_shapesr*   Úpre_dispatchz& has been erroneously marked as buffer)r	   r{  r   ÚexportÚ_traceÚ_exportÚ
_constantsÚupdaterƒ  r?   r}   r  rW   ÚpopÚgraph_signaturer  rÌ   r   rN  rJ  rï   r   ÚCONSTANT_TENSORrK  ÚverifierÚcheck)r  rp   r  rœ  rŽ  r  r¸  Úspecs           r&   rŒ  Ú*TS2EPConverter.retrace_as_exported_programí  sx  € ô
 -ñð ×Ñó	
ˆô �\‰\× Ñ ×(Ñ(ØØ×ÑØ)ØØð )ð 
ˆð 	�‰×Ñð -×2Ñ2Ô4ôâ4‘D�AÜ˜a¤%§,¡,´×0BÑ0BÐ!C×Dó �’Ù4òô	
ó "ˆAØ�M‰M×Ñ˜a Ö&ñ "ð ×&Ñ&×2Ô2ˆDà�y‰yœI×,Ñ,Õ,°·±Ð@PÕ1PÜ!Ð"2·;±;Ñ"?ÄÇÁ×NÑNÜ(ÜÐ 0·±Ñ =Ó>Ð?Ð?eÐfóð ô &×5Ñ5�”	Ø"&�–ñ 3ð 	�‰‹×Ñ˜BÔàˆ	ùó)s   Á55F;
Â.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_attr0  s1   ø€ Ø—9‘9˜S“>ˆDØ—‘ˆAÛ�Ü˜A“M’ñ àˆ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_fqn7  sT   ø€ ØŸ™˜v›ˆIØŸ™›×/Ñ/Ó1ˆJØ2°:Ñ>ˆNÞ:H˜.Ð)¨¨9¨+Ð6ˆHØˆ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¹   r?   r   r}   r  r  r  r„  rÍ   )rÏ   r¼   ro  rê   r7  r	  Ú_dfs_get_attrr�   r®  rÞ   r  s         €€€€€r&   r±  Ú3TS2EPConverter.lift_get_attr.<locals>._dfs_get_attr>  s  ø€ ØŸ™Ÿ�Ø—9‘9“;Ð"6Ó6Ø"&§+¡+£-×"9Ñ"9Ó";�KØ9;Ð)¨+Ñ6à—9‘9“; /Ó1Ù& t›}�HÙ$ XÓ.�EØ"&§+¡+£-×"9Ñ"9Ó";�KØ9AÐ)¨+Ñ6Ü! %¬¯©×6Ñ6Ø#¨4×+>Ñ+>Ó>à<A˜D×/Ñ/°Ñ9øÜ# E¬5×+=Ñ+=×>Ñ>Ø#¨4×+@Ñ+@Ó@Ø>C˜D×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 	�d—m‘mÕ$r(   )	r  r  r„  r   rV   r{  r|  rÿ   rz  r_   )T)rC  rM  rN  rO  r   r   rA   r@   rB   r   rQ  r   r  r   r  rw  rA  rp  r
  rD  rŒ  r…  rS  r`   r(   r&   ry  ry  w  s¬   † ð 04ñ	"à—)‘)×(Ñ(¨5¯9©9×+CÑ+CÑCð"ð ˜3 ˜8‘_ð"ð ˜C ˜H‘~¨Ñ,õ	"ðH3˜ô 3ñj �SÓóó ðð4.à�H‰H× Ñ ð.ð ˜s C˜x™.ô.õ`9%r(   ry  )Úrename)hÚbuiltinsÚloggingr£  rG   ry  Úcollections.abcr   r   Ú
contextlibr   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   Ú	getLoggerrC  rA  r'   r:   ÚnnÚModuler   r@   rB   rØ   rN   rA   r]   rc   rg   ro   r
  rD  rŠ   r�   r   r”   r›   r¡   Úuint8Úint8Úint16rÍ  Úint64Úfloat16Úfloat32Úfloat64Ú	complex32Ú	complex64Ú
complex128rl  Úqint8Úquint8Úbfloat16r²   rƒ  rh  r´   ÚmaxÚminr¤  Úis_Úis_notÚnot_Úcontainsr   ru   rv   Ú	sym_numelrw   Úsym_storage_offsetÚ
sym_striderµ   rQ  Ú__annotations__rÀ   rÇ   rP  rÕ   rÝ   rI  rë   rü   rþ   rU  rw  ry  )ra  r7  s   00r&   Ú<module>rÙ     sZ  ðä Û Û Û Û ß .Ý %Ý ã Û Ý õ÷ AÝ 9÷÷ ñ õ 'ð ×Ò˜Ó!€ò	ò"ð8/*Ø�8‰8�?‰?˜UŸY™Y×5Ñ5Ñ5ð/*Ø=EÀc¹]ð/*à
ˆ5�;‰;˜˜[Ñ)¨3°×0BÑ0BÀTÑ0IÐIÑJô/*ò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Ò5Q¡z s˜š
Ñ5QÒRÐ ò	'ð  —‘Ø—‘Ø ×(Ñ(Ø—L‘LØ—‘Ø—]‘]Ø"×+Ñ+Ø#Øð —9‘9—>‘>×+Ñ+Ø—)‘)—.‘.×)Ñ)Ø!ŸI™IŸN™N×=Ñ=Ø—I‘I—N‘N×-Ñ-ñ=Ð ˜D  h¨s°C¨xÑ&8Ð!8Ñ9ó ò&0ò)ðM5Ø�8‰8�>‰>ðM5à
ˆ4�—‘—‘  C¡Ð(Ñ)¨4°°S°©>Ð9Ñ:ôM5ð`Ø  S ™>ðØ16·±·±ðàôð2˜%Ÿ(™(Ÿ-™-ô ÷.Y'ñ Y'ôxE4Ð!4ô E4ðP ñ ó ð ÷_%ò _%ùóC% Ss   ÇN