§
    ŠŠtj€( ã                   óÖ  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZ d dlZd dlmc mZ d dlmc mZ d d	lm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*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1 d dlm2Z2m3Z3 ddl4m5Z5  ej6        e7¦  «        Z8g d¢Z9 G d„ de¦  «        Z: ed¬¦  «         G d„ d¦  «        ¦   «         Z;da<e
d„ ¦   «         Z=	 d_dedej>        j?        de@de:deAf
d „ZB G d!„ d"¦  «        ZC G d#„ d$eCej>        j?        ¦  «        ZD G d%„ d&eCej>        j?        ¦  «        ZE G d'„ d(e jF        ¦  «        ZG G d)„ d*eCej>        j?        ¦  «        ZH	 d`d+e d,eGdz  d-eHfd.„ZId/ej        jJ        d0e%d-dfd1„ZKd/ej        jJ        d-e@dz  fd2„ZLd3„ ZMd4„ ZNd5e@d6e@d-e@fd7„ZOd8ej>        j?        d9ej>        j?        fd:„ZPd;ej>        j?        d-e@fd<„ZQd;ej        jR        d-ej        jS        fd=„ZTd;ej        jR        eDz  eHz  d-ej        jS        fd>„ZUd;ej        jR        eDz  eHz  d-ej        jS        fd?„ZVd@ej>        j?        de@fdA„ZW	 d`d@ej>        j?        de@dBej>        j?        dCee@gej>        j?        f         dz  fdD„ZXdEe@dFeYd-e@fdG„ZZdHe@dEe@d-eAfdI„Z[ G dJ„ dK¦  «        Z\e G dL„ dM¦  «        ¦   «         Z]dNej        jJ        dOeHfdP„Z^	 dadRej>        j?        dSe_e@eYf         dTe@fdU„Z` G dV„ dW¦  «        Zad;ej        jR        dOeHdXe_e@ebe@         f         fdY„ZcdZ„ Zd	 d`d+ej>        j?        d[e_e@eee@         f         d\eee@         d]e_eYebe@         f         dz  fd^„ZfdS )bé    N)Údefaultdict)ÚCallable)Úcontextmanager)Údeepcopy)Ú	dataclass)ÚEnum)ÚAnyÚcast)ÚFakeScriptObject)Úis_opaque_value)ÚExportedProgram)Úreorder_kwargs)ÚConstantArgumentÚExportGraphSignatureÚ	InputKindÚModuleCallSignatureÚSymBoolArgumentÚSymFloatArgumentÚSymIntArgumentÚTensorArgument)Úis_fx_symbolic_tracing)Ú	_get_attrÚ_get_attr_via_attr_listÚ_print_readable)Ú
GetAttrKeyÚSequenceKeyé   )Ú_remove_effect_tokens)ÚFlatArgsAdapterÚInterpreterModuleÚInterpreterModuleDispatcherÚUnflattenedModuleÚ	unflattenc                   ó   — e Zd ZdZdZdZdZdS )Ú	_AttrKindÚ	parameterÚbufferÚconstantÚmoduleN)Ú__name__Ú
__module__Ú__qualname__Ú	PARAMETERÚBUFFERÚCONSTANTÚMODULE© ó    úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/export/unflatten.pyr%   r%   3   s"   € € € € € Ø€IØ€FØ€HØ€F€F€Fr2   r%   T)Úfrozenc                   óF   — e Zd ZU dZej        ed<   eed<   eed<   eed<   dS )Ú	_TensorIDzJCustom tensor identifier containing storage, stride, and size information.Úuntyped_storageÚstrideÚsizeÚstorage_offsetN)	r*   r+   r,   Ú__doc__ÚtorchÚUntypedStorageÚ__annotations__ÚtupleÚintr1   r2   r3   r6   r6   :   sE   € € € € € € àTÐTàÔ)Ð)Ð)Ñ)Ø€M€M�MØ
€K€K�KØÐÐÑÐÐr2   r6   c               #   ó8   K  — t           } da 	 d V — | a d S # | a w xY w©NF)ÚRUN_WITH_INTERPRETER)Úold_flags    r3   Ú_disable_interpreterrE   G   s?   è è € õ $€HØ Ðð(Øˆˆˆà'ÐÐÐø˜xÐÐ'Ð'Ð'Ð's   � •Úfrom_objÚ	to_moduleÚtargetÚ	attr_kindÚ
persistentc                 óì  ‡	— |                      d¦  «        �^ }}|h}|D ]ŒŠ	t          ¦   «         }|D ]w}t          |‰	¦  «        s-t          |‰	t          j                             ¦   «         ¦  «         |                     ˆ	fd„|j         	                    ¦   «         D ¦   «         ¦  «         Œx|}Œ�|D �]Ä}|t          j        k    rUt          | t          j        j        ¦  «        st          dt          | ¦  «        › �¦  «        ‚|                     || ¦  «         Œh|t          j        k    rRt          | t          j        ¦  «        st          dt          | ¦  «        › �¦  «        ‚|                     || |¬¦  «         ŒÊ|t          j        k    r‹t          | t*          ¦  «        rt          d¦  «        ‚t          | t          j        t          j        f¦  «        s.t/          | ¦  «        st          dt          | ¦  «        › �¦  «        ‚t          ||| ¦  «         �Œe|t          j        k    rOt          | t          j        j        ¦  «        st          dt          | ¦  «        › �¦  «        ‚t          ||| ¦  «         �ŒÆd S )	Nú.c              3   óB   •K  — | ]\  }}t          |‰¦  «        ¯|V — Œd S ©N)Ú_is_call_name)Ú.0ÚkÚt_callÚitems      €r3   ú	<genexpr>z_assign_attr.<locals>.<genexpr>h   sK   øè è € ð ð á�A�vÝ   DÑ)Ô)ðØðð ð ð ð ð r2   z9expected torch.nn.Parameter for PARAMETER attr_kind, got z0expected torch.Tensor for BUFFER attr_kind, got )rJ   z2FakeScriptObject should only exist during tracing.zVexpected torch.Tensor, torch.ScriptObject, or opaque type for CONSTANT attr_kind, got z3expected torch.nn.Module for MODULE attr_kind, got )ÚsplitÚsetÚhasattrÚsetattrr<   ÚnnÚModuleÚupdateÚ_modulesÚitemsr%   r-   Ú
isinstanceÚ	ParameterÚAssertionErrorÚtypeÚregister_parameterr.   ÚTensorÚregister_bufferr/   r   ÚScriptObjectr   r0   )
rF   rG   rH   rI   rJ   ÚprefixÚfieldÚ
to_modulesÚtsrS   s
            @r3   Ú_assign_attrrj   T   sÄ  ø€ ð —\’\ #Ñ&Ô&�N€VˆUð �€JØð 
ð 
ˆÝ#&¡5¤5ˆØ#ð 	ð 	ˆIÝ˜9 dÑ+Ô+ð <Ý˜	 4­¬¯ªÑ):Ô):Ñ;Ô;Ð;Ø�IŠIð ð ð ð à!*Ô!3×!9Ò!9Ñ!;Ô!;ðñ ô ñ ô ð ð ð
 ˆ
ˆ
àð "0ñ "0ˆ	Ø�	Ô+Ò+Ð+Ý˜h­¬Ô(:Ñ;Ô;ð Ý$Ø`ÕPTÐU]ÑP^ÔP^Ð`Ð`ñô ð ð ×(Ò(¨°Ñ9Ô9Ð9Ð9Ø�)Ô*Ò*Ð*Ý˜h­¬Ñ5Ô5ð Ý$ØWÅtÈHÁ~Ä~ÐWÐWñô ð ð ×%Ò% e¨XÀ*Ð%ÑMÔMÐMÐMØ�)Ô,Ò,Ð,Ý˜(Õ$4Ñ5Ô5ð Ý$ØHñô ð õ Øå”LÝÔ&ðñô ð 	õ & hÑ/Ô/ð	õ %Ø}ÕmqÐrzÑm{Ôm{Ð}Ð}ñô ð õ �I˜u hÑ/Ô/Ð/Ñ/Ø�)Ô*Ò*Ð*Ý˜h­¬¬Ñ8Ô8ð Ý$ØZÍ$ÈxÉ.Ì.ÐZÐZñô ð õ �I˜u hÑ/Ô/Ð/ùðE"0ð "0r2   c                   ó2   — e Zd ZU edz  ed<   dedz  fd„ZdS )Ú_SubmoduleBaseNÚ_tyÚreturnc                 ó   — | j         S )zó
        Subclass of this class - InterpreterModule, InterpreterModuleDispatcher, represents
        corresponding model in eager model. To get this type information for those modules
        in eager model we need to use this method.
        )rm   ©Úselfs    r3   Ú	type_namez_SubmoduleBase.type_name—   s   € ð Œxˆr2   )r*   r+   r,   Ústrr>   rr   r1   r2   r3   rl   rl   ”   sB   € € € € € € Ø	ˆt‰€O€O�Oð˜3 ™:ð ð ð ð ð ð r2   rl   c                   óŒ   ‡ — e Zd ZU dZej        j        dz  ed<   	 ddej        j        de	dz  fˆ fd„Z
d„ Zd„ Z	 	 	 	 dd„Zˆ xZS )r    zÈA module that uses torch.fx.Interpreter to execute instead of the usual
    codegen that GraphModule uses. This provides better stack trace information
    and makes it easier to debug execution.
    NÚgraph_moduleÚgraphÚtyc                 ó”   •— t          ¦   «                              ¦   «          || _        || _        | | j        _        t
          | _        d S rN   )ÚsuperÚ__init__rv   rm   Úowning_modulerC   Ú_run_with_interpreter)rq   rv   rw   Ú	__class__s      €r3   rz   zInterpreterModule.__init__¨   sA   ø€ õ
 	‰Œ×ÒÑÔÐØˆŒ
ØˆŒØ#'ˆŒ
Ô Ý%9ˆÔ"Ð"Ð"r2   c                 óH  ‡— | j         €t          d¦  «        ‚t          ¦   «         sHt          j                             ¦   «         s| j        s# t          | j         ¦  «        j        | g|¢R i ‰¤ŽS ‰�rt          |¦  «        }| j
        t          |¦  «        d …         }|                     ˆfd„|D ¦   «         ¦  «         t          |¦  «        t          ‰¦  «        k    r/t          dt          |¦  «        › dt          ‰¦  «        › �¦  «        ‚t          |¦  «        t          | j
        ¦  «        k    r4t          dt          |¦  «        › dt          | j
        ¦  «        › �¦  «        ‚t          |¦  «        }t          j                             | | j        ¬¦  «        j        |dd	iŽS )
Nz&Didn't finalize this InterpreterModulec              3   ó0   •K  — | ]}|‰v ¯‰|         V — Œd S rN   r1   )rP   Ú
kwarg_nameÚkwargss     €r3   rT   z,InterpreterModule.forward.<locals>.<genexpr>Æ   s?   øè è € ð  ð  à"Ø! VÐ+Ð+ð ˜:Ô&à+Ð+Ð+Ð+ð ð  r2   zkwarg_names length z does not match kwargs length zarg_list length z! does not match arg_names length ©rv   Úenable_io_processingF)ru   r`   r   r<   ÚcompilerÚis_dynamo_compilingr|   ra   ÚforwardÚlistÚ	arg_namesÚlenÚextendr?   ÚfxÚInterpreterrv   Úrun)rq   Úargsr�   Úarg_listÚkwarg_namess     `  r3   r†   zInterpreterModule.forward³   sÌ  ø€ ØÔÐ$Ý Ð!IÑJÔJÐJÝ%Ñ'Ô'ð %	ÝŒN×.Ò.Ñ0Ô0ð%	Ø8<Ô8Rð%	ð 3•4˜Ô)Ñ*Ô*Ô2°4ÐI¸$ÐIÐIÐIÀ&ÐIÐIÐIàñ 'õ
   ™:œ:�Ø"œn­S°©]¬]¨_¨_Ô=�Ø—’ð  ð  ð  ð  à&1ð ñ  ô  ñ ô ð õ �{Ñ#Ô#¥s¨6¡{¤{Ò2Ð2Ý(Øk­c°+Ñ.>Ô.>ÐkÐkÕ^aÐbhÑ^iÔ^iÐkÐkñô ð õ �x‘=”=¥C¨¬Ñ$7Ô$7Ò7Ð7Ý(Øp­3¨x©=¬=ÐpÐpÕ[^Ð_cÔ_mÑ[nÔ[nÐpÐpñô ð õ ˜X‘”�å”8×'Ò'¨°D´JÐ'Ñ?Ô?ÔCØðØ,1ðð ð r2   c                 ó  — t           j                             | | j        ¦  «        | j        d<   | j                             ¦   «          g | _        | j        j        D ],}|j        dk    r| j         	                    |j
        ¦  «         Œ-d S )Nru   Úplaceholder)r<   r‹   ÚGraphModulerv   Ú__dict__Úlintrˆ   ÚnodesÚopÚappendrH   ©rq   Únodes     r3   ÚfinalizezInterpreterModule.finalizeÝ   sƒ   € õ ).¬×(<Ò(<¸TÀ4Ä:Ñ(NÔ(NˆŒ�nÑ%ØŒ
�ŠÑÔÐð ˆŒØ”JÔ$ð 	3ð 	3ˆDØŒw˜-Ò'Ð'Ø”×%Ò% d¤kÑ2Ô2Ð2øð	3ð 	3r2   TFc                 ó*   — t          | d||||¦  «        S )Nr    ©r   ©rq   Úprint_outputÚinclude_strideÚinclude_deviceÚcoloreds        r3   Úprint_readablez InterpreterModule.print_readableî   ó(   € õ ØØØØØØñ
ô 
ð 	
r2   rN   ©TFFF)r*   r+   r,   r;   r<   r‹   r“   r>   ÚGraphrs   rz   r†   r›   r£   Ú__classcell__©r}   s   @r3   r    r        sÆ   ø€ € € € € € ðð ð
 ”(Ô&¨Ñ-Ð-Ð-Ñ-ð
 ð	:ð 	:àŒxŒ~ð	:ð �$‰Jð	:ð 	:ð 	:ð 	:ð 	:ð 	:ð(ð (ð (ðT3ð 3ð 3ð& ØØØð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r2   r    c                   ó`   ‡ — e Zd ZdZdee         dee         fˆ fd„Zd„ Z	d„ Z
	 	 	 	 d
d	„Zˆ xZS )r!   zå
    A module that carries a sequence of InterpreterModules corresponding to
    a sequence of calls of that module. Each call to the module dispatches
    to the next InterpreterModule, and wraps back around after the last.
    ÚattrsÚcall_modulesc           	      ó"  •— t          ¦   «                              ¦   «          |st          d¦  «        ‚|d         j        | _        |D ]'}t	          | |t          |d         |¦  «        ¦  «         Œ(|d         j        | _        || _        d| _        d S )Nzcall_modules must not be emptyr   )	ry   rz   r`   r\   rX   Úgetattrrm   Ú_call_modulesÚ
_num_calls)rq   rª   r«   Úaccessorr}   s       €r3   rz   z$InterpreterModuleDispatcher.__init__  s”   ø€ Ý‰Œ×ÒÑÔÐØð 	CÝ Ð!AÑBÔBÐBØ$ QœÔ0ˆŒØð 	Hð 	HˆHÝ�D˜(¥G¨L¸¬O¸XÑ$FÔ$FÑGÔGÐGÐGØ ”?Ô&ˆŒØ)ˆÔØˆŒˆˆr2   c                 ó¬   — | j         | j                 }| j        dz   t          | j         ¦  «        z  | _        	  ||i |¤ŽS # t          $ r	 d| _        ‚ w xY w)Nr   r   )r®   r¯   r‰   Ú	Exception)rq   rŽ   r�   Úcall_modules       r3   r†   z#InterpreterModuleDispatcher.forward  sn   € ØÔ(¨¬Ô9ˆØœ?¨QÑ.µ#°dÔ6HÑ2IÔ2IÑIˆŒð	Ø�; Ð/¨Ð/Ð/Ð/øÝð 	ð 	ð 	ØˆDŒOØð	øøøs   ¸A  Á Ac                 ó   — | j         S rN   )r®   rp   s    r3   r«   z(InterpreterModuleDispatcher.call_modules  s   € ØÔ!Ð!r2   TFc                 ó`   ‡‡‡‡— ˆˆˆˆfd„| j         D ¦   «         }d                     |¦  «        S )Nc                 ó@   •— g | ]}|                      ‰‰‰‰¦  «        ‘ŒS r1   )r£   )rP   Úmodr¢   r¡   r    rŸ   s     €€€€r3   ú
<listcomp>z>InterpreterModuleDispatcher.print_readable.<locals>.<listcomp>$  sG   ø€ ð 
ð 
ð 
ð ð ×ÒØØØØñ	ô ð
ð 
ð 
r2   ú
)r®   Újoin)rq   rŸ   r    r¡   r¢   Úoutputss    ```` r3   r£   z*InterpreterModuleDispatcher.print_readable  sV   øøøø€ ð
ð 
ð 
ð 
ð 
ð 
ð 
ð Ô)ð
ñ 
ô 
ˆð �yŠy˜Ñ!Ô!Ð!r2   r¥   )r*   r+   r,   r;   rV   rs   r‡   r    rz   r†   r«   r£   r§   r¨   s   @r3   r!   r!   ÿ   sŸ   ø€ € € € € ðð ð	˜c #œhð 	°dÐ;LÔ6Mð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð"ð "ð "ð
 ØØØð"ð "ð "ð "ð "ð "ð "ð "r2   r!   c                   ó²   — e Zd ZdZej        	 	 ddej        dej        dee	         de
ee	f         dz  de	dz  dee	         fd	„¦   «         Zdee         fd
„ZdS )r   zN
    Adapts input arguments with ``input_spec`` to align ``target_spec``.
    NÚtarget_specÚ
input_specÚ
input_argsÚmetadataÚobjrn   c                 ó   — dS )z=NOTE: This adapter may mutate given ``input_args_with_path``.Nr1   )rq   r½   r¾   r¿   rÀ   rÁ   s         r3   ÚadaptzFlatArgsAdapter.adapt5  s	   € ð 	ˆr2   c                 ó   — g S )z>Returns a list of paths that are used to access the flat args.r1   rp   s    r3   Úget_flat_arg_pathsz"FlatArgsAdapter.get_flat_arg_pathsA  s   € àˆ	r2   )NN)r*   r+   r,   r;   ÚabcÚabstractmethodÚpytreeÚTreeSpecr‡   r	   Údictrs   rÃ   rÅ   r1   r2   r3   r   r   0  sÅ   € € € € € ðð ð 	Ôð +/Øð	ð 	à”_ð	ð ”Oð	ð ˜”Ið		ð
 �s˜C�x”. 4Ñ'ð	ð �4‰Zð	ð 
ˆcŒð	ð 	ð 	ñ Ôð	ð D¨¤Ið ð ð ð ð ð r2   r   c                   óf   ‡ — e Zd Z	 ddededz  fˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Z	 	 	 	 dd„Zˆ xZS )r"   NÚexport_moduleÚflat_args_adapterc           	      óÒ  •‡'‡(— t          ¦   «                              ¦   «          |j        j        �t	          d¦  «        ‚d„ }d„ |j        D ¦   «         }|d         dk    rt          d|d         ›�¦  «        ‚t          |j        ¦  «        }t          |j        ¦  «        | _        t          j
                             ¦   «         | _        | | j        _        t          |j        ¦  «        | _        || _        |j        j        | _        | | j        d<   d| _        t"          | _        t'          || j        ¦  «         t)          |¦  «         t+          |¦  «        | _        t/          ¦   «         | _        t3          || ¦  «        \  }}| j                             |                     ¦   «         ¦  «         t9          |j        | |¦  «         |j        | _        g | _        |j         }tC          ¦   «         }	i }
| j        j"        D ]œ}||         } ||¦  «        |
vrDt          j#         $                    | %                    ¦   «         |j&        ¬	¦  «        |
 ||¦  «        <   tO          |
 ||¦  «                 | |tP          j)        ¬
¦  «         |	 *                    |¦  «         Œ�tC          | j        j+        ¦  «        }tC          ¦   «         }i }| j        j,        D ]—}||v rd}|j-        |         }n
d}||         } ||¦  «        |vr"| %                    ¦   «         |f| ||¦  «        <   tO          | ||¦  «                 d         | |tP          j.        |¬¦  «         | *                    |¦  «         Œ˜| /                    ¦   «         D ]Ø\  }}||	v s||v rŒd} ||¦  «        |v sta          |t          j#        j$        ¦  «        sd}|rQ ||¦  «        |vr|df| ||¦  «        <   tO          | ||¦  «                 d         | |tP          j.        d¬¦  «         Œ‘ ||¦  «        |
vr||
 ||¦  «        <   tO          |
 ||¦  «                 | |tP          j)        ¬
¦  «         ŒÙi }|j-         /                    ¦   «         D ]|\  }} ||¦  «        |vr<ta          |t          j1        ¦  «        r| %                    ¦   «         }|| ||¦  «        <   | ||¦  «                 }tO          || |tP          j2        ¬
¦  «         Œ}tg          th          ¦  «        Š'tC          ¦   «         }ˆ'fd„}tC          ¦   «         }| j        j5        D �]2}|j6        tn          j)        k    s|j6        tn          j.        k    ré|j8        râts          |j:        d¦  «        s$t          dtw          |j:        ¦  «        › �¦  «        ‚ta          |j<        tz          ¦  «        s$t          dtw          |j<        ¦  «        › �¦  «        ‚ | ||j         |j<                 ¦  «        |j:        j>        |j<        ¦  «         | *                    |j<        ¦  «         | *                    |j<        ¦  «         �Œ|j6        tn          j.        k    r|j8        r*|j6        tn          j?        k    s|j6        tn          j@        k    rÖts          |j:        d¦  «        s,t          d|j6        › dtw          |j:        ¦  «        › �¦  «        ‚ta          |j<        tz          ¦  «        s,t          d|j6        › dtw          |j<        ¦  «        › �¦  «        ‚ | ||j-        |j<                 ¦  «        |j:        j>        |j<        ¦  «         | *                    |j<        ¦  «         �Œ4|j-         /                    ¦   «         D ]c\  }}||vrZ ||¦  «        }|‰'vrt          d|›d�¦  «        ‚‰'|         d         \  }}  ||||¦  «         | *                    |j<        ¦  «         Œd|j          /                    ¦   «         D ]7\  }}||vr. ||¦  «        }!|!‰'vrŒ‰'|!         d         \  }}  ||!||¦  «         Œ8i }"‰'                     ¦   «         D ]}#d„ |#D ¦   «         }$|#D ]
\  }%} |$|"|%<   ŒŒtƒ          | |"g ¦  «         t…          |                     ¦   «         ¦  «        Š(ˆ(fd„|D ¦   «         }|  C                    ‰(|¦  «         d„ |D ¦   «         }d„ | j        jD        D ¦   «         | _E        d| _F        d„ t�          |¦  «        D ¦   «         }&|  H                    d¬¦  «        D ]\  }} ||&vrt“          |&¦  «        |&|<   Œt•          | |&¦  «         | j         K                    ¦   «          |  L                    ¦   «          d S )Nz%Unflattening on JointExportModule NYIc                 ó
  — t          | t          j        ¦  «        r[t          |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         ¬¦  «        S t          | ¦  «        S )z8Returns _TensorID dataclass for tensors, otherwise id().)r7   r8   r9   r:   )	r^   r<   rc   r6   r7   r8   r9   r:   Úid)rÁ   s    r3   Ú_idz'UnflattenedModule.__init__.<locals>._idP  sn   € å˜#�uœ|Ñ,Ô,ð Ý Ø$'×$7Ò$7Ñ$9Ô$9ØŸ:š:™<œ<ØŸš™œØ#&×#5Ò#5Ñ#7Ô#7ð	ñ ô ð õ �c‘7”7ˆNr2   c                 ó   — g | ]	}|j         ‘Œ
S r1   )Úfqn©rP   Úentrys     r3   r¸   z.UnflattenedModule.__init__.<locals>.<listcomp>[  s   € ÐKÐKÐK %�E”IÐKÐKÐKr2   r   Ú z+expected first fqn to be empty string, got Úunflattened_moduleF)Úrequires_grad)rI   T)rI   rJ   c                 óF   •— ‰|          }|                      ||f¦  «         d S rN   )r˜   )Úobj_idÚ	node_nameÚtarget_nameÚ	name_listÚ
consts_maps       €r3   Úadd_to_consts_mapz5UnflattenedModule.__init__.<locals>.add_to_consts_mapí  s,   ø€ Ø" 6Ô*ˆIØ×Ò˜i¨Ð5Ñ6Ô6Ð6Ð6Ð6r2   Únamez-expected s.arg to have 'name' attribute, got z!expected s.target to be str, got z1expected s.arg to have 'name' attribute for kind z, got z%expected s.target to be str for kind z	constant z id not found in consts_mapc                 ó   — g | ]
}|d          ‘ŒS ©r   r1   )rP   Úts     r3   r¸   z.UnflattenedModule.__init__.<locals>.<listcomp>7  s   € Ð1Ð1Ð1 �q˜”tÐ1Ð1Ð1r2   c                 ó   •— g | ]}|‰v¯|‘Œ	S r1   r1   )rP   rÓ   Úredirected_call_indicess     €r3   r¸   z.UnflattenedModule.__init__.<locals>.<listcomp>>  s$   ø€ ÐRÐRÐR˜C¨sÐ:QÐ/QÐ/Q�CÐ/QÐ/QÐ/Qr2   c                 ó   — g | ]}d |v¯|‘Œ	S )ú@r1   )rP   rÓ   s     r3   r¸   z.UnflattenedModule.__init__.<locals>.<listcomp>A  s   € Ð>Ð>Ð>˜C¨s¸#¨~¨~�C¨~¨~¨~r2   c                 ó(   — g | ]}|j         d k    ¯|‘ŒS ©r’   ©r—   ©rP   rš   s     r3   r¸   z.UnflattenedModule.__init__.<locals>.<listcomp>F  s+   € ð #
ð #
ð #
Ø°´¸MÒ1IÐ1IˆDÐ1IÐ1IÐ1Ir2   c                 ó   — i | ]\  }}||“Œ	S r1   r1   )rP   ÚirÓ   s      r3   ú
<dictcomp>z.UnflattenedModule.__init__.<locals>.<dictcomp>K  s   € Ð>Ð>Ð>¡  3�S˜!Ð>Ð>Ð>r2   ©Úremove_duplicate)Mry   rz   Úgraph_signatureÚbackward_signatureÚ
ValueErrorÚmodule_call_graphr`   r   rv   r<   r‹   r¦   r{   rÍ   ru   ÚmetaÚadaptedrC   r|   Ú#_inplace_buffer_and_input_mutationsÚ_fix_nn_module_stacksÚ_root_module_typerm   Ú_IValsÚivalsÚ_outline_submodulesr[   ÚvaluesÚ_copy_graph_attrsÚ_graph_moduleÚrange_constraintsÚequality_constraintsÚ
state_dictrV   Ú
parametersrY   r_   ÚclonerØ   rj   r%   r-   ÚaddÚnon_persistent_buffersÚbuffersÚ	constantsr.   r]   r^   rc   r/   r   r‡   Úinput_specsÚkindr   rJ   rW   Úargra   rH   rs   rà   ÚCONSTANT_TENSORÚ
CUSTOM_OBJÚ_sink_paramsÚ_deduplicate_modulesÚ_dispatch_modulesr–   Úinput_placeholdersÚcheck_input_constraintsÚ	enumerateÚnamed_modulesr‰   Ú_reorder_submodulesr•   r›   )*rq   rÌ   rÍ   rÑ   Úfqn_listÚexport_graphÚseen_modulesÚ
seen_attrsr  Úassigned_paramsÚid_to_paramrà   Úparamr  Úassigned_buffersÚid_to_bufferrJ   r'   ÚtensorÚ	is_bufferÚid_to_constrÓ   r(   Ú	_constantÚconsts_targetsrß   Úadded_params_buffersÚsÚ
const_nameÚconstÚconst_idÚph_nameÚ_Ú	tensor_idÚinputs_to_stateÚnode_targetÚtargetsÚnÚ	fqn_orderrÞ   rå   r}   s*                                          @@€r3   rz   zUnflattenedModule.__init__G  s‘
  øøø€ õ
 	‰Œ×ÒÑÔÐØÔ(Ô;ÐGÝÐDÑEÔEÐEð		ð 		ð 		ð LÐK¨=Ô+JÐKÑKÔKˆØ�AŒ;˜"ÒÐÝ ØM¸hÀq¼kÐMÐMñô ð õ   Ô 3Ñ4Ô4ˆÝ'¨Ô(EÑFÔFˆÔÝ”X—^’^Ñ%Ô%ˆŒ
Ø#'ˆŒ
Ô Ý!)¨-Ô*IÑ!JÔ!JˆÔØ!2ˆÔà!Ô.Ô3ˆŒ	Ø*.ˆŒ	Ð&Ñ'ð ˆŒÝ%9ˆÔ"å+¨L¸$Ô:NÑOÔOÐOÝ˜lÑ+Ô+Ð+Ý$ \Ñ2Ô2ˆŒå‘X”XˆŒ
å#6°|ÀTÑ#JÔ#JÑ ˆ�jð 	Œ
×Ò˜,×-Ò-Ñ/Ô/Ñ0Ô0Ð0õ 	˜-Ô5°t¸ZÑHÔHÐHà!.Ô!@ˆÔØ*,ˆÔ!ð #Ô-ˆ
Ý$'¡E¤Eˆð ð 	ð Ô(Ô3ð 	&ð 	&ˆDØ˜tÔ$ˆEØˆs�5‰zŒz Ð,Ð,Ý*/¬(×*<Ò*<Ø—K’K‘M”M°Ô1Dð +=ñ +ô +�˜C˜C ™JœJÑ'õ Ø˜C˜C ™JœJÔ'ØØÝ#Ô-ð	ñ ô ð ð ×Ò Ñ%Ô%Ð%Ð%å!$ TÔ%9Ô%PÑ!QÔ!QÐÝ%(¡U¤UÐØOQˆØÔ(Ô0ð 	'ð 	'ˆDØÐ-Ð-Ð-Ø"�
Ø&Ô0°Ô6��à!�
Ø# DÔ)�àˆs�6‰{Œ{ ,Ð.Ð.Ø-3¯\ª\©^¬^¸ZÐ,H�˜S˜S ™[œ[Ñ)åØ˜S˜S ™[œ[Ô)¨!Ô,ØØÝ#Ô*Ø%ðñ ô ð ð × Ò  Ñ&Ô&Ð&Ð&ð '×,Ò,Ñ.Ô.ð !	ð !	‰LˆD�&Ø�Ð&Ð&¨$Ð2BÐ*BÐ*BØàˆIØˆs�6‰{Œ{˜lÐ*Ð*µ*Ø�œÔ*ñ3ô 3Ð*ð !�	àð à�C˜‘K”K |Ð3Ð3ð Øð1�L   V¡¤Ñ-õ Ø    V¡¤Ô-¨aÔ0ØØÝ'Ô.Ø#ðñ ô ð ð ð �3�v‘;”; kÐ1Ð1Ø/5�K   F¡¤Ñ,ÝØ   F¡¤Ô,ØØÝ'Ô1ð	ñ ô ð ð ð TVˆØ*Ô4×:Ò:Ñ<Ô<ð 	ð 	‰MˆC�Øˆs�8‰}Œ} KÐ/Ð/Ý˜h­¬Ñ5Ô5ð 0Ø'Ÿ~š~Ñ/Ô/�HØ-5�˜C˜C ™MœMÑ*Ø# C C¨¡M¤MÔ2ˆIÝØØØÝ#Ô,ð	ñ ô ð ð õ DOÍtÑCTÔCTˆ
Ý#&¡5¤5ˆð	7ð 	7ð 	7ð 	7ð 	7õ *-©¬ÐØÔ%Ô1ð &	-ñ &	-ˆAØŒv�Ô,Ò,Ð,Ø”�)Ô*Ò*Ð*¨q¬|Ð*å˜qœu fÑ-Ô-ð Ý(ØUÍÈQÌUÉÌÐUÐUñô ð õ " !¤(­CÑ0Ô0ð Ý(ØL½DÀÄ¹N¼NÐLÐLñô ð ð "Ð!Ø�C˜Ô0°´Ô:Ñ;Ô;Ø”E”JØ”Hñô ð ð
 ×"Ò" 1¤8Ñ,Ô,Ð,Ø$×(Ò(¨¬Ñ2Ô2Ð2Ñ2à”�)Ô*Ò*Ð*Øœð +à”6�YÔ6Ò6Ð6Ø”6�YÔ1Ò1Ð1å˜qœu fÑ-Ô-ð Ý(ØgÈAÌFÐgÐgÕZ^Ð_`Ô_dÑZeÔZeÐgÐgñô ð õ " !¤(­CÑ0Ô0ð Ý(Ø^ÀÄÐ^Ð^ÍdÐSTÔS[ÉnÌnÐ^Ð^ñô ð ð "Ð!Ø�C˜Ô/°´Ô9Ñ:Ô:Ø”E”JØ”Hñô ð ð
 ×"Ò" 1¤8Ñ,Ô,Ð,ùð "/Ô!8×!>Ò!>Ñ!@Ô!@ð 		3ð 		3ÑˆJ˜Ø Ð/Ð/Ø˜3˜u™:œ:�Ø :Ð-Ð-Ý(ØM JÐMÐMÐMñô ð ð (¨Ô1°!Ô4‘
�˜Ø!Ð! (¨G°ZÑ@Ô@Ð@Ø$×(Ò(¨¬Ñ2Ô2Ð2øð )Ô3×9Ò9Ñ;Ô;ð 		;ð 		;‰KˆC�ØÐ.Ð.Ð.Ø˜C ™KœK�	Ø JÐ.Ð.ð Ø'¨	Ô2°1Ô5‘
�˜Ø!Ð! )¨W°cÑ:Ô:Ð:øð 13ˆØ%×,Ò,Ñ.Ô.ð 	-ð 	-ˆKØ1Ð1 [Ð1Ñ1Ô1ˆGØ#ð -ð -‘��1Ø%,� Ñ"Ð"ð-õ 	�T˜?¨BÑ/Ô/Ð/å"6°|×7JÒ7JÑ7LÔ7LÑ"MÔ"MÐØRÐRÐRÐR 8ÐRÑRÔRˆà×ÒÐ6¸ÑGÔGÐGØ>Ð> 8Ð>Ñ>Ô>ˆð
#
ð #
Ø!œZÔ-ð#
ñ #
ô #
ˆÔð (,ˆÔ$à>Ð>­)°HÑ*=Ô*=Ð>Ñ>Ô>ˆ	à×)Ò)¸5Ð)ÑAÔAð 	1ð 	1‰GˆD�!Ø˜9Ð$Ð$Ý"% i¡.¤.�	˜$‘øÝ˜D )Ñ,Ô,Ð,ØŒ
�ŠÑÔÐØ�Š‰Œˆˆˆr2   c                 óî   — |                       ¦   «         D ]_\  }}t          |dz   ¦  «         t          |d¦  «        r8t          |j        t
          j        j        ¦  «        rt          |j        ¦  «         Œ`d S )Nú:rv   )r  ÚprintrW   r^   rv   r<   r‹   r¦   )rq   rÓ   r·   s      r3   Ú_print_graphzUnflattenedModule._print_graphT  sw   € Ø×*Ò*Ñ,Ô,ð 	!ð 	!‰HˆC�Ý�#˜‘)ÑÔÐÝ�s˜GÑ$Ô$ð !­°C´I½u¼x¼~Ñ)NÔ)Nð !Ý�c”iÑ Ô Ð øð	!ð 	!r2   c                 óT  — | j         d         j        }||j        k    r|S | j        €t	          d¦  «        ‚| j                             |j        ||| j        |¬¦  «        }t          |¦  «        |j        j        k    r,t	          dt          |¦  «        › d|j        j        › �¦  «        ‚|S )Nr   zeThere is no flat args adapter specified. Are you sure you are calling this with the right arguments? )r½   r¾   r¿   rÀ   rÁ   z<Flat args adaption failed, number of args mismatch Adapted: z 
Exported module: )	rô   Ú	signatureÚin_specrÍ   Ú	TypeErrorrÃ   rõ   r‰   Ú
num_leaves)rq   Ú	flat_argsr7  Úinputr6  s        r3   Ú_adapt_flat_argsz"UnflattenedModule._adapt_flat_argsZ  sÝ   € ØÔ*¨1Ô-Ô7ˆ	Ø�iÔ'Ò'Ð'ØÐàÔ!Ð)ÝðOñô ð ð
 Ô.×4Ò4Ø%Ô-Ø"Ø$ØœØð 5ñ ô ˆIõ �9‰~Œ~ Ô!2Ô!=Ò=Ð=ÝðGÝ # I¡¤ðGð Gà(1Ô(9Ô(DðGð Gñô ð ð
 Ðr2   c                 óú  ‡
— | j         d         j        }|}|rt          ||j        ¦  «        }t	          j        ||f¦  «        \  }}d„ |D ¦   «         }t          ¦   «         r|S ||j        k    rP| j        s+t          d|› d�d|j        › �¦  «         t          d¦  «         |  	                    |||¦  «        }d| _        | j
        r·ddlm} | j        du r�| j        r| j                             ¦   «         ng Š
‰
rOt          ‰
¦  «        t          |¦  «        k    r/t!          d	t          ‰
¦  «        › d
t          |¦  «        › �¦  «        ‚ˆ
fd„t#          |¦  «        D ¦   «         }	n|}	 || j        |	| j        ¦  «         |S )Nr   c                 ó   — g | ]
}|d          ‘ŒS râ   r1   ©rP   Úxs     r3   r¸   z<UnflattenedModule.process_forward_inputs.<locals>.<listcomp>  s   € Ð7Ð7Ð7˜a�Q�q”TÐ7Ð7Ð7r2   zGInput treespec does not match with exported module's: 
Input treespec: z. zExported module treespec: z5Adapting flat arg to match exported module's treespecT)Ú"_check_input_constraints_for_graphzflat_arg_paths length z! does not match flat_args length c                 ón   •— g | ]1\  }}t          |¬ ¦  «        t          ‰r‰|         nd¬¦  «        f|f‘Œ2S ))Úidxz<unknown location>©rà   )r   r   )rP   rC  r  Úflat_arg_pathss      €r3   r¸   z<UnflattenedModule.process_forward_inputs.<locals>.<listcomp>ž  sp   ø€ ð +ð +ð +ñ !˜˜Sõ (¨CÐ0Ñ0Ô0Ý&à#1ð&: ^°CÔ%8Ð%8à%9ðñ ô ðð ð
ð+ð +ð +r2   )rô   r6  r   r7  rÈ   Útree_flatten_with_pathr   rö   r3  r<  r  Útorch._export.utilsrA  rÍ   rÅ   r‰   r`   r  r  r   )rq   rŽ   r�   r6  Úreordered_kwargsÚflat_args_with_pathr7  r:  rA  Únew_flat_args_with_pathrE  s             @r3   Úprocess_forward_inputsz(UnflattenedModule.process_forward_inputsu  s  ø€ ØÔ*¨1Ô-Ô7ˆ	à!ÐØð 	IÝ-¨f°iÔ6GÑHÔHÐå'-Ô'DØÐ#Ð$ñ(
ô (
Ñ$Ð˜Wð 8Ð7Ð#6Ð7Ñ7Ô7ˆ	å!Ñ#Ô#ð 	ØÐà�iÔ'Ò'Ð'Ø”<ð OÝð3Ø'.ð3ð 3ð 3àD°Ô1BÐDÐDñô ð õ
 ÐMÑNÔNÐNØ×-Ò-¨i¸À$ÑGÔGˆIØˆDŒLàÔ'ð "	ð OÐNÐNÐNÐNÐNàŒ|˜tÐ#Ð#ð Ô-ð�DÔ*×=Ò=Ñ?Ô?Ð?àð ð
 "ð ¥c¨.Ñ&9Ô&9½SÀ¹^¼^Ò&KÐ&KÝ(Øwµ°^Ñ1DÔ1DÐwÐwÕgjÐktÑguÔguÐwÐwñô ð ð+ð +ð +ð +õ %.¨iÑ$8Ô$8ð+ñ +ô +Ð'Ð'ð +>Ð'à.Ð.ØÔ'Ð)@À$ÔBXñô ð ð Ðr2   c                 ó@  —  | j         |i |¤Ž}| j        d         j        }t          ¦   «         rbt	          j                             | | j        ¬¦  «        j        |ddiŽ}t          |t          ¦  «        rt          |¦  «        dk    r|d         S |S t          j                             ¦   «         s| j        s! t          | j        ¦  «        j        | g|¢R Ž }n0t	          j                             | | j        ¬¦  «        j        |ddiŽ}t%          j        ||j        ¦  «        S )Nr   r‚   rƒ   Fr   )rK  rô   r6  r   r<   r‹   rŒ   rv   r�   r^   r?   r‰   r„   r…   r|   ra   ru   r†   rÈ   Útree_unflattenÚout_spec)rq   rŽ   r�   r:  r6  Ú
return_valÚtree_outs          r3   r†   zUnflattenedModule.forwardµ  s2  € Ø/�DÔ/°Ð@¸Ð@Ð@ˆ	ØÔ*¨1Ô-Ô7ˆ	å!Ñ#Ô#ð 	Ýœ×-Ò-¨d¸$¼*Ð-ÑEÔEÔIØðØ16ðð ˆJõ ˜*¥eÑ,Ô,ð %µ°Z±´ÀAÒ1EÐ1EØ! !”}Ð$ØÐåŒ>×-Ò-Ñ/Ô/ð 	°tÔ7Qð 	Ø6•t˜DÔ-Ñ.Ô.Ô6°tÐH¸iÐHÐHÐHˆHˆHå”x×+Ò+¨D¸¼
Ð+ÑCÔCÔGØðØ16ðð ˆHõ Ô$ X¨yÔ/AÑBÔBÐBr2   c                 ó’   — t           j                             | | j        ¦  «        | j        d<   | j                             ¦   «          d S )Nru   )r<   r‹   r“   rv   r”   r•   rp   s    r3   r›   zUnflattenedModule.finalizeÊ  s:   € Ý(-¬×(<Ò(<¸TÀ4Ä:Ñ(NÔ(NˆŒ�nÑ%ØŒ
�ŠÑÔÐÐÐr2   c                 ó*  ‡— t          t          ¦  «        Š| j        D ]…}|j        r||j        ru|j        }t          | |                     ||¦  «        ¦  «        }d|v r|                     d¦  «        n|dg\  }}‰|                              t          |¦  «        |f¦  «         Œ†t          t          ¦  «        }|D ]V}	d|	v r5|	                     dd¦  «        \  }
}||
                              |¦  «         Œ;|d                              |	¦  «         ŒW‰                     ¦   «         D ]Ñ\  }
}d„ t          |¦  «        D ¦   «         }t          |¦  «        dk    r t!          t          |¦  «        ¦  «        D ]Y}t#          |
|dz   ¦  «        }||vr@|                     d¦  «        �^ }}t%          | |¦  «        j                             |¦  «         ŒZ|                      |
t-          ||
         |¦  «        ¦  «         ŒÒˆfd„}|                      d¬	¦  «        D ]�\  }}t1          |d
¦  «        r |||j        ¦  «         Œ't1          |d¦  «        rJ|j        D ]B}t1          |d
¦  «        st7          dt9          |¦  «        › �¦  «        ‚ |||j        ¦  «         ŒCŒ‚dS )zÔFor a module whose call signatures are preserved, replace
        multiple modules corresponding to multiple calls to that module
        with a single dispatcher module that tracks which module to call.
        rç   Ú0rL   r   rÖ   c                 ó   — g | ]\  }}|‘ŒS r1   r1   )rP   r*  r·   s      r3   r¸   z7UnflattenedModule._dispatch_modules.<locals>.<listcomp>ê  s   € ÐKÐKÐK¡F A s˜CÐKÐKÐKr2   c                 óž   •— |j         D ]C}|j        dk    r6|j                             d¦  «        d         }| r| › d|› �n|}|‰v r||_        ŒDd S )Nr³   rç   r   rL   )r–   r—   rH   rU   )rf   rv   rš   rÓ   ÚpathÚcalled_moduless        €r3   Úelide_call_indicesz?UnflattenedModule._dispatch_modules.<locals>.elide_call_indicesø  su   ø€ Øœð *ð *�Ø”7˜mÒ+Ð+Øœ+×+Ò+¨CÑ0Ô0°Ô3�CØ06Ð?˜fÐ,Ð, sÐ,Ð,Ð,¸C�DØ˜~Ð-Ð-Ø&)˜œøð*ð *r2   Frï   rv   r®   z-expected mod_ to have 'graph' attribute, got N)r   r‡   rô   rÓ   r6  r   ÚgetrU   r˜   r@   rV   Úrsplitr  r]   Úsortedr‰   ÚrangeÚ
_call_namer   r\   ÚpopÚset_submoduler!   r  rW   rv   r®   r`   ra   )rq   rå   r#  rÕ   rÓ   r·   ÚbaserC  Ú	attrs_maprH   Úorig_fqnrà   Úindexed_call_modulesr«   rí   rf   rX  Úmod_rW  s                     @r3   r  z#UnflattenedModule._dispatch_modulesÎ  s÷  ø€ õ %¥TÑ*Ô*ˆØÔ+ð 	=ð 	=ˆEØŒyð =˜Uœ_ð =ð ”i�Ý Ð&=×&AÒ&AÀ#ÀsÑ&KÔ&KÑLÔL�Ø.1°S¨j¨j˜CŸIšI c™NœN˜N¸sÀC¸j‘	��cØ˜tÔ$×+Ò+­S°©X¬X°s¨OÑ<Ô<Ð<øå¥Ñ$Ô$ˆ	Ø$ð 	*ð 	*ˆFØ�fˆ}ˆ}Ø!'§¢¨s°AÑ!6Ô!6‘�˜$Ø˜(Ô#×'Ò'¨Ñ-Ô-Ð-Ð-à˜"”×!Ò! &Ñ)Ô)Ð)Ð)ð /=×.BÒ.BÑ.DÔ.Dð 	ð 	Ñ*ˆHÐ*ØKÐK­fÐ5IÑ.JÔ.JÐKÑKÔKˆLÝ�<Ñ Ô  1Ò$Ð$Ý�s <Ñ0Ô0Ñ1Ô1ð Qð Q�AÝ$ X¨q°1©uÑ5Ô5�CØÐ"9Ð9Ð9Ø(+¯	ª	°#©¬™˜ Ý/°°fÑ=Ô=ÔF×JÒJÈ4ÑPÔPÐPøØ×"Ò"ØÝ/°	¸(Ô0CÀ\ÑRÔRñô ð øð	*ð 	*ð 	*ð 	*ð 	*ð ×*Ò*¸EÐ*ÑBÔBð 		8ð 		8‰HˆC�Ý�s˜GÑ$Ô$ð 8Ø"Ð" 3¨¬	Ñ2Ô2Ð2Ð2Ý˜˜oÑ.Ô.ð 8ØÔ-ð 8ð 8�DÝ" 4¨Ñ1Ô1ð Ý,ØXÍDÐQUÉJÌJÐXÐXñô ð ð 'Ð& s¨D¬JÑ7Ô7Ð7Ð7øð		8ð 		8r2   TFc                 ó*   — t          | d||||¦  «        S )Nr"   r�   rž   s        r3   r£   z UnflattenedModule.print_readable  r¤   r2   rN   r¥   )r*   r+   r,   r   r   rz   r4  r<  rK  r†   r›   r  r£   r§   r¨   s   @r3   r"   r"   F  sé   ø€ € € € € ð 59ðKð Kà&ðKð +¨TÑ1ðKð Kð Kð Kð Kð KðZ!ð !ð !ðð ð ð6>ð >ð >ð@Cð Cð Cð*ð ð ð;8ð ;8ð ;8ð~ ØØØð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r2   r"   r)   rÍ   rn   c                 óœ   — t          | ¦  «        } t          | |¦  «        }t          j                             |j        dd¬¦  «        |_        |S )aý  Unflatten an ExportedProgram, producing a module with the same module
    hierarchy as the original eager module. This can be useful if you are trying
    to use :mod:`torch.export` with another system that expects a module
    hierarchy instead of the flat graph that :mod:`torch.export` usually produces.

    .. note:: The args/kwargs of unflattened modules will not necessarily match
        the eager module, so doing a module swap (e.g. :code:`self.submod =
        new_mod`) will not necessarily work. If you need to swap a module out, you
        need to set the :code:`preserve_module_call_signature` parameter of
        :func:`torch.export.export`.

    Args:
        module (ExportedProgram): The ExportedProgram to unflatten.
        flat_args_adapter (Optional[FlatArgsAdapter]): Adapt flat args if input TreeSpec does not match with exported module's.

    Returns:
        An instance of :class:`UnflattenedModule`, which has the same module
        hierarchy as the original eager module pre-export.
    z*do not trace into preprocessing the inputsT)ÚreasonÚ	recursive)r   r"   r<   Ú_dynamoÚdisablerK  )r)   rÍ   Úms      r3   r#   r#     sU   € õ, # 6Ñ*Ô*€FÝ˜&Ð"3Ñ4Ô4€Aõ  %œ}×4Ò4Ø	Ô Ø;Øð  5ñ  ô  €AÔð €Hr2   rv   rñ   c                 óî  ‡‡— t          t          t          | j        ¦  «        ¦  «        ¦  «        }|j        dk    st          |j        ¦  «        dk    r-t          d|j        ›dt          |j        ¦  «        › d�¦  «        ‚|j        d         }d„ | j        D ¦   «         }i }d„ |j         	                    ¦   «         D ¦   «         Šˆfd	„|j
         	                    ¦   «         D ¦   «         }|                     |j        ¦  «         t          |¦  «        }|d
|…         D ]¹}||j                 }||         }	|                      |¦  «        5  |                      dt           j        j        j        j        |	|f¦  «        Š|j         	                    ¦   «         D ]\  }
}|‰j        |
<   Œ	 d
d
d
¦  «         n# 1 swxY w Y   |                     ‰ˆfd„¦  «         Œºt/          ||d
…         ¦  «        }|f|_        d
S )a^  Transform buffer and input mutations from their functionalized form
    into copy_ nodes in the graph.

    Functionalization represents a buffer mutation by passing the buffer as
    an input and output. For example, consider the eager code:
        def forward(self, x):
            self.buffer += x
            return x * x

    This corresponds to a graph that looks like:
        def forward(self, buffer, x):
            mutated_buffer = aten.add(buffer, x)
            mul = aten.mul(x, x)
            return (mutated_buffer, mul)

    We want to inplace this into something that looks like the original
    eager code:
        def forward(self, buffer, x):
            mutated_buffer = aten.add(buffer, x)
            buffer.copy_(mutated_buffer)
            mul = aten.mul(x, x)
            return (mul,)

    Input mutations are handled similarly.
    Úoutputr   z8expected output node with op='output' and 1 arg, got op=z with z argsr   c                 ó4   — i | ]}|j         d k    ¯|j        |“ŒS ré   )r—   rà   rë   s     r3   rî   z7_inplace_buffer_and_input_mutations.<locals>.<dictcomp>d  s/   € ð ð ð Ø °4´7¸mÒ3KÐ3KˆŒ	�4Ð3KÐ3KÐ3Kr2   c                 ó   — i | ]\  }}||“Œ	S r1   r1   )rP   rQ   Ú
buffer_fqns      r3   rî   z7_inplace_buffer_and_input_mutations.<locals>.<dictcomp>j  s+   € ð  ð  ð  Ù'˜!˜Zˆ
�Að ð  ð  r2   c                 ó(   •— i | ]\  }}|‰|         “ŒS r1   r1   )rP   rQ   rp  Úbuffer_fqn_to_input_names      €r3   rî   z7_inplace_buffer_and_input_mutations.<locals>.<dictcomp>m  s5   ø€ ð #ð #ð #áˆAˆzð 	
Ð# JÔ/ð#ð #ð #r2   NÚcall_functionc                 ó   •— | ‰uS rN   r1   )r@  Únew_nodes    €r3   ú<lambda>z5_inplace_buffer_and_input_mutations.<locals>.<lambda>ƒ  s   ø€ ¸1ÀHÐ;L€ r2   )ÚnextÚiterÚreversedr–   r—   r‰   rŽ   r`   Úinputs_to_buffersr]   Úbuffers_to_mutater[   Úuser_inputs_to_mutaterà   Úinserting_afterÚcreate_noder<   ÚopsÚatenÚcopy_Údefaultrõ   Úreplace_all_uses_withr?   )rv   rñ   Úoutput_nodeÚreturn_argsÚinput_name_to_nodeÚmutation_name_to_input_nameÚnum_mutationsÚmutationÚ
input_nameÚ
input_noderQ   ÚvÚuser_outputsrr  ru  s                @@r3   r÷   r÷   @  sŒ  øø€ õ: •t�H U¤[Ñ1Ô1Ñ2Ô2Ñ3Ô3€KØ„~˜Ò!Ð!¥S¨Ô)9Ñ%:Ô%:¸aÒ%?Ð%?ÝØ{À{Ä~Ð{Ð{Õ_bÐcnÔcsÑ_tÔ_tÐ{Ð{Ð{ñ
ô 
ð 	
ð Ô" 1Ô%€Kðð Ø$)¤Kðñ ô Ðð #%Ðð ð  Ø+:Ô+L×+RÒ+RÑ+TÔ+Tð ñ  ô  Ðð#ð #ð #ð #à,Ô>×DÒDÑFÔFð#ñ #ô #Ðð
  ×&Ò& Ô'LÑMÔMÐMåÐ3Ñ4Ô4€Mà   Ô/ð Nð NˆØ0°´Ô?ˆ
Ø'¨
Ô3ˆ
à×"Ò" 8Ñ,Ô,ð 	%ð 	%à×(Ò(Ø¥¤¤Ô!5Ô!=À
ÈHÐ?Uñô ˆHð !œ×+Ò+Ñ-Ô-ð %ð %‘��1Ø#$�”˜aÑ Ð ð%ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	×&Ò& xÐ1LÐ1LÐ1LÐ1LÑMÔMÐMÐMõ ˜ ] ^ ^Ô4Ñ5Ô5€LØ%Ð(€KÔÐÐs   ÅAF1Æ1F5	Æ8F5	c                 óˆ   — | j         D ]9}d|j        vrŒ|j        d                              ¦   «         D ]\  }}|s|c c S ŒŒ:d S )NÚnn_module_stack)r–   rõ   rý   )rv   rš   rV  rw   s       r3   rù   rù   ‹  sp   € Ø”ð ð ˆØ D¤IÐ-Ð-Øàœ	Ð"3Ô4×;Ò;Ñ=Ô=ð 	ð 	‰HˆD�"Øð Ø�	�	�	�	�	ðð	ð ˆ4r2   c           	      óÆ  — | j         D ]Ø}d|j        vrŒ|j        d         }d„ |                     ¦   «         D ¦   «         }|^}}d}|D ]}t          ||¦  «        r|dz  }|}Œ |t	          |¦  «        k     rkt
                               d||t	          |¦  «        |z
  ¦  «         t          t          | 	                    ¦   «         ¦  «        d |…         ¦  «        |j        d<   ŒÙd S )Nr�  c                 óV   — g | ]&\  }}d |v r|                      d ¦  «        d         n|‘Œ'S ©rç   r   ©rU   )rP   rÓ   Ú_ts      r3   r¸   z)_fix_nn_module_stacks.<locals>.<listcomp>Ÿ  sH   € ð 
ð 
ð 
á��Rð "%¨  ˆC�IŠI�c‰NŒN˜1ÔÐ°ð
ð 
ð 
r2   r   zPnn_module_stack fqns %s at node %s do not form a stack! dropping last %d entries)
r–   rõ   rý   Ú
_is_prefixr‰   ÚlogÚwarningrÊ   r‡   r]   )rv   rš   r�  ÚfqnsÚprev_fqnÚ	next_fqnsÚnum_valid_indicesÚcurr_fqns           r3   rø   rø   –  s2  € ð ”ð  ð  ˆØ D¤IÐ-Ð-Øàœ)Ð$5Ô6ˆð
ð 
à*×1Ò1Ñ3Ô3ð
ñ 
ô 
ˆð  $Ðˆ�9ØÐØ!ð 	ð 	ˆHå˜( HÑ-Ô-ð Ø! QÑ&Ð!Ø#��ð ð �s ?Ñ3Ô3Ò3Ð3Ý�KŠKØbØØÝ�OÑ$Ô$Ð'8Ñ8ñ	ô ð õ ,0Ý�_×*Ò*Ñ,Ô,Ñ-Ô-Ð.@Ð/@Ð.@ÔAñ,ô ,ˆDŒIÐ'Ñ(øð= ð  r2   c                 óx   — t          | ¦  «        t          |¦  «        k     o|dt          | ¦  «        …         | k    S )z2Check whether `candidate` is a prefix of `target`.N)r‰   )Ú	candidaterH   s     r3   r•  r•  ½  s4   € åˆy‰>Œ>�C ™KœKÒ'ÐQ¨FÐ3CµS¸±^´^Ð3CÔ,DÈ	Ò,QÐQr2   Ú
parent_fqnÚ	child_fqnc                 ó  — | dk    r|S |                       d¦  «        }|                      d¦  «        }|d t          |¦  «        …         |k    rt          d|› d| › d�¦  «        ‚d                     |t          |¦  «        d …         ¦  «        S )NrÖ   rL   zChild module 'z(' is not a descendant of parent module 'za'.This is currently unsupported.Please try to make child module attach to parent module directly.)rU   r‰   ÚRuntimeErrorrº   )rŸ  r   Úparent_splitÚchild_splits       r3   Ú_compute_accessorr¥  Â  s¹   € Ø�RÒÐàÐà×#Ò# CÑ(Ô(€LØ—/’/ #Ñ&Ô&€Kð Ð&•S˜Ñ&Ô&Ð&Ô'¨<Ò7Ð7ÝðP˜Yð Pð PÐPZð Pð Pð Pñ
ô 
ð 	
ð
 �8Š8�K¥ LÑ 1Ô 1Ð 3Ð 3Ô4Ñ5Ô5Ð5r2   r@  Úyc                 óž  — dt           j        j        dt          fd„}t	          | j        t           j        j        ¦  «        s$t          dt          | j        ¦  «        › �¦  «        ‚t	          |j        t           j        j        ¦  «        s$t          dt          |j        ¦  «        › �¦  «        ‚ || j        ¦  «         ||j        ¦  «        k    S )Nrv   rn   c                 óø  ‡— g }i Šdt           fˆfd„}t          | j        ¦  «        D ]¿\  }}d„ t          j        ||j        ¦  «        D ¦   «         }|d„ t          j        ||j        ¦  «                             ¦   «         D ¦   «         z  }|j        dv r|j	        nd}| 
                    |› d|j        › d|› d	d
                     |¦  «        › d�¦  «         |‰t          |¦  «        <   ŒÀd                     |¦  «        S )Nrn   c                 óª   •— t          | t          j        j        ¦  «        r%dt	          ‰t          | ¦  «                 ¦  «        z   S t	          | ¦  «        S )Nú%)r^   r<   r‹   ÚNoders   rÐ   )r  Ú	nodes_idxs    €r3   Úarg_dumpz>_check_graph_equivalence.<locals>.graph_dump.<locals>.arg_dumpÙ  sB   ø€ Ý˜#�uœxœ}Ñ-Ô-ð 5Ø�S ­2¨c©7¬7Ô!3Ñ4Ô4Ñ4Ð4Ý�s‘8”8ˆOr2   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r1   )rs   )rP   r  s     r3   r¸   z@_check_graph_equivalence.<locals>.graph_dump.<locals>.<listcomp>ß  s   € ÐRÐRÐR c�˜S™œÐRÐRÐRr2   c                 ó"   — g | ]\  }}|› d |› �‘ŒS )ú=r1   )rP   ÚkeyÚvalues      r3   r¸   z@_check_graph_equivalence.<locals>.graph_dump.<locals>.<listcomp>à  s:   € ð ð ð á�C˜ð Ð Ð ˜Ð Ð ðð ð r2   )rs  Úget_attrrÖ   z: ú[z](z, ú)r¹   )rs   r  r–   rÈ   Útree_maprŽ   r�   r]   r—   rH   r˜   rº   rÐ   )rv   Úretr­  rí   rš   Ú	args_dumprH   r¬  s          @r3   Ú
graph_dumpz,_check_graph_equivalence.<locals>.graph_dumpÕ  s1  ø€ ØˆØ$&ˆ	ð	�Sð 	ð 	ð 	ð 	ð 	ð 	õ
 ! ¤Ñ-Ô-ð 		$ð 		$‰GˆAˆtØRÐR­V¬_¸XÀtÄyÑ-QÔ-QÐRÑRÔRˆIØð ð å"(¤/°(¸D¼KÑ"HÔ"H×"NÒ"NÑ"PÔ"Pðñ ô ñ ˆIð %)¤GÐ/LÐ$LÐ$L�T”[�[ÐRTˆFà�JŠJ˜!ÐJÐJ˜tœwÐJÐJ¨ÐJÐJ°4·9²9¸YÑ3GÔ3GÐJÐJÐJÑKÔKÐKØ"#ˆI•b˜‘h”hÑÐØ�yŠy˜‰~Œ~Ðr2   z+expected x.graph to be torch.fx.Graph, got z+expected y.graph to be torch.fx.Graph, got )r<   r‹   r¦   rs   r^   rv   r`   ra   )r@  r¦  r¹  s      r3   Ú_check_graph_equivalencerº  Ô  sË   € ð�%œ(œ.ð ­Sð ð ð ð õ* �a”g�uœxœ~Ñ.Ô.ð 
ÝØI½$¸q¼w¹-¼-ÐIÐIñ
ô 
ð 	
õ �a”g�uœxœ~Ñ.Ô.ð 
ÝØI½$¸q¼w¹-¼-ÐIÐIñ
ô 
ð 	
ð ˆ:�a”gÑÔ * *¨Q¬WÑ"5Ô"5Ò5Ð5r2   Úgmc                 óŒ   — d}t          | d|› �¦  «        r|dz  }t          | d|› �¦  «        °d|› �}t          | ||¦  «         |S )Nr   Ú_spec_r   )rW   rX   )r»  Úspecrí   rà   s       r3   Ú	_add_specr¿  õ  sd   € Ø	€AÝ
�"�l˜q�l�lÑ
#Ô
#ð Ø	ˆQ‰ˆõ �"�l˜q�l�lÑ
#Ô
#ð à�Aˆ<ˆ<€DÝˆB��dÑÔÐØ€Kr2   c                 ó    — | j                              t          j        |f¦  «        }| j                              t          j        |df¦  «        }|S )Nr   )rv   rs  rÈ   Útree_flattenÚoperatorÚgetitem)r»  rš   ÚflattenÚ	getitem_0s       r3   Ú_generate_flattenrÆ  þ  sB   € ØŒh×$Ò$¥VÔ%8¸4¸'ÑBÔB€GØ”×&Ò&¥xÔ'7¸'À1¸ÑFÔF€IØÐr2   c                 ó¤   — t          | |¦  «        }| j                             |¦  «        }| j                             t          j        ||f¦  «        S rN   )r¿  rv   r³  rs  Ú	fx_pytreeÚtree_flatten_spec)r»  rš   r¾  rà   Ú	spec_nodes        r3   Ú_generate_flatten_specrË    sH   € õ �R˜ÑÔ€DØ”×!Ò! $Ñ'Ô'€IØŒ8×!Ò!¥)Ô"=ÀÀiÐ?PÑQÔQÐQr2   c                 ó¤   — t          | |¦  «        }| j                             |¦  «        }| j                             t          j        ||f¦  «        S rN   )r¿  rv   r³  rs  rÈ   rM  )r»  r–   r¾  rà   rÊ  s        r3   Ú_generate_unflattenrÍ    sH   € õ �R˜ÑÔ€DØ”×!Ò! $Ñ'Ô'€IØŒ8×!Ò!¥&Ô"7¸%ÀÐ9KÑLÔLÐLr2   r·   c                 óÒ   — |                      d¦  «        �^ }}|D ]<}t          | |d ¦  «        }|€ d S t          |t          j        j        ¦  «        s d S |} Œ=t          | |d ¦  «        S )NrL   )rU   r­   r^   r<   rY   rZ   )r·   rH   rf   rg   rS   Úsubmods         r3   Ú_get_submodulerÐ    sy   € Ø—\’\ #Ñ&Ô&�N€VˆUàð 	ð 	ˆÝ˜˜d DÑ)Ô)ˆàˆ>Ø�4�4å˜&¥%¤(¤/Ñ2Ô2ð 	Ø�4�4àˆˆå�3˜˜tÑ$Ô$Ð$r2   Úmodule_to_addÚcreate_modulec           	      ó°  — |                      d¦  «        �^ }}t          |¦  «        D ]—\  }}t          | |d ¦  «        }|€[|�* |d                     |d |dz   …         ¦  «        ¦  «        }nt          j                             ¦   «         }t          | ||¦  «         t          |t          j        j        ¦  «        s dS |} Œ˜|  	                    ||¦  «         d S )NrL   r   F)
rU   r  r­   rº   r<   rY   rZ   rX   r^   Ú
add_module)	r·   rH   rÑ  rÒ  rf   rg   rí   rS   rÏ  s	            r3   Ú_add_submodulerÕ  %  sÚ   € ð —\’\ #Ñ&Ô&�N€VˆUå˜VÑ$Ô$ð ð ‰ˆˆ4Ý˜˜d DÑ)Ô)ˆàˆ>ØÐ(Ø&˜ s§x¢x°°w¸¸Q¹°w´Ñ'@Ô'@ÑAÔA��åœŸšÑ*Ô*�Ý�C˜˜vÑ&Ô&Ð&å˜&¥%¤(¤/Ñ2Ô2ð 	Ø�5�5àˆˆà‡N‚N�5˜-Ñ(Ô(Ð(Ð(Ð(r2   r`  r/  c                 ó&   — |dk    r| n	| › d|dz
  › �S )Nr   rç   r1   )r`  r/  s     r3   r]  r]  ?  s(   € ð ˜’6�6ˆ4ˆ4 $Ð0Ð0¨¨Q©Ð0Ð0Ð0r2   Ú	call_namec                 óZ   — t          j        t          j        |¦  «        dz   | ¦  «        d uS )Nz(@\d+)?$)ÚreÚmatchÚescape)r×  r`  s     r3   rO   rO   E  s&   € åŒ8•B”I˜d‘O”O kÑ1°9Ñ=Ô=ÀTÐIÐIr2   c                   óò   — e Zd Z	 ddej        j        deej        j        df         deee	e	dz  e
f                  dee	ef         dej        j        ez  dz  f
d„Zd	„ Zd
„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú_ModuleFrameNÚ
flat_graphr–   .Úmodule_stackrô   r)   c                 ó.  ‡ ‡‡‡‡— |‰ _         |‰ _        |‰ _        |‰ _        |‰ _        |‰ _        ‰‰ _        |‰ _        |	‰ _        |
‰ _	        d‰ _
        ‰ j        d         \  ‰ _        Š}t          ‰ j        |dz   ¦  «        ‰ _        ‰  |�&|‰ _        t          |d¦  «        r|j        ni ‰ _        n\‰ j                             ‰ j        t%          t&          j                             ¦   «         ‰¬¦  «        ¦  «        ‰ _        ‰j        ‰ _        ‰ j        j        ‰ _        i ‰ _        i ‰ _        d ‰ _        ‰�út5          ‰j        ‰ j        ¦  «        }ˆˆ ˆfd„}t7          ‰j        |‰ j        |¦  «         ‰j                             |¦  «        ‰ _        ‰ j        ‰ j                 r.‰ j        ‰ j                 d         }|j        j        ‰ j        _        ‰ j        ‰ j                                      t?          ‰ j        j        ‰ j        j        ‰ j        ‰ j        |dz   ‰ j        ¬¦  «        ¦  «         |
                     ‰ j        ¦  «        }|��H‰ j        ��B|j         j!        d	k    rtE          d
|j         j!        › �¦  «        ‚|j         j#        tH          urtE          d|j         j#        › �¦  «        ‚|j          %                    ¦   «         \  }}|j#        tH          urtE          d|j#        › �¦  «        ‚|j#        tL          urtE          d|j#        › �¦  «        ‚‰ j         '                    d ¦  «        5  ˆ fd„tQ          |j!        ¦  «        D ¦   «         }i }|j)        D ]}‰ j         *                    |¦  «        ||<   Œ tW          ‰ j        tI          |¦  «        |f|j         ¦  «        }tY          |j-        ¦  «        D ]º\  }}‰ j         .                    dt^          j0        ||ftc          |td          ¦  «        s|j3        nd|› �¬¦  «        }tc          |td          ¦  «        rŒd|j3        ‰ j        v rHti          j4        ‰ j        |j3                 j5        ¦  «        |_5        |‰ j        ‰ j        |j3                 <   Œ»	 d d d ¦  «         n# 1 swxY w Y   ‰ j        j         6                    ‰ j        ¦  «        5  g }|j-        D ]Ú}tc          |td          ¦  «        r|                     |j7        ¦  «         Œ2|j3        ‰ j        vr|                     d ¦  «         ŒVtc          |tp          tr          tt          tv          f¦  «        stE          dtG          |¦  «        › �¦  «        ‚|                     ‰ j         <                    ‰ j        |j3                 ¦  «        ¦  «         ŒÛt{          ‰ j        j        ||j         ¦  «        }‰ j        j         >                    t^          j0        |df¦  «        Š‰ j        j         >                    t^          j0        |df¦  «        Šˆˆ fd„tQ          |j!        ¦  «        D ¦   «         }ˆˆ fd„|j)        D ¦   «         }d d d ¦  «         n# 1 swxY w Y   ‰ j        €tE          d¦  «        ‚tI          |¦  «        ‰ j        _?        |‰ j        _@        d S d S d S )NFéÿÿÿÿr   rû   ©rw   c                 óÌ   •— ‰j         r‰j         › d| › �n| }|‰j        v r‰j        |         S t          t          j                             ¦   «         ‰¬¦  «        }|‰j        |<   |S )NrL   râ  )rÓ   Úcreated_modulesr    r<   r‹   r¦   )rÓ   rV  rÏ  Úparentrq   rw   s      €€€r3   rÒ  z,_ModuleFrame.__init__.<locals>.create_module  sp   ø€ Ø06´
ÐC˜&œ*Ð,Ð, sÐ,Ð,Ð,À�Ø˜4Ô/Ð/Ð/ØÔ/°Ô5Ð5Ý*­5¬8¯>ª>Ñ+;Ô+;ÀÐCÑCÔC�Ø-3�Ô$ TÑ*Ø�r2   r   )rŸ  Úparent_moduleÚparent_call_modulerÓ   Úcall_idxr)   é   z)expected in_spec to have 2 children, got z'expected in_spec.type to be tuple, got z)expected args_spec.type to be tuple, got z*expected kwargs_spec.type to be dict, got c                 óJ   •— g | ]}‰j                              d |› �¦  «        ‘Œ S )Ú_positional_arg_)rv   r’   )rP   rC  rq   s     €r3   r¸   z)_ModuleFrame.__init__.<locals>.<listcomp>¬  sB   ø€ ð ð ð àð ”J×*Ò*Ð+C¸cÐ+CÐ+CÑDÔDðð ð r2   rs  Ú
_constant_)r—   rH   rŽ   rà   z_expected input to be TensorArgument, SymIntArgument, SymBoolArgument, or SymFloatArgument, got c                 óh   •— g | ].}‰j         j                             t          j        ‰|f¦  «        ‘Œ/S r1   ©rå  rv   rs  rÂ  rÃ  )rP   rí   Ú	args_noderq   s     €€r3   r¸   z)_ModuleFrame.__init__.<locals>.<listcomp>ñ  sF   ø€ ð ð ð àð ”KÔ%×3Ò3µHÔ4DÀyÐRSÀnÑUÔUðð ð r2   c                 ój   •— i | ]/}|‰j         j                             t          j        ‰|f¦  «        “Œ0S r1   rî  )rP   rQ   Úkwargs_noderq   s     €€r3   rî   z)_ModuleFrame.__init__.<locals>.<dictcomp>õ  sO   ø€ ð ð ð ð ð �t”{Ô(×6Ò6Ý Ô(¨;¸Ð*:ñô ðð ð r2   z#parent_call_module must not be None)ArÞ  r–   Ú
seen_nodesr  r  rä  rå  rß  Ú	module_idrô   ÚverboserÓ   r]  r   r)   rW   rû   rY  r    r<   r‹   r¦   rv   Únode_mapÚnode_to_placeholderrç  r¥  rÕ  r³   r\   r˜   Ú_SubmoduleEntryr7  Únum_childrenr`   ra   r?   ÚchildrenrÊ   r}  r\  Úcontextr’   rË  r  Úinputsr~  rÂ  rÃ  r^   r   rà   Úcopyrõ   Úinserting_beforer²  r   r   r   r   Úremap_inputrÍ  rs  rŽ   r�   ) rq   rÞ  r–   rò  r  r  rä  rå  rß  ró  rô   r)   Ú	num_callsr°   rÒ  Úbase_module_framer6  Ú	args_specÚkwargs_specÚ	arg_nodesÚkwarg_nodesrà   r:  rC  r  Úflat_arg_nodeÚinput_nodesr;  Úinputs_noderï  rñ  rw   s    `      `                     @@@r3   rz   z_ModuleFrame.__init__K  sœ  øøøøø€ ð %ˆŒØˆŒ
Ø$ˆŒØ(ˆÔØ$ˆŒØ.ˆÔØˆŒØ(ˆÔØ"ˆŒà!2ˆÔØˆŒà"&Ô"3°BÔ"7ÑˆŒ�"�iå# D¤H¨i¸!©mÑ<Ô<ˆŒàÐQØÐØ ˆDŒKÝ)0°¸Ñ)AÔ)AÐI˜œ˜ÀrˆDŒJˆJàÔ.×2Ò2Ø”Ý!¥%¤(§.¢.Ñ"2Ô"2°rÐ:Ñ:Ô:ñô ˆDŒKð  œˆDŒJà”[Ô&ˆŒ
ð =?ˆŒØ#%ˆÔ à8<ˆÔØÐÝ(¨¬°T´^ÑDÔDˆHðð ð ð ð ð ð õ ˜6œ=¨(°D´KÀÑOÔOÐOØ&,¤l×&>Ò&>¸xÑ&HÔ&HˆDÔ#ØÔ  ¤Ô0ð IØ$(Ô$5°d´nÔ$EÀaÔ$HÐ!Ø'8Ô'?Ô'H�”Ô$ØÔ˜dœnÔ-×4Ò4ÝØ#œ{œØ"&¤+Ô"4Ø'+Ô'>ØœØ&¨™]Øœ;ðñ ô ñ	ô 	ð 	ð &×)Ò)¨$¬.Ñ9Ô9ˆ	ØÑ  T¤[Ñ%<ØÔ Ô-°Ò2Ð2Ý$Ø`À	Ô@QÔ@^Ð`Ð`ñô ð ð Ô Ô%­UÐ2Ð2Ý$ØV¸iÔ>OÔ>TÐVÐVñô ð ð &/Ô%6×%?Ò%?Ñ%AÔ%AÑ"ˆI�{ØŒ~¥UÐ*Ð*Ý$ØPÀ	ÄÐPÐPñô ð ð Ô¥tÐ+Ð+Ý$ØSÀÔAQÐSÐSñô ð ð ”×+Ò+¨DÑ1Ô1ð ð ðð ð ð å$ YÔ%;Ñ<Ô<ðñ ô �	ð !�Ø'Ô/ð Eð E�DØ(,¬
×(>Ò(>¸tÑ(DÔ(D�K Ñ%Ð%Ý2Ø”KÝ˜9Ñ%Ô% {Ð3ØÔ%ñô �	õ
 !*¨)Ô*:Ñ ;Ô ;ð ð ‘H�C˜Ø$(¤J×$:Ò$:Ø*Ý'Ô/Ø'¨Ð-õ $.¨cÕ3CÑ#DÔ#Dð4˜CœH˜Hà!3¨cÐ!3Ð!3ð %;ñ 	%ô 	%�Mõ " #Õ'7Ñ8Ô8ð !Ø à”x 4¤?Ð2Ð2Ý-1¬Y°t´ÀsÄxÔ7PÔ7UÑ-VÔ-V˜Ô*à)ð Ô0°´ÀÄÔ1JÑKøð!ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ðB ”Ô"×3Ò3°DÔ4KÑLÔLð .ð .Ø:<�Ø&Ô-ð ð �EÝ! %Õ)9Ñ:Ô:ð Ø#×*Ò*¨5¬;Ñ7Ô7Ð7Ð7Øœ¨4¬?Ð:Ð:Ø#×*Ò*¨4Ñ0Ô0Ð0Ð0å)Ø!å .Ý .Ý /Ý 0ð	ñ ô  ð õ #1ð![ÝMQÐRWÉ[Ì[ð![ð ![ñ#ô #ð ð $×*Ò*Ø œK×3Ò3°D´OÀEÄJÔ4OÑPÔPñô ð ð õ 2Ø”KÔ&ØØÔ%ñô �ð !œKÔ-×;Ò;ÝÔ$ {°AÐ&6ñô �	ð #œkÔ/×=Ò=ÝÔ$ {°AÐ&6ñô �ðð ð ð ð å" 9Ô#9Ñ:Ô:ðñ ô �	ðð ð ð ð ð )Ô0ð	ñ ô �ðS.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð^ Ô&Ð.Ý$Ð%JÑKÔKÐKå+0°Ñ+;Ô+;ˆDÔ#Ô(Ø-8ˆDÔ#Ô*Ð*Ð*ðO !Ð Ð%<Ð%<s&   Ì.EQ>Ñ>RÒRÒ-FYÙYÙYc                 ó|  — | j         dk    rt          d|› d�¦  «        ‚|j        | j        urt          d¦  «        ‚| j                             d ¦  «        5  | j                             |j        |j        ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   t          j        |j	        ¦  «        |_	        || j
        |<   d S )NrÖ   zCannot add placeholder z to root moduleú6expected x.graph to be flat_graph, got different graph)Ú	type_expr)rÓ   r`   rv   rÞ  rý  r’   rà   ra   rü  rõ   rö  )rq   r@  Úplaceholder_nodes      r3   Úadd_placeholderz_ModuleFrame.add_placeholder  s  € ØŒ8�rŠ>ˆ>Ý Ð!M¸1Ð!MÐ!MÐ!MÑNÔNÐNØŒ7˜$œ/Ð)Ð)Ý ØHñô ð ð ŒZ×(Ò(¨Ñ.Ô.ð 	Pð 	PØ#œz×5Ò5°a´fÈÌÐ5ÑOÔOÐð	Pð 	Pð 	Pñ 	Pô 	Pð 	Pð 	Pð 	Pð 	Pð 	Pð 	Pøøøð 	Pð 	Pð 	Pð 	Põ !%¤	¨!¬&Ñ 1Ô 1ÐÔØ&6ˆÔ  Ñ#Ð#Ð#s   Á'B	Â	BÂBc                 óT  — t          j        t          j        j        | j        |j        ¦  «        }t          j        t          j        j        | j        |j        ¦  «        }| j         	                    |j
        ||¦  «        }t          j        |j        ¦  «        |_        || j        |<   |S rN   )rÈ   Útree_map_onlyr<   r‹   r«  rþ  rŽ   r�   rv   rs  rH   rü  rõ   rõ  )rq   r@  rŽ   r�   rš   s        r3   Úcopy_sym_call_functionz#_ModuleFrame.copy_sym_call_function  s}   € õ Ô#¥E¤H¤M°4Ô3CÀQÄVÑLÔLˆÝÔ%¥e¤h¤m°TÔ5EÀqÄxÑPÔPˆØŒz×'Ò'¨¬°$¸Ñ?Ô?ˆÝ”I˜aœfÑ%Ô%ˆŒ	ØˆŒ�aÑØˆr2   c                 óà  — |j         | j        urt          d¦  «        ‚|| j        v r| j        |         S |                      d|› d�¦  «         || j        v r| j        |         S |j        dk    s| j                             | j	        ¦  «        €˜|  
                    |¦  «         | j        �o| j        j                              | j        ¦  «        5  | j                             d| j                             |¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   | j        |         S |j        dk    rì|j        t"          j        j        j        j        t"          j        j        j        j        t"          j        j        j        j        t"          j        j        j        j        t"          j        j        j        j        t"          j        j        j        j        fv s%t;          |j        d¦  «        r2|j        j        dk    r"|                      |¦  «         | j        |         S | j                             | j	        ¦  «        �| j          !                    | |¦  «        S tE          d	|j        › d
|› �¦  «        ‚)Nr	  zremap_input(rµ  r’   r   rs  r+   Ú	_operatorz(Could not run remap_input() on op type: z
 for node )#rv   rÞ  r`   rõ  r3  rö  r—   rô   rY  rÓ   r  rç  rå  rý  Ú
insert_argrþ  rH   r<   r  r€  Úsym_sizer@   rS   r‚  ÚunbindÚsumÚdim_IntListÚviewÚdiffrW   r+   r  rû   Úreadr¢  )rq   r@  s     r3   rþ  z_ModuleFrame.remap_input  sŽ  € ØŒ7˜$œ/Ð)Ð)Ý ØHñô ð ð �”ÐÐØ”= Ô#Ð#Ø�
Š
Ð& !Ð&Ð&Ð&Ñ'Ô'Ð'Ø�Ô(Ð(Ð(ØÔ+¨AÔ.Ð.àŒD�MÒ!Ð! TÔ%;×%?Ò%?ÀÄÑ%IÔ%IÐ%Qð × Ò  Ñ#Ô#Ð#ØÔ&Ð2ð ”[Ô&×7Ò7¸Ô8OÑPÔPð Vð VØÔ+×6Ò6°q¸$¼+×:QÒ:QÐRSÑ:TÔ:TÑUÔUÐUðVð Vð Vñ Vô Vð Vð Vð Vð Vð Vð Vøøøð Vð Vð Vð VàÔ+¨AÔ.Ð.ØŒT�_Ò$Ð$ØŒHå”	”Ô'Ô+Ý”	”Ô#Ô+Ý”	”Ô%Ô)Ý”	”Ô"Ô.Ý”	”Ô#Ô+Ý”	”Ô#Ô+ððð õ ˜œ ,Ñ/Ô/ðð 56´HÔ4GÈ;Ò4VÐ4Vð ×'Ò'¨Ñ*Ô*Ð*Ø”= Ô#Ð#ØÔ#×'Ò'¨¬Ñ1Ô1Ð=ð ”:—?’? 4¨Ñ+Ô+Ð+åØN¸1¼4ÐNÐNÈ1ÐNÐNñô ð s   Ã4DÄDÄDrn   c                 ó0  — d }| j                              ¦   «         D ],}|j                             di ¦  «        }|€|}Œ"||k    ri } nŒ-|rI| j        €t          d¦  «        ‚|| j        j        d<   | j                              ¦   «         D ]}|j        d= Œd S d S )NÚcustomzBparent_call_module must not be None when uplifting custom metadata)rõ  rý   rõ   rY  rç  r`   )rq   Úcustom_metarš   Ú	curr_metas       r3   Úuplift_common_custom_metadataz*_ModuleFrame.uplift_common_custom_metadataL  sÚ   € àˆØ”M×(Ò(Ñ*Ô*ð 		ð 		ˆDØœ	Ÿš h°Ñ3Ô3ˆIØÐ"à'�Øà˜KÒ'Ð'Ø �Ø�ð (ð ð 	(àÔ&Ð.Ý$ØXñô ð ð 6AˆDÔ#Ô(¨Ñ2Øœ×,Ò,Ñ.Ô.ð (ð (�Ø”I˜hÐ'Ð'ð	(ð 	(ð(ð (r2   c           	      óF  ‡ ‡— ‰ j                              ‰ j        d ¦  «         g }‰ j                             ‰ j        ¦  «        }|�û‰ j        �ô|j        D ]‹}t          |t          t          t          t          t          f¦  «        rJ|j        ‰ j        v r&|                     ‰ j        |j                 ¦  «         Œd|                     d ¦  «         Œzt#          d|› �¦  «        ‚ˆ fd„Št%          ‰ j        t)          ˆfd„|D ¦   «         ¦  «        |j        ¦  «        }t-          ‰ j        j        ‰ j        |j        ¦  «        }|}n}g }‰ j        D ]Q}|j        D ]G}|j        ‰ j        vr7|                     |¦  «         |                     ‰ j        |         ¦  «          nŒHŒR‰ j        }t5          |¦  «        dk    r|d         }t          |t6          t8          j        j        f¦  «        st?          dtA          |¦  «        › �¦  «        ‚‰ j!         "                    |¦  «         |€d S t          |t8          j        j        ¦  «        r|j#                             d¦  «        nd„ |D ¦   «         |j#        d<   ‰  $                    ¦   «          t5          |¦  «        dk    r|€|‰ j        j        |d         <   d S tK          |¦  «        D ]c\  }	}
|
€Œt8          j         &                    |¦  «        |	         j'        }|
j#                             d¦  «        |j#        d<   |‰ j        j        |
<   Œdd S )	Nz'Unsupported data type for output node: c                 ó¼   •— | €d S ‰j         | j                 }|‰j        v r‰j        |         S |‰j        v r‰j        |         S t	          d| › d‰j        › �¦  «        ‚)NzCould not find output node z	. Graph: )rò  rà   rõ  rö  r¢  rv   )rm  Ú	seen_noderq   s     €r3   Úget_actual_output_nodez=_ModuleFrame.finalize_outputs.<locals>.get_actual_output_node  sx   ø€ Ø�>Ø˜4à œO¨F¬KÔ8�	Ø ¤Ð-Ð-Øœ=¨Ô3Ð3Ø $Ô":Ð:Ð:ØÔ3°IÔ>Ð>å&ØS°fÐSÐSÀtÄzÐSÐSñô ð r2   c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S rN   r1   )rP   rm  r"  s     €r3   rT   z0_ModuleFrame.finalize_outputs.<locals>.<genexpr>�  s/   øè è € ÐPÐP¸Ð,Ð,¨VÑ4Ô4ÐPÐPÐPÐPÐPÐPr2   r   r   z8expected graph_outputs to be list or torch.fx.Node, got Úvalc                 óB   — g | ]}|j                              d ¦  «        ‘ŒS )r$  )rõ   rY  )rP   Úos     r3   r¸   z1_ModuleFrame.finalize_outputs.<locals>.<listcomp>³  s&   € Ð;Ð;Ð;¨�!”&—*’*˜UÑ#Ô#Ð;Ð;Ð;r2   )(rä  r^  rÓ   rô   rY  r   rå  r»   r^   r   r   r   r   r   rà   rò  r˜   r¢  rÍ  r)   r?   rN  rË  rç  rõ  Úusersr‰   r‡   r<   r‹   r«  r`   ra   rv   rm  rõ   r  r  ÚProxyrš   )rq   Úorig_outputsr6  rm  Útree_out_nodeÚ
parent_outÚgraph_outputsÚ	orig_nodeÚ	user_noderí   Úorig_outputÚ	proxy_outr"  s   `           @r3   Úfinalize_outputsz_ModuleFrame.finalize_outputsd  sr  øø€ ØÔ× Ò  ¤¨4Ñ0Ô0Ð0àˆàÔ*×.Ò.¨t¬~Ñ>Ô>ˆ	ØÐ  T¤[Ð%<Ø#Ô+ð ð �ÝØå&Ý&Ý'Ý(Ý(ðñ	ô 	ð ð ”{ d¤oÐ5Ð5Ø$×+Ò+¨D¬O¸F¼KÔ,HÑIÔIÐIÐIà$×+Ò+¨DÑ1Ô1Ð1Ð1å&ØJÀ&ÐJÐJñô ð ðð ð ð ð õ 0Ø”ÝÐPÐPÐPÐPÀ<ÐPÑPÔPÑPÔPØÔ"ñô ˆMõ
 0FØ”Ô" DÔ$;¸YÔ=Oñ0ô 0ˆJð BOˆMˆMàˆMà!œ]ð ð �	Ø!*¤ð ð �IØ ”~¨T¬_Ð<Ð<à$×+Ò+¨IÑ6Ô6Ð6Ø%×,Ò,¨T¬]¸9Ô-EÑFÔFÐFØ˜ð	 =øð Ô0ˆJÝ�=Ñ!Ô! QÒ&Ð&Ø -¨aÔ 0�å˜-­$µ´´Ð)>Ñ?Ô?ð 	Ý Ø`Í4ÐP]ÑK^ÔK^Ð`Ð`ñô ð ð 	Œ
×Ò˜-Ñ(Ô(Ð(ð ÐØˆFõ ˜-­¬¬Ñ7Ô7ð<ˆMÔ×"Ò" 5Ñ)Ô)Ð)à;Ð;¨]Ð;Ñ;Ô;ð 	Œ˜Ñð
 	×*Ò*Ñ,Ô,Ð,åˆ|ÑÔ Ò!Ð! iÐ&7Ø4>ˆDŒKÔ  ¨a¤Ñ1Ð1Ð1å"+¨LÑ"9Ô"9ð >ð >‘��;ØÐ&Øå!œHŸNšN¨:Ñ6Ô6°qÔ9Ô>�	Ø(3Ô(8×(<Ò(<¸UÑ(CÔ(C�	”˜uÑ%Ø4=�”Ô$ [Ñ1Ð1ð>ð >r2   c                 óÄ   — |                       d|                     ¦   «         ¦  «         | j                             || j        ¦  «        | j        |<   || j        |j        <   d S )NÚcopying)r3  Úformat_noderv   Ú	node_copyrþ  rõ  rò  rà   r™   s     r3   Ú	copy_nodez_ModuleFrame.copy_nodeÂ  sW   € Ø�
Š
�9˜d×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ø"œj×2Ò2°4¸Ô9IÑJÔJˆŒ�dÑØ%)ˆŒ˜œ	Ñ"Ð"Ð"r2   c                 óæ  — t          | j        j        ¦  «        D ]F\  }}|                      ||j                             d¦  «        |                     ¦   «         ¦  «         ŒGd}| j        |         }|j        dk    r2|                      |¦  «         |dz  }| j        |         }|j        dk    °2|  	                    |¦  «         | j        j        D ]"}|j        dk    r|                      |¦  «         Œ#d S )Nr�  r   r’   r   rm  )
r  rÞ  r–   r3  rõ   rY  r4  r—   r6  Úrun_from)rq   rí   rš   Únode_idxs       r3   Ú	run_outerz_ModuleFrame.run_outerÇ  s  € Ý  ¤Ô!6Ñ7Ô7ð 	Pð 	P‰GˆAˆtØ�JŠJ�q˜$œ)Ÿ-š-Ð(9Ñ:Ô:¸D×<LÒ<LÑ<NÔ<NÑOÔOÐOÐOð ˆØŒz˜(Ô#ˆØŒg˜Ò&Ð&Ø�NŠN˜4Ñ Ô Ð Ø˜‰MˆHØ”:˜hÔ'ˆDð Œg˜Ò&Ð&ð
 	�Š�hÑÔÐð ”OÔ)ð 	%ð 	%ˆDØŒw˜(Ò"Ð"Ø—’˜tÑ$Ô$Ð$øð	%ð 	%r2   c                 ó0   — | j         rt          |i |¤Ž d S d S rN   )rô  r3  )rq   rŽ   r�   s      r3   r3  z_ModuleFrame.printÚ  s/   € ØŒ<ð 	#å�4Ð"˜6Ð"Ð"Ð"Ð"Ð"ð	#ð 	#r2   c                 óž  — d}|t          | j        ¦  «        k     �r1| j        |         }|j        dk    rt          d|› �¦  «        ‚|                      ¦   «          |                      d||                     ¦   «         ¦  «         |                      | j        ¦  «         t          | j        ¦  «        }|j        dk    r|dk    r|S |                      ¦   «          |S t          |j         	                    di ¦  «        ¦  «        dk    rt          d|› �¦  «        ‚|j        d         }dd	lm} t          |¦  «        dk    r||v r| j        }n)d
„ |j        d                              ¦   «         D ¦   «         }|d |…         | j        k    rK|                      ¦   «          |                      d| j        ¦  «         |                      | j        ¦  «         |S |€t          d¦  «        ‚t!          | j        |¦  «        rÇ||         }|                      d|¦  «         t#          |j        d                              ¦   «         ¦  «        |         }	t'          | j        | j        | j        | j        | j        | j        | | j        |gz   |	                     d¦  «        d         | j        ¦
  «
                             |¦  «        }|dz  }�Œ»|| j        k    rt          d|› d| j        › �¦  «        ‚|j        dk    r*| j        | j                                      |j        ¦  «         |                      |¦  «         |dz  }|t          | j        ¦  «        k     �°/d S d S )Nr   r’   z%unexpected placeholder node at index ÚSTEPrm  r   r�  z(Unable to find nn_module_stack for node )Ú_EMPTY_NN_MODULE_STACK_KEYc           	      ó„   — g | ]=\  }\  }}||r|nd d|v r(t          |                     d¦  «        d         ¦  «        ndf‘Œ>S )Nrç   rá  r   )r@   rU   )rP   rQ   rV  rw   s       r3   r¸   z)_ModuleFrame.run_from.<locals>.<listcomp>  sj   € ð %ð %ð %ñ &˜™:˜D "ð	 Ø"Ð,˜˜¨Ø14¸°°�˜AŸGšG C™LœL¨Ô,Ñ-Ô-Ð-¸qðð%ð %ð %r2   Ú	outliningz"node_module_stack must not be NonezCreating new stack frame forrç   zexpected node_module_stack z to equal module_stack r³  ) r‰   r–   r—   r`   r3  r4  rß  r1  rõ   rY  r¢  Ú(torch._export.passes._node_metadata_hookr>  r]   rÓ   rv   r•  r‡   ÚkeysrÝ  rÞ  rò  r  r  rä  rU   rô   r8  r   r  rH   r6  )
rq   r9  Ú
module_idxrš   Údepthr�  r>  Únode_module_stackÚnext_moduleÚnext_module_keys
             r3   r8  z_ModuleFrame.run_fromß  s�  € Øˆ
à�˜TœZ™œÒ(Ñ(Ø”:˜hÔ'ˆDØŒw˜-Ò'Ð'Ý$Ð%WÈXÐ%WÐ%WÑXÔXÐXà�JŠJ‰LŒLˆLØ�JŠJ�v˜x¨×)9Ò)9Ñ);Ô);Ñ<Ô<Ð<Ø�JŠJ�tÔ(Ñ)Ô)Ð)Ý˜Ô)Ñ*Ô*ˆEØŒw˜(Ò"Ð"Ø˜A’:�:ð $�Oð ×%Ò%Ñ'Ô'Ð'Ø�å�4”9—=’=Ð!2°BÑ7Ô7Ñ8Ô8¸AÒ=Ð=Ý"Ð#TÈdÐ#TÐ#TÑUÔUÐUà"œiÐ(9Ô:ˆOðð ð ð ð ð õ
 �OÑ$Ô$¨Ò)Ð)Ø.°/ÐAÐAð %)Ô$5Ð!Ð!ð%ð %ð *.¬Ð3DÔ)E×)KÒ)KÑ)MÔ)Mð%ñ %ô %Ð!ð !  % Ô(¨DÔ,=Ò=Ð=ð ×%Ò%Ñ'Ô'Ð'Ø—
’
˜;¨¬Ñ1Ô1Ð1Ø—
’
˜4œ:Ñ&Ô&Ð&Ø�à Ð(Ý$Ð%IÑJÔJÐJå˜$Ô+Ð->Ñ?Ô?ð ð 0°Ô6�Ø—
’
Ð9¸;ÑGÔGÐGõ #' t¤yÐ1BÔ'C×'HÒ'HÑ'JÔ'JÑ"KÔ"KÈEÔ"R�Ý'Ø”OØ”JØ”OØÔ%Ø”OØÔ(ØØÔ%¨¨Ñ5Ø#×)Ò)¨#Ñ.Ô.¨qÔ1ØÔ*ñô ÷ ’(˜8Ñ$Ô$ð ð ˜a‘�
Ùð ! DÔ$5Ò5Ð5Ý$ØoÐ2CÐoÐoÐ\`Ô\mÐoÐoñô ð ð Œw˜*Ò$Ð$à” ¤Ô/×3Ò3°D´KÑ@Ô@Ð@à�NŠN˜4Ñ Ô Ð à˜‰MˆHð} �˜TœZ™œÒ(Ñ(Ð(Ð(Ð(Ð(r2   rN   )rn   N)r*   r+   r,   r<   r‹   r¦   r?   r«  r‡   rs   r@   rÊ   r   r“   r"   rz   r  r  rþ  r  r1  r6  r:  r3  r8  r1   r2   r3   rÝ  rÝ  J  sG  € € € € € ð CGðt9ð t9à”H”Nðt9ð �U”X”] CÐ'Ô(ðt9ð ˜5  c¨D¡j°#Ð!5Ô6Ô7ðt9ð   Ð%8Ð 8Ô9ðt9ð ”Ô$Ð'8Ñ8¸4Ñ?ðt9ð t9ð t9ð t9ðl7ð 7ð 7ðð ð ð,ð ,ð ,ð\(ð (ð (ð (ð0\>ð \>ð \>ð|*ð *ð *ð
%ð %ð %ð&#ð #ð #ð
að að að að ar2   rÝ  c                   óˆ   — e Zd ZU eed<   ej        j        ed<   ej        j	        ed<   eed<   e
ed<   ej        j        ed<   dS )r÷  rŸ  ræ  rç  rÓ   rè  r)   N)r*   r+   r,   rs   r>   r<   rY   rZ   r‹   r«  r@   r1   r2   r3   r÷  r÷  C  s]   € € € € € € à€O€O�OØ”8”?Ð"Ð"Ñ"ØœœÐ%Ð%Ñ%Ø	€H€H�HØ€M€M�MØŒHŒOÐÐÑÐÐr2   r÷  Ú
orig_graphÚroot_modulec                 óþ   — i }t          t          ¦  «        }t          t          ¦  «        }i }t          | t	          | j        ¦  «        ||||d dgdd„ |j        D ¦   «         |¬¦  «                             ¦   «          ||fS )N)rÖ   Nr   rÖ   c                 ó6   — i | ]}|j         ¯	|j        |j         “ŒS r1   )r6  rÓ   rÔ   s     r3   rî   z'_outline_submodules.<locals>.<dictcomp>\  s6   € ð 	
ð 	
ð 	
àØŒð	
ØŒI�u”ð	
ð 	
ð 	
r2   )r)   )r   r‡   rV   rÝ  r?   r–   rô   r:  )rI  rJ  rò  r  r  rä  s         r3   rü   rü   M  sœ   € Ø+-€JÝ5@ÅÑ5FÔ5F€LÝ&1µ#Ñ&6Ô&6€JØ24€OÝØÝˆjÔÑÔØØØØØØ	ˆØ
ð	
ð 	
à$Ô6ð	
ñ 	
ô 	
ð
 ðñ ô ÷  ‚i�k„k€kØ˜Ð#Ð#r2   rÖ   rå  r0  rf   c                 ó*  — |dk    rit          |                     ¦   «         ¦  «        dd …         D ]?}t          | |¦  «        €-t          | |t          j                             ¦   «         ¦  «         Œ@g }t          | j                             ¦   «         ¦  «        D ]³\  }}|€Œ||z   }t          ||| 
                    d¦  «        d         dz   ¬¦  «         t          | |¦  «         | 
                    d¦  «        d         }|                     |                     ||                     |t          |¦  «        ¦  «        ¦  «        ||f¦  «         Œ´|                     t!          j        d¦  «        ¬¦  «         |D ]\  }}}|                      ||¦  «         Œd S )NrÖ   r   rç   r   rL   )rf   )r±  )r‡   rB  rÐ  rÕ  r<   rY   rZ   r\   r]   r  rU   Údelattrr˜   rY  r‰   ÚsortrÂ  Ú
itemgetterÚregister_module)	rå  r0  rf   rÓ   rù  rà   ÚchildÚbase_fqnr*  s	            r3   r  r  f  s“  € ð �‚|€|Ý˜	ŸšÑ(Ô(Ñ)Ô)¨!¨"¨"Ô-ð 	?ð 	?ˆCÝ˜f cÑ*Ô*Ð2Ý˜v s­E¬H¯OªOÑ,=Ô,=Ñ>Ô>Ð>øà€HÝ˜FœO×1Ò1Ñ3Ô3Ñ4Ô4ð 	
ð 	
‰ˆˆeØˆ=ØØ�t‰mˆÝ˜E 9°S·Y²Y¸s±^´^ÀAÔ5FÈÑ5LÐMÑMÔMÐMÝ�˜ÑÔÐØ—9’9˜S‘>”> !Ô$ˆØ�ŠØ�]Š]˜3 	§¢¨h½¸I¹¼Ñ GÔ GÑHÔHÈ$ÐPUÐVñ	
ô 	
ð 	
ð 	
ð ‡M‚M•hÔ)¨!Ñ,Ô,€MÑ-Ô-Ð-Ø"ð ,ð ,‰ˆˆ4�Ø×Ò˜t UÑ+Ô+Ð+Ð+ð,ð ,r2   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )rú   aY  
    Collect the intermediate values of mutations in a graph.

    Example: in the following graph, suppose that buf_in and buf_out
    are the input and output values of a buffer.

        buf_in = placeholder()
        ...
        ival1 = f0(buf_in, ...)  # inside self.n0(...)
        ...
        ival2 = f1(ival1, ...)  # inside self.n1(...)
        ...
        buf_out = f2(ival2, ...)  # inside self.n2(...)
        return buf_out, ...

    Here ival1 and ival2 are intermediate values created inside
    calls to n0 and n1 respectively, and used inside calls to
    n1 and n2 respectively.
    c                 ó8   — t          t          ¦  «        | _        d S rN   )r   rV   Únode_names_by_fqnrp   s    r3   rz   z_IVals.__init__”  s   € å!,­SÑ!1Ô!1ˆÔÐÐr2   c                 ó\   — t          |t          j        j        ¦  «        r|j        j        S dS rB   )r^   r<   Ú_opsÚ
OpOverloadÚ_schemaÚ
is_mutable)rq   rH   s     r3   Ú_is_mutablez_IVals._is_mutable˜  s)   € Ý�f�eœjÔ3Ñ4Ô4ð 	-Ø”>Ô,Ð,Øˆur2   c                 ó¬  — |j         dk    rt          d|j         ›�¦  «        ‚|                      |j        ¦  «        }t	          d|j        |¦  «         |sat          t          |j        d                              ¦   «         ¦  «        ¦  «        \  }}| j	        |          
                    |j        ¦  «         |                     |j        d         ¦  «        S )zI
        Read state corresponding to a given intermediate value.
        rs  z,expected node.op to be 'call_function', got zChecking mutabilityr�  r   )r—   r`   r\  rH   r3  rw  ry  rõ   rý   rV  r  rà   rþ  rŽ   )rq   Úmfrš   ÚbrÓ   r*  s         r3   r  z_IVals.read�  sÉ   € ð
 Œ7�oÒ%Ð%Ý ØJ¸t¼wÐJÐJñô ð ð ×Ò˜Tœ[Ñ)Ô)ˆÝÐ# T¤[°!Ñ4Ô4Ð4Øð 	7õ �( 4¤9Ð->Ô#?×#FÒ#FÑ#HÔ#HÑIÔIÑJÔJ‰FˆC�ØÔ" 3Ô'×+Ò+¨D¬IÑ6Ô6Ð6Ø�~Š~˜dœi¨œlÑ+Ô+Ð+r2   c           
      ó˜  ‡— |D ]Å}|D ]À}|j         j        }| j        |j                 Šˆfd„|j        D ¦   «         }|D ]Š}|                     |¦  «        5  |                     dt          j        j	        j
        j        |j        d         |f¦  «        }t          j        |j        ¦  «        |_        ddd¦  «         n# 1 swxY w Y   Œ‹ŒÁŒÆdS )zT
        Update states corresponding to intermediate values that were read.
        c                 ó&   •— g | ]}|j         ‰v ¯|‘ŒS r1   rD  )rP   r/  Ú
node_namess     €r3   r¸   z!_IVals.update.<locals>.<listcomp>·  s%   ø€ ÐHÐHÐH˜q°1´6¸ZÐ3GÐ3G˜Ð3GÐ3GÐ3Gr2   rs  r   N)r)   rv   rV  rÓ   r–   r}  r~  r<   r  r€  r�  r‚  rŽ   rü  rõ   )	rq   Ú
partitionsÚshared_submodulesrÕ   rv   r–   rš   ru  rb  s	           @r3   r[   z_IVals.update¯  s/  ø€ ð ",ð 	=ð 	=ÐØ*ð =ð =�ØœÔ*�Ø!Ô3°E´IÔ>�
ØHÐHÐHÐH E¤KÐHÑHÔH�Ø!ð 	=ð 	=�Dð ×.Ò.¨tÑ4Ô4ð =ð =Ø#(×#4Ò#4Ø+Ý!œIœNÔ0Ô8Ø!œY qœ\¨4Ð0ñ$ô $˜õ
 )-¬	°$´)Ñ(<Ô(<˜œð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =øð	=ð	=ð	=ð 	=s   ÁAB<	Â<C ÃC N)r*   r+   r,   r;   rz   r\  r  r[   r1   r2   r3   rú   rú     sZ   € € € € € ðð ð(2ð 2ð 2ðð ð ð
,ð ,ð ,ð$=ð =ð =ð =ð =r2   rú   r  c                 ó®   — |                      ¦   «         D ]?\  }}|rt          ||¦  «        n|}|D ]#}t          | |¦  «        }t          |||¦  «         Œ$Œ@d S rN   )r]   r   r­   rX   )r»  rJ  r  r   Únamesr)   rà   r$  s           r3   rþ   rþ   Ä  s   € ð
 '×,Ò,Ñ.Ô.ð 'ð 'Ñˆ	�5Ø6?ÐP•˜;¨	Ñ2Ô2Ð2À[ˆØð 	'ð 	'ˆDÝ˜"˜dÑ#Ô#ˆCÝ�F˜D #Ñ&Ô&Ð&Ð&ð	'ð'ð 'r2   c                 óf  — i }| D �]*}t          |¦  «        D �]\  }}t          |j        |j        ¦  «        }t	          |j        |¦  «        }d}|d |…         D ]Ô}t          |j        |j        ¦  «        r¸|j        }	|j        |j        k    r‚| 	                    d¦  «        �^ }
}t          |	|
¦  «        j                             |¦  «         t          |j        |j        ¦  «        }t	          |j        |¦  «        }||j        _        |||<    n |s|	                     ||j        ¦  «         d}ŒÕ�Œ�Œ,|S )NFrL   T)r  r]  rÓ   rè  r¥  rŸ  rº  r)   ræ  rU   r   r\   r^  rç  rH   r_  )rc  rå   rd  rí   rÕ   r   rH   ÚdeduplicatedÚseenrå  rf   rà   Úseen_child_fqnÚseen_targets                 r3   r  r  Ð  s]  € Ø ÐØ'ð $,ñ $,ÐÝ!Ð"3Ñ4Ô4ð #	,ñ #	,‰HˆAˆuÝ" 5¤9¨e¬nÑ=Ô=ˆIÝ& uÔ'7¸ÑCÔCˆFØ ˆLà)¨"¨1¨"Ô-ð ,ð ,�Ý+¨D¬K¸¼ÑFÔFð ,Ø"Ô0�Fð ”x 5¤9Ò,Ð,ð
 )/¯ª°SÑ(9Ô(9™˜ Ý/°¸Ñ?Ô?ÔH×LÒLÈTÑRÔRÐRÝ)3°D´H¸d¼mÑ)LÔ)L˜Ý&7Ø!Ô,¨nñ'ô '˜ð ;F˜Ô0Ô7Ø=KÐ/°	Ñ:Ø˜Ø)ð ,ð ×,Ò,¨V°T´[ÑAÔAÐAØ'+˜øùñG#	,ðJ #Ð"r2   r,  ÚscopeÚmodule_id_to_inputs_removedc                 ó˜  ‡‡— ‰€t          t          ¦  «        Št          | ¦  «        ‰v r$t          | ¦  «        ‰t          | ¦  «                 iS | j                             ¦   «         D ]^\  }Št          t          d‰¦  «        |||gz   ‰¦  «        }|                     ¦   «         D ] \  }}‰|                              |¦  «         Œ!Œ_t          | dd¦  «        }|�t          |j
        ¦  «        dk    r‰S t          |t          j        j        ¦  «        st          dt!          |¦  «        › �¦  «        ‚t#          t%          d„ |j
        ¦  «        ¦  «        }	t          |	¦  «        dk    rdn|	d         }
t%          d„ |j
        ¦  «        }|D ]U}t'          | |j        ¦  «        Š‰�<t          ‰¦  «        ‰v r+t+          t%          ˆˆfd	„|j        ¦  «        ¦  «        |_        ŒVi }|	D ]d}|j        |vrŒd}||j                 D ]@}|                     d
¦  «        }|dt          |¦  «        …         d„ |D ¦   «         k    r|} nŒA|€Œ_|||<   Œet          ¦   «         }|                     ¦   «         D �]&\  }}t          |j        ¦  «        dk    rÙ|t          |¦  «        d…         }t5          | |¦  «        }t          |t          j        t          j        f¦  «        st          dt!          |¦  «        › �¦  «        ‚|                     |
¦  «        5  |                     dd
                     |¦  «        ¦  «        }ddd¦  «         n# 1 swxY w Y   |                      |d¬¦  «         | !                    |¦  «         | "                    |j        ¦  «         �Œ(t          | tF          ¦  «        r|  $                    ¦   «          t          | ¦  «        |iS )a  Sink params, buffers, and constants from graph inputs into get_attr nodes.

    Exported modules are purely functional, so they pass their parameters and
    buffers in as inputs to the graph.

    To replicate eager's semantics, we need to get them from the module state
    via get_attr instead.

    module: GraphModule, potentially containing nested submodules.
    inputs_to_state: mapping graph input names to the corresponding key in the state_dict.
    scope: tracks where we are in the module hierarchy, so that we can emit the
        right `getattr(self, "foo.bar")` calls, etc.
    module_id_to_inputs_removed: records inputs removed by child modules, mapping
        the module object id to the list of placeholder node names in the child module
        that were removed.
    Nztorch.nn.Modulerv   r   z)expected graph to be torch.fx.Graph, got c                 ó   — | j         dk    S )Nr’   rê   ©r/  s    r3   rv  z_sink_params.<locals>.<lambda>+  s   €  1¤4¨=Ò#8€ r2   rá  c                 ó   — | j         dk    S )Nr³   rê   rp  s    r3   rv  z_sink_params.<locals>.<lambda>/  s   € ¨¬°Ò)>€ r2   c                 ó<   •— | j         ‰t          ‰¦  «                 vS rN   )rà   rÐ   )r/  rm  Ú	submodules    €€r3   rv  z_sink_params.<locals>.<lambda>7  s   ø€ ˜aœfÐ,GÍÈ9ÉÌÔ,VÐV€ r2   rL   c                 óD   — g | ]}|                      d ¦  «        d         ‘ŒS r’  r“  r?  s     r3   r¸   z _sink_params.<locals>.<listcomp>E  s&   € Ð)IÐ)IÐ)I¸a¨!¯'ª'°#©,¬,°q¬/Ð)IÐ)IÐ)Ir2   zBexpected state_attr to be torch.Tensor or torch.ScriptObject, got r³  T)Úpropagate_meta)%r   rV   rÐ   r\   r]   r  r
   r[   r­   r‰   r–   r^   r<   r‹   r¦   r`   ra   r‡   Úfilterr   rH   r?   rŽ   rà   rU   r'  r   rc   re   r}  r~  rº   rƒ  Ú
erase_noder  r    r›   )r)   r,  rl  rm  rà   Úsubmod_id_to_inputs_removedrQ   rŒ  rv   rû  Úthe_last_inputÚcall_module_nodesrš   Úinputs_to_state_of_scopeÚ
state_nameÚsnÚsn_splitÚinputs_removedÚ	attr_pathÚ
state_attrru  rs  s      `                 @r3   r  r  û  sa  øø€ ð, #Ð*Ý&1µ#Ñ&6Ô&6Ð#å	ˆ&�z„zÐ0Ð0Ð0Ý�6‘
”
Ð7½¸6¹
¼
ÔCÐDÐDð "œ?×0Ò0Ñ2Ô2ð 5ð 5‰ˆˆiÝ&2ÝÐ" IÑ.Ô.ØØ�T�F‰NØ'ñ	'
ô '
Ð#ð 0×5Ò5Ñ7Ô7ð 	5ð 	5‰DˆAˆqØ'¨Ô*×1Ò1°!Ñ4Ô4Ð4Ð4ð	5õ �F˜G TÑ*Ô*€EØ€}�˜EœKÑ(Ô(¨AÒ-Ð-à*Ð*å�e�UœXœ^Ñ,Ô,ð XÝÐVÍÈeÉÌÐVÐVÑWÔWÐWå•&Ð8Ð8¸%¼+ÑFÔFÑGÔG€FÝ  ™[œ[¨AÒ-Ð-�T�T°6¸"´:€Nõ Ð>Ð>ÀÄÑLÔLÐØ!ð 
ð 
ˆÝ˜f d¤kÑ2Ô2ˆ	ð Ð ¥R¨	¡]¤]Ð6QÐ%QÐ%QÝÝØVÐVÐVÐVÐVØ”Iñô ñô ˆDŒIøð @BÐØð 4ð 4ˆØŒ9˜OÐ+Ð+Øàˆ
Ø! $¤)Ô,ð 	ð 	ˆBØ—x’x ‘}”}ˆHØ˜�#˜e™*œ*˜Ô%Ð)IÐ)IÀ5Ð)IÑ)IÔ)IÒIÐIØ%�
Ø�ð Jð ÐØà)3Ð  Ñ&Ð&õ  #™uœu€Nà4×:Ò:Ñ<Ô<ð &ñ &ÑˆˆjÝˆtŒz‰?Œ?˜QÒÐØ"¥3 u¡:¤: < <Ô0ˆIÝ0°¸ÑCÔCˆJÝ˜j­5¬<½Ô9KÐ*LÑMÔMð Ý$ØkÕY]Ð^hÑYiÔYiÐkÐkñô ð ð
 ×&Ò& ~Ñ6Ô6ð Nð NØ ×,Ò,¨Z¸¿ºÀ)Ñ9LÔ9LÑMÔM�ðNð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð Nð ×&Ò& xÀÐ&ÑEÔEÐEà×Ò˜ÑÔÐØ×Ò˜4œ9Ñ%Ô%Ð%Ñ%å�&Õ+Ñ,Ô,ð Ø�ŠÑÔÐåˆv‰JŒJ˜Ð'Ð's   Ì	*L?Ì?M	ÍM	)TrN   )rÖ   )grÆ   rü  ÚloggingrÂ  rÙ  Úcollectionsr   Úcollections.abcr   Ú
contextlibr   r   Údataclassesr   Úenumr   Útypingr	   r
   r<   Útorch.fx._pytreer‹   Ú_pytreerÈ  Útorch.utils._pytreeÚutilsrÈ   Ú"torch._library.fake_class_registryr   Útorch._library.opaque_objectr   Útorch.exportr   Útorch.export._tree_utilsr   Útorch.export.exported_programr   r   r   r   r   r   r   r   Útorch.fx._symbolic_tracer   Útorch.fx.graph_moduler   r   r   r   r   Ú_remove_effect_tokens_passr   Ú	getLoggerr*   r–  Ú__all__r%   r6   rC   rE   rY   rZ   rs   Úboolrj   rl   r    r!   ÚABCr   r"   r#   r¦   r÷   rù   rø   r•  r¥  rº  r¿  r“   r«  rÆ  rË  rÍ  rÐ  rÕ  r@   r]  rO   rÝ  r÷  rü   rÊ   r  rú   rV   rþ   r  r‡   r  r1   r2   r3   ú<module>r™     s�  ðà 
€
€
€
Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø (Ð (Ð (Ð (Ð (Ð (Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à =Ð =Ð =Ð =Ð =Ð =ð €gÔ˜Ñ!Ô!€ðð ð €ðð ð ð ð �ñ ô ð ð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð Ð ð ð(ð (ñ „ð(ð" ð=0ð =0Øð=0àŒxŒð=0ð ð=0ð ð	=0ð
 ð=0ð =0ð =0ð =0ð@	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð\
ð \
ð \
ð \
ð \
˜¨¬¬ñ \
ô \
ð \
ð~."ð ."ð ."ð ."ð ." .°%´(´/ñ ."ô ."ð ."ðbð ð ð ð �c”gñ ô ð ð,S
ð S
ð S
ð S
ð S
˜¨¬¬ñ S
ô S
ð S
ðn JNð!ð !Øð!Ø0?À$Ñ0Fð!àð!ð !ð !ð !ðHH)ØŒ8Œ>ðH)à)ðH)ð 
ðH)ð H)ð H)ð H)ðV˜UœXœ^ð °°d±
ð ð ð ð ð$ð $ð $ðNRð Rð Rð
6 #ð 6°#ð 6¸#ð 6ð 6ð 6ð 6ð$6 ¤¤ð 6°E´H´Oð 6ð 6ð 6ð 6ðB�%”(”/ð ¨Cð ð ð ð ð˜%œ(Ô.ð ¸¼¼ð ð ð ð ðRØŒÔÐ0Ñ0Ð3DÑDðRà
„X„]ðRð Rð Rð RðMØŒÔÐ0Ñ0Ð3DÑDðMà
„X„]ðMð Mð Mð Mð%˜œœð %°ð %ð %ð %ð %ð* >Bð	)ð )Ø	ŒŒð)àð)ð ”8”?ð)ð ˜S˜E 5¤8¤?Ð2Ô3°dÑ:ð	)ð )ð )ð )ð41�Sð 1˜Sð 1 Sð 1ð 1ð 1ð 1ðJ˜Sð J¨ð J°ð Jð Jð Jð Jð
vð vð vð vð vñ vô vð vðr ðð ð ð ð ñ ô ñ „ðð$ E¤H¤Nð $ÐARð $ð $ð $ð $ð4 GIð,ð ,ØŒHŒOð,Ø(,¨S°#¨X¬ð,Ø@Cð,ð ,ð ,ð ,ð2B=ð B=ð B=ð B=ð B=ñ B=ô B=ð B=ðJ	'ØŒÔð	'à"ð	'ð �S˜#˜cœ(�]Ô#ð	'ð 	'ð 	'ð 	'ð(#ð (#ð (#ð^ ?Cð	t(ð t(ØŒHŒOðt(à˜#˜t Cœy˜.Ô)ðt(ð �Œ9ðt(ð "& c¨3¨s¬8 mÔ!4°tÑ!;ð	t(ð t(ð t(ð t(ð t(ð t(r2   