Ë
    L²j7þ  ã                   óü  — U d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dlm
Z
 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jH                  jJ                  ejL                  jN                  z  dee
   de(ejR                  e*d   e
ejV                  dz  f   fd„Z,d„ Z-d„ Z.d„ Z/dej`                  jb                  fd„Z2d„ Z3d>de4de4de4fd„Z5de4de4fd„Z6d„ Z7ejp                  d e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*iZGeGj‘                  «       D � �ci c]  \  } }|| “Œ
 c}} ZId+„ ZJe j–                  e j˜                  ejš                  ejœ                  ejž                  ej                   ej¢                  eJeRej¦                  j¨                  jª                  ej¦                  j¨                  j¬                  ej¦                  j¨                  j®                  ej¦                  j¨                  j°                  d,œZYeZe4ed-e
f   f   e[d.<   d/„ Z\d0„ Z]d1ej                  jR                  de(eZej                  j¼                  e_e4   f   eZe4e4f   f   fd2„Z`d3eZe4e4f   d4ej                  jÂ                  de4fd5„Zbd4ej                  jÂ                  fd6„Zc G d7„ d8«      Zd G d9„ d:ed«      Zee	d;„ «       Zf G d<„ d=«      Zgyc c}} w )?é    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                 ó$  — 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          úV/var/www/html/ia-enhanced/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(   r3   r4   Ú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Ú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Üœ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_addrc   |   s   € Øˆq‰5€Lr(   c                 ó   — | |gz   S r_   r`   )Ú	containerÚelements     r&   Úlist_appendrg   €   s   € Ø˜�yÑ Ð r(   c                 ó4   — |d| }||d } | g |¢|‘|¢­i |¤ŽS )z¡
    subgraph: GraphModule from sub-block.
    iter_idx: The index of interaction.
    len_loop_local_arguments: The number of loop local arguments in args.
    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                 ó>   — 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_intry   Ú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   ru   rv   rw   rx   )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)rp   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   r2   Ú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_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                 ó¦   — | 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(   rC   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·   rO   Ú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(   r`   )rC   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¶   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                 óö  — | j                  «       }|dk(  rt        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 )Ú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ˆÜ$ _°gÓ>ÐÙÜ!Ð"4°hÓ?ˆKð Ðð -×4Ñ4‰Kð Ðøô ò ÜØ& t§y¡y£{ m°=ÀÇÁÃÀÐPó
àð	ûðús   Á74B< Â-B< Â<	C8Ã.C3Ã3C8c                   óx	  — e Zd Zdej                  j
                  ej                  j                  z  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j0                  j2                  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*„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/„ Z4d
ej                  j                  fd0„Z5d1ej                  j                  fd2„Z6d
ej                  j                  fd3„Z7d
ej                  j                  fd4„Z8d
ej                  j                  fd5„Z9d
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<„Z@d=„ ZAy>)?ÚTS2FXGraphConverterÚts_graphÚname_to_paramÚname_to_bufferrØ   Úname_to_non_tensor_attributeÚname_to_constantrÚ   c                 ó^  ‡ — |‰ _         |‰ _        |‰ _        t        j                  j                  «       ‰ _        g ‰ _        g ‰ _        i ‰ _	        |‰ _
        |‰ _        i ‰ _        |‰ _        i ‰ _        |‰ _        t         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Ø   r³   r™   ÚsetattrrÒ   Ú#name_update_from_subblock_to_parent)
r  rú   rû   rü   rØ   rý   rþ   rÚ   ÚkÚhandler_func_names
   `         r&   Ú__init__zTS2FXGraphConverter.__init__Š  sÅ   ø€ ð !ˆŒà*ˆÔà,ˆÔä(-¯©¯©Ó(8ˆŒØ,.ˆÔØ.0ˆÔð
 ð 	Ôð
 1AˆÔð 6KˆÔ"ð BDˆÔ.ð
 =YˆÔ)à:<ˆŒð '=ˆÔ#ô ,ò 	ˆ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_noderi   Ú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  ri   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   rB   )r  rº   ré   r4   rl   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ˆ   rC   Úlint)r  rº   rp   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$t)        dt+        | j                   |   «      › �«      ‚t	        |«      }| j
                  j                  t        t        j,                  t/        ||¬«      |d¬«      «       t        | j                  || j                  «       «      }n‘t#        |j+                  «       t$        j0                  «      r�Œt	        |d¬	«      }| j
                  j                  t        t        j2                  t        |¬«      |¬«      «       | j                  j5                  |«      }|| j6                  |<   �Œ€ y )
Nr‹   ©ÚargÚtargetT)r9  r:  Ú
persistentz0Input conversion only handles ScriptObject, got )rŒ   Ú	class_fqnFr¶   )rŽ   )rú   r   r·   rû   r’   r  r   r   r   Ú	PARAMETERr   rŸ   r�   rž   rü   ÚBUFFERrþ   r?   r   r  rê   r   Ú
CUSTOM_OBJr   Ú	ClassTypeÚ
USER_INPUTrœ   r  )r  Úgraph_inputrŒ   Únormalized_namer0  s        r&   r2  z(TS2FXGraphConverter.convert_graph_inputsV  s;  € ØŸ=™=×/Ñ/Ó1ó =	.ˆKØ×(Ñ(Ó*ˆDà�t×)Ñ)Ñ)Ü"0°Ó"6�Ø× Ñ ×'Ñ'ÜÜ!×+Ñ+Ü*°Ô@Ø#ôôô >Ø—M‘M 4¨×)@Ñ)@Ó)Bó’ð ˜×,Ñ,Ñ,Ü"0°Ó"6�Ø× Ñ ×'Ñ'ÜÜ!×(Ñ(Ü*°Ô@Ø#Ø#'ô	ôô >Ø—M‘M 4¨×)@Ñ)@Ó)Bó’ð ˜×.Ñ.Ñ.Ü! $×"7Ñ"7¸Ñ"=¼u×?QÑ?QÔRÜ(ØJÌ4ÐPT×PeÑPeÐfjÑPkÓKlÐJmÐnóð ô #1°Ó"6�Ø× Ñ ×'Ñ'ÜÜ!×,Ñ,Ü-Ø!0¸Oôð  $Ø#(ôô	ô >Ø—M‘M 4¨×)@Ñ)@Ó)Bó‘ô ˜K×,Ñ,Ó.´·±Ô@áä"0°¸gÔ"F�Ø× Ñ ×'Ñ'ÜÜ!×,Ñ,Ü*°Ô@Ø#ôôð Ÿ-™-×3Ñ3°OÓD�à&-ˆD×Ñ˜dÓ#ñ{=	.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_functionrB   r  r¸   r·   )r  rº   rJ  r\   Úinp_listr0  s         r&   Úconvert_aten_Floatz&TS2FXGraphConverter.convert_aten_Float–  st   € ò	2ð CGÇ+Á+Ã-ÖP¸3�D×1Ñ1°#Õ6ÐPˆÐPØ—-‘-×-Ñ-ØÜ�(‹Oó
ˆð 8?ˆ×Ñ˜$Ÿ+™+›-×1Ñ1Ó3Ò4ùò Q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?   rx   )Ú.0ra   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)r4   rl   Ú	to_tensors     €r&   r:  z7TS2FXGraphConverter.convert_aten_tensor.<locals>.target¯  s6   ø€ Ø˜&Ñ  V¨G¡_Ð%@Ü"6°v¸g±Ñ"G��w‘Ù˜dÐ- fÑ-Ð-r(   N)r)  r   ru   rv   r±   rî   Ú_schemaÚboolÚallÚ_refsr¸   r·   r�   rK  r  )	r  rº   r4   rl   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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!r¡   ©Ú
stacklevelc              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ÚwarnrB   r   r�   rK  rg   r  r¸   r·   ÚinputsAtrž   Úopr  rÔ   )r  rº   r4   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[   rh  r¹   r�   r›   r  rI  rj  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¹   rB   r  r¸   r·   )r  rº   r\   rL  r0  s        r&   Úconvert_prim_CallMethodz+TS2FXGraphConverter.convert_prim_CallMethodð  ss   € ØBFÇ+Á+Ã-ÖP¸3�D×1Ñ1°#Õ6ÐPˆÐPØ—-‘-×+Ñ+Ø�F‰F�6‹NÜ�(‹Oó
ˆð 8?ˆ×Ñ˜$Ÿ+™+›-×1Ñ1Ó3Ò4ùò Q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_typerw  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ð ×:Ñ:¸8ÑDð 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Ú   rB   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  rP   ÚoutputsÚoperatorÚgetitem)
r  rº   r:  r4   rl   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_ListConstructA  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_iteratorD  sP   € ØEIÇ[Á[Ã]ÖS¸c�t×4Ñ4°SÕ9ÐSˆÐSà—k‘k“m×-Ñ-Ó/ˆØ)4ˆ×Ñ˜+Ò&ùò Ts   “Ac                 óT  — i }d\  }}t        |j                  «       «      D ]I  \  }}|dz  dk(  r| j                  |«      }Œ | j                  |«      }|�|€t        d«      ‚|||<   d\  }}ŒK |€|�t        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).)rP   r   r'  rê   r¸   r·   r  )r  rº   Úoutput_dictr  Úvr[   r\   rZ  s           r&   Úconvert_prim_DictConstructz.TS2FXGraphConverter.convert_prim_DictConstructJ  sÃ   € ØˆØ‰ˆˆ1Ü §¡£Ó.ò 
	"‰FˆAˆsð �1‰u˜ŠzØ×1Ñ1°#Ó6‘à×1Ñ1°#Ó6�Ø�9  	Ü(Ð)UÓVÐVØ!"�˜A‘Ø!‘�‘1ð
	"ð ˆ=˜A˜MÜ ØYóð ð —k‘k“m×-Ñ-Ó/ˆØ)4ˆ×Ñ˜+Ò&r(   c                 ó&   — | j                  |«       y r_   ©Ú_convert_prim_unpack_iteratorrŽ  s     r&   Úconvert_prim_ListUnpackz+TS2FXGraphConverter.convert_prim_ListUnpacka  ó   € Ø×*Ñ*¨4Õ0r(   c                 ó&   — | j                  |«       y r_   rš  rŽ  s     r&   Úconvert_prim_TupleUnpackz,TS2FXGraphConverter.convert_prim_TupleUnpackd  r�  r(   c                 ó  — t        |j                  «       «      D ]o  \  }}|j                  «       }| j                  |j	                  «       «      }| j
                  j                  t        j                  ||f«      }|| j                  |<   Œq y r_   )
rP   r…  r·   r'  r¶   r�   rK  r†  r‡  r  )r  rº   r[   rˆ  Ú	outp_namer\   r0  s          r&   r›  z1TS2FXGraphConverter._convert_prim_unpack_iteratorg  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>r  ó   øè ø€ ÒU¸e�T×2Ñ2°5×9ÑUùra  r¯   )r   ru   rv   Ú_to_copyrî   rB   r   r�   rK  Úint32Ú_local_scalar_denser¸   r·   r  )r  rº   r:  r4   Úto_copy_noder0  rZ  s   `      r&   Úconvert_aten_Intz$TS2FXGraphConverter.convert_aten_Into  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¥  ra  r¯   )r   ru   rv   ry   rB   r   r�   rK  Úlongr¸   r·   r  ©r  rº   r:  r4   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   ru   rv   Úconvolutionrî   r)  rV  r�   rK  r¸   r·   r  )r  rº   r:  r4   rl   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}   ÚnumelrN   rH  r�   rK  ru   rv   rz   r{   rB   r¸   r·   r  rŠ  )r  rº   r:  ré   r4   rl   Ú	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ñ'
ùra  )	rB   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                 ó2  — t        |«      }| j                  ||j                  «      \  }}|t        j                  j
                  j                  j                  u s1|t        j                  j
                  j                  j                  u �rq|j                  «       j                  «       D �cg c]  }|j                  ‘Œ }}|D �cg c]   }|j                  «       dk7  rt        |«      ‘Œ" }}t        d„ |D «       «      }	|	rýt        |«      dk  rt        dt        |«      › �«      ‚t!        |«      }
d|
d<   | j"                  j%                  t        j                  j
                  j                  j                  t'        |
«      «      }| j"                  j%                  t        j                  j
                  j(                  j*                  |f«      }|j                  «       j-                  «       }|| j.                  |<   y | j1                  |«       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£   zexpected at least 4 args, got Tr¢   )r÷   r)  rV  r   ru   rv   rF  r¯   Ú
prim_dtyper¸   ÚusesÚuserré   Úanyr   rê   rN   r�   rK  rB   Úclonerî   r·   r  rŠ  )r  rº   r:  r4   Ú_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ô%ó "Ðñ "Ü�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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                  u rk| j                  ||j                  «      \  }}|j                  «       j                  «       }| j                   j#                  t$        |«      | j&                  |<   y | j)                  |«       y )Nrè   r   r    z$unable to determined the target for )ré   r?   rd  r   r   ÚListTyperu   rv   rÔ   rI  r2   r÷   r)  rV  r¸   r·   r�   rK  rc   r  rŠ  )r  rº   r:  r4   rË  rZ  s         r&   Úconvert_aten_addz$TS2FXGraphConverter.convert_aten_addî  s  € Ø�;‰;‹=˜MÒ)Ü˜$Ÿ-™-¨Ó*×/Ñ/Ó1´5·>±>ÔBÄzØ—‘˜aÓ ×%Ñ%Ó'¬¯©ôHô Ÿ™Ÿ™×+Ñ+×-Ñ-‘ä"Ð%IÈ$ÈÐ#PÓQÐQä$ 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¡   )rN   r   r·   rþ   r2   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           	      ó–  — t        |j                  «       «      }| j                  |«       | j                  |d   «      }|dd  D �cg c]  }|j	                  «       ‘Œ }}| j                  |«      }|j                  «       D ]   }|j                  | j                  |   «      }Œ" t        |«      }| j                  ||«      \  }}	t        |«      dk7  rt        dt        |«      › �«      ‚|	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«      | j0                  |<   | j0                  |   ||<   Œe t)        |
j                  «      D ]‰  \  }}| j                   j#                  t,        j.                  |||j'                  «       z   dz   f«      | j0                  |<   |j3                  |«      }| j0                  |   |||j'                  «       z   |z   <   Œ‹ �Œl y c c}w c c}w )Nr   r¡   r    zexpected 1 subgraph node, got )rN   r   rÚ  r'  r·   r  rË   rÓ   rØ   r  r   rê   rž   r  r,  Úranger�   rK  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ˆ  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Ä#ÀnÓBUÐAVÐ!WÓXÐXØ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Ñ+ð ˜a $×"2Ñ"2Ó"4Ñ4Ð7LÑLÒMòñ9)	ùò=  Gùò4
s   ÁKÄ.KÚ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Ê   r2   )r  rä  rÍ   rº   s       r&   Ú_check_set_attr_in_if_blockz/TS2FXGraphConverter._check_set_attr_in_if_blockm  sM   € Ø—^‘^Ó%ò 	ˆEØŸ™›ò �Ø—9‘9“; /Ó1Ü&ð-óð ññ	r(   c                 ó$  — | j                  |«       t        |j                  «       «      }t        |«      dk7  rt	        dt        |«      › �«      ‚| j                  |d   «      }| j                  |«      }|j                  «       D ]   }|j                  | j                  |   «      }Œ" t        |«      }| j                  ||«      \  }}t        |«      dk7  rt	        dt        |«      › �«      ‚|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.        j0                  ||f«      }|| j(                  |<   ŒR y y c c}w )Nr    z#expected 1 input for prim::If, got r   r¡   zexpected 2 subgraph nodes, got )ræ  rN   r   r   rê   r'  r  rË   rÓ   rØ   r  r,  rB   r�   rK  r   Úcondr„  r¸   r·   r  rP   r…  r†  r‡  )r  rº   r   Ú	predicaterÖ   rÍ   r  r%   rŒ   rà  r4   Ú	cond_noderZ  r[   r¸   r‡  s                   r&   Úconvert_prim_Ifz#TS2FXGraphConverter.convert_prim_Ifw  sû  € Ø×(Ñ(¨Ô.ä�d—k‘k“mÓ$ˆÜˆv‹;˜!ÒÜ Ð#FÄsÈ6Ã{ÀmÐ!TÓUÐUØ×1Ñ1°&¸±)Ó<ˆ	ð ×6Ñ6°tÓ<ˆ	ð —[‘[“]ò 	LˆEØ!Ÿ™¨×(CÑ(CÀEÑ(JÓK‰Ið	Lô ˜“Oˆ	Ø ×;Ñ;¸DÀ)ÓLÑˆ˜äˆ~Ó !Ò#Ü Ø1´#°nÓ2EÐ1FÐGóð ð ENÖ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   Ã1Hc                 ó&   — | j                  |«       y r_   )Ú_convert_as_nooprŽ  s     r&   Úconvert_aten_Boolz%TS2FXGraphConverter.convert_aten_Bool£  s   € Ø×Ñ˜dÕ#r(   c                  ó   — y r_   r`   rŽ  s     r&   Úconvert_prim_Enterz&TS2FXGraphConverter.convert_prim_Enter¦  s   € ð
 	r(   c                  ó   — y r_   r`   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é   r4   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¥  ra  )r   ru   ÚprofilerÚ_record_function_exitrB   r   r�   rK  )r  rº   r:  r4   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�   rq  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¥  ra  )	r³   rÊ   rB   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ï   r2   )r  rº   Ú	node_kindr  Úhandler_funcÚnode_strrS   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·   rN   r  r  rž   r?   r   r  ÚNodere  r�   rK  rÊ  r   r  r   r   ÚUSER_OUTPUTr   rþ   r   rß   r   r¸   )r  r4   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)Br  Ú
__module__Ú__qualname__r   r   rÕ   ÚBlockÚdictr   r}   rÒ   r   r  r  r	  rN   r  r  rž   r  r)  ÚValuer'  r,  r  r5  r  r2  rM  r[  rf  ro  rr  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ý  r  r3  r4  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                   óN  ‡ — e Zd ZdZ G d„ de«      Zdej                  j                  ej                  j                  z  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__1  s,   ø€ ô ‘7Ñ'¨Ô,Ø—‘Ð&Ü‘7Ñ& sÓ+Ð+r(   c                  ó   — y©NTr`   )r  r  s     r&   r  z1ExplainTS2FXGraphConverter._DictMock.__contains__8  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_   r`   r`   r(   r&   r  z5ExplainTS2FXGraphConverter.__init__.<locals>.<lambda>Z  s   � r(   r`   )	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__;  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.explain`  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_nodef  s8   ø€ ð	4Ü‰GÑ  Õ&øÜò 	4Ø×&Ñ&×-Ñ-¨dÖ3ð	4ús   ƒ “$:¹:)r  r  r  Ú__doc__r  r"  r   r   rÕ   r  r   r}   rÒ   r   r  r(  r3  r   r!  s   @r&   r  r  %  sÌ   ø„ ñô�Dô ð#
à—(‘(—.‘. 5§8¡8§>¡>Ñ1ð#
ð ˜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-  m  s,   è ø€ à�|‰|€HØ€C„Lð Ûàˆ�ø�xˆ�üs   ‚/—# ›/£	,¬/c            	       ó  — e Zd Z	 ddej                  j
                  ej                  j                  z  deedf   de	e
ef   dz  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)r0  r]   rú   rV   r1  r2  rû   rü   r?   r   r   r@   rN   Ú
parametersrW   ÚitemsrÉ  Úname_to_non_tensor_attributesrþ   Úlift_get_attr)r  r0  r1  r2  r%   Ú
param_listr  r±   s          @r&   r  zTS2EPConverter.__init__y  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           	      ó:  — 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"                  «      si| j                  j%                  «       j'                  «       D ]>  \  }}||j$                  vsŒt)        j*                  d|› 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¡   r]  )r  Úinforú   rÙ   rù   rû   rü   r9  rþ   r  r   Úprint_readableÚretrace_as_exported_programr?   r0  r   r   r@   rW   r8  rb  rc  )r  rØ   rÚ   Úgraph_converterrp   Úepr  r±   s           r&   r  zTS2EPConverter.convert�  sb  € Ü�‰ðô
	
ô 	�‰Ð,¨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ü   r9  rþ   r(  r   r&  rP   r—   r   r–   rÊ   Úprint)	r  r=  rØ   rÚ   rA  Ú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(   rp   rþ   c                 ó`  — 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$t)        t+        ||j&                     «      › d�«      ‚t"        j,                  |_        d |_        Œ˜ |j1                  «       j3                  |«       |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	   r1  r   ÚexportÚ_traceÚ_exportÚ
_constantsÚupdater8  r?   r}   r  rW   ÚpopÚgraph_signaturer  rÊ   r   r>  r:  rê   r   ÚCONSTANT_TENSORr;  ÚverifierÚcheck)r  rp   rþ   rM  rB  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ò 	'ˆDà�y‰yœI×,Ñ,Ó,°·±Ð@PÒ1PÜ!Ð"2°4·;±;Ñ"?ÄÇÁÔNÜ(ÜÐ 0°·±Ñ =Ó>Ð?Ð?eÐfóð ô &×5Ñ5�”	Ø"&�•ð	'ð 	�‰‹×Ñ˜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–   r0  rí   )r  rŒ   r—  rG  r  s       €r&   r›   z.TS2EPConverter.lift_get_attr.<locals>.get_attr0  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_fqn7  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þ   r9  rË   )rÍ   rº   rZ  rå   r*  rØ  Ú_dfs_get_attrr›   r]  rÚ   r  s         €€€€€r&   r_  z3TS2EPConverter.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Ø#¨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&   r:  zTS2EPConverter.lift_get_attr  sC   ü€ ð" 13Ðð	œ#õ 	ð	œ%Ÿ(™(Ÿ-™-õ 	÷	,ð 	,ñ0 	�d—m‘mÕ$r(   r_   )T)r  r  r  r   r   rA   r@   rB   r   r  r   r  r   r  r-  r  r(  r  r5  r@  r:  r`   r(   r&   r/  r/  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(   r/  )Úrename)hÚbuiltinsÚloggingr†  rG   rb  Ú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   Ú	getLoggerr  r  r'   r:   ÚnnÚModuler   r@   rB   rÕ   rN   rA   r]   rc   rg   ro   r  r5  rˆ   r�   r   r’   r™   rŸ   Úuint8Úint8Úint16r§  Úint64Úfloat16Úfloat32Úfloat64Ú	complex32Ú	complex64Ú
complex128rW  Úqint8Úquint8Úbfloat16r°   r8  rT  r²   ÚmaxÚminr‡  Úis_Úis_notÚnot_Úcontainsr   ru   rv   Ú	sym_numelrw   Úsym_storage_offsetÚ
sym_strider³   r  Ú__annotations__r¾   rÅ   r  rÒ   rÙ   r	  ræ   r÷   rù   r  r-  r/  )r  r*  s   00r&   ú<module>r…     sZ  ðä Û Û Û Û ß .Ý %Ý ã Û Ý õ÷ AÝ 9÷÷ ñ õ 'ð €g×Ñ˜Ó!€ò	ò"ð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¡z s¨E˜˜s™
Ó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   ÇM8