Ë
    øÿæiû' ã                   ót  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZ d dlZd dlmc mZ d dlmc mZ d d	lmZ d d
lmZ d dlm Z  d dl!m"Z"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jh                  e5«      Z6g d¢Z7 G d„ de«      Z8 ed¬«       G d„ d«      «       Z9da:e
d„ «       Z;	 d]dejx                  ejz                  z  ej|                  j~                  z  dej|                  j~                  de@de8deAf
d„ZB G d „ d!«      ZC G d"„ d#eCej|                  j~                  «      ZD G d$„ d%eCej|                  j~                  «      ZE G d&„ d'e jŒ                  «      ZG G d(„ d)eCej|                  j~                  «      ZH	 d^d*ed+eGdz  d,eHfd-„ZId.ej*                  j”                  d/e#d,dfd0„ZKd.ej*                  j”                  d,e@dz  fd1„ZLd2„ ZMd3„ ZNd4e@d5e@d,e@fd6„ZOd7ej|                  j~                  d8ej|                  j~                  fd9„ZPd:ej|                  j~                  d,e@fd;„ZQd:ej*                  j¤                  d,ej*                  j¦                  fd<„ZTd:ej*                  j¤                  eDz  eHz  d,ej*                  j¦                  fd=„ZUd:ej*                  j¤                  eDz  eHz  d,ej*                  j¦                  fd>„ZVd?ej|                  j~                  de@fd@„ZW	 d^d?ej|                  j~                  de@dAej|                  j~                  dBee@gej|                  j~                  f   dz  fdC„ZXdDe@dEeYd,e@fdF„ZZdGe@dDe@d,eAfdH„Z[ G dI„ dJ«      Z\e G dK„ dL«      «       Z]dMej*                  j”                  dNeHfdO„Z^	 d_dPej|                  j~                  dQe_e@eYf   dRe@fdS„Z` G dT„ dU«      Zad:ej*                  j¤                  dNeHdVe_e@ebe@   f   fdW„ZcdX„ Zd	 d^d*ej|                  j~                  dYe_e@eee@   f   dZeee@   d[e_eYebe@   f   dz  fd\„Zfy)`é    N)Údefaultdict)ÚCallable)Úcontextmanager)Údeepcopy)Ú	dataclass)ÚEnum)ÚAnyÚcast)ÚFakeScriptObject)ÚExportedProgram)Úreorder_kwargs)ÚConstantArgumentÚExportGraphSignatureÚ	InputKindÚModuleCallSignatureÚSymBoolArgumentÚSymFloatArgumentÚSymIntArgumentÚTensorArgument)Úis_fx_symbolic_tracing)Ú	_get_attrÚ_get_attr_via_attr_listÚ_print_readable)Ú
GetAttrKeyÚSequenceKeyé   )Ú_remove_effect_tokens)ÚFlatArgsAdapterÚInterpreterModuleÚInterpreterModuleDispatcherÚUnflattenedModuleÚ	unflattenc                   ó   — e Zd ZdZdZdZdZy)Ú	_AttrKindÚ	parameterÚbufferÚconstantÚmoduleN)Ú__name__Ú
__module__Ú__qualname__Ú	PARAMETERÚBUFFERÚCONSTANTÚMODULE© ó    úk/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/torch/export/unflatten.pyr$   r$   2   s   „ Ø€IØ€FØ€HØ�Fr1   r$   T)Úfrozenc                   óN   — e Zd ZU dZej
                  ed<   eed<   eed<   eed<   y)Ú	_TensorIDzJCustom tensor identifier containing storage, stride, and size information.Úuntyped_storageÚstrideÚsizeÚstorage_offsetN)	r)   r*   r+   Ú__doc__ÚtorchÚUntypedStorageÚ__annotations__ÚtupleÚintr0   r1   r2   r5   r5   9   s!   … áTà×)Ñ)Ó)ØƒMØ
ƒKØÔr1   r5   c               #   ó8   K  — t         } da 	 d –— | a y # | a w xY w­w©NF)ÚRUN_WITH_INTERPRETER)Úold_flags    r2   Ú_disable_interpreterrD   F   s'   è ø€ ô $€HØ Ðð(Ûà'Ñø˜xÑüs   ‚	Œ �“—Úfrom_objÚ	to_moduleÚtargetÚ	attr_kindÚ
persistentc                 ór  ‡	— |j                  d«      �^ }}|h}|D ]|  Š	t        «       }|D ]i  }t        |‰	«      s)t        |‰	t        j
                  j                  «       «       |j                  ˆ	fd„|j                  j                  «       D «       «       Œk |}Œ~ |D �]˜  }|t        j                  k(  rNt        | t        j
                  j                  «      st        dt        | «      › �«      ‚|j!                  || «       Œe|t        j"                  k(  rFt        | t        j$                  «      st        dt        | «      › �«      ‚|j'                  || |¬«       Œ¾|t        j(                  k(  rkt        | t*        «      rt        d«      ‚t        | t        j$                  t        j,                  f«      st        dt        | «      › �«      ‚t        ||| «       �Œ<|t        j.                  k(  s�ŒQt        | t        j
                  j                  «      st        dt        | «      › �«      ‚t        ||| «       �Œ› y )	NÚ.c              3   ó@   •K  — | ]  \  }}t        |‰«      r|–— Œ y ­w©N)Ú_is_call_name)Ú.0ÚkÚt_callÚitems      €r2   Ú	<genexpr>z_assign_attr.<locals>.<genexpr>g   s'   øè ø€ ð á!;‘I�A�vÜ   DÔ)ô Ù!;ùs   ƒz9expected torch.nn.Parameter for PARAMETER attr_kind, got z0expected torch.Tensor for BUFFER attr_kind, got )rI   z2FakeScriptObject should only exist during tracing.zHexpected torch.Tensor or torch.ScriptObject for CONSTANT attr_kind, got z3expected torch.nn.Module for MODULE attr_kind, got )ÚsplitÚsetÚhasattrÚsetattrr;   ÚnnÚModuleÚupdateÚ_modulesÚitemsr$   r,   Ú
isinstanceÚ	ParameterÚAssertionErrorÚtypeÚregister_parameterr-   ÚTensorÚregister_bufferr.   r   ÚScriptObjectr/   )
rE   rF   rG   rH   rI   ÚprefixÚfieldÚ
to_modulesÚtsrR   s
            @r2   Ú_assign_attrri   S   sþ  ø€ ð —\‘\ #Ó&�N€VˆUð �€JÛˆÜ#&£5ˆÛ#ˆIÜ˜9 dÔ+Ü˜	 4¬¯©¯©Ó):Ô;Ø�I‰Ió à!*×!3Ñ!3×!9Ñ!9Ô!;óõ ð $ð ‰
ð ô  ˆ	Øœ	×+Ñ+Ò+Ü˜h¬¯©×(:Ñ(:Ô;Ü$ØOÔPTÐU]ÓP^ÐO_Ð`óð ð ×(Ñ(¨°Õ9Øœ)×*Ñ*Ò*Ü˜h¬¯©Ô5Ü$ØFÄtÈHÃ~ÐFVÐWóð ð ×%Ñ% e¨XÀ*Ð%ÕMØœ)×,Ñ,Ò,Ü˜(Ô$4Ô5Ü$ØHóð ô Øä—L‘LÜ×&Ñ&ðôô %Ø^Ô_cÐdlÓ_mÐ^nÐoóð ô �I˜u hÖ/Øœ)×*Ñ*Ô*Ü˜h¬¯©¯©Ô8Ü$ØIÌ$ÈxË.ÐIYÐZóð ô �I˜u hÖ/ñE  r1   c                   ó0   — e Zd ZU edz  ed<   dedz  fd„Zy)Ú_SubmoduleBaseNÚ_tyÚreturnc                 ó   — | j                   S )zó
        Subclass of this class - InterpreterModule, InterpreterModuleDispatcher, represents
        corresponding model in eager model. To get this type information for those modules
        in eager model we need to use this method.
        )rl   ©Úselfs    r2   Ú	type_namez_SubmoduleBase.type_name–   s   € ð �x‰xˆr1   )r)   r*   r+   Ústrr=   rq   r0   r1   r2   rk   rk   “   s   … Ø	ˆt‰ƒOð˜3 ™:ô r1   rk   c                   ó´   ‡ — e Zd ZU dZej
                  j                  dz  ed<   	 d
dej
                  j                  de	dz  fˆ fd„Z
d„ Zd„ Z	 	 	 	 dd	„Zˆ xZS )r   zÈA module that uses torch.fx.Interpreter to execute instead of the usual
    codegen that GraphModule uses. This provides better stack trace information
    and makes it easier to debug execution.
    NÚgraph_moduleÚgraphÚtyc                 óv   •— t         ‰| �  «        || _        || _        | | j                  _        t
        | _        y rM   )ÚsuperÚ__init__ru   rl   Úowning_modulerB   Ú_run_with_interpreter)rp   ru   rv   Ú	__class__s      €r2   ry   zInterpreterModule.__init__§   s2   ø€ ô
 	‰ÑÔØˆŒ
ØˆŒØ#'ˆ�
‰
Ô Ü%9ˆÕ"r1   c                 ó  ‡— | j                   €t        d«      ‚t        «       sSt        j                  j                  «       s| j                  s) t        | j                   «      j                  | g|¢­i ‰¤ŽS ‰rÐt        |«      }| j                  t        |«      d  }|j                  ˆfd„|D «       «       t        |«      t        ‰«      k7  r#t        dt        |«      › dt        ‰«      › �«      ‚t        |«      t        | j                  «      k7  r-t        dt        |«      › dt        | j                  «      › �«      ‚t        |«      }t        j                  j                  | | j                   ¬«      j"                  |dd	iŽS )
Nz&Didn't finalize this InterpreterModulec              3   ó0   •K  — | ]  }|‰v r‰|   –— Œ y ­wrM   r0   )rO   Ú
kwarg_nameÚkwargss     €r2   rS   z,InterpreterModule.forward.<locals>.<genexpr>Å   s&   øè ø€ ð  á&1˜
Ø! VÑ+ð ˜:Õ&Ù&1ùs   ƒzkwarg_names length z does not match kwargs length zarg_list length z! does not match arg_names length ©ru   Úenable_io_processingF)rt   r_   r   r;   ÚcompilerÚis_dynamo_compilingr{   r`   ÚforwardÚlistÚ	arg_namesÚlenÚextendr>   ÚfxÚInterpreterru   Úrun)rp   Úargsr€   Úarg_listÚkwarg_namess     `  r2   r…   zInterpreterModule.forward²   se  ø€ Ø×ÑÐ$Ü Ð!IÓJÐJÜ%Ô'Ü�N‰N×.Ñ.Ô0¸×8RÒ8Rð 3”4˜×)Ñ)Ó*×2Ñ2°4ÐI¸$ÒIÀ&ÑIÐIáô
   ›:�Ø"Ÿn™n¬S°«]¨_Ð=�Ø—‘ó  á&1ó ô ô �{Ó#¤s¨6£{Ò2Ü(Ø-¬c°+Ó.>Ð-?Ð?]Ô^aÐbhÓ^iÐ]jÐkóð ô �x“=¤C¨¯©Ó$7Ò7Ü(Ø*¬3¨x«=¨/Ð9ZÔ[^Ð_c×_mÑ_mÓ[nÐZoÐpóð ô ˜X“�ä—8‘8×'Ñ'¨°D·J±JÐ'Ó?×CÑCØðØ,1ñð r1   c                 óT  — t         j                  j                  | | j                  «      | j                  d<   | j                  j                  «        g | _        | j                  j                  D ]7  }|j                  dk(  sŒ| j                  j                  |j                  «       Œ9 y )Nrt   Úplaceholder)r;   rŠ   ÚGraphModuleru   Ú__dict__Úlintr‡   ÚnodesÚopÚappendrG   ©rp   Únodes     r2   ÚfinalizezInterpreterModule.finalizeÜ   st   € ô ).¯©×(<Ñ(<¸TÀ4Ç:Á:Ó(Nˆ�‰�nÑ%Ø�
‰
�‰Ôð ˆŒØ—J‘J×$Ô$ˆDØ�w‰w˜-Ó'Ø—‘×%Ñ% d§k¡kÕ2ñ %r1   c                 ó"   — t        | d||||«      S )Nr   ©r   ©rp   Úprint_outputÚinclude_strideÚinclude_deviceÚcoloreds        r2   Úprint_readablez InterpreterModule.print_readableí   ó#   € ô ØØØØØØó
ð 	
r1   rM   ©TFFF)r)   r*   r+   r:   r;   rŠ   r’   r=   ÚGraphrr   ry   r…   rš   r¢   Ú__classcell__©r|   s   @r2   r   r   Ÿ   se   ø… ñð
 —(‘(×&Ñ&¨Ñ-Ó-ð
 ñ	:à�x‰x�~‰~ð	:ð �$‰Jõ	:ò(òT3ð& ØØØ÷
r1   r   c                   óT   ‡ — e Zd ZdZdee   dee   fˆ fd„Zd„ Z	d„ Z
	 	 	 	 dd„Zˆ xZS )	r    zå
    A module that carries a sequence of InterpreterModules corresponding to
    a sequence of calls of that module. Each call to the module dispatches
    to the next InterpreterModule, and wraps back around after the last.
    ÚattrsÚcall_modulesc           	      óê   •— t         ‰| �  «        |st        d«      ‚|d   j                  | _        |D ]  }t	        | |t        |d   |«      «       Œ |d   j                  | _        || _        d| _        y )Nzcall_modules must not be emptyr   )	rx   ry   r_   r[   rW   Úgetattrrl   Ú_call_modulesÚ
_num_calls)rp   r©   rª   Úaccessorr|   s       €r2   ry   z$InterpreterModuleDispatcher.__init__  so   ø€ Ü‰ÑÔÙÜ Ð!AÓBÐBØ$ Q™×0Ñ0ˆŒÛˆHÜ�D˜(¤G¨L¸©O¸XÓ$FÕGð à ‘?×&Ñ&ˆŒØ)ˆÔØˆ�r1   c                 óÄ   — | j                   | j                     }| j                  dz   t        | j                   «      z  | _        	  ||i |¤ŽS # t        $ r	 d| _        ‚ w xY w)Nr   r   )r­   r®   rˆ   Ú	Exception)rp   r�   r€   Úcall_modules       r2   r…   z#InterpreterModuleDispatcher.forward  sd   € Ø×(Ñ(¨¯©Ñ9ˆØŸ?™?¨QÑ.´#°d×6HÑ6HÓ2IÑIˆŒð	Ù Ð/¨Ñ/Ð/øÜò 	ØˆDŒOØð	ús   ÁA ÁAc                 ó   — | j                   S rM   )r­   ro   s    r2   rª   z(InterpreterModuleDispatcher.call_modules  s   € Ø×!Ñ!Ð!r1   c           	      ó„   — | j                   D �cg c]  }|j                  ||||«      ‘Œ }}dj                  |«      S c c}w )NÚ
)r­   r¢   Újoin)rp   rž   rŸ   r    r¡   ÚmodÚoutputss          r2   r¢   z*InterpreterModuleDispatcher.print_readable  s[   € ð ×)Ò)ó
ñ *�ð ×ÑØØØØõ	ð *ð 	ð 
ð �y‰y˜Ó!Ð!ùò
s   �=r¤   )r)   r*   r+   r:   rU   rr   r†   r   ry   r…   rª   r¢   r¦   r§   s   @r2   r    r    þ   sB   ø„ ñð	˜c #™hð 	°dÐ;LÑ6Mõ 	òò"ð
 ØØØ÷"r1   r    c                   ó°   — e Zd ZdZej
                  	 	 ddej                  dej                  dee	   de
ee	f   dz  de	dz  dee	   fd	„«       Zdee   fd
„Zy)r   zN
    Adapts input arguments with ``input_spec`` to align ``target_spec``.
    NÚtarget_specÚ
input_specÚ
input_argsÚmetadataÚobjrm   c                  ó   — y)z=NOTE: This adapter may mutate given ``input_args_with_path``.Nr0   )rp   rº   r»   r¼   r½   r¾   s         r2   ÚadaptzFlatArgsAdapter.adapt4  s   € ð 	r1   c                 ó   — g S )z>Returns a list of paths that are used to access the flat args.r0   ro   s    r2   Úget_flat_arg_pathsz"FlatArgsAdapter.get_flat_arg_paths@  s   € àˆ	r1   )NN)r)   r*   r+   r:   ÚabcÚabstractmethodÚpytreeÚTreeSpecr†   r	   Údictrr   rÀ   rÂ   r0   r1   r2   r   r   /  s”   „ ñð 	×Ñð +/Øñ	à—_‘_ð	ð —O‘Oð	ð ˜‘Ið		ð
 �s˜C�x‘. 4Ñ'ð	ð �4‰Zð	ð 
ˆc‰ò	ó ð	ð D¨¡Iô r1   r   c                   óf   ‡ — e Zd Z	 ddededz  fˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Z	 	 	 	 dd„Zˆ xZS )r!   NÚexport_moduleÚflat_args_adapterc           	      ód  •‡,— t         ‰-| �  «        |j                  j                  �t	        d«      ‚d„ }|j
                  D �cg c]  }|j                  ‘Œ }}|d   dk7  rt        d|d   ›�«      ‚t        |j                  «      }t        |j                  «      | _        t        j                  j                  «       | _	        | | j                  _        t        |j
                  «      | _        || _        |j                  j                   | _        | | j                   d<   d| _        t$        | _        t)        || j                  «       t+        |«       t-        |«      | _        t1        «       | _        t5        || «      \  }}| j2                  j7                  |j9                  «       «       t;        |j<                  | |«       |j>                  | _        g | _         |jB                  }	tE        «       }
i }| j                  jF                  D ]Š  }|	|   } ||«      |vrBt        jH                  jK                  |jM                  «       |jN                  ¬«      | ||«      <   tQ        | ||«         | |tR        jT                  ¬	«       |
jW                  |«       ŒŒ tE        | j                  jX                  «      }tE        «       }i }| j                  jZ                  D ]  }||v rd}|j\                  |   }nd
}|	|   } ||«      |vr|jM                  «       |f| ||«      <   tQ        | ||«         d   | |tR        j^                  |¬«       |jW                  |«       Œ� |	ja                  «       D ]¿  \  }}||
v s||v rŒd} ||«      |v s$tc        |t        jH                  jJ                  «      sd
}|rB ||«      |vr|d
f| ||«      <   tQ        | ||«         d   | |tR        j^                  d
¬«       Œ… ||«      |vr|| ||«      <   tQ        | ||«         | |tR        jT                  ¬	«       ŒÁ i }|j\                  ja                  «       D ]l  \  }} ||«      |vr5tc        |t        jd                  «      r|jM                  «       }|| ||«      <   | ||«         }tQ        || |tR        jf                  ¬	«       Œn ti        tj        «      Š,tE        «       }ˆ,fd„}tE        «       }| j                  jl                  D �]‰  }|jn                  tp        jT                  k(  s)|jn                  tp        j^                  k(  rû|jr                  rïtu        |jv                  d«      s!t        dty        |jv                  «      › �«      ‚tc        |jz                  t|        «      s!t        dty        |jz                  «      › �«      ‚ | ||jB                  |jz                     «      |jv                  j~                  |jz                  «       |jW                  |jz                  «       |jW                  |jz                  «       �Œ9|jn                  tp        j^                  k(  r|jr                  r<|jn                  tp        j€                  k(  s|jn                  tp        j‚                  k(  s�Œžtu        |jv                  d«      s.t        d|jn                  › dty        |jv                  «      › �«      ‚tc        |jz                  t|        «      s.t        d|jn                  › dty        |jz                  «      › �«      ‚ | ||j\                  |jz                     «      |jv                  j~                  |jz                  «       |jW                  |jz                  «       �ŒŒ |j\                  ja                  «       D ]U  \  }}||vsŒ ||«      }|‰,vrt        d|›d�«      ‚‰,|   d   \  } }! ||| |«       |jW                  jz                  «       ŒW |jB                  ja                  «       D ],  \  }}||vsŒ ||«      }"|"‰,vrŒ‰,|"   d   \  } }! ||"| |«       Œ. i }#‰,j9                  «       D ]#  }$|$D �%cg c]  }%|%d   ‘Œ	 }&}%|$D ]
  \  }'}!|&|#|'<   Œ Œ% t…        | |#g «       t‡        |j9                  «       «      }(|D �cg c]	  }||(vsŒ|‘Œ }}| j‰                  |(|«       |D �cg c]	  }d|vsŒ|‘Œ }}| j                  jŠ                  D �)cg c]  })|)jŒ                  dk(  sŒ|)‘Œ c})| _G        d
| _H        t“        |«      D �*�ci c]  \  }*}||*“Œ
 }+}*}| j•                  d¬«      D ]  \  }}!||+vsŒt—        |+«      |+|<   Œ t™        | |+«       | j                  j›                  «        | j�                  «        y c c}w c c}%w c c}w c c}w c c})w c c}}*w )Nz%Unflattening on JointExportModule NYIc                 óÚ   — t        | t        j                  «      rGt        | j	                  «       | j                  «       | j                  «       | j                  «       ¬«      S t        | «      S )z8Returns _TensorID dataclass for tensors, otherwise id().)r6   r7   r8   r9   )	r]   r;   rb   r5   r6   r7   r8   r9   Úid)r¾   s    r2   Ú_idz'UnflattenedModule.__init__.<locals>._idO  sR   € ä˜#œuŸ|™|Ô,Ü Ø$'×$7Ñ$7Ó$9ØŸ:™:›<ØŸ™›Ø#&×#5Ñ#5Ó#7ô	ð ô �c“7ˆNr1   r   Ú z+expected first fqn to be empty string, got Úunflattened_moduleF)Úrequires_grad)rH   T)rH   rI   c                 ó6   •— ‰|    }|j                  ||f«       y rM   )r—   )Úobj_idÚ	node_nameÚtarget_nameÚ	name_listÚ
consts_maps       €r2   Úadd_to_consts_mapz5UnflattenedModule.__init__.<locals>.add_to_consts_mapì  s    ø€ Ø" 6Ñ*ˆIØ×Ñ˜i¨Ð5Õ6r1   Únamez-expected s.arg to have 'name' attribute, got z!expected s.target to be str, got z1expected s.arg to have 'name' attribute for kind z, got z%expected s.target to be str for kind z	constant z id not found in consts_mapr   Ú@r‘   ©Úremove_duplicate)Orx   ry   Úgraph_signatureÚbackward_signatureÚ
ValueErrorÚmodule_call_graphÚfqnr_   r   ru   r;   rŠ   r¥   rz   rÊ   rt   ÚmetaÚadaptedrB   r{   Ú#_inplace_buffer_and_input_mutationsÚ_fix_nn_module_stacksÚ_root_module_typerl   Ú_IValsÚivalsÚ_outline_submodulesrZ   ÚvaluesÚ_copy_graph_attrsÚ_graph_moduleÚrange_constraintsÚequality_constraintsÚ
state_dictrU   Ú
parametersrX   r^   ÚclonerÑ   ri   r$   r,   ÚaddÚnon_persistent_buffersÚbuffersÚ	constantsr-   r\   r]   rb   r.   r   r†   Úinput_specsÚkindr   rI   rV   Úargr`   rG   rr   rÙ   ÚCONSTANT_TENSORÚ
CUSTOM_OBJÚ_sink_paramsÚ_deduplicate_modulesÚ_dispatch_modulesr•   r–   Úinput_placeholdersÚcheck_input_constraintsÚ	enumerateÚnamed_modulesrˆ   Ú_reorder_submodulesr”   rš   ).rp   rÉ   rÊ   rÎ   ÚentryÚfqn_listÚexport_graphÚseen_modulesÚ
seen_attrsrï   Úassigned_paramsÚid_to_paramrÙ   Úparamró   Úassigned_buffersÚid_to_bufferrI   r&   ÚtensorÚ	is_bufferÚid_to_constrá   r'   Ú	_constantÚconsts_targetsrØ   Úadded_params_buffersÚsÚ
const_nameÚconstÚconst_idÚph_nameÚ_Ú	tensor_idÚinputs_to_stateÚnode_targetÚtÚtargetsÚnÚredirected_call_indicesr™   ÚiÚ	fqn_orderr×   r|   s.                                               @€r2   ry   zUnflattenedModule.__init__F  s		  ù€ ô
 	‰ÑÔØ×(Ñ(×;Ñ;ÐGÜÐDÓEÐEò		ð ,9×+JÒ+JÓKÑ+J %�E—I“IÐ+JˆÐKØ�A‰;˜"ÒÜ Ø=¸hÀq¹k¸_ÐMóð ô   × 3Ñ 3Ó4ˆÜ'¨×(EÑ(EÓFˆÔÜ—X‘X—^‘^Ó%ˆŒ
Ø#'ˆ�
‰
Ô Ü!)¨-×*IÑ*IÓ!JˆÔØ!2ˆÔà!×.Ñ.×3Ñ3ˆŒ	Ø*.ˆ�	‰	Ð&Ñ'ð ˆŒÜ%9ˆÔ"ä+¨L¸$×:NÑ:NÔOÜ˜lÔ+Ü$ \Ó2ˆŒä“XˆŒ
ä#6°|ÀTÓ#JÑ ˆ�jð 	�
‰
×Ñ˜,×-Ñ-Ó/Ô0ô 	˜-×5Ñ5°t¸ZÔHà!.×!@Ñ!@ˆÔØ*,ˆÔ!ð #×-Ñ-ˆ
Ü$'£Eˆð ð 	ð ×(Ñ(×3Ô3ˆDØ˜tÑ$ˆEÙ�5‹z Ñ,Ü*/¯(©(×*<Ñ*<Ø—K‘K“M°×1DÑ1Dð +=ó +�™C ›JÑ'ô Ø™C ›JÑ'ØØÜ#×-Ñ-õ	ð ×Ñ Õ%ð 4ô "% T×%9Ñ%9×%PÑ%PÓ!QÐÜ%(£UÐØOQˆØ×(Ñ(×0Ô0ˆDØÐ-Ñ-Ø"�
Ø&×0Ñ0°Ñ6‘à!�
Ø# DÑ)�á�6‹{ ,Ñ.Ø-3¯\©\«^¸ZÐ,H�™S ›[Ñ)äØ™S ›[Ñ)¨!Ñ,ØØÜ#×*Ñ*Ø%õð × Ñ  Õ&ð% 1ð, '×,Ñ,Ö.‰LˆD�&Ø�Ñ&¨$Ð2BÑ*BØàˆIÙ�6‹{˜lÑ*´*ØœŸ™×*Ñ*ô3ð !�	áá˜“K |Ñ3ð Øð1�L¡ V£Ñ-ô Ø ¡ V£Ñ-¨aÑ0ØØÜ'×.Ñ.Ø#öñ �v“; kÑ1Ø/5�K¡ F£Ñ,ÜØ¡ F£Ñ,ØØÜ'×1Ñ1ö	ð9 /ðH TVˆØ*×4Ñ4×:Ñ:Ö<‰MˆC�Ù�8‹} KÑ/Ü˜h¬¯©Ô5Ø'Ÿ~™~Ó/�HØ-5�™C ›MÑ*Ø#¡C¨£MÑ2ˆIÜØØØÜ#×,Ñ,ö	ð =ô DOÌtÓCTˆ
Ü#&£5ˆô	7ô *-«ÐØ×%Ñ%×1Õ1ˆAØ�v‰vœ×,Ñ,Ò,Ø—‘œ)×*Ñ*Ò*¨q¯|ª|ä˜qŸu™u fÔ-Ü(ØGÌÈQÏUÉUËÀ}ÐUóð ô " !§(¡(¬CÔ0Ü(Ø;¼DÀÇÁ»NÐ;KÐLóð ñ "Ù˜×0Ñ0°·±Ñ:Ó;Ø—E‘E—J‘JØ—H‘Hôð
 ×"Ñ" 1§8¡8Ô,Ø$×(Ñ(¨¯©Ö2à—‘œ)×*Ñ*Ò*ØŸšØ—6‘6œY×6Ñ6Ò6Ø—6‘6œY×1Ñ1Ô1ä˜qŸu™u fÔ-Ü(ØKÈAÏFÉFÈ8ÐSYÔZ^Ð_`×_dÑ_dÓZeÐYfÐgóð ô " !§(¡(¬CÔ0Ü(Ø?ÀÇÁ¸xÀvÌdÐST×S[ÑS[ËnÐM]Ð^óð ñ "Ù˜×/Ñ/°·±Ñ9Ó:Ø—E‘E—J‘JØ—H‘Hôð
 ×"Ñ" 1§8¡8Ö,ðM 2ðR "/×!8Ñ!8×!>Ñ!>Ö!@ÑˆJ˜Ø Ò/Ù˜u›:�Ø :Ñ-Ü(Ø# J >Ð1LÐMóð ð (¨Ñ1°!Ñ4‘
�˜Ù! (¨G°ZÔ@Ø$×(Ñ(¨¯©Õ2ð "Að )×3Ñ3×9Ñ9Ö;‰KˆC�ØÐ.Ò.Ù ›K�	Ø JÑ.ð Ø'¨	Ñ2°1Ñ5‘
�˜Ù! )¨W°cÕ:ð <ð 13ˆØ%×,Ñ,Ö.ˆKÙ%0Ó1¡[ �q˜“t [ˆGÐ1Û#‘��1Ø%,� Ò"ñ $ð /ô
 	�T˜?¨BÔ/ä"6°|×7JÑ7JÓ7LÓ"MÐÙ#+ÓR¡8˜C¨sÐ:QÒ/Q’C 8ˆÐRà×ÑÐ6¸ÔGÙ#+Ó>¡8˜C¨s¸#ª~’C 8ˆÐ>ð "ŸZ™Z×-Ò-ó#
Ù-�T°·±¸MÓ1IŠDÐ-ñ#
ˆÔð (,ˆÔ$ä*3°HÔ*=Ô>Ñ*=¡  3�S˜!‘VÐ*=ˆ	Ñ>à×)Ñ)¸5Ð)ÖA‰GˆD�!Ø˜9Ò$Ü"% i£.�	˜$’ð Bô 	˜D )Ô,Ø�
‰
�‰ÔØ�‰�ùòo Lùòx 2ùò Sùò ?ùò
#
ùó
 ?s6   Áfáfâ	fâ%fã	f"ãf"ã)f'ã>f'äf,c                 óò   — | j                  «       D ]d  \  }}t        |dz   «       t        |d«      sŒ!t        |j                  t
        j                  j                  «      sŒPt        |j                  «       Œf y )NÚ:ru   )r  ÚprintrV   r]   ru   r;   rŠ   r¥   )rp   rá   r·   s      r2   Ú_print_graphzUnflattenedModule._print_graphS  sP   € Ø×*Ñ*Ö,‰HˆC�Ü�#˜‘)ÔÜ�s˜GÕ$¬°C·I±I¼u¿x¹x¿~¹~Õ)NÜ�c—i‘iÕ ñ -r1   c                 ó�  — | j                   d   j                  }||j                  k(  r|S | j                  €t	        d«      ‚| j                  j                  |j                  ||| j                  |¬«      }t        |«      |j                  j                  k7  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)rp   Ú	flat_argsr(  Úinputr'  s        r2   Ú_adapt_flat_argsz"UnflattenedModule._adapt_flat_argsY  sÜ   € Ø×*Ñ*¨1Ñ-×7Ñ7ˆ	Ø�i×'Ñ'Ò'ØÐà×!Ñ!Ð)ÜðOóð ð
 ×.Ñ.×4Ñ4Ø%×-Ñ-Ø"Ø$ØŸ™Øð 5ó ˆIô �9‹~ ×!2Ñ!2×!=Ñ!=Ò=Üð Ü # I£Ð/ð 0(Ø(1×(9Ñ(9×(DÑ(DÐ'EðGóð ð
 Ðr1   c           	      ón  — | j                   d   j                  }|}|rt        ||j                  «      }t	        j
                  ||f«      \  }}|D �cg c]  }|d   ‘Œ	 }}t        «       r|S ||j                  k7  rN| j                  s(t        d|› d�d|j                  › �«       t        d«       | j                  |||«      }d| _        | j                  rÕddlm}	 | j                  du r¡| j                  r| j                  j                  «       ng }
|
r:t        |
«      t        |«      k7  r#t!        d	t        |
«      › d
t        |«      › �«      ‚t#        |«      D ��cg c]&  \  }}t%        |¬«      t'        |
r|
|   nd¬«      f|f‘Œ( }}}n|} |	| j(                  || j*                  «       |S c c}w c c}}w )Nr   r   zGInput treespec does not match with exported module's: 
Input treespec: z. zExported module treespec: z5Adapting flat arg to match exported module's treespecT)Ú"_check_input_constraints_for_graphzflat_arg_paths length z! does not match flat_args length )Úidxz<unknown location>)rÙ   )rà   r'  r   r(  rÅ   Útree_flatten_with_pathr   rã   r$  r-  rÿ   Útorch._export.utilsr/  rÊ   rÂ   rˆ   r_   r   r   r   rþ   rí   )rp   r�   r€   r'  Úreordered_kwargsÚflat_args_with_pathr(  Úxr+  r/  Úflat_arg_pathsr0  rø   Únew_flat_args_with_paths                 r2   Úprocess_forward_inputsz(UnflattenedModule.process_forward_inputst  sõ  € Ø×*Ñ*¨1Ñ-×7Ñ7ˆ	à!ÐÙÜ-¨f°i×6GÑ6GÓHÐä'-×'DÑ'DØÐ#Ð$ó(
Ñ$Ð˜Wñ $7Ó7Ñ#6˜a�Q�q“TÐ#6ˆ	Ð7ä!Ô#ØÐà�i×'Ñ'Ò'Ø—<’<Üð'Ø'. i¨rð3à0°×1BÑ1BÐ0CÐDôô
 ÐMÔNØ×-Ñ-¨i¸À$ÓGˆIØˆDŒLà×'Ò'õ Oà�|‰|˜tÑ#ð ×-Ò-ð ×*Ñ*×=Ñ=Ô?àð ñ
 "¤c¨.Ó&9¼SÀ»^Ò&KÜ(Ø0´°^Ó1DÐ0EÐEfÔgjÐktÓguÐfvÐwóð ô %.¨iÔ$8ô+ñ %9™˜˜Sô (¨CÔ0Ü&á#1ð &4°CÒ%8à%9ôðð ò
ð %9ð (ò +ð +>Ð'á.Ø×'Ñ'Ð)@À$×BXÑBXôð Ðùòi 8ùó>+s   ÁF,Å+F1c                 ó€  —  | j                   |i |¤Ž}| j                  d   j                  }t        «       r_t	        j
                  j                  | | j                  ¬«      j                  |ddiŽ}t        |t        «      rt        |«      dk(  r|d   S |S t        j                  j                  «       s| j                  s' t        | j                   «      j"                  | g|¢­Ž }n:t	        j
                  j                  | | j                  ¬«      j                  |ddiŽ}t%        j&                  ||j(                  «      S )Nr   r�   r‚   Fr   )r8  rà   r'  r   r;   rŠ   r‹   ru   rŒ   r]   r>   rˆ   rƒ   r„   r{   r`   rt   r…   rÅ   Útree_unflattenÚout_spec)rp   r�   r€   r+  r'  Ú
return_valÚtree_outs          r2   r…   zUnflattenedModule.forward´  s  € Ø/�D×/Ñ/°Ð@¸Ñ@ˆ	Ø×*Ñ*¨1Ñ-×7Ñ7ˆ	ä!Ô#ÜŸ™×-Ñ-¨d¸$¿*¹*Ð-ÓE×IÑIØðØ16ñˆJô ˜*¤eÔ,´°Z³ÀAÒ1EØ! !‘}Ð$ØÐä�>‰>×-Ñ-Ô/°t×7QÒ7QØ6”t˜D×-Ñ-Ó.×6Ñ6°tÐH¸iÒH‰Hä—x‘x×+Ñ+¨D¸¿
¹
Ð+ÓC×GÑGØðØ16ñˆHô ×$Ñ$ X¨y×/AÑ/AÓBÐBr1   c                 ó¦   — t         j                  j                  | | j                  «      | j                  d<   | j                  j                  «        y )Nrt   )r;   rŠ   r’   ru   r“   r”   ro   s    r2   rš   zUnflattenedModule.finalizeÉ  s3   € Ü(-¯©×(<Ñ(<¸TÀ4Ç:Á:Ó(Nˆ�‰�nÑ%Ø�
‰
�‰Õr1   c                 ó´  ‡— t        t        «      Š| j                  D ]  }|j                  sŒ|j                  sŒ|j                  }t        | |j                  ||«      «      }d|v r|j                  d«      n|dg\  }}‰|   j                  t        |«      |f«       Œ� t        t        «      }|D ]D  }	d|	v r*|	j                  dd«      \  }
}||
   j                  |«       Œ1|d   j                  |	«       ŒF ‰j                  «       D ]¶  \  }
}t        |«      D ��cg c]  \  }}|‘Œ	 }}}t        |«      dkD  sŒ2t!        t        |«      «      D ]O  }t#        |
|dz   «      }||vsŒ|j                  d«      �^ }}t%        | |«      j&                  j)                  |«       ŒQ | j+                  |
t-        ||
   |«      «       Œ¸ ˆfd„}| j/                  d¬«      D ]y  \  }}t1        |d	«      r |||j2                  «       Œ&t1        |d
«      sŒ3|j4                  D ]8  }t1        |d	«      st7        dt9        |«      › �«      ‚ |||j2                  «       Œ: Œ{ yc c}}w )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Ú   Ú0rK   r   rÏ   c                 ó²   •— |j                   D ]G  }|j                  dk(  sŒ|j                  j                  d«      d   }| r| › d|› �n|}|‰v sŒA||_        ŒI y )Nr²   rÚ   r   rK   )r•   r–   rG   rT   )re   ru   r™   rá   ÚpathÚcalled_moduless        €r2   Úelide_call_indicesz?UnflattenedModule._dispatch_modules.<locals>.elide_call_indices÷  sY   ø€ ØŸœ�Ø—7‘7˜mÓ+ØŸ+™+×+Ñ+¨CÓ0°Ñ3�CÙ06˜f˜X Q s eÑ,¸C�DØ˜~Ò-Ø&)˜�ñ $r1   FrÛ   ru   r­   z-expected mod_ to have 'graph' attribute, got N)r   r†   rà   rá   r'  r   ÚgetrT   r—   r?   rU   Úrsplitrò   r\   Úsortedrˆ   ÚrangeÚ
_call_namer   r[   ÚpopÚset_submoduler    r  rV   ru   r­   r_   r`   )rp   r  r  r  rá   r·   Úbaser0  Ú	attrs_maprG   Úorig_fqnrÙ   Úindexed_call_modulesr  rª   r   re   rD  Úmod_rC  s                      @r2   rý   z#UnflattenedModule._dispatch_modulesÍ  s5  ø€ ô %¤TÓ*ˆØ×+Ô+ˆEØ�y‹y˜UŸ_›_ð —i‘i�Ü Ð&=×&AÑ&AÀ#ÀsÓ&KÓL�Ø.1°S©j˜CŸI™I cœN¸sÀC¸j‘	��cØ˜tÑ$×+Ñ+¬S°«X°s¨OÕ<ð ,ô  ¤Ó$ˆ	Û$ˆFØ�f‰}Ø!'§¡¨s°AÓ!6‘�˜$Ø˜(Ñ#×'Ñ'¨Õ-à˜"‘×!Ñ! &Õ)ð %ð /=×.BÑ.BÖ.DÑ*ˆHÐ*Ü.4Ð5IÔ.JÔKÑ.J¡F A sšCÐ.JˆLÑKÜ�<Ó  1Ó$Üœs <Ó0Ö1�AÜ$ X¨q°1©uÓ5�CØÐ"9Ò9Ø(+¯	©	°#«™˜ Ü/°°fÓ=×FÑF×JÑJÈ4ÕPð	 2ð
 ×"Ñ"ØÜ/°	¸(Ñ0CÀ\ÓRõð /Eô	*ð ×*Ñ*¸EÐ*ÖB‰HˆC�Ü�s˜GÔ$Ù" 3¨¯	©	Õ2Ü˜˜oÕ.Ø×-Ô-�DÜ" 4¨Ô1Ü,ØKÌDÐQUËJÈ<ÐXóð ñ ' s¨D¯J©JÕ7ñ .ñ	 Cùó- Ls   ÄIc                 ó"   — t        | d||||«      S )Nr!   rœ   r�   s        r2   r¢   z UnflattenedModule.print_readable
  r£   r1   rM   r¤   )r)   r*   r+   r   r   ry   r%  r-  r8  r…   rš   rý   r¢   r¦   r§   s   @r2   r!   r!   E  s\   ø„ ð 59ñKà&ðKð +¨TÑ1õKòZ!òò6>ò@Cò*ò;8ð~ ØØØ÷
r1   r!   r(   rÊ   rm   c                 ó–   — t        | «      } t        | |«      }t        j                  j	                  |j
                  dd¬«      |_        |S )aý  Unflatten an ExportedProgram, producing a module with the same module
    hierarchy as the original eager module. This can be useful if you are trying
    to use :mod:`torch.export` with another system that expects a module
    hierarchy instead of the flat graph that :mod:`torch.export` usually produces.

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

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

    Returns:
        An instance of :class:`UnflattenedModule`, which has the same module
        hierarchy as the original eager module pre-export.
    z*do not trace into preprocessing the inputsT)ÚreasonÚ	recursive)r   r!   r;   Ú_dynamoÚdisabler8  )r(   rÊ   Úms      r2   r"   r"     sO   € ô, # 6Ó*€FÜ˜&Ð"3Ó4€Aô  %Ÿ}™}×4Ñ4Ø	× Ñ Ø;Øð  5ó  €AÔð €Hr1   ru   rÝ   c                 óv  ‡— t        t        t        | j                  «      «      «      }|j                  dk7  st        |j                  «      dk7  r/t        d|j                  ›dt        |j                  «      › d�«      ‚|j                  d   }| j                  D �ci c]  }|j                  dk(  sŒ|j                  |“Œ! }}i }|j                  j                  «       D ��ci c]  \  }}||“Œ
 }	}}|j                  j                  «       D ��ci c]  \  }}||	|   “Œ }}}|j                  |j                  «       t        |«      }
|d|
 D ]¸  }||j                     }||   }| j                  |«      5  | j                  d	t         j"                  j$                  j&                  j(                  ||f«      Š|j*                  j                  «       D ]  \  }}|‰j*                  |<   Œ 	 ddd«       |j-                  ‰ˆfd
„«       Œº t/        ||
d «      }|f|_        yc c}w c c}}w c c}}w # 1 sw Y   ŒHxY w)a^  Transform buffer and input mutations from their functionalized form
    into copy_ nodes in the graph.

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

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

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

    Input mutations are handled similarly.
    Úoutputr   z8expected output node with op='output' and 1 arg, got op=z with z argsr   r‘   NÚcall_functionc                 ó   •— | ‰uS rM   r0   )r5  Únew_nodes    €r2   Ú<lambda>z5_inplace_buffer_and_input_mutations.<locals>.<lambda>‚  s
   ø€ ¸1ÀHÑ;Lr1   )ÚnextÚiterÚreversedr•   r–   rˆ   r�   r_   rÙ   Úinputs_to_buffersr\   Úbuffers_to_mutaterZ   Úuser_inputs_to_mutateÚinserting_afterÚcreate_noder;   ÚopsÚatenÚcopy_Údefaultrâ   Úreplace_all_uses_withr>   )ru   rÝ   Úoutput_nodeÚreturn_argsr™   Úinput_name_to_nodeÚmutation_name_to_input_namerP   Ú
buffer_fqnÚbuffer_fqn_to_input_nameÚnum_mutationsÚmutationÚ
input_nameÚ
input_nodeÚvÚuser_outputsr\  s                   @r2   rä   rä   ?  s6  ø€ ô: ”tœH U§[¡[Ó1Ó2Ó3€KØ‡~�~˜Ò!¤S¨×)9Ñ)9Ó%:¸aÒ%?ÜØFÀ{Ç~Á~ÐFXÐX^Ô_bÐcn×csÑcsÓ_tÐ^uÐuzÐ{ó
ð 	
ð ×"Ñ" 1Ñ%€Kð %*§K¢KóÙ$/˜D°4·7±7¸mÓ3Kˆ�	‰	�4‰ Kð ð ð #%Ðð ,;×+LÑ+L×+RÑ+RÔ+Tô Ù+T™-˜!˜Zˆ
�A‰Ð+Tð ñ  ð
 -×>Ñ>×DÑDÔFô#áF‰MˆAˆzð 	
Ð# JÑ/Ñ/ØFð  ñ #ð
  ×&Ñ& ×'LÑ'LÔMäÐ3Ó4€Mà  Ó/ˆØ0°·±Ñ?ˆ
Ø'¨
Ñ3ˆ
à×"Ñ" 8Õ,à×(Ñ(Ø¤§¡§¡×!5Ñ!5×!=Ñ!=À
ÈHÐ?UóˆHð !Ÿ™×+Ñ+Ö-‘��1Ø#$�—‘˜aÒ ñ .÷ -ð 	×&Ñ& xÓ1LÕMð 0ô" ˜ ] ^Ð4Ó5€LØ%Ð(€KÕùòIùó ùó#÷ -Ð,ús%   ÂHÂ1HÃ!H#ÄH)Å4A3H/È/H8	c                 óž   — | j                   D ]>  }d|j                  vrŒ|j                  d   j                  «       D ]  \  }}|rŒ	|c c S  Œ@ y )NÚnn_module_stack)r•   râ   rê   )ru   r™   rB  rv   s       r2   ræ   ræ   Š  sM   € Ø—”ˆØ D§I¡IÑ-ØàŸ	™	Ð"3Ñ4×;Ñ;Ö=‰HˆD�"ÚØ”	ñ >ð	 ð r1   c           	      óð  — | j                   D ]á  }d|j                  vrŒ|j                  d   }|j                  «       D ��cg c]  \  }}d|v r|j                  d«      d   n|‘Œ! }}}|^}}d}|D ]  }	t	        ||	«      r|dz  }|	}Œ n |t        |«      k  sŒŒt        j                  d||t        |«      |z
  «       t        t        |j                  «       «      d | «      |j                  d<   Œã y c c}}w )Nrx  rÚ   r   r   zPnn_module_stack fqns %s at node %s do not form a stack! dropping last %d entries)r•   râ   rê   rT   Ú
_is_prefixrˆ   ÚlogÚwarningrÇ   r†   r\   )
ru   r™   rx  rá   Ú_tÚfqnsÚprev_fqnÚ	next_fqnsÚnum_valid_indicesÚcurr_fqns
             r2   rå   rå   •  s  € ð —”ˆØ D§I¡IÑ-ØàŸ)™)Ð$5Ñ6ˆð +×1Ñ1Ô3ô
á3‘��Rð "%¨¡ˆC�I‰I�c‹N˜1Ò°Ñ4Ø3ð 	ñ 
ð  $Ðˆ�9ØÐÛ!ˆHä˜( HÔ-Ø! QÑ&Ð!Ø#‘ñ ð "ð œs ?Ó3Ó3Ü�K‰KØbØØÜ�OÓ$Ð'8Ñ8ô	ô ,0Ü�_×*Ñ*Ó,Ó-Ð.@Ð/@ÐAó,ˆD�I‰IÐ'Ò(ñ= ùó

s   Á$C2c                 óV   — t        | «      t        |«      k  xr |dt        | «       | k(  S )z2Check whether `candidate` is a prefix of `target`.N)rˆ   )Ú	candidaterG   s     r2   rz  rz  ¼  s+   € äˆy‹>œC ›KÑ'ÒQ¨FÐ3C´S¸³^Ð,DÈ	Ñ,QÐQr1   Ú
parent_fqnÚ	child_fqnc                 óÔ   — | dk(  r|S | j                  d«      }|j                  d«      }|d t        |«       |k7  rt        d|› d| › d�«      ‚dj                  |t        |«      d  «      S )NrÏ   rK   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.)rT   rˆ   ÚRuntimeErrorr¶   )r…  r†  Úparent_splitÚchild_splits       r2   Ú_compute_accessorr‹  Á  sŒ   € Ø�RÒàÐà×#Ñ# CÓ(€LØ—/‘/ #Ó&€Kð Ð&”S˜Ó&Ð'¨<Ò7ÜØ˜Y˜KÐ'OÐPZÈ|ð \Pð Pó
ð 	
ð
 �8‰8�K¤ LÓ 1Ð 3Ð4Ó5Ð5r1   r5  Úyc                 óÐ  — dt         j                  j                  dt        fd„}t	        | j
                  t         j                  j                  «      s!t        dt        | j
                  «      › �«      ‚t	        |j
                  t         j                  j                  «      s!t        dt        |j
                  «      › �«      ‚ || j
                  «       ||j
                  «      k(  S )Nru   rm   c                 óT  ‡
— g }i Š
dt         fˆ
fd„}t        | j                  «      D ]ä  \  }}t        j                  ||j
                  «      D �cg c]  }t        |«      ‘Œ }}|t        j                  ||j                  «      j                  «       D ��cg c]  \  }}|› d|› �‘Œ c}}z  }|j                  dv r|j                  nd}	|j                  |› d|j                  › d|	› dd	j                  |«      › d
�«       |‰
t        |«      <   Œæ dj                  |«      S c c}w c c}}w )Nrm   c                 ó–   •— t        | t        j                  j                  «      rdt	        ‰t        | «         «      z   S t	        | «      S )NÚ%)r]   r;   rŠ   ÚNoderr   rÍ   )rø   Ú	nodes_idxs    €r2   Úarg_dumpz>_check_graph_equivalence.<locals>.graph_dump.<locals>.arg_dumpØ  s7   ø€ Ü˜#œuŸx™xŸ}™}Ô-ØœS ¬2¨c«7Ñ!3Ó4Ñ4Ð4Ü�s“8ˆOr1   Ú=)rZ  Úget_attrrÏ   z: Ú[z](z, Ú)rµ   )rr   r   r•   rÅ   Útree_mapr�   r€   r\   r–   rG   r—   r¶   rÍ   )ru   Úretr“  r   r™   rø   Ú	args_dumpÚkeyÚvaluerG   r’  s             @r2   Ú
graph_dumpz,_check_graph_equivalence.<locals>.graph_dumpÔ  s  ø€ ØˆØ$&ˆ	ð	œSõ 	ô
 ! §¡Ö-‰GˆAˆtÜ-3¯_©_¸XÀtÇyÁyÔ-QÓRÑ-Q cœ˜S�Ð-QˆIÐRØä"(§/¡/°(¸D¿K¹KÓ"H×"NÑ"NÔ"Pôá"P‘J�C˜ð �%�q˜˜Ò Ø"Pòñ ˆIð %)§G¡GÐ/LÑ$L�T—[’[ÐRTˆFà�J‰J˜!˜˜B˜tŸw™w˜i q¨¨°°4·9±9¸YÓ3GÐ2HÈÐJÔKØ"#ˆI”b˜“hÒð .ð �y‰y˜‹~Ðùò Sùós   ÁDÂD$
z+expected x.graph to be torch.fx.Graph, got z+expected y.graph to be torch.fx.Graph, got )r;   rŠ   r¥   rr   r]   ru   r_   r`   )r5  rŒ  r�  s      r2   Ú_check_graph_equivalencerž  Ó  sª   € ðœ%Ÿ(™(Ÿ.™.ð ¬Só ô* �a—g‘gœuŸx™xŸ~™~Ô.ÜØ9¼$¸q¿w¹w»-¸ÐIó
ð 	
ô �a—g‘gœuŸx™xŸ~™~Ô.ÜØ9¼$¸q¿w¹w»-¸ÐIó
ð 	
ñ �a—g‘gÓ¡*¨Q¯W©WÓ"5Ñ5Ð5r1   Úgmc                 óv   — d}t        | d|› �«      r|dz  }t        | d|› �«      rŒd|› �}t        | ||«       |S )Nr   Ú_spec_r   )rV   rW   )rŸ  Úspecr   rÙ   s       r2   Ú	_add_specr£  ô  sN   € Ø	€AÜ
�"˜˜q˜c�lÔ
#Ø	ˆQ‰ˆô �"˜˜q˜c�lÕ
#à�A�3ˆ<€DÜˆB��dÔØ€Kr1   c                 ó´   — | j                   j                  t        j                  |f«      }| j                   j                  t        j
                  |df«      }|S )Nr   )ru   rZ  rÅ   Útree_flattenÚoperatorÚgetitem)rŸ  r™   ÚflattenÚ	getitem_0s       r2   Ú_generate_flattenrª  ý  sF   € Ø�h‰h×$Ñ$¤V×%8Ñ%8¸4¸'ÓB€GØ—‘×&Ñ&¤x×'7Ñ'7¸'À1¸ÓF€IØÐr1   c                 ó¨   — t        | |«      }| j                  j                  |«      }| j                  j                  t        j
                  ||f«      S rM   )r£  ru   r•  rZ  Ú	fx_pytreeÚtree_flatten_spec)rŸ  r™   r¢  rÙ   Ú	spec_nodes        r2   Ú_generate_flatten_specr¯    sF   € ô �R˜Ó€DØ—‘×!Ñ! $Ó'€IØ�8‰8×!Ñ!¤)×"=Ñ"=ÀÀiÐ?PÓQÐQr1   c                 ó¨   — t        | |«      }| j                  j                  |«      }| j                  j                  t        j
                  ||f«      S rM   )r£  ru   r•  rZ  rÅ   r:  )rŸ  r•   r¢  rÙ   r®  s        r2   Ú_generate_unflattenr±    sF   € ô �R˜Ó€DØ—‘×!Ñ! $Ó'€IØ�8‰8×!Ñ!¤&×"7Ñ"7¸%ÀÐ9KÓLÐLr1   r·   c                 óÄ   — |j                  d«      �^ }}|D ];  }t        | |d «      }|€ y t        |t        j                  j
                  «      s y |} Œ= t        | |d «      S )NrK   )rT   r¬   r]   r;   rX   rY   )r·   rG   re   rf   rR   Úsubmods         r2   Ú_get_submoduler´    s_   € Ø—\‘\ #Ó&�N€VˆUãˆÜ˜˜d DÓ)ˆàˆ>Ùä˜&¤%§(¡(§/¡/Ô2Ùà‰ð ô �3˜˜tÓ$Ð$r1   Úmodule_to_addÚcreate_modulec           	      óz  — |j                  d«      �^ }}t        |«      D ]‡  \  }}t        | |d «      }|€K|� |dj                  |d |dz    «      «      }nt        j
                  j                  «       }t        | ||«       t        |t        j
                  j                  «      s y|} Œ‰ | j                  ||«       y )NrK   r   F)
rT   r   r¬   r¶   r;   rX   rY   rW   r]   Ú
add_module)	r·   rG   rµ  r¶  re   rf   r   rR   r³  s	            r2   Ú_add_submoduler¹  $  s¥   € ð —\‘\ #Ó&�N€VˆUä˜VÖ$‰ˆˆ4Ü˜˜d DÓ)ˆàˆ>ØÐ(Ù& s§x¡x°°w¸¸Q¹°Ó'@ÓA‘äŸ™Ÿ™Ó*�Ü�C˜˜vÔ&ä˜&¤%§(¡(§/¡/Ô2Ùà‰ð %ð ‡N�N�5˜-Õ(r1   rL  r  c                 ó$   — |dk(  r| S | › d|dz
  › �S )Nr   rÚ   r0   )rL  r  s     r2   rI  rI  >  s$   € ð ˜’6ˆ4Ð0 $  q¨¨Q©¨Ð0Ð0r1   Ú	call_namec                 ó^   — t        j                  t        j                  |«      dz   | «      d uS )Nz(@\d+)?$)ÚreÚmatchÚescape)r»  rL  s     r2   rN   rN   D  s%   € ä�8‰8”B—I‘I˜d“O kÑ1°9Ó=ÀTÐIÐIr1   c                   ó  — e Zd Z	 ddej                  j
                  deej                  j                  df   deee	e	dz  e
f      dee	ef   dej                  j                  ez  dz  f
d„Zd	„ Zd
„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú_ModuleFrameNÚ
flat_graphr•   .Úmodule_stackrà   r(   c                 ó.  ‡ ‡‡!— |‰ _         |‰ _        |‰ _        |‰ _        |‰ _        |‰ _        ‰‰ _        |‰ _        |	‰ _        |
‰ _	        d‰ _
        ‰ j                  d   \  ‰ _        Š!}t        ‰ j                  |dz   «      ‰ _        ‰  |�'|‰ _        t        |d«      r|j                   ni ‰ _        nc‰ j
                  j#                  ‰ j                  t%        t&        j(                  j+                  «       ‰!¬«      «      ‰ _        ‰j                   ‰ _        ‰ j                  j,                  ‰ _        i ‰ _        i ‰ _        d ‰ _        ‰��Ct5        ‰j                  ‰ j                  «      }ˆˆ ˆ!fd„}t7        ‰j                  |‰ j                  |«       ‰j,                  j9                  |«      ‰ _        ‰ j                  ‰ j                     rA‰ j                  ‰ j                     d   }|j                  j:                  ‰ j                  _        ‰ j                  ‰ j                     j=                  t?        ‰ j                  j                  ‰ j                  j                  ‰ j2                  ‰ j                  |dz   ‰ j                  ¬«      «       |
j#                  ‰ j                  «      }|��E‰ j                  ��7|j@                  jB                  d	k7  r"tE        d
|j@                  jB                  › �«      ‚|j@                  jF                  tH        ur"tE        d|j@                  jF                  › �«      ‚|j@                  jK                  «       \  }}|jF                  tH        urtE        d|jF                  › �«      ‚|jF                  tL        urtE        d|jF                  › �«      ‚‰ j,                  jO                  d «      5  tQ        |jB                  «      D �cg c]   }‰ j,                  jS                  d|› �«      ‘Œ" }}i }|jT                  D ]   }‰ j,                  jS                  |«      ||<   Œ" tW        ‰ j                  tI        |«      |f|j@                  «      }tY        |jZ                  «      D ]Þ  \  }}‰ j,                  j]                  dt^        j`                  ||ftc        |td        «      s|jf                  nd|› �¬«      }tc        |td        «      rŒe|jf                  ‰ j                  v sŒ~ti        jh                  ‰ j                  |jf                     jj                  «      |_5        |‰ j0                  ‰ j                  |jf                     <   Œà 	 d d d «       ‰ j                  j,                  jm                  ‰ j2                  «      5  g }|jZ                  D ]Ð  }tc        |td        «      r|j=                  |jn                  «       Œ/|jf                  ‰ j                  vr|j=                  d «       ŒYtc        |tp        tr        tt        tv        f«      stE        dtG        |«      › �«      ‚|j=                  ‰ j                  jy                  ‰ j                  |jf                     «      «       ŒÒ t{        ‰ j                  j                  ||j@                  «      }‰ j                  j,                  j}                  t^        j`                  |df«      }‰ j                  j,                  j}                  t^        j`                  |df«      }tQ        |jB                  «      D �cg c]8  }‰ j                  j,                  j}                  t^        j`                  ||f«      ‘Œ: }}|jT                  D � ci c]9  } | ‰ j                  j,                  j}                  t^        j`                  || f«      “Œ; }} d d d «       ‰ j2                  €tE        d«      ‚tI        «      ‰ j2                  _?        ‰ j2                  _@        y y y c c}w # 1 sw Y   �Œ¨xY wc c}w c c} w # 1 sw Y   ŒjxY w)NFéÿÿÿÿr   rè   ©rv   c                 óð   •— ‰j                   r‰j                   › d| › �n| }|‰j                  v r‰j                  |   S t        t        j                  j                  «       ‰¬«      }|‰j                  |<   |S )NrK   rÆ  )rá   Úcreated_modulesr   r;   rŠ   r¥   )rá   rB  r³  Úparentrp   rv   s      €€€r2   r¶  z,_ModuleFrame.__init__.<locals>.create_module~  sj   ø€ Ø06·
²
˜&Ÿ*™*˜ Q s eÑ,À�Ø˜4×/Ñ/Ñ/Ø×/Ñ/°Ñ5Ð5Ü*¬5¯8©8¯>©>Ó+;ÀÔC�Ø-3�×$Ñ$ TÑ*Ø�r1   r   )r…  Úparent_moduleÚparent_call_modulerá   Úcall_idxr(   é   z)expected in_spec to have 2 children, got z'expected in_spec.type to be tuple, got z)expected args_spec.type to be tuple, got z*expected kwargs_spec.type to be dict, got Ú_positional_arg_rZ  Ú
_constant_)r–   rG   r�   rÙ   z_expected input to be TensorArgument, SymIntArgument, SymBoolArgument, or SymFloatArgument, got z#parent_call_module must not be None)ArÂ  r•   Ú
seen_nodesr  r  rÈ  rÉ  rÃ  Ú	module_idrà   Úverboserá   rI  r†  r(   rV   rè   rE  r   r;   rŠ   r¥   ru   Únode_mapÚnode_to_placeholderrË  r‹  r¹  r²   r[   r—   Ú_SubmoduleEntryr(  Únum_childrenr_   r`   r>   ÚchildrenrÇ   rd  rH  r‘   Úcontextr¯  r   Úinputsre  r¦  r§  r]   r   rÙ   Úcopyrâ   Úinserting_beforerœ  r   r   r   r   Úremap_inputr±  rZ  r�   r€   )"rp   rÂ  r•   rÐ  r  r  rÈ  rÉ  rÃ  rÑ  rà   r(   Ú	num_callsr¯   r¶  Úbase_module_framer'  Ú	args_specÚkwargs_specr0  Ú	arg_nodesÚkwarg_nodesrÙ   r+  rø   Úflat_arg_nodeÚinput_nodesr,  Úinputs_nodeÚ	args_nodeÚkwargs_noder   rP   rv   s"   `      `                         @r2   ry   z_ModuleFrame.__init__J  sÿ  ú€ ð %ˆŒØˆŒ
Ø$ˆŒØ(ˆÔØ$ˆŒØ.ˆÔØˆŒØ(ˆÔØ"ˆŒà!2ˆÔØˆŒà"&×"3Ñ"3°BÑ"7ÑˆŒ�"�iä# D§H¡H¨i¸!©mÓ<ˆŒáØÐØ ˆDŒKÜ)0°¸Ô)A˜ŸšÀrˆD�Jà×.Ñ.×2Ñ2Ø—‘Ü!¤%§(¡(§.¡.Ó"2°rÔ:óˆDŒKð  Ÿ™ˆDŒJà—[‘[×&Ñ&ˆŒ
ð =?ˆŒØ#%ˆÔ à8<ˆÔØÑÜ(¨¯©°T·^±^ÓDˆHöô ˜6Ÿ=™=¨(°D·K±KÀÔOØ&,§l¡l×&>Ñ&>¸xÓ&HˆDÔ#Ø× Ñ  §¡Ò0Ø$(×$5Ñ$5°d·n±nÑ$EÀaÑ$HÐ!Ø'8×'?Ñ'?×'HÑ'H�—‘Ô$Ø×Ñ˜dŸn™nÑ-×4Ñ4ÜØ#Ÿ{™{Ÿ™Ø"&§+¡+×"4Ñ"4Ø'+×'>Ñ'>ØŸ™Ø&¨™]ØŸ;™;ôô	ð &×)Ñ)¨$¯.©.Ó9ˆ	ØÑ  T§[¡[Ñ%<Ø× Ñ ×-Ñ-°Ò2Ü$Ø?À	×@QÑ@Q×@^Ñ@^Ð?_Ð`óð ð × Ñ ×%Ñ%¬UÑ2Ü$Ø=¸i×>OÑ>O×>TÑ>TÐ=UÐVóð ð &/×%6Ñ%6×%?Ñ%?Ó%AÑ"ˆI�{Ø�~‰~¤UÑ*Ü$Ø?À	ÇÁÐ?OÐPóð ð ×Ñ¤tÑ+Ü$Ø@À×AQÑAQÐ@RÐSóð ð —‘×+Ñ+¨DÕ1ô  % Y×%;Ñ%;Ô<óá<˜ð —J‘J×*Ñ*Ð-=¸c¸UÐ+CÕDØ<ð ð ð !�Ø'×/Ô/�DØ(,¯
©
×(>Ñ(>¸tÓ(D�K Ò%ð 0ä2Ø—K‘KÜ˜9Ó% {Ð3Ø×%Ñ%ó�	ô
 !*¨)×*:Ñ*:Ö ;‘H�C˜Ø$(§J¡J×$:Ñ$:Ø*Ü'×/Ñ/Ø'¨Ð-ô $.¨cÔ3CÔ#Dð  ŸHšHà#-¨c¨UÐ!3ð %;ó 	%�Mô " #Ô'7Ô8Ø à—x‘x 4§?¡?Ò2Ü-1¯Y©Y°t·±ÀsÇxÁxÑ7P×7UÑ7UÓ-V˜Ô*à)ð ×0Ñ0°·±ÀÇÁÑ1JÒKñ! !<÷ 2ðB —‘×"Ñ"×3Ñ3°D×4KÑ4KÕLØ:<�Ø&×-Ô-�EÜ! %Ô)9Ô:Ø#×*Ñ*¨5¯;©;Õ7ØŸ™¨4¯?©?Ñ:Ø#×*Ñ*¨4Õ0ä)Ø!ä .Ü .Ü /Ü 0ð	ô ô #1ð#MÜMQÐRWË[ÈMð![ó#ð ð $×*Ñ*Ø ŸK™K×3Ñ3°D·O±OÀEÇJÁJÑ4OÓPõð' .ô. 2Ø—K‘K×&Ñ&ØØ×%Ñ%ó�ð !ŸK™K×-Ñ-×;Ñ;Ü×$Ñ$ {°AÐ&6ó�	ð #Ÿk™k×/Ñ/×=Ñ=Ü×$Ñ$ {°AÐ&6ó�ô
 # 9×#9Ñ#9Ô:óá:˜ð —K‘K×%Ñ%×3Ñ3´H×4DÑ4DÀyÐRSÀnÕUØ:ð ð ð )×0Ò0ó	ñ 1˜ð �t—{‘{×(Ñ(×6Ñ6Ü ×(Ñ(¨;¸Ð*:óñ ð 1ð	 ð ÷S Mð^ ×&Ñ&Ð.Ü$Ð%JÓKÐKä+0°Ó+;ˆD×#Ñ#Ô(Ø-8ˆD×#Ñ#Õ*ðO &=Ð ùò(÷ 2Ñ1üòLùò÷S MÐLúsQ   Î;_4Ï%_/Ï8C1_4Ó*A#_4ÖF`Ü=`Ý`Ý">`Þ `ß/_4ß4_>à
`à`c                 ó®  — | j                   dk(  rt        d|› d�«      ‚|j                  | j                  urt        d«      ‚| j                  j	                  d «      5  | j                  j                  |j                  |j                  ¬«      }d d d «       t        j                  |j                  «      _	        || j                  |<   y # 1 sw Y   Œ=xY w)NrÏ   zCannot add placeholder z to root moduleú6expected x.graph to be flat_graph, got different graph)Ú	type_expr)rá   r_   ru   rÂ  rÛ  r‘   rÙ   r`   rÚ  râ   rÔ  )rp   r5  Úplaceholder_nodes      r2   Úadd_placeholderz_ModuleFrame.add_placeholder   s®   € Ø�8‰8�rŠ>Ü Ð#:¸1¸#¸_Ð!MÓNÐNØ�7‰7˜$Ÿ/™/Ñ)Ü ØHóð ð �Z‰Z×(Ñ(¨Õ.Ø#Ÿz™z×5Ñ5°a·f±fÈÏÉÐ5ÓOÐ÷ /ô !%§	¡	¨!¯&©&Ó 1ÐÔØ&6ˆ× Ñ  Ò#÷ /Ð.ús   Á2CÃCc                 óÆ  — t        j                  t        j                  j                  | j
                  |j                  «      }t        j                  t        j                  j                  | j
                  |j                  «      }| j                  j                  |j                  ||«      }t        j                  |j                  «      |_        || j                  |<   |S rM   )rÅ   Útree_map_onlyr;   rŠ   r‘  rÜ  r�   r€   ru   rZ  rG   rÚ  râ   rÓ  )rp   r5  r�   r€   r™   s        r2   Úcopy_sym_call_functionz#_ModuleFrame.copy_sym_call_function  s“   € ô ×#Ñ#¤E§H¡H§M¡M°4×3CÑ3CÀQÇVÁVÓLˆÜ×%Ñ%¤e§h¡h§m¡m°T×5EÑ5EÀqÇxÁxÓPˆØ�z‰z×'Ñ'¨¯©°$¸Ó?ˆÜ—I‘I˜aŸf™fÓ%ˆŒ	Øˆ�‰�aÑØˆr1   c                 óH  — |j                   | j                  urt        d«      ‚|| j                  v r| j                  |   S | j	                  d|› d�«       || j
                  v r| j
                  |   S |j                  dk(  s%| j                  j                  | j                  «      €™| j                  |«       | j                  �m| j                  j                   j                  | j                  «      5  | j                  j                  d| j                  j                  |«      «       d d d «       | j
                  |   S |j                  dk(  �rk|j                   t"        j$                  j&                  j(                  j*                  t"        j$                  j&                  j,                  j.                  t"        j$                  j&                  j0                  j*                  t"        j$                  j&                  j2                  j4                  t"        j$                  j&                  j6                  j.                  t"        j$                  j&                  j8                  j.                  fv s/t;        |j                   d«      r9|j                   j<                  dk(  r | j?                  |«       | j                  |   S | j                  j                  | j                  «      �| j@                  jC                  | |«      S tE        d	|j                  › d
|› �«      ‚# 1 sw Y   �ŒðxY w)Nré  zremap_input(r—  r‘   r   rZ  r*   Ú	_operatorz(Could not run remap_input() on op type: z
 for node )#ru   rÂ  r_   rÓ  r$  rÔ  r–   rà   rE  rá   rì  rË  rÉ  rÛ  Ú
insert_argrÜ  rG   r;   rf  rg  Úsym_sizer?   rR   ri  ÚunbindÚsumÚdim_IntListÚviewÚdiffrV   r*   rï  rè   Úreadrˆ  )rp   r5  s     r2   rÜ  z_ModuleFrame.remap_input  sV  € Ø�7‰7˜$Ÿ/™/Ñ)Ü ØHóð ð �—‘ÑØ—=‘= Ñ#Ð#Ø�
‰
�\ !  AÐ&Ô'Ø�×(Ñ(Ñ(Ø×+Ñ+¨AÑ.Ð.à�D‰D�MÒ! T×%;Ñ%;×%?Ñ%?ÀÇÁÓ%IÐ%Qð × Ñ  Ô#Ø×&Ñ&Ð2ð —[‘[×&Ñ&×7Ñ7¸×8OÑ8OÕPØ×+Ñ+×6Ñ6°q¸$¿+¹+×:QÑ:QÐRSÓ:TÔU÷ Qà×+Ñ+¨AÑ.Ð.Ø�T‰T�_Ó$Ø�H‰Hä—	‘	—‘×'Ñ'×+Ñ+Ü—	‘	—‘×#Ñ#×+Ñ+Ü—	‘	—‘×%Ñ%×)Ñ)Ü—	‘	—‘×"Ñ"×.Ñ.Ü—	‘	—‘×#Ñ#×+Ñ+Ü—	‘	—‘×#Ñ#×+Ñ+ðñô ˜Ÿ™ ,Ô/°A·H±H×4GÑ4GÈ;Ò4Vð ×'Ñ'¨Ô*Ø—=‘= Ñ#Ð#Ø×#Ñ#×'Ñ'¨¯©Ó1Ð=ð —:‘:—?‘? 4¨Ó+Ð+äØ:¸1¿4¹4¸&À
È1È#ÐNóð ÷1 QÑPús   Ã36LÌL!c                 óX  — d }| j                   j                  «       D ],  }|j                  j                  di «      }|€|}Œ$||k7  sŒ*i } n |r]| j                  €t        d«      ‚|| j                  j                  d<   | j                   j                  «       D ]  }|j                  d= Œ y y )NÚcustomzBparent_call_module must not be None when uplifting custom metadata)rÓ  rê   râ   rE  rË  r_   )rp   Úcustom_metar™   Ú	curr_metas       r2   Úuplift_common_custom_metadataz*_ModuleFrame.uplift_common_custom_metadataK  s²   € àˆØ—M‘M×(Ñ(Ö*ˆDØŸ	™	Ÿ™ h°Ó3ˆIØÐ"à'�Øà˜KÓ'Ø �Ùð +ñ à×&Ñ&Ð.Ü$ØXóð ð 6AˆD×#Ñ#×(Ñ(¨Ñ2ØŸ™×,Ñ,Ö.�Ø—I‘I˜hÑ'ñ /ð r1   c           	      ó  ‡ ‡— ‰ j                   j                  ‰ j                  d «       g }‰ j                  j	                  ‰ j
                  «      }|��‰ j                  ��|j                  D ]‡  }t        |t        t        t        t        t        f«      rS|j                  ‰ j                  v r)|j!                  ‰ j                  |j                     «       Œi|j!                  d «       Œ{t#        d|› �«      ‚ ˆ fd„Št%        ‰ j&                  t)        ˆfd„|D «       «      |j*                  «      }t-        ‰ j                  j&                  ‰ j.                  |j*                  «      }|}nŒg }‰ j0                  D ]\  }|j2                  D ]K  }|j                  ‰ j                  vsŒ|j!                  |«       |j!                  ‰ j0                  |   «        Œ\ Œ^ ‰ j.                  }t5        |«      dk(  r|d   }t        |t6        t8        j:                  j<                  f«      st?        dtA        |«      › �«      ‚‰ jB                  jE                  |«       |€y t        |t8        j:                  j<                  «      r|jF                  j	                  d«      n(|D �	cg c]  }	|	jF                  j	                  d«      ‘Œ c}	|jF                  d<   ‰ jI                  «        t5        |«      dk(  r|€|‰ j                  j0                  |d   <   y tK        |«      D ]u  \  }
}|€Œ	t8        j:                  jM                  |«      |
   jN                  }|jF                  j	                  d«      |jF                  d<   |‰ j                  j0                  |<   Œw y c c}	w )Nz'Unsupported data type for output node: c                 óæ   •— | €y ‰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ˆ  ru   )rY  Ú	seen_noderp   s     €r2   Úget_actual_output_nodez=_ModuleFrame.finalize_outputs.<locals>.get_actual_output_node~  sx   ø€ Ø�>Øà ŸO™O¨F¯K©KÑ8�	Ø §¡Ñ-ØŸ=™=¨Ñ3Ð3Ø $×":Ñ":Ñ:Ø×3Ñ3°IÑ>Ð>ä&Ø5°f°X¸YÀtÇzÁzÀlÐSóð r1   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrM   r0   )rO   rY  r  s     €r2   rS   z0_ModuleFrame.finalize_outputs.<locals>.<genexpr>Ž  s   øè ø€ ÐPÁ<¸Ñ,¨V×4Á<ùs   ƒr   r   z8expected graph_outputs to be list or torch.fx.Node, got Úval)(rÈ  rJ  rá   rà   rE  r†  rÉ  r¸   r]   r   r   r   r   r   rÙ   rÐ  r—   rˆ  r±  r(   r>   r;  r¯  rË  rÓ  Úusersrˆ   r†   r;   rŠ   r‘  r_   r`   ru   rY  râ   rþ  r   ÚProxyr™   )rp   Úorig_outputsr'  rY  Útree_out_nodeÚ
parent_outÚgraph_outputsÚ	orig_nodeÚ	user_nodeÚor   Úorig_outputÚ	proxy_outr  s   `            @r2   Úfinalize_outputsz_ModuleFrame.finalize_outputsc  sÿ  ù€ Ø×Ñ× Ñ  §¡¨4Ô0àˆà×*Ñ*×.Ñ.¨t¯~©~Ó>ˆ	ØÑ  T§[¡[Ñ%<Ø#×+Ô+�ÜØä&Ü&Ü'Ü(Ü(ðô	ð —{‘{ d§o¡oÑ5Ø$×+Ñ+¨D¯O©O¸F¿K¹KÑ,HÕIà$×+Ñ+¨DÕ1ä&ØAÀ&ÀÐJóð ð! ,ô(ô 0Ø—‘ÜÓPÁ<ÓPÓPØ×"Ñ"óˆMô
 0FØ—‘×"Ñ" D×$;Ñ$;¸Y×=OÑ=Oó0ˆJð BO‰MàˆMà!Ÿ]œ]�	Ø!*§¤�IØ —~‘~¨T¯_©_Ò<à$×+Ñ+¨IÔ6Ø%×,Ñ,¨T¯]©]¸9Ñ-EÔFÙñ "1ð +ð ×0Ñ0ˆJÜ�=Ó! QÒ&Ø -¨aÑ 0�ä˜-¬$´·±·±Ð)>Ô?Ü ØJÌ4ÐP]ÓK^ÐJ_Ð`óð ð 	�
‰
×Ñ˜-Ô(ð ÐØô ˜-¬¯©¯©Ô7ð ×Ñ×"Ñ" 5Ô)á-:Ó;©]¨�!—&‘&—*‘*˜UÕ#¨]Ñ;ð 	�‰˜Ñð
 	×*Ñ*Ô,äˆ|Ó Ò! iÐ&7Ø4>ˆD�K‰K× Ñ  ¨a¡Ò1ä"+¨LÖ"9‘��;ØÐ&Øä!ŸH™HŸN™N¨:Ó6°qÑ9×>Ñ>�	Ø(3×(8Ñ(8×(<Ñ(<¸UÓ(C�	—‘˜uÑ%Ø4=�—‘×$Ñ$ [Ò1ñ #:ùò <s   Ê"Nc                 óÜ   — | j                  d|j                  «       «       | j                  j                  || j                  «      | j
                  |<   || j                  |j                  <   y )NÚcopying)r$  Úformat_noderu   Ú	node_copyrÜ  rÓ  rÐ  rÙ   r˜   s     r2   Ú	copy_nodez_ModuleFrame.copy_nodeÁ  sP   € Ø�
‰
�9˜d×.Ñ.Ó0Ô1Ø"Ÿj™j×2Ñ2°4¸×9IÑ9IÓJˆ�‰�dÑØ%)ˆ�‰˜Ÿ	™	Ò"r1   c                 ó
  — t        | j                  j                  «      D ]?  \  }}| j                  ||j                  j                  d«      |j                  «       «       ŒA d}| j                  |   }|j                  dk(  r5| j                  |«       |dz  }| j                  |   }|j                  dk(  rŒ5| j                  |«       | j                  j                  D ]#  }|j                  dk(  sŒ| j                  |«       Œ% y )Nrx  r   r‘   r   rY  )
r   rÂ  r•   r$  râ   rE  r  r–   r  Úrun_from)rp   r   r™   Únode_idxs       r2   Ú	run_outerz_ModuleFrame.run_outerÆ  sÔ   € Ü  §¡×!6Ñ!6Ö7‰GˆAˆtØ�J‰J�q˜$Ÿ)™)Ÿ-™-Ð(9Ó:¸D×<LÑ<LÓ<NÕOð 8ð ˆØ�z‰z˜(Ñ#ˆØ�g‰g˜Ò&Ø�N‰N˜4Ô Ø˜‰MˆHØ—:‘:˜hÑ'ˆDð �g‰g˜Ó&ð
 	�‰�hÔð —O‘O×)Ô)ˆDØ�w‰w˜(Ó"Ø—‘˜tÕ$ñ *r1   c                 ó4   — | j                   rt        |i |¤Ž y y rM   )rÒ  r$  )rp   r�   r€   s      r2   r$  z_ModuleFrame.printÙ  s   € Ø�<Š<ä�4Ð"˜6Ó"ð r1   c                 ó  — d}|t        | j                  «      k  �re| j                  |   }|j                  dk(  rt        d|› �«      ‚| j	                  «        | j	                  d||j                  «       «       | j	                  | j                  «       t        | j                  «      }|j                  dk(  r|dk(  r|S | j                  «        |S t        |j                  j                  di «      «      dk(  rt        d|› �«      ‚|j                  d   }dd	lm} t        |«      dk(  r||v r| j                  }n\|j                  d   j                  «       D ��	�
cg c]2  \  }\  }	}
|	|	r|
nd d
|v rt        |j                  d
«      d   «      ndf‘Œ4 }}	}}
|d | | j                  k7  rI| j                  «        | j	                  d| j                   «       | j	                  | j"                  «       |S |€t        d«      ‚t%        | j                  |«      rÐ||   }| j	                  d|«       t'        |j                  d   j)                  «       «      |   }t+        | j,                  | j                  | j.                  | j0                  | j2                  | j4                  | | j                  |gz   |j                  d
«      d   | j6                  «
      j9                  |«      }|dz  }�Œâ|| j                  k7  rt        d|› d| j                  › �«      ‚|j                  dk(  r2| j2                  | j:                     j=                  |j>                  «       | jA                  |«       |dz  }|t        | j                  «      k  r�Œdy y c c}
}	}w )Nr   r‘   z%unexpected placeholder node at index ÚSTEPrY  r   rx  z(Unable to find nn_module_stack for node )Ú_EMPTY_NN_MODULE_STACK_KEYrÚ   rÅ  Ú	outliningz"node_module_stack must not be NonezCreating new stack frame forzexpected node_module_stack z to equal module_stack r•  )!rˆ   r•   r–   r_   r$  r  rÃ  r  râ   rE  rˆ  Ú(torch._export.passes._node_metadata_hookr  r\   r?   rT   rá   ru   rz  r†   ÚkeysrÁ  rÂ  rÐ  r  r  rÈ  rà   r  r†  rò   rG   r  )rp   r  Ú
module_idxr™   Údepthrx  r  Únode_module_stackrP   rB  rv   Únext_moduleÚnext_module_keys                r2   r  z_ModuleFrame.run_fromÞ  sO  € Øˆ
àœ˜TŸZ™Z›Ó(Ø—:‘:˜hÑ'ˆDØ�w‰w˜-Ò'Ü$Ð'LÈXÈJÐ%WÓXÐXà�J‰JŒLØ�J‰J�v˜x¨×)9Ñ)9Ó);Ô<Ø�J‰J�t×(Ñ(Ô)Ü˜×)Ñ)Ó*ˆEØ�w‰w˜(Ò"Ø˜A’:ð $�Oð ×%Ñ%Ô'Ø�ä�4—9‘9—=‘=Ð!2°BÓ7Ó8¸AÒ=Ü"Ð%MÈdÈVÐ#TÓUÐUà"Ÿi™iÐ(9Ñ:ˆOõô
 �OÓ$¨Ò)Ø.°/ÑAð %)×$5Ñ$5Ñ!ð *.¯©Ð3DÑ)E×)KÑ)KÔ)Mõ%ñ *N™˜™:˜D "ð	 Ù"™¨Ø14¸±œ˜AŸG™G C›L¨Ñ,Ô-¸qòð
 *Nð "ò %ð !  %Ð(¨D×,=Ñ,=Ò=ð ×%Ñ%Ô'Ø—
‘
˜;¨¯©Ô1Ø—
‘
˜4Ÿ:™:Ô&Ø�à Ð(Ü$Ð%IÓJÐJä˜$×+Ñ+Ð->Ô?ð 0°Ñ6�Ø—
‘
Ð9¸;ÔGô #' t§y¡yÐ1BÑ'C×'HÑ'HÓ'JÓ"KÈEÑ"R�Ü'Ø—O‘OØ—J‘JØ—O‘OØ×%Ñ%Ø—O‘OØ×(Ñ(ØØ×%Ñ%¨¨Ñ5Ø#×)Ñ)¨#Ó.¨qÑ1Ø×*Ñ*ó÷ ‘(˜8Ó$ð ð ˜a‘�
Ùð ! D×$5Ñ$5Ò5Ü$Ø1Ð2CÐ1DÐD[Ð\`×\mÑ\mÐ[nÐoóð ð �w‰w˜*Ò$à—‘ §¡Ñ/×3Ñ3°D·K±KÔ@à�N‰N˜4Ô à˜‰MˆHð} œ˜TŸZ™Z›Ö(ùôF%s   Å7NrM   )rm   N)r)   r*   r+   r;   rŠ   r¥   r>   r‘  r†   rr   r?   rÇ   r   r’   r!   ry   rì  rï  rÜ  rþ  r  r  r  r$  r  r0   r1   r2   rÁ  rÁ  I  sÅ   „ ð CGñt9à—H‘H—N‘Nðt9ð �U—X‘X—]‘] CÐ'Ñ(ðt9ð ˜5  c¨D¡j°#Ð!5Ñ6Ñ7ðt9ð   Ð%8Ð 8Ñ9ðt9ð —‘×$Ñ$Ð'8Ñ8¸4Ñ?ót9òl7òò,ó\(ò0\>ò|*ò
%ò&#ó
ar1   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<   y)rÕ  r…  rÊ  rË  rá   rÌ  r(   N)r)   r*   r+   rr   r=   r;   rX   rY   rŠ   r‘  r?   r0   r1   r2   rÕ  rÕ  B  s;   … àƒOØ—8‘8—?‘?Ó"ØŸ™Ÿ™Ó%Ø	ƒHØƒMØ�H‰H�O‰OÔr1   rÕ  Ú
orig_graphÚroot_modulec                 ó:  — i }t        t        «      }t        t        «      }i }t        | t	        | j
                  «      ||||d dgd|j                  D �ci c]%  }|j                  r|j                  |j                  “Œ' c}|¬«      j                  «        ||fS c c}w )N)rÏ   Nr   rÏ   )r(   )
r   r†   rU   rÁ  r>   r•   rà   r'  rá   r  )r'  r(  rÐ  r  r  rÈ  r  s          r2   ré   ré   L  s¥   € Ø+-€JÜ5@ÄÓ5F€LÜ&1´#Ó&6€JØ24€OÜØÜˆj×ÑÓØØØØØØ	ˆØ
ð %×6Ò6ó	
á6�Ø�Šð �I‰I�u—‘Ñ&Ø6ñ	
ð
 ô÷  �i„kØ˜Ð#Ð#ùò	
s   Á*BrÉ  r!  re   c                 ó6  — |dk(  rWt        |j                  «       «      dd  D ]8  }t        | |«      �Œt        | |t        j
                  j                  «       «       Œ: g }t        | j                  j                  «       «      D ]S  \  }}|€Œ	||z   }t        |||j                  d«      d   dz   ¬«       t        | |«       |j                  ||   ||f«       ŒU |j                  t        j                  d«      ¬«       |D ]  \  }}}| j!                  ||«       Œ y )NrÏ   r   rÚ   r   rK   )re   )r›  )r†   r   r´  r¹  r;   rX   rY   r[   r\   r  rT   Údelattrr—   Úsortr¦  Ú
itemgetterÚregister_module)rÉ  r!  re   rá   r×  rÙ   Úchildr  s           r2   r  r  e  sþ   € ð �‚|Ü˜	Ÿ™Ó(Ó)¨!¨"Ó-ˆCÜ˜f cÓ*Ñ2Ü˜v s¬E¯H©H¯O©OÓ,=Õ>ð .ð €HÜ˜FŸO™O×1Ñ1Ó3Ö4‰ˆˆeØˆ=ØØ�t‰mˆÜ˜E 9°S·Y±Y¸s³^ÀAÑ5FÈÑ5LÕMÜ�˜ÔØ�‰˜ 3™¨¨uÐ5Õ6ð 5ð ‡M�M”h×)Ñ)¨!Ó,€MÔ-Û"‰ˆˆ4�Ø×Ñ˜t UÕ+ñ #r1   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)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                 ó,   — t        t        «      | _        y rM   )r   rU   Únode_names_by_fqnro   s    r2   ry   z_IVals.__init__�  s   € ä!,¬SÓ!1ˆÕr1   c                 óx   — t        |t        j                  j                  «      r|j                  j
                  S yrA   )r]   r;   Ú_opsÚ
OpOverloadÚ_schemaÚ
is_mutable)rp   rG   s     r2   Ú_is_mutablez_IVals._is_mutable”  s)   € Ü�fœeŸj™j×3Ñ3Ô4Ø—>‘>×,Ñ,Ð,Ør1   c                 ó¨  — |j                   dk7  rt        d|j                   ›�«      ‚| j                  |j                  «      }t	        d|j                  |«       |sZt        t        |j                  d   j                  «       «      «      \  }}| j                  |   j                  |j                  «       |j                  |j                  d   «      S )zI
        Read state corresponding to a given intermediate value.
        rZ  z,expected node.op to be 'call_function', got zChecking mutabilityrx  r   )r–   r_   r8  rG   r$  r^  r`  râ   rê   r2  rò   rÙ   rÜ  r�   )rp   Úmfr™   Úbrá   r  s         r2   rù  z_IVals.read™  s±   € ð
 �7‰7�oÒ%Ü Ø>¸t¿w¹w¸kÐJóð ð ×Ñ˜TŸ[™[Ó)ˆÜÐ# T§[¡[°!Ô4Ùô œ( 4§9¡9Ð->Ñ#?×#FÑ#FÓ#HÓIÓJ‰FˆC�Ø×"Ñ" 3Ñ'×+Ñ+¨D¯I©IÔ6Ø�~‰~˜dŸi™i¨™lÓ+Ð+r1   c           
      ó  — |D ]ó  }|D ]ì  }|j                   j                  }| j                  |j                     }|j                  D �cg c]  }|j
                  |v sŒ|‘Œ }}|D ]Ž  }|j                  |«      5  |j                  dt        j                  j                  j                  j                  |j                  d   |f«      }	t        j                  |j                  «      |	_        ddd«       Œ� Œî Œõ yc c}w # 1 sw Y   Œ¤xY w)zT
        Update states corresponding to intermediate values that were read.
        rZ  r   N)r(   ru   r2  rá   r•   rÙ   rd  re  r;   rf  rg  rh  ri  r�   rÚ  râ   )
rp   Ú
partitionsÚshared_submodulesr  ru   Ú
node_namesr  r•   r™   r\  s
             r2   rZ   z_IVals.update«  sà   € ó ",ÐÛ*�ØŸ™×*Ñ*�Ø!×3Ñ3°E·I±IÑ>�
Ø$)§K¢KÓH¡K˜q°1·6±6¸ZÒ3Gš K�ÐHÛ!�Dð ×.Ñ.¨tÕ4Ø#(×#4Ñ#4Ø+Ü!ŸI™IŸN™N×0Ñ0×8Ñ8Ø!ŸY™Y q™\¨4Ð0ó$˜ô
 )-¯	©	°$·)±)Ó(<˜œ÷ 5Ð4ñ "ñ	 +ñ ",ùò I÷ 5Ð4ús   ÁC:ÁC:Á8A3C?	Ã?DN)r)   r*   r+   r:   ry   r8  rù  rZ   r0   r1   r2   rç   rç   {  s   „ ñò(2òò
,ó$=r1   rç   r  c                 ó”   — |j                  «       D ]5  \  }}|rt        ||«      n|}|D ]  }t        | |«      }t        |||«       Œ Œ7 y rM   )r\   r   r¬   rW   )rŸ  r(  r  r†  Únamesr(   rÙ   r  s           r2   rë   rë   À  sN   € ð
 '×,Ñ,Ö.Ñˆ	�5Ù6?”˜;¨	Ô2À[ˆÛˆDÜ˜"˜dÓ#ˆCÜ�F˜D #Õ&ñ ñ /r1   c                 ó¨  — i }| D �]I  }t        |«      D �]7  \  }}t        |j                  |j                  «      }t	        |j
                  |«      }d}|d | D ]ñ  }t        |j                  |j                  «      sŒ$|j                  }	|j                  |j                  k(  rˆ|j                  d«      �^ }
}t        |	|
«      j                  j                  |«       t        |j                  |j                  «      }t	        |j
                  |«      }||j                  _        |||<    �Œ|rŒÔ|	j                  ||j                  «       d}Œó �Œ: �ŒL |S )NFrK   T)r   rI  rá   rÌ  r‹  r…  rž  r(   rÊ  rT   r   r[   rJ  rË  rG   rK  )r=  r  r>  r   r  r†  rG   ÚdeduplicatedÚseenrÉ  re   rÙ   Úseen_child_fqnÚseen_targets                 r2   rü   rü   Ì  s0  € Ø ÐÜ'ÐÜ!Ð"3×4‰HˆAˆuÜ" 5§9¡9¨e¯n©nÓ=ˆIÜ& u×'7Ñ'7¸ÓCˆFØ ˆLà)¨"¨1Ó-�Ü+¨D¯K©K¸¿¹ÕFØ"×0Ñ0�Fð —x‘x 5§9¡9Ò,ð
 )/¯©°SÓ(9™˜ Ü/°¸Ó?×HÑH×LÑLÈTÔRÜ)3°D·H±H¸d¿m¹mÓ)L˜Ü&7Ø!×,Ñ,¨nó'˜ð ;F˜×0Ñ0Ô7Ø=KÐ/°	Ñ:ÚÚ)ð ×,Ñ,¨V°T·[±[ÔAØ'+™ò= .ò 5ð (ðL #Ð"r1   r  ÚscopeÚmodule_id_to_inputs_removedc           	      óæ  ‡‡— ‰€t        t        «      Št        | «      ‰v rt        | «      ‰t        | «         iS | j                  j	                  «       D ]M  \  }Št        t        d‰«      |||gz   ‰«      }|j	                  «       D ]  \  }}‰|   j                  |«       Œ ŒO t        | dd«      }|�t        |j                  «      dk(  r‰S t        |t        j                  j                  «      st        dt!        |«      › �«      ‚t#        t%        d„ |j                  «      «      }	t        |	«      dk(  rdn|	d   }
t%        d„ |j                  «      }|D ]Q  }t'        | |j(                  «      Š‰€Œt        ‰«      ‰v sŒ*t+        t%        ˆˆfd	„|j,                  «      «      |_        ŒS i }|	D ]u  }|j.                  |vrŒd}||j.                     D ]H  }|j1                  d
«      }|dt        |«       |D �cg c]  }|j1                  d«      d   ‘Œ c}k(  sŒF|} n |€Œq|||<   Œw t        «       }|j	                  «       D ]ò  \  }}t        |j2                  «      dkD  r©|t        |«      d }t5        | |«      }t        |t        j6                  t        j8                  f«      st        dt!        |«      › �«      ‚|j;                  |
«      5  |j=                  dd
j?                  |«      «      }ddd«       |jA                  d¬«       |jC                  |«       |jE                  |j.                  «       Œô t        | tF        «      r| jI                  «        t        | «      |iS c c}w # 1 sw Y   Œ|xY w)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.Moduleru   r   z)expected graph to be torch.fx.Graph, got c                 ó    — | j                   dk(  S )Nr‘   ©r–   ©r  s    r2   r]  z_sink_params.<locals>.<lambda>'  s   €  1§4¡4¨=Ò#8r1   rÅ  c                 ó    — | j                   dk(  S )Nr²   rK  rL  s    r2   r]  z_sink_params.<locals>.<lambda>+  s   € ¨¯©°Ò)>r1   c                 ó8   •— | j                   ‰t        ‰«         vS rM   )rÙ   rÍ   )r  rH  Ú	submodules    €€r2   r]  z_sink_params.<locals>.<lambda>3  s   ø€ ˜aŸf™fÐ,GÌÈ9ËÑ,VÑVr1   rK   rÚ   zBexpected state_attr to be torch.Tensor or torch.ScriptObject, got r•  T)Úpropagate_meta)%r   rU   rÍ   r[   r\   rû   r
   rZ   r¬   rˆ   r•   r]   r;   rŠ   r¥   r_   r`   r†   Úfilterr   rG   r>   r�   rÙ   rT   r  r   rb   rd   rd  re  r¶   rj  Ú
erase_noderò   r   rš   )r(   r  rG  rH  rÙ   Úsubmod_id_to_inputs_removedrP   ru  ru   rÙ  Úthe_last_inputÚcall_module_nodesr™   Úinputs_to_state_of_scopeÚ
state_nameÚsnÚsn_splitr5  Úinputs_removedÚ	attr_pathÚ
state_attrr\  rO  s      `                  @r2   rû   rû   ÷  s>  ù€ ð, #Ð*Ü&1´#Ó&6Ð#ä	ˆ&ƒzÐ0Ñ0Ü�6“
Ð7¼¸6»
ÑCÐDÐDð "Ÿ?™?×0Ñ0Ö2‰ˆˆiÜ&2ÜÐ" IÓ.ØØ�T�F‰NØ'ó	'
Ð#ð 0×5Ñ5Ö7‰DˆAˆqØ'¨Ñ*×1Ñ1°!Õ4ñ 8ð 3ô �F˜G TÓ*€EØ€}œ˜EŸK™KÓ(¨AÒ-à*Ð*ä�eœUŸX™XŸ^™^Ô,ÜÐHÌÈeËÈÐVÓWÐWä”&Ñ8¸%¿+¹+ÓFÓG€FÜ  ›[¨AÒ-‘T°6¸"±:€Nô Ñ>ÀÇÁÓLÐÛ!ˆÜ˜f d§k¡kÓ2ˆ	ð Ñ ¤R¨	£]Ð6QÒ%QÜÜÜVØ—I‘IóóˆD�Ið "ð @BÐÛˆØ�9‰9˜OÑ+Øàˆ
Ø! $§)¡)Ô,ˆBØ—x‘x “}ˆHØ˜œ#˜e›*Ð%Á5Ó)IÁ5¸a¨!¯'©'°#«,°q«/À5Ñ)IÓIØ%�
Ùð	 -ð ÐØà)3Ð  Ò&ð/ ô4  #›u€Nà4×:Ñ:Ö<ÑˆˆjÜˆt�z‰z‹?˜QÒØ"¤3 u£: <Ð0ˆIÜ0°¸ÓCˆJÜ˜j¬5¯<©<¼×9KÑ9KÐ*LÔMÜ$ØXÔY]Ð^hÓYiÐXjÐkóð ð
 ×&Ñ& ~Õ6Ø ×,Ñ,¨Z¸¿¹À)Ó9LÓM�÷ 7ð ×&Ñ& xÀÐ&ÔEà×Ñ˜ÔØ×Ñ˜4Ÿ9™9Õ%ð! =ô$ �&Ô+Ô,Ø�‰Ôäˆv‹J˜Ð'Ð'ùòU *J÷> 7Ð6ús   Ç6M"
Ë
"M'Í'M0	)TrM   )rÏ   )grÃ   rÚ  Úloggingr¦  r½  Úcollectionsr   Úcollections.abcr   Ú
contextlibr   r   Údataclassesr   Úenumr   Útypingr	   r
   r;   Útorch.fx._pytreerŠ   Ú_pytreer¬  Útorch.utils._pytreeÚutilsrÅ   Ú"torch._library.fake_class_registryr   Útorch.exportr   Útorch.export._tree_utilsr   Útorch.export.exported_programr   r   r   r   r   r   r   r   Útorch.fx._symbolic_tracer   Útorch.fx.graph_moduler   r   r   r   r   Ú_remove_effect_tokens_passr   Ú	getLoggerr)   r{  Ú__all__r$   r5   rB   rD   rb   rd   rX   rY   rr   Úboolri   rk   r   r    ÚABCr   r!   r"   r¥   rä   ræ   rå   rz  r‹  rž  r£  r’   r‘  rª  r¯  r±  r´  r¹  r?   rI  rN   rÁ  rÕ  ré   rÇ   r  rç   rU   rë   rü   r†   rû   r0   r1   r2   Ú<module>rs     s¶  ðã 
Û Û Û Û 	Ý #Ý $Ý %Ý Ý !Ý ß ã ß $Ð $ß $Ð $Ý ?Ý (Ý 3÷	÷ 	ó 	õ <ß UÑ Uß 7å =ð €g×Ñ˜Ó!€ò€ô�ô ñ �$Ô÷ð ó ðð Ð ð ñ(ó ð(ð" ñ=0Ø�l‰l˜U×/Ñ/Ñ/°%·(±(·/±/ÑAð=0à�x‰x�‰ð=0ð ð=0ð ð	=0ð
 ó=0÷@	ñ 	ô\
˜¨¯©¯©ô \
ô~." .°%·(±(·/±/ô ."ôb�c—g‘gô ô,S
˜¨¯©¯©ô S
ðn JNñ!Øð!Ø0?À$Ñ0Fð!àó!ðHH)Ø�8‰8�>‰>ðH)à)ðH)ð 
óH)ðV˜UŸX™XŸ^™^ð °°d±
ó ò$òNRð
6 #ð 6°#ð 6¸#ó 6ð$6 §¡§¡ð 6°E·H±H·O±Oó 6ðB�%—(‘(—/‘/ð ¨Có ð˜%Ÿ(™(×.Ñ.ð ¸¿¹¿¹ó ðRØ�‰×ÑÐ0Ñ0Ð3DÑDðRà
‡X�X‡]�]óRðMØ�‰×ÑÐ0Ñ0Ð3DÑDðMà
‡X�X‡]�]óMð%˜Ÿ™Ÿ™ð %°ó %ð* >Bñ	)Ø	�‰�‰ð)àð)ð —8‘8—?‘?ð)ð ˜S˜E 5§8¡8§?¡?Ð2Ñ3°dÑ:ó	)ð41�Sð 1˜Sð 1 Só 1ðJ˜Sð J¨ð J°ó J÷
vñ vðr ÷ð ó ðð$ E§H¡H§N¡Nð $ÐARó $ð4 GIñ,Ø�H‰H�O‰Oð,Ø(,¨S°#¨X©ð,Ø@Có,÷,B=ñ B=ðJ	'Ø�‰×Ñð	'à"ð	'ð �S˜#˜c™(�]Ñ#ó	'ò(#ð^ ?Cñ	t(Ø�H‰H�O‰Oðt(à˜#˜t C™y˜.Ñ)ðt(ð �‰9ðt(ð "& c¨3¨s©8 mÑ!4°tÑ!;ô	t(r1   