§
    ®˜ºh ã                   óª  — 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 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l,m-Z-m.Z.m/Z/ d dlm0Z0m1Z1 ddl2m3Z3  ej4        e5¦  «        Z6g d¢Z7 G d„ de¦  «        Z8da9ed„ ¦   «         Z:	 dWdeej;        ej<        ej=        j>        f         dej=        j>        de?de8de@f
d„ZA G d„ d¦  «        ZB G d„ deBej=        j>        ¦  «        ZC G d„ d eBej=        j>        ¦  «        ZD G d!„ d"e jE        ¦  «        ZF G d#„ d$ej=        j>        ¦  «        ZG	 dXd%e"d&eeF         d'eGfd(„ZHd)ej        jI        d*e#d'dfd+„ZJd,„ ZKd-e?d.e?d'e?fd/„ZLd0ej=        j>        d1ej=        j>        fd2„ZMd3ej=        j>        d'e?fd4„ZNd3ej        jO        d'ej        jP        fd5„ZQd3eej        jO        eCeGf         d'ej        jP        fd6„ZRd3eej        jO        eCeGf         d'ej        jP        fd7„ZSd8ej=        j>        de?fd9„ZT	 dXd8ej=        j>        de?d:ej=        j>        d;eee?gej=        j>        f                  fd<„ZUd=e?d>eVd'e?fd?„ZWd@e?d=e?d'e@fdA„ZX G dB„ dC¦  «        ZYe G dD„ dE¦  «        ¦   «         ZZdFej        jI        dGeGfdH„Z[	 dYdJej=        j>        dKe\e?eVf         dLe?fdM„Z] G dN„ dO¦  «        Z^d3ej        jO        dGeGdPe\e?e_e?         f         fdQ„Z`dR„ Za	 dXd%ej=        j>        dSe\e?ebe?         f         dTebe?         dUee\eVe_e?         f                  fdV„ZcdS )Zé    N)Údefaultdict)Úcontextmanager)Údeepcopy)Ú	dataclass)ÚEnum)ÚAnyÚCallableÚcastÚOptionalÚ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© ó    ú^/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/torch/export/unflatten.pyr&   r&   1   s"   € € € € € Ø€IØ€FØ€HØ€F€F€Fr3   r&   Tc               #   ó8   K  — t           } da 	 d V — | a d S # | a w xY w©NF)ÚRUN_WITH_INTERPRETER)Úold_flags    r4   Ú_disable_interpreterr9   ;   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      €r4   ú	<genexpr>z_assign_attr.<locals>.<genexpr>\   sK   øè è € ð ð á�A�vÝ   DÑ)Ô)ðØðð ð ð ð ð r3   )r>   z2FakeScriptObject should only exist during tracing.)ÚsplitÚsetÚhasattrÚsetattrÚtorchÚnnÚModuleÚupdateÚ_modulesÚitemsr&   r.   Ú
isinstanceÚ	ParameterÚregister_parameterr/   ÚTensorÚregister_bufferr0   r   ÚScriptObjectr1   )
r:   r;   r<   r=   r>   ÚprefixÚfieldÚ
to_modulesÚtsrG   s
            @r4   Ú_assign_attrr]   H   s-  ø€ ð —\’\ #Ñ&Ô&�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ñô ð õ Øå”LÝÔ&ðñô ð ð ð õ �I˜u hÑ/Ô/Ð/Ð/Ø�)Ô*Ò*Ð*Ý˜h­¬¬Ñ8Ô8Ð8Ð8Ð8Ý�I˜u hÑ/Ô/Ð/ùð+0ð 0r3   c                   ó>   — e Zd ZU ee         ed<   dee         fd„ZdS )Ú_SubmoduleBaseÚ_tyÚreturnc                 ó   — | j         S rB   )r`   ©Úselfs    r4   Ú	type_namez_SubmoduleBase.type_name~   s	   € ØŒxˆr3   N)r+   r,   r-   r   ÚstrÚ__annotations__re   r2   r3   r4   r_   r_   {   sE   € € € € € € Ø	�#ŒÐÐÑð˜8 Cœ=ð ð ð ð ð ð r3   r_   c                   ó˜   ‡ — e Zd ZU dZeej        j                 ed<   	 ddej        j	        dee
         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_moduleNÚgraphÚtyc                 ó”   •— t          ¦   «                              ¦   «          || _        || _        | | j        _        t
          | _        d S rB   )ÚsuperÚ__init__rj   r`   Úowning_moduler7   Ú_run_with_interpreter)rd   rj   rk   Ú	__class__s      €r4   rn   zInterpreterModule.__init__Š   sA   ø€ õ
 	‰Œ×ÒÑÔÐØˆŒ
ØˆŒØ#'ˆŒ
Ô Ý%9ˆÔ"Ð"Ð"r3   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 rB   r2   )rD   Ú
kwarg_nameÚkwargss     €r4   rH   z,InterpreterModule.forward.<locals>.<genexpr>§   s?   øè è € ð  ð  à"Ø! VÐ+Ð+ð ˜:Ô&à+Ð+Ð+Ð+ð ð  r3   ©rj   Úenable_io_processingF)ri   r   rM   ÚcompilerÚis_dynamo_compilingrp   ÚtypeÚforwardÚlistÚ	arg_namesÚlenÚextendÚtupleÚfxÚInterpreterrj   Úrun)rd   Úargsru   Úarg_listÚkwarg_namess     `  r4   r{   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ðð ð r3   c                 ó  — t           j                             | | j        ¦  «        | j        d<   | j                             ¦   «          g | _        | j        j        D ],}|j        dk    r| j         	                    |j
        ¦  «         Œ-d S )Nri   Úplaceholder)rM   r�   ÚGraphModulerj   Ú__dict__Úlintr}   ÚnodesÚopÚappendr<   ©rd   Únodes     r4   ÚfinalizezInterpreterModule.finalize¸   sƒ   € õ ).¬×(<Ò(<¸TÀ4Ä:Ñ(NÔ(NˆŒ�nÑ%ØŒ
�ŠÑÔÐð ˆŒØ”JÔ$ð 	3ð 	3ˆDØŒw˜-Ò'Ð'Ø”×%Ò% d¤kÑ2Ô2Ð2øð	3ð 	3r3   TFc                 ó*   — t          | d||||¦  «        S )Nr!   ©r   ©rd   Úprint_outputÚinclude_strideÚinclude_deviceÚcoloreds        r4   Úprint_readablez InterpreterModule.print_readableÉ   ó(   € õ ØØØØØØñ
ô 
ð 	
r3   rB   ©TFFF)r+   r,   r-   Ú__doc__r   rM   r�   r‰   rg   ÚGraphrf   rn   r{   r‘   r™   Ú__classcell__©rq   s   @r4   r!   r!   ‚   sÆ   ø€ € € € € € ðð ð
 ˜5œ8Ô/Ô0Ð0Ð0Ñ0ð
 !ð	:ð 	:àŒxŒ~ð	:ð �SŒMð	:ð 	:ð 	:ð 	:ð 	:ð 	:ð!ð !ð !ðF3ð 3ð 3ð& ØØØð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r3   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         j        | _        || _        d| _        d S ©Nr   )rm   rn   rQ   rL   Úgetattrr`   Ú_call_modulesÚ
_num_calls)rd   r¡   r¢   Úaccessorrq   s       €r4   rn   z$InterpreterModuleDispatcher.__init__á   sˆ   ø€ Ý‰Œ×ÒÑÔÐØÐÐÐØ$ QœÔ0ˆŒØð 	Hð 	HˆHÝ�D˜(¥G¨L¸¬O¸XÑ$FÔ$FÑGÔGÐGÐGØ ”?Ô&ˆŒØ)ˆÔØˆŒˆˆr3   c                 ó¬   — | j         | j                 }| j        dz   t          | j         ¦  «        z  | _        	  ||i |¤ŽS # t          $ r	 d| _        ‚ w xY w)Nr   r   )r¦   r§   r~   Ú	Exception)rd   r„   ru   Úcall_modules       r4   r{   z#InterpreterModuleDispatcher.forwardë   sn   € ØÔ(¨¬Ô9ˆØœ?¨QÑ.µ#°dÔ6HÑ2IÔ2IÑIˆŒð	Ø�; Ð/¨Ð/Ð/Ð/øÝð 	ð 	ð 	ØˆDŒOØð	øøøs   ¸A  Á Ac                 ó   — | j         S rB   )r¦   rc   s    r4   r¢   z(InterpreterModuleDispatcher.call_modulesô   s   € ØÔ!Ð!r3   TFc                 ó`   ‡‡‡‡— ˆˆˆˆfd„| j         D ¦   «         }d                     |¦  «        S )Nc                 ó@   •— g | ]}|                      ‰‰‰‰¦  «        ‘ŒS r2   )r™   )rD   Úmodr˜   r—   r–   r•   s     €€€€r4   ú
<listcomp>z>InterpreterModuleDispatcher.print_readable.<locals>.<listcomp>þ   sG   ø€ ð 
ð 
ð 
ð ð ×ÒØØØØñ	ô ð
ð 
ð 
r3   ú
)r¦   Újoin)rd   r•   r–   r—   r˜   Úoutputss    ```` r4   r™   z*InterpreterModuleDispatcher.print_readable÷   sV   øøøø€ ð
ð 
ð 
ð 
ð 
ð 
ð 
ð Ô)ð
ñ 
ô 
ˆð �yŠy˜Ñ!Ô!Ð!r3   r›   )r+   r,   r-   rœ   rJ   rf   r|   r!   rn   r{   r¢   r™   rž   rŸ   s   @r4   r"   r"   Ú   sŸ   ø€ € € € € ðð ð˜c #œhð °dÐ;LÔ6Mð ð ð ð ð ð ðð ð ð"ð "ð "ð
 ØØØð"ð "ð "ð "ð "ð "ð "ð "r3   r"   c                   ó¦   — e Zd ZdZej        	 	 d
dej        dej        dee	         de
eee	f                  de
e	         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Úobjra   c                 ó   — dS )z=NOTE: This adapter may mutate given ``input_args_with_path``.Nr2   )rd   rµ   r¶   r·   r¸   r¹   s         r4   ÚadaptzFlatArgsAdapter.adapt  s	   € ð 	ˆr3   )NN)r+   r,   r-   rœ   ÚabcÚabstractmethodÚpytreeÚTreeSpecr|   r   r   Údictrf   r»   r2   r3   r4   r    r    
  s¦   € € € € € ðð ð 	Ôð .2Ø!ð	ð 	à”_ð	ð ”Oð	ð ˜”Ið		ð
 ˜4  S œ>Ô*ð	ð �cŒ]ð	ð 
ˆcŒð	ð 	ð 	ñ Ôð	ð 	ð 	r3   r    c                   ól   ‡ — 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
„ 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        ¦  «        | _        || _        |j        j        | _        | | j        d<   d| _        t           | _        t%          || j        ¦  «         t'          ¦   «         | _        t+          || ¦  «        \  }}| j                             |                     ¦   «         ¦  «         t1          |j        | |¦  «         |j        | _        g | _        |j        }t;          ¦   «         }i }	| j        j        D ]¨}
||
         }t?          |¦  «        |	vrHt          j          !                    | "                    ¦   «         |j#        ¬¦  «        |	t?          |¦  «        <   tI          |	t?          |¦  «                 | |
tJ          j&        ¬¦  «         | '                    |
¦  «         Œ©t;          | j        j(        ¦  «        }t;          ¦   «         }i }| j        j)        D ]£}
|
|v rd}|j*        |
         }n
d	}||
         }t?          |¦  «        |vr&| "                    ¦   «         |f|t?          |¦  «        <   tI          |t?          |¦  «                 d         | |
tJ          j+        |¬
¦  «         | '                    |
¦  «         Œ¤| ,                    ¦   «         D ]ô\  }
}|
|v s|
|v rŒd}t?          |¦  «        |v st[          |t          j         j!        ¦  «        sd	}|r]t?          |¦  «        |vr|d	f|t?          |¦  «        <   tI          |t?          |¦  «                 d         | |
tJ          j+        d	¬
¦  «         Œ¡t?          |¦  «        |	vr||	t?          |¦  «        <   tI          |	t?          |¦  «                 | |
tJ          j&        ¬¦  «         Œõi }|j*         ,                    ¦   «         D ]ˆ\  }}t?          |¦  «        |vr@t[          |t          j.        ¦  «        r| "                    ¦   «         }||t?          |¦  «        <   |t?          |¦  «                 }tI          || |tJ          j/        ¬¦  «         Œ‰ta          tb          ¦  «        Š$t;          ¦   «         }ˆ$fd„}t;          ¦   «         }| j        j2        D �]¡}|j3        th          j&        k    s|j3        th          j+        k    r¨|j5        r¡tm          |j7        d¦  «        sJ ‚t[          |j8        tr          ¦  «        sJ ‚ |t?          |j        |j8                 ¦  «        |j7        j:        |j8        ¦  «         | '                    |j8        ¦  «         | '                    |j8        ¦  «         ŒÕ|j3        th          j+        k    r|j5        r*|j3        th          j;        k    s|j3        th          j<        k    r†tm          |j7        d¦  «        sJ ‚t[          |j8        tr          ¦  «        sJ ‚ |t?          |j*        |j8                 ¦  «        |j7        j:        |j8        ¦  «         | '                    |j8        ¦  «         �Œ£|j*         ,                    ¦   «         D ]v\  }}||vrmt?          |¦  «        ‰$v s
J d¦   «         ‚‰$t?          |¦  «                 d         \  }} |t?          |¦  «        ||¦  «         | '                    |j8        ¦  «         Œw|j         ,                    ¦   «         D ]S\  }}||vrJt?          |¦  «        ‰$vrŒ‰$t?          |¦  «                 d         \  }} |t?          |¦  «        ||¦  «         ŒTi }‰$                     ¦   «         D ]} d„ | D ¦   «         }!| D ]
\  }"}|!||"<   ŒŒt{          | |g ¦  «         t}          |                     ¦   «         ¦  «        Š%ˆ%fd„|D ¦   «         }|  ?                    ‰%|¦  «         d„ |D ¦   «         }d„ | j        j@        D ¦   «         | _A        d	| _B        d„ t‡          |¦  «        D ¦   «         }#|  D                    d¬¦  «        D ]\  }
}|
|#vrt‹          |#¦  «        |#|
<   Œt�          | |#¦  «         | j         G                    ¦   «          |  H                    ¦   «          d S )Nz%Unflattening on JointExportModule NYIc                 ó   — g | ]	}|j         ‘Œ
S r2   )Úfqn©rD   Úentrys     r4   r°   z.UnflattenedModule.__init__.<locals>.<listcomp>&  s   € ÐKÐKÐK %�E”IÐKÐKÐKr3   r   Ú Úunflattened_moduleF)Úrequires_grad)r=   T)r=   r>   c                 óF   •— ‰|          }|                      ||f¦  «         d S rB   )rŽ   )Úobj_idÚ	node_nameÚtarget_nameÚ	name_listÚ
consts_maps       €r4   Úadd_to_consts_mapz5UnflattenedModule.__init__.<locals>.add_to_consts_map±  s,   ø€ Ø" 6Ô*ˆIØ×Ò˜i¨Ð5Ñ6Ô6Ð6Ð6Ð6r3   Únamez?Constants should be either aliased or appear in graph signaturec                 ó   — g | ]
}|d          ‘ŒS ©r   r2   )rD   Úts     r4   r°   z.UnflattenedModule.__init__.<locals>.<listcomp>å  s   € Ð1Ð1Ð1 �q˜”tÐ1Ð1Ð1r3   c                 ó   •— g | ]}|‰v¯|‘Œ	S r2   r2   )rD   rÆ   Úredirected_call_indicess     €r4   r°   z.UnflattenedModule.__init__.<locals>.<listcomp>ì  s$   ø€ ÐRÐRÐR˜C¨sÐ:QÐ/QÐ/Q�CÐ/QÐ/QÐ/Qr3   c                 ó   — g | ]}d |v¯|‘Œ	S )ú@r2   )rD   rÆ   s     r4   r°   z.UnflattenedModule.__init__.<locals>.<listcomp>ï  s   € Ð>Ð>Ð>˜C¨s¸#¨~¨~�C¨~¨~¨~r3   c                 ó(   — g | ]}|j         d k    ¯|‘ŒS ©rˆ   ©r�   ©rD   r�   s     r4   r°   z.UnflattenedModule.__init__.<locals>.<listcomp>ô  s+   € ð #
ð #
ð #
Ø°´¸MÒ1IÐ1IˆDÐ1IÐ1IÐ1Ir3   c                 ó   — i | ]\  }}||“Œ	S r2   r2   )rD   ÚirÆ   s      r4   ú
<dictcomp>z.UnflattenedModule.__init__.<locals>.<dictcomp>ù  s   € Ð>Ð>Ð>¡  3�S˜!Ð>Ð>Ð>r3   ©Úremove_duplicate)Irm   rn   Úgraph_signatureÚbackward_signatureÚ
ValueErrorÚmodule_call_graphr   rj   rM   r�   r�   ro   rÃ   ri   ÚmetaÚadaptedr7   rp   Ú#_inplace_buffer_and_input_mutationsÚ_IValsÚivalsÚ_outline_submodulesrP   ÚvaluesÚ_copy_graph_attrsÚ_graph_moduleÚrange_constraintsÚequality_constraintsÚ
state_dictrJ   Ú
parametersÚidrN   rT   ÚclonerË   r]   r&   r.   ÚaddÚnon_persistent_buffersÚbuffersÚ	constantsr/   rR   rS   rV   r0   r   r|   Úinput_specsÚkindr   r>   rK   Úargr<   rf   rÓ   ÚCONSTANT_TENSORÚ
CUSTOM_OBJÚ_sink_paramsÚ_deduplicate_modulesÚ_dispatch_modulesrŒ   Úinput_placeholdersÚcheck_input_constraintsÚ	enumerateÚnamed_modulesr~   Ú_reorder_submodulesr‹   r‘   )'rd   rÂ   rÃ   Úfqn_listÚexport_graphÚseen_modulesÚ
seen_attrsró   Úassigned_paramsÚid_to_paramrÓ   Úparamrø   Úassigned_buffersÚid_to_bufferr>   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Ø   rq   s'                                       @@€r4   rn   zUnflattenedModule.__init__  sf	  øøø€ õ
 	‰Œ×ÒÑÔÐØÔ(Ô;ÐGÝÐDÑEÔEÐEàKÐK¨=Ô+JÐKÑKÔKˆØ˜Œ{˜bÒ Ð Ð Ð Ý Ô 3Ñ4Ô4ˆÝ'¨Ô(EÑFÔFˆÔÝ”X—^’^Ñ%Ô%ˆŒ
Ø#'ˆŒ
Ô Ý!)¨-Ô*IÑ!JÔ!JˆÔØ!2ˆÔà!Ô.Ô3ˆŒ	Ø*.ˆŒ	Ð&Ñ'ð ˆŒÝ%9ˆÔ"å+¨L¸$Ô:NÑOÔOÐOå‘X”XˆŒ
å#6°|ÀTÑ#JÔ#JÑ ˆ�jð 	Œ
×Ò˜,×-Ò-Ñ/Ô/Ñ0Ô0Ð0õ 	˜-Ô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˜Ø Ð/Ð/Ý˜%‘y”y JÐ.Ð.Ð.ØUñ /Ô.Ð.ð (­¨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 )Ñ,Ô,Ð,ØŒ
�ŠÑÔÐØ�Š‰Œˆˆˆr3   c                 óî   — |                       ¦   «         D ]_\  }}t          |dz   ¦  «         t          |d¦  «        r8t          |j        t
          j        j        ¦  «        rt          |j        ¦  «         Œ`d S )Nú:rj   )r  ÚprintrK   rS   rj   rM   r�   r�   )rd   rÆ   r¯   s      r4   Ú_print_graphzUnflattenedModule._print_graph  sw   € Ø×*Ò*Ñ,Ô,ð 	!ð 	!‰HˆC�Ý�#˜‘)ÑÔÐÝ�s˜GÑ$Ô$ð !­°C´I½u¼x¼~Ñ)NÔ)Nð !Ý�c”iÑ Ô Ð øð	!ð 	!r3   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 Adatped: z 
Exported module: )	rç   Ú	signatureÚin_specrÃ   Ú	TypeErrorr»   rè   r~   Ú
num_leaves)rd   Ú	flat_argsr'  Úinputr&  s        r4   Ú_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ñô ð ð
 Ðr3   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
        r5ddlm} | j        du rd	„ |D ¦   «         }	n|}	 || j        |	| j        ¦  «         |S )
Nr   c                 ó   — g | ]
}|d          ‘ŒS rÕ   r2   ©rD   Úxs     r4   r°   z<UnflattenedModule.process_forward_inputs.<locals>.<listcomp>-  s   € Ð7Ð7Ð7˜a�Q�q”TÐ7Ð7Ð7r3   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   ©rD   rý   s     r4   r°   z<UnflattenedModule.process_forward_inputs.<locals>.<listcomp>F  sJ   € ð +ð +ð +àõ " aÐ(Ñ(Ô(­*Ð:NÐ*OÑ*OÔ*OÐPÐRUÐVð+ð +ð +r3   )rç   r&  r   r'  r¾   Útree_flatten_with_pathr   ré   r#  r,  r  Útorch._export.utilsr1  r  rñ   )
rd   r„   ru   r&  Úreordered_kwargsÚflat_args_with_pathr'  r*  r1  Únew_flat_args_with_paths
             r4   Úprocess_forward_inputsz(UnflattenedModule.process_forward_inputs#  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Ð#Ð#ð+ð +à(ð+ñ +ô +Ð'Ð'ð
 +>Ð'à.Ð.ØÔ'Ð)@À$ÔBXñô ð ð Ðr3   c                 ó|  — t          j                             | j        d¬¦  «        |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 )Nz*do not trace into preprocessing the inputs)Úreasonr   rv   rw   Fr   )rM   Ú_dynamoÚdisabler;  rç   r&  r   r�   r‚   rj   rƒ   rS   r€   r~   rx   ry   rp   rz   ri   r{   r¾   Útree_unflattenÚout_spec)rd   r„   ru   r*  r&  Ú
return_valÚtree_outs          r4   r{   zUnflattenedModule.forwardS  sY  € Ý”M×)Ò)ØÔ'Ø?ð *ñ 
ô 
ð ðð ðð ˆ	ð Ô*¨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ÐBr3   c                 ó’   — t           j                             | | j        ¦  «        | j        d<   | j                             ¦   «          d S )Nri   )rM   r�   r‰   rj   rŠ   r‹   rc   s    r4   r‘   zUnflattenedModule.finalizek  s:   € Ý(-¬×(<Ò(<¸TÀ4Ä:Ñ(NÔ(NˆŒ�nÑ%ØŒ
�ŠÑÔÐÐÐr3   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 ]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Ú   Ú0r@   r   rÉ   c                 ó   — g | ]\  }}|‘ŒS r2   r2   )rD   r  r¯   s      r4   r°   z7UnflattenedModule._dispatch_modules.<locals>.<listcomp>‹  s   € ÐKÐKÐK¡F A s˜CÐKÐKÐKr3   c                 óž   •— |j         D ]C}|j        dk    r6|j                             d¦  «        d         }| r| › d|› �n|}|‰v r||_        ŒDd S )Nr«   rÚ   r   r@   )rŒ   r�   r<   rI   )rY   rj   r�   rÆ   ÚpathÚcalled_moduless        €r4   Úelide_call_indicesz?UnflattenedModule._dispatch_modules.<locals>.elide_call_indices™  su   ø€ Øœð *ð *�Ø”7˜mÒ+Ð+Øœ+×+Ò+¨CÑ0Ô0°Ô3�CØ06Ð?˜fÐ,Ð, sÐ,Ð,Ð,¸C�DØ˜~Ð-Ð-Ø&)˜œøð*ð *r3   Frâ   rj   r¦   N)r   r|   rç   rÆ   r&  r   ÚgetrI   rŽ   ÚintrJ   Úrsplitr÷   rR   Úsortedr~   ÚrangeÚ
_call_namer   rQ   ÚpopÚset_submoduler"   r  rK   rj   r¦   )rd   rØ   r  rÈ   rÆ   r¯   Úbaser3  Ú	attrs_mapr<   Úorig_fqnrÓ   Úindexed_call_modulesr¢   rà   rY   rK  Úmod_rJ  s                     @r4   r  z#UnflattenedModule._dispatch_moduleso  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Ð1Ð1Ð1Ø&Ð& s¨D¬JÑ7Ô7Ð7Ð7øð	8ð 	8r3   TFc                 ó*   — t          | d||||¦  «        S )Nr#   r“   r”   s        r4   r™   z UnflattenedModule.print_readable©  rš   r3   rB   r›   )r+   r,   r-   r   r   r    rn   r$  r,  r;  r{   r‘   r  r™   rž   rŸ   s   @r4   r#   r#     sé   ø€ € € € € ð 8<ðcð cà&ðcð $ OÔ4ðcð cð cð cð cð cðJ!ð !ð !ðð ð ð6.ð .ð .ð`Cð Cð Cð0ð ð ð88ð 88ð 88ðx ØØØð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r3   r#   r*   rÃ   ra   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     r4   r$   r$   º  s"   € õ, # 6Ñ*Ô*€FÝ˜VÐ%6Ñ7Ô7Ð7r3   rj   rä   c                 ó˜  ‡‡— t          t          t          | j        ¦  «        ¦  «        ¦  «        }|j        dk    rt          |j        ¦  «        dk    sJ ‚|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   r   c                 ó4   — i | ]}|j         d k    ¯|j        |“ŒS rÜ   )r�   rÓ   rÞ   s     r4   rá   z7_inplace_buffer_and_input_mutations.<locals>.<dictcomp>õ  s/   € ð ð ð Ø °4´7¸mÒ3KÐ3KˆŒ	�4Ð3KÐ3KÐ3Kr3   c                 ó   — i | ]\  }}||“Œ	S r2   r2   )rD   rE   Ú
buffer_fqns      r4   rá   z7_inplace_buffer_and_input_mutations.<locals>.<dictcomp>û  s+   € ð  ð  ð  Ù'˜!˜Zˆ
�Að ð  ð  r3   c                 ó(   •— i | ]\  }}|‰|         “ŒS r2   r2   )rD   rE   r_  Úbuffer_fqn_to_input_names      €r4   rá   z7_inplace_buffer_and_input_mutations.<locals>.<dictcomp>þ  s5   ø€ ð #ð #ð #áˆAˆzð 	
Ð# JÔ/ð#ð #ð #r3   NÚcall_functionc                 ó   •— | ‰uS rB   r2   )r0  Únew_nodes    €r4   ú<lambda>z5_inplace_buffer_and_input_mutations.<locals>.<lambda>  s   ø€ ¸1ÀHÐ;L€ r3   )ÚnextÚiterÚreversedrŒ   r�   r~   r„   Úinputs_to_buffersrR   Úbuffers_to_mutaterP   Úuser_inputs_to_mutaterÓ   Úinserting_afterÚcreate_noderM   ÚopsÚatenÚcopy_Údefaultrè   Úreplace_all_uses_withr€   )rj   rä   Úoutput_nodeÚreturn_argsÚinput_name_to_nodeÚmutation_name_to_input_nameÚnum_mutationsÚmutationÚ
input_nameÚ
input_noderE   ÚvÚuser_outputsra  rd  s                @@r4   rê   rê   Ô  sY  øø€ õ: •t�H U¤[Ñ1Ô1Ñ2Ô2Ñ3Ô3€KØŒ>˜XÒ%Ð%­#¨kÔ.>Ñ*?Ô*?À1Ò*DÐ*DÐ*DÐ*DØÔ" 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FÆF
	ÆF
	c                 óx   — t          | ¦  «        t          |¦  «        k     o|dt          | ¦  «        …         | k    S )z2Check whether `candidate` is a prefix of `target`.N)r~   )Ú	candidater<   s     r4   Ú
_is_prefixr    s4   € åˆy‰>Œ>�C ™KœKÒ'ÐQ¨FÐ3CµS¸±^´^Ð3CÔ,DÈ	Ò,QÐQr3   Ú
parent_fqnÚ	child_fqnc                 ó  — | dk    r|S |                       d¦  «        }|                      d¦  «        }|d t          |¦  «        …         |k    rt          d|› d| › d�¦  «        ‚d                     |t          |¦  «        d …         ¦  «        S )NrÉ   r@   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.)rI   r~   ÚRuntimeErrorr²   )r€  r�  Úparent_splitÚchild_splits       r4   Ú_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Ð5r3   r0  Ú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 )Nrj   ra   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 )Nra   c                 óª   •— t          | t          j        j        ¦  «        r%dt	          ‰t          | ¦  «                 ¦  «        z   S t	          | ¦  «        S )Nú%)rS   rM   r�   ÚNoderf   rõ   )rý   Ú	nodes_idxs    €r4   Úarg_dumpz>_check_graph_equivalence.<locals>.graph_dump.<locals>.arg_dump8  sB   ø€ Ý˜#�uœxœ}Ñ-Ô-ð 5Ø�S ­2¨c©7¬7Ô!3Ñ4Ô4Ñ4Ð4Ý�s‘8”8ˆOr3   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r2   )rf   r5  s     r4   r°   z@_check_graph_equivalence.<locals>.graph_dump.<locals>.<listcomp>>  s   € ÐRÐRÐR c�˜S™œÐRÐRÐRr3   c                 ó"   — g | ]\  }}|› d |› �‘ŒS )ú=r2   )rD   ÚkeyÚvalues      r4   r°   z@_check_graph_equivalence.<locals>.graph_dump.<locals>.<listcomp>?  s:   € ð ð ð á�C˜ð Ð Ð ˜Ð Ð ðð ð r3   )rb  Úget_attrrÉ   z: ú[z](z, ú)r±   )rf   r  rŒ   r¾   Útree_mapr„   ru   rR   r�   r<   rŽ   r²   rõ   )rj   ÚretrŽ  rà   r�   Ú	args_dumpr<   r�  s          @r4   Ú
graph_dumpz,_check_graph_equivalence.<locals>.graph_dump4  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˜‰~Œ~Ðr3   )rM   r�   r�   rf   rS   rj   )r0  r‡  rš  s      r4   Ú_check_graph_equivalencer›  3  s…   € ð�%œ(œ.ð ­Sð ð ð ð õ( �a”g�uœxœ~Ñ.Ô.Ð.Ð.Ð.Ý�a”g�uœxœ~Ñ.Ô.Ð.Ð.Ð.Øˆ:�a”gÑÔ * *¨Q¬WÑ"5Ô"5Ò5Ð5r3   Úgmc                 óŒ   — d}t          | d|› �¦  «        r|dz  }t          | d|› �¦  «        °d|› �}t          | ||¦  «         |S )Nr   Ú_spec_r   )rK   rL   )rœ  Úspecrà   rÓ   s       r4   Ú	_add_specr   M  sd   € Ø	€AÝ
�"�l˜q�l�lÑ
#Ô
#ð Ø	ˆQ‰ˆõ �"�l˜q�l�lÑ
#Ô
#ð à�Aˆ<ˆ<€DÝˆB��dÑÔÐØ€Kr3   c                 ó    — | j                              t          j        |f¦  «        }| j                              t          j        |df¦  «        }|S r¤   )rj   rb  r¾   Útree_flattenÚoperatorÚgetitem)rœ  r�   ÚflattenÚ	getitem_0s       r4   Ú_generate_flattenr§  V  sB   € ØŒh×$Ò$¥VÔ%8¸4¸'ÑBÔB€GØ”×&Ò&¥xÔ'7¸'À1¸ÑFÔF€IØÐr3   c                 ó¤   — t          | |¦  «        }| j                             |¦  «        }| j                             t          j        ||f¦  «        S rB   )r   rj   r”  rb  Ú	fx_pytreeÚtree_flatten_spec)rœ  r�   rŸ  rÓ   Ú	spec_nodes        r4   Ú_generate_flatten_specr¬  \  sH   € õ �R˜ÑÔ€DØ”×!Ò! $Ñ'Ô'€IØŒ8×!Ò!¥)Ô"=ÀÀiÐ?PÑQÔQÐQr3   c                 ó¤   — t          | |¦  «        }| j                             |¦  «        }| j                             t          j        ||f¦  «        S rB   )r   rj   r”  rb  r¾   r@  )rœ  rŒ   rŸ  rÓ   r«  s        r4   Ú_generate_unflattenr®  d  sH   € õ �R˜ÑÔ€DØ”×!Ò! $Ñ'Ô'€IØŒ8×!Ò!¥&Ô"7¸%ÀÐ9KÑLÔLÐLr3   r¯   c                 óÒ   — |                      d¦  «        �^ }}|D ]<}t          | |d ¦  «        }|€ d S t          |t          j        j        ¦  «        s d S |} Œ=t          | |d ¦  «        S )Nr@   )rI   r¥   rS   rM   rN   rO   )r¯   r<   rY   rZ   rG   Úsubmods         r4   Ú_get_submoduler±  l  sy   € Ø—\’\ #Ñ&Ô&�N€VˆUàð 	ð 	ˆÝ˜˜d DÑ)Ô)ˆàˆ>Ø�4�4å˜&¥%¤(¤/Ñ2Ô2ð 	Ø�4�4àˆˆå�3˜˜tÑ$Ô$Ð$r3   Ú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 )Nr@   r   F)
rI   r  r¥   r²   rM   rN   rO   rL   rS   Ú
add_module)	r¯   r<   r²  r³  rY   rZ   rà   rG   r°  s	            r4   Ú_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˜-Ñ(Ô(Ð(Ð(Ð(r3   rT  r  c                 ó&   — |dk    r| n	| › d|dz
  › �S )Nr   rÚ   r2   )rT  r  s     r4   rQ  rQ  —  s(   € ð ˜’6�6ˆ4ˆ4 $Ð0Ð0¨¨Q©Ð0Ð0Ð0r3   Ú	call_namec                 óZ   — t          j        t          j        |¦  «        dz   | ¦  «        d uS )Nz(@\d+)?$)ÚreÚmatchÚescape)r¸  rT  s     r4   rC   rC   �  s&   € åŒ8•B”I˜d‘O”O kÑ1°9Ñ=Ô=ÀTÐIÐIr3   c                   ó   — e Zd Z	 ddej        j        deej        j        df         dee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 ‰ _        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        ¦  «        }|��¥‰ 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ì   ©rk   c                 óÌ   •— ‰j         r‰j         › d| › �n| }|‰j        v r‰j        |         S t          t          j                             ¦   «         ‰¬¦  «        }|‰j        |<   |S )Nr@   rÃ  )rÆ   Úcreated_modulesr!   rM   r�   r�   )rÆ   rI  r°  Úparentrd   rk   s      €€€r4   r³  z,_ModuleFrame.__init__.<locals>.create_module×  sp   ø€ Ø06´
ÐC˜&œ*Ð,Ð, sÐ,Ð,Ð,À�Ø˜4Ô/Ð/Ð/ØÔ/°Ô5Ð5Ý*­5¬8¯>ª>Ñ+;Ô+;ÀÐCÑCÔC�Ø-3�Ô$ TÑ*Ø�r3   r   )r€  Úparent_moduleÚparent_call_modulerÆ   Úcall_idxr*   é   c                 óJ   •— g | ]}‰j                              d |› �¦  «        ‘Œ S )Ú_positional_arg_)rj   rˆ   )rD   r3  rd   s     €r4   r°   z)_ModuleFrame.__init__.<locals>.<listcomp>ø  sB   ø€ ð ð ð àð ”J×*Ò*Ð+C¸cÐ+CÐ+CÑDÔDðð ð r3   rb  Ú
_constant_)r�   r<   r„   rÓ   c                 óh   •— g | ].}‰j         j                             t          j        ‰|f¦  «        ‘Œ/S r2   ©rÆ  rj   rb  r£  r¤  )rD   rà   Ú	args_noderd   s     €€r4   r°   z)_ModuleFrame.__init__.<locals>.<listcomp>9  sF   ø€ ð ð ð àð ”KÔ%×3Ò3µHÔ4DÀyÐRSÀnÑUÔUðð ð r3   c                 ój   •— i | ]/}|‰j         j                             t          j        ‰|f¦  «        “Œ0S r2   rÏ  )rD   rE   Úkwargs_noderd   s     €€r4   rá   z)_ModuleFrame.__init__.<locals>.<dictcomp>=  sO   ø€ ð ð ð ð ð �t”{Ô(×6Ò6Ý Ô(¨;¸Ð*:ñô ðð ð r3   )>r¿  rŒ   Ú
seen_nodesr
  r  rÅ  rÆ  rÀ  Ú	module_idrç   ÚverboserÆ   rQ  r�  r*   rK   rì   rL  r!   rM   r�   r�   rj   Únode_mapÚnode_to_placeholderrÈ  r†  r¶  r«   rQ   rŽ   Ú_SubmoduleEntryr'  Únum_childrenÚchildren_specsÚcontextrl  rP  rˆ   r¬  r€   r  Úinputsrm  r£  r¤  rS   r   rÓ   Úcopyrè   Úinserting_beforer“  r   r   r   r   Úremap_inputr®  rb  r„   ru   ) rd   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*  r3  rý   Úflat_arg_nodeÚinput_nodesr+  Úinputs_noderÐ  rÒ  rk   s    `      `                     @@@r4   rn   z_ModuleFrame.__init__£  sß  øøøøø€ ð %ˆŒØˆŒ
Ø$ˆŒØ(ˆÔØ$ˆŒØ.ˆÔØˆŒØ(ˆÔØ"ˆŒà!2ˆÔØˆŒà"&Ô"3°BÔ"7ÑˆŒ�"�iå# D¤H¨i¸!©mÑ<Ô<ˆŒàÐVØÐØ ˆDŒKÝ)0°¸Ñ)AÔ)AÐI˜œ˜ÀrˆDŒJˆJàÔ.×2Ò2Ø”Ý!¥%¤(§.¢.Ñ"2Ô"2°rÐ:Ñ:Ô:ñô ˆ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°´ÀÄÔ1JÑKøð!ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð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&   Ê5EPÐP	ÐP	Ð4E5V5Ö5V9Ö<V9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Æ   rj   r¿  rÞ  rˆ   rÓ   rz   rÝ  rè   r×  )rd   r0  Úplaceholder_nodes      r4   Úadd_placeholderz_ModuleFrame.add_placeholderG  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 rB   )r¾   Útree_map_onlyrM   r�   rŒ  rß  r„   ru   rj   rb  r<   rÝ  rè   rÖ  )rd   r0  r„   ru   r�   s        r4   Úcopy_sym_call_functionz#_ModuleFrame.copy_sym_call_functionR  s}   € õ Ô#¥E¤H¤M°4Ô3CÀQÄVÑLÔLˆÝÔ%¥e¤h¤m°TÔ5EÀqÄxÑPÔPˆØŒz×'Ò'¨¬°$¸Ñ?Ô?ˆÝ”I˜aœfÑ%Ô%ˆŒ	ØˆŒ�aÑØˆr3   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                              | |¦  «        S tC          d|j        › d	|› �¦  «        ‚)
Nzremap_input(r–  rˆ   r   rb  r,   Ú	_operatorz(Could not run remap_input() on op type: z
 for node )"rj   r¿  rÖ  r#  r×  r�   rç   rL  rÆ   rì  rÈ  rÆ  rÞ  Ú
insert_argrß  r<   rM   rn  ro  Úsym_sizerM  rG   rq  ÚunbindÚsumÚdim_IntListÚviewÚdiffrK   r,   rï  rì   Úreadrƒ  )rd   r0  s     r4   rß  z_ModuleFrame.remap_input`  s}  € ØŒw˜$œ/Ð)Ð)Ð)Ð)Ø�”ÐÐØ”= Ô#Ð#Ø�
Š
Ð& !Ð&Ð&Ð&Ñ'Ô'Ð'Ø�Ô(Ð(Ð(ØÔ+¨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c           	      ó  ‡ ‡— ‰ 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        }t7          |¦  «        dk    r|d         }t          |t8          t:          j        j        f¦  «        sJ ‚‰ j          !                    |¦  «         |€d S t          |t:          j        j        ¦  «        r|j"                             d¦  «        nd„ |D ¦   «         |j"        d<   t7          |¦  «        dk    r|€|‰ j        j        |d         <   d S tG          |¦  «        D ]c\  }	}
|
€Œt:          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ƒ  rj   )r\  Ú	seen_noderd   s     €r4   Ú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ñô ð r3   c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S rB   r2   )rD   r\  rý  s     €r4   rH   z0_ModuleFrame.finalize_outputs.<locals>.<genexpr>¶  s/   øè è € ÐPÐP¸Ð,Ð,¨VÑ4Ô4ÐPÐPÐPÐPÐPÐPr3   r   r   Úvalc                 óB   — g | ]}|j                              d ¦  «        ‘ŒS )rÿ  )rè   rL  )rD   Úos     r4   r°   z1_ModuleFrame.finalize_outputs.<locals>.<listcomp>×  s&   € Ð;Ð;Ð;¨�!”&—*’*˜UÑ#Ô#Ð;Ð;Ð;r3   )&rÅ  rR  rÆ   rç   rL  r�  rÆ  r³   rS   r   r   r   r   r   rÓ   rÓ  rŽ   rƒ  r®  r*   r€   rA  r¬  rÈ  rÖ  ÚkeysÚusersr~   r|   rM   r�   rŒ  rj   r\  rè   r  ÚProxyr�   )rd   Úorig_outputsr&  r\  Útree_out_nodeÚ
parent_outÚgraph_outputsÚ	orig_nodeÚ	user_noderà   Úorig_outputÚ	proxy_outrý  s   `           @r4   Úfinalize_outputsz_ModuleFrame.finalize_outputs‹  sH  øø€ ØÔ× Ò  ¤¨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õ
 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ð>ð >r3   c                 óÄ   — |                       d|                     ¦   «         ¦  «         | j                             || j        ¦  «        | j        |<   || j        |j        <   d S )NÚcopying)r#  Úformat_noderj   Ú	node_copyrß  rÖ  rÓ  rÓ   r�   s     r4   Ú	copy_nodez_ModuleFrame.copy_nodeå  sW   € Ø�
Š
�9˜d×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ø"œj×2Ò2°4¸Ô9IÑJÔJˆŒ�dÑØ%)ˆŒ˜œ	Ñ"Ð"Ð"r3   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 )NÚnn_module_stackr   rˆ   r   r\  )
r  r¿  rŒ   r#  rè   rL  r  r�   r  Úrun_from)rd   rà   r�   Únode_idxs       r4   Ú	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Ñ$Ô$Ð$øð	%ð 	%r3   c                 ó0   — | j         rt          |i |¤Ž d S d S rB   )rÕ  r#  )rd   r„   ru   s      r4   r#  z_ModuleFrame.printý  s/   € ØŒ<ð 	#Ý�4Ð"˜6Ð"Ð"Ð"Ð"Ð"ð	#ð 	#r3   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ˆ   ÚSTEPr\  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   )rM  rI   )rD   rE   rI  rk   s       r4   r°   z)_ModuleFrame.run_from.<locals>.<listcomp>&  sj   € ð %ð %ð %ñ &˜™:˜D "ð	 Ø"Ð,˜˜¨Ø14¸°°�˜AŸGšG C™LœL¨Ô,Ñ-Ô-Ð-¸qðð%ð %ð %r3   Ú	outliningzCreating new stack frame forrÚ   r”  )r~   rŒ   r�   r#  r  rÀ  r  rè   rL  rƒ  Ú(torch._export.passes._node_metadata_hookr  rR   rÆ   rj   r  r|   r  r¾  r¿  rÓ  r
  r  rÅ  rI   rç   r  r�  r÷   r<   r  )
rd   r  Ú
module_idxr�   Údepthr  r  Únode_module_stackÚnext_moduleÚnext_module_keys
             r4   r  z_ModuleFrame.run_from  sM  € Øˆ
à�˜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ðq �˜TœZ™œÒ(Ñ(Ð(Ð(Ð(Ð(r3   rB   )r+   r,   r-   rM   r�   r�   r€   rŒ  r|   rf   r   rM  rÀ   r   r   r‰   r#   rn   rì  rï  rß  r  r  r  r#  r  r2   r3   r4   r¾  r¾  ¢  s8  € € € € € ð LPðb9ð b9à”H”Nðb9ð �U”X”] CÐ'Ô(ðb9ð ˜5  h¨s¤m°SÐ!8Ô9Ô:ð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ðð ð ð)ð )ð )ðVX>ð X>ð X>ðt*ð *ð *ð
%ð %ð %ð&#ð #ð #ð[ð [ð [ð [ð [r3   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-   rf   rg   rM   rN   rO   r�   rŒ  rM  r2   r3   r4   rØ  rØ  _  s]   € € € € € € à€O€O�OØ”8”?Ð"Ð"Ñ"ØœœÐ%Ð%Ñ%Ø	€H€H�HØ€M€M�MØŒHŒOÐÐÑÐÐr3   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 r2   )r&  rÆ   rÇ   s     r4   rá   z'_outline_submodules.<locals>.<dictcomp>x  s6   € ð 	
ð 	
ð 	
àØŒð	
ØŒI�u”ð	
ð 	
ð 	
r3   )r*   )r   r|   rJ   r¾  r€   rŒ   rç   r  )r%  r&  rÓ  r
  r  rÅ  s         r4   rí   rí   i  sœ   € Ø+-€JÝ5@ÅÑ5FÔ5F€LÝ&1µ#Ñ&6Ô&6€JØ24€OÝØÝˆjÔÑÔØØØØØØ	ˆØ
ð	
ð 	
à$Ô6ð	
ñ 	
ô 	
ð
 ðñ ô ÷  ‚i�k„k€kØ˜Ð#Ð#r3   rÉ   rÆ  r   rY   c                 ó–  — |dk    rit          |                     ¦   «         ¦  «        dd …         D ]?}t          | |¦  «        €-t          | |t          j                             ¦   «         ¦  «         Œ@g }t          | j                             ¦   «         ¦  «        D ]i\  }}|€Œ||z   }t          ||| 
                    d¦  «        d         dz   ¬¦  «         t          | |¦  «         |                     ||         ||f¦  «         Œj|                     t          j        d¦  «        ¬¦  «         |D ]\  }}}|                      ||¦  «         Œd S )NrÉ   r   rÚ   r   r@   )rY   )r’  )r|   r  r±  r¶  rM   rN   rO   rQ   rR   r  rI   ÚdelattrrŽ   Úsortr£  Ú
itemgetterÚregister_module)rÆ  r   rY   rÆ   ÚchildrenrÓ   Úchildr  s           r4   r  r  ‚  sU  € ð �‚|€|Ý˜	ŸšÑ(Ô(Ñ)Ô)¨!¨"¨"Ô-ð 	?ð 	?ˆ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·Y²Y¸s±^´^ÀAÔ5FÈÑ5LÐMÑMÔMÐMÝ�˜ÑÔÐØ�Š˜ 3œ¨¨uÐ5Ñ6Ô6Ð6Ð6Ø‡M‚M•hÔ)¨!Ñ,Ô,€MÑ-Ô-Ð-Ø"ð ,ð ,‰ˆˆ4�Ø×Ò˜t UÑ+Ô+Ð+Ð+ð,ð ,r3   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 rB   )r   rJ   Únode_names_by_fqnrc   s    r4   rn   z_IVals.__init__­  s   € å!,­SÑ!1Ô!1ˆÔÐÐr3   c                 ó\   — t          |t          j        j        ¦  «        r|j        j        S dS r6   )rS   rM   Ú_opsÚ
OpOverloadÚ_schemaÚ
is_mutable)rd   r<   s     r4   Ú_is_mutablez_IVals._is_mutable±  s)   € Ý�f�eœjÔ3Ñ4Ô4ð 	-Ø”>Ô,Ð,Øˆur3   c                 ó‚  — |j         dk    sJ ‚|                      |j        ¦  «        }t          d|j        |¦  «         |sat	          t          |j        d                              ¦   «         ¦  «        ¦  «        \  }}| j        |          	                    |j
        ¦  «         |                     |j        d         ¦  «        S )zI
        Read state corresponding to a given intermediate value.
        rb  zChecking mutabilityr  r   )r�   r8  r<   r#  rf  rh  rè   rî   r2  r÷   rÓ   rß  r„   )rd   Úmfr�   ÚbrÆ   r  s         r4   rù  z_IVals.read¶  s®   € ð
 Œw˜/Ò)Ð)Ð)Ð)Ø×Ò˜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Ñ+Ô+Ð+r3   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 r2   r4  )rD   r  Ú
node_namess     €r4   r°   z!_IVals.update.<locals>.<listcomp>Í  s%   ø€ ÐHÐHÐH˜q°1´6¸ZÐ3GÐ3G˜Ð3GÐ3GÐ3Gr3   rb  r   N)r*   rj   r2  rÆ   rŒ   rl  rm  rM   rn  ro  rp  rq  r„   rÝ  rè   )	rd   Ú
partitionsÚshared_submodulesrÈ   rj   rŒ   r�   rd  r>  s	           @r4   rP   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œ   rn   r8  rù  rP   r2   r3   r4   rë   rë   ˜  sZ   € € € € € ðð ð(2ð 2ð 2ðð ð ð
,ð ,ð ,ð=ð =ð =ð =ð =r3   rë   r  c                 ó®   — |                      ¦   «         D ]?\  }}|rt          ||¦  «        n|}|D ]#}t          | |¦  «        }t          |||¦  «         Œ$Œ@d S rB   )rR   r   r¥   rL   )rœ  r&  r  r�  Únamesr*   rÓ   rÿ  s           r4   rï   rï   Ú  s   € ð
 '×,Ò,Ñ.Ô.ð 'ð 'Ñˆ	�5Ø6?ÐP•˜;¨	Ñ2Ô2Ð2À[ˆØð 	'ð 	'ˆDÝ˜"˜dÑ#Ô#ˆCÝ�F˜D #Ñ&Ô&Ð&Ð&ð	'ð'ð 'r3   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 )NFr@   T)r  rQ  rÆ   rÉ  r†  r€  r›  r*   rÇ  rI   r   rQ   rR  rÈ  r<   rS  )r?  rØ   r@  rà   rÈ   r�  r<   ÚdeduplicatedÚseenrÆ  rY   rÓ   Úseen_child_fqnÚseen_targets                 r4   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 #Ð"r3   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J ‚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…         }t1          | |¦  «        }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          | tB          ¦  «        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.Modulerj   r   c                 ó   — | j         dk    S )Nrˆ   rÝ   ©r  s    r4   re  z_sink_params.<locals>.<lambda>@  s   €  1¤4¨=Ò#8€ r3   rÂ  c                 ó   — | j         dk    S )Nr«   rÝ   rL  s    r4   re  z_sink_params.<locals>.<lambda>D  s   € ¨¬°Ò)>€ r3   c                 ó<   •— | j         ‰t          ‰¦  «                 vS rB   )rÓ   rõ   )r  rI  Ú	submodules    €€r4   re  z_sink_params.<locals>.<lambda>L  s   ø€ ˜aœfÐ,GÍÈ9ÉÌÔ,VÐV€ r3   r@   c                 óD   — g | ]}|                      d ¦  «        d         ‘ŒS )rÚ   r   )rI   r/  s     r4   r°   z _sink_params.<locals>.<listcomp>Z  s&   € Ð)IÐ)IÐ)I¸a¨!¯'ª'°#©,¬,°q¬/Ð)IÐ)IÐ)Ir3   r”  T)Úpropagate_meta)#r   rJ   rõ   rQ   rR   r   r
   rP   r¥   r~   rŒ   rS   rM   r�   r�   r|   Úfilterr   r<   r€   r„   rÓ   rI   r  r   rV   rX   rl  rm  r²   rr  Ú
erase_noder÷   r!   r‘   )r*   r  rH  rI  rÓ   Úsubmod_id_to_inputs_removedrE   r{  rj   rÜ  Úthe_last_inputÚcall_module_nodesr�   Úinputs_to_state_of_scopeÚ
state_nameÚsnÚsn_splitÚinputs_removedÚ	attr_pathÚ
state_attrrd  rO  s      `                 @r4   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ÝÐ" 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œ^Ñ,Ô,Ð,Ð,Ð,å•&Ð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Ð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   Ë*LÌL		ÌL		)TrB   )rÉ   )dr¼   rÝ  Úloggingr£  rº  Úcollectionsr   Ú
contextlibr   r   Údataclassesr   Úenumr   Útypingr   r	   r
   r   r   rM   Útorch.fx._pytreer�   Ú_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&   r7   r9   rV   rX   rN   rO   rf   Úboolr]   r_   r!   r"   ÚABCr    r#   r$   r�   rê   r  r†  r›  r   r‰   rŒ  r§  r¬  r®  r±  r¶  rM  rQ  rC   r¾  rØ  rí   rÀ   r  rë   rJ   rï   r  r|   r   r2   r3   r4   ú<module>rs     s  ðà 
€
€
€
Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 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ð ð ð ð ñ ô ð ðU
ð U
ð U
ð U
ð U
˜¨¬¬ñ U
ô U
ð U
ðp-"ð -"ð -"ð -"ð -" .°%´(´/ñ -"ô -"ð -"ð`ð ð ð ð �c”gñ ô ð ð$[
ð [
ð [
ð [
ð [
˜œœñ [
ô [
ð [
ð~ MQð8ð 8Øð8Ø08¸Ô0Ið8àð8ð 8ð 8ð 8ð4E)ØŒ8Œ>ðE)à)ðE)ð 
ðE)ð E)ð E)ð E)ðP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1�Sð 1˜Sð 1 Sð 1ð 1ð 1ð 1ðJ˜Sð J¨ð J°ð Jð Jð Jð Jð
zð zð zð zð zñ zô zð zðz ðð ð ð ð ñ ô ñ „ðð$ E¤H¤Nð $ÐARð $ð $ð $ð $ð4 GIð,ð ,ØŒHŒOð,Ø(,¨S°#¨X¬ð,Ø@Cð,ð ,ð ,ð ,ð,?=ð ?=ð ?=ð ?=ð ?=ñ ?=ô ?=ð ?=ðD	'ØŒÔð	'à"ð	'ð �S˜#˜cœ(�]Ô#ð	'ð 	'ð 	'ð 	'ð(#ð (#ð (#ð^ BFð	p(ð p(ØŒHŒOðp(à˜#˜t Cœy˜.Ô)ðp(ð �Œ9ðp(ð "*¨$¨s°C¸´H¨}Ô*=Ô!>ð	p(ð p(ð p(ð p(ð p(ð p(r3   