Ë
    P/æjXÃ  ã                   ó°  — 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mZmZmZmZmZmZmZ d dlZd dlmc mZ d dlmc mZ d dlmZ d dlmZ d d	lm Z m!Z!m"Z"m#Z#m$Z$m%Z% d d
l&m'Z' d dl(m)Z) d dlm*Z*m+Z+ ddl,m-Z- g d¢Z. G d„ de	«      Z/da0ed„ «       Z1	 dBdeejd                  ejf                  f   dejh                  jj                  de6de/de7f
d„Z8 G d„ dejh                  jj                  «      Z9 G d„ de jt                  «      Z; G d„ dejh                  jj                  «      Z<	 dCd e!d!ee;   d"e<fd#„Z=d$ej*                  j|                  d"dfd%„Z?d&„ Z@d'e6d(e6d"e6fd)„ZAd*ejh                  jj                  d+ejh                  jj                  fd,„ZBd-ejh                  jj                  d"e6fd.„ZCd-ejh                  jj                  d"ej*                  jˆ                  fd/„ZEd-ejh                  jj                  d"ej*                  jˆ                  fd0„ZFd1ejh                  jj                  de6fd2„ZGd1ejh                  jj                  de6d3ejh                  jj                  fd4„ZH G d5„ d6«      ZId7ej*                  j|                  d8e<fd9„ZJ	 dDd:ejh                  jj                  d;ee6eKf   d<e6fd=„ZLd ejh                  jj                  d>ee6ee6   f   d?ee6   fd@„ZMdA„ ZNy)Eé    N)Údefaultdict)Úcontextmanager)Údeepcopy)ÚEnum)ÚAnyÚcastÚDictÚListÚOptionalÚSetÚTupleÚUnion)ÚFakeScriptObject)Úreorder_kwargs)ÚConstantArgumentÚExportedProgramÚ	InputKindÚModuleCallSignatureÚSymIntArgumentÚTensorArgument)Úis_fx_tracing©Ú_print_readable)Ú
GetAttrKeyÚSequenceKeyé   )Ú_remove_effect_tokens)ÚInterpreterModuleÚUnflattenedModuleÚ	unflattenÚFlatArgsAdapterc                   ó   — e Zd ZdZdZdZy)Ú	_AttrKindÚ	parameterÚbufferÚconstantN)Ú__name__Ú
__module__Ú__qualname__Ú	PARAMETERÚBUFFERÚCONSTANT© ó    úY/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/export/unflatten.pyr#   r#   "   s   „ Ø€IØ€FØ�Hr.   r#   Tc               #   ó8   K  — t         } da 	 d –— | a y # | a w xY w­w)NF)ÚRUN_WITH_INTERPRETER)Úold_flags    r/   Ú_disable_interpreterr3   +   s'   è ø€ ô $€HØ Ðð(Ûà'Ñø˜xÑüs   ‚	Œ �“—Úfrom_objÚ	to_moduleÚtargetÚ	attr_kindÚ
persistentc                 óš  — |j                  d«      �^ }}|D ]>  }t        ||d «      }|€+t        j                  j	                  «       }t        |||«       |}Œ@ |t        j                  k(  r9t        | t        j                  j                  «      sJ ‚|j                  || «       y |t        j                  k(  r1t        | t        j                  «      sJ ‚|j                  || |¬«       y |t        j                  k(  rQt        | t        «      rJ d«       ‚t        | t        j                  t        j                   f«      sJ ‚t        ||| «       y y )Nú.)r8   z2FakeScriptObject should only exist during tracing.)ÚsplitÚgetattrÚtorchÚnnÚModuleÚsetattrr#   r*   Ú
isinstanceÚ	ParameterÚregister_parameterr+   ÚTensorÚregister_bufferr,   r   ÚScriptObject)	r4   r5   r6   r7   r8   ÚprefixÚfieldÚitemÚts	            r/   Ú_assign_attrrK   8   s9  € ð —\‘\ #Ó&�N€VˆUØò ˆÜ�I˜t TÓ*ˆàˆ9Ü—‘—‘Ó!ˆAÜ�I˜t QÔ'Ø‰	ðð ”I×'Ñ'Ò'Ü˜(¤E§H¡H×$6Ñ$6Ô7Ð7Ð7Ø×$Ñ$ U¨HÕ5Ø	”i×&Ñ&Ò	&Ü˜(¤E§L¡LÔ1Ð1Ð1Ø×!Ñ! %¨¸jÐ!ÕIØ	”i×(Ñ(Ò	(ÜØÔ&ô
ð 	@à?ó	@ð 
ô Øä—‘Ü×"Ñ"ðô
ð 	
ð 
ô 	�	˜5 (Õ+ð 
)r.   c                   ól   ‡ — e Zd ZdZdej
                  j                  fˆ fd„Zd„ Zd„ Z		 	 	 	 dd„Z
ˆ xZS )r   zÈA module that uses torch.fx.Interpreter to execute instead of the usual
    codegen that GraphModule uses. This provides better stack trace information
    and makes it easier to debug execution.
    Úgraphc                 óh   •— t         ‰| �  «        || _        | | j                  _        t        | _        y ©N)ÚsuperÚ__init__rM   Úowning_moduler1   Ú_run_with_interpeter)ÚselfrM   Ú	__class__s     €r/   rQ   zInterpreterModule.__init__b   s+   ø€ ô 	‰ÑÔØˆŒ
Ø#'ˆ�
‰
Ô Ü$8ˆÕ!r.   c                 ón  — | j                   €J d«       ‚t        «       sSt        j                  j	                  «       s| j
                  s) t        | j                   «      j                  | g|¢­i |¤ŽS |rŠt        |«      }| j                  t        |«      d  }|D ]  }||v sŒ|j                  ||   «       Œ t        |«      t        |«      k(  sJ ‚t        |«      t        | j                  «      k(  sJ ‚t        |«      }t        j                  j                  | | j                  ¬«      j                   |ddiŽS )Nz&Didn't finalize this InterpreterModule©rM   Úenable_io_processingF)Úgraph_moduler   r=   ÚcompilerÚis_dynamo_compilingrS   ÚtypeÚforwardÚlistÚ	arg_namesÚlenÚappendÚtupleÚfxÚInterpreterrM   Úrun)rT   ÚargsÚkwargsÚarg_listÚkwarg_namesÚ
kwarg_names         r/   r]   zInterpreterModule.forwardk   s  € Ø× Ñ Ð,ÐVÐ.VÓVÐ,ÜŒÜ�N‰N×.Ñ.Ô0¸×8QÒ8Qð 3”4˜×)Ñ)Ó*×2Ñ2°4ÐI¸$ÒIÀ&ÑIÐIáô
   ›:�Ø"Ÿn™n¬S°«]¨_Ð=�Ø"-ò <�JØ! VÒ+Ø Ÿ™¨¨zÑ(:Õ;ð<ô ˜;Ó'¬3¨v«;Ò6Ð6Ð6Ü˜8“}¬¨D¯N©NÓ(;Ò;Ð;Ð;Ü˜X“�ä—8‘8×'Ñ'¨°D·J±JÐ'Ó?×CÑCØðØ,1ñð r.   c                 óT  — t         j                  j                  | | j                  «      | j                  d<   | j                  j                  «        g | _        | j                  j                  D ]7  }|j                  dk(  sŒ| j                  j                  |j                  «       Œ9 y )NrY   Úplaceholder)r=   rc   ÚGraphModulerM   Ú__dict__Úlintr_   ÚnodesÚopra   r6   ©rT   Únodes     r/   ÚfinalizezInterpreterModule.finalizeŒ   sy   € ô ).¯©×(<Ñ(<¸TÀ4Ç:Á:Ó(Nˆ�‰�nÑ%Ø�
‰
�‰Ôð ˆŒØ—J‘J×$Ñ$ò 	3ˆDØ�w‰w˜-Ó'Ø—‘×%Ñ% d§k¡kÕ2ñ	3r.   c                 ó"   — t        | d||||«      S )Nr   r   ©rT   Úprint_outputÚinclude_strideÚinclude_deviceÚcoloreds        r/   Úprint_readablez InterpreterModule.print_readable�   ó#   € ô ØØØØØØó
ð 	
r.   ©TFFF)r'   r(   r)   Ú__doc__r=   rc   ÚGraphrQ   r]   rt   r{   Ú__classcell__©rU   s   @r/   r   r   \   s;   ø„ ñð
9à�x‰x�~‰~õ9òòB3ð& ØØØ÷
r.   r   c            
       óz   — e Zd ZdZej
                  dej                  dej                  dee	   dee	   fd„«       Z
y)r!   zN
    Adapts input arguments with ``input_spec`` to align ``target_spec``.
    Útarget_specÚ
input_specÚ
input_argsÚreturnc                  ó   — y)z=NOTE: This adapter may mutate given ``input_args_with_path``.Nr-   )rT   rƒ   r„   r…   s       r/   ÚadaptzFlatArgsAdapter.adapt³   s   € ð 	r.   N)r'   r(   r)   r~   ÚabcÚabstractmethodÚpytreeÚTreeSpecr
   r   rˆ   r-   r.   r/   r!   r!   ®   sW   „ ñð 	×Ñðà—_‘_ðð —O‘Oðð ˜‘Ið	ð
 
ˆc‰òó ñr.   r!   c                   óN   ‡ — e Zd Z	 ddedee   fˆ fd„Zd„ Zd„ Z	 	 	 	 dd„Z	ˆ xZ
S )	r   Úexport_moduleÚflat_args_adapterc                 ó@  •‡%‡&‡'— t         ‰(| �  «        |j                  j                  �t	        d«      ‚|j
                  D �cg c]  }|j                  ‘Œ }}|d   dk(  sJ ‚t        |j                  «      }t        |j                  «      | _        t        j                  j                  «       | _        t        |j
                  «      | _        || _        d| _        t        | _        t!        || j                  «       t#        || «       |j$                  | _        g | _        |j(                  }t+        «       }i }| j                  j,                  D ]“  }	||	   }
t/        |
«      |vrEt        j0                  j3                  |
j5                  «       |
j6                  ¬«      |t/        |
«      <   t9        |t/        |
«         | |	t:        j<                  ¬«       |j?                  |	«       Œ• t+        | j                  j@                  «      }t+        «       }i }| j                  jB                  D ]ˆ  }	|	|v rd}|jD                  |	   }nd}||	   }t/        |«      |vr|j5                  «       |f|t/        |«      <   t9        |t/        |«         d   | |	t:        jF                  |¬«       |j?                  |	«       ŒŠ |jI                  «       D ]Ô  \  }	}|	|v s|	|v rŒd}t/        |«      |v s$tK        |t        j0                  j2                  «      sd}|rKt/        |«      |vr|df|t/        |«      <   t9        |t/        |«         d   | |	t:        jF                  d¬«       Œ‘t/        |«      |vr||t/        |«      <   t9        |t/        |«         | |	t:        j<                  ¬«       ŒÖ i }|jD                  jI                  «       D ]u  \  }}t/        |«      |vr8tK        |t        jL                  «      r|j5                  «       }||t/        |«      <   |t/        |«         }t9        || |t:        jN                  ¬«       Œw tQ        tR        «      Š&t+        «       }ˆ&fd	„}t+        «       }| j                  jT                  D �]ø  }|jV                  tX        j<                  k(  s)|jV                  tX        jF                  k(  r¿|jZ                  r³t]        |j^                  d
«      sJ ‚tK        |j`                  tb        «      sJ ‚ |t/        |j(                  |j`                     «      |j^                  jd                  |j`                  «       |j?                  |j`                  «       |j?                  |j`                  «       Œý|jV                  tX        jF                  k(  r|jZ                  r<|jV                  tX        jf                  k(  s|jV                  tX        jh                  k(  s�Œbt]        |j^                  d
«      sJ ‚tK        |j`                  tb        «      sJ ‚ |t/        |jD                  |j`                     «      |j^                  jd                  |j`                  «       |j?                  |j`                  «       �Œû |jD                  jI                  «       D ]`  \  }}||vsŒt/        |«      ‰&v sJ d«       ‚‰&t/        |«         d   \  }} |t/        |«      ||«       |j?                  j`                  «       Œb |j(                  jI                  «       D ]?  \  }}||vsŒt/        |«      ‰&vrŒ‰&t/        |«         d   \  }} |t/        |«      ||«       ŒA i Š'‰&jk                  «       D ]#  }|D �cg c]  }|d   ‘Œ	 } }|D ]
  \  }!}| ‰'|!<   Œ Œ% tm        | ‰'g «       ˆ%ˆ'fd„Š% ‰%| g «       | j                  jn                  D �"cg c]  }"|"jp                  dk(  sŒ|"‘Œ c}"| _9        d| _:        tw        |«      D �#�ci c]  \  }#}||#“Œ
 }$}#}| jy                  d¬«      D ]  \  }	}|	|$vsŒt{        |$«      |$|	<   Œ t}        | |$«       | jy                  d¬«      D ��cg c]  \  }}|‘Œ	 c}}tS        |$j                  «       «      k(  sJ ‚| j                  j�                  «        y c c}w c c}w c c}"w c c}}#w c c}}w )Nz%Unflattening on JointExportModule NYIr   Ú F)Úrequires_grad)r7   T)r7   r8   c                 ó6   •— ‰|    }|j                  ||f«       y rO   )ra   )Úobj_idÚ	node_nameÚtarget_nameÚ	name_listÚ
consts_maps       €r/   Úadd_to_consts_mapz5UnflattenedModule.__init__.<locals>.add_to_consts_mapG  s    ø€ Ø" 6Ñ*ˆIØ×Ñ˜i¨Ð5Õ6r.   Únamez?Constants should be either aliased or appear in graph signaturer   c                 óˆ  •‡— t        | d«      r‚| j                  j                  D ]i  }|j                  dk(  sŒ|j                  ‰v sŒ"t        ˆfd„‰|j                     D «       «      sŒDt        |j                  › d‰› d| j                  › �«      ‚ | j                  «       D ]  \  }}‰j                  |«        ‰|‰«       Œ! y )NrM   rl   c              3   ó^   •K  — | ]$  }|j                  d «      dt        ‰«       ‰k(  –— Œ& y­w)r:   N)r;   r`   )Ú.0ÚfqnÚscopes     €r/   ú	<genexpr>zJUnflattenedModule.__init__.<locals>.check_module_inputs.<locals>.<genexpr>Ž  s1   øè ø€ ò  à #ð  ŸI™I c›N¨<¬S°«ZÐ8¸EÕAñ ùs   ƒ*-z was not sunk into the module z which has the graph: )	ÚhasattrrM   rp   rq   rš   ÚanyÚAssertionErrorÚnamed_childrenra   )ÚmodulerŸ   rs   rš   ÚsubmodÚcheck_module_inputsÚinputs_to_states    `   €€r/   r§   z7UnflattenedModule.__init__.<locals>.check_module_inputs‚  sÃ   ù€ Ü�v˜wÔ'Ø"ŸL™L×.Ñ.ò �Dð Ÿ™ =Ó0Ø ŸI™I¨Ò8Üó  à'6°t·y±yÑ'Aô õ ô
 -Ø#Ÿy™y˜kÐ)GÈÀwÐNdÐek×eqÑeqÐdrÐsóð ðð& !'× 5Ñ 5Ó 7ò 3‘��fØ—‘˜TÔ"Ù# F¨EÕ2ñ3r.   rl   )Úremove_duplicate)ArP   rQ   Úgraph_signatureÚbackward_signatureÚ
ValueErrorÚmodule_call_graphrž   r   rM   r=   rc   r   r�   Úadaptedr1   rS   Ú_inplace_buffer_mutationsÚ_outline_submodulesÚrange_constraintsÚequality_constraintsÚ
state_dictÚsetÚ
parametersÚidr>   rB   Úcloner’   rK   r#   r*   ÚaddÚnon_persistent_buffersÚbuffersÚ	constantsr+   ÚitemsrA   rD   r,   r   r^   Úinput_specsÚkindr   r8   r¡   Úargr6   Ústrrš   ÚCONSTANT_TENSORÚ
CUSTOM_OBJÚvaluesÚ_sink_paramsrp   rq   Úinput_placeholdersÚcheck_input_constraintsÚ	enumerateÚnamed_modulesr`   Ú_reorder_submodulesÚkeysro   ))rT   rŽ   r�   ÚentryÚfqn_listÚexport_graphr³   Úassigned_paramsÚid_to_paramrš   Úparamr¹   Úassigned_buffersÚid_to_bufferr8   r%   ÚtensorÚ	is_bufferÚid_to_constrž   r&   Ú	_constantÚconsts_targetsr™   Úadded_params_buffersÚsÚ
const_nameÚconstÚph_nameÚ_Únode_targetrJ   ÚtargetsÚnrs   ÚiÚ	fqn_orderr§   r˜   r¨   rU   s)                                        @@@€r/   rQ   zUnflattenedModule.__init__¿   sß  û€ ô
 	‰ÑÔØ×(Ñ(×;Ñ;ÐGÜÐDÓEÐEà+8×+JÑ+JÖK %�E—I“IÐKˆÐKØ˜‰{˜bÒ Ð Ð Ü × 3Ñ 3Ó4ˆÜ'¨×(EÑ(EÓFˆÔÜ—X‘X—^‘^Ó%ˆŒ
Ü!)¨-×*IÑ*IÓ!JˆÔØ!2ˆÔàˆŒÜ$8ˆÔ!ä! ,°×0DÑ0DÔEÜ˜L¨$Ô/à!.×!@Ñ!@ˆÔØ*,ˆÔ!ð #×-Ñ-ˆ
Ü$'£EˆØ57ˆØ×(Ñ(×3Ñ3ò 	&ˆDØ˜tÑ$ˆEÜ�%‹y Ñ+Ü).¯©×);Ñ);Ø—K‘K“M°×1DÑ1Dð *<ó *�œB˜u›IÑ&ô ØœB˜u›IÑ&ØØÜ#×-Ñ-õ	ð ×Ñ Õ%ð	&ô "% T×%9Ñ%9×%PÑ%PÓ!QÐÜ%(£UÐð ð 	ð ×(Ñ(×0Ñ0ò 	'ˆDØÐ-Ñ-Ø"�
Ø&×0Ñ0°Ñ6‘à!�
Ø# DÑ)�ä�&‹z Ñ-Ø,2¯L©L«N¸JÐ+G�œR ›ZÑ(äØœR ›ZÑ(¨Ñ+ØØÜ#×*Ñ*Ø%õð × Ñ  Õ&ð%	'ð, '×,Ñ,Ó.ò !	‰LˆD�&Ø�Ñ&¨$Ð2BÑ*BØàˆIÜ�&‹z˜\Ñ)´ØœŸ™×*Ñ*ô2ð !�	áä�v“J lÑ2ð Øð0�L¤ F£Ñ,ô Ø ¤ F£Ñ,¨QÑ/ØØÜ'×.Ñ.Ø#öô �f“: [Ñ0Ø.4�K¤ 6£
Ñ+ÜØ¤ 6£
Ñ+ØØÜ'×1Ñ1ö	ð9!	ðH NPˆØ*×4Ñ4×:Ñ:Ó<ò 	‰MˆC�Ü�(‹| ;Ñ.Ü˜h¬¯©Ô5Ø'Ÿ~™~Ó/�HØ,4�œB˜x›LÑ)Ø#¤B x£LÑ1ˆIÜØØØÜ#×,Ñ,ö	ð	ô 8CÄ4Ó7Hˆ
Ü#&£5ˆô	7ô *-«ÐØ×%Ñ%×1Ñ1ó 	-ˆAØ�v‰vœ×,Ñ,Ò,Ø—‘œ)×*Ñ*Ò*¨q¯|ª|ä˜qŸu™u fÔ-Ð-Ð-Ü! !§(¡(¬CÔ0Ð0Ð0Ù!Ü�}×/Ñ/°·±Ñ9Ó:¸A¿E¹E¿J¹JÈÏÉôð ×"Ñ" 1§8¡8Ô,Ø$×(Ñ(¨¯©Õ2à—‘œ9×+Ñ+Ò+°A·L²LØ—6‘6œY×6Ñ6Ò6Ø—6‘6œY×1Ñ1Ô1ä˜qŸu™u fÔ-Ð-Ð-Ü! !§(¡(¬CÔ0Ð0Ð0Ù!Ü�}×.Ñ.¨q¯x©xÑ8Ó9¸1¿5¹5¿:¹:ÀqÇxÁxôð ×"Ñ" 1§8¡8Ö,ð+	-ð0 "/×!8Ñ!8×!>Ñ!>Ó!@ò 	3ÑˆJ˜Ø Ò/ä�u“I Ñ+ðUàTóUØ+à'¬¨5«	Ñ2°1Ñ5‘
�˜Ù!¤" U£)¨W°jÔAØ$×(Ñ(¨¯©Õ2ð	3ð )×3Ñ3×9Ñ9Ó;ò 	<‰KˆC�ØÐ.Ò.Ü�f“: ZÑ/ð Ø'¬¨6«
Ñ3°AÑ6‘
�˜Ù!¤" V£*¨g°sÕ;ð	<ð 13ˆØ%×,Ñ,Ó.ò 	-ˆKØ%0Ö1 �q˜“tÐ1ˆGÐ1Ø#ò -‘��1Ø%,� Ò"ñ-ð	-ô
 	�T˜?¨BÔ/õ	3ñ4 	˜D "Ô%ð "ŸZ™Z×-Ñ-ö#
Ø°·±¸MÓ1IŠDò#
ˆÔð (,ˆÔ$ä*3°HÓ*=×>¡  3�S˜!‘VÐ>ˆ	Ñ>à×)Ñ)¸5Ð)ÓAò 	1‰GˆD�!Ø˜9Ò$Ü"% i£.�	˜$’ð	1ô 	˜D )Ô,Ø"&×"4Ñ"4ÀeÐ"4Ó"L×M™˜˜Q’ÓMÔQUØ�N‰NÓóR
ò 
ð 	
ð 
ð 	�
‰
�‰ÕùòO Lùòf 2ùòL#
ùó
 ?ùó Ns$   ÁbÝb
Þ*bÞ?bß bà>bc                 óò   — | j                  «       D ]d  \  }}t        |dz   «       t        |d«      sŒ!t        |j                  t
        j                  j                  «      sŒPt        |j                  «       Œf y )Nú:rM   )rÈ   Úprintr¡   rA   rM   r=   rc   r   )rT   rž   Úmods      r/   Ú_print_graphzUnflattenedModule._print_graph±  sU   € Ø×*Ñ*Ó,ò 	!‰HˆC�Ü�#˜‘)ÔÜ�s˜GÕ$¬°C·I±I¼u¿x¹x¿~¹~Õ)NÜ�c—i‘iÕ ñ	!r.   c                 óš  — | j                   d   j                  }t        ||j                  «      }t	        j
                  ||f«      \  }}|D �cg c]  }|d   ‘Œ	 }}t        «       r_t        j                  j                  | | j                  ¬«      j                  |ddiŽ}	t        |	t        «      rt        |	«      dk(  r|	d   S |	S ||j                  k7  rÖ| j                  st!        d|› d�d|j                  › �«       | j"                  €t%        d	«      ‚| j                  st!        d
«       | j"                  j'                  |j                  ||¬«      }d| _        t        |«      |j                  j(                  k7  r.t%        dt        |«      › d|j                  j(                  › �«      ‚| j*                  r\ddlm}
 | j                  du r(|D �cg c]  }t1        d¬«      t3        d¬«      f|f‘Œ }}n|} |
| j4                  || j6                  «       t        j8                  j;                  «       r9| j<                  s-t        j                  j?                  | | j                  «      |Ž }n:t        j                  j                  | | j                  ¬«      j                  |ddiŽ}t	        j@                  ||jB                  «      S c c}w c c}w )Nr   r   rW   rX   FzGInput treespec does not match with exported module's: 
Input treespec: z. zExported module treespec: zeThere is no flat args adapter sepcified. Are you sure you are calling this with the right arguments? z5Adapting flat arg to match exported module's treespec)rƒ   r„   r…   Tz<Flat args adaption failed, number of args mismatch Adatped: z 
Exported module: )Ú"_check_input_constraints_for_graph)Úidxz<unknown location>)rš   )"r­   Ú	signaturer   Úin_specr‹   Útree_flatten_with_pathr   r=   rc   rd   rM   re   rA   rb   r`   r®   rå   r�   Ú	TypeErrorrˆ   Ú
num_leavesrÆ   Útorch._export.utilsré   r   r   rÅ   r±   rZ   r[   Ú_run_with_interpreterrm   Útree_unflattenÚout_spec)rT   rf   rg   rë   Úreordered_kwargsÚflat_args_with_pathrì   ÚxÚ	flat_argsÚ
return_valré   r¿   Únew_flat_args_with_pathÚtree_outs                 r/   r]   zUnflattenedModule.forward·  sÂ  € Ø×*Ñ*¨1Ñ-×7Ñ7ˆ	ä)¨&°)×2CÑ2CÓDÐä'-×'DÑ'DØÐ#Ð$ó(
Ñ$Ð˜Wð $7Ö7˜a�Q�q“TÐ7ˆ	Ð7ÜŒ?ÜŸ™×-Ñ-¨d¸$¿*¹*Ð-ÓE×IÑIØðØ16ñˆJô ˜*¤eÔ,´°Z³ÀAÒ1EØ! !‘}Ð$ØÐà�i×'Ñ'Ò'Ø—<’<Üð'Ø'. i¨rð3à0°×1BÑ1BÐ0CÐDôð
 ×%Ñ%Ð-ÜðSóð ð
 —|’|ÜÐQÔRØ ×2Ñ2×8Ñ8Ø )× 1Ñ 1Ø&Ø(ð 9ó �	ð
  $�”Ü�y“> Y×%6Ñ%6×%AÑ%AÒAÜ#ð$Ü$'¨	£NÐ#3ð 4,Ø,5×,=Ñ,=×,HÑ,HÐ+IðKóð ð ×'Ò'õ Oà�|‰|˜tÑ#ð  )ö+àô " aÔ(¬*Ð:NÔ*OÐPÐRUÒVð+Ð'ñ +ð
 +>Ð'á.Ø×'Ñ'Ð)@À$×BXÑBXôô �>‰>×-Ñ-Ô/¸×8RÒ8RÜ—x‘x×+Ñ+¨D°$·*±*Ó=¸yÐI‰Hä—x‘x×+Ñ+¨D¸¿
¹
Ð+ÓC×GÑGØðØ16ñˆHô ×$Ñ$ X¨y×/AÑ/AÓBÐBùò 8ùò^+s   ÁKÇ!Kc                 ó"   — t        | d||||«      S )Nr   r   rv   s        r/   r{   z UnflattenedModule.print_readable   r|   r.   rO   r}   )r'   r(   r)   r   r   r!   rQ   rç   r]   r{   r€   r�   s   @r/   r   r   ¾   sH   ø„ ð 8<ñpà&ðpð $ OÑ4õpòd!òGCðV ØØØ÷
r.   r   r¥   r�   r†   c                 ó0   — 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     r/   r    r      s   € ô, # 6Ó*€FÜ˜VÐ%6Ó7Ð7r.   rM   c                 ó–  ‡— t        t        t        | j                  «      «      «      }|j                  dk(  rt        |j                  «      dk(  sJ ‚|j                  d   }|j                  }|dt        |«       }|j                  j                  «       D ��ci c]  \  }}||“Œ
 }}}| j                  D �	ci c]  }	|	j                  dk(  sŒ|	j                  |	“Œ! }
}	|D ]³  }||j                     }||   }|
|   }| j                  |«      5  | j                  dt        j                  j                  j                   ||f«      Š|j"                  j                  «       D ]  \  }}|‰j"                  |<   Œ 	 ddd«       |j%                  ‰ˆfd„«       Œµ t'        |t        |«      d «      }|f|_        yc c}}w c c}	w # 1 sw Y   ŒKxY w)a  Transform buffer mutations from their functionalized form into a copy_
    node in the graph.

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

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

    We want to inplace this into something that looks like the original eager code:
        def forward(self, buffer, x):
            mutated_buffer = aten.add(buffer, x)
            buffer.copy_(mutated_buffer)
            mul = aten.mul(x, x)
            return (mul,)
    Úoutputr   r   Nrl   Úcall_functionc                 ó   •— | ‰uS rO   r-   )rö   Únew_nodes    €r/   ú<lambda>z+_inplace_buffer_mutations.<locals>.<lambda>X  s   ø€ ¸1ÀHÐ;L€ r.   )ÚnextÚiterÚreversedrp   rq   r`   rf   Úbuffers_to_mutateÚinputs_to_buffersr¼   rš   Úinserting_afterÚcreate_noder=   ÚopsÚatenÚcopy_ÚmetaÚreplace_all_uses_withrb   )rM   rª   Úoutput_nodeÚreturn_argsÚmutation_node_to_bufferÚ	mutationsÚkÚvÚbuffers_to_inputsrs   Úinput_name_to_nodeÚmutationÚbuffer_nameÚ
input_nameÚ
input_nodeÚuser_outputsr  s                   @r/   r¯   r¯   +  sÇ  ø€ ô, ”tœH U§[¡[Ó1Ó2Ó3€KØ�>‰>˜XÒ%¬#¨k×.>Ñ.>Ó*?À1Ò*DÐDÐDØ×"Ñ" 1Ñ%€Kà-×?Ñ?ÐØÐ:œcÐ"9Ó:Ð;€IØ*9×*KÑ*K×*QÑ*QÓ*S×T¡$ ! Q˜˜A™ÐTÐÑTà$)§K¡KöØ °4·7±7¸mÓ3Kˆ�	‰	�4‰ðÐð ð ò NˆØ-¨h¯m©mÑ<ˆØ& {Ñ3ˆ
Ø'¨
Ñ3ˆ
à×"Ñ" 8Ó,ñ 	%Ø×(Ñ(Ø¤§¡§¡×!5Ñ!5¸
ÀHÐ7MóˆHð !Ÿ™×+Ñ+Ó-ò %‘��1Ø#$�—‘˜aÒ ñ%÷		%ð 	×&Ñ& xÓ1LÕMðNô" Ø”CÐ/Ó0Ð2Ð3ó€Lð &Ð(€KÕùó3 Uùò÷	%ð 	%ús   ÂF4Â6F:ÃF:ÄA)F?Æ?G	c                 óV   — t        | «      t        |«      k  xr |dt        | «       | k(  S )z2Check whether `candidate` is a prefix of `target`.N)r`   )Ú	candidater6   s     r/   Ú
_is_prefixr  c  s+   € äˆy‹>œC ›KÑ'ÒQ¨FÐ3C´S¸³^Ð,DÈ	Ñ,QÐQr.   Ú
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‘   r:   zChild module 'z(' is not a descendant of parent mldule 'za'.This is currently unsupported.Please try to make child module attach to parent module direclty.)r;   r`   ÚRuntimeErrorÚjoin)r  r   Úparent_splitÚchild_splits       r/   Ú_compute_accessorr&  h  sŒ   € Ø�RÒàÐà×#Ñ# CÓ(€LØ—/‘/ #Ó&€Kð Ð&”S˜Ó&Ð'¨<Ò7ÜØ˜Y˜KÐ'OÐPZÈ|ð \Pð Pó
ð 	
ð
 �8‰8�K¤ LÓ 1Ð 3Ð4Ó5Ð5r.   rö   Úyc                 óš   — dt         j                  j                  dt        fd„} || j                  «       ||j                  «      k(  sJ ‚y )NrM   r†   c                 óV  ‡
— 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k(  r|j                  nd}	|j                  |› d|j                  › d|	› dd	j                  |«      › d
�«       |‰
t        |«      <   Œç dj                  |«      S c c}w c c}}w )Nr†   c                 ó–   •— t        | t        j                  j                  «      rdt	        ‰t        | «         «      z   S t	        | «      S )Nú%)rA   r=   rc   ÚNoderÀ   r¶   )r¿   Ú	nodes_idxs    €r/   Úarg_dumpz?_verify_graph_equivalence.<locals>.graph_dump.<locals>.arg_dump  s7   ø€ Ü˜#œuŸx™xŸ}™}Ô-ØœS ¬2¨c«7Ñ!3Ó4Ñ4Ð4Ü�s“8ˆOr.   ú=rÿ   r‘   z: ú[z](z, ú)ú
)rÀ   rÇ   rp   r‹   Útree_maprf   rg   r¼   rq   r6   ra   r#  r¶   )rM   Úretr.  rá   rs   r¿   Ú	args_dumpÚkeyÚvaluer6   r-  s             @r/   Ú
graph_dumpz-_verify_graph_equivalence.<locals>.graph_dump{  s  ø€ ØˆØ$&ˆ	ð	œSõ 	ô
 ! §¡Ó-ò 	$‰GˆAˆtÜ-3¯_©_¸XÀtÇyÁyÓ-QÖR cœ˜S�ÐRˆIÐRØä"(§/¡/°(¸D¿K¹KÓ"H×"NÑ"NÓ"P÷á�C˜ð �%�q˜˜Ò óñ ˆIð %)§G¡G¨Ò$>�T—[’[ÀBˆ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%
)r=   rc   r   rÀ   rM   )rö   r'  r8  s      r/   Ú_verify_graph_equivalencer9  z  s?   € ðœ%Ÿ(™(Ÿ.™.ð ¬Só ñ( �a—g‘gÓ¡*¨Q¯W©WÓ"5Ò5Ð5Ñ5r.   Úgmc                 óv   — d}t        | d|› �«      r|dz  }t        | d|› �«      rŒd|› �}t        | ||«       |S )Nr   Ú_spec_r   )r¡   r@   )r:  Úspecrá   rš   s       r/   Ú	_add_specr>  ’  sN   € Ø	€AÜ
�"˜˜q˜c�lÔ
#Ø	ˆQ‰ˆô �"˜˜q˜c�lÕ
#à�A�3ˆ<€DÜˆB��dÔØ€Kr.   c                 ó¨   — t        | |«      }| j                  j                  |«      }| j                  j                  t        j
                  ||f«      S rO   )r>  rM   Úget_attrrÿ   Ú	fx_pytreeÚtree_flatten_spec)r:  rs   r=  rš   Ú	spec_nodes        r/   Ú_generate_flattenrD  ›  sD   € Ü�R˜Ó€DØ—‘×!Ñ! $Ó'€IØ�8‰8×!Ñ!¤)×"=Ñ"=ÀÀiÐ?PÓQÐQr.   c                 ó¨   — t        | |«      }| j                  j                  |«      }| j                  j                  t        j
                  ||f«      S rO   )r>  rM   r@  rÿ   r‹   rò   )r:  rp   r=  rš   rC  s        r/   Ú_generate_unflattenrF  ¡  sD   € Ü�R˜Ó€DØ—‘×!Ñ! $Ó'€IØ�8‰8×!Ñ!¤&×"7Ñ"7¸%ÀÐ9KÓLÐLr.   ræ   c                 óÄ   — |j                  d«      �^ }}|D ];  }t        | |d «      }|€ y t        |t        j                  j
                  «      s y |} Œ= t        | |d «      S )Nr:   )r;   r<   rA   r=   r>   r?   )ræ   r6   rG   rH   rI   r¦   s         r/   Ú_get_submodulerH  §  sd   € Ø—\‘\ #Ó&�N€VˆUàò 	ˆÜ˜˜d DÓ)ˆàˆ>Ùä˜&¤%§(¡(§/¡/Ô2Ùà‰ð	ô �3˜˜tÓ$Ð$r.   Úmodule_to_addc                 ó"  — |j                  d«      �^ }}|D ]d  }t        | |d «      }|€+t        j                  j	                  «       }t        | ||«       t        |t        j                  j                  «      s y|} Œf | j                  ||«       y )Nr:   F)r;   r<   r=   r>   r?   r@   rA   Ú
add_module)ræ   r6   rI  rG   rH   rI   r¦   s          r/   Ú_add_submodulerL  ¸  s|   € Ø—\‘\ #Ó&�N€VˆUàò 
ˆÜ˜˜d DÓ)ˆàˆ>Ü—X‘X—_‘_Ó&ˆFÜ�C˜˜vÔ&ä˜&¤%§(¡(§/¡/Ô2Ùà‰ð
ð ‡N�N�5˜-Õ(r.   c                   óô   — e Zd Z	 ddej                  j
                  deej                  j                  df   dee	   de
e	ef   deej                  j                     f
d„Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú_ModuleFrameNÚ
flat_graphrp   .Úmodule_stackr­   r¥   c
                 ó  — || _         || _        || _        || _        || _        || _        || _        || _        d| _        | j
                  d   | _	        |	�|	| _
        n,t        t        j                  j                  «       «      | _
        | j                  | j                  v r| j                  | j                     | _        n*d | _        | j                  | j                  | j                  <   | j                  j                   | _        i | _        i | _        d | _        |�yt)        |j                  | j                  «      }
t+        |j                  |
| j                  €| j                  n| j                  «       |j                   j-                  |
«      | _        |j/                  | j                  «      }|��©| j                  ��›|j0                  j2                  dk(  sJ ‚|j0                  j4                  d   }|j0                  j4                  d   }|j6                  �J ‚|j6                  €J ‚| j                   j9                  d «      5  g }t;        |j2                  «      D ]/  }|j=                  | j                   j?                  d|› �«      «       Œ1 i }|j6                  D ]   }| j                   j?                  |«      ||<   Œ" tA        | j                  tC        |«      |f|j0                  «      }tE        |jF                  «      D ]Þ  \  }}| j                   jI                  dtJ        jL                  ||ftO        |tP        «      s|jR                  nd|› �¬	«      }tO        |tP        «      rŒe|jR                  | j                  v sŒ~tU        jT                  | j                  |jR                     jV                  «      |_+        || j$                  | j                  |jR                     <   Œà 	 d d d «       | j                  j                   jY                  | j&                  «      5  g }|jF                  D ]³  }tO        |tP        «      r|jZ                  €|j=                  d «       Œ1|jR                  | j                  vr|j=                  d «       Œ[tO        |t\        t^        f«      sJ ‚|j=                  | j                  ja                  | j                  |jR                     «      «       Œµ tc        | j                  j                  ||j0                  «      }| j                  j                   je                  tJ        jL                  |df«      }| j                  j                   je                  tJ        jL                  |df«      }t;        |j2                  «      D �cg c]8  }| j                  j                   je                  tJ        jL                  ||f«      ‘Œ: }}|j6                  D �ci c]9  }|| j                  j                   je                  tJ        jL                  ||f«      “Œ; }}d d d «       | j&                  €J ‚tC        «      | j&                  _3        | j&                  _4        y y y # 1 sw Y   �Œ}xY wc c}w c c}w # 1 sw Y   Œ\xY w)
NFéÿÿÿÿé   r   r   Ú_positional_arg_rÿ   Ú
_constant_)rq   r6   rf   rš   )5rO  rp   Ú
seen_nodesÚseen_modulesÚparentrP  Ú	module_idr­   Úverboserž   r¥   r   r=   rc   r   Úcached_graph_modulerM   Únode_mapÚnode_to_placeholderÚparent_call_moduler&  rL  Úcall_moduleÚgetrì   Únum_childrenÚchildren_specsÚcontextr  Úrangera   rl   rD  rb   rÇ   Úinputsr	  ÚoperatorÚgetitemrA   r   rš   Úcopyr  Úinserting_beforer7  r   r   Úremap_inputrF  rÿ   rf   rg   )rT   rO  rp   rV  rW  rX  rP  rY  r­   r¥   Úaccessorrë   Ú	args_specÚkwargs_specÚ	arg_nodesrê   Úkwarg_nodesrš   r÷   r¿   Úflat_arg_nodeÚinput_nodesÚinputÚinputs_nodeÚ	args_nodeÚkwargs_noderá   r  s                               r/   rQ   z_ModuleFrame.__init__Ë  s·  € ð %ˆŒØˆŒ
Ø$ˆŒØ(ˆÔØˆŒØ(ˆÔØ"ˆŒà!2ˆÔØˆŒà×$Ñ$ RÑ(ˆŒØÐØ ˆD�Kä+¬E¯H©H¯N©NÓ,<Ó=ˆDŒKØ�>‰>˜T×.Ñ.Ñ.Ø'+×'8Ñ'8¸¿¹Ñ'HˆDÕ$à'+ˆDÔ$Ø04·±ˆD×Ñ˜dŸn™nÑ-à—[‘[×&Ñ&ˆŒ
ð =?ˆŒØ#%ˆÔ à;?ˆÔØÐÜ(¨¯©°T·X±XÓ>ˆHÜØ—‘Øð ×/Ñ/Ð7ð —K’Kà×1Ñ1ôð '-§l¡l×&>Ñ&>¸xÓ&HˆDÔ#à%×)Ñ)¨$¯(©(Ó3ˆ	ØÑ  T§[¡[Ñ%<Ø×$Ñ$×1Ñ1°QÒ6Ð6Ð6Ø!×)Ñ)×8Ñ8¸Ñ;ˆIØ#×+Ñ+×:Ñ:¸1Ñ=ˆKØ×$Ñ$Ð,Ð,Ð,Ø×&Ñ&Ð2Ð2Ð2à—‘×+Ñ+¨DÓ1ñ *Ø�	Ü  ×!7Ñ!7Ó8ò W�CØ×$Ñ$ T§Z¡Z×%;Ñ%;Ð>NÈsÈeÐ<TÓ%UÕVðWà �Ø'×/Ñ/ò E�DØ(,¯
©
×(>Ñ(>¸tÓ(D�K Ò%ðEä-Ø—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Ø ŸO™O¨C¯H©HÑ5òñ!*÷*ð@ —‘×"Ñ"×3Ñ3°D×4KÑ4KÓLñ "Ø=?�Ø&×-Ñ-ò 	�EÜ! %Ô)9Ô:¸u¿{¹{Ð?RØ#×*Ñ*¨4Õ0ØŸ™¨4¯?©?Ñ:Ø#×*Ñ*¨4Õ0ä)¨%´.Ä.Ð1QÔRÐRÐRØ#×*Ñ*Ø Ÿ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ö	ð ð �t—{‘{×(Ñ(×6Ñ6Ü ×(Ñ(¨;¸Ð*:óñ ð�ð ÷;"ðF ×*Ñ*Ð6Ð6Ð6Ü+0°Ó+;ˆD×#Ñ#Ô(Ø-8ˆD×#Ñ#Õ*ðY &=Ð ÷*ñ *üòrùò÷;"ð "ús?   ÉD9YÍ?A#YÐE3Y5Ö=Y+×
Y5×>Y0ØY5ÙY(Ù+
Y5Ù5Y>c                 ó”  — | j                   dk7  sJ d|› d�«       ‚|j                  | j                  u sJ ‚| 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)Ú	type_expr)
rž   rM   rO  ri  rl   rš   r\   rh  r  r]  )rT   rö   Úplaceholder_nodes      r/   Úadd_placeholderz_ModuleFrame.add_placeholderP  s¬   € Ø�x‰x˜2Š~ÐKÐ!8¸¸¸?ÐKÓKˆ~Ø�w‰w˜$Ÿ/™/Ñ)Ð)Ð)à�Z‰Z×(Ñ(¨Ó.ñ 	PØ#Ÿz™z×5Ñ5°a·f±fÈÏÉÐ5ÓOÐ÷	Pô !%§	¡	¨!¯&©&Ó 1ÐÔØ&6ˆ× Ñ  Ò#÷	Pð 	Pús   Á2B>Â>Cc                 óÆ  — t        j                  t        j                  j                  | j
                  |j                  «      }t        j                  t        j                  j                  | j
                  |j                  «      }| j                  j                  |j                  ||«      }t        j                  |j                  «      |_        || j                  |<   |S rO   )r‹   Útree_map_onlyr=   rc   r,  rj  rf   rg   rM   rÿ   r6   rh  r  r\  )rT   rö   rf   rg   rs   s        r/   Ú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ÑØˆr.   c                 ó´  — |j                   | j                  u sJ ‚|| 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$                  j.                  j(                  t         j"                  j$                  j0                  j2                  t         j"                  j$                  j4                  j,                  t         j"                  j$                  j6                  j,                  fv s/t9        |j                  d«      r9|j                  j:                  dk(  r | j=                  |«       | j                  |   S t?        d|j
                  › d	|› �«      ‚# 1 sw Y   �Œ¯xY w)
Nzremap_input(r1  rl   r   rÿ   r(   Ú	_operatorz(Could not run remap_input() on op type: z
 for node ) rM   rO  r\  rå   r]  rq   r­   r`  rž   ry  r^  rX  ri  Ú
insert_argrj  r6   r=   r
  r  Úsym_sizeÚintrI   ÚdefaultÚunbindÚsumÚdim_IntListÚviewÚdiffr¡   r(   r|  r"  )rT   rö   s     r/   rj  z_ModuleFrame.remap_inputi  s"  € Ø�w‰w˜$Ÿ/™/Ñ)Ð)Ð)Ø�—‘ÑØ—=‘= Ñ#Ð#Ø�
‰
�\ !  AÐ&Ô'Ø�×(Ñ(Ñ(Ø×+Ñ+¨AÑ.Ð.à�D‰D�MÒ!Ø×%Ñ%×)Ñ)¨$¯(©(Ó3Ð;ð × Ñ  Ô#Ø×&Ñ&Ð2ð —[‘[×&Ñ&×7Ñ7¸×8OÑ8OÓPñ VØ×+Ñ+×6Ñ6°q¸$¿+¹+×:QÑ:QÐRSÓ:TÔU÷Và×+Ñ+¨AÑ.Ð.Ø�T‰T�_Ó$Ø�H‰Hä—	‘	—‘×'Ñ'×+Ñ+Ü—	‘	—‘×#Ñ#×+Ñ+Ü—	‘	—‘×%Ñ%×)Ñ)Ü—	‘	—‘×"Ñ"×.Ñ.Ü—	‘	—‘×#Ñ#×+Ñ+Ü—	‘	—‘×#Ñ#×+Ñ+ðñô ˜Ÿ™ ,Ô/°A·H±H×4GÑ4GÈ;Ò4Vð ×'Ñ'¨Ô*Ø—=‘= Ñ#Ð#äØ:¸1¿4¹4¸&À
È1È#ÐNóð ÷)Vñ Vús   Ã*6KËKc                 óØ  ‡ ‡— g }‰ j                   j                  ‰ j                  «      }|��‰ j                  �÷|j                  D ]x  }t        |t        t        f«      rS|j                  ‰ j                  v r)|j                  ‰ j                  |j                     «       ŒZ|j                  d «       Œlt        d|› �«      ‚ ˆ fd„Št        ‰ j                  t        ˆfd„|D «       «      |j                  «      }t!        ‰ j                  j                  ‰ j"                  |j                  «      }|}nšg }‰ j$                  j'                  «       D ]\  }|j(                  D ]K  }|j                  ‰ j                  vsŒ|j                  |«       |j                  ‰ j$                  |   «        Œ\ Œ^ ‰ j"                  }t+        |«      dk(  r|d   }t        |t,        t.        j0                  j2                  f«      sJ ‚‰ j4                  j7                  |«       |€y t        |t.        j0                  j2                  «      r|j8                  j                  d«      n(|D �	cg c]  }	|	j8                  j                  d«      ‘Œ c}	|j8                  d<   t+        |«      dk(  r|€|‰ j                  j$                  |d   <   nƒt;        |«      D ]u  \  }
}|€Œ	t.        j0                  j=                  |«      |
   j>                  }|j8                  j                  d«      |j8                  d<   |‰ j                  j$                  |<   Œw ‰ j@                  �!tC        ‰ j@                  ‰ j                  «       y 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: )rV  rš   r\  r]  r"  rM   )rþ   Ú	seen_noderT   s     €r/   Ú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óð r.   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrO   r-   )r�   rþ   r‹  s     €r/   r    z0_ModuleFrame.finalize_outputs.<locals>.<genexpr>±  s   øè ø€ ÒP¸Ñ,¨V×4ÑPùs   ƒr   r   Úval)"r­   r`  rž   rX  ÚoutputsrA   r   r   rš   rV  ra   r"  rF  r¥   rb   ró   rD  r^  r\  rÊ   Úusersr`   r^   r=   rc   r,  rM   rþ   r  rÇ   ÚProxyrs   r[  r9  )rT   Úorig_outputsrë   rþ   Útree_out_nodeÚ
parent_outÚgraph_outputsÚ	orig_nodeÚ	user_nodeÚorá   Úorig_outputÚ	proxy_outr‹  s   `            @r/   Úfinalize_outputsz_ModuleFrame.finalize_outputs‘  sí  ù€ Øˆà×*Ñ*×.Ñ.¨t¯x©xÓ8ˆ	ØÑ  T§[¡[Ð%<Ø#×+Ñ+ò 	�Ü˜f¤~´~Ð&FÔGØ—{‘{ d§o¡oÑ5Ø$×+Ñ+¨D¯O©O¸F¿K¹KÑ,HÕIà$×+Ñ+¨DÕ1ä&ØAÀ&ÀÐJóð ð	ôô 0Ø—‘ÜÓPÀ<ÔPÓPØ×"Ñ"óˆMô
 3DØ—‘×"Ñ" D×$;Ñ$;¸Y×=OÑ=Oó3ˆJð HU‰MàˆMà!Ÿ]™]×/Ñ/Ó1ò �	Ø!*§¡ò �IØ —~‘~¨T¯_©_Ò<à$×+Ñ+¨IÔ6Ø%×,Ñ,¨T¯]©]¸9Ñ-EÔFÙñðð ×0Ñ0ˆJÜ�=Ó! QÒ&Ø -¨aÑ 0�ä˜-¬$´·±·±Ð)>Ô?Ð?Ð?à�
‰
×Ñ˜-Ô(ð ÐØô ˜-¬¯©¯©Ô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ð>ð ×#Ñ#Ð/Ü% d×&>Ñ&>ÀÇÁÕLð 0ùò <s   É"M'c                 óÜ   — | j                  d|j                  «       «       | j                  j                  || j                  «      | j
                  |<   || j                  |j                  <   y )NÚcopying)rå   Úformat_noderM   Ú	node_copyrj  r\  rV  rš   rr   s     r/   Ú	copy_nodez_ModuleFrame.copy_nodeã  sP   € Ø�
‰
�9˜d×.Ñ.Ó0Ô1Ø"Ÿj™j×2Ñ2°4¸×9IÑ9IÓJˆ�‰�dÑØ%)ˆ�‰˜Ÿ	™	Ò"r.   c                 ó   — d}| j                   j                  D ]A  }| j                  ||j                  j	                  d«      |j                  «       «       |dz  }ŒC 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 )Nr   Únn_module_stackr   rl   rþ   )	rO  rp   rå   r  r`  r�  rq   rŸ  Úrun_from)rT   rá   rs   Únode_idxs       r/   Ú	run_outerz_ModuleFrame.run_outerè  sã   € ØˆØ—O‘O×)Ñ)ò 	ˆDØ�J‰J�q˜$Ÿ)™)Ÿ-™-Ð(9Ó:¸D×<LÑ<LÓ<NÔOØ�‰F‰Að	ð
 ˆØ�z‰z˜(Ñ#ˆØ�g‰g˜Ò&Ø�N‰N˜4Ô Ø˜‰MˆHØ—:‘:˜hÑ'ˆDð �g‰g˜Ó&ð
 	�‰�hÔð —O‘O×)Ñ)ò 	%ˆDØ�w‰w˜(Ó"Ø—‘˜tÕ$ñ	%r.   c                 ó4   — | j                   rt        |i |¤Ž y y rO   )rZ  rå   )rT   rf   rg   s      r/   rå   z_ModuleFrame.printý  s   € Ø�<Š<Ü�4Ð"˜6Ó"ð r.   c                 óò  — d}|t        | j                  «      k  �rÖ| j                  |   }|j                  dk7  sJ ‚| j                  «        | j                  d||j	                  «       «       | j                  | j
                  «       |j                  dk(  r,t        | j
                  «      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]  \  }}|‘Œ	 }}}|d t        | j
                  «       | j
                  k7  rI| j                  «        | j                  d	| j                  «       | j                  | j                  «       |S |€J ‚t        | j
                  |«      rÌ|t        | j
                  «         }	| j                  d
|	«       t!        | j"                  | j                  | j$                  | j&                  | | j
                  |	gz   t)        |j                  d   j+                  «       «      t        | j
                  «         | j,                  «      j/                  |«      }|dz  }�Œ­|| j
                  k(  sJ ‚| j1                  |«       |dz  }|t        | j                  «      k  r�ŒÕy y c c}}w )Nr   rl   ÚSTEPrþ   r   r¡  z(Unable to find nn_module_stack for node )Ú_EMPTY_NN_MODULE_STACK_KEYÚ	outliningzCreating new stack frame for)r`   rp   rq   rå   r�  rP  rš  r  r`  r"  Ú(torch._export.passes._node_metadata_hookr¨  rÃ   rž   rM   r  rN  rO  rV  rW  r^   rÊ   r­   r¢  rŸ  )
rT   r£  Ú
module_idxrs   r¡  r¨  Únode_module_stackÚpathÚtyÚnext_modules
             r/   r¢  z_ModuleFrame.run_from  s®  € Øˆ
àœ˜TŸZ™Z›Ó(Ø—:‘:˜hÑ'ˆDØ—7‘7˜mÒ+Ð+Ð+à�J‰JŒLØ�J‰J�v˜x¨×)9Ñ)9Ó);Ô<Ø�J‰J�t×(Ñ(Ô)Ø�w‰w˜(Ò"Ü�t×(Ñ(Ó)¨QÒ.ð $�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×)LÑ)LÓ)N÷%Ù%˜T 2’Dð%Ð!ñ %ð !Ð!9¤3 t×'8Ñ'8Ó#9Ð:¸d×>OÑ>OÒOð ×%Ñ%Ô'Ø—
‘
˜;¨¯©Ô1Ø—
‘
˜4Ÿ:™:Ô&Ø�à$Ð0Ð0Ð0ä˜$×+Ñ+Ð->Ô?ð 0´°D×4EÑ4EÓ0FÑG�Ø—
‘
Ð9¸;ÔGô (Ø—O‘OØ—J‘JØ—O‘OØ×%Ñ%ØØ×%Ñ%¨¨Ñ5Ü˜Ÿ™Ð#4Ñ5×:Ñ:Ó<Ó=¼cÀ$×BSÑBSÓ>TÑUØ×*Ñ*ó	÷ ‘(˜8Ó$ð ð ˜a‘�
Ùð %¨×(9Ñ(9Ò9Ð9Ð9Ø�N‰N˜4Ô Ø˜‰MˆHðU œ˜TŸZ™Z›Ö(ùóB%s   ÅK3rO   )r'   r(   r)   r=   rc   r   r   r,  r
   rÀ   r	   r   r   r>   r?   rQ   ry  r|  rj  rš  rŸ  r¤  rå   r¢  r-   r.   r/   rN  rN  Ê  s¦   „ ð -1ñC9à—H‘H—N‘NðC9ð �U—X‘X—]‘] CÐ'Ñ(ðC9ð ˜3‘iðC9ð   Ð%8Ð 8Ñ9ðC9ð ˜Ÿ™Ÿ™Ñ)óC9òJ	7òò&òPPMòd*ò
%ò*#óMr.   rN  Ú
orig_graphÚroot_modulec                 óô   — i }i }t        | t        | j                  «      ||d dgd|j                  D �ci c]%  }|j                  r|j
                  |j                  “Œ' c}|¬«	      j                  «        y c c}w )Nr‘   )r¥   )rN  rb   rp   r­   rë   rž   r¤  )r°  r±  rV  rW  rË   s        r/   r°   r°   Q  s{   € Ø+-€JØ/1€LÜØÜˆj×ÑÓØØØØ	ˆØ
ð %×6Ñ6ö	
àØ�Šð �I‰I�u—‘Ñ&ò	
ð
 ô÷ �i…kùò	
s   ³*A5rX  râ   rG   c                 ó  — |dk(  rWt        |j                  «       «      dd  D ]8  }t        | |«      �Œt        | |t        j
                  j                  «       «       Œ: g }t        | j                  j                  «       «      D ]A  \  }}|€Œ	||z   }t        |||dz   ¬«       t        | |«       |j                  ||   ||f«       ŒC |j                  t        j                  d«      ¬«       |D ]  \  }}}| j                  ||«       Œ y )Nr‘   r   r:   )rG   r   )r6  )r^   rÊ   rH  rL  r=   r>   r?   Ú_modulesr¼   rÉ   Údelattrra   Úsortrf  Ú
itemgetterÚregister_module)rX  râ   rG   rž   Úchildrenrš   ÚchildrÝ   s           r/   rÉ   rÉ   e  sÿ   € ð �‚|Ü˜	Ÿ™Ó(Ó)¨!¨"Ð-ò 	?ˆCÜ˜f cÓ*Ñ2Ü˜v s¬E¯H©H¯O©OÓ,=Õ>ð	?ð €HÜ˜FŸO™O×1Ñ1Ó3Ó4ò 7‰ˆˆeØˆ=ØØ�t‰mˆÜ˜E 9°S¸3±YÕ?Ü�˜ÔØ�‰˜ 3™¨¨uÐ5Õ6ð7ð ‡M�M”h×)Ñ)¨!Ó,€MÔ-Ø"ò ,‰ˆˆ4�Ø×Ñ˜t UÕ+ñ,r.   r¨   rŸ   c                 óª  ‡‡— t        t        «      Š| j                  j                  «       D ]d  \  }Št	        t        t        j                  j                  ‰«      |||gz   «      }|j                  «       D ]  \  }}‰|   j                  |«       Œ Œf t        | d«      s‰S | j                  }t        t        d„ |j                  «      «      }|d   }	t        d„ |j                  «      }
|
D ]`  }t        | |j                  j!                  d«      «      Š‰€Œ+t#        ‰«      ‰v sŒ9t%        t        ˆˆfd„|j&                  «      «      |_        Œb i }|D ]U  }|j(                  |vrŒd}||j(                     D ](  }|j!                  d«      }|dt+        |«       |k(  sŒ&|} n |€ŒQ|||<   ŒW g }|j                  «       D ]Ý  \  }}t+        |j,                  «      dkD  r”|t+        |«      d }t        | |«      }t/        |t        j0                  t        j2                  f«      sJ ‚|j5                  |	«      5  |j7                  d	dj9                  |«      «      }ddd«       |j;                  d
¬«       |j=                  |«       |j?                  |j(                  «       Œß t/        | t@        «      r| jC                  «        t#        | «      |iS # 1 sw Y   ŒwxY w)aT  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 containining 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.
    rM   c                 ó    — | j                   dk(  S )Nrl   ©rq   ©rà   s    r/   r  z_sink_params.<locals>.<lambda>   s   €  1§4¡4¨=Ñ#8€ r.   rR  c                 ó    — | j                   dk(  S )Nr_  r½  r¾  s    r/   r  z_sink_params.<locals>.<lambda>¤  s   € ¨¯©°Ñ)>€ r.   r:   Nc                 ó8   •— | j                   ‰t        ‰«         vS rO   )rš   r¶   )rà   Úmodule_id_to_inputs_removedÚ	submodules    €€r/   r  z_sink_params.<locals>.<lambda>¬  s   ø€ ˜aŸf™fÐ,GÌÈ9ËÑ,VÐV€ r.   r   r@  T)Úpropagate_meta)"r   r^   r´  r¼   rÄ   r   r=   r>   r?   Úextendr¡   rM   Úfilterrp   Ú_recursive_getattrr6   r;   r¶   rb   rf   rš   r`   r�  rA   rD   rF   r  r	  r#  r  Ú
erase_nodera   r   rt   )r¥   r¨   rŸ   rš   Úsubmod_id_to_inputs_removedr  r  rM   re  Úthe_last_inputÚcall_module_nodesrs   Úinputs_to_state_of_scopeÚ
state_nameÚsnÚsn_splitÚinputs_removedÚ	attr_pathÚ
state_attrr  rÁ  rÂ  s                       @@r/   rÄ   rÄ   {  sÆ  ù€ ô* 9DÄDÓ8IÐð "Ÿ?™?×0Ñ0Ó2ò 5‰ˆˆiÜ&2Ü”—‘—‘ )Ó,¨o¸uÈÀv¹~ó'
Ð#ð 0×5Ñ5Ó7ò 	5‰DˆAˆqØ'¨Ñ*×1Ñ1°!Õ4ñ	5ð	5ô �6˜7Ô#à*Ð*à�L‰L€EÜ”&Ñ8¸%¿+¹+ÓFÓG€FØ˜B‘Z€Nô Ñ>ÀÇÁÓLÐØ!ò 
ˆÜ& v¨t¯{©{×/@Ñ/@ÀÓ/EÓFˆ	ð Ñ ¤R¨	£]Ð6QÒ%QÜÜÜVØ—I‘IóóˆD�Ið
ð @BÐØò 4ˆØ�9‰9˜OÑ+Øàˆ
Ø! $§)¡)Ñ,ò 	ˆBØ—x‘x “}ˆHØ˜œ#˜e›*Ð%¨Ó.Ø%�
Ùð		ð ÐØà)3Ð  Ò&ð/4ð4 !#€Nà4×:Ñ:Ó<ò )ÑˆˆjÜˆt�z‰z‹?˜QÒØ"¤3 u£: <Ð0ˆIÜ+¨F°IÓ>ˆJÜ˜j¬5¯<©<¼×9KÑ9KÐ*LÔMÐMÐMð ×&Ñ& ~Ó6ñ NØ ×,Ñ,¨Z¸¿¹À)Ó9LÓM�÷Nð ×&Ñ& xÀÐ&ÔEà×Ñ˜ÔØ×Ñ˜dŸi™iÕ(ð)ô �&Ô+Ô,Ø�‰Ôäˆv‹J˜Ð'Ð'÷Nð Nús   È1"K	Ë	K	c                 óH   — |D ]  }t        | |«      s y t        | |«      } Œ | S rO   )r¡   r<   )ÚobjrÐ  Úattrs      r/   rÆ  rÆ  ä  s1   € Øò !ˆÜ�s˜DÔ!ÙÜ�c˜4Ó ‰ð!ð
 €Jr.   )TrO   )r‘   )Or‰   rh  rf  Úcollectionsr   Ú
contextlibr   r   Úenumr   Útypingr   r   r	   r
   r   r   r   r   r=   Útorch.fx._pytreerc   Ú_pytreerA  Útorch.utils._pytreeÚutilsr‹   Ú"torch._library.fake_class_registryr   Útorch.export._tree_utilsr   Útorch.export.exported_programr   r   r   r   r   r   Útorch.fx._symbolic_tracer   Útorch.fx.graph_moduler   r   r   Ú_remove_effect_tokens_passr   Ú__all__r#   r1   r3   rD   rF   r>   r?   rÀ   ÚboolrK   r   ÚABCr!   r   r    r   r¯   r  r&  r9  r>  r,  rD  rF  rH  rL  rN  r°   r�  rÉ   rÄ   rÆ  r-   r.   r/   ú<module>ræ     sæ  ðã 
Û Û Ý #Ý %Ý Ý ß E× EÓ Eã ß $Ð $ß $Ð $Ý ?Ý 3÷÷ õ 3Ý 1ß 7å =ò U€ô�ô ð Ð ð ñ(ó ð(ð" ñ!,Ø�E—L‘L %×"4Ñ"4Ð4Ñ5ð!,à�x‰x�‰ð!,ð ð!,ð ð	!,ð
 ó!,ôHO
˜Ÿ™Ÿ™ô O
ôd�c—g‘gô ô P
˜Ÿ™Ÿ™ô P
ðh
 MQñ8Øð8Ø08¸Ñ0Ið8àó8ð45) U§X¡X§^¡^ð 5)Èó 5)òpRð
6 #ð 6°#ð 6¸#ó 6ð$6 §¡§¡ð 6°U·X±X·_±_ó 6ð0�%—(‘(—/‘/ð ¨Có ðR˜%Ÿ(™(Ÿ/™/ð R¸%¿(¹(¿-¹-ó RðM˜EŸH™HŸO™Oð M¸U¿X¹X¿]¹]ó Mð%˜Ÿ™Ÿ™ð %°ó %ð")˜Ÿ™Ÿ™ð )°ð )ÀUÇXÁXÇ_Á_ó )÷$Dñ DðN E§H¡H§N¡Nð ÐARó ð* GIñ,Ø�H‰H�O‰Oð,Ø(,¨S°#¨X©ð,Ø@Có,ð,f(Ø�H‰H�O‰Oðf(à˜#˜t C™y˜.Ñ)ðf(ð �‰9óf(óRr.   