§
    ŠŠtjþ  ã                   óB  — 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j$        j%        ej&        j'        z  dee
         de(ej)        e*d         e
ej+        dz  f         fd„Z,d„ Z-d„ Z.d„ Z/dej0        j1        fd„Z2d„ Z3d@de4de4de4fd„Z5de4de4fd„Z6d„ Z7e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*ejF        d+iZGd,„ eG H                    ¦   «         D ¦   «         ZId-„ ZJe jK        e jL        ejM        ejN        ejO        ejP        ejQ        eJeRejS        jT        jU        ejS        jT        jV        ejS        jT        jW        ejS        jT        jX        d.œZYeZe4ed/e
f         f         e[d0<   d1„ Z\d2„ Z]d3ej        j)        de(eZej        j^        e_e4         f         eZe4e4f         f         fd4„Z`d5eZe4e4f         d6ej        ja        de4fd7„Zbd6ej        ja        fd8„Zc G d9„ d:¦  «        Zd G d;„ d<ed¦  «        Zee	d=„ ¦   «         Zf G d>„ d?¦  «        ZgdS )Aé    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                 ó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          úU/var/www/html/CA-Chatbot/venv/lib/python3.11/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Ñ+Ô+Ð+Ý-2¬Y×-GÒ-GØØØØØ"ð .Hñ .ô .Ñ*€K�˜Nõ 
Ô$Ð%@ÑAÔAÐAà�uœy×;Ò;¸EÑBÔB×GÒGÑIÔIÒIÐIÝð:ñ
ô 
ð 	
ð
 ˜	Ð!Ð!r(   r3   r4   Ú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   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µ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_addrc   |   s   € Øˆq‰5€Lr(   c                 ó   — | |gz   S r_   r`   )Ú	containerÚelements     r&   Úlist_appendrg   €   s   € Ø˜�yÑ Ð r(   c                 óH   — |d|…         }||d…         } | g |¢|‘|¢R 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   „   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_intry   Ú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 r_   )r   ru   rv   rw   rx   )r~   r   r€   r�   s       r&   Úreplacementz2inplace_optimize_sym_size_div.<locals>.replacement¢   s)   € Ý”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                              ¦   «         rdS dS )Nr   zEmpty argument name for codegenFT)r   r2   Ú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 r_   )Úget_attrÚplaceholder)Úfx_graphrŒ   Úis_top_level_graphs      r&   Ú#get_node_as_placeholder_or_get_attrr    ¾   s2   € Øð 'Ø× Ò  Ñ&Ô&Ð&Ø×Ò Ñ%Ô%Ð%r(   é   é   é   é   é   é   é   é   é	   é
   é   é   é   é   c                 ó   — i | ]\  }}||“Œ	S r`   r`   )Ú.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_ENUMr2   )Ú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::stride.Úkind_to_standard_operatorsc                 óÎ   — |                       ¦   «                              ¦   «         |                      ¦   «                              ¦   «         }}|                      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(   rC   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¼   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œ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(   r`   )rC   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_attr\  s4   ø€ ØÐ(Ð(Ð(Ø(¨Ô.Ð.åÐ:¨$Ð:Ð:Ð:Ñ;Ô;Ð;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Ô4ˆ
ˆ
Ø	�Š‰Œ˜Ò	'Ð	'Ø—Z’Z‘\”\×+Ò+Ñ-Ô-ˆ
ˆ
åØMÀdÐMÐMÐMñ
ô 
ð 	
ð —’�v‘”€IØ�X˜jÑ)Ô)€NØ2@ÐO�.Ð.Ð. 9Ð.Ð.Ð.Ài€Hà€Or(   c                 ó"  — |                       ¦   «         }|dk    rt          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 )Ú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Ø�]Ò"Ð"ÝÐ;°TÐ;Ð;Ñ<Ô<Ð<Ý&+¤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   Á>AC Ã
DÃ:DÄDc                   ó:  — 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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*„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=„ ZAd>S )?ÚTS2FXGraphConverterÚts_graphÚname_to_paramÚname_to_bufferrÝ   Úname_to_non_tensor_attributeÚname_to_constantrß   c                 óv  ‡ — |‰ _         |‰ _        |‰ _        t          j                             ¦   «         ‰ _        g ‰ _        g ‰ _        i ‰ _	        |‰ _
        |‰ _        i ‰ _        |‰ _        i ‰ _        |‰ _        t           D ]%}t#          |¦  «        }	t%          ‰ |	ˆ fd„¦  «         Œ&t'          ¦   «         ‰ _        d S )Nc                 ó.   •— ‰                      | ¦  «        S r_   )Ú_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Ý   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Ô(8ˆŒØ,.ˆÔØ.0ˆÔð
 ð 	Ôð
 1AˆÔð 6KˆÔ"ð BDˆÔ.ð
 =YˆÔ)à:<ˆŒð '=ˆÔ#õ ,ð 	ð 	ˆ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 r_   )r  r   r  r?   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 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ð 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 r_   )r?   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  ri   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 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Ñ!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  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Ñ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&   r0  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 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×'Ò'Ñ)Ô)ð 	$ð 	$ˆDØ×Ò˜dÑ#Ô#Ð#Ð#à×"Ò"Ñ$Ô$Ð$õ ŒX×!Ò!ðØ”.ðàÔ$ðð Ô%ðð Ô3ð	ð
 Ô'ðð ŒMñ	
ô 	
ˆõ 	& bÑ)Ô)Ð)à
Œ�Š‰Œˆàˆ	r(   c           
      ón  — | j                              ¦   «         D �]™}|                     ¦   «         }|| 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*t)          dt+          | j        |         ¦  «        › �¦  «        ‚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=  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_namer4  s        r&   r6  z(TS2FXGraphConverter.convert_graph_inputsV  sÖ  € Øœ=×/Ò/Ñ1Ô1ð =	.ñ =	.ˆKØ×(Ò(Ñ*Ô*ˆDà�tÔ)Ð)Ð)Ý"0°Ñ"6Ô"6�ØÔ ×'Ò'ÝÝ!Ô+Ý*°Ð@Ñ@Ô@Ø#ðñ ô ñô ð õ >Ø”M 4¨×)@Ò)@Ñ)BÔ)Bñô �‘ð ˜Ô,Ð,Ð,Ý"0°Ñ"6Ô"6�ØÔ ×'Ò'ÝÝ!Ô(Ý*°Ð@Ñ@Ô@Ø#Ø#'ð	ñ ô ñô ð õ >Ø”M 4¨×)@Ò)@Ñ)BÔ)Bñô �‘ð ˜Ô.Ð.Ð.Ý! $Ô"7¸Ô"=½uÔ?QÑRÔRð Ý(ØnÍ4ÐPTÔPeÐfjÔPkÑKlÔKlÐnÐnñô ð õ #1°Ñ"6Ô"6�ØÔ ×'Ò'ÝÝ!Ô,Ý-Ø!0¸Oðñ ô ð  $Ø#(ðñ ô ñ	ô 	ð 	õ >Ø”M 4¨×)@Ò)@Ñ)BÔ)Bñô ��õ ˜K×,Ò,Ñ.Ô.µ´Ñ@Ô@ð Eáå"0°¸gÐ"FÑ"FÔ"F�ØÔ ×'Ò'ÝÝ!Ô,Ý*°Ð@Ñ@Ô@Ø#ðñ ô ñô ð ð œ-×3Ò3°OÑDÔD�à&-ˆDÔ˜dÑ#Ñ#ð{=	.ð =	.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 r`   ©r,  ©r°   r\   r  s     €r&   ú
<listcomp>z:TS2FXGraphConverter.convert_aten_Float.<locals>.<listcomp>š  ó'   ø€ ÐPÐPÐP¸3�D×1Ò1°#Ñ6Ô6ÐPÐPÐPr(   )r   rž   Úcall_functionrB   r  r½   r¼   )r  r¿   rN  Úinp_listr4  s   `    r&   Úconvert_aten_Floatz&TS2FXGraphConverter.convert_aten_Float–  s‚   ø€ ð	2ð 	2ð 	2ð QÐPÐPÐPÀ$Ç+Â+Á-Ä-ÐPÑPÔPˆØ”-×-Ò-ØÝ�(‰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 r_   )r?   rx   )r°   ra   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)r4   rl   Ú	to_tensors     €r&   r>  z7TS2FXGraphConverter.convert_aten_tensor.<locals>.target¯  s>   ø€ Ø˜&Ð Ð  V¨G¤_Ð%@Ý"6°v¸g´Ô"G��w‘Ø�9˜dÐ- fÐ-Ð-Ð-r(   N)r.  r   ru   rv   r·   ró   Ú_schemaÚboolÚallÚ_refsr½   r¼   rž   rT  r  )	r  r¿   r4   rl   r  r>  Úoutput_namer4  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                 óX  ‡ — t          j        d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 an inplace mutation of the list. This makes the converter non-functional: the result depends on the order of the append nodes being converted!r¢   ©Ú
stacklevelc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r_   rP  rQ  s     €r&   rZ  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ÚwarnrB   r   rž   rT  rg   r  r½   r¼   ÚinputsAtrŸ   Úopr  rÙ   )r  r¿   r4   r4  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¾   rM  Úlifted_tensor_ÚivalzUnsupported constant type: )r½   r¼   ÚhasAttributeÚkindOfr[   rn  r¾   rž   rœ   r  rM  rp  rä   r  )r  r¿   rŒ   r²   Úconstant_kindÚ
alias_namer4  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 r`   rP  rQ  s     €r&   rR  z?TS2FXGraphConverter.convert_prim_CallMethod.<locals>.<listcomp>ñ  rS  r(   rŒ   )r   rž   Úcall_methodr¾   rB   r  r½   r¼   )r  r¿   rU  r4  s   `   r&   Úconvert_prim_CallMethodz+TS2FXGraphConverter.convert_prim_CallMethodð  sz   ø€ ØPÐPÐPÐPÀ$Ç+Â+Á-Ä-ÐPÑPÔPˆØ”-×+Ò+Ø�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~  rb  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 r_   )rë   rß   r½   r¼   rŸ   r  rž   rœ   r  r  r  )r  r¿   rê   rb  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ð Ô:¸8ÑDð 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ß   rB   r   r,  r  rž   rœ   rT  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ü   r.  r^  rž   rT  ÚoutputsSizer½   r¼   r  rP   ÚoutputsÚoperatorÚgetitem)
r  r¿   r>  r4   rl   r4  rb  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 r_   ©Ú_convert_prim_iterator©r  r¿   s     r&   Úconvert_prim_TupleConstructz/TS2FXGraphConverter.convert_prim_TupleConstruct>  ó   € Ø×#Ò# DÑ)Ô)Ð)Ð)Ð)r(   c                 ó0   — |                       |¦  «         d S r_   r“  r•  s     r&   Úconvert_prim_ListConstructz.TS2FXGraphConverter.convert_prim_ListConstructA  r—  r(   c                 ó¨   ‡ — ˆ fd„|                      ¦   «         D ¦   «         }|                     ¦   «                              ¦   «         }|‰ j        |<   d S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r`   rP  rQ  s     €r&   rR  z>TS2FXGraphConverter._convert_prim_iterator.<locals>.<listcomp>E  s'   ø€ ÐSÐSÐS¸c�t×4Ò4°SÑ9Ô9ÐSÐSÐSr(   )r   r½   r¼   r  )r  r¿   Úoutput_listrb  s   `   r&   r”  z*TS2FXGraphConverter._convert_prim_iteratorD  sP   ø€ ØSÐSÐSÐSÀTÇ[Â[Á]Ä]ÐSÑSÔSˆà—k’k‘m”m×-Ò-Ñ/Ô/ˆØ)4ˆÔ˜+Ñ&Ð&Ð&r(   c                 óŠ  — i }d\  }}t          |                     ¦   «         ¦  «        D ]V\  }}|dz  dk    r|                      |¦  «        }Œ$|                      |¦  «        }|�|€t          d¦  «        ‚|||<   d\  }}ŒW|€|�t          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).)rP   r   r,  rï   r½   r¼   r  )r  r¿   Úoutput_dictr  Úvr[   r\   rb  s           r&   Úconvert_prim_DictConstructz.TS2FXGraphConverter.convert_prim_DictConstructJ  sâ   € ØˆØ‰ˆˆ1Ý §¢¡¤Ñ.Ô.ð 
	"ð 
	"‰FˆAˆsð �1‰u˜ŠzˆzØ×1Ò1°#Ñ6Ô6��à×1Ò1°#Ñ6Ô6�Ø�9  	Ý(Ð)UÑVÔVÐVØ!"�˜A‘Ø!‘��1�1àˆ=˜A˜MÝ ØYñô ð ð —k’k‘m”m×-Ò-Ñ/Ô/ˆØ)4ˆÔ˜+Ñ&Ð&Ð&r(   c                 ó0   — |                       |¦  «         d S r_   ©Ú_convert_prim_unpack_iteratorr•  s     r&   Úconvert_prim_ListUnpackz+TS2FXGraphConverter.convert_prim_ListUnpacka  ó   € Ø×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0r(   c                 ó0   — |                       |¦  «         d S r_   r¢  r•  s     r&   Úconvert_prim_TupleUnpackz,TS2FXGraphConverter.convert_prim_TupleUnpackd  r¥  r(   c                 ó,  — t          |                     ¦   «         ¦  «        D ]q\  }}|                     ¦   «         }|                      |                     ¦   «         ¦  «        }| j                             t          j        ||f¦  «        }|| j	        |<   Œrd S r_   )
rP   rŒ  r¼   r,  r»   rž   rT  r�  rŽ  r  )r  r¿   r[   r�  Ú	outp_namer\   r4  s          r&   r£  z1TS2FXGraphConverter._convert_prim_unpack_iteratorg  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 r_   rP  ©r°   r»   r  s     €r&   rZ  z7TS2FXGraphConverter.convert_aten_Int.<locals>.<genexpr>r  ó1   øè è € ÐUÐU¸e�T×2Ò2°5Ñ9Ô9ÐUÐUÐUÐUÐUÐUr(   rµ   )r   ru   rv   Ú_to_copyró   rB   r   rž   rT  Úint32Ú_local_scalar_denser½   r¼   r  )r  r¿   r>  r4   Úto_copy_noder4  rb  s   `      r&   Úconvert_aten_Intz$TS2FXGraphConverter.convert_aten_Into  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 r_   rP  r¬  s     €r&   rZ  z?TS2FXGraphConverter.convert_prim_NumToTensor.<locals>.<genexpr>‡  r­  r(   rµ   )r   ru   rv   ry   rB   r   rž   rT  Úlongr½   r¼   r  ©r  r¿   r>  r4   r4  rb  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¿   rb  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 r_   )r   ru   rv   Úconvolutionró   r.  r^  rž   rT  r½   r¼   r  )r  r¿   r>  r4   rl   r4  rb  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ü   r^  r.  rñ   rŒ   r  r?   r   r}   ÚnumelrN   rL  rž   rT  ru   rv   rz   r{   rB   r½   r¼   r  r‘  )r  r¿   r>  rî   r4   rl   Ú	arg1_nameÚtensor_constantÚupdated_argsr4  rb  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 r_   rP  r¬  s     €r&   rZ  z?TS2FXGraphConverter.convert_aten___getitem__.<locals>.<genexpr>¾  sB   øè è € ð '
ð '
Ø5:ˆD×)Ò)¨%Ñ0Ô0ð'
ð '
ð '
ð '
ð '
ð '
r(   )	rB   r   rž   rT  r�  rŽ  r½   r¼   r  )r  r¿   Úinput_containerÚindexr4  rb  s   `     r&   Úconvert_aten___getitem__z,TS2FXGraphConverter.convert_aten___getitem__½  s™   ø€ Ý!&ð '
ð '
ð '
ð '
Ø>B¿kºk¹m¼mð'
ñ '
ô '
ñ "
ô "
Ñˆ˜ð ”-×-Ò-ÝÔ˜°Ð6ñ
ô 
ˆð —k’k‘m”m×-Ò-Ñ/Ô/ˆØ)0ˆÔ˜+Ñ&Ð&Ð&r(   c                 óŠ  — t          |¦  «        }|                      ||j        ¦  «        \  }}|t          j        j        j        j        u s|t          j        j        j        j        u �rEd„ | 	                    ¦   «          
                    ¦   «         D ¦   «         }d„ |D ¦   «         }t          d„ |D ¦   «         ¦  «        }|rît          |¦  «        dk     rt          dt          |¦  «        › �¦  «        ‚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 r`   )Úuser)r°   Úuses     r&   rR  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&   rR  z7TS2FXGraphConverter.convert_aten_to.<locals>.<listcomp>Ò  sA   € ð ð ð àØ×#Ò#Ñ%Ô%¨Ò6Ð6õ   	Ñ*Ô*à6Ð6Ð6r(   c              3   ó.   K  — | ]}|j         j        V — Œd S r_   )r^  Ú
is_mutable)r°   r>  s     r&   rZ  z6TS2FXGraphConverter.convert_aten_to.<locals>.<genexpr>×  s8   è è € ð %ð %Ø.4�”Ô)ð%ð %ð %ð %ð %ð %r(   r¤   zexpected at least 4 args, got Tr£   )rü   r.  r^  r   ru   rv   rJ  rµ   Ú
prim_dtyper½   ÚusesÚanyr   rï   rN   rž   rT  rB   Úcloneró   r¼   r  r‘  )r  r¿   r>  r4   Ú_kwargsÚ
user_nodesÚuser_targetsÚhas_mutable_targetÚnew_argsr4  Ú
clone_noderb  s               r&   Úconvert_aten_toz#TS2FXGraphConverter.convert_aten_toÇ  s¯  € Ý  Ñ&Ô&ˆØ×,Ò,¨T°6´>ÑBÔB‰ˆˆgð •U”Y”^Ô&Ô,Ð,Ð,°½%¼)¼.Ô:KÔ:VÐ0VÑ0VØCÐC¨d¯kªk©m¬m×.@Ò.@Ñ.BÔ.BÐCÑCÔCˆJðð à!+ðñ ô ˆLõ
 "%ð %ð %Ø8Dð%ñ %ô %ñ "ô "Ðð "ð Ý�t‘9”9˜q’=�=Ý(Ð)UÍ#ÈdÉ)Ì)Ð)UÐ)UÑVÔVÐVÝ ™:œ:�Ø"�˜‘Øœ-×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	        u rn|                      ||j        ¦  «        \  }}|                     ¦   «                              ¦   «         }| j                             t$          |¦  «        | j        |<   d S |                      |¦  «         d S )Nrí   r   r¡   z$unable to determined the target for )rî   r?   rj  r   r   ÚListTyperu   rv   rÙ   rM  r2   rü   r.  r^  r½   r¼   rž   rT  rc   r  r‘  )r  r¿   r>  r4   r×  rb  s         r&   Úconvert_aten_addz$TS2FXGraphConverter.convert_aten_addî  s7  € Ø�;Š;‰=Œ=˜MÒ)Ð)Ý˜$Ÿ-š-¨Ñ*Ô*×/Ò/Ñ1Ô1µ5´>ÑBÔBð RÅzØ—’˜aÑ Ô ×%Ò%Ñ'Ô'­¬ñHô Hð Rõ œœÔ+Ô-��å"Ð#PÈ$Ð#PÐ#PÑQÔQÐQå$ TÑ*Ô*ˆFà•U”Y”^Ô'Ô)Ð)Ð)ð !×0Ò0°°v´~ÑFÔF‰Mˆ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¢   )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  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    rt          dt          |¦  «        › �¦  «        ‚|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 r`   ©r¼   )r°   r\   s     r&   rR  z9TS2FXGraphConverter.convert_prim_Loop.<locals>.<listcomp>$  s    € ÐFÐFÐF°C §¢¡¤ÐFÐFÐFr(   r¢   r¡   zexpected 1 subgraph node, got c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r`   ©r0  ©r°   rŒ   r  s     €r&   rR  z9TS2FXGraphConverter.convert_prim_Loop.<locals>.<listcomp>>  s7   ø€ ð 
ð 
ð 
àð ×$Ò$ TÑ*Ô*ð
ð 
ð 
r(   )rN   r   rä  r,  r$  rÐ   rØ   rÝ   r"  r   rï   rŸ   r  Úrangerž   rT  ro   r‹  rP   rŒ  r¼   r�  rŽ  r  rÉ  )r  r¿   r   Únum_iterationsÚloop_local_argumentsÚglobal_argumentsrÒ   r  r  r  Úfx_block_argsrj   Ú	loop_noder[   r�  rb  rŒ   Úglobal_argument_indexs   `                 r&   Úconvert_prim_Loopz%TS2FXGraphConverter.convert_prim_Loop  sH  ø€ Ý�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ØÐ"ñ/
ô /
Ñ+ˆÐ+õ ˆ~ÑÔ !Ò#Ð#Ý Ð!WÅ#ÀnÑBUÔBUÐ!WÐ!WÑXÔXÐXØ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Ô+ð ˜a $×"2Ò"2Ñ"4Ô"4Ñ4Ð7LÑLÑMÐMñð9)	ð )	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Ï   r2   )r  ró  rÒ   r¿   s       r&   Ú_check_set_attr_in_if_blockz/TS2FXGraphConverter._check_set_attr_in_if_blockm  sp   € Ø—^’^Ñ%Ô%ð 	ð 	ˆEØŸš™œð ð �Ø—9’9‘;”; /Ò1Ð1Ý&ð-ñô ð ð 2ðð	ð 	r(   c                 ó   ‡ — ‰                       |¦  «         t          |                     ¦   «         ¦  «        }t          |¦  «        dk    rt	          dt          |¦  «        › �¦  «        ‚‰                      |d         ¦  «        }‰                      |¦  «        }|                     ¦   «         D ]"}|                     ‰ j	        |         ¦  «        }Œ#t          |¦  «        }‰  
                    ||¦  «        \  }}t          |¦  «        dk    rt	          dt          |¦  «        › �¦  «        ‚ˆ 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¡   z#expected 1 input for prim::If, got r   r¢   zexpected 2 subgraph nodes, got c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r`   ré  rê  s     €r&   rR  z7TS2FXGraphConverter.convert_prim_If.<locals>.<listcomp>Ž  s'   ø€ ÐNÐNÐN¸D˜×1Ò1°$Ñ7Ô7ÐNÐNÐNr(   )rõ  rN   r   r   rï   r,  r$  rÐ   rØ   rÝ   r"  rB   rž   rT  r   Úcondr‹  r½   r¼   r  rP   rŒ  r�  rŽ  )r  r¿   r   Ú	predicaterÛ   rÒ   r  r%   rï  r4   Ú	cond_noderb  r[   r½   rŽ  s   `              r&   Úconvert_prim_Ifz#TS2FXGraphConverter.convert_prim_Ifw  sJ  ø€ Ø×(Ò(¨Ñ.Ô.Ð.å�d—k’k‘m”mÑ$Ô$ˆÝˆv‰;Œ;˜!ÒÐÝ Ð!TÅsÈ6Á{Ä{Ð!TÐ!TÑUÔUÐUØ×1Ò1°&¸´)Ñ<Ô<ˆ	ð ×6Ò6°tÑ<Ô<ˆ	ð —[’[‘]”]ð 	Lð 	LˆEØ!Ÿš¨Ô(CÀEÔ(JÑKÔKˆIˆIå˜‘O”Oˆ	Ø ×;Ò;¸DÀ)ÑLÔLÑˆ˜åˆ~ÑÔ !Ò#Ð#Ý ØGµ#°nÑ2EÔ2EÐGÐGñô ð ð OÐ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 r_   )Ú_convert_as_noopr•  s     r&   Úconvert_aten_Boolz%TS2FXGraphConverter.convert_aten_Bool£  s   € Ø×Ò˜dÑ#Ô#Ð#Ð#Ð#r(   c                 ó   — d S r_   r`   r•  s     r&   Úconvert_prim_Enterz&TS2FXGraphConverter.convert_prim_Enter¦  s	   € ð
 	ˆr(   c                 ó   — d S r_   r`   r•  s     r&   Úconvert_prim_Exitz%TS2FXGraphConverter.convert_prim_Exit­  s   € àˆr(   c                 óÐ   — t          |¦  «        }|j        }|                      ||¦  «        \  }}|                     ¦   «                              ¦   «         }|d         | j        |<   d S )Nr   )rü   r^  r.  r½   r¼   r  )r  r¿   r>  rî   r4   r×  rb  s          r&   rý  z$TS2FXGraphConverter._convert_as_noop±  sa   € õ ! Ñ&Ô&ˆØ”ˆà×,Ò,¨T°6Ñ:Ô:‰ˆˆgà—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 r_   rP  r¬  s     €r&   rZ  zMTS2FXGraphConverter.convert_profiler__record_function_exit.<locals>.<genexpr>Á  r­  r(   )r   ru   ÚprofilerÚ_record_function_exitrB   r   rž   rT  )r  r¿   r>  r4   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ž   rx  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 r_   )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 r_   rP  r¬  s     €r&   rZ  zBTS2FXGraphConverter._convert_standard_operators.<locals>.<genexpr>×  r­  r(   )	r¹   rÏ   rB   r   rž   rT  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ô   r2   )r  r¿   Ú	node_kindr  Úhandler_funcÚnode_strrS   s          r&   r7  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 r`   rç  )r°   r�  s     r&   rR  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Œ  rN   r  r  rŸ   r?   r   r	  ÚNoderk  rž   rT  rÖ  r   r  r   r   ÚUSER_OUTPUTr   r  r   rä   r   r½   )r  r4   Úoutp_name_listrb  r4  s        r&   r8  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)Br  Ú
__module__Ú__qualname__r   r   rÚ   ÚBlockÚdictr   r}   r×   r   r  r  r  rN   r"  r$  rŸ   r  r.  ÚValuer,  r0  r	  r9  r  r6  rV  rc  rl  ru  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  r  r7  r8  r`   r(   r&   rþ   rþ   ‰  s]  € € € € € ðDCà”(”. 5¤8¤>Ñ1ð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ð %,ð %,ð %,ð %,ðN0 U¤X¤]ð 0ð 0ð 0ð 0ð(ð ð ð6N e¤h¤mð Nð Nð Nð Nð`°5´8´=ð ð ð ð ð*9 E¤H¤Mð *9ð *9ð *9ð *9ðX$ 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                   ó.  ‡ — 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                 óX   •— t          ¦   «                              |¦  «         || _        d S r_   )Ú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 r_   )r'  Ú__contains__r(  Ú__getitem__)r  r±   r*  s     €r&   r-  z0ExplainTS2FXGraphConverter._DictMock.__getitem__1  s?   ø€ õ ‘7”7×'Ò'¨Ñ,Ô,ð 'Ø”Ð&Ý‘7”7×&Ò& sÑ+Ô+Ð+r(   c                 ó   — dS ©NTr`   )r  r±   s     r&   r,  z1ExplainTS2FXGraphConverter._DictMock.__contains__8  s   € Ø�4r(   )r  r  r  r  r-  r,  Ú__classcell__©r*  s   @r&   Ú	_DictMockr%  ,  s`   ø€ € € € € ð	)ð 	)ð 	)ð 	)ð 	)ð	,ð 	,ð 	,ð 	,ð 	,ð	ð 	ð 	ð 	ð 	ð 	ð 	r(   r2  rÿ   r   r  rÝ   r  r  rß   c                 óô   •— t          ¦   «                              |||||||¦  «         g | _        t                               | j        t          j                             d ddd„ di ¦  «        ¦  «        | _        d S )NÚmockrT  c                  ó   — d S r_   r`   r`   r(   r&   r  z5ExplainTS2FXGraphConverter.__init__.<locals>.<lambda>Z  s   € ˜€ r(   r`   )	r'  r  Úunsupported_node_listr#  r2  r  r   r	  r  )	r  rÿ   r   r  rÝ   r  r  rß   r*  s	           €r&   r  z#ExplainTS2FXGraphConverter.__init__;  s�   ø€ õ 	‰Œ×ÒØØØØ"Ø(ØØ!ñ	
ô 	
ð 	
ð ;=ˆÔ"õ 7×@Ò@ØÔåŒH�MŠMØØØØ�ØØñô ñ
ô 
ˆÔÐÐr(   c                 ó¸   — |                       ¦   «          | j                             ¦   «         D ]}|                      |¦  «         Œ|                      ¦   «          d S r_   )r6  rÿ   rÎ   r7  r8  r•  s     r&   Úexplainz"ExplainTS2FXGraphConverter.explain`  s`   € Ø×!Ò!Ñ#Ô#Ð#Ø”M×'Ò'Ñ)Ô)ð 	$ð 	$ˆDØ×Ò˜dÑ#Ô#Ð#Ð#Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$r(   c                 ó¢   •— 	 t          ¦   «                              |¦  «         d S # t          $ r | j                             |¦  «         Y d S w xY wr_   )r'  r7  rô   r6  r   )r  r¿   r*  s     €r&   r7  z'ExplainTS2FXGraphConverter.convert_nodef  sa   ø€ ð	4Ý‰GŒG× Ò  Ñ&Ô&Ð&Ð&Ð&øÝð 	4ð 	4ð 	4ØÔ&×-Ò-¨dÑ3Ô3Ð3Ð3Ð3Ð3ð	4øøøs   ƒ!& ¦$AÁA)r  r  r  Ú__doc__r   r2  r   r   rÚ   r  r   r}   r×   r   r  r8  r7  r0  r1  s   @r&   r#  r#  %  s-  ø€ € € € € ðð ðð ð ð ð �Dñ ô ð ð#
à”(”. 5¤8¤>Ñ1ð#
ð ˜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=  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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 r_   )Úshaper`  )r°   Úparamr·   s     €r&   rZ  z*TS2EPConverter.__init__.<locals>.<genexpr>�  sN   øè è € ð ð àØ”| u¤{Ò2Ð2ð ˜u’_×)Ò)Ñ+Ô+à2Ð2Ð2Ð2ðð r(   )r@  r]   rÿ   rV   rA  rB  r   r  r?   r   r   r@   rN   Ú
parametersrW   ÚitemsrÕ  Úname_to_non_tensor_attributesr  Úlift_get_attr)r  r@  rA  rB  r%   Ú
param_listr  r·   s          @r&   r  zTS2EPConverter.__init__y  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 ]2\  }}||j        vr$t)          j        d|› d�d	¬
¦  «         ||j        |<   Œ3|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¢   re  )r  Úinforÿ   rÞ   rþ   r   r  rI  r  r  r   Úprint_readableÚretrace_as_exported_programr?   r@  r   r   r@   rW   rH  rh  ri  )r  rÝ   rß   Úgraph_converterrp   Ú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  r8  r   r6  rP   r˜   r   r—   rÏ   Úprint)	r  rM  rÝ   rß   rQ  Úexplain_strr[   Únr  s	            r&   r8  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(   rp   r  c                 ó°  — t          d„ | j        ¦  «        }t          j        j                             || j        |dd¬¦  «        }|j                             d„ |                     ¦   «         D ¦   «         ¦  «         |D ]}|j	         
                    |d ¦  «         Œ|j        j        D ]‡}|j        t          j        k    rp|j        |v rgt#          ||j                 t          j        ¦  «        s*t'          t)          ||j                 ¦  «        › d�¦  «        ‚t          j        |_        d |_        Œˆ|                     ¦   «                              |¦  «         |S )Nc                 ó~   — t          |t          j        ¦  «        r"t          j        g|                     ¦   «         z  nd S r_   )r?   r   r}   r
   ÚAUTOr   )ÚpathÚxs     r&   r  z<TS2EPConverter.retrace_as_exported_program.<locals>.<lambda>ó  s1   € Ý(2°1µe´lÑ(CÔ(CÐM•”�
˜QŸUšU™WœWÑ$Ð$Èð r(   FT)Údynamic_shapesr*   Úpre_dispatchc                 óf   — i | ].\  }}t          |t          j        t          j        f¦  «        ¯+||“Œ/S r`   )r?   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	   rA  r   ÚexportÚ_traceÚ_exportÚ
_constantsÚupdaterH  rW   ÚpopÚgraph_signaturer
  rÏ   r   rB  r>  r?   r}   rï   r   ÚCONSTANT_TENSORr?  ÚverifierÚcheck)r  rp   r  r]  rR  r  Úspecs          r&   rP  z*TS2EPConverter.retrace_as_exported_programí  sy  € õ
 -ðð ð Ôñ	
ô 
ˆõ Œ\Ô ×(Ò(ØØÔØ)ØØð )ñ 
ô 
ˆð 	Œ×Òðð à,×2Ò2Ñ4Ô4ðñ ô ñ	
ô 	
ð 	
ð "ð 	'ð 	'ˆAØŒM×Ò˜a Ñ&Ô&Ð&Ð&àÔ&Ô2ð 	'ð 	'ˆDàŒy�IÔ,Ò,Ð,°´Ð@PÐ1PÐ1PÝ!Ð"2°4´;Ô"?ÅÄÑNÔNð Ý(ÝÐ 0°´Ô =Ñ>Ô>ÐfÐfÐfñô ð õ &Ô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_attr0  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_fqn7  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¼   r?   r   r}   r  r  r  rI  rÐ   )rÒ   r¿   rb  rê   r²   râ  Ú_dfs_get_attrrœ   rn  rß   r  s         €€€€€r&   rp  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  rp  rœ   rn  rß   s   `@@@@r&   rJ  zTS2EPConverter.lift_get_attr  s¤   øøøøø€ ð" 13Ðð	�#ð 	ð 	ð 	ð 	ð 	ð 	ð	�%œ(œ-ð 	ð 	ð 	ð 	ð 	ð 	ð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð0 	ˆ�d”mÑ$Ô$Ð$Ð$Ð$r(   r_   )T)r  r  r  r   r   rA   r@   rB   r   r   r   r  r   r  r=  r  r8  r	  r9  rP  rJ  r`   r(   r&   r?  r?  w  sý   € € € € € ð 04ð	"ð "à”)Ô(¨5¬9Ô+CÑCð"ð ˜3 ˜8”_ð"ð ˜C ˜H”~¨Ñ,ð	"ð "ð "ð "ðH3˜ð 3ð 3ð 3ð 3ðj €_�SÑÔðð ð ñ Ôðð4.àŒHÔ ð.ð ˜s C˜xœ.ð.ð .ð .ð .ð`9%ð 9%ð 9%ð 9%ð 9%r(   r?  )rŽ   )hÚbuiltinsÚloggingr�  rG   rh  Ú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	  r9  rˆ   r�   r   r“   rš   r    Úuint8Úint8Úint16r¯  Úint64Úfloat16Úfloat32Úfloat64Ú	complex32Ú	complex64Ú
complex128r_  Úqint8Úquint8Úbfloat16r¶   rH  r\  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(   r&   ú<module>r•     sT  ðà €€€€Ø €€€Ø €€€Ø €€€Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ð @Ð @Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 'Ð &Ð &Ð &Ð &Ð &ð €gÔ˜Ñ!Ô!€ð	ð 	ð 	ð"ð "ð "ð8/*ØŒ8Œ?˜UœYÔ5Ñ5ð/*Ø=EÀc¼]ð/*à
ˆ5Œ;˜˜[Ô)¨3°Ô0BÀTÑ0IÐIÔJð/*ð /*ð /*ð /*ðdð ð ð!ð !ð !ðHð Hð Hð(@ e¤hÔ&:ð @ð @ð @ð @ð"ð ð ðð ˜ð  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Ô-ð=ð =Ð ˜D  h¨s°C¨xÔ&8Ð!8Ô9ð ð ñ ð&0ð 0ð 0ð)ð )ð )ðM5ØŒ8Œ>ðM5à
ˆ4�””  C¤Ð(Ô)¨4°°S°¬>Ð9Ô:ðM5ð M5ð M5ð M5ð`Ø  S œ>ðØ16´´ðàðð ð ð ð2˜%œ(œ-ð ð ð ð ð.Y'ð Y'ð Y'ð Y'ð Y'ñ Y'ô Y'ð Y'ðxE4ð E4ð E4ð E4ð E4Ð!4ñ E4ô E4ð E4ðP ð ð  ñ „ð ð_%ð _%ð _%ð _%ð _%ñ _%ô _%ð _%ð _%ð _%r(   