§
    ž²Åjñ  ã                   ó"  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ  ej         e!¦  «        Z"d	„ Z#d
„ Z$deej%        j&        ej'        j(        f         dee         deej)        e	d         ee
ej*                 f         fd„Z+d„ Z,d„ Z-d„ Z.dej/        j0        fd„Z1d„ Z2d<de3de3de3fd„Z4de3de3fd„Z5d„ Z6ej7        d ej8        dej9        dej:        dej;        dej<        d ej=        d!ej>        d"ej?        d#ej@        d$ejA        d%ejB        d&ejC        d'ejD        d(ejE        d)iZFd*„ eF G                    ¦   «         D ¦   «         ZHd+„ ZIe jJ        e jK        ejL        ejM        ejN        ejO        ejP        eIeQejR        jS        jT        ejR        jS        jU        ejR        jS        jV        ejR        jS        jW        d,œZXd-„ ZYd.„ ZZd/ej        j)        deeej        j[        ee3         f         ee3e3f         f         fd0„Z\d1ee3e3f         d2ej        j]        de3fd3„Z^d2ej        j]        fd4„Z_ G d5„ d6¦  «        Z` G d7„ d8e`¦  «        Zaed9„ ¦   «         Zb G d:„ d;¦  «        ZcdS )=é    N)Úcontextmanager)ÚAnyÚDictÚListÚOptionalÚSequenceÚSetÚTupleÚUnion)Ú_C)Ú'replace_quantized_ops_with_standard_ops)ÚExportedProgram)ÚConstantArgumentÚCustomObjArgumentÚ	InputKindÚ	InputSpecÚ
OutputKindÚ
OutputSpecÚTensorArgument)Úsubgraph_rewriterc                 óX  — g }t          |                      ¦   «         |¦  «        D ]„\  }}dt          |                     ¦   «         ¦  «        v rEt          j                             |¦  «        \  }}|                     t          |¦  «        ¦  «         Œm|                     |d u¦  «         Œ…|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          úHC:\Projects\Historical\venv\Lib\site-packages\torch/_export/converter.pyÚ_get_param_count_listr*       s¥   € ØÐÝ" <×#6Ò#6Ñ#8Ô#8¸+ÑFÔFð =ð =Ñˆ�Ø�S §¢¡¤Ñ/Ô/Ð/Ð/Ýœ×+Ò+¨KÑ8Ô8‰JˆG�QØ×#Ò#¥C¨¡L¤LÑ1Ô1Ð1Ð1à×#Ò# K°tÐ$;Ñ<Ô<Ð<Ð<àÐó    c                 óº  — t           j                             | ¦  «                             ¦   «         }t          j        ¦   «         }t          j        d¦  «         t           j                             | |ddd¬¦  «        \  }}}t          j        |¦  «         |t           j                             | ¦  «                             ¦   «         k    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×7Ò7¸Ñ>Ô>×CÒCÑEÔEÐõ
 #(Ô"AÑ"CÔ"CÐÝ	Ô$ UÑ+Ô+Ð+Ý,1¬I×,FÒ,FØØØØØ"ð -Gñ -ô -Ñ)€K�˜Mõ 
Ô$Ð%@ÑAÔAÐAà�uœy×;Ò;¸EÑBÔB×GÒGÑIÔIÒIÐIÝð:ñ
ô 
ð 	
ð
 ˜	Ð!Ð!r+   r6   r7   Úreturnz	_C.IValuec                 óD  — t          | t          j        j        t          j        j        f¦  «        �rÕt          t          j                             t          |¦  «        ¦  «        d         ¦  «        }d }t          | t          j        j        ¦  «        �r)	 | j        j        }n"# t          $ r}t          d¦  «        |‚d }~ww xY wt          j        |¦  «         t          j        t          j        t          j        | j        ¦  «        d¬¦  «        }t          j        |¦  «        \  }}|                     d¦  «        j        }	t          |¦  «        t          |¦  «        z   }
t'          |	|
¦  «        }t          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                             | ¦  «        }t1          |                     ¦   «         ¦  «        }t1          |                     ¦   «         ¦  «        }t7          |¦  «        t7          |¦  «        z
  }t1          |                     ¦   «         ¦  «        }t;          |¦  «        D ])\  }}||k    r|                     |||z
           ¦  «         Œ*t          j        |¦  «         |||d fS )Nr   z('forward' method must be a script methodT)ÚpreserveParametersÚforwardF)Ú
isinstancer   r   ÚScriptFunctionÚScriptModuleÚtupler   rA   ÚgraphÚAttributeErrorr5   r   Ú$_jit_pass_onnx_function_substitutionÚ_freeze_moduleÚtypingÚcastÚ_cÚ_jit_onnx_list_model_parametersÚ_get_methodr*   Ú"_propagate_and_assign_input_shapesr=   Ú_jit_pass_onnx_lintr0   ÚlistÚvaluesr   r!   r1   Ú	enumerateÚsetDebugName)r6   r7   Úflattened_argsr;   rF   ÚeÚfreezed_moduleÚmoduleÚparamsr"   r#   r$   r'   r(   Ú
state_dictÚgraph_inputsÚuser_input_numÚparam_namesÚiÚinps                       r)   Ú_create_jit_graphr`   H   sç  € õ �%�%œ)Ô2µE´IÔ4JÐKÑLÔLñ .Ý�uœy×1Ò1µ%¸±+´+Ñ>Ô>¸qÔAÑBÔBˆØˆ	å�e�UœYÔ3Ñ4Ô4ñ 	4ðVØœÔ+��øÝ!ð Vð Vð VÝ"Ð#MÑNÔNÐTUÐUøøøøðVøøøåÔ3°EÑ:Ô:Ð:ÝÔ.Ý”�BœO¨U¬XÑ6Ô6È4ðñ ô ˆNõ  Ô?ÀÑOÔO‰NˆF�FØ!×-Ò-¨iÑ8Ô8Ô>ˆLÝ ™+œ+­¨f©¬Ñ5ˆKÝ4°\À;ÑOÔOÐÝœ×+Ò+¨KÑ8Ô8‰JˆG�QÝÔ9Ø�e G™nœnÐ.>ÀÀuñô ˆEð ˜& )¨VÐ3Ð3ð ˆØ”ˆÝ
Ô/°Ñ6Ô6Ð6Ý0°¸Ñ=Ô=ÐÝÔ5Ø�>Ð#3°U¸Eñ
ô 
ˆð �f˜i¨Ð-Ð-å6°u¸dÑCÔCÑ€Eˆ9ÝÔ˜5Ñ!Ô!Ð!Ý”×-Ò-¨eÑ4Ô4€JÝ�*×#Ò#Ñ%Ô%Ñ&Ô&€FÝ˜Ÿš™œÑ'Ô'€LÝ˜Ñ&Ô&­¨Z©¬Ñ8€NÝ�z—’Ñ(Ô(Ñ)Ô)€KÝ˜LÑ)Ô)ð >ð >‰ˆˆ3Ø�ÒÐØ×Ò˜[¨¨^Ñ);Ô<Ñ=Ô=Ð=øÝÔ+¨EÑ2Ô2Ð2Ø�&˜) TÐ)Ð)s   ÂB! Â!
C Â+B;Â;C c                 ó   — | |z   S ©N© )ÚaÚbs     r)   Úlist_addrf   z   s   € Øˆq‰5€Lr+   c                 ó   — | |gz   S rb   rc   )Ú	containerÚelements     r)   Úlist_appendrj   ~   s   € Ø˜�yÑ Ð r+   c                 óH   — |d|…         }||d…         } | g |¢|‘|¢R i |¤ŽS )z 
    subgraph: GraphModule from sub-block.
    iter_idx: The index of interation.
    len_loop_local_arguments: The number of loop local arguments in args.
    Nrc   )ÚsubgraphÚiter_idxÚlen_loop_local_argumentsr7   ÚkwargsÚloop_local_argsÚglobal_argss          r)   Úexecute_subgraph_from_prim_looprr   ‚   sP   € ð Ð4Ð4Ð4Ô5€Oð
 Ð/Ð0Ð0Ô1€KØˆ8ÐG�[ÐG (ÐG¨_ÐGÐGÐGÀÐGÐGÐGr+   Úgmc                 ó>   — d„ }d„ }t          j        | ||¦  «        }d S )Nc                 óL  — t           j        j        j                             | |¦  «        }t           j        j                             |¦  «        }t           j        j        j                             ||d¬¦  «        }t           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_intr|   Údiv_scalar_modeÚ
int_tensors          r)   Úpatternz.inplace_optimize_sym_size_div.<locals>.pattern—   s   € Ý”y”~Ô.×2Ò2°2°sÑ;Ô;ˆÝœ	œ×4Ò4°\ÑBÔBˆÝœ)œ.Ô,×8Ò8Ø˜5°ð 9ñ 
ô 
ˆõ ”Y”^Ô'×.Ò.¨Ñ?Ô?ˆ
ØÐr+   c                 ó`   — t           j        j        j                             | |¦  «        }||z  S rb   )r   rx   ry   rz   r{   )r�   r‚   rƒ   r„   s       r)   Úreplacementz2inplace_optimize_sym_size_div.<locals>.replacement    s)   € Ý”y”~Ô.×2Ò2°2°sÑ;Ô;ˆØ˜uÑ$Ð$r+   )r   Úreplace_pattern)rs   r‡   r‰   Úreplaced_patternss       r)   Úinplace_optimize_sym_size_divrŒ   –   s=   € ðð ð ð%ð %ð %õ *Ô9¸"¸gÀ{ÑSÔSÐÐÐr+   c                 ó‚   — t          | ¦  «        dk    rt          d¦  «        ‚| d                              ¦   «         rdS dS )Nr   zEmpty argument name for codegenFT)r!   r5   Úisdigit©Únames    r)   Úis_valid_for_codegenr‘   §   s@   € Ý
ˆ4�y„y�A‚~€~ÝÐ<Ñ=Ô=Ð=ØˆA„w‡‚ÑÔð ØˆuØˆ4r+   Úrenamer�   Úprefixc                 ó^   — |                       dd¦  «        } t          | ¦  «        r| S |› d| › �S )Nú.r(   )Úreplacer‘   )r�   r“   s     r)   Únormalize_namer—   ¯   s>   € Ø�<Š<˜˜SÑ!Ô!€DÝ˜DÑ!Ô!ð ØˆØÐÐ�tÐÐÐr+   c                 ó\   — |                       d¦  «        }dd                     |¦  «        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                 óZ   — |r|                       |¦  «        S |                      |¦  «        S rb   )Úget_attrÚplaceholder)Úfx_graphr�   Úis_top_level_graphs      r)   Ú#get_node_as_placeholder_or_get_attrr¤   ¼   s2   € Øð 'Ø× Ò  Ñ&Ô&Ð&Ø×Ò Ñ%Ô%Ð%r+   é   é   é   é   é   é   é   é   é	   é
   é   é   é   é   c                 ó   — i | ]\  }}||“Œ	S rc   rc   )Ú.0ÚkeyÚvalues      r)   ú
<dictcomp>r·   Ô   s   € ÐRÐRÐR¡z s¨E˜˜sÐRÐRÐRr+   c                 ó`   — | 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_ENUMr5   )Útensorr¹   s     r)   Úget_dtype_as_intr¼   ×   s9   € ð ŒL€EØÕ(Ð(Ð(ÝÐ7°Ð7Ð7Ñ8Ô8Ð8Ý Ô&Ð&r+   )z	prim::maxz	prim::minzprim::TupleIndexzaten::__is__zaten::__isnot__zaten::__not__zaten::__contains__zprim::dtypez	aten::lenzaten::numelz
aten::sizezaten::storage_offsetzaten::stridec                 óÎ   — |                       ¦   «                              ¦   «         |                      ¦   «                              ¦   «         }}|                      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Æ   ù   sO   € Ø $§
¢
¡¤× 6Ò 6Ñ 8Ô 8¸$¿+º+¹-¼-×:QÒ:QÑ:SÔ:S�X€OØ—’�v‘”€IØ�_ iÐ/Ð/r+   c                 ó    — g }| |v r'|                      ||          ¦  «         ||          } | |v °'d                     t          |¦  «        ¦  «        S ©Nr•   )r    rœ   Úreversed)ÚirÚref_mapÚname_mapr�   s       r)   Úconstruct_fqnrÍ   ÿ   sX   € Ø€IØ
�ˆ-ˆ-Ø×Ò˜ "œÑ&Ô&Ð&Ø�RŒ[ˆð �ˆ-ˆ-ð �8Š8•H˜YÑ'Ô'Ñ(Ô(Ð(r+   rF   c                 ój   ‡‡‡‡‡— 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                 óä   •— |                       ¦   «         D ]Y}|                     ¦   «         dk    rt          |¦  «        \  }}}|‰|<   |‰|<   |                     ¦   «         D ]} ‰|¦  «         ŒŒZdS )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(  sš   ø€ ð —K’K‘M”Mð 
	0ð 
	0ˆDØ�yŠy‰{Œ{˜oÒ-Ð-õ
 ;¸4Ñ@Ô@ñ	ØØ#Øà/>Ð" 8Ñ,Ø.7Ð! (Ñ+ØŸš™œð 0ð 0�Ø(Ð(¨Ñ/Ô/Ð/Ð/ð0ð
	0ð 
	0r+   c                 ó  •— t          ¦   «         }|                      ¦   «         D ]¼}|                     ¦   «         D ] }|                      ‰|¦  «        ¦  «        }Œ!|                     ¦   «         dk    rm|                     ¦   «                              ¦   «         }|t          ‰                     ¦   «         ¦  «        vr$|                     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¿   rR   ÚaddrÍ   rB   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_attrs8  sü   ø€ õ
 "™eœeˆ	Ø—K’K‘M”Mð 	ð 	ˆDØŸš™œð Pð P�à%ŸOšOÐ,GÐ,GÈÑ,NÔ,NÑOÔO�	�	Ø�yŠy‰{Œ{˜oÒ-Ð-ØŸ;š;™=œ=×2Ò2Ñ4Ô4�ð ¥3Ð'9×'@Ò'@Ñ'BÔ'BÑ#CÔ#CÐCÐCØ—M’MÝ% hÐ0BÐDUÑVÔVñô ð øõ ˜%¥¤¤Ñ0Ô0ð 	6Ø,5Ð" 5Ñ)ØÐr+   rc   )rF   rÖ   rß   rà   r×   rØ   s    @@@@@r)   Úget_block_to_lifted_attrsrá     s›   øøøøø€ ð& >@Ðð *,Ðð )+Ðð0ð 0ð 0ð 0ð 0ð 0ð 0ð ð ð ð ð ð ð ð ð2 Ð˜UÑ#Ô#Ð#ØÐ Ñ&Ô&Ð&à!Ð#4Ð4Ð4r+   Úname_to_attribute_fqnrÂ   c                 ó´  ‡ — dt           fˆ fd„}|                     ¦   «         dk    r4t          |                     ¦   «         ¦  «                             ¦   «         }nR|                     ¦   «         dk    r'|                     ¦   «                              ¦   «         }nt          d|› d�¦  «        ‚|                     d¦  «        } ||¦  «        }|r|› d|› �n|}|S )Nr�   c                 óB   •— | ‰v r‰|          S t          d| › d�¦  «        ‚©Nz
Attribute ú
 not found)Ú
ValueError)r�   râ   s    €r)   r    z0get_attribute_fqn_from_ts_node.<locals>.get_attrZ  s4   ø€ ØÐ(Ð(Ð(Ø(¨Ô.Ð.åÐ:¨$Ð:Ð:Ð:Ñ;Ô;Ð;r+   úprim::SetAttrrÐ   z7Unexpected node kind when getting attribute fqn. node: ú r•   )r   rÒ   Únextr   r¿   r¾   r5   rÁ   )râ   rÂ   r    Ú
input_namerÅ   Úroot_attr_nameÚattr_fqns   `      r)   Úget_attribute_fqn_from_ts_noderî   W  sð   ø€ ð<•sð <ð <ð <ð <ð <ð <ð ‡y‚y�{„{�oÒ%Ð%Ý˜$Ÿ+š+™-œ-Ñ(Ô(×2Ò2Ñ4Ô4ˆ
ˆ
Ø	�Š‰Œ˜Ò	'Ð	'Ø—Z’Z‘\”\×+Ò+Ñ-Ô-ˆ
ˆ
åØMÀdÐMÐMÐMñ
ô 
ð 	
ð —’�v‘”€IØ�X˜jÑ)Ô)€NØ2@ÐO�.Ð.Ð. 9Ð.Ð.Ð.Ài€Hà€Or+   c                 ó  — |                       ¦   «         }|dk    sJ d| › �¦   «         ‚t          j                             |¦  «        }t	          |j        ¦  «                             d¦  «        \  }}|j        }	 t          t          j	        |¦  «        }t          ||¦  «        }|rt          ||¦  «        }n|j
        }nL# t          $ r?}	t          d|                      ¦   «         › d|                       ¦   «         › �¦  «        |	‚d }	~	ww xY w|S )Nú(no schema)zgot empty schema for r™   zUnable to find operator z with schema )Úschemar   r   Úparse_schemar   r�   r›   Úoverload_nameÚgetattrrx   ÚdefaultÚ	Exceptionr5   rÒ   )
rÂ   Ú
schema_strrñ   ÚnsÚop_nameÚoverrideÚop_overload_modÚop_overload_packetÚop_overloadrV   s
             r)   Úget_op_overloadrþ   p  s  € Ø—’‘”€JØ˜Ò&Ð&Ð&Ð(FÀÐ(FÐ(FÑ&Ô&Ð&Ý&+¤h×&;Ò&;¸JÑ&GÔ&G€FÝ�f”kÑ"Ô"×(Ò(¨Ñ.Ô.�K€BˆØÔ#€Hð
Ý!¥%¤)¨RÑ0Ô0ˆÝ$ _°gÑ>Ô>ÐØð 	5Ý!Ð"4°hÑ?Ô?ˆKˆKà,Ô4ˆKøøÝð ð ð ÝØP t§y¢y¡{¤{ÐPÐPÀÇÂÁÄÐPÐPñ
ô 
àð	øøøøðøøøð
 Ðs   Á9AB> Â>
DÃ:DÄDc                   óD  — e Zd Zdeej        j        ej        j        f         dee	ej
        f         dee	ej
        f         deej        j        ee	         f         dee	ef         dee	ef         dee	e	f         fd„Zd	„ Zd
ej        j        dee	         fd„Zd„ Zd„ Zde	fd„Zd
ej        j        fd„Zdej        j        fd„Zd„ Zdej        j        fd„Zd„ Zd
ej        j        fd„Zd
ej        j        fd„Zd
ej        j        fd„Zd
ej        j        fd„Z d
ej        j        fd„Z!d
ej        j        fd„Z"d
ej        j        fd„Z#d
ej        j        fd„Z$d
ej        j        fd„Z%d
ej        j        fd „Z&d
ej        j        fd!„Z'd
ej        j        fd"„Z(d
ej        j        fd#„Z)d
ej        j        fd$„Z*d
ej        j        fd%„Z+d
ej        j        fd&„Z,d
ej        j        fd'„Z-d
ej        j        fd(„Z.d
ej        j        fd)„Z/d
ej        j        fd*„Z0d
ej        j        fd+„Z1d
ej        j        fd,„Z2d
ej        j        fd-„Z3d
ej        j        fd.„Z4d/„ Z5d
ej        j        fd0„Z6d1ej        j        fd2„Z7d
ej        j        fd3„Z8d
ej        j        fd4„Z9d
ej        j        fd5„Z:d
ej        j        fd6„Z;d
ej        j        fd7„Z<d
ej        j        fd8„Z=d
ej        j        fd9„Z>d
ej        j        fd:„Z?d
ej        j        fd;„Z@d
ej        j        fd<„ZAd=„ ZBd>S )?ÚTS2FXGraphConverterÚts_graphÚname_to_paramÚname_to_bufferrà   Úname_to_non_tensor_attributeÚname_to_constantrâ   c                 óš  ‡ — |‰ _         |‰ _        |‰ _        t          j                             ¦   «         ‰ _        g ‰ _        g ‰ _        i ‰ _	        |‰ _
        |‰ _        i ‰ _        |‰ _        i ‰ _        |‰ _        t                                ¦   «         D ]%}t%          |¦  «        }	t'          ‰ |	ˆ fd„¦  «         Œ&t)          ¦   «         ‰ _        d S )Nc                 ó.   •— ‰                      | ¦  «        S rb   )Ú_convert_standard_operators)rÂ   Úselfs    €r)   ú<lambda>z.TS2FXGraphConverter.__init__.<locals>.<lambda>Ã  s   ø€ ˜T×=Ò=¸dÑCÔC€ r+   )r  r  r  r   ÚfxrÝ   r¢   Úinput_specsÚoutput_specsÚname_to_noder  râ   Ú!name_to_non_tensor_attribute_noder  Ú	subgraphsrà   Úkind_to_standard_operatorsr1   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Ô(8ˆŒØ,.ˆÔØ.0ˆÔð
 ð 	Ôð
 1AˆÔð 6KˆÔ"ð BDˆÔ.ð
 =YˆÔ)à:<ˆŒð '=ˆÔ#õ ,×0Ò0Ñ2Ô2ð 	ð 	ˆAÝ 4°QÑ 7Ô 7Ðõ ØØ!ØCÐCÐCÐCñô ð ð õ >A¹U¼UˆÔ0Ð0Ð0r+   c                 ó‚   — || j         v p6|| j        v p-|| j        v o$t          | j        |         t          j        ¦  «        S rb   )r  r  r  rB   r   ÚScriptObject)r	  Úfqns     r)   Ú_is_get_attr_nodez%TS2FXGraphConverter._is_get_attr_nodeÍ  sR   € à�4Ô&Ð&ð Ø�dÔ(Ð(ðð �tÔ,Ð,ð OÝ˜tÔ4°SÔ9½5Ô;MÑNÔNð	
r+   rÂ   rÞ   c           
      óâ  — g g }}|                      ¦   «         D ]Ó}t          || j        | j        | j        i | j        | j        ¦  «        }|D ]5}t          |¦  «        }|j         	                    |¦  «        }	|	|j
        |<   Œ6|                     ¦   «         }
|                      |
¦  «        }|                     | j                             |¦  «        ¦  «         |                     |¦  «         ŒÔ||fS rb   )rÓ   r   r  r  rà   r  râ   r—   r¢   r¡   r  ÚconvertÚadd_subgraphr    r    )r	  rÂ   rÞ   Úsubgraph_nodesÚsubgraph_convertersrÕ   Úsubgraph_converterÚ	block_argÚnormalized_block_arg_nameÚplaceholder_noderl   Úsubgraph_names               r)   Ú_convert_block_to_subgraphz.TS2FXGraphConverter._convert_block_to_subgraph×  s  € Ø.0°"Ð+ˆØ—[’[‘]”]ð 	;ð 	;ˆEÝ!4ØØÔ"ØÔ#ØÔ+ØØÔ%ØÔ*ñ"ô "Ðð 'ð Nð N�	Ý,:¸9Ñ,EÔ,EÐ)Ø#5Ô#>×#JÒ#JØ-ñ$ô $Ð ð >NÐ"Ô/°	Ñ:Ð:à)×1Ò1Ñ3Ô3ˆHØ ×-Ò-¨hÑ7Ô7ˆMØ×!Ò! $¤-×"8Ò"8¸Ñ"GÔ"GÑHÔHÐHØ×&Ò&Ð'9Ñ:Ô:Ð:Ð:ØÐ2Ð2Ð2r+   c                 ó¶  — t          ¦   «         }|                     ¦   «         D ]µ}|                     ¦   «         D ]ž}|                     ¦   «         D ]_}|                     ¦   «         | j        v rB|                     ¦   «         | j        vr'|                     |                     ¦   «         ¦  «         Œ`|                     |  	                    |¦  «        ¦  «        }ŒŸŒ¶|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ˆ	Ø—\’\‘^”^ð 
	ð 
	ˆEØ#Ÿkšk™mœmð 	ð 	�
Ø%/×%6Ò%6Ñ%8Ô%8ð Að A�Mà%×/Ò/Ñ1Ô1°TÔ5FÐFÐFØ)×3Ò3Ñ5Ô5¸TÔ=WÐWÐWà!Ÿš m×&=Ò&=Ñ&?Ô&?Ñ@Ô@Ð@øØ%ŸOšOØ×6Ò6°zÑBÔBñô �	�	ð	ð Ðr+   c                 óJ   — t          | j        t          j        j        ¦  «        S rb   )rB   r  r   r   rÝ   )r	  s    r)   r£   z&TS2FXGraphConverter.is_top_level_graph
  s   € Ý˜$œ-­¬¬Ñ8Ô8Ð8r+   r>   c                 óH   — dt          | j        ¦  «        › �}|| j        |<   |S )NÚ	subgraph_)r!   r  )r	  rl   r�   s      r)   r  z TS2FXGraphConverter.add_subgraph  s*   € Ø0�3˜tœ~Ñ.Ô.Ð0Ð0ˆØ'ˆŒ�tÑØˆr+   c                 ó   — g }i }t          |                     ¦   «         |j        ¦  «        D ]R\  }}|j        r|                      |¦  «        ||j        <   Œ*|                     |                      |¦  «        ¦  «         ŒSt          |¦  «        |fS rb   )r   r   rÞ   Ú
kwarg_onlyÚget_fx_value_by_ir_valuer�   r    rE   )r	  rÂ   rñ   r7   ro   r¾   Ú
schema_args          r)   Úget_args_kwargsz#TS2FXGraphConverter.get_args_kwargs  s”   € ØˆØˆÝ!$ T§[¢[¡]¤]°FÔ4DÑ!EÔ!Eð 	Bð 	BÑˆE�:ØÔ$ð BØ*.×*GÒ*GÈÑ*NÔ*N��z”Ñ'Ð'à—’˜D×9Ò9¸%Ñ@Ô@ÑAÔAÐAÐAå�T‰{Œ{˜FÐ"Ð"r+   r¶   c                 ó|  — |                      ¦   «         }|| j        v r| j        |         }|S || j        v rLt          | j        |         t          j        ¦  «        r| j                             |¦  «        S | j        |         S || j        v r |  	                    | j        |         ¦  «        S t          d|› d�¦  «        ‚)NzInput ræ   )r¿   r  r  rB   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ÑPÔPð :Ø”}×-Ò-¨jÑ9Ô9Ð9ØÔ(¨Ô4Ð4Ø˜4Ô5Ð5Ð5Ø×+Ò+¨DÔ,FÀzÔ,RÑSÔSÐSåÐ< jÐ<Ð<Ð<Ñ=Ô=Ð=r+   c                 óä   — || j         v r| j         |         }nX|| j        v r| j        |         }nA|| j        v r| j        |         }n*|| j        v r| j        |         }nt	          d|› d�¦  «        ‚|S rå   )r  r  r  r  rç   )r	  r�   Úfx_nodes      r)   r3  z'TS2FXGraphConverter.get_fx_value_by_fqn,  s•   € Ø�4Ô$Ð$Ð$ØÔ'¨Ô-ˆGˆGØ�TÔ*Ð*Ð*ØÔ+¨DÔ1ˆGˆGØ�TÔ;Ð;Ð;ØÔ<¸TÔBˆGˆGØ�TÔ6Ð6Ð6ØÔ7¸Ô=ˆGˆGåÐ:¨$Ð:Ð:Ð:Ñ;Ô;Ð;Øˆr+   c                 ó˜  — |                       ¦   «          | j                             ¦   «         D ]}|                      |¦  «         Œ|                      ¦   «          t
          j                             i | j        ¥| j	        ¥| j
        ¥| j        ¥| j        ¥| j        ¦  «        }t          |¦  «         |j                             ¦   «          |S rb   )Úconvert_graph_inputsr  rÑ   Úconvert_nodeÚconvert_graph_outputsr   r  ÚGraphModuler  r  r  r  r  r¢   rŒ   rF   Úlint)r	  rÂ   rs   s      r)   r  zTS2FXGraphConverter.convert9  sß   € Ø×!Ò!Ñ#Ô#Ð#à”M×'Ò'Ñ)Ô)ð 	$ð 	$ˆDØ×Ò˜dÑ#Ô#Ð#Ð#à×"Ò"Ñ$Ô$Ð$õ ŒX×!Ò!ðØ”.ðàÔ$ðð Ô%ðð Ô3ð	ð
 Ô'ðð ŒMñ	
ô 	
ˆõ 	& bÑ)Ô)Ð)à
Œ�Š‰Œˆàˆ	r+   c           
      ó.  — | j                              ¦   «         D �]y}|                     ¦   «         }|| j        v r{t	          |¦  «        }| j                             t          t          j	        t          |¬¦  «        |¬¦  «        ¦  «         t          | j        ||                      ¦   «         ¦  «        }�nÔ|| j        v r|t	          |¦  «        }| j                             t          t          j        t          |¬¦  «        |d¬¦  «        ¦  «         t          | j        ||                      ¦   «         ¦  «        }�nO|| j        v r«t#          | j        |         t$          j        ¦  «        s
J d¦   «         ‚t	          |¦  «        }| j                             t          t          j        t+          ||¬¦  «        |d¬¦  «        ¦  «         t          | j        ||                      ¦   «         ¦  «        }n›t#          |                     ¦   «         t$          j        ¦  «        r�Œt	          |d¬	¦  «        }| j                             t          t          j        t          |¬¦  «        |¬¦  «        ¦  «         | j                             |¦  «        }|| j        |<   �Œ{d S )
Nr�   ©ÚargÚtargetT)r@  rA  Ú
persistentz*Input conversion only handles ScriptObject)r�   Ú	class_fqnFr¾   )r“   )r  r   r¿   r  r—   r  r    r   r   Ú	PARAMETERr   r¤   r¢   r£   r  ÚBUFFERr  rB   r   r  Ú
CUSTOM_OBJr   r   Ú	ClassTypeÚ
USER_INPUTr¡   r  )r	  Úgraph_inputr�   Únormalized_namer7  s        r)   r9  z(TS2FXGraphConverter.convert_graph_inputsS  sÇ  € Øœ=×/Ò/Ñ1Ô1ð <	.ñ <	.ˆKØ×(Ò(Ñ*Ô*ˆDà�tÔ)Ð)Ð)Ý"0°Ñ"6Ô"6�ØÔ ×'Ò'ÝÝ!Ô+Ý*°Ð@Ñ@Ô@Ø#ðñ ô ñô ð õ >Ø”M 4¨×)@Ò)@Ñ)BÔ)Bñô �‘ð ˜Ô,Ð,Ð,Ý"0°Ñ"6Ô"6�ØÔ ×'Ò'ÝÝ!Ô(Ý*°Ð@Ñ@Ô@Ø#Ø#'ð	ñ ô ñô ð õ >Ø”M 4¨×)@Ò)@Ñ)BÔ)Bñô �‘ð ˜Ô.Ð.Ð.Ý!ØÔ)¨$Ô/µÔ1Cñô ð @ð @à?ñ@ô @ð õ #1°Ñ"6Ô"6�ØÔ ×'Ò'ÝÝ!Ô,Ý-Ø!0¸Oðñ ô ð  $Ø#(ðñ ô ñ	ô 	ð 	õ >Ø”M 4¨×)@Ò)@Ñ)BÔ)Bñô ��õ ˜K×,Ò,Ñ.Ô.µ´Ñ@Ô@ð Eáå"0°¸gÐ"FÑ"FÔ"F�ØÔ ×'Ò'ÝÝ!Ô,Ý*°Ð@Ñ@Ô@Ø#ðñ ô ñô ð ð œ-×3Ò3°OÑDÔD�à&-ˆDÔ˜dÑ#Ñ#ðy<	.ð <	.r+   c                 óú   ‡ — d„ }ˆ fd„|                      ¦   «         D ¦   «         }‰ j                             |t          |¦  «        ¦  «        }|‰ j        |                     ¦   «                              ¦   «         <   d S )Nc                 óf   — |                       t          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�4Ñ*Ô*×/Ò/Ñ1Ô1Ð1r+   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rc   ©r/  ©r´   r_   r	  s     €r)   ú
<listcomp>z:TS2FXGraphConverter.convert_aten_Float.<locals>.<listcomp>–  ó4   ø€ ð 
ð 
ð 
Ø36ˆD×)Ò)¨#Ñ.Ô.ð
ð 
ð 
r+   )r   r¢   Úcall_functionrE   r  rÀ   r¿   )r	  rÂ   rQ  Úinp_listr7  s   `    r)   Úconvert_aten_Floatz&TS2FXGraphConverter.convert_aten_Float’  s�   ø€ ð	2ð 	2ð 	2ð
ð 
ð 
ð 
Ø:>¿+º+¹-¼-ð
ñ 
ô 
ˆð ”-×-Ò-ØÝ�(‰OŒOñ
ô 
ˆð 8?ˆÔ˜$Ÿ+š+™-œ-×1Ò1Ñ3Ô3Ñ4Ð4Ð4r+   c                 óÊ  ‡— |                       |t          j        j        j        j        j        ¦  «        \  }}|D ] }|dk    rt          ||         ¦  «        ||<   Œ!t          d„ |D ¦   «         ¦  «        rt          j        nt          j	        j        Šˆfd„}| 
                    ¦   «                              ¦   «         }| j                             |||¦  «        }|| j        |<   dS )z9aten::tensor creates a constant tensor ad-hoc --> GetAttrÚrequires_gradc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rb   )rB   r{   )r´   rd   s     r)   ú	<genexpr>z:TS2FXGraphConverter.convert_aten_tensor.<locals>.<genexpr>©  s,   è è € Ð4Ð4¨!•:˜a¥Ñ%Ô%Ð4Ð4Ð4Ð4Ð4Ð4r+   c                  óX   •— d|v r|d         �t           |d                  |d<    ‰| i |¤ŽS )Nr¹   )Ú_TORCH_ENUM_TO_DTYPE)r7   ro   Ú	to_tensors     €r)   rA  z7TS2FXGraphConverter.convert_aten_tensor.<locals>.target­  s>   ø€ Ø˜&Ð Ð  V¨G¤_Ð%@Ý"6°v¸g´Ô"G��w‘Ø�9˜dÐ- fÐ-Ð-Ð-r+   N)r1  r   rx   ry   r»   rõ   Ú_schemaÚboolÚallÚ_refsrÀ   r¿   r¢   rW  r  )	r	  rÂ   r7   ro   r  rA  Úoutput_namer7  r`  s	           @r)   Úconvert_aten_tensorz'TS2FXGraphConverter.convert_aten_tensorŸ  së   ø€ à×+Ò+¨Dµ%´)´.Ô2GÔ2OÔ2WÑXÔX‰ˆˆfàð 	,ð 	,ˆAØ�OÒ#Ð#Ý  ¨¤™OœO��q‘	øõ Ð4Ð4¨tÐ4Ñ4Ô4Ñ4Ô4ð$�EŒLˆLå”Ô#ð 	ð	.ð 	.ð 	.ð 	.ð 	.ð —k’k‘m”m×-Ò-Ñ/Ô/ˆØ”-×-Ò-¨f°d¸FÑCÔCˆØ)0ˆÔ˜+Ñ&Ð&Ð&r+   c                 óT  ‡ — t          j        d¦  «         t          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        }‰ j                             t          |¦  «        }|‰ j        |                     ¦   «          	                    ¦   «         <   |‰ j        | 
                    d¦  «         	                    ¦   «         <   ‰                      ¦   «         sR|d         j        dk    rC‰ j                             | 
                    d¦  «         	                    ¦   «         ¦  «         d S d S d S )Nz±Converting aten::append.t, which is a inplace mutation of the list. This makes the converter non-functional: the result depends on the order of the append nodes being converter!c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rb   rS  rT  s     €r)   r]  z:TS2FXGraphConverter.convert_aten_append.<locals>.<genexpr>Æ  s1   øè è € ÐQÐQ¸C�T×2Ò2°3Ñ7Ô7ÐQÐQÐQÐQÐQÐQr+   r   r¡   )ÚwarningsÚwarnrE   r   r¢   rW  rj   r  rÀ   r¿   ÚinputsAtr£   Úopr  rÜ   )r	  rÂ   r7   r7  s   `   r)   Úconvert_aten_appendz'TS2FXGraphConverter.convert_aten_append»  s  ø€ õ 	Œð|ñ	
ô 	
ð 	
õ
 ÐQÐQÐQÐQÀ4Ç;Â;Á=Ä=ÐQÑQÔQÑQÔQˆØ”-×-Ò-­k¸4Ñ@Ô@ˆØ7>ˆÔ˜$Ÿ+š+™-œ-×1Ò1Ñ3Ô3Ñ4ð ;BˆÔ˜$Ÿ-š-¨Ñ*Ô*×4Ò4Ñ6Ô6Ñ7ð ×&Ò&Ñ(Ô(ð 	W¨T°!¬W¬Z¸=Ò-HÐ-HØÔ4×8Ò8¸¿ºÀqÑ9IÔ9I×9SÒ9SÑ9UÔ9UÑVÔVÐVÐVÐVð	Wð 	WÐ-HÐ-Hr+   c                 óz  — |                      ¦   «                              ¦   «         }d }|                     d¦  «        rñ|                     d¦  «        }|dk    r|                     d¦  «        }nÂ|dk    r|                     d¦  «        }n¦|dk    r|                     d¦  «        }nŠ|dk    rAd|› �}| j                             |¦  «        }|| j	        |<   || 
                    d¦  «        }}nC|dk    r|                     d¦  «        }n't          d|                     d¦  «        › �¦  «        ‚d }|| j        |<   d S )	Nr¶   r^   ÚfrÁ   rP  Úlifted_tensor_ÚivalzUnsupported constant type: )rÀ   r¿   ÚhasAttributeÚkindOfr^   ro  rÁ   r¢   r    r  rP  rq  rç   r  )r	  rÂ   r�   r¶   Úconstant_kindÚ
alias_namer7  s          r)   Úconvert_prim_Constantz)TS2FXGraphConverter.convert_prim_ConstantÑ  sH  € Ø�{Š{‰}Œ}×&Ò&Ñ(Ô(ˆàˆØ×Ò˜WÑ%Ô%ð 	Ø ŸKšK¨Ñ0Ô0ˆMØ Ò#Ð#ØŸš˜w™œ��Ø #Ò%Ð%ØŸš˜w™œ��Ø #Ò%Ð%ØŸš˜w™œ��Ø #Ò%Ð%à+ TÐ+Ð+ð ð œ-×0Ò0°Ñ<Ô<�Ø*1�Ô! $Ñ'Ø(¨$¯&ª&°©/¬/�e��Ø &Ò(Ð(ØŸ	š	 'Ñ*Ô*��å Ð!U¸t¿{º{È7Ñ?SÔ?SÐ!UÐ!UÑVÔVÐVàˆEà&+ˆÔ˜dÑ#Ð#Ð#r+   c                 ó  ‡ — ˆ fd„|                      ¦   «         D ¦   «         }‰ j                             |                     d¦  «        t	          |¦  «        ¦  «        }|‰ j        |                     ¦   «                              ¦   «         <   d S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rc   rS  rT  s     €r)   rU  z?TS2FXGraphConverter.convert_prim_CallMethod.<locals>.<listcomp>î  rV  r+   r�   )r   r¢   Úcall_methodrÁ   rE   r  rÀ   r¿   )r	  rÂ   rX  r7  s   `   r)   Úconvert_prim_CallMethodz+TS2FXGraphConverter.convert_prim_CallMethodí  s‹   ø€ ð
ð 
ð 
ð 
Ø:>¿+º+¹-¼-ð
ñ 
ô 
ˆð ”-×+Ò+Ø�FŠF�6‰NŒNÝ�(‰OŒOñ
ô 
ˆð 8?ˆÔ˜$Ÿ+š+™-œ-×1Ò1Ñ3Ô3Ñ4Ð4Ð4r+   c                 ól  — |                      ¦   «                              ¦   «         }|                     t          j        j                             ¦   «         ¦  «        rF|                     ¦   «         }|                     ¦   «          	                    ¦   «         }|| j
        |<   d S t          d|› d�¦  «        ‚)NzUnsupported JitType (z) when get device)r¾   r   ÚisSubtypeOfr   r   Ú
TensorTypeÚgetÚdevicerÀ   r¿   r  rç   )r	  rÂ   Ú
input_typer  re  s        r)   Úconvert_prim_devicez'TS2FXGraphConverter.convert_prim_device÷  sš   € Ø—Z’Z‘\”\×&Ò&Ñ(Ô(ˆ
Ø×!Ò!¥%¤(Ô"5×"9Ò"9Ñ";Ô";Ñ<Ô<ð 	TØ×&Ò&Ñ(Ô(ˆFØŸ+š+™-œ-×1Ò1Ñ3Ô3ˆKØ17ˆDÔ! +Ñ.Ð.Ð.åÐR°ZÐRÐRÐRÑSÔSÐSr+   c                 óì  — t          | j        |¦  «        }|                     ¦   «                              ¦   «         }|| j        |<   |                      ¦   «         rn|                      |¦  «        r$| j                             |¦  «        | j        |<   d S || j	        vr| j
        |         | j	        |<   | j	        |         | j        |<   d S |                      |¦  «        r| j        |         | j        |<   d S d S rb   )rî   râ   rÀ   r¿   r£   r  r¢   r    r  r  r  )r	  rÂ   rí   re  s       r)   Úconvert_prim_GetAttrz(TS2FXGraphConverter.convert_prim_GetAttr   s  € å1°$Ô2LÈdÑSÔSˆØ—k’k‘m”m×-Ò-Ñ/Ô/ˆØ2:ˆÔ" ;Ñ/à×"Ò"Ñ$Ô$ð 	MØ×%Ò% hÑ/Ô/ð ð 26´×1GÒ1GÈÑ1QÔ1Q�Ô! +Ñ.Ð.Ð.à 4Ô#IÐIÐIð Ô9¸(ÔCð Ô:Ø ñð 26Ô1WØô2�Ô! +Ñ.Ð.Ð.ð ×%Ò% hÑ/Ô/ð MØ15Ô1BÀ8Ô1L�Ô! +Ñ.Ð.Ð.ðMð Mr+   c                 óv  — t          | j        |¦  «        }t          |                     ¦   «         ¦  «        d         }|                      |¦  «        }|                      |¦  «        rH| j                             |¦  «        }| j                             t          j
        j        ||f¦  «         d S || j        |<   d S ©Nr¥   )rî   râ   rE   r   r/  r  r¢   r    rW  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ÈdÑSÔSˆÝ˜4Ÿ;š;™=œ=Ñ)Ô)¨!Ô,ˆ
Ø $× =Ò =¸jÑ IÔ IÐØ×!Ò! (Ñ+Ô+ð 	UØœ=×1Ò1°(Ñ;Ô;ˆLØŒM×'Ò'Ý”Ô" \Ð3HÐ$Iñô ð ð ð ð @UˆDÔ2°8Ñ<Ð<Ð<r+   c                 ó  — t          |¦  «        }|                      ||j        ¦  «        \  }}| j                             |||¦  «        }|                     ¦   «         dk    r2|                     ¦   «                              ¦   «         }|| j        |<   d S t          | 
                    ¦   «         ¦  «        D ]J\  }}|                     ¦   «         }| j                             t          j        ||f¦  «        }	|	| j        |<   ŒKd S r…  )rþ   r1  ra  r¢   rW  ÚoutputsSizerÀ   r¿   r  rS   ÚoutputsÚoperatorÚgetitem)
r	  rÂ   rA  r7   ro   r7  re  r^   ÚoutpÚnext_fx_nodes
             r)   Úconvert_call_function_opz,TS2FXGraphConverter.convert_call_function_op(  sù   € Ý  Ñ&Ô&ˆà×+Ò+¨D°&´.ÑAÔA‰ˆˆfà”-×-Ò-¨f°d¸FÑCÔCˆð
 ×ÒÑÔ Ò"Ð"ØŸ+š+™-œ-×1Ò1Ñ3Ô3ˆKØ-4ˆDÔ˜kÑ*Ð*Ð*å$ T§\¢\¡^¤^Ñ4Ô4ð >ð >‘��4Ø"ŸnšnÑ.Ô.�Ø#œ}×:Ò:ÝÔ$ w° lñ ô  �ð 2>�Ô! +Ñ.Ð.ð>ð >r+   c                 ó0   — |                       |¦  «         d S rb   ©Ú_convert_prim_iterator©r	  rÂ   s     r)   Úconvert_prim_TupleConstructz/TS2FXGraphConverter.convert_prim_TupleConstruct=  ó   € Ø×#Ò# DÑ)Ô)Ð)Ð)Ð)r+   c                 ó0   — |                       |¦  «         d S rb   r”  r–  s     r)   Úconvert_prim_ListConstructz.TS2FXGraphConverter.convert_prim_ListConstruct@  r˜  r+   c                 ó¨   ‡ — ˆ fd„|                      ¦   «         D ¦   «         }|                     ¦   «                              ¦   «         }|‰ j        |<   d S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rc   rS  rT  s     €r)   rU  z>TS2FXGraphConverter._convert_prim_iterator.<locals>.<listcomp>D  s'   ø€ ÐSÐSÐS¸c�t×4Ò4°SÑ9Ô9ÐSÐSÐSr+   )r   rÀ   r¿   r  )r	  rÂ   Úoutput_listre  s   `   r)   r•  z*TS2FXGraphConverter._convert_prim_iteratorC  sP   ø€ ØSÐSÐSÐSÀTÇ[Â[Á]Ä]ÐSÑSÔSˆà—k’k‘m”m×-Ò-Ñ/Ô/ˆØ)4ˆÔ˜+Ñ&Ð&Ð&r+   c                 óv  — i }d\  }}t          |                     ¦   «         ¦  «        D ]Q\  }}|dz  dk    r|                      |¦  «        }Œ$|                      |¦  «        }|�|€
J d¦   «         ‚|||<   d\  }}ŒR|€|�
J d¦   «         ‚|                     ¦   «                              ¦   «         }|| j        |<   d S )N)NNr¦   r   z*DictConstruct has an empty key value pair.zGDictConstruct has an odd number of elements (violating our assumption).)rS   r   r/  rÀ   r¿   r  )r	  rÂ   Úoutput_dictr  Úvr^   r_   re  s           r)   Úconvert_prim_DictConstructz.TS2FXGraphConverter.convert_prim_DictConstructI  sÞ   € ØˆØ‰ˆˆ1Ý §¢¡¤Ñ.Ô.ð 	"ð 	"‰FˆAˆsð �1‰u˜ŠzˆzØ×1Ò1°#Ñ6Ô6��à×1Ò1°#Ñ6Ô6�à�M a m mØ?ñ '4¤mÐ3à!"�˜A‘Ø!‘��1�1ð ˆI˜!˜)˜)ØTñ $œ)Ð#ð —k’k‘m”m×-Ò-Ñ/Ô/ˆØ)4ˆÔ˜+Ñ&Ð&Ð&r+   c                 ó0   — |                       |¦  «         d S rb   ©Ú_convert_prim_unpack_iteratorr–  s     r)   Úconvert_prim_ListUnpackz+TS2FXGraphConverter.convert_prim_ListUnpack`  ó   € Ø×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0r+   c                 ó0   — |                       |¦  «         d S rb   r£  r–  s     r)   Úconvert_prim_TupleUnpackz,TS2FXGraphConverter.convert_prim_TupleUnpackc  r¦  r+   c                 ó,  — t          |                     ¦   «         ¦  «        D ]q\  }}|                     ¦   «         }|                      |                     ¦   «         ¦  «        }| j                             t          j        ||f¦  «        }|| j	        |<   Œrd S rb   )
rS   r�  r¿   r/  r¾   r¢   rW  rŽ  r�  r  )r	  rÂ   r^   r�  Ú	outp_namer_   r7  s          r)   r¤  z1TS2FXGraphConverter._convert_prim_unpack_iteratorf  s‡   € å  §¢¡¤Ñ0Ô0ð 	3ð 	3‰GˆAˆtØŸšÑ(Ô(ˆIØ×/Ò/°·
²
±´Ñ=Ô=ˆCØ”m×1Ò1µ(Ô2BÀSÈ!ÀHÑMÔMˆGØ+2ˆDÔ˜iÑ(Ð(ð		3ð 	3r+   c                 ó²  ‡ — t           j        j        j        j        }t          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        }‰ j                             ||dt           j	        i¦  «        }‰ j                             t           j        j        j
        j        |f¦  «        }|                     ¦   «                              ¦   «         }|‰ j        |<   d S )Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rb   rS  ©r´   r¾   r	  s     €r)   r]  z7TS2FXGraphConverter.convert_aten_Int.<locals>.<genexpr>q  ó1   øè è € ÐUÐU¸e�T×2Ò2°5Ñ9Ô9ÐUÐUÐUÐUÐUÐUr+   r¹   )r   rx   ry   Ú_to_copyrõ   rE   r   r¢   rW  Úint32Ú_local_scalar_denserÀ   r¿   r  )r	  rÂ   rA  r7   Úto_copy_noder7  re  s   `      r)   Úconvert_aten_Intz$TS2FXGraphConverter.convert_aten_Intn  s²   ø€ å””Ô(Ô0ˆÝÐUÐUÐUÐUÀtÇ{Â{Á}Ä}ÐUÑUÔUÑUÔUˆØ”}×2Ò2°6¸4À'Í5Ì;ÐAWÑXÔXˆà”-×-Ò-ÝŒIŒNÔ.Ô6¸¸ñ
ô 
ˆð —k’k‘m”m×-Ò-Ñ/Ô/ˆØ)0ˆÔ˜+Ñ&Ð&Ð&r+   c                 ó>  ‡ — t           j        j        j        }t	          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        }‰ j                             ||dt           j        i¦  «        }| 	                    ¦   «          
                    ¦   «         }|‰ j        |<   d S )Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rb   rS  r­  s     €r)   r]  z?TS2FXGraphConverter.convert_prim_NumToTensor.<locals>.<genexpr>†  r®  r+   r¹   )r   rx   ry   r|   rE   r   r¢   rW  ÚlongrÀ   r¿   r  ©r	  rÂ   rA  r7   r7  re  s   `     r)   Úconvert_prim_NumToTensorz,TS2FXGraphConverter.convert_prim_NumToTensor~  s‡   ø€ õ ””Ô-ˆÝÐUÐUÐUÐUÀtÇ{Â{Á}Ä}ÐUÑUÔUÑUÔUˆà”-×-Ò-¨f°d¸WÅeÄjÐ<QÑRÔRˆØ—k’k‘m”m×-Ò-Ñ/Ô/ˆØ)0ˆÔ˜+Ñ&Ð&Ð&r+   c                 óf   — |                      ¦   «                              ¦   «         }d| j        |<   d S )NÚ )rÀ   r¿   râ   ©r	  rÂ   re  s      r)   Úconvert_prim_CreateObjectz-TS2FXGraphConverter.convert_prim_CreateObjectŒ  s.   € Ø—k’k‘m”m×-Ò-Ñ/Ô/ˆØ24ˆÔ" ;Ñ/Ð/Ð/r+   c                 ó  — t           j        j        j        j        }|                      ||j        ¦  «        \  }}| j                             |||¦  «        }| 	                    ¦   «          
                    ¦   «         }|| j        |<   d S rb   )r   rx   ry   Úconvolutionrõ   r1  ra  r¢   rW  rÀ   r¿   r  )r	  rÂ   rA  r7   ro   r7  re  s          r)   Úconvert_aten__convolutionz-TS2FXGraphConverter.convert_aten__convolution�  ss   € õ ””Ô+Ô3ˆØ×+Ò+¨D°&´.ÑAÔA‰ˆˆfà”-×-Ò-¨f°d¸FÑCÔCˆà—k’k‘m”m×-Ò-Ñ/Ô/ˆØ)0ˆÔ˜+Ñ&Ð&Ð&r+   c                 ó°  — t          |¦  «        }|j        }|                      ||¦  «        \  }}|j        dk    �r|d         j        }|| j        v rït          | j        |         t          j        ¦  «        rÊ| j        |         }| 	                    ¦   «         dk    r¥t          |¦  «        }| j        |                              ¦   «         |d<   | j                             t          j        j        j        j        t%          |¦  «        |¦  «        }	|                     ¦   «                              ¦   «         }
|	| j        |
<   d S |                      |¦  «         d S )NÚTensor_moder¥   )rþ   ra  r1  ró   r�   r  rB   r   r€   ÚnumelrQ   rO  r¢   rW  rx   ry   r}   r~   rE   rÀ   r¿   r  r’  )r	  rÂ   rA  rñ   r7   ro   Ú	arg1_nameÚtensor_constantÚupdated_argsr7  re  s              r)   Úconvert_aten_divz$TS2FXGraphConverter.convert_aten_div›  s=  € Ý  Ñ&Ô&ˆØ”ˆà×+Ò+¨D°&Ñ9Ô9‰ˆˆfð Ô =Ò0Ñ0Ø˜QœœˆIØ˜DÔ1Ð1Ð1µjØÔ% iÔ0µ%´,ñ7ô 7Ð1ð #'Ô"7¸	Ô"B�Ø"×(Ò(Ñ*Ô*¨aÒ/Ð/Ý#'¨¡:¤:�LØ&*Ô&;¸IÔ&F×&KÒ&KÑ&MÔ&M�L ‘Oà"œm×9Ò9Ýœ	œÔ*Ô6Ý˜lÑ+Ô+Øñô �Gð #'§+¢+¡-¤-×"9Ò"9Ñ";Ô";�KØ5<�DÔ% kÑ2Ø�Fà×%Ò% dÑ+Ô+Ð+Ð+Ð+r+   c                 ó  ‡ — t          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        \  }}‰ j                             t          j        ||f¦  «        }|                     ¦   «                              ¦   «         }|‰ j        |<   d S )Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rb   rS  r­  s     €r)   r]  z?TS2FXGraphConverter.convert_aten___getitem__.<locals>.<genexpr>½  sB   øè è € ð '
ð '
Ø5:ˆD×)Ò)¨%Ñ0Ô0ð'
ð '
ð '
ð '
ð '
ð '
r+   )	rE   r   r¢   rW  rŽ  r�  rÀ   r¿   r  )r	  rÂ   Úinput_containerÚindexr7  re  s   `     r)   Úconvert_aten___getitem__z,TS2FXGraphConverter.convert_aten___getitem__¼  s™   ø€ Ý!&ð '
ð '
ð '
ð '
Ø>B¿kºk¹m¼mð'
ñ '
ô '
ñ "
ô "
Ñˆ˜ð ”-×-Ò-ÝÔ˜°Ð6ñ
ô 
ˆð —k’k‘m”m×-Ò-Ñ/Ô/ˆØ)0ˆÔ˜+Ñ&Ð&Ð&r+   c                 óX  — t          |¦  «        }|                      ||j        ¦  «        \  }}|t          j        j        j        j        k    s |t          j        j        j        j        k    �r(d„ | 	                    ¦   «          
                    ¦   «         D ¦   «         }d„ |D ¦   «         }t          d„ |D ¦   «         ¦  «        }|rÑt          |¦  «        dk    sJ ‚t          |¦  «        }d|d<   | j                             t          j        j        j        j        t!          |¦  «        ¦  «        }	| j                             t          j        j        j        j        |	f¦  «        }
| 	                    ¦   «                              ¦   «         }|
| j        |<   d S |                      |¦  «         d S )Nc                 ó   — g | ]	}|j         ‘Œ
S rc   )Úuser)r´   Úuses     r)   rU  z7TS2FXGraphConverter.convert_aten_to.<locals>.<listcomp>Ð  s   € ÐCÐCÐC s˜#œ(ÐCÐCÐCr+   c                 ó\   — g | ])}|                      ¦   «         d k    ¯t          |¦  «        ‘Œ*S )rð   )rñ   rþ   )r´   Ú	user_nodes     r)   rU  z7TS2FXGraphConverter.convert_aten_to.<locals>.<listcomp>Ñ  sA   € ð ð ð àØ×#Ò#Ñ%Ô%¨Ò6Ð6õ   	Ñ*Ô*à6Ð6Ð6r+   c              3   ó.   K  — | ]}|j         j        V — Œd S rb   )ra  Ú
is_mutable)r´   rA  s     r)   r]  z6TS2FXGraphConverter.convert_aten_to.<locals>.<genexpr>Ö  s8   è è € ð %ð %Ø.4�”Ô)ð%ð %ð %ð %ð %ð %r+   r¨   Tr§   )rþ   r1  ra  r   rx   ry   rM  r¹   Ú
prim_dtyperÀ   ÚusesÚanyr!   rQ   r¢   rW  rE   Úclonerõ   r¿   r  r’  )r	  rÂ   rA  r7   ro   Ú
user_nodesÚuser_targetsÚhas_mutable_targetÚnew_argsr7  Ú
clone_nodere  s               r)   Úconvert_aten_toz#TS2FXGraphConverter.convert_aten_toÆ  s–  € Ý  Ñ&Ô&ˆØ×+Ò+¨D°&´.ÑAÔA‰ˆˆfð •U”Y”^Ô&Ô,Ò,Ð,°½%¼)¼.Ô:KÔ:VÒ0VÑ0VØCÐC¨d¯kªk©m¬m×.@Ò.@Ñ.BÔ.BÐCÑCÔCˆJðð à!+ðñ ô ˆLõ
 "%ð %ð %Ø8Dð%ñ %ô %ñ "ô "Ðð "ð Ý˜4‘y”y A’~�~�~�~Ý ™:œ:�Ø"�˜‘Øœ-×5Ò5Ý”I”NÔ%Ô+­U°8©_¬_ñô �ð
 "œ]×8Ò8Ý”I”NÔ(Ô0°7°*ñô �
ð #Ÿkšk™mœm×5Ò5Ñ7Ô7�Ø1;�Ô! +Ñ.Ø�à×%Ò% dÑ+Ô+Ð+Ð+Ð+r+   c                 óð  — |                      ¦   «         dk    r¬t          |                     d¦  «                             ¦   «         t          j        ¦  «        r[t          |                     d¦  «                             ¦   «         t          j        ¦  «        rt          j        j        j        j	        }n!t          d|› �¦  «        ‚t          |¦  «        }|t          j        j        j        j	        k    rn|                      ||j        ¦  «        \  }}|                     ¦   «                              ¦   «         }| j                             t$          |¦  «        | j        |<   d S |                      |¦  «         d S )Nrð   r   r¥   z#unable to determind the target for )rñ   rB   rk  r   r   ÚListTyperx   ry   rÜ   rP  r5   rþ   r1  ra  rÀ   r¿   r¢   rW  rf   r  r’  )r	  rÂ   rA  r7   ro   re  s         r)   Úconvert_aten_addz$TS2FXGraphConverter.convert_aten_addì  s7  € Ø�;Š;‰=Œ=˜MÒ)Ð)Ý˜$Ÿ-š-¨Ñ*Ô*×/Ò/Ñ1Ô1µ5´>ÑBÔBð QÅzØ—’˜aÑ Ô ×%Ò%Ñ'Ô'­¬ñHô Hð Qõ œœÔ+Ô-��å"Ð#OÈÐ#OÐ#OÑPÔPÐPå$ TÑ*Ô*ˆFà•U”Y”^Ô'Ô)Ò)Ð)ð  ×/Ò/°°f´nÑEÔE‰LˆD�&ØŸ+š+™-œ-×1Ò1Ñ3Ô3ˆKØ-1¬]×-HÒ-HÍÐSWÑ-XÔ-XˆDÔ˜kÑ*Ð*Ð*à×)Ò)¨$Ñ/Ô/Ð/Ð/Ð/r+   c                 óÌ  — t          |                     ¦   «         ¦  «        }|d                              ¦   «         | j        vrt	          d¦  «        ‚t          |                     ¦   «         ¦  «        }t          |                     ¦   «         ¦  «                             ¦   «         }|                     ¦   «         D ]©}| 	                    ¦   «         dk    r9| 
                    ¦   «                              ¦   «         |k    rt	          d¦  «        ‚| 	                    ¦   «         dk    r>|                     ¦   «         D ])}|                     ¦   «         |k    rt	          d¦  «        ‚Œ*Œªd S )Nr   zKprim::Loop currently cannot run with dynamic value of number of iterations.r¥   z@prim::Loop currently cannot run with dynamic value of condition.r¦   )rQ   r   r¿   r  r5   rê   rÓ   r�  rÑ   rŒ  rÀ   )r	  rÂ   r   ÚsubblockÚcondition_output_namer�  s         r)   Ú_check_prim_loop_supportz,TS2FXGraphConverter._check_prim_loop_support   sZ  € Ý�d—k’k‘m”mÑ$Ô$ˆð �!Œ9×ÒÑ Ô ¨Ô(=Ð=Ð=ÝØ]ñô ð õ
 ˜Ÿš™œÑ&Ô&ˆÝ $ X×%5Ò%5Ñ%7Ô%7Ñ 8Ô 8× BÒ BÑ DÔ DÐØ—N’NÑ$Ô$ð 	ð 	ˆDà× Ò Ñ"Ô" aÒ'Ð'Ø—K’K‘M”M×+Ò+Ñ-Ô-Ð1FÒFÐFå"ØVñô ð ð ×ÒÑ!Ô! QÒ&Ð&Ø ŸLšL™NœNð ð �DØ—~’~Ñ'Ô'Ð+@Ò@Ð@Ý*Ø^ñô ð ð Aøð	ð 	r+   c           	      óˆ  ‡ — t          |                     ¦   «         ¦  «        }‰                      |¦  «         ‰                      |d         ¦  «        }d„ |dd …         D ¦   «         }‰                      |¦  «        }|                     ¦   «         D ]"}|                     ‰ j        |         ¦  «        }Œ#t          |¦  «        }‰                      ||¦  «        \  }}t          |¦  «        dk    sJ ‚|d         }	‰  
                    ¦   «         s$‰ j                             |	j        ¦  «        ‰ _        ˆ fd„||z   D ¦   «         }
t          |¦  «        D �]p}‰ j                             t          |d         |t          |¦  «        g|
¢R i ¦  «        }|                     ¦   «         dk    r}t#          |                     ¦   «         ¦  «        D ][\  }}|                     ¦   «         }‰ j                             t(          j        ||dz   f¦  «        ‰ j        |<   ‰ j        |         |
|<   Œ\t#          |	j        ¦  «        D ]‰\  }}‰ j                             t(          j        |||                     ¦   «         z   dz   f¦  «        ‰ j        |<   |                     |¦  «        }‰ j        |         |
||                     ¦   «         z   |z   <   ŒŠ�Œrd S )Nr   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rc   ©r¿   )r´   r_   s     r)   rU  z9TS2FXGraphConverter.convert_prim_Loop.<locals>.<listcomp>"  s    € ÐFÐFÐF°C §¢¡¤ÐFÐFÐFr+   r¦   r¥   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rc   ©r3  ©r´   r�   r	  s     €r)   rU  z9TS2FXGraphConverter.convert_prim_Loop.<locals>.<listcomp>;  s7   ø€ ð 
ð 
ð 
àð ×$Ò$ TÑ*Ô*ð
ð 
ð 
r+   )rQ   r   rä  r/  r'  rÓ   rÛ   rà   r%  r!   r£   r  Úranger¢   rW  rr   rŒ  rS   r�  r¿   rŽ  r�  r  rÊ  )r	  rÂ   r   Únum_iterationsÚloop_local_argumentsÚglobal_argumentsrÕ   r  r  r   Úfx_block_argsrm   Ú	loop_noder^   r�  re  r�   Úglobal_argument_indexs   `                 r)   Úconvert_prim_Loopz%TS2FXGraphConverter.convert_prim_Loop  s6  ø€ Ý�d—k’k‘m”mÑ$Ô$ˆØ×%Ò% dÑ+Ô+Ð+à×6Ò6°v¸a´yÑAÔAˆð  GÐF¸6À!À"À"¼:ÐFÑFÔFÐà×=Ò=¸dÑCÔCÐð —[’[‘]”]ð 	ð 	ˆEØ/×5Ò5ØÔ+¨EÔ2ñ ô  ÐÐõ  Ð 0Ñ1Ô1Ðà.2×.MÒ.MØÐ"ñ/
ô /
Ñ+ˆÐ+õ �>Ñ"Ô" aÒ'Ð'Ð'Ð'Ø0°Ô3ÐØ×&Ò&Ñ(Ô(ð 	àÔ8×>Ò>Ø&ÔJñô ð Ô4ð
ð 
ð 
ð 
à,Ð/?Ñ?ð
ñ 
ô 
ˆõ ˜nÑ-Ô-ð (	,ñ (	,ˆHØœ×3Ò3Ý/ð # 1Ô%ØÝÐ,Ñ-Ô-ðð #ð	ð ð ñ
ô 
ˆIð ×ÒÑ!Ô! QÒ&Ð&Ý(¨¯ª©¬Ñ8Ô8ð 	Fð 	F‘G�A�tØ"&§.¢.Ñ"2Ô"2�KØ59´]×5PÒ5PÝ Ô(à%Ø ™Eðñ6ô 6�DÔ% kÑ2ð (,Ô'8¸Ô'E�M !Ñ$Ð$õ %Ø"ÔFñô ð ,ð ,‘��4ð +/¬-×*EÒ*EÝÔ$à!Ø˜D×,Ò,Ñ.Ô.Ñ.°Ñ2ðñ+ô +�Ô! $Ñ'ð )9×(>Ò(>¸tÑ(DÔ(DÐ%ð Ô% dÔ+ð Ø˜×(Ò(Ñ*Ô*Ñ*Ð-BÑBñð ñ,ð7(	,ð (	,r+   Úif_nodec                 ó°   — |                      ¦   «         D ]@}|                     ¦   «         D ])}|                     ¦   «         dk    rt          d¦  «        ‚Œ*ŒAd S )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Ò   r5   )r	  ró  rÕ   rÂ   s       r)   Ú_check_set_attr_in_if_blockz/TS2FXGraphConverter._check_set_attr_in_if_blocki  sp   € Ø—^’^Ñ%Ô%ð 	ð 	ˆEØŸš™œð ð �Ø—9’9‘;”; /Ò1Ð1Ý&ð-ñô ð ð 2ðð	ð 	r+   c                 ó,  ‡ — ‰                       |¦  «         t          |                     ¦   «         ¦  «        }t          |¦  «        dk    sJ ‚‰                      |d         ¦  «        }‰                      |¦  «        }|                     ¦   «         D ]"}|                     ‰ j        |         ¦  «        }Œ#t          |¦  «        }‰  	                    ||¦  «        \  }}t          |¦  «        dk    sJ ‚ˆ fd„|D ¦   «         }||d         |d         t          |¦  «        f}	‰ j                             t          j        |	i ¦  «        }
|                     ¦   «         dk    r2|                     ¦   «                              ¦   «         }|
‰ j        |<   d S |                     ¦   «         dk    rlt'          |                     ¦   «         ¦  «        D ]L\  }}|                     ¦   «         }‰ j                             t*          j        |
|f¦  «        }|‰ j        |<   ŒKd S d S )Nr¥   r   r¦   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rc   ré  rê  s     €r)   rU  z7TS2FXGraphConverter.convert_prim_If.<locals>.<listcomp>†  s'   ø€ ÐNÐNÐN¸D˜×1Ò1°$Ñ7Ô7ÐNÐNÐNr+   )rõ  rQ   r   r!   r/  r'  rÓ   rÛ   rà   r%  rE   r¢   rW  r   ÚcondrŒ  rÀ   r¿   r  rS   r�  rŽ  r�  )r	  rÂ   r   Ú	predicaterÞ   rÕ   r  r(   rï  r7   Ú	cond_nodere  r^   rÀ   r�  s   `              r)   Úconvert_prim_Ifz#TS2FXGraphConverter.convert_prim_Ifs  s  ø€ Ø×(Ò(¨Ñ.Ô.Ð.å�d—k’k‘m”mÑ$Ô$ˆÝ�6‰{Œ{˜aÒÐÐÐØ×1Ò1°&¸´)Ñ<Ô<ˆ	ð ×6Ò6°tÑ<Ô<ˆ	ð —[’[‘]”]ð 	Lð 	LˆEØ!Ÿš¨Ô(CÀEÔ(JÑKÔKˆIˆIå˜‘O”Oˆ	Ø ×;Ò;¸DÀ)ÑLÔLÑˆ˜å�>Ñ"Ô" aÒ'Ð'Ð'Ð'àNÐNÐNÐNÀIÐNÑNÔNˆð Ø˜1ÔØ˜1ÔÝ�-Ñ Ô ð	
ˆð ”M×/Ò/µ´
¸DÀ"ÑEÔEˆ	ð ×ÒÑÔ Ò"Ð"ØŸ+š+™-œ-×1Ò1Ñ3Ô3ˆKØ-6ˆDÔ˜kÑ*Ð*Ð*Ø×ÒÑÔ !Ò#Ð#Ý& t§|¢|¡~¤~Ñ6Ô6ð 9ð 9‘	��6Ø$×.Ò.Ñ0Ô0�Øœ-×5Ò5µhÔ6FÈÐTUÈÑWÔW�Ø18�Ô! +Ñ.Ð.ð	 $Ð#ð9ð 9r+   c                 ó0   — |                       |¦  «         d S rb   )Ú_convert_as_noopr–  s     r)   Úconvert_aten_Boolz%TS2FXGraphConverter.convert_aten_Bool›  s   € Ø×Ò˜dÑ#Ô#Ð#Ð#Ð#r+   c                 ó   — d S rb   rc   r–  s     r)   Úconvert_prim_Enterz&TS2FXGraphConverter.convert_prim_Enterž  s	   € ð
 	ˆr+   c                 ó   — d S rb   rc   r–  s     r)   Úconvert_prim_Exitz%TS2FXGraphConverter.convert_prim_Exit¥  s   € àˆr+   c                 óÐ   — t          |¦  «        }|j        }|                      ||¦  «        \  }}|                     ¦   «                              ¦   «         }|d         | j        |<   d S )Nr   )rþ   ra  r1  rÀ   r¿   r  )r	  rÂ   rA  rñ   r7   ro   re  s          r)   rý  z$TS2FXGraphConverter._convert_as_noop©  sa   € õ ! Ñ&Ô&ˆØ”ˆà×+Ò+¨D°&Ñ9Ô9‰ˆˆfà—k’k‘m”m×-Ò-Ñ/Ô/ˆØ)-¨a¬ˆÔ˜+Ñ&Ð&Ð&r+   c                 óÄ   ‡ — t           j        j        j        }t	          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        }‰ j                             ||¦  «         d S )Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rb   rS  r­  s     €r)   r]  zMTS2FXGraphConverter.convert_profiler__record_function_exit.<locals>.<genexpr>¹  r®  r+   )r   rx   ÚprofilerÚ_record_function_exitrE   r   r¢   rW  )r	  rÂ   rA  r7   s   `   r)   Ú&convert_profiler__record_function_exitz:TS2FXGraphConverter.convert_profiler__record_function_exit´  sZ   ø€ õ ”Ô#Ô9ˆÝÐUÐUÐUÐUÀtÇ{Â{Á}Ä}ÐUÑUÔUÑUÔUˆØŒ×#Ò# F¨DÑ1Ô1Ð1Ð1Ð1r+   c                 ó
  — d}|                       t          |                     ¦   «         ¦  «        ¦  «        f}| j                             ||¦  «        }|                     ¦   «                              ¦   «         }|| j        |<   d S )NÚtolist)r/  rê   r   r¢   ry  rÀ   r¿   r  r·  s         r)   Úconvert_prim_tolistz'TS2FXGraphConverter.convert_prim_tolist¼  sr   € ð ˆØ×-Ò-­d°4·;²;±=´=Ñ.AÔ.AÑBÔBÐDˆØ”-×+Ò+¨F°DÑ9Ô9ˆØ—k’k‘m”m×-Ò-Ñ/Ô/ˆØ)0ˆÔ˜+Ñ&Ð&Ð&r+   c                 óˆ   — |                      ¦   «                              ¦   «         }t          j        ¦   «         | j        |<   d S rb   )rÀ   r¿   r   r€   r  r»  s      r)   Úconvert_prim_Uninitializedz.TS2FXGraphConverter.convert_prim_UninitializedÅ  s6   € ð
 —k’k‘m”m×-Ò-Ñ/Ô/ˆÝ-2¬\©^¬^ˆÔ˜kÑ*Ð*Ð*r+   c                 ó6  ‡ — t           |                     ¦   «                  }t          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        }‰ j                             ||¦  «        }|                     ¦   «                              ¦   «         }|‰ j        |<   d S )Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rb   rS  r­  s     €r)   r]  zBTS2FXGraphConverter._convert_standard_operators.<locals>.<genexpr>Ï  r®  r+   )	r  rÒ   rE   r   r¢   rW  rÀ   r¿   r  r·  s   `     r)   r  z/TS2FXGraphConverter._convert_standard_operatorsÍ  s‚   ø€ Ý+¨D¯IªI©K¬KÔ8ˆÝÐUÐUÐUÐUÀtÇ{Â{Á}Ä}ÐUÑUÔUÑUÔUˆØ”-×-Ò-¨f°dÑ;Ô;ˆØ—k’k‘m”m×-Ò-Ñ/Ô/ˆØ)0ˆÔ˜+Ñ&Ð&Ð&r+   c                 ó–  — |                      ¦   «         }t          |¦  «        }t          | || j        ¦  «        }d                     t          |¦  «                             d¦  «        d d…         ¦  «        }t                               d|j	        |¦  «         	  ||¦  «         d S # 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ö   r5   )r	  rÂ   Ú	node_kindr  Úhandler_funcÚnode_strrV   s          r)   r:  z TS2FXGraphConverter.convert_nodeÔ  sÕ   € Ø—I’I‘K”Kˆ	õ
 1°Ñ;Ô;ÐÝ˜tÐ%6¸Ô8UÑVÔVˆð
 —7’7�3˜t™9œ9Ÿ?š?¨4Ñ0Ô0°°!°Ô4Ñ5Ô5ˆÝ�	Š	Ð&¨Ô(=¸xÑHÔHÐHð	UØˆL˜ÑÔÐÐÐøÝð 	Uð 	Uð 	UÝÐLÀÐLÐLÑMÔMÐSTÐTøøøøð	Uøøøs   ÂB& Â&
CÂ0CÃCc                 óš  — g }d„ | j                              ¦   «         D ¦   «         t          | j        ¦  «        z   }|D �]_}|| j        v rÉ| j        |         }|                      ¦   «         sPt          |t          j        j	        ¦  «        r1|j
        dk    r&| j                             t          j        |f¦  «        }|                     |¦  «         | j                             t!          t"          j        t'          |¬¦  «        |¬¦  «        ¦  «         ŒÕ|| j        v rp|                     | j        |         ¦  «         | j                             t!          t"          j        t+          || j        |         ¬¦  «        |¬¦  «        ¦  «         �ŒNt-          d|› d�¦  «        ‚t/          |¦  «        dk    r| j                             g ¦  «         d S t/          |¦  «        d	k    r"| j                             |d         ¦  «         d S t/          |¦  «        d	k    r| j                             |¦  «         d S | j                             |¦  «         d S )
Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS rc   rç  )r´   r�  s     r)   rU  z=TS2FXGraphConverter.convert_graph_outputs.<locals>.<listcomp>é  s"   € ÐOÐOÐO¨t˜$Ÿ.š.Ñ*Ô*ÐOÐOÐOr+   r¡   r�   r?  )r�   r¶   zOutput ræ   r   r¥   )r  r�  rQ   r  r  r£   rB   r   r  ÚNoderl  r¢   rW  r×  r    r  r   r   ÚUSER_OUTPUTr   r  r   rç   r!   rÀ   )r	  r7   Úoutp_name_listre  r7  s        r)   r;  z)TS2FXGraphConverter.convert_graph_outputsç  s€  € ØˆØOÐO°t´}×7LÒ7LÑ7NÔ7NÐOÑOÔOÕRVØÔ4ñS
ô S
ñ 
ˆð *ð 	Dñ 	DˆKØ˜dÔ/Ð/Ð/ØÔ+¨KÔ8�ð ×/Ò/Ñ1Ô1ðSå" 7­E¬H¬MÑ:Ô:ðSð  œ
 mÒ3Ð3à"œm×9Ò9½%¼+ÈÀzÑRÔR�GØ—’˜GÑ$Ô$Ð$ØÔ!×(Ò(ÝÝ"Ô.Ý*°Ð<Ñ<Ô<Ø*ðñ ô ñô ð ð ð  Ô 5Ð5Ð5Ø—’˜DÔ1°+Ô>Ñ?Ô?Ð?ØÔ!×(Ò(ÝÝ"Ô.Ý,Ø!,°DÔ4IÈ+Ô4Vðñ ô ð  +ðñ ô ñô ð ñ õ !Ð!B¨;Ð!BÐ!BÐ!BÑCÔCÐCåˆt‰9Œ9˜Š>ˆ>àŒM× Ò  Ñ$Ô$Ð$Ð$Ð$Ý�‰YŒY˜!Š^ˆ^ØŒM× Ò Ø�Q”ñô ð ð ð õ �‰YŒY˜Š]ˆ]ØŒM× Ò Øñô ð ð ð ð
 ŒM× Ò  Ñ&Ô&Ð&Ð&Ð&r+   N)Cr  Ú
__module__Ú__qualname__r   r   r   rÝ   ÚBlockr   r   r€   r	   r   r  r  r  r   r%  r'  r£   r  r1  ÚValuer/  r3  r  r<  r  r9  rY  rf  rm  rv  rz  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  r  r:  r;  rc   r+   r)   r   r   †  sb  € € € € € ðDCà˜œœ¨¬¬Ð6Ô7ðDCð ˜C ¤Ð-Ô.ðDCð ˜S %¤,Ð.Ô/ð	DCð
 !% U¤X¤^°S¸´XÐ%=Ô >ðDCð '+¨3°¨8¤nðDCð ˜s C˜xœ.ðDCð  $ C¨ Hœ~ðDCð DCð DCð DCðL
ð 
ð 
ð3¨u¬x¬}ð 3ÈÈcÌð 3ð 3ð 3ð 3ð4ð ð ð29ð 9ð 9ð¨ð ð ð ð ð
	# E¤H¤Mð 	#ð 	#ð 	#ð 	#ð>¨e¬h¬nð >ð >ð >ð >ðð ð ð˜œÔ-ð ð ð ð ð4=.ð =.ð =.ð~? u¤x¤}ð ?ð ?ð ?ð ?ð1¨¬¬ð 1ð 1ð 1ð 1ð8W¨¬¬ð Wð Wð Wð Wð,,¨%¬(¬-ð ,ð ,ð ,ð ,ð8?¨E¬H¬Mð ?ð ?ð ?ð ?ðT¨¬¬ð Tð Tð Tð TðM¨¬¬ð Mð Mð Mð Mð8
U¨¬¬ð 
Uð 
Uð 
Uð 
Uð>¨U¬X¬]ð >ð >ð >ð >ð**°´´ð *ð *ð *ð *ð*¨u¬x¬}ð *ð *ð *ð *ð5¨5¬8¬=ð 5ð 5ð 5ð 5ð5¨u¬x¬}ð 5ð 5ð 5ð 5ð.1¨E¬H¬Mð 1ð 1ð 1ð 1ð1¨U¬X¬]ð 1ð 1ð 1ð 1ð3°%´(´-ð 3ð 3ð 3ð 3ð1 U¤X¤]ð 1ð 1ð 1ð 1ð 1¨U¬X¬]ð 1ð 1ð 1ð 1ð5¨e¬h¬mð 5ð 5ð 5ð 5ð	1¨e¬h¬mð 	1ð 	1ð 	1ð 	1ð, U¤X¤]ð ,ð ,ð ,ð ,ðB1¨U¬X¬]ð 1ð 1ð 1ð 1ð$, E¤H¤Mð $,ð $,ð $,ð $,ðL0 U¤X¤]ð 0ð 0ð 0ð 0ð(ð ð ð6L, e¤h¤mð L,ð L,ð L,ð L,ð\°5´8´=ð ð ð ð ð&9 E¤H¤Mð &9ð &9ð &9ð &9ðP$ e¤h¤mð $ð $ð $ð $ð u¤x¤}ð ð ð ð ð e¤h¤mð ð ð ð ð	1 U¤X¤]ð 	1ð 	1ð 	1ð 	1ð2¸5¼8¼=ð 2ð 2ð 2ð 2ð1¨¬¬ð 1ð 1ð 1ð 1ð<¨u¬x¬}ð <ð <ð <ð <ð1°´´ð 1ð 1ð 1ð 1ðU ¤¤ð Uð Uð Uð Uð&3'ð 3'ð 3'ð 3'ð 3'r+   r   c                   ó8  ‡ — e Zd ZdZ G d„ de¦  «        Zdeej        j	        ej        j
        f         deeej        f         deeej        f         deej        j
        ee         f         deeef         d	eeef         d
eeef         fˆ fd„Zd„ Zˆ fd„Zˆ xZS )ÚExplainTS2FXGraphConverterzú
    Run TS2FXGraphConverter in an explain mode. It collects all failed operators conversions
    and provide that information to users. In order to collect all failed conversions, it
    also mocks some internal attributes (e.g., name_to_node).
    c                   ó.   ‡ — e Zd Zˆ fd„Zˆ fd„Zd„ Zˆ xZS )ú$ExplainTS2FXGraphConverter._DictMockc                 óX   •— t          ¦   «                              |¦  «         || _        d S rb   )Úsuperr  Ú
mock_value)r	  Ú	dict_datar'  Ú	__class__s      €r)   r  z-ExplainTS2FXGraphConverter._DictMock.__init__%  s&   ø€ Ý‰GŒG×Ò˜YÑ'Ô'Ð'Ø(ˆDŒOˆOˆOr+   c                 ó–   •— t          ¦   «                              |¦  «        s| j        S t          ¦   «                              |¦  «        S rb   )r&  Ú__contains__r'  Ú__getitem__)r	  rµ   r)  s     €r)   r,  z0ExplainTS2FXGraphConverter._DictMock.__getitem__)  s?   ø€ õ ‘7”7×'Ò'¨Ñ,Ô,ð 'Ø”Ð&Ý‘7”7×&Ò& sÑ+Ô+Ð+r+   c                 ó   — dS ©NTrc   )r	  rµ   s     r)   r+  z1ExplainTS2FXGraphConverter._DictMock.__contains__0  s   € Ø�4r+   )r  r  r  r  r,  r+  Ú__classcell__©r)  s   @r)   Ú	_DictMockr$  $  s`   ø€ € € € € ð	)ð 	)ð 	)ð 	)ð 	)ð	,ð 	,ð 	,ð 	,ð 	,ð	ð 	ð 	ð 	ð 	ð 	ð 	r+   r1  r  r  r  rà   r  r  râ   c                 óô   •— t          ¦   «                              |||||||¦  «         g | _        t                               | j        t          j                             d ddd„ di ¦  «        ¦  «        | _        d S )NÚmockrW  c                  ó   — d S rb   rc   rc   r+   r)   r
  z5ExplainTS2FXGraphConverter.__init__.<locals>.<lambda>R  s   € ˜€ r+   rc   )	r&  r  Úunsupported_node_listr"  r1  r  r   r  r  )	r	  r  r  r  rà   r  r  râ   r)  s	           €r)   r  z#ExplainTS2FXGraphConverter.__init__3  s�   ø€ õ 	‰Œ×ÒØØØØ"Ø(ØØ!ñ	
ô 	
ð 	
ð ;=ˆÔ"õ 7×@Ò@ØÔåŒH�MŠMØØØØ�ØØñô ñ
ô 
ˆÔÐÐr+   c                 ó¸   — |                       ¦   «          | j                             ¦   «         D ]}|                      |¦  «         Œ|                      ¦   «          d S rb   )r9  r  rÑ   r:  r;  r–  s     r)   Úexplainz"ExplainTS2FXGraphConverter.explainX  s`   € Ø×!Ò!Ñ#Ô#Ð#Ø”M×'Ò'Ñ)Ô)ð 	$ð 	$ˆDØ×Ò˜dÑ#Ô#Ð#Ð#Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$r+   c                 ó°   •— 	 t          ¦   «                              |¦  «         d S # t          $ r%}| j                             |¦  «         Y d }~d S d }~ww xY wrb   )r&  r:  rö   r5  r    )r	  rÂ   rV   r)  s      €r)   r:  z'ExplainTS2FXGraphConverter.convert_node^  sn   ø€ ð	4Ý‰GŒG× Ò  Ñ&Ô&Ð&Ð&Ð&øÝð 	4ð 	4ð 	4ØÔ&×-Ò-¨dÑ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3øøøøð	4øøøs   ƒ!& ¦
A°AÁA)r  r  r  Ú__doc__Údictr1  r   r   r   rÝ   r  r   r   r€   r	   r   r  r7  r:  r/  r0  s   @r)   r"  r"    s2  ø€ € € € € ðð ðð ð ð ð �Dñ ô ð ð#
à˜œœ¨¬¬Ð6Ô7ð#
ð ˜C ¤Ð-Ô.ð#
ð ˜S %¤,Ð.Ô/ð	#
ð
 !% U¤X¤^°S¸´XÐ%=Ô >ð#
ð '+¨3°¨8¤nð#
ð ˜s C˜xœ.ð#
ð  $ C¨ Hœ~ð#
ð #
ð #
ð #
ð #
ð #
ðJ%ð %ð %ð4ð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r+   r"  c              #   óV   K  — | j         }d| _         	 d V — || _         d S # || _         w xY wr.  )Údisabled)r  r<  s     r)   Údisable_loggingr=  e  s@   è è € àŒ|€HØ€C„Lð ØˆˆˆàˆŒˆˆø�xˆŒÐÐÐÐs   ’ Ÿ	(c            
       óú   — e Zd Z	 ddeej        j        ej        j        f         dee	df         de
eee	f                  fd„Zdefd„Z ee¦  «        dd
„¦   «         Zdej        j        deee	f         fd„Zd„ ZdS )ÚTS2EPConverterNÚts_modelÚsample_args.Úsample_kwargsc                 ór  ‡— || _         t          ||¦  «        \  | _        | _        }}|| _        || _        i | _        i | _        t          | j         t          j
        j        ¦  «        s&t          | j                              ¦   «         ¦  «        ng }t          | j         t          j
        j        ¦  «        sa| j                              ¦   «                              ¦   «         D ]5\  }Št!          ˆfd„|D ¦   «         ¦  «        r‰| j        |<   Œ+‰| j        |<   Œ6i | _        i | _        |                      ¦   «          d S )Nc              3   óh   •K  — | ],}‰j         |j         k    ¯‰|k                         ¦   «         V — Œ-d S rb   )Úshaperc  )r´   Úparamr»   s     €r)   r]  z*TS2EPConverter.__init__.<locals>.<genexpr>‡  sN   øè è € ð ð àØ”| u¤{Ò2Ð2ð ˜u’_×)Ò)Ñ+Ô+à2Ð2Ð2Ð2ðð r+   )r@  r`   r  rY   rA  rB  r  r  rB   r   r   rC   rQ   Ú
parametersrZ   ÚitemsrÖ  Úname_to_non_tensor_attributesr  Úlift_get_attr)r	  r@  rA  rB  r(   Ú
param_listr  r»   s          @r)   r  zTS2EPConverter.__init__q  sP  ø€ ð !ˆŒÝ+<¸XÀ{Ñ+SÔ+SÑ(ˆŒ�t”{ A qà&ˆÔØ*ˆÔà68ˆÔØ79ˆÔõ ˜dœm­U¬XÔ-DÑEÔEð�D�”×)Ò)Ñ+Ô+Ñ,Ô,Ð,àð 	õ
 ˜$œ-­¬Ô)@ÑAÔAð 
	4Ø!œ]×5Ò5Ñ7Ô7×=Ò=Ñ?Ô?ð 	4ð 	4‘	��6åð ð ð ð à!+ðñ ô ñ ô ð 4ð
 -3�DÔ& qÑ)Ð)à-3�DÔ'¨Ñ*Ð*à=?ˆÔ*Ø02ˆÔà×ÒÑÔÐÐÐr+   r>   c           	      ó  — t                                d¦  «         t                                d| j        ¦  «         t          | j        ¦  «        \  }}t	          | j        | j        | j        || j        | j        |¦  «        }| 	                    ¦   «         }t          |¦  «         t                                d|                     d¬¦  «        ¦  «         |                      ||j        ¦  «        }t                                d|¦  «         t          | j        t          j        j        ¦  «        s\| j                             ¦   «                              ¦   «         D ]0\  }}||j        vr"t)          j        d|› d�¦  «         ||j        |<   Œ1|S )	Nzü
TS2EPConverter logging starts from here.

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

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

%s
zGraphModule: %sF)Úprint_outputz%szManually populate zN into state_dict ExportedProgram, but it is never used by the ExportedProgram.)r  Úinfor  rá   r   r  r  rI  r  r  r   Úprint_readableÚretrace_as_exported_programrB   r@  r   r   rC   rZ   rH  ri  rj  )r	  rà   râ   Úgraph_converterrs   Úepr  r»   s           r)   r  zTS2EPConverter.convert•  s�  € Ý�Šðñ
	
ô 
	
ð 
	
õ 	�ŠÐ,¨d¬mÑ<Ô<Ð<å8QØŒMñ9
ô 9
Ñ5ÐÐ 5õ .ØŒMØÔØÔØ"ØÔ.ØÔ!Ø!ñ
ô 
ˆð ×$Ò$Ñ&Ô&ˆõ 	0°Ñ3Ô3Ð3Ý�ŠÐ" B×$5Ò$5À5Ð$5Ñ$IÔ$IÑJÔJÐJà×-Ò-ØØÔ,ñ
ô 
ˆõ 	�Š��rÑÔÐõ
 ˜$œ-­¬Ô)@ÑAÔAð 	.Ø!œ]×5Ò5Ñ7Ô7×=Ò=Ñ?Ô?ð .ð .‘	��6Ø˜BœMÐ)Ð)Ý”MØ~¨QÐ~Ð~Ð~ñô ð ð (.�B”M !Ñ$øàˆ	r+   Tc           	      ó  — t          | j        ¦  «        \  }}t          | j        | j        | j        || j        | j        |¦  «        }|                     ¦   «          t          |j	        ¦  «        dk    r{d}t          |j	        ¦  «        D ]c\  }}d                     t          |¦  «                             d¦  «        d d…         ¦  «        }|d|› d|                     ¦   «         › d|› d	�z  }Œdn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  rI  r  r7  r!   r5  rS   rœ   r   r›   rÒ   Úprint)	r	  rM  rà   râ   rQ  Úexplain_strr^   Únr  s	            r)   r7  zTS2EPConverter.explainÉ  s%  € å8QØŒMñ9
ô 9
Ñ5ÐÐ 5õ 5ØŒMØÔØÔØ"ØÔ.ØÔ!Ø!ñ
ô 
ˆð 	×ÒÑ!Ô!Ð!ÝˆÔ4Ñ5Ô5¸Ò9Ð9ØNˆKÝ! /Ô"GÑHÔHð Gð G‘��1ØŸ7š7¥3 q¡6¤6§<¢<°Ñ#5Ô#5°b°q°bÔ#9Ñ:Ô:�ØÐF¨!ÐFÐF¨q¯vªv©x¬xÐFÐF¸8ÐFÐFÐFÑF��ðGð %ˆKØð 	Ý�+ÑÔÐØÐr+   rs   r  c                 óŠ  — t           j        j                             || j        dd¬¦  «        }|j                             d„ |                     ¦   «         D ¦   «         ¦  «         |D ]}|j         	                    |d ¦  «         Œt          |j        j        ¦  «        D ]~\  }}|j        t          j        k    rd|j        |v r[t#          ||j                 t           j        ¦  «        s%J t'          ||j                 ¦  «        › d�¦   «         ‚t          j        |_        Œ|                     ¦   «                              |¦  «         |S )NFT)r-   Úpre_dispatchc                 óf   — i | ].\  }}t          |t          j        t          j        f¦  «        ¯+||“Œ/S rc   )rB   r   r€   r  )r´   r  r   s      r)   r·   z>TS2EPConverter.retrace_as_exported_program.<locals>.<dictcomp>ö  sH   € ð ð ð á�A�qÝ˜a¥%¤,µÔ0BÐ!CÑDÔDðØ�1ðð ð r+   z& has been erroneously marked as buffer)r   ÚexportÚ_traceÚ_exportrA  Ú
_constantsÚupdaterH  rZ   ÚpoprS   Úgraph_signaturer  rÒ   r   rE  rA  rB   r€   r   ÚCONSTANT_TENSORÚverifierÚcheck)r	  rs   r  rR  r  r^   Úspecs          r)   rP  z*TS2EPConverter.retrace_as_exported_programä  sb  € õ Œ\Ô ×(Ò(ØØÔØØð	 )ñ 
ô 
ˆð 	Œ×Òðð à,×2Ò2Ñ4Ô4ðñ ô ñ	
ô 	
ð 	
ð "ð 	'ð 	'ˆAØŒM×Ò˜a Ñ&Ô&Ð&Ð&å  Ô!3Ô!?Ñ@Ô@ð 	6ð 	6‰GˆAˆtàŒy�IÔ,Ò,Ð,°´Ð@PÐ1PÐ1PÝ!Ø$ T¤[Ô1µ5´<ñô ð bð båÐ+¨D¬KÔ8Ñ9Ô9ÐaÐaÐañbô bð õ &Ô5�”	øØ
�Š‰Œ×Ò˜BÑÔÐàˆ	r+   c                 óŽ   ‡ ‡‡‡‡— i Šdt           fˆ fd„Šdt          j        j        fˆfd„Šˆˆˆˆˆ fd„Š ‰‰ j        ¦  «         d S )Nr  c                 ój   •— |                       d¦  «        }‰j        }|D ]}t          ||¦  «        }Œ|S rÈ   )r›   r@  rô   )r  r�   r   rW  r	  s       €r)   r    z.TS2EPConverter.lift_get_attr.<locals>.get_attr  s<   ø€ Ø—9’9˜S‘>”>ˆDØ”ˆAØð "ð "�Ý˜A˜q‘M”M��ØˆHr+   rÂ   c                 ó¤   •— |                       d¦  «        }|                      ¦   «                              ¦   «         }‰|         }|r|› d|› �n|}|S )Nr�   r•   )rÁ   r¾   r¿   )rÂ   rÅ   rë   rì   rí   râ   s        €r)   Úget_fqnz-TS2EPConverter.lift_get_attr.<locals>.get_fqn$  sW   ø€ ØŸš˜v™œˆIØŸš™œ×/Ò/Ñ1Ô1ˆJØ2°:Ô>ˆNØ:HÐW˜.Ð6Ð6¨9Ð6Ð6Ð6ÈiˆHØˆOr+   c                 ó‚  •— |                       ¦   «         D �]'}|                     ¦   «         dk    r+|                     ¦   «                              ¦   «         }d‰	|<   |                     ¦   «         dk    r§ ‰|¦  «        } ‰|¦  «        }|                     ¦   «                              ¦   «         }|‰	|<   t	          |t
          j        ¦  «        r|‰
j        vr
|‰
j        |<   n8t	          |t
          j        ¦  «        r|‰
j	        vr
|‰
j	        |<   n
|‰
j
        |<   |                     ¦   «         D ]} ‰|¦  «         Œ�Œ)d S )Nzprim::CreateObjectrº  rÐ   )rÑ   rÒ   rÀ   r¿   rB   r   r€   r  r  r  rI  rÓ   )rÕ   rÂ   re  rí   r¶   râ  Ú_dfs_get_attrr    ri  râ   r	  s         €€€€€r)   rk  z3TS2EPConverter.lift_get_attr.<locals>._dfs_get_attr+  sN  ø€ ØŸš™œð ,ñ ,�Ø—9’9‘;”;Ð"6Ò6Ð6Ø"&§+¢+¡-¤-×"9Ò"9Ñ";Ô";�KØ9;Ð)¨+Ñ6à—9’9‘;”; /Ò1Ð1Ø&˜w t™}œ}�HØ$˜H XÑ.Ô.�EØ"&§+¢+¡-¤-×"9Ò"9Ñ";Ô";�KØ9AÐ)¨+Ñ6Ý! %­¬Ñ6Ô6ð MØ#¨4Ô+>Ð>Ð>à<A˜DÔ/°Ñ9øÝ# E­5Ô+=Ñ>Ô>ð MØ#¨4Ô+@Ð@Ð@Ø>C˜DÔ1°(Ñ;øàGL˜Ô:¸8ÑDà $§¢¡¤ð ,ð ,�HØ!�M (Ñ+Ô+Ð+Ð+ñ,ð),ð ,r+   )r   r   r   r  r  )r	  rk  r    ri  râ   s   `@@@@r)   rJ  zTS2EPConverter.lift_get_attr
  s¤   øøøøø€ ð" 13Ðð	�#ð 	ð 	ð 	ð 	ð 	ð 	ð	�%œ(œ-ð 	ð 	ð 	ð 	ð 	ð 	ð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð0 	ˆ�d”mÑ$Ô$Ð$Ð$Ð$r+   rb   )T)r  r  r  r   r   r   rD   rC   r
   r   r   r   r   r  r   r  r=  r  r7  r  r<  rP  rJ  rc   r+   r)   r?  r?  o  s  € € € € € ð 37ð	"ð "à˜œ	Ô.°´	Ô0HÐHÔIð"ð ˜3 ˜8”_ð"ð    S¨# X¤Ô/ð	"ð "ð "ð "ðH2˜ð 2ð 2ð 2ð 2ðh €_�SÑÔðð ð ñ Ôðð4$àŒHÔ ð$ð ˜s C˜xœ.ð$ð $ð $ð $ðL9%ð 9%ð 9%ð 9%ð 9%r+   r?  )r’   )dÚbuiltinsÚloggingrŽ  rJ   ri  Ú
contextlibr   r   r   r   r   r   r	   r
   r   r   Útorch.export._tracer   ÚAtorch._export.passes.replace_quantized_ops_with_standard_ops_passr   Útorch.export.exported_programr   Útorch.export.graph_signaturer   r   r   r   r   r   r   Útorch.fxr   Ú	getLoggerr  r  r*   r=   ÚnnÚModuler   rC   rÝ   rD   r`   rf   rj   rr   r  r<  rŒ   r‘   r   r—   rž   r¤   Úuint8Úint8Úint16r°  Úint64Úfloat16Úfloat32Úfloat64Ú	complex32Ú	complex64Ú
complex128rb  Úqint8Úquint8Úbfloat16rº   rH  r_  r¼   ÚmaxÚminr�  Úis_Úis_notÚnot_Úcontainsr!   rx   ry   Ú	sym_numelrz   Úsym_storage_offsetÚ
sym_strider  rÆ   rÍ   r  rá   r  rî   rþ   r   r"  r=  r?  rc   r+   r)   ú<module>r�     s,  ðà €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Ià €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð :Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 'Ð &Ð &Ð &Ð &Ð &ð €gÔ˜Ñ!Ô!€ð	ð 	ð 	ð"ð "ð "ð8/*Ø�”” %¤)Ô":Ð:Ô;ð/*ØCKÈCÄ=ð/*à
ˆ5Œ;˜˜[Ô)¨3°¸Ô9KÔ0LÐLÔMð/*ð /*ð /*ð /*ðdð ð ð!ð !ð !ðHð Hð Hð(T e¤hÔ&:ð Tð Tð Tð Tð"ð ð ðð ˜ð  cð ¸ð ð ð ð ð,˜sð , sð ,ð ,ð ,ð ,ð&ð &ð &ð 
„K�Ø	„J�Ø	„K�Ø	„K�Ø	„K�Ø	„M�1Ø	„M�1Ø	„M�1Ø	„O�QØ	„O�QØ	Ô�bØ	„J�Ø	„K�Ø	„L�"Ø	„N�BðÐ ð$ SÐRÐ5I×5OÒ5OÑ5QÔ5QÐRÑRÔRÐ ð	'ð 	'ð 	'ð  ”Ø”Ø Ô(Ø”LØ”Ø”]Ø"Ô+Ø#Øð ”9”>Ô+Ø”)”.Ô)Ø!œIœNÔ=Ø”I”NÔ-ðð Ð ð&0ð 0ð 0ð)ð )ð )ðM5ØŒ8Œ>ðM5à
ˆ4�””  C¤Ð(Ô)¨4°°S°¬>Ð9Ô:ðM5ð M5ð M5ð M5ð`Ø  S œ>ðØ16´´ðàðð ð ð ð2˜%œ(œ-ð ð ð ð ð,T'ð T'ð T'ð T'ð T'ñ T'ô T'ð T'ðnE4ð E4ð E4ð E4ð E4Ð!4ñ E4ô E4ð E4ðP ð ð  ñ „ð ðT%ð T%ð T%ð T%ð T%ñ T%ô T%ð T%ð T%ð T%r+   