§
    Ÿ²Åj» ã                   óœ  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ 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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%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3 d dlm4Z4m5Z5 ddl6m7Z7  ej8        e9¦  «        Z:g d¢Z; G d„ de¦  «        Z<da=ed„ ¦   «         Z>	 dUdeej?        ej@        ejA        jB        f         dejA        jB        deCde<deDf
d„ZE G d„ dejA        jB        ¦  «        ZF G d„ dejA        jB        ¦  «        ZG G d„ d e jH        ¦  «        ZI G d!„ d"ejA        jB        ¦  «        ZJ	 dVd#e&d$eeI         d%eJfd&„ZKd'ej        jL        d(e'd%dfd)„ZMd*„ ZNd+eCd,eCd%eCfd-„ZOd.ejA        jB        d/ejA        jB        fd0„ZPd1ejA        jB        d%eCfd2„ZQd1ej        jR        d%ej        jS        fd3„ZTd1eej        jR        eFeJf         d%ej        jS        fd4„ZUd1eej        jR        eFeJf         d%ej        jS        fd5„ZVd6ejA        jB        deCfd7„ZW	 dVd6ejA        jB        deCd8ejA        jB        d9eeeCgejA        jB        f                  fd:„ZXd;eCd<eYd%eCfd=„ZZd>eCd;eCd%eDfd?„Z[ G d@„ dA¦  «        Z\e G dB„ dC¦  «        ¦   «         Z]dDej        jL        dEeJfdF„Z^	 dWdHejA        jB        dIeeCeYf         dJeCfdK„Z_ G dL„ dM¦  «        Z`d1ej        jR        dEeJdNeeCeeC         f         fdO„ZadP„ Zb	 dVd#ejA        jB        dQeeCeeC         f         dReeC         dSeeeYeeC         f                  fdT„ZcdS )Xé    N)Údefaultdict)Úcontextmanager)Údeepcopy)Ú	dataclass)ÚEnum)	ÚAnyÚCallableÚcastÚDictÚListÚOptionalÚSetÚTupleÚUnion)ÚFakeScriptObject)Úreorder_kwargs)	ÚConstantArgumentÚExportedProgramÚExportGraphSignatureÚ	InputKindÚModuleCallSignatureÚSymBoolArgumentÚSymFloatArgumentÚSymIntArgumentÚTensorArgument)Úis_fx_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© ó    úGC:\Projects\Historical\venv\Lib\site-packages\torch/export/unflatten.pyr*   r*   1   s"   € € € € € Ø€IØ€FØ€HØ€F€F€Fr7   r*   Tc               #   ó8   K  — t           } da 	 d V — | a d S # | a w xY w)NF)ÚRUN_WITH_INTERPRETER)Úold_flags    r8   Ú_disable_interpreterr<   ;   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    r8t          | t          j        j        ¦  «        sJ ‚|                     || ¦  «         ŒK|t          j        k    r5t          | t          j        ¦  «        sJ ‚|                     || |¬¦  «         Œ�|t          j        k    rYt          | t&          ¦  «        r
J d¦   «         ‚t          | t          j        t          j        f¦  «        sJ ‚t          ||| ¦  «         Œù|t          j        k    r2t          | t          j        j        ¦  «        sJ ‚t          ||| ¦  «         �Œ=d S )Nú.c              3   óB   •K  — | ]\  }}t          |‰¦  «        ¯|V — Œd S ©N)Ú_is_call_name)Ú.0ÚkÚt_callÚitems      €r8   ú	<genexpr>z_assign_attr.<locals>.<genexpr>\   sK   øè è € ð ð á�A�vÝ   DÑ)Ô)ðØðð ð ð ð ð r7   )rA   z2FakeScriptObject should only exist during tracing.)ÚsplitÚsetÚhasattrÚsetattrÚtorchÚnnÚModuleÚupdateÚ_modulesÚitemsr*   r2   Ú
isinstanceÚ	ParameterÚregister_parameterr3   ÚTensorÚregister_bufferr4   r   ÚScriptObjectr5   )
r=   r>   r?   r@   rA   ÚprefixÚfieldÚ
to_modulesÚtsrJ   s
            @r8   Ú_assign_attrr`   H   s6  ø€ ð —\’\ #Ñ&Ô&�N€VˆUð �€JØð 
ð 
ˆÝ#&¡5¤5ˆØ#ð 	ð 	ˆIÝ˜9 dÑ+Ô+ð <Ý˜	 4­¬¯ªÑ):Ô):Ñ;Ô;Ð;Ø�IŠIð ð ð ð à!*Ô!3×!9Ò!9Ñ!;Ô!;ðñ ô ñ ô ð ð ð
 ˆ
ˆ
àð 0ñ 0ˆ	Ø�	Ô+Ò+Ð+Ý˜h­¬Ô(:Ñ;Ô;Ð;Ð;Ð;Ø×(Ò(¨°Ñ9Ô9Ð9Ð9Ø�)Ô*Ò*Ð*Ý˜h­¬Ñ5Ô5Ð5Ð5Ð5Ø×%Ò% e¨XÀ*Ð%ÑMÔMÐMÐMØ�)Ô,Ò,Ð,Ý!ØÕ*ñô ð Dð DàCñDô Dð õ Øå”LÝÔ&ðñô ð ð ð õ �I˜u hÑ/Ô/Ð/Ð/Ø�)Ô*Ò*Ð*Ý˜h­¬¬Ñ8Ô8Ð8Ð8Ð8Ý�I˜u hÑ/Ô/Ð/ùð+0ð 0r7   c                   ó„   ‡ — e Zd ZU dZeej        j                 ed<   dej        j	        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.
    Úgraph_moduleÚgraphc                 ó†   •— t          ¦   «                              ¦   «          || _        | | j        _        t          | _        d S rE   )ÚsuperÚ__init__rc   Úowning_moduler:   Ú_run_with_interpreter)Úselfrc   Ú	__class__s     €r8   rf   zInterpreterModule.__init__ƒ   s:   ø€ õ 	‰Œ×ÒÑÔÐØˆŒ
Ø#'ˆŒ
Ô Ý%9ˆÔ"Ð"Ð"r7   c                 ó~  ‡— | j         €
J 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    sJ ‚t          |¦  «        t          | j	        ¦  «        k    sJ ‚t          |¦  «        }t          j                             | | j        ¬¦  «        j        |ddiŽS )Nz&Didn't finalize this InterpreterModulec              3   ó0   •K  — | ]}|‰v ¯‰|         V — Œd S rE   r6   )rG   Ú
kwarg_nameÚkwargss     €r8   rK   z,InterpreterModule.forward.<locals>.<genexpr>ž   s?   øè è € ð  ð  à"Ø! VÐ+Ð+ð ˜:Ô&à+Ð+Ð+Ð+ð ð  r7   ©rc   Úenable_io_processingF)rb   r   rP   ÚcompilerÚis_dynamo_compilingrh   ÚtypeÚforwardÚlistÚ	arg_namesÚlenÚextendÚtupleÚfxÚInterpreterrc   Úrun)ri   Úargsrn   Úarg_listÚkwarg_namess     `  r8   rt   zInterpreterModule.forwardŒ   sc  ø€ ØÔ Ð,Ð,Ð.VÑ,Ô,Ð,Ý‰Œð 	ÝŒN×.Ò.Ñ0Ô0ð	Ø8<Ô8Rð	ð 3•4˜Ô)Ñ*Ô*Ô2°4ÐI¸$ÐIÐIÐIÀ&ÐIÐIÐIàð 'õ
   ™:œ:�Ø"œn­S°©]¬]¨_¨_Ô=�Ø—’ð  ð  ð  ð  à&1ð ñ  ô  ñ ô ð õ ˜;Ñ'Ô'­3¨v©;¬;Ò6Ð6Ð6Ð6Ý˜8‘}”}­¨D¬NÑ(;Ô(;Ò;Ð;Ð;Ð;Ý˜X‘”�å”8×'Ò'¨°D´JÐ'Ñ?Ô?ÔCØðØ,1ðð ð r7   c                 ó  — t           j                             | | j        ¦  «        | j        d<   | j                             ¦   «          g | _        | j        j        D ],}|j        dk    r| j         	                    |j
        ¦  «         Œ-d S )Nrb   Úplaceholder)rP   rz   ÚGraphModulerc   Ú__dict__Úlintrv   ÚnodesÚopÚappendr?   ©ri   Únodes     r8   ÚfinalizezInterpreterModule.finalize¯   sƒ   € õ ).¬×(<Ò(<¸TÀ4Ä:Ñ(NÔ(NˆŒ�nÑ%ØŒ
�ŠÑÔÐð ˆŒØ”JÔ$ð 	3ð 	3ˆDØŒw˜-Ò'Ð'Ø”×%Ò% d¤kÑ2Ô2Ð2øð	3ð 	3r7   TFc                 ó*   — t          | d||||¦  «        S )Nr%   ©r   ©ri   Úprint_outputÚinclude_strideÚinclude_deviceÚcoloreds        r8   Úprint_readablez InterpreterModule.print_readableÀ   ó(   € õ ØØØØØØñ
ô 
ð 	
r7   ©TFFF)r/   r0   r1   Ú__doc__r   rP   rz   r‚   Ú__annotations__ÚGraphrf   rt   rŠ   r’   Ú__classcell__©rj   s   @r8   r%   r%   {   s®   ø€ € € € € € ðð ð
 ˜5œ8Ô/Ô0Ð0Ð0Ñ0ð:àŒxŒ~ð:ð :ð :ð :ð :ð :ð!ð !ð !ðF3ð 3ð 3ð& ØØØð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r7   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J ‚|d         j        | _        |D ]'}t          | |t	          |d         |¦  «        ¦  «         Œ(|| _        d| _        d S ©Nr   )re   rf   rT   rO   ÚgetattrÚ_call_modulesÚ
_num_calls)ri   r›   rœ   Úaccessorrj   s       €r8   rf   z$InterpreterModuleDispatcher.__init__Ø   sy   ø€ Ý‰Œ×ÒÑÔÐØÐÐˆ|Ø$ QœÔ0ˆŒØð 	Hð 	HˆHÝ�D˜(¥G¨L¸¬O¸XÑ$FÔ$FÑGÔGÐGÐGØ)ˆÔØˆŒˆˆr7   c                 ó¬   — | j         | j                 }| j        dz   t          | j         ¦  «        z  | _        	  ||i |¤ŽS # t          $ r	 d| _        ‚ w xY w)Nr"   r   )r    r¡   rw   Ú	Exception)ri   r}   rn   Úcall_modules       r8   rt   z#InterpreterModuleDispatcher.forwardá   sn   € ØÔ(¨¬Ô9ˆØœ?¨QÑ.µ#°dÔ6HÑ2IÔ2IÑIˆŒð	Ø�; Ð/¨Ð/Ð/Ð/øÝð 	ð 	ð 	ØˆDŒOØð	øøøs   ¸A  Á Ac                 ó   — | j         S rE   )r    ©ri   s    r8   rœ   z(InterpreterModuleDispatcher.call_modulesê   s   € ØÔ!Ð!r7   TFc                 ó`   ‡‡‡‡— ˆˆˆˆfd„| j         D ¦   «         }d                     |¦  «        S )Nc                 ó@   •— g | ]}|                      ‰‰‰‰¦  «        ‘ŒS r6   )r’   )rG   Úmodr‘   r�   r�   rŽ   s     €€€€r8   ú
<listcomp>z>InterpreterModuleDispatcher.print_readable.<locals>.<listcomp>ô   sG   ø€ ð 
ð 
ð 
ð ð ×ÒØØØØñ	ô ð
ð 
ð 
r7   ú
)r    Újoin)ri   rŽ   r�   r�   r‘   Úoutputss    ```` r8   r’   z*InterpreterModuleDispatcher.print_readableí   sV   øøøø€ ð
ð 
ð 
ð 
ð 
ð 
ð 
ð Ô)ð
ñ 
ô 
ˆð �yŠy˜Ñ!Ô!Ð!r7   r”   )r/   r0   r1   r•   r   Ústrr   r%   rf   rt   rœ   r’   r˜   r™   s   @r8   r&   r&   Ñ   sŸ   ø€ € € € € ðð ð˜c #œhð °dÐ;LÔ6Mð ð ð ð ð ð ðð ð ð"ð "ð "ð
 ØØØð"ð "ð "ð "ð "ð "ð "ð "r7   r&   c            
       óp   — e Zd ZdZej        dej        dej        dee	         dee	         fd„¦   «         Z
dS )r$   zN
    Adapts input arguments with ``input_spec`` to align ``target_spec``.
    Útarget_specÚ
input_specÚ
input_argsÚreturnc                 ó   — dS )z=NOTE: This adapter may mutate given ``input_args_with_path``.Nr6   )ri   r±   r²   r³   s       r8   ÚadaptzFlatArgsAdapter.adapt  s	   € ð 	ˆr7   N)r/   r0   r1   r•   ÚabcÚabstractmethodÚpytreeÚTreeSpecr   r   r¶   r6   r7   r8   r$   r$      st   € € € € € ðð ð 	Ôðà”_ðð ”Oðð ˜”Ið	ð
 
ˆcŒðð ð ñ Ôðð ð r7   r$   c                   óf   ‡ — e Zd Z	 ddedee         fˆ f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„ |j        D ¦   «         }|d         dk    sJ ‚t          |j        ¦  «        }t          |j        ¦  «        | _        t          j	         
                    ¦   «         | _        | | j        _        t          |j        ¦  «        | _        || _        d| _        t          | _        t!          || j        ¦  «         t#          ¦   «         | _        t'          || ¦  «        \  }}| j                             |                     ¦   «         | ¦  «         t-          |j        | |¦  «         |j        | _        g | _        |j        }t7          ¦   «         }i }	| j        j        D ]¨}
||
         }t;          |¦  «        |	vrHt          j                             |                      ¦   «         |j!        ¬¦  «        |	t;          |¦  «        <   tE          |	t;          |¦  «                 | |
tF          j$        ¬¦  «         | %                    |
¦  «         Œ©t7          | j        j&        ¦  «        }t7          ¦   «         }i }| j        j'        D ]£}
|
|v rd}|j(        |
         }n
d}||
         }t;          |¦  «        |vr&|                      ¦   «         |f|t;          |¦  «        <   tE          |t;          |¦  «                 d         | |
tF          j)        |¬	¦  «         | %                    |
¦  «         Œ¤| *                    ¦   «         D ]ô\  }
}|
|v s|
|v rŒd}t;          |¦  «        |v stW          |t          j        j        ¦  «        sd}|r]t;          |¦  «        |vr|df|t;          |¦  «        <   tE          |t;          |¦  «                 d         | |
tF          j)        d¬	¦  «         Œ¡t;          |¦  «        |	vr||	t;          |¦  «        <   tE          |	t;          |¦  «                 | |
tF          j$        ¬¦  «         Œõi }|j(         *                    ¦   «         D ]ˆ\  }}t;          |¦  «        |vr@tW          |t          j,        ¦  «        r|                      ¦   «         }||t;          |¦  «        <   |t;          |¦  «                 }tE          || |tF          j-        ¬¦  «         Œ‰t]          t^          ¦  «        Š$t7          ¦   «         }ˆ$fd
„}t7          ¦   «         }| j        j0        D �]¡}|j1        td          j$        k    s|j1        td          j)        k    r¨|j3        r¡ti          |j5        d¦  «        sJ ‚tW          |j6        tn          ¦  «        sJ ‚ |t;          |j        |j6                 ¦  «        |j5        j8        |j6        ¦  «         | %                    |j6        ¦  «         | %                    |j6        ¦  «         ŒÕ|j1        td          j)        k    r|j3        r*|j1        td          j9        k    s|j1        td          j:        k    r†ti          |j5        d¦  «        sJ ‚tW          |j6        tn          ¦  «        sJ ‚ |t;          |j(        |j6                 ¦  «        |j5        j8        |j6        ¦  «         | %                    |j6        ¦  «         �Œ£|j(         *                    ¦   «         D ]v\  }}||vrmt;          |¦  «        ‰$v s
J d¦   «         ‚‰$t;          |¦  «                 d         \  }} |t;          |¦  «        ||¦  «         | %                    |j6        ¦  «         Œw|j         *                    ¦   «         D ]S\  }}||vrJt;          |¦  «        ‰$vrŒ‰$t;          |¦  «                 d         \  }} |t;          |¦  «        ||¦  «         ŒTi }‰$                     ¦   «         D ]} d„ | D ¦   «         }!| D ]
\  }"}|!||"<   ŒŒtw          | |g ¦  «         ty          |                     ¦   «         ¦  «        Š%ˆ%fd„|D ¦   «         }|  =                    ‰%|¦  «         d„ |D ¦   «         }d„ | j        j>        D ¦   «         | _?        d| _@        d„ tƒ          |¦  «        D ¦   «         }#|  B                    d¬¦  «        D ]\  }
}|
|#vrt‡          |#¦  «        |#|
<   Œt‰          | |#¦  «         | j         E                    ¦   «          d S )Nz%Unflattening on JointExportModule NYIc                 ó   — g | ]	}|j         ‘Œ
S r6   )Úfqn©rG   Úentrys     r8   r«   z.UnflattenedModule.__init__.<locals>.<listcomp>  s   € ÐKÐKÐK %�E”IÐKÐKÐKr7   r   Ú F)Úrequires_grad)r@   T)r@   rA   c                 óF   •— ‰|          }|                      ||f¦  «         d S rE   )r‡   )Úobj_idÚ	node_nameÚtarget_nameÚ	name_listÚ
consts_maps       €r8   Úadd_to_consts_mapz5UnflattenedModule.__init__.<locals>.add_to_consts_map£  s,   ø€ Ø" 6Ô*ˆIØ×Ò˜i¨Ð5Ñ6Ô6Ð6Ð6Ð6r7   Únamez?Constants should be either aliased or appear in graph signaturec                 ó   — g | ]
}|d          ‘ŒS ©r"   r6   )rG   Úts     r8   r«   z.UnflattenedModule.__init__.<locals>.<listcomp>×  s   € Ð1Ð1Ð1 �q˜”tÐ1Ð1Ð1r7   c                 ó   •— g | ]}|‰v¯|‘Œ	S r6   r6   )rG   rÀ   Úredirected_call_indicess     €r8   r«   z.UnflattenedModule.__init__.<locals>.<listcomp>Þ  s$   ø€ ÐRÐRÐR˜C¨sÐ:QÐ/QÐ/Q�CÐ/QÐ/QÐ/Qr7   c                 ó   — g | ]}d |v¯|‘Œ	S )ú@r6   )rG   rÀ   s     r8   r«   z.UnflattenedModule.__init__.<locals>.<listcomp>á  s   € Ð>Ð>Ð>˜C¨s¸#¨~¨~�C¨~¨~¨~r7   c                 ó(   — g | ]}|j         d k    ¯|‘ŒS ©r�   ©r†   ©rG   r‰   s     r8   r«   z.UnflattenedModule.__init__.<locals>.<listcomp>æ  s+   € ð #
ð #
ð #
Ø°´¸MÒ1IÐ1IˆDÐ1IÐ1IÐ1Ir7   c                 ó   — i | ]\  }}||“Œ	S r6   r6   )rG   ÚirÀ   s      r8   ú
<dictcomp>z.UnflattenedModule.__init__.<locals>.<dictcomp>ë  s   € Ð>Ð>Ð>¡  3�S˜!Ð>Ð>Ð>r7   ©Úremove_duplicate)Fre   rf   Úgraph_signatureÚbackward_signatureÚ
ValueErrorÚmodule_call_graphr   rc   rP   rz   r—   rg   r½   Úadaptedr:   rh   Ú_inplace_buffer_mutationsÚ_IValsÚivalsÚ_outline_submodulesÚcreateÚvaluesÚ_copy_graph_attrsÚ_graph_moduleÚrange_constraintsÚequality_constraintsÚ
state_dictrM   Ú
parametersÚidrQ   rW   ÚclonerÄ   r`   r*   r2   ÚaddÚnon_persistent_buffersÚbuffersÚ	constantsr3   rU   rV   rY   r4   r   ru   Úinput_specsÚkindr   rA   rN   Úargr?   r¯   rÌ   ÚCONSTANT_TENSORÚ
CUSTOM_OBJÚ_sink_paramsÚ_deduplicate_modulesÚ_dispatch_modulesr…   Úinput_placeholdersÚcheck_input_constraintsÚ	enumerateÚnamed_modulesrw   Ú_reorder_submodulesr„   )'ri   r¼   r½   Úfqn_listÚexport_graphÚseen_modulesÚ
seen_attrsrì   Úassigned_paramsÚid_to_paramrÌ   Úparamrñ   Úassigned_buffersÚid_to_bufferrA   r,   ÚtensorÚ	is_bufferÚid_to_constrÀ   r-   Ú	_constantÚconsts_targetsrË   Úadded_params_buffersÚsÚ
const_nameÚconstÚph_nameÚ_Úinputs_to_stateÚnode_targetÚtargetsÚnÚ	fqn_orderrÊ   rÑ   rj   s'                                       @@€r8   rf   zUnflattenedModule.__init__  sA	  øøø€ õ
 	‰Œ×ÒÑÔÐØÔ(Ô;ÐGÝÐDÑEÔEÐEàKÐK¨=Ô+JÐKÑKÔKˆØ˜Œ{˜bÒ Ð Ð Ð Ý Ô 3Ñ4Ô4ˆÝ'¨Ô(EÑFÔFˆÔÝ”X—^’^Ñ%Ô%ˆŒ
Ø#'ˆŒ
Ô Ý!)¨-Ô*IÑ!JÔ!JˆÔØ!2ˆÔàˆŒÝ%9ˆÔ"å! ,°Ô0DÑEÔEÐEå‘X”XˆŒ
õ $7°|ÀTÑ#JÔ#JÑ ˆ�jð 	Œ
×Ò˜,×-Ò-Ñ/Ô/°Ñ6Ô6Ð6õ 	˜-Ô5°t¸ZÑHÔHÐHà!.Ô!@ˆÔØ*,ˆÔ!ð #Ô-ˆ
Ý$'¡E¤EˆØ57ˆØÔ(Ô3ð 	&ð 	&ˆDØ˜tÔ$ˆEÝ�%‰yŒy Ð+Ð+Ý).¬×);Ò);Ø—K’K‘M”M°Ô1Dð *<ñ *ô *��B˜u™IœIÑ&õ Ø�B˜u™IœIÔ&ØØÝ#Ô-ð	ñ ô ð ð ×Ò Ñ%Ô%Ð%Ð%å!$ TÔ%9Ô%PÑ!QÔ!QÐÝ%(¡U¤UÐØCEˆØÔ(Ô0ð 	'ð 	'ˆDØÐ-Ð-Ð-Ø"�
Ø&Ô0°Ô6��à!�
Ø# DÔ)�å�&‰zŒz Ð-Ð-Ø,2¯LªL©N¬N¸JÐ+G��R ™ZœZÑ(åØ�R ™ZœZÔ(¨Ô+ØØÝ#Ô*Ø%ðñ ô ð ð × Ò  Ñ&Ô&Ð&Ð&ð '×,Ò,Ñ.Ô.ð !	ð !	‰LˆD�&Ø�Ð&Ð&¨$Ð2BÐ*BÐ*BØàˆIÝ�&‰zŒz˜\Ð)Ð)µØ�œÔ*ñ2ô 2Ð)ð !�	àð å�v‘J”J lÐ2Ð2ð Øð0�L¥ F¡¤Ñ,õ Ø ¥ F¡¤Ô,¨QÔ/ØØÝ'Ô.Ø#ðñ ô ð ð õ �f‘:”: [Ð0Ð0Ø.4�K¥ 6¡
¤
Ñ+ÝØ¥ 6¡
¤
Ô+ØØÝ'Ô1ð	ñ ô ð ð ð NPˆØ*Ô4×:Ò:Ñ<Ô<ð 	ð 	‰MˆC�Ý�(‰|Œ| ;Ð.Ð.Ý˜h­¬Ñ5Ô5ð 0Ø'Ÿ~š~Ñ/Ô/�HØ,4��B˜x™LœLÑ)Ø#¥B x¡L¤LÔ1ˆIÝØØØÝ#Ô,ð	ñ ô ð ð õ 8CÅ4Ñ7HÔ7Hˆ
Ý#&¡5¤5ˆð	7ð 	7ð 	7ð 	7ð 	7õ *-©¬ÐØÔ%Ô1ð 	-ñ 	-ˆAØŒv�Ô,Ò,Ð,Ø”�)Ô*Ò*Ð*¨q¬|Ð*å˜qœu fÑ-Ô-Ð-Ð-Ð-Ý! !¤(­CÑ0Ô0Ð0Ð0Ð0Ø!Ð!Ý�}Ô/°´Ô9Ñ:Ô:¸A¼E¼JÈÌñô ð ð ×"Ò" 1¤8Ñ,Ô,Ð,Ø$×(Ò(¨¬Ñ2Ô2Ð2Ð2à”�9Ô+Ò+Ð+°A´LÐ+Ø”6�YÔ6Ò6Ð6Ø”6�YÔ1Ò1Ð1å˜qœu fÑ-Ô-Ð-Ð-Ð-Ý! !¤(­CÑ0Ô0Ð0Ð0Ð0Ø!Ð!Ý�}Ô.¨q¬xÔ8Ñ9Ô9¸1¼5¼:ÀqÄxñô ð ð ×"Ò" 1¤8Ñ,Ô,Ð,ùð "/Ô!8×!>Ò!>Ñ!@Ô!@ð 	3ð 	3ÑˆJ˜Ø Ð/Ð/å�u‘I”I Ð+Ð+Ð+ØTñ ,Ô+Ð+à'­¨5©	¬	Ô2°1Ô5‘
�˜Ø!Ð!¥" U¡)¤)¨W°jÑAÔAÐAØ$×(Ò(¨¬Ñ2Ô2Ð2øð )Ô3×9Ò9Ñ;Ô;ð 	<ð 	<‰KˆC�ØÐ.Ð.Ð.Ý�f‘:”: ZÐ/Ð/ð Ø'­¨6©
¬
Ô3°AÔ6‘
�˜Ø!Ð!¥" V¡*¤*¨g°sÑ;Ô;Ð;øð 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 )Ñ,Ô,Ð,ØŒ
�ŠÑÔÐÐÐr7   c                 óî   — |                       ¦   «         D ]_\  }}t          |dz   ¦  «         t          |d¦  «        r8t          |j        t
          j        j        ¦  «        rt          |j        ¦  «         Œ`d S )Nú:rc   )rÿ   ÚprintrN   rV   rc   rP   rz   r—   )ri   rÀ   rª   s      r8   Ú_print_graphzUnflattenedModule._print_graphó  sw   € Ø×*Ò*Ñ,Ô,ð 	!ð 	!‰HˆC�Ý�#˜‘)ÑÔÐÝ�s˜GÑ$Ô$ð !­°C´I½u¼x¼~Ñ)NÔ)Nð !Ý�c”iÑ Ô Ð øð	!ð 	!r7   c                 óF  — | j         d         j        }||j        k    r|S | j        €t	          d¦  «        ‚| j                             |j        ||¬¦  «        }t          |¦  «        |j        j        k    r,t	          dt          |¦  «        › d|j        j        › �¦  «        ‚|S )Nr   zeThere is no flat args adapter sepcified. Are you sure you are calling this with the right arguments? )r±   r²   r³   z<Flat args adaption failed, number of args mismatch Adatped: z 
Exported module: )rà   Ú	signatureÚin_specr½   Ú	TypeErrorr¶   rw   Ú
num_leaves)ri   Ú	flat_argsr   r  s       r8   Ú_adapt_flat_argsz"UnflattenedModule._adapt_flat_argsù  sÕ   € ØÔ*¨1Ô-Ô7ˆ	Ø�iÔ'Ò'Ð'ØÐàÔ!Ð)ÝðOñô ð ð
 Ô.×4Ò4Ø%Ô-Ø"Ø$ð 5ñ ô ˆIõ �9‰~Œ~ Ô!2Ô!=Ò=Ð=ÝðGÝ # I¡¤ðGð Gà(1Ô(9Ô(DðGð Gñô ð ð
 Ðr7   c                 óê  — | j         d         j        }t          ||j        ¦  «        }t	          j        ||f¦  «        \  }}d„ |D ¦   «         }t          ¦   «         r|S ||j        k    rO| j        s+t          d|› d�d|j        › �¦  «         t          d¦  «         |  	                    ||¦  «        }d| _        | j
        r5ddlm} | j        du rd	„ |D ¦   «         }	n|}	 || j        |	| j        ¦  «         |S )
Nr   c                 ó   — g | ]
}|d          ‘ŒS rÎ   r6   ©rG   Úxs     r8   r«   z<UnflattenedModule.process_forward_inputs.<locals>.<listcomp>  s   € Ð7Ð7Ð7˜a�Q�q”TÐ7Ð7Ð7r7   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_graphc                 óR   — g | ]$}t          d ¬¦  «        t          d¬¦  «        f|f‘Œ%S )r   )Úidxz<unknown location>)rÌ   )r!   r    ©rG   rö   s     r8   r«   z<UnflattenedModule.process_forward_inputs.<locals>.<listcomp>3  sJ   € ð +ð +ð +àõ " aÐ(Ñ(Ô(­*Ð:NÐ*OÑ*OÔ*OÐPÐRUÐVð+ð +ð +r7   )rà   r  r   r   r¹   Útree_flatten_with_pathr   rá   r  r$  rý   Útorch._export.utilsr)  rü   rê   )
ri   r}   rn   r  Úreordered_kwargsÚflat_args_with_pathr   r#  r)  Únew_flat_args_with_paths
             r8   Úprocess_forward_inputsz(UnflattenedModule.process_forward_inputs  sm  € ØÔ*¨1Ô-Ô7ˆ	å)¨&°)Ô2CÑDÔDÐå'-Ô'DØÐ#Ð$ñ(
ô (
Ñ$Ð˜Wð 8Ð7Ð#6Ð7Ñ7Ô7ˆ	å‰?Œ?ð 	ØÐà�iÔ'Ò'Ð'Ø”<ð OÝð3Ø'.ð3ð 3ð 3àD°Ô1BÐDÐDñô ð õ
 ÐMÑNÔNÐNØ×-Ò-¨i¸ÑAÔAˆIØˆDŒLàÔ'ð 	ð OÐNÐNÐNÐNÐNàŒ|˜tÐ#Ð#ð+ð +à(ð+ñ +ô +Ð'Ð'ð
 +>Ð'à.Ð.ØÔ'Ð)@À$ÔBXñô ð ð Ðr7   c                 ó†  — t          j                             | 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                             ¦   «         r/| j        s(t          j                             | | j	        ¦  «        |Ž }n0t          j                             | | j	        ¬¦  «        j
        |ddiŽ}t%          j        ||j        ¦  «        S )Nr   ro   rp   Fr"   )rP   Ú_dynamoÚdisabler2  rà   r  r   rz   r{   rc   r|   rV   ry   rw   rq   rr   rh   r‚   r¹   Útree_unflattenÚout_spec)ri   r}   rn   r#  r  Ú
return_valÚtree_outs          r8   rt   zUnflattenedModule.forward@  s8  € Ý”M×)Ò)¨$Ô*EÑFÔFÈÐWÐPVÐWÐWˆ	ØÔ*¨1Ô-Ô7ˆ	å‰?Œ?ð 	Ýœ×-Ò-¨d¸$¼*Ð-ÑEÔEÔIØðØ16ðð ˆJõ ˜*¥eÑ,Ô,ð %µ°Z±´ÀAÒ1EÐ1EØ! !”}Ð$ØÐåŒ>×-Ò-Ñ/Ô/ð 	¸Ô8Rð 	Ý”x×+Ò+¨D°$´*Ñ=Ô=¸yÐIˆHˆHå”x×+Ò+¨D¸¼
Ð+ÑCÔCÔGØðØ16ðð ˆHõ Ô$ X¨yÔ/AÑBÔBÐBr7   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!          |¦  «        D ]\\  }}t#          |
|dz   ¦  «        }||vr@|                     d¦  «        �^ }}t%          | |¦  «        j                             |¦  «         Œ]|                      |
t-          ||
         |¦  «        ¦  «         ŒÈˆfd„}|                      d¬	¦  «        D ]d\  }}t1          |d
¦  «        r |||j        ¦  «         Œ't1          |d¦  «        r-|j        D ]%}t1          |d
¦  «        sJ ‚ |||j        ¦  «         Œ&Œed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Ó   Ú0rC   r"   rÃ   c                 ó   — g | ]\  }}|‘ŒS r6   r6   )rG   r  rª   s      r8   r«   z7UnflattenedModule._dispatch_modules.<locals>.<listcomp>q  s   € ÐKÐKÐK¡F A s˜CÐKÐKÐKr7   c                 óž   •— |j         D ]C}|j        dk    r6|j                             d¦  «        d         }| r| › d|› �n|}|‰v r||_        ŒDd S )Nr¥   rÓ   r   rC   )r…   r†   r?   rL   )r\   rc   r‰   rÀ   ÚpathÚcalled_moduless        €r8   Úelide_call_indicesz?UnflattenedModule._dispatch_modules.<locals>.elide_call_indices  su   ø€ Øœð *ð *�Ø”7˜mÒ+Ð+Øœ+×+Ò+¨CÑ0Ô0°Ô3�CØ06Ð?˜fÐ,Ð, sÐ,Ð,Ð,¸C�DØ˜~Ð-Ð-Ø&)˜œøð*ð *r7   FrÛ   rc   r    N)r   ru   rà   rÀ   r  r   ÚgetrL   r‡   ÚintrM   Úrsplitrð   rU   Úsortedrw   rþ   Ú
_call_namer   rT   ÚpopÚset_submoduler&   rÿ   rN   rc   r    )ri   rÑ   r  rÂ   rÀ   rª   Úbaser+  Ú	attrs_mapr?   Úorig_fqnrÌ   Úindexed_call_modulesrœ   rÙ   r¥   r\   r@  Úmod_r?  s                      @r8   rû   z#UnflattenedModule._dispatch_modulesU  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Ò$Ð$Ý&/°Ñ&=Ô&=ð Qð Q‘N�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Ð1Ð1Ð1Ø&Ð& s¨D¬JÑ7Ô7Ð7Ð7øð	8ð 	8r7   TFc                 ó*   — t          | d||||¦  «        S )Nr'   rŒ   r�   s        r8   r’   z UnflattenedModule.print_readable�  r“   r7   rE   r”   )r/   r0   r1   r   r   r$   rf   r  r$  r2  rt   rû   r’   r˜   r™   s   @r8   r'   r'     sÚ   ø€ € € € € ð 8<ð`ð `à&ð`ð $ OÔ4ð`ð `ð `ð `ð `ð `ðD!ð !ð !ðð ð ð2,ð ,ð ,ð\Cð Cð Cð*88ð 88ð 88ðx ØØØð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r7   r'   r.   r½   r´   c                 ó@   — t          | ¦  «        } t          | |¦  «        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
    hierachy 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.
    )r#   r'   )r.   r½   s     r8   r(   r(      s"   € õ, # 6Ñ*Ô*€FÝ˜VÐ%6Ñ7Ô7Ð7r7   rc   rÝ   c                 óB  ‡— t          t          t          | j        ¦  «        ¦  «        ¦  «        }|j        dk    rt          |j        ¦  «        dk    sJ ‚|j        d         }|j        }|dt          |¦  «        …         }d„ |j         	                    ¦   «         D ¦   «         }d„ | j        D ¦   «         }|D ]¼}||j
                 }	||	         }
||
         }|                      |¦  «        5  |                      dt          j        j        j        ||f¦  «        Š|j         	                    ¦   «         D ]\  }}|‰j        |<   Œ	 ddd¦  «         n# 1 swxY w Y   |                     ‰ˆfd„¦  «         Œ½t'          |t          |¦  «        d…         ¦  «        }|f|_        dS )	a  Transform buffer mutations from their functionalized form into a copy_
    node in the graph.

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

    Will become 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,)
    Úoutputr"   r   Nc                 ó   — i | ]\  }}||“Œ	S r6   r6   )rG   rH   Úvs      r8   rÚ   z-_inplace_buffer_mutations.<locals>.<dictcomp>Ù  s   € ÐTÐTÐT¡$ ! Q˜˜AÐTÐTÐTr7   c                 ó4   — i | ]}|j         d k    ¯|j        |“ŒS rÕ   )r†   rÌ   r×   s     r8   rÚ   z-_inplace_buffer_mutations.<locals>.<dictcomp>Ú  s/   € ð ð ð Ø °4´7¸mÒ3KÐ3KˆŒ	�4Ð3KÐ3KÐ3Kr7   Úcall_functionc                 ó   •— | ‰uS rE   r6   )r(  Únew_nodes    €r8   ú<lambda>z+_inplace_buffer_mutations.<locals>.<lambda>ê  s   ø€ ¸1ÀHÐ;L€ r7   )ÚnextÚiterÚreversedr…   r†   rw   r}   Úbuffers_to_mutateÚinputs_to_buffersrU   rÌ   Úinserting_afterÚcreate_noderP   ÚopsÚatenÚcopy_ÚmetaÚreplace_all_uses_withry   )rc   rÝ   Úoutput_nodeÚreturn_argsÚmutation_node_to_bufferÚ	mutationsÚbuffers_to_inputsÚinput_name_to_nodeÚmutationÚbuffer_nameÚ
input_nameÚ
input_noderH   rR  Úuser_outputsrV  s                  @r8   râ   râ   º  s  ø€ õ2 •t�H U¤[Ñ1Ô1Ñ2Ô2Ñ3Ô3€KØŒ>˜XÒ%Ð%­#¨kÔ.>Ñ*?Ô*?À1Ò*DÐ*DÐ*DÐDØÔ" 1Ô%€Kà-Ô?ÐØÐ:�cÐ"9Ñ:Ô:Ð:Ô;€IØTÐT¨/Ô*K×*QÒ*QÑ*SÔ*SÐTÑTÔTÐðð Ø$)¤Kðñ ô Ðð ð Nð NˆØ-¨h¬mÔ<ˆØ& {Ô3ˆ
Ø'¨
Ô3ˆ
à×"Ò" 8Ñ,Ô,ð 	%ð 	%Ø×(Ò(Ø¥¤¤Ô!5¸
ÀHÐ7Mñô ˆHð !œ×+Ò+Ñ-Ô-ð %ð %‘��1Ø#$�”˜aÑ Ð ð%ð		%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	×&Ò& xÐ1LÐ1LÐ1LÐ1LÑMÔMÐMÐMõ
 Ø•CÐ/Ñ0Ô0Ð2Ð2Ô3ñô €Lð &Ð(€KÔÐÐs   Ã*AEÅE	ÅE	c                 óx   — t          | ¦  «        t          |¦  «        k     o|dt          | ¦  «        …         | k    S )z2Check whether `candidate` is a prefix of `target`.N)rw   )Ú	candidater?   s     r8   Ú
_is_prefixrq  õ  s4   € åˆy‰>Œ>�C ™KœKÒ'ÐQ¨FÐ3CµS¸±^´^Ð3CÔ,DÈ	Ò,QÐQr7   Ú
parent_fqnÚ	child_fqnc                 ó  — | dk    r|S |                       d¦  «        }|                      d¦  «        }|d t          |¦  «        …         |k    rt          d|› d| › d�¦  «        ‚d                     |t          |¦  «        d …         ¦  «        S )NrÃ   rC   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.)rL   rw   ÚRuntimeErrorr­   )rr  rs  Úparent_splitÚchild_splits       r8   Ú_compute_accessorrx  ú  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Ð5r7   r(  Úyc                 ó  — dt           j        j        dt          fd„}t	          | j        t           j        j        ¦  «        sJ ‚t	          |j        t           j        j        ¦  «        sJ ‚ || j        ¦  «         ||j        ¦  «        k    S )Nrc   r´   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 )Nr´   c                 óª   •— t          | t          j        j        ¦  «        r%dt	          ‰t          | ¦  «                 ¦  «        z   S t	          | ¦  «        S )Nú%)rV   rP   rz   ÚNoder¯   rî   )rö   Ú	nodes_idxs    €r8   Ú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ˆOr7   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r6   )r¯   r,  s     r8   r«   z@_check_graph_equivalence.<locals>.graph_dump.<locals>.<listcomp>  s   € ÐRÐRÐR c�˜S™œÐRÐRÐRr7   c                 ó"   — g | ]\  }}|› d |› �‘ŒS )ú=r6   )rG   ÚkeyÚvalues      r8   r«   z@_check_graph_equivalence.<locals>.graph_dump.<locals>.<listcomp>  s:   € ð ð ð á�C˜ð Ð Ð ˜Ð Ð ðð ð r7   )rT  Úget_attrrÃ   z: ú[z](z, ú)r¬   )r¯   rþ   r…   r¹   Útree_mapr}   rn   rU   r†   r?   r‡   r­   rî   )rc   Úretr€  rÙ   r‰   Ú	args_dumpr?   r  s          @r8   Ú
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˜‰~Œ~Ðr7   )rP   rz   r—   r¯   rV   rc   )r(  ry  rŒ  s      r8   Ú_check_graph_equivalencer�    s…   € ð�%œ(œ.ð ­Sð ð ð ð õ( �a”g�uœxœ~Ñ.Ô.Ð.Ð.Ð.Ý�a”g�uœxœ~Ñ.Ô.Ð.Ð.Ð.Øˆ:�a”gÑÔ * *¨Q¬WÑ"5Ô"5Ò5Ð5r7   Úgmc                 óŒ   — d}t          | d|› �¦  «        r|dz  }t          | d|› �¦  «        °d|› �}t          | ||¦  «         |S )Nr   Ú_spec_r"   )rN   rO   )rŽ  ÚspecrÙ   rÌ   s       r8   Ú	_add_specr’  &  sd   € Ø	€AÝ
�"�l˜q�l�lÑ
#Ô
#ð Ø	ˆQ‰ˆõ �"�l˜q�l�lÑ
#Ô
#ð à�Aˆ<ˆ<€DÝˆB��dÑÔÐØ€Kr7   c                 ó    — | j                              t          j        |f¦  «        }| j                              t          j        |df¦  «        }|S rž   )rc   rT  r¹   Útree_flattenÚoperatorÚgetitem)rŽ  r‰   ÚflattenÚ	getitem_0s       r8   Ú_generate_flattenr™  /  sB   € ØŒh×$Ò$¥VÔ%8¸4¸'ÑBÔB€GØ”×&Ò&¥xÔ'7¸'À1¸ÑFÔF€IØÐr7   c                 ó¤   — t          | |¦  «        }| j                             |¦  «        }| j                             t          j        ||f¦  «        S rE   )r’  rc   r†  rT  Ú	fx_pytreeÚtree_flatten_spec)rŽ  r‰   r‘  rÌ   Ú	spec_nodes        r8   Ú_generate_flatten_specrž  5  sH   € õ �R˜ÑÔ€DØ”×!Ò! $Ñ'Ô'€IØŒ8×!Ò!¥)Ô"=ÀÀiÐ?PÑQÔQÐQr7   c                 ó¤   — t          | |¦  «        }| j                             |¦  «        }| j                             t          j        ||f¦  «        S rE   )r’  rc   r†  rT  r¹   r6  )rŽ  r…   r‘  rÌ   r�  s        r8   Ú_generate_unflattenr   =  sH   € õ �R˜ÑÔ€DØ”×!Ò! $Ñ'Ô'€IØŒ8×!Ò!¥&Ô"7¸%ÀÐ9KÑLÔLÐLr7   rª   c                 óÒ   — |                      d¦  «        �^ }}|D ]<}t          | |d ¦  «        }|€ d S t          |t          j        j        ¦  «        s d S |} Œ=t          | |d ¦  «        S ©NrC   )rL   rŸ   rV   rP   rQ   rR   )rª   r?   r\   r]   rJ   Úsubmods         r8   Ú_get_submoduler¤  E  sy   € Ø—\’\ #Ñ&Ô&�N€VˆUàð 	ð 	ˆÝ˜˜d DÑ)Ô)ˆàˆ>Ø�4�4å˜&¥%¤(¤/Ñ2Ô2ð 	Ø�4�4àˆˆå�3˜˜tÑ$Ô$Ð$r7   Ú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 )NrC   r"   F)
rL   rþ   rŸ   r­   rP   rQ   rR   rO   rV   Ú
add_module)	rª   r?   r¥  r¦  r\   r]   rÙ   rJ   r£  s	            r8   Ú_add_submoduler©  V  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˜-Ñ(Ô(Ð(Ð(Ð(r7   rH  r  c                 ó&   — |dk    r| n	| › d|dz
  › �S )Nr"   rÓ   r6   )rH  r  s     r8   rE  rE  p  s$   € ð ˜’6�6ˆ4ˆ4 $˜˜¨¨1©˜˜Ð.r7   Ú	call_namec                 óZ   — t          j        t          j        |¦  «        dz   | ¦  «        d uS )Nz(@\d+)?$)ÚreÚmatchÚescape)r«  rH  s     r8   rF   rF   v  s&   € åŒ8•B”I˜d‘O”O kÑ1°9Ñ=Ô=ÀTÐIÐIr7   c                   óò   — e Zd Z	 ddej        j        deej        j        df         deee	e
f                  dee	ef         deeej        j        ef                  f
d„Zd	„ Zd
„ Z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 ‰ _        nZ‰ 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        ¦  «        }|��¥‰ j        ��Ÿ|j         j!        dk    sJ ‚|j         j"        d         }|j         j"        d         }|j#        �J ‚|j#        €J ‚‰ j         $                    d ¦  «        5  ˆ fd	„tK          |j!        ¦  «        D ¦   «         }i }|j#        D ]}‰ j         &                    |¦  «        ||<   Œ tO          ‰ j        tQ          |¦  «        |f|j         ¦  «        }tS          |j*        ¦  «        D ]º\  }}‰ j         +                    d
tX          j-        ||ft]          |t^          ¦  «        s|j0        nd|› �¬¦  «        }t]          |t^          ¦  «        rŒd|j0        ‰ j        v rHtc          j1        ‰ j        |j0                 j2        ¦  «        |_2        |‰ j        ‰ j        |j0                 <   Œ»	 d d d ¦  «         n# 1 swxY w Y   ‰ j        j         3                    ‰ j        ¦  «        5  g }|j*        D ]½}t]          |t^          ¦  «        r|                     |j4        ¦  «         Œ2|j0        ‰ j        vr|                     d ¦  «         ŒVt]          |tj          tl          tn          tp          f¦  «        sJ ‚|                     ‰ j         9                    ‰ j        |j0                 ¦  «        ¦  «         Œ¾tu          ‰ j        j        ||j         ¦  «        }‰ j        j         ;                    tX          j-        |df¦  «        Š‰ j        j         ;                    tX          j-        |df¦  «        Šˆˆ fd„tK          |j!        ¦  «        D ¦   «         }ˆˆ fd„|j#        D ¦   «         }d d d ¦  «         n# 1 swxY w Y   ‰ j        €J ‚tQ          |¦  «        ‰ j        _<        |‰ j        _=        d S d S d S )NFéÿÿÿÿr"   rä   c                 óÈ   •— ‰j         r‰j         › d| › �n| }|‰j        v r‰j        |         S t          t          j                             ¦   «         ¦  «        }|‰j        |<   |S r¢  )rÀ   Úcreated_modulesr%   rP   rz   r—   )rÀ   r>  r£  Úparentri   s      €€r8   r¦  z,_ModuleFrame.__init__.<locals>.create_module°  sk   ø€ Ø06´
ÐC˜&œ*Ð,Ð, sÐ,Ð,Ð,À�Ø˜4Ô/Ð/Ð/ØÔ/°Ô5Ð5Ý*­5¬8¯>ª>Ñ+;Ô+;Ñ<Ô<�Ø-3�Ô$ TÑ*Ø�r7   r   )rr  Úparent_moduleÚparent_call_modulerÀ   Úcall_idxr.   é   c                 óJ   •— g | ]}‰j                              d |› �¦  «        ‘Œ S )Ú_positional_arg_)rc   r�   )rG   r+  ri   s     €r8   r«   z)_ModuleFrame.__init__.<locals>.<listcomp>Ñ  sB   ø€ ð ð ð àð ”J×*Ò*Ð+C¸cÐ+CÐ+CÑDÔDðð ð r7   rT  Ú
_constant_)r†   r?   r}   rÌ   c                 óh   •— g | ].}‰j         j                             t          j        ‰|f¦  «        ‘Œ/S r6   ©r¸  rc   rT  r•  r–  )rG   rÙ   Ú	args_noderi   s     €€r8   r«   z)_ModuleFrame.__init__.<locals>.<listcomp>  sF   ø€ ð ð ð àð ”KÔ%×3Ò3µHÔ4DÀyÐRSÀnÑUÔUðð ð r7   c                 ój   •— i | ]/}|‰j         j                             t          j        ‰|f¦  «        “Œ0S r6   rÁ  )rG   rH   Úkwargs_noderi   s     €€r8   rÚ   z)_ModuleFrame.__init__.<locals>.<dictcomp>  sO   ø€ ð ð ð ð ð �t”{Ô(×6Ò6Ý Ô(¨;¸Ð*:ñô ðð ð r7   )>r²  r…   Ú
seen_nodesr  r  r·  r¸  r³  Ú	module_idrà   ÚverboserÀ   rE  rs  r.   rN   rä   rA  r%   rP   rz   r—   rc   Únode_mapÚnode_to_placeholderrº  rx  r©  r¥   rT   r‡   Ú_SubmoduleEntryr   Únum_childrenÚchildren_specsÚcontextr]  Úranger�   rž  ry   rþ   Úinputsr^  r•  r–  rV   r   rÌ   Úcopyrb  Úinserting_beforer…  r   r   r   r   Úremap_inputr   rT  r}   rn   )ri   r²  r…   rÅ  r  r  r·  r¸  r³  rÆ  rà   r.   Ú	num_callsr¢   r¦  Úbase_module_framer  Ú	args_specÚkwargs_specÚ	arg_nodesÚkwarg_nodesrÌ   r#  r+  rö   Úflat_arg_nodeÚinput_nodesÚinputÚinputs_noderÂ  rÄ  s   `      `                     @@r8   rf   z_ModuleFrame.__init__|  s×  øøøø€ ð %ˆŒØˆŒ
Ø$ˆŒØ(ˆÔØ$ˆŒØ.ˆÔØˆŒØ(ˆÔØ"ˆŒà!2ˆÔØˆŒà"Ô/°Ô3ÑˆŒ�)å# D¤H¨i¸!©mÑ<Ô<ˆŒàÐVØÐØ ˆDŒKÝ)0°¸Ñ)AÔ)AÐI˜œ˜ÀrˆDŒJˆJàÔ.×2Ò2Ø”Ý!¥%¤(§.¢.Ñ"2Ô"2Ñ3Ô3ñô ˆDŒKð  œˆDŒJà”[Ô&ˆŒ
ð =?ˆŒØ#%ˆÔ à;?ˆÔØÐÝ(¨¬°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¤[Ñ%<ØÔ$Ô1°QÒ6Ð6Ð6Ð6Ø!Ô)Ô8¸Ô;ˆIØ#Ô+Ô:¸1Ô=ˆKØÔ$Ð,Ð,Ð,ØÔ&Ð2Ð2Ð2à”×+Ò+¨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Ø œO¨C¬HÔ5ñøð!*ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ðB ”Ô"×3Ò3°DÔ4KÑLÔLð *ð *Ø=?�Ø&Ô-ð ð �EÝ! %Õ)9Ñ:Ô:ð Ø#×*Ò*¨5¬;Ñ7Ô7Ð7Ð7Øœ¨4¬?Ð:Ð:Ø#×*Ò*¨4Ñ0Ô0Ð0Ð0å)Ø!å .Ý .Ý /Ý 0ð	ñ ô  ð ð ð  ð $×*Ò*Ø œK×3Ò3°D´OÀEÄJÔ4OÑPÔPñô ð ð õ 2Ø”KÔ&ØØÔ%ñô �ð !œKÔ-×;Ò;ÝÔ$ {°AÐ&6ñô �	ð #œkÔ/×=Ò=ÝÔ$ {°AÐ&6ñô �ðð ð ð ð å" 9Ô#9Ñ:Ô:ðñ ô �	ðð ð ð ð ð )Ô0ð	ñ ô �ðK*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ðV Ô*Ð6Ð6Ð6Ý+0°Ñ+;Ô+;ˆDÔ#Ô(Ø-8ˆDÔ#Ô*Ð*Ð*ðk !Ð Ð%<Ð%<s&   Ê0EP Ð PÐPÐ/E5V0Ö0V4Ö7V4c                 óX  — | j         dk    sJ d|› d�¦   «         ‚|j        | j        u sJ ‚| 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©Ú	type_expr)
rÀ   rc   r²  rÑ  r�   rÌ   rs   rÐ  rb  rÉ  )ri   r(  Úplaceholder_nodes      r8   Úadd_placeholderz_ModuleFrame.add_placeholder   sý   € ØŒx˜2Š~ˆ~ˆ~ÐK¸ÐKÐKÐK‰~Œ~ˆ~ØŒw˜$œ/Ð)Ð)Ð)Ð)àŒ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   Á'A7Á7A;Á>A;c                 óT  — t          j        t          j        j        | j        |j        ¦  «        }t          j        t          j        j        | j        |j        ¦  «        }| j         	                    |j
        ||¦  «        }t          j        |j        ¦  «        |_        || j        |<   |S rE   )r¹   Útree_map_onlyrP   rz   r~  rÒ  r}   rn   rc   rT  r?   rÐ  rb  rÈ  )ri   r(  r}   rn   r‰   s        r8   Ú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ÑØˆr7   c                 óÜ  — |j         | j        u sJ ‚|| 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%t9          |j        d¦  «        r2|j        j        dk    r"|                      |¦  «         | j        |         S | j                             | j        ¦  «        �&| j                              | j        | j         |¦  «        S tC          d|j        › d	|› �¦  «        ‚)
Nzremap_input(rˆ  r�   r   rT  r0   Ú	_operatorz(Could not run remap_input() on op type: z
 for node )"rc   r²  rÈ  r  rÉ  r†   rà   rA  rÀ   rá  rº  r¸  rÑ  Ú
insert_argrÒ  r?   rP   r_  r`  Úsym_sizerB  rJ   ÚdefaultÚunbindÚsumÚdim_IntListÚviewÚdiffrN   r0   rä  rä   Úreadru  )ri   r(  s     r8   rÒ  z_ModuleFrame.remap_input9  s„  € ØŒw˜$œ/Ð)Ð)Ð)Ð)Ø�”ÐÐØ”= Ô#Ð#Ø�
Š
Ð& !Ð&Ð&Ð&Ñ'Ô'Ð'Ø�Ô(Ð(Ð(ØÔ+¨AÔ.Ð.àŒD�MÒ!Ð!ØÔ%×)Ò)¨$¬(Ñ3Ô3Ð;ð × Ò  Ñ#Ô#Ð#ØÔ&Ð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¤8¨T¬Z¸Ñ;Ô;Ð;åØN¸1¼4ÐNÐNÈ1ÐNÐNñô ð s   Ã 4D Ä DÄDc                 óü  ‡ ‡— ‰ j                              ‰ j        d ¦  «         g }‰ j                             ‰ j        ¦  «        }|�õ‰ j        �î|j        D ]…}t          |t          t          t          t          f¦  «        rJ|j        ‰ j        v r&|                     ‰ j        |j                 ¦  «         Œ^|                     d ¦  «         Œtt!          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J ‚‰ j                              |¦  «         |€d S t          |t8          j        j        ¦  «        r|j!                             d¦  «        nd„ |D ¦   «         |j!        d<   t5          |¦  «        dk    r|€|‰ j        j        |d         <   d S tE          |¦  «        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É  ru  rc   )rP  Ú	seen_noderi   s     €r8   Úget_actual_output_nodez=_ModuleFrame.finalize_outputs.<locals>.get_actual_output_nodez  sx   ø€ Ø�>Ø˜4à œO¨F¬KÔ8�	Ø ¤Ð-Ð-Øœ=¨Ô3Ð3Ø $Ô":Ð:Ð:ØÔ3°IÔ>Ð>å&ØS°fÐSÐSÀtÄzÐSÐSñô ð r7   c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S rE   r6   )rG   rP  ró  s     €r8   rK   z0_ModuleFrame.finalize_outputs.<locals>.<genexpr>Š  s/   øè è € ÐPÐP¸Ð,Ð,¨VÑ4Ô4ÐPÐPÐPÐPÐPÐPr7   r"   r   Úvalc                 óB   — g | ]}|j                              d ¦  «        ‘ŒS )rõ  )rb  rA  )rG   Úos     r8   r«   z1_ModuleFrame.finalize_outputs.<locals>.<listcomp>«  s&   € Ð;Ð;Ð;¨�!”&—*’*˜UÑ#Ô#Ð;Ð;Ð;r7   )%r·  rF  rÀ   rà   rA  rs  r¸  r®   rV   r   r   r   r   rÌ   rÅ  r‡   ru  r   r.   ry   r7  rž  rº  rÈ  ÚkeysÚusersrw   ru   rP   rz   r~  rc   rP  rb  rþ   ÚProxyr‰   )ri   Úorig_outputsr  rP  Útree_out_nodeÚ
parent_outÚgraph_outputsÚ	orig_nodeÚ	user_noderÙ   Úorig_outputÚ	proxy_outró  s   `           @r8   Úfinalize_outputsz_ModuleFrame.finalize_outputse  sA  øø€ ØÔ× Ò  ¤¨4Ñ0Ô0Ð0àˆàÔ*×.Ò.¨t¬~Ñ>Ô>ˆ	ØÐ  T¤[Ð%<Ø#Ô+ð ð �ÝØÝ#¥^µ_ÕFVÐWñô ð ð ”{ 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õ
 3IØ”Ô" DÔ$;¸YÔ=Oñ3ô 3ˆJð HUˆMˆMàˆMà!œ]×/Ò/Ñ1Ô1ð ð �	Ø!*¤ð ð �IØ ”~¨T¬_Ð<Ð<à$×+Ò+¨IÑ6Ô6Ð6Ø%×,Ò,¨T¬]¸9Ô-EÑFÔFÐFØ˜ð	 =øð Ô0ˆJÝ�=Ñ!Ô! QÒ&Ð&Ø -¨aÔ 0�å˜-­$µ´´Ð)>Ñ?Ô?Ð?Ð?Ð?àŒ
×Ò˜-Ñ(Ô(Ð(ð ÐØˆ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ð>ð >r7   c                 óÄ   — |                       d|                     ¦   «         ¦  «         | j                             || j        ¦  «        | j        |<   || j        |j        <   d S )NÚcopying)r  Úformat_noderc   Ú	node_copyrÒ  rÈ  rÅ  rÌ   rˆ   s     r8   Ú	copy_nodez_ModuleFrame.copy_node¹  sW   € Ø�
Š
�9˜d×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ø"œj×2Ò2°4¸Ô9IÑJÔJˆŒ�dÑØ%)ˆŒ˜œ	Ñ"Ð"Ð"r7   c                 óÔ  — d}| j         j        D ]H}|                      ||j                             d¦  «        |                     ¦   «         ¦  «         |dz  }ŒId}| j        |         }|j        dk    r2|                      |¦  «         |dz  }| j        |         }|j        dk    °2|                      |¦  «         | j         j        D ]"}|j        dk    r|                      |¦  «         Œ#d S )Nr   Únn_module_stackr"   r�   rP  )	r²  r…   r  rb  rA  r  r†   r  Úrun_from)ri   rÙ   r‰   Únode_idxs       r8   Ú	run_outerz_ModuleFrame.run_outer¾  s  € ØˆØ”OÔ)ð 	ð 	ˆDØ�JŠJ�q˜$œ)Ÿ-š-Ð(9Ñ:Ô:¸D×<LÒ<LÑ<NÔ<NÑOÔOÐOØ�‰FˆAˆAð ˆØŒz˜(Ô#ˆØŒg˜Ò&Ð&Ø�NŠN˜4Ñ Ô Ð Ø˜‰MˆHØ”:˜hÔ'ˆDð Œg˜Ò&Ð&ð
 	�Š�hÑÔÐð ”OÔ)ð 	%ð 	%ˆDØŒw˜(Ò"Ð"Ø—’˜tÑ$Ô$Ð$øð	%ð 	%r7   c                 ó0   — | j         rt          |i |¤Ž d S d S rE   )rÇ  r  )ri   r}   rn   s      r8   r  z_ModuleFrame.printÓ  s/   € ØŒ<ð 	#Ý�4Ð"˜6Ð"Ð"Ð"Ð"Ð"ð	#ð 	#r7   c                 ó4  — d}|t          | j        ¦  «        k     �rü| j        |         }|j        dk    sJ ‚|                      ¦   «          |                      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 |€J ‚t          | j        |¦  «        rÇ||         }|                      d|¦  «         t!          |j        d                              ¦   «         ¦  «        |         }	t%          | j        | j        | j        | j        | j        | j        | | j        |gz   |	                     d¦  «        d         | j        ¦
  «
                             |¦  «        }|dz  }�Œž|| j        k    sJ ‚|j        dk    r*| j        | j                                      |j        ¦  «         |                      |¦  «         |dz  }|t          | j        ¦  «        k     �°úd S d S )Nr   r�   ÚSTEPrP  r"   r
  z(Unable to find nn_module_stack for node )Ú_EMPTY_NN_MODULE_STACK_KEYc                 óz   — g | ]8\  }\  }}|d |v r(t          |                     d ¦  «        d         ¦  «        ndf‘Œ9S )rÓ   rµ  r   )rB  rL   )rG   rH   r>  Útys       r8   r«   z)_ModuleFrame.run_from.<locals>.<listcomp>ü  sY   € ð %ð %ð %á%˜™:˜D "ð °C¸1°H°H�3˜qŸwšw s™|œ|¨BÔ/Ñ0Ô0Ð0À!ÐDð%ð %ð %r7   Ú	outliningzCreating new stack frame forrÓ   r†  )rw   r…   r†   r  r  r³  r  rb  rA  ru  Ú(torch._export.passes._node_metadata_hookr  rU   rÀ   rc   rq  ru   rø  r±  r²  rÅ  r  r  r·  rL   rà   r  rs  rð   r?   r  )
ri   r  Ú
module_idxr‰   Údepthr
  r  Únode_module_stackÚnext_moduleÚnext_module_keys
             r8   r  z_ModuleFrame.run_from×  sK  € Øˆ
à�˜TœZ™œÒ(Ñ(Ø”:˜hÔ'ˆDØ”7˜mÒ+Ð+Ð+Ð+à�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œ:Ñ&Ô&Ð&Ø�à$Ð0Ð0Ð0å˜$Ô+Ð->Ñ?Ô?ð ð 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‘�
Ùð %¨Ô(9Ò9Ð9Ð9Ð9àŒw˜*Ò$Ð$à” ¤Ô/×3Ò3°D´KÑ@Ô@Ð@à�NŠN˜4Ñ Ô Ð Ø˜‰MˆHði �˜TœZ™œÒ(Ñ(Ð(Ð(Ð(Ð(r7   rE   )r/   r0   r1   rP   rz   r—   r   r~  r   r¯   rB  r   r   r   r   r‚   r'   rf   rá  rä  rÒ  r  r  r  r  r  r6   r7   r8   r±  r±  {  s0  € € € € € ð LPðb9ð b9à”H”Nðb9ð �U”X”] CÐ'Ô(ðb9ð ˜5  c œ?Ô+ðb9ð   Ð%8Ð 8Ô9ðb9ð ˜˜uœxÔ3Ð5FÐFÔGÔHðb9ð b9ð b9ð b9ðH	7ð 	7ð 	7ðð ð ð*ð *ð *ðXR>ð R>ð R>ðh*ð *ð *ð
%ð %ð %ð*#ð #ð #ðWð Wð Wð Wð Wr7   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Ê  rr  r¹  rº  rÀ   r»  r.   N)r/   r0   r1   r¯   r–   rP   rQ   rR   rz   r~  rB  r6   r7   r8   rÊ  rÊ  1  s]   € € € € € € à€O€O�OØ”8”?Ð"Ð"Ñ"ØœœÐ%Ð%Ñ%Ø	€H€H�HØ€M€M�MØŒHŒOÐÐÑÐÐr7   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Ã   r   rÃ   c                 ó6   — i | ]}|j         ¯	|j        |j         “ŒS r6   )r  rÀ   rÁ   s     r8   rÚ   z'_outline_submodules.<locals>.<dictcomp>J  s6   € ð 	
ð 	
ð 	
àØŒð	
ØŒI�u”ð	
ð 	
ð 	
r7   )r.   )r   ru   rM   r±  ry   r…   rà   r  )r  r  rÅ  r  r  r·  s         r8   rå   rå   ;  sœ   € Ø+-€JÝ5@ÅÑ5FÔ5F€LÝ&1µ#Ñ&6Ô&6€JØ24€OÝØÝˆjÔÑÔØØØØØØ	ˆ	Ø
ð	
ð 	
à$Ô6ð	
ñ 	
ô 	
ð
 ðñ ô ÷  ‚i�k„k€kØ˜Ð#Ð#r7   rÃ   r¸  r  r\   c                 ód  — |dk    rit          |                     ¦   «         ¦  «        dd …         D ]?}t          | |¦  «        €-t          | |t          j                             ¦   «         ¦  «         Œ@g }t          | j                             ¦   «         ¦  «        D ]P\  }}|€Œ||z   }t          |||dz   ¬¦  «         t          | |¦  «         |                     ||         ||f¦  «         ŒQ|                     t          j        d¦  «        ¬¦  «         |D ]\  }}}|                      ||¦  «         Œd S )NrÃ   r"   rC   )r\   r   )r„  )ru   rø  r¤  r©  rP   rQ   rR   rT   rU   r   Údelattrr‡   Úsortr•  Ú
itemgetterÚregister_module)r¸  r  r\   rÀ   ÚchildrenrÌ   Úchildr  s           r8   r   r   T  sE  € ð �‚|€|Ý˜	ŸšÑ(Ô(Ñ)Ô)¨!¨"¨"Ô-ð 	?ð 	?ˆCÝ˜f cÑ*Ô*Ð2Ý˜v s­E¬H¯OªOÑ,=Ô,=Ñ>Ô>Ð>øà€HÝ˜FœO×1Ò1Ñ3Ô3Ñ4Ô4ð 7ð 7‰ˆˆeØˆ=ØØ�t‰mˆÝ˜E 9°S¸3±YÐ?Ñ?Ô?Ð?Ý�˜ÑÔÐØ�Š˜ 3œ¨¨uÐ5Ñ6Ô6Ð6Ð6Ø‡M‚M•hÔ)¨!Ñ,Ô,€MÑ-Ô-Ð-Ø"ð ,ð ,‰ˆˆ4�Ø×Ò˜t UÑ+Ô+Ð+Ð+ð,ð ,r7   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )rã   av  
    Collect the intermediate values of buffer mutations in a graph,
    along with the module call fqns that create and use them. Later,
    in each fqn associated with an intermediate value we will install
    a corresponding attribute, so that it can be updated and read.

    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.

    Thus our analysis will produce {ival1: {n0, n1}, ival2: {n1, n2}}.
    c                 óF   — t          t          ¦  «        | _        i | _        d S rE   )r   rM   ÚfqnsÚstorager§   s    r8   rf   z_IVals.__init__„  s   € å¥Ñ$Ô$ˆŒ	àˆŒˆˆr7   c                 ó¾  — |                      d¦  «        5  |                     d|j        z   |j        ¬¦  «        }t	          j        |j        ¦  «        |_        ddd¦  «         n# 1 swxY w Y   |j        | j        vr:|j        d         }t          j        |j	        |j
        ¬¦  «        | j        |j        <   | j        |j                                      |¦  «         |S )zM
        Read attribute corresponding to a given intermediate value.
        NÚ__ival__rÞ  rõ  )Údtype)rÑ  r†  rÌ   rs   rÐ  rb  r*  rP   ÚemptyÚshaper-  r)  rð   )ri   rÀ   rc   r‰   Ú	ival_nodeÚfakes         r8   rï  z_IVals.readŠ  s  € ð
 ×#Ò# DÑ)Ô)ð 	2ð 	2ØŸš z°D´IÑ'=ÈÌ˜ÑSÔSˆIÝ!œY t¤yÑ1Ô1ˆIŒNð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð Œ9˜DœLÐ(Ð(ð ”9˜UÔ#ˆDÝ&+¤k°$´*ÀDÄJÐ&OÑ&OÔ&OˆDŒL˜œÑ#ØŒ	�$”)Ô× Ò  Ñ%Ô%Ð%àÐs   –AA%Á%A)Á,A)c                 ó   — | j         |j                                      |¦  «         |                     |¦  «        5  |                     d|j        z   |j        ¬¦  «        }t          j        |j        ¦  «        |_        ddd¦  «         n# 1 swxY w Y   |                     |¦  «        5  |                     dt          j
        j        j        ||f¦  «        }t          j        |j        ¦  «        |_        ddd¦  «         dS # 1 swxY w Y   dS )zO
        Update attribute corresponding to a given intermediate value.
        r,  rÞ  NrT  )r)  rÌ   rð   r]  r†  rs   rÐ  rb  r^  rP   r_  r`  ra  )ri   rÀ   rc   r‰   r0  Únew_ival_nodes         r8   rS   z_IVals.updateœ  su  € ð 	Œ	�$”)Ô× Ò  Ñ%Ô%Ð%ð ×"Ò" 4Ñ(Ô(ð 	2ð 	2ØŸš z°D´IÑ'=ÈÌ˜ÑSÔSˆIÝ!œY t¤yÑ1Ô1ˆIŒNð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð ×"Ò" 9Ñ-Ô-ð 	6ð 	6Ø!×-Ò-Ø¥¤¤Ô!5¸	À4Ð7Hñô ˆMõ "&¤¨4¬9Ñ!5Ô!5ˆMÔð		6ð 	6ð 	6ñ 	6ô 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6øøøð 	6ð 	6ð 	6ð 	6ð 	6ð 	6s%   »AB
Â
BÂBÂ*ADÄDÄ
Dc                 óô  — d|fg}|D ]h}|D ]c}|                      |j        |j        f¦  «         |j        j        }|j        D ],}|j        | j        v r|                      |j        ||¦  «         Œ-ŒdŒit          t          ¦  «        }| j
                             ¦   «         D ]%\  }	}
|
D ]}||                               |	¦  «         ŒŒ&|D ]1\  }}||         D ]#}	d|	› �}t          ||| j        |	         ¦  «         Œ$Œ2dS )zÍ
        Update attributes corresponding to intermediate values that were read.
        Finally, initialize attributes in all modules that read or update
        corresponding intermediate values.
        rÃ   r,  N)r‡   rÀ   r.   rc   r…   rÌ   r*  rS   r   ru   r)  rU   rO   )ri   Ú
partitionsr  ÚentriesÚshared_submodulesrÂ   rc   r‰   rä   rÌ   r)  rÀ   rª   Ú	ival_names                 r8   ræ   z_IVals.create¬  sW  € ð ˜Ð$Ð%ˆØ!+ð 	<ð 	<ÐØ*ð <ð <�Ø—’ ¤	¨5¬<Ð8Ñ9Ô9Ð9ØœÔ*�Ø!œKð <ð <�DØ”y D¤LÐ0Ð0ØŸš E¤I¨u°dÑ;Ô;Ð;øð<ð<õ �DÑ!Ô!ˆØœ)Ÿ/š/Ñ+Ô+ð 	(ð 	(‰JˆD�$Øð (ð (�Ø�c”
×!Ò! $Ñ'Ô'Ð'Ð'ð(ð  ð 	<ð 	<‰HˆC�Ø˜cœ
ð <ð <�Ø- tÐ-Ð-�	õ ˜˜Y¨¬°TÔ(:Ñ;Ô;Ð;Ð;ð	<ð	<ð 	<r7   N)r/   r0   r1   r•   rf   rï  rS   ræ   r6   r7   r8   rã   rã   j  sZ   € € € € € ðð ð2ð ð ðð ð ð$6ð 6ð 6ð <ð <ð <ð <ð <r7   rã   r  c                 ó®   — |                      ¦   «         D ]?\  }}|rt          ||¦  «        n|}|D ]#}t          | |¦  «        }t          |||¦  «         Œ$Œ@d S rE   )rU   r   rŸ   rO   )rŽ  r  r  rs  Únamesr.   rÌ   rõ  s           r8   rè   rè   Ê  s   € ð
 '×,Ò,Ñ.Ô.ð 'ð 'Ñˆ	�5Ø6?ÐP•˜;¨	Ñ2Ô2Ð2À[ˆØð 	'ð 	'ˆDÝ˜"˜dÑ#Ô#ˆCÝ�F˜D #Ñ&Ô&Ð&Ð&ð	'ð'ð 'r7   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 )NFrC   T)rþ   rE  rÀ   r»  rx  rr  r�  r.   r¹  rL   r   rT   rF  rº  r?   rG  )r5  rÑ   r7  rÙ   rÂ   rs  r?   ÚdeduplicatedÚseenr¸  r\   rÌ   Úseen_child_fqnÚseen_targets                 r8   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 #Ð"r7   r  ÚscopeÚmodule_id_to_inputs_removedc                 ó  ‡‡— ‰€t          t          ¦  «        Št          | ¦  «        ‰v r$t          | ¦  «        ‰t          | ¦  «                 iS | j                             ¦   «         D ]m\  }Št          t          t          j        j	        ‰¦  «        |||gz   ‰¦  «        }|                     ¦   «         D ] \  }}‰|          
                    |¦  «         Œ!Œnt          | dd¦  «        }|�t          |j        ¦  «        dk    r‰S t          |t          j        j        ¦  «        sJ ‚t#          t%          d„ |j        ¦  «        ¦  «        }	|	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J ‚|                     |
¦  «        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.
    Nrc   r   c                 ó   — | j         dk    S )Nr�   rÖ   ©r  s    r8   rW  z_sink_params.<locals>.<lambda>0  s   €  1¤4¨=Ò#8€ r7   rµ  c                 ó   — | j         dk    S )Nr¥   rÖ   rD  s    r8   rW  z_sink_params.<locals>.<lambda>4  s   € ¨¬°Ò)>€ r7   c                 ó<   •— | j         ‰t          ‰¦  «                 vS rE   )rÌ   rî   )r  rA  Ú	submodules    €€r8   rW  z_sink_params.<locals>.<lambda><  s   ø€ ˜aœfÐ,GÍÈ9ÉÌÔ,VÐV€ r7   rC   c                 óD   — g | ]}|                      d ¦  «        d         ‘ŒS )rÓ   r   )rL   r'  s     r8   r«   z _sink_params.<locals>.<listcomp>J  s&   € Ð)IÐ)IÐ)I¸a¨!¯'ª'°#©,¬,°q¬/Ð)IÐ)IÐ)Ir7   r†  T)Úpropagate_meta)%r   rM   rî   rT   rU   rù   r
   rP   rQ   rR   rS   rŸ   rw   r…   rV   rz   r—   ru   Úfilterr   r?   ry   r}   rÌ   rL   rù  r   rY   r[   r]  r^  r­   rc  Ú
erase_noderð   r%   rŠ   )r.   r  r@  rA  rÌ   Úsubmod_id_to_inputs_removedrH   rR  rc   rÏ  Úthe_last_inputÚcall_module_nodesr‰   Úinputs_to_state_of_scopeÚ
state_nameÚsnÚsn_splitÚinputs_removedÚ	attr_pathÚ
state_attrrV  rG  s      `                 @r8   rù   rù     s  øø€ ð, #Ð*Ý&1µ#Ñ&6Ô&6Ð#å	ˆ&�z„zÐ0Ð0Ð0Ý�6‘
”
Ð7½¸6¹
¼
ÔCÐDÐDð "œ?×0Ò0Ñ2Ô2ð 5ð 5‰ˆˆiÝ&2Ý•”” )Ñ,Ô,ØØ�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œ^Ñ,Ô,Ð,Ð,Ð,å•&Ð8Ð8¸%¼+ÑFÔFÑGÔG€FØ˜B”Z€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ÐMÐMÐMð ×&Ò& ~Ñ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   Ë	*K?Ë?L	ÌL	)TrE   )rÃ   )dr·   rÐ  Úloggingr•  r­  Úcollectionsr   Ú
contextlibr   r   Údataclassesr   Úenumr   Útypingr   r	   r
   r   r   r   r   r   r   rP   Útorch.fx._pytreerz   Ú_pytreer›  Útorch.utils._pytreeÚutilsr¹   Ú"torch._library.fake_class_registryr   Útorch.export._tree_utilsr   Útorch.export.exported_programr   r   r   r   r   r   r   r   r   Útorch.fx._symbolic_tracer   Útorch.fx.graph_moduler   r   r   r    r!   Ú_remove_effect_tokens_passr#   Ú	getLoggerr/   ÚlogÚ__all__r*   r:   r<   rY   r[   rQ   rR   r¯   Úboolr`   r%   r&   ÚABCr$   r'   r(   r—   râ   rq  rx  r�  r’  r‚   r~  r™  rž  r   r¤  r©  rB  rE  rF   r±  rÊ  rå   r   rã   rè   rú   rù   r6   r7   r8   ú<module>rk     sõ  ðà 
€
€
€
Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ Oà €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 3Ð 2Ð 2Ð 2Ð 2Ð 2Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à =Ð =Ð =Ð =Ð =Ð =ð €gÔ˜Ñ!Ô!€ðð ð €ðð ð ð ð �ñ ô ð ð Ð ð ð(ð (ñ „ð(ð" ð00ð 00Ø�E”L %Ô"4°e´h´oÐEÔFð00àŒxŒð00ð ð00ð ð	00ð
 ð00ð 00ð 00ð 00ðfS
ð S
ð S
ð S
ð S
˜œœñ S
ô S
ð S
ðl,"ð ,"ð ,"ð ,"ð ," %¤(¤/ñ ,"ô ,"ð ,"ð^ð ð ð ð �c”gñ ô ð ð M
ð M
ð M
ð M
ð M
˜œœñ M
ô M
ð M
ðb MQð8ð 8Øð8Ø08¸Ô0Ið8àð8ð 8ð 8ð 8ð48)ØŒ8Œ>ð8)à)ð8)ð 
ð8)ð 8)ð 8)ð 8)ðvRð Rð Rð
6 #ð 6°#ð 6¸#ð 6ð 6ð 6ð 6ð$6 ¤¤ð 6°E´H´Oð 6ð 6ð 6ð 6ð4�%”(”/ð ¨Cð ð ð ð ð˜%œ(Ô.ð ¸¼¼ð ð ð ð ðRØˆeŒhÔ"Ð$5Ð7HÐHÔIðRà
„X„]ðRð Rð Rð RðMØˆeŒhÔ"Ð$5Ð7HÐHÔIðMà
„X„]ðMð Mð Mð Mð%˜œœð %°ð %ð %ð %ð %ð* AEð	)ð )Ø	ŒŒð)àð)ð ”8”?ð)ð ˜H c U¨E¬H¬OÐ%;Ô<Ô=ð	)ð )ð )ð )ð4/�Sð /˜Sð / Sð /ð /ð /ð /ðJ˜Sð J¨ð J°ð Jð Jð Jð Jð
sð sð sð sð sñ sô sð sðl ðð ð ð ð ñ ô ñ „ðð$ E¤H¤Nð $ÐARð $ð $ð $ð $ð4 GIð,ð ,ØŒHŒOð,Ø(,¨S°#¨X¬ð,Ø@Cð,ð ,ð ,ð ,ð,]<ð ]<ð ]<ð ]<ð ]<ñ ]<ô ]<ð ]<ð@	'ØŒÔð	'à"ð	'ð �S˜#˜cœ(�]Ô#ð	'ð 	'ð 	'ð 	'ð(#ð (#ð (#ð^ BFð	p(ð p(ØŒHŒOðp(à˜#˜t Cœy˜.Ô)ðp(ð �Œ9ðp(ð "*¨$¨s°C¸´H¨}Ô*=Ô!>ð	p(ð p(ð p(ð p(ð p(ð p(r7   