Ë
    f^(hl ã                   óú  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZ d dlZd dlmc mZ d dlmc mZ d dlmZ d d	lmZ d d
l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/ d dlm0Z0m1Z1 ddl2m3Z3  ejh                  e5«      Z6g d¢Z7 G d„ de«      Z8da9ed„ «       Z:	 dVdeejv                  ejx                  ejz                  j|                  f   dejz                  j|                  de?de8de@f
d„ZA G d„ d«      ZB G d„ deBejz                  j|                  «      ZC G d„ d eBejz                  j|                  «      ZD G d!„ d"e jŠ                  «      ZF G d#„ d$ejz                  j|                  «      ZG	 dWd%e"d&eeF   d'eGfd(„ZHd)ej,                  j’                  d*e#d'dfd+„ZJd,„ ZKd-e?d.e?d'e?fd/„ZLd0ejz                  j|                  d1ejz                  j|                  fd2„ZMd3ejz                  j|                  d'e?fd4„ZNd3ej,                  jž                  d'ej,                  j                   fd5„ZQd3eej,                  jž                  eCeGf   d'ej,                  j                   fd6„ZRd3eej,                  jž                  eCeGf   d'ej,                  j                   fd7„ZSd8ejz                  j|                  de?fd9„ZT	 dWd8ejz                  j|                  de?d:ejz                  j|                  d;eee?gejz                  j|                  f      fd<„ZUd=e?d>eVd'e?fd?„ZWd@e?d=e?d'e@fdA„ZX G dB„ dC«      ZYe G dD„ dE«      «       ZZdFej,                  j’                  dGeGfdH„Z[	 dXdIejz                  j|                  dJe\e?eVf   dKe?fdL„Z] G dM„ dN«      Z^d3ej,                  jž                  dGeGdOe\e?e_e?   f   fdP„Z`dQ„ Za	 dWd%ejz                  j|                  dRe\e?ebe?   f   dSebe?   dTee\eVe_e?   f      fdU„Zcy)Yé    N)Údefaultdict)Úcontextmanager)Údeepcopy)Ú	dataclass)ÚEnum)ÚAnyÚCallableÚcastÚOptionalÚUnion)ÚFakeScriptObject)Úreorder_kwargs)	ÚConstantArgumentÚExportedProgramÚExportGraphSignatureÚ	InputKindÚModuleCallSignatureÚSymBoolArgumentÚSymFloatArgumentÚSymIntArgumentÚTensorArgument)Úis_fx_tracing)Ú	_get_attrÚ_get_attr_via_attr_listÚ_print_readable)Ú
GetAttrKeyÚSequenceKeyé   )Ú_remove_effect_tokens)ÚFlatArgsAdapterÚInterpreterModuleÚInterpreterModuleDispatcherÚUnflattenedModuleÚ	unflattenc                   ó   — e Zd ZdZdZdZdZy)Ú	_AttrKindÚ	parameterÚbufferÚconstantÚmoduleN)Ú__name__Ú
__module__Ú__qualname__Ú	PARAMETERÚBUFFERÚCONSTANTÚMODULE© ó    úT/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/export/unflatten.pyr&   r&   1   s   „ Ø€IØ€FØ€HØ�Fr3   r&   Tc               #   ó8   K  — t         } da 	 d –— | a y # | a w xY w­w)NF)ÚRUN_WITH_INTERPRETER)Úold_flags    r4   Ú_disable_interpreterr8   ;   s'   è ø€ ô $€HØ Ðð(Ûà'Ñø˜xÑüs   ‚	Œ �“—Úfrom_objÚ	to_moduleÚtargetÚ	attr_kindÚ
persistentc                 óÀ  ‡	— |j                  d«      �^ }}|h}|D ]|  Š	t        «       }|D ]i  }t        |‰	«      s)t        |‰	t        j
                  j                  «       «       |j                  ˆ	fd„|j                  j                  «       D «       «       Œk |}Œ~ |D �]?  }|t        j                  k(  r9t        | t        j
                  j                  «      sJ ‚|j                  || «       ŒP|t        j                  k(  r1t        | t        j                   «      sJ ‚|j#                  || |¬«       Œ”|t        j$                  k(  rQt        | t&        «      rJ d«       ‚t        | t        j                   t        j(                  f«      sJ ‚t        ||| «       Œø|t        j*                  k(  s�Œt        | t        j
                  j                  «      sJ ‚t        ||| «       �ŒB y )Nú.c              3   ó@   •K  — | ]  \  }}t        |‰«      r|–— Œ y ­w©N)Ú_is_call_name)Ú.0ÚkÚt_callÚitems      €r4   ú	<genexpr>z_assign_attr.<locals>.<genexpr>\   s'   øè ø€ ò á�A�vÜ   DÔ)ô ñùs   ƒ)r=   z2FakeScriptObject should only exist during tracing.)ÚsplitÚsetÚhasattrÚsetattrÚtorchÚnnÚModuleÚupdateÚ_modulesÚitemsr&   r.   Ú
isinstanceÚ	ParameterÚregister_parameterr/   ÚTensorÚregister_bufferr0   r   ÚScriptObjectr1   )
r9   r:   r;   r<   r=   ÚprefixÚfieldÚ
to_modulesÚtsrF   s
            @r4   Ú_assign_attrr\   H   s±  ø€ ð —\‘\ #Ó&�N€VˆUð �€JØò 
ˆÜ#&£5ˆØ#ò 	ˆIÜ˜9 dÔ+Ü˜	 4¬¯©¯©Ó):Ô;Ø�I‰Ió à!*×!3Ñ!3×!9Ñ!9Ó!;ôõ ð	ð ‰
ð
ð  ó 0ˆ	Øœ	×+Ñ+Ò+Ü˜h¬¯©×(:Ñ(:Ô;Ð;Ð;Ø×(Ñ(¨°Õ9Øœ)×*Ñ*Ò*Ü˜h¬¯©Ô5Ð5Ð5Ø×%Ñ% e¨XÀ*Ð%ÕMØœ)×,Ñ,Ò,Ü!ØÔ*ôð DàCóDð ô Øä—L‘LÜ×&Ñ&ðôð ð ô �I˜u hÕ/Øœ)×*Ñ*Ô*Ü˜h¬¯©¯©Ô8Ð8Ð8Ü�I˜u hÖ/ñ+0r3   c                   ó0   — e Zd ZU ee   ed<   dee   fd„Zy)Ú_SubmoduleBaseÚ_tyÚreturnc                 ó   — | j                   S rA   )r_   ©Úselfs    r4   Ú	type_namez_SubmoduleBase.type_name~   s   € Ø�x‰xˆr3   N)r+   r,   r-   r   ÚstrÚ__annotations__rd   r2   r3   r4   r^   r^   {   s   … Ø	�#‰Óð˜8 C™=ô r3   r^   c                   ó´   ‡ — e Zd ZU dZeej                  j                     ed<   	 d	dej                  j                  dee
   fˆ fd„Zd„ Zd„ Z	 	 	 	 d
d„Zˆ xZS )r!   zÈA module that uses torch.fx.Interpreter to execute instead of the usual
    codegen that GraphModule uses. This provides better stack trace information
    and makes it easier to debug execution.
    Úgraph_moduleÚgraphÚtyc                 óv   •— t         ‰| �  «        || _        || _        | | j                  _        t
        | _        y rA   )ÚsuperÚ__init__ri   r_   Úowning_moduler6   Ú_run_with_interpreter)rc   ri   rj   Ú	__class__s      €r4   rm   zInterpreterModule.__init__Š   s2   ø€ ô
 	‰ÑÔØˆŒ
ØˆŒØ#'ˆ�
‰
Ô Ü%9ˆÕ"r3   c                 ód  ‡— | j                   €J 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        ‰«      k(  sJ ‚t        |«      t        | j                  «      k(  sJ ‚t        |«      }t        j                  j                  | | j                  ¬«      j                   |ddiŽS )Nz&Didn't finalize this InterpreterModulec              3   ó0   •K  — | ]  }|‰v r‰|   –— Œ y ­wrA   r2   )rC   Ú
kwarg_nameÚkwargss     €r4   rG   z,InterpreterModule.forward.<locals>.<genexpr>§   s&   øè ø€ ò  à"Ø! VÑ+ð ˜:Õ&ñ ùs   ƒ©ri   Úenable_io_processingF)rh   r   rL   ÚcompilerÚis_dynamo_compilingro   ÚtypeÚforwardÚlistÚ	arg_namesÚlenÚextendÚtupleÚfxÚInterpreterri   Úrun)rc   Úargsrt   Úarg_listÚkwarg_namess     `  r4   rz   zInterpreterModule.forward•   s  ø€ Ø× Ñ Ð,ÐVÐ.VÓVÐ,ÜŒÜ�N‰N×.Ñ.Ô0¸×8RÒ8Rð 3”4˜×)Ñ)Ó*×2Ñ2°4ÐI¸$ÒIÀ&ÑIÐIáô
   ›:�Ø"Ÿn™n¬S°«]¨_Ð=�Ø—‘ó  à&1ô ô ô ˜;Ó'¬3¨v«;Ò6Ð6Ð6Ü˜8“}¬¨D¯N©NÓ(;Ò;Ð;Ð;Ü˜X“�ä—8‘8×'Ñ'¨°D·J±JÐ'Ó?×CÑCØðØ,1ñð r3   c                 óT  — t         j                  j                  | | j                  «      | j                  d<   | j                  j                  «        g | _        | j                  j                  D ]7  }|j                  dk(  sŒ| j                  j                  |j                  «       Œ9 y )Nrh   Úplaceholder)rL   r€   ÚGraphModuleri   Ú__dict__Úlintr|   ÚnodesÚopÚappendr;   ©rc   Únodes     r4   ÚfinalizezInterpreterModule.finalize¸   sy   € ô ).¯©×(<Ñ(<¸TÀ4Ç:Á:Ó(Nˆ�‰�nÑ%Ø�
‰
�‰Ôð ˆŒØ—J‘J×$Ñ$ò 	3ˆDØ�w‰w˜-Ó'Ø—‘×%Ñ% d§k¡kÕ2ñ	3r3   c                 ó"   — t        | d||||«      S )Nr!   ©r   ©rc   Úprint_outputÚinclude_strideÚinclude_deviceÚcoloreds        r4   Úprint_readablez InterpreterModule.print_readableÉ   ó#   € ô ØØØØØØó
ð 	
r3   rA   ©TFFF)r+   r,   r-   Ú__doc__r   rL   r€   rˆ   rf   ÚGraphre   rm   rz   r�   r˜   Ú__classcell__©rp   s   @r4   r!   r!   ‚   se   ø… ñð
 ˜5Ÿ8™8×/Ñ/Ñ0Ó0ð
 !ñ	:à�x‰x�~‰~ð	:ð �S‰Mõ	:ò!òF3ð& ØØØ÷
r3   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J ‚|d   j                  | _        |D ]  }t        | |t	        |d   |«      «       Œ |d   j
                  | _        || _        d| _        y ©Nr   )rl   rm   rP   rK   Úgetattrr_   Ú_call_modulesÚ
_num_calls)rc   r    r¡   Úaccessorrp   s       €r4   rm   z$InterpreterModuleDispatcher.__init__á   so   ø€ Ü‰ÑÔÙÐˆ|Ø$ Q™×0Ñ0ˆŒØò 	HˆHÜ�D˜(¤G¨L¸©O¸XÓ$FÕGð	Hà ‘?×&Ñ&ˆŒØ)ˆÔØˆ�r3   c                 óÄ   — | j                   | j                     }| j                  dz   t        | j                   «      z  | _        	  ||i |¤ŽS # t        $ r	 d| _        ‚ w xY w)Nr   r   )r¥   r¦   r}   Ú	Exception)rc   rƒ   rt   Úcall_modules       r4   rz   z#InterpreterModuleDispatcher.forwardë   sd   € Ø×(Ñ(¨¯©Ñ9ˆØŸ?™?¨QÑ.´#°d×6HÑ6HÓ2IÑIˆŒð	Ù Ð/¨Ñ/Ð/øÜò 	ØˆDŒOØð	ús   ÁA ÁAc                 ó   — | j                   S rA   )r¥   rb   s    r4   r¡   z(InterpreterModuleDispatcher.call_modulesô   s   € Ø×!Ñ!Ð!r3   c           	      ó„   — | j                   D �cg c]  }|j                  ||||«      ‘Œ }}dj                  |«      S c c}w )Nú
)r¥   r˜   Újoin)rc   r”   r•   r–   r—   ÚmodÚoutputss          r4   r˜   z*InterpreterModuleDispatcher.print_readable÷   sV   € ð ×)Ñ)ö
ð ð ×ÑØØØØõ	ð
ˆð 
ð �y‰y˜Ó!Ð!ùò
s   �=rš   )r+   r,   r-   r›   rI   re   r{   r!   rm   rz   r¡   r˜   r�   rž   s   @r4   r"   r"   Ú   sB   ø„ ñð˜c #™hð °dÐ;LÑ6Mõ òò"ð
 ØØØ÷"r3   r"   c                   ó’   — e Zd ZdZej
                  	 d	dej                  dej                  dee	   de
eee	f      dee	   f
d„«       Zy)
r    zN
    Adapts input arguments with ``input_spec`` to align ``target_spec``.
    NÚtarget_specÚ
input_specÚ
input_argsÚmetadatar`   c                  ó   — y)z=NOTE: This adapter may mutate given ``input_args_with_path``.Nr2   )rc   r²   r³   r´   rµ   s        r4   ÚadaptzFlatArgsAdapter.adapt  s   € ð 	r3   rA   )r+   r,   r-   r›   ÚabcÚabstractmethodÚpytreeÚTreeSpecr{   r   r   Údictre   r·   r2   r3   r4   r    r    
  ss   „ ñð 	×Ñð .2ñà—_‘_ðð —O‘Oðð ˜‘Ið	ð
 ˜4  S ™>Ñ*ðð 
ˆc‰òó ñr3   r    c                   ó`   ‡ — e Zd Z	 d
dedee   fˆ fd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Z	 	 	 	 dd	„Zˆ xZS )r#   Úexport_moduleÚflat_args_adapterc                 óf  •‡)— t         ‰*| �  «        |j                  j                  �t	        d«      ‚|j
                  D �cg c]  }|j                  ‘Œ }}|d   dk(  sJ ‚t        |j                  «      }t        |j                  «      | _        t        j                  j                  «       | _        | | j                  _        t        |j
                  «      | _        || _        |j                  j                  | _        | | j                  d<   d| _        t"        | _        t'        || j                  «       t)        «       | _        t-        || «      \  }}| j*                  j/                  |j1                  «       | «       t3        |j4                  | |«       |j6                  | _        g | _        |j:                  }t=        «       }	i }
| j                  j>                  D ]“  }||   }tA        |«      |
vrEt        jB                  jE                  |jG                  «       |jH                  ¬«      |
tA        |«      <   tK        |
tA        |«         | |tL        jN                  ¬«       |	jQ                  |«       Œ• t=        | j                  jR                  «      }t=        «       }i }| j                  jT                  D ]ˆ  }||v rd}|jV                  |   }nd}||   }tA        |«      |vr|jG                  «       |f|tA        |«      <   tK        |tA        |«         d   | |tL        jX                  |¬	«       |jQ                  |«       ŒŠ |j[                  «       D ]Ô  \  }}||	v s||v rŒd}tA        |«      |v s$t]        |t        jB                  jD                  «      sd}|rKtA        |«      |vr|df|tA        |«      <   tK        |tA        |«         d   | |tL        jX                  d¬	«       Œ‘tA        |«      |
vr||
tA        |«      <   tK        |
tA        |«         | |tL        jN                  ¬«       ŒÖ i }|jV                  j[                  «       D ]u  \  }}tA        |«      |vr8t]        |t        j^                  «      r|jG                  «       }||tA        |«      <   |tA        |«         }tK        || |tL        j`                  ¬«       Œw tc        td        «      Š)t=        «       }ˆ)fd
„}t=        «       }| j                  jf                  D �]ø  }|jh                  tj        jN                  k(  s)|jh                  tj        jX                  k(  r¿|jl                  r³to        |jp                  d«      sJ ‚t]        |jr                  tt        «      sJ ‚ |tA        |j:                  |jr                     «      |jp                  jv                  |jr                  «       |jQ                  |jr                  «       |jQ                  |jr                  «       Œý|jh                  tj        jX                  k(  r|jl                  r<|jh                  tj        jx                  k(  s|jh                  tj        jz                  k(  s�Œbto        |jp                  d«      sJ ‚t]        |jr                  tt        «      sJ ‚ |tA        |jV                  |jr                     «      |jp                  jv                  |jr                  «       |jQ                  |jr                  «       �Œû |jV                  j[                  «       D ]`  \  }}||vsŒtA        |«      ‰)v sJ d«       ‚‰)tA        |«         d   \  }} |tA        |«      ||«       |jQ                  jr                  «       Œb |j:                  j[                  «       D ]?  \  }}||vsŒtA        |«      ‰)vrŒ‰)tA        |«         d   \  }} |tA        |«      ||«       ŒA i } ‰)j1                  «       D ]#  }!|!D �"cg c]  }"|"d   ‘Œ	 }#}"|!D ]
  \  }$}|#| |$<   Œ Œ% t}        | | g «       t        |j1                  «       «      }%|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}&| _C        d| _D        t‹        |«      D �'�ci c]  \  }'}||'“Œ
 }(}'}| j�                  d¬«      D ]  \  }}||(vsŒt�        |(«      |(|<   Œ t‘        | |(«       | 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 NYIr   Ú Úunflattened_moduleF)Úrequires_grad)r<   T)r<   r=   c                 ó6   •— ‰|    }|j                  ||f«       y rA   )r�   )Úobj_idÚ	node_nameÚtarget_nameÚ	name_listÚ
consts_maps       €r4   Úadd_to_consts_mapz5UnflattenedModule.__init__.<locals>.add_to_consts_map²  s    ø€ Ø" 6Ñ*ˆIØ×Ñ˜i¨Ð5Õ6r3   Únamez?Constants should be either aliased or appear in graph signaturer   ú@r‡   ©Úremove_duplicate)Jrl   rm   Úgraph_signatureÚbackward_signatureÚ
ValueErrorÚmodule_call_graphÚfqnr   ri   rL   r€   rœ   rn   r¿   rh   ÚmetaÚadaptedr6   ro   Ú_inplace_buffer_mutationsÚ_IValsÚivalsÚ_outline_submodulesÚcreateÚvaluesÚ_copy_graph_attrsÚ_graph_moduleÚrange_constraintsÚequality_constraintsÚ
state_dictrI   Ú
parametersÚidrM   rS   ÚclonerÃ   r\   r&   r.   ÚaddÚnon_persistent_buffersÚbuffersÚ	constantsr/   rQ   rR   rU   r0   r   r{   Úinput_specsÚkindr   r=   rJ   Úargr;   re   rË   ÚCONSTANT_TENSORÚ
CUSTOM_OBJÚ_sink_paramsÚ_deduplicate_modulesÚ_dispatch_modulesr‹   rŒ   Úinput_placeholdersÚcheck_input_constraintsÚ	enumerateÚnamed_modulesr}   Ú_reorder_submodulesrŠ   )+rc   r¾   r¿   ÚentryÚfqn_listÚexport_graphÚseen_modulesÚ
seen_attrsrà   Úassigned_paramsÚid_to_paramrË   Úparamrå   Úassigned_buffersÚid_to_bufferr=   r(   ÚtensorÚ	is_bufferÚid_to_constrÓ   r)   Ú	_constantÚconsts_targetsrÊ   Úadded_params_buffersÚsÚ
const_nameÚconstÚph_nameÚ_Úinputs_to_stateÚnode_targetÚtÚtargetsÚnÚredirected_call_indicesr�   ÚiÚ	fqn_orderrÉ   rp   s+                                            @€r4   rm   zUnflattenedModule.__init__  sU  ù€ ô
 	‰ÑÔØ×(Ñ(×;Ñ;Ð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ˆÔà!×.Ñ.×3Ñ3ˆŒ	Ø*.ˆ�	‰	Ð&Ñ'ð ˆŒÜ%9ˆÔ"ä! ,°×0DÑ0DÔEä“XˆŒ
ô $7°|ÀTÓ#JÑ ˆ�jð 	�
‰
×Ñ˜,×-Ñ-Ó/°Ô6ô 	˜-×5Ñ5°t¸ZÔHà!.×!@Ñ!@ˆÔØ*,ˆÔ!ð #×-Ñ-ˆ
Ü$'£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ÐØCEˆØ×(Ñ(×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Ô/ä"6°|×7JÑ7JÓ7LÓ"MÐØ#+ÖR˜C¨sÐ:QÒ/Q’CÐRˆÐRà×ÑÐ6¸ÔGØ#+Ö>˜C¨s¸#ª~’CÐ>ˆÐ>ð "ŸZ™Z×-Ñ-ö#
Ø°·±¸MÓ1IŠDò#
ˆÔð (,ˆÔ$ä*3°HÓ*=×>¡  3�S˜!‘VÐ>ˆ	Ñ>à×)Ñ)¸5Ð)ÓAò 	1‰GˆD�!Ø˜9Ò$Ü"% i£.�	˜$’ð	1ô 	˜D )Ô,Ø�
‰
�‰Õùòw LùòB 2ùò Sùò ?ùò
#
ùó
 ?s6   Á dß#dà,	dà6dá	d#ád#á:d(âd(â0d-c                 óò   — | j                  «       D ]d  \  }}t        |dz   «       t        |d«      sŒ!t        |j                  t
        j                  j                  «      sŒPt        |j                  «       Œf y )Nú:ri   )ró   ÚprintrJ   rR   ri   rL   r€   rœ   )rc   rÓ   r¯   s      r4   Ú_print_graphzUnflattenedModule._print_graph  sU   € Ø×*Ñ*Ó,ò 	!‰HˆC�Ü�#˜‘)ÔÜ�s˜GÕ$¬°C·I±I¼u¿x¹x¿~¹~Õ)NÜ�c—i‘iÕ ñ	!r3   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 sepcified. Are you sure you are calling this with the right arguments? )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)rc   Ú	flat_argsr  r  s       r4   Ú_adapt_flat_argsz"UnflattenedModule._adapt_flat_args  sÙ   € Ø×*Ñ*¨1Ñ-×7Ñ7ˆ	Ø�i×'Ñ'Ò'ØÐà×!Ñ!Ð)ÜðOóð ð
 ×.Ñ.×4Ñ4Ø%×-Ñ-Ø"Ø$ØŸ™ð	 5ó ˆIô �9‹~ ×!2Ñ!2×!=Ñ!=Ò=Üð Ü # I£Ð/ð 0(Ø(1×(9Ñ(9×(DÑ(DÐ'EðGóð ð
 Ðr3   c                 óp  — | j                   d   j                  }t        ||j                  «      }t	        j
                  ||f«      \  }}|D �cg c]  }|d   ‘Œ	 }}t        «       r|S ||j                  k7  rM| j                  s(t        d|› d�d|j                  › �«       t        d«       | j                  ||«      }d| _        | j                  r\ddlm}	 | j                  du r(|D �
cg c]  }
t        d¬	«      t        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_graph)Úidxz<unknown location>)rË   )rÒ   r  r   r  rº   Útree_flatten_with_pathr   rÕ   r  r  rñ   Útorch._export.utilsr  r   r   rð   rÞ   )rc   rƒ   rt   r  Úreordered_kwargsÚflat_args_with_pathr  Úxr  r  rê   Únew_flat_args_with_paths               r4   Úprocess_forward_inputsz(UnflattenedModule.process_forward_inputs"  sY  € Ø×*Ñ*¨1Ñ-×7Ñ7ˆ	ä)¨&°)×2CÑ2CÓDÐä'-×'DÑ'DØÐ#Ð$ó(
Ñ$Ð˜Wð $7Ö7˜a�Q�q“TÐ7ˆ	Ð7äŒ?ØÐà�i×'Ñ'Ò'Ø—<’<Üð'Ø'. i¨rð3à0°×1BÑ1BÐ0CÐDôô
 ÐMÔNØ×-Ñ-¨i¸ÓAˆIØˆDŒLà×'Ò'õ Oà�|‰|˜tÑ#ð  )ö+àô " aÔ(¬*Ð:NÔ*OÐPÐRUÒVð+Ð'ñ +ð
 +>Ð'á.Ø×'Ñ'Ð)@À$×BXÑBXôð ÐùòI 8ùò2+s   ÁD.Ã(!D3c                 óÄ  — t        j                  j                  | 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                  «       r9| j                   s-t        j                  j#                  | | j                  «      |Ž }n:t        j                  j                  | | j                  ¬«      j                  |ddiŽ}t%        j&                  ||j(                  «      S )Nr   ru   rv   Fr   )rL   Ú_dynamoÚdisabler&  rÒ   r  r   r€   r�   ri   r‚   rR   r   r}   rw   rx   ro   rˆ   rº   Útree_unflattenÚout_spec)rc   rƒ   rt   r  r  Ú
return_valÚtree_outs          r4   rz   zUnflattenedModule.forwardP  s!  € Ü—M‘M×)Ñ)¨$×*EÑ*EÓFÈÐWÐPVÑWˆ	Ø×*Ñ*¨1Ñ-×7Ñ7ˆ	äŒ?ÜŸ™×-Ñ-¨d¸$¿*¹*Ð-ÓE×IÑIØðØ16ñˆJô ˜*¤eÔ,´°Z³ÀAÒ1EØ! !‘}Ð$ØÐä�>‰>×-Ñ-Ô/¸×8RÒ8RÜ—x‘x×+Ñ+¨D°$·*±*Ó=¸yÐI‰Hä—x‘x×+Ñ+¨D¸¿
¹
Ð+ÓC×GÑGØðØ16ñˆHô ×$Ñ$ X¨y×/AÑ/AÓBÐBr3   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 ]d  \  }}t1        |d	«      r |||j2                  «       Œ&t1        |d
«      sŒ3|j4                  D ]#  }t1        |d	«      sJ ‚ |||j2                  «       Œ% Œf 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Ì   Ú0r?   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   r?   )r‹   rŒ   r;   rH   )rX   ri   r�   rÓ   ÚpathÚcalled_moduless        €r4   Úelide_call_indicesz?UnflattenedModule._dispatch_modules.<locals>.elide_call_indices�  s^   ø€ ØŸ™ò *�Ø—7‘7˜mÓ+ØŸ+™+×+Ñ+¨CÓ0°Ñ3�CÙ06˜f˜X Q s eÑ,¸C�DØ˜~Ò-Ø&)˜�ñ*r3   FrÍ   ri   r¥   N)r   r{   rÒ   rÓ   r  r   ÚgetrH   r�   ÚintrI   Úrspliträ   rQ   Úsortedr}   ÚrangeÚ
_call_namer   rP   ÚpopÚset_submoduler"   ró   rJ   ri   r¥   )rc   r  r  rõ   rÓ   r¯   Úbaser  Ú	attrs_mapr;   Úorig_fqnrË   Úindexed_call_modulesr	  r¡   r  rX   r3  Úmod_r2  s                      @r4   rï   z#UnflattenedModule._dispatch_modulese  s8  ø€ ô %¤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¡F A sšCÐKˆLÑKÜ�<Ó  1Ó$Üœs <Ó0Ó1ò Q�AÜ$ X¨q°1©uÓ5�CØÐ"9Ò9Ø(+¯	©	°#«™˜ Ü/°°fÓ=×FÑF×JÑJÈ4ÕPð	Qð
 ×"Ñ"ØÜ/°	¸(Ñ0CÀ\ÓRõð	ô	*ð ×*Ñ*¸EÐ*ÓBò 	8‰HˆC�Ü�s˜GÔ$Ù" 3¨¯	©	Õ2Ü˜˜oÕ.Ø×-Ñ-ò 8�DÜ" 4¨Ô1Ð1Ð1Ù& s¨D¯J©JÕ7ñ8ñ		8ùó- Ls   ÄH?c                 ó"   — t        | d||||«      S )Nr#   r’   r“   s        r4   r˜   z UnflattenedModule.print_readableŸ  r™   r3   rA   rš   )r+   r,   r-   r   r   r    rm   r  r  r&  rz   rï   r˜   r�   rž   s   @r4   r#   r#     sW   ø„ ð 8<ñdà&ðdð $ OÑ4õdòL!òò4,ò\Cò*88ðx ØØØ÷
r3   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     r4   r$   r$   °  s   € ô, # 6Ó*€FÜ˜VÐ%6Ó7Ð7r3   ri   rÏ   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   Nr‡   Úcall_functionc                 ó   •— | ‰uS rA   r2   )r$  Únew_nodes    €r4   ú<lambda>z+_inplace_buffer_mutations.<locals>.<lambda>ú  s   ø€ ¸1ÀHÐ;L€ r3   )ÚnextÚiterÚreversedr‹   rŒ   r}   rƒ   Úbuffers_to_mutateÚinputs_to_buffersrQ   rË   Úinserting_afterÚcreate_noderL   ÚopsÚatenÚcopy_rÔ   Úreplace_all_uses_withr   )ri   rÏ   Úoutput_nodeÚreturn_argsÚmutation_node_to_bufferÚ	mutationsrD   ÚvÚbuffers_to_inputsr�   Úinput_name_to_nodeÚmutationÚbuffer_nameÚ
input_nameÚ
input_nodeÚuser_outputsrG  s                   @r4   rÖ   rÖ   Ê  sÇ  ø€ ô2 ”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}   )Ú	candidater;   s     r4   Ú
_is_prefixrb    s+   € äˆy‹>œC ›KÑ'ÒQ¨FÐ3C´S¸³^Ð,DÈ	Ñ,QÐQr3   Ú
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 module 'za'.This is currently unsupported.Please try to make child module attach to parent module directly.)rH   r}   ÚRuntimeErrorr®   )rc  rd  Úparent_splitÚchild_splits       r4   Ú_compute_accessorri  
  sŒ   € Ø�RÒàÐà×#Ñ# CÓ(€LØ—/‘/ #Ó&€Kð Ð&”S˜Ó&Ð'¨<Ò7ÜØ˜Y˜KÐ'OÐPZÈ|ð \Pð Pó
ð 	
ð
 �8‰8�K¤ LÓ 1Ð 3Ð4Ó5Ð5r3   r$  Úyc                 óT  — dt         j                  j                  dt        fd„}t	        | j
                  t         j                  j                  «      sJ ‚t	        |j
                  t         j                  j                  «      sJ ‚ || j
                  «       ||j
                  «      k(  S )Nri   r`   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 )Nr`   c                 ó–   •— t        | t        j                  j                  «      rdt	        ‰t        | «         «      z   S t	        | «      S )Nú%)rR   rL   r€   ÚNodere   râ   )rê   Ú	nodes_idxs    €r4   Ú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ˆOr3   ú=)rE  Úget_attrrÁ   z: ú[z](z, ú)r­   )re   rò   r‹   rº   Útree_maprƒ   rt   rQ   rŒ   r;   r�   r®   râ   )ri   Úretrq  r  r�   rê   Ú	args_dumpÚkeyÚvaluer;   rp  s             @r4   Ú
graph_dumpz,_check_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Ð/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$
)rL   r€   rœ   re   rR   ri   )r$  rj  r{  s      r4   Ú_check_graph_equivalencer|    st   € ðœ%Ÿ(™(Ÿ.™.ð ¬Só ô( �a—g‘gœuŸx™xŸ~™~Ô.Ð.Ð.Ü�a—g‘gœuŸx™xŸ~™~Ô.Ð.Ð.Ù�a—g‘gÓ¡*¨Q¯W©WÓ"5Ñ5Ð5r3   Úgmc                 óv   — d}t        | d|› �«      r|dz  }t        | d|› �«      rŒd|› �}t        | ||«       |S )Nr   Ú_spec_r   )rJ   rK   )r}  Úspecr  rË   s       r4   Ú	_add_specr�  6  sN   € Ø	€AÜ
�"˜˜q˜c�lÔ
#Ø	ˆQ‰ˆô �"˜˜q˜c�lÕ
#à�A�3ˆ<€DÜˆB��dÔØ€Kr3   c                 ó´   — | j                   j                  t        j                  |f«      }| j                   j                  t        j
                  |df«      }|S r£   )ri   rE  rº   Útree_flattenÚoperatorÚgetitem)r}  r�   ÚflattenÚ	getitem_0s       r4   Ú_generate_flattenrˆ  ?  sF   € Ø�h‰h×$Ñ$¤V×%8Ñ%8¸4¸'ÓB€GØ—‘×&Ñ&¤x×'7Ñ'7¸'À1¸ÓF€IØÐr3   c                 ó¨   — t        | |«      }| j                  j                  |«      }| j                  j                  t        j
                  ||f«      S rA   )r�  ri   rs  rE  Ú	fx_pytreeÚtree_flatten_spec)r}  r�   r€  rË   Ú	spec_nodes        r4   Ú_generate_flatten_specr�  E  sF   € ô �R˜Ó€DØ—‘×!Ñ! $Ó'€IØ�8‰8×!Ñ!¤)×"=Ñ"=ÀÀiÐ?PÓQÐQr3   c                 ó¨   — t        | |«      }| j                  j                  |«      }| j                  j                  t        j
                  ||f«      S rA   )r�  ri   rs  rE  rº   r*  )r}  r‹   r€  rË   rŒ  s        r4   Ú_generate_unflattenr�  M  sF   € ô �R˜Ó€DØ—‘×!Ñ! $Ó'€IØ�8‰8×!Ñ!¤&×"7Ñ"7¸%ÀÐ9KÓLÐLr3   r¯   c                 óÄ   — |j                  d«      �^ }}|D ];  }t        | |d «      }|€ y t        |t        j                  j
                  «      s y |} Œ= t        | |d «      S )Nr?   )rH   r¤   rR   rL   rM   rN   )r¯   r;   rX   rY   rF   Úsubmods         r4   Ú_get_submoduler’  U  sd   € Ø—\‘\ #Ó&�N€VˆUàò 	ˆÜ˜˜d DÓ)ˆàˆ>Ùä˜&¤%§(¡(§/¡/Ô2Ùà‰ð	ô �3˜˜tÓ$Ð$r3   Ú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 )Nr?   r   F)
rH   rò   r¤   r®   rL   rM   rN   rK   rR   Ú
add_module)	r¯   r;   r“  r”  rX   rY   r  rF   r‘  s	            r4   Ú_add_submoduler—  f  sª   € ð —\‘\ #Ó&�N€VˆUä˜VÓ$ò ‰ˆˆ4Ü˜˜d DÓ)ˆàˆ>ØÐ(Ù& s§x¡x°°w¸¸Q¹°Ó'@ÓA‘äŸ™Ÿ™Ó*�Ü�C˜˜vÔ&ä˜&¤%§(¡(§/¡/Ô2Ùà‰ðð ‡N�N�5˜-Õ(r3   r<  r  c                 ó$   — |dk(  r| S | › d|dz
  › �S )Nr   rÌ   r2   )r<  r  s     r4   r9  r9  €  s$   € ð ˜’6ˆ4Ð0 $  q¨¨Q©¨Ð0Ð0r3   Ú	call_namec                 ó^   — t        j                  t        j                  |«      dz   | «      d uS )Nz(@\d+)?$)ÚreÚmatchÚescape)r™  r<  s     r4   rB   rB   †  s%   € ä�8‰8”B—I‘I˜d“O kÑ1°9Ó=ÀTÐIÐIr3   c                   ó  — e Zd Z	 ddej                  j
                  deej                  j                  df   deee	e
e	   ef      dee	ef   de
eej                  j                  ef      f
d„Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z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                  «      }|��¦‰ j                  ��˜|j@                  jB                  d	k(  sJ ‚|j@                  jD                  d   }|j@                  jD                  d   }|jF                  �J ‚|jF                  €J ‚‰ j,                  jI                  d «      5  tK        |jB                  «      D �cg c]   }‰ j,                  jM                  d
|› �«      ‘Œ" }}i }|jF                  D ]   }‰ j,                  jM                  |«      ||<   Œ" tO        ‰ j                  tQ        |«      |f|j@                  «      }tS        |jT                  «      D ]Þ  \  }}‰ j,                  jW                  dtX        jZ                  ||ft]        |t^        «      s|j`                  nd|› �¬«      }t]        |t^        «      rŒe|j`                  ‰ j                  v sŒ~tc        jb                  ‰ j                  |j`                     jd                  «      |_2        |‰ j0                  ‰ j                  |j`                     <   Œà 	 d d d «       ‰ j                  j,                  jg                  ‰ j2                  «      5  g }|jT                  D ]»  }t]        |t^        «      r|j=                  |jh                  «       Œ/|j`                  ‰ j                  vr|j=                  d «       ŒYt]        |tj        tl        tn        tp        f«      sJ ‚|j=                  ‰ j                  js                  ‰ j                  |j`                     «      «       Œ½ tu        ‰ j                  j                  ||j@                  «      }‰ j                  j,                  jw                  tX        jZ                  |df«      }‰ j                  j,                  jw                  tX        jZ                  |df«      }tK        |jB                  «      D �cg c]8  }‰ j                  j,                  jw                  tX        jZ                  ||f«      ‘Œ: }}|jF                  D � ci c]9  } | ‰ j                  j,                  jw                  tX        jZ                  || f«      “Œ; }} d d d «       ‰ j2                  €J ‚tQ        «      ‰ 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   ŒaxY w)NFéÿÿÿÿr   rØ   ©rj   c                 óð   •— ‰j                   r‰j                   › d| › �n| }|‰j                  v r‰j                  |   S t        t        j                  j                  «       ‰¬«      }|‰j                  |<   |S )Nr?   r¤  )rÓ   Úcreated_modulesr!   rL   r€   rœ   )rÓ   r1  r‘  Úparentrc   rj   s      €€€r4   r”  z,_ModuleFrame.__init__.<locals>.create_moduleÀ  sj   ø€ Ø06·
²
˜&Ÿ*™*˜ Q s eÑ,À�Ø˜4×/Ñ/Ñ/Ø×/Ñ/°Ñ5Ð5Ü*¬5¯8©8¯>©>Ó+;ÀÔC�Ø-3�×$Ñ$ TÑ*Ø�r3   r   )rc  Úparent_moduleÚparent_call_modulerÓ   Úcall_idxr*   é   Ú_positional_arg_rE  Ú
_constant_)rŒ   r;   rƒ   rË   )>r   r‹   Ú
seen_nodesrø   rù   r¦  r§  r¡  Ú	module_idrÒ   ÚverboserÓ   r9  rd  r*   rJ   rØ   r4  r!   rL   r€   rœ   ri   Únode_mapÚnode_to_placeholderr©  ri  r—  rª   rP   r�   Ú_SubmoduleEntryr  Únum_childrenÚchildren_specsÚcontextrN  r8  r‡   r�  r   rò   ÚinputsrO  r„  r…  rR   r   rË   ÚcopyrÔ   Úinserting_beforerz  r   r   r   r   Úremap_inputr�  rE  rƒ   rt   )"rc   r   r‹   r®  rø   rù   r¦  r§  r¡  r¯  rÒ   r*   Ú	num_callsr§   r”  Úbase_module_framer  Ú	args_specÚkwargs_specr  Ú	arg_nodesÚkwarg_nodesrË   r  rê   Úflat_arg_nodeÚinput_nodesÚinputÚinputs_nodeÚ	args_nodeÚkwargs_noder  rD   rj   s"   `      `                         @r4   rm   z_ModuleFrame.__init__Œ  sz  ú€ ð %ˆŒØˆŒ
Ø$ˆŒØ(ˆÔØ$ˆŒØ.ˆÔØˆŒØ(ˆÔØ"ˆŒà!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à—[‘[×&Ñ&ˆŒ
ð =?ˆŒØ#%ˆÔ à;?ˆÔØÑÜ(¨¯©°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§[¡[Ñ%<Ø×$Ñ$×1Ñ1°QÒ6Ð6Ð6Ø!×)Ñ)×8Ñ8¸Ñ;ˆIØ#×+Ñ+×:Ñ:¸1Ñ=ˆKØ×$Ñ$Ð,Ð,Ð,Ø×&Ñ&Ð2Ð2Ð2à—‘×+Ñ+¨DÓ1ñ *ô  % Y×%;Ñ%;Ó<öàð —J‘J×*Ñ*Ð-=¸c¸UÐ+CÕDð�	ð ð !�Ø'×/Ñ/ò E�DØ(,¯
©
×(>Ñ(>¸tÓ(D�K Ò%ðEä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Ø ŸO™O¨C¯H©HÑ5òñ!*÷*ðB —‘×"Ñ"×3Ñ3°D×4KÑ4KÓLñ *Ø=?�Ø&×-Ñ-ò �EÜ! %Ô)9Ô:Ø#×*Ñ*¨5¯;©;Õ7ØŸ™¨4¯?©?Ñ:Ø#×*Ñ*¨4Õ0ä)Ø!ä .Ü .Ü /Ü 0ð	ô ð ð  ð $×*Ñ*Ø Ÿ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Ü ×(Ñ(¨;¸Ð*:óñ ð�ð ÷K*ðV ×*Ñ*Ð6Ð6Ð6Ü+0°Ó+;ˆD×#Ñ#Ô(Ø-8ˆD×#Ñ#Õ*ðk &=Ð ùò÷*ñ *üòDùò÷K*ð *úsQ   Ì:]Í%]Í7C1]Ñ)A#]ÔE;],Ù?=]"Ú<],Û>]'Ü
],Ý]Ý]Ý"
],Ý,]5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Ó   ri   r   r¹  r‡   rË   ry   r¸  rÔ   r²  )rc   r$  Úplaceholder_nodes      r4   Úadd_placeholderz_ModuleFrame.add_placeholder0  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 rA   )rº   Útree_map_onlyrL   r€   ro  rº  rƒ   rt   ri   rE  r;   r¸  rÔ   r±  )rc   r$  rƒ   rt   r�   s        r4   Ú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ÑØˆr3   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 | j                  j                  | j                  «      �1| j>                  jA                  | j                  | j                   |«      S tC        d|j
                  › d	|› �«      ‚# 1 sw Y   �ŒxY w)
Nzremap_input(ru  r‡   r   rE  r,   Ú	_operatorz(Could not run remap_input() on op type: z
 for node )"ri   r   r±  r  r²  rŒ   rÒ   r4  rÓ   rË  r©  r§  r¹  Ú
insert_argrº  r;   rL   rP  rQ  Úsym_sizer5  rF   ÚdefaultÚunbindÚsumÚdim_IntListÚviewÚdiffrJ   r,   rÎ  rØ   Úreadrf  )rc   r$  s     r4   rº  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§8¡8¨T¯Z©Z¸Ó;Ð;äØ:¸1¿4¹4¸&À
È1È#ÐNóð ÷1Vñ Vús   Ã*6L#Ì#L-c                 óà  ‡ ‡— ‰ j                   j                  ‰ j                  d «       g }‰ j                  j	                  ‰ j
                  «      }|��‰ j                  ��|j                  D ]‚  }t        |t        t        t        t        f«      rS|j                  ‰ j                  v r)|j                  ‰ j                  |j                     «       Œd|j                  d «       Œvt!        d|› �«      ‚ ˆ fd„Št#        ‰ j$                  t'        ˆfd„|D «       «      |j(                  «      }t+        ‰ j                  j$                  ‰ j,                  |j(                  «      }|}nšg }‰ j.                  j1                  «       D ]\  }|j2                  D ]K  }|j                  ‰ j                  vsŒ|j                  |«       |j                  ‰ j.                  |   «        Œ\ Œ^ ‰ j,                  }t5        |«      dk(  r|d   }t        |t6        t8        j:                  j<                  f«      sJ ‚‰ j>                  jA                  |«       |€y t        |t8        j:                  j<                  «      r|jB                  j	                  d«      n(|D �	cg c]  }	|	jB                  j	                  d«      ‘Œ c}	|jB                  d<   t5        |«      dk(  r|€|‰ j                  j.                  |d   <   y tE        |«      D ]u  \  }
}|€Œ	t8        j:                  jG                  |«      |
   jH                  }|jB                  j	                  d«      |jB                  d<   |‰ j                  j.                  |<   Œ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²  rf  ri   )rD  Ú	seen_noderc   s     €r4   Ú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óð r3   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrA   r2   )rC   rD  rÝ  s     €r4   rG   z0_ModuleFrame.finalize_outputs.<locals>.<genexpr>š  s   øè ø€ ÒP¸Ñ,¨V×4ÑPùs   ƒr   r   Úval)%r¦  r:  rÓ   rÒ   r4  rd  r§  r°   rR   r   r   r   r   rË   r®  r�   rf  r�  r*   r   r+  r�  r©  r±  ÚkeysÚusersr}   r{   rL   r€   ro  ri   rD  rÔ   rò   ÚProxyr�   )rc   Úorig_outputsr  rD  Útree_out_nodeÚ
parent_outÚgraph_outputsÚ	orig_nodeÚ	user_nodeÚor  Úorig_outputÚ	proxy_outrÝ  s   `            @r4   Úfinalize_outputsz_ModuleFrame.finalize_outputsu  së  ù€ Ø×Ñ× Ñ  §¡¨4Ô0àˆà×*Ñ*×.Ñ.¨t¯~©~Ó>ˆ	ØÑ  T§[¡[Ñ%<Ø#×+Ñ+ò �ÜØÜ#¤^´_ÔFVÐWôð —{‘{ d§o¡oÑ5Ø$×+Ñ+¨D¯O©O¸F¿K¹KÑ,HÕIà$×+Ñ+¨DÕ1ä&ØAÀ&ÀÐJóð ðôô 0Ø—‘ÜÓPÀ<ÔPÓPØ×"Ñ"óˆMô
 3IØ—‘×"Ñ" 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ñ>ùò <s   Ê"M+c                 óÜ   — | j                  d|j                  «       «       | j                  j                  || j                  «      | j
                  |<   || j                  |j                  <   y )NÚcopying)r  Úformat_noderi   Ú	node_copyrº  r±  r®  rË   rŽ   s     r4   Ú	copy_nodez_ModuleFrame.copy_nodeÉ  sP   € Ø�
‰
�9˜d×.Ñ.Ó0Ô1Ø"Ÿj™j×2Ñ2°4¸×9IÑ9IÓJˆ�‰�dÑØ%)ˆ�‰˜Ÿ	™	Ò"r3   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 )NÚnn_module_stackr   r‡   r   rD  )
rò   r   r‹   r  rÔ   r4  rï  rŒ   rñ  Úrun_from)rc   r  r�   Únode_idxs       r4   Ú	run_outerz_ModuleFrame.run_outerÎ  sà   € Ü  §¡×!6Ñ!6Ó7ò 	P‰GˆAˆtØ�J‰J�q˜$Ÿ)™)Ÿ-™-Ð(9Ó:¸D×<LÑ<LÓ<NÕOð	Pð ˆØ�z‰z˜(Ñ#ˆØ�g‰g˜Ò&Ø�N‰N˜4Ô Ø˜‰MˆHØ—:‘:˜hÑ'ˆDð �g‰g˜Ó&ð
 	�‰�hÔð —O‘O×)Ñ)ò 	%ˆDØ�w‰w˜(Ó"Ø—‘˜tÕ$ñ	%r3   c                 ó4   — | j                   rt        |i |¤Ž y y rA   )r°  r  )rc   rƒ   rt   s      r4   r  z_ModuleFrame.printá  s   € Ø�<Š<Ü�4Ð"˜6Ó"ð r3   c                 ó¶  — d}|t        | j                  «      k  �r7| j                  |   }|j                  dk7  sJ ‚| 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 |€J ‚t#        | j
                  |«      rÐ||   }| j                  d|«       t%        |j                  d   j'                  «       «      |   }t)        | j*                  | j                  | j,                  | j.                  | j0                  | j2                  | | j
                  |gz   |j                  d	«      d   | j4                  «
      j7                  |«      }|dz  }�ŒÍ|| j
                  k(  sJ ‚|j                  dk(  r2| j0                  | j8                     j;                  |j<                  «       | j?                  |«       |dz  }|t        | j                  «      k  r�Œ6y y c c}
}	}w )Nr   r‡   ÚSTEPrD  r   ró  z(Unable to find nn_module_stack for node )Ú_EMPTY_NN_MODULE_STACK_KEYrÌ   r£  Ú	outliningzCreating new stack frame forrs  ) r}   r‹   rŒ   r  rï  r¡  rì  rÔ   r4  rf  Ú(torch._export.passes._node_metadata_hookrú  rQ   r5  rH   rÓ   ri   rb  r{   rà  rŸ  r   r®  rø   rù   r¦  rÒ   rô  rd  rä   r;   rñ  )rc   rõ  Ú
module_idxr�   Údepthró  rú  Únode_module_stackrD   r1  rj   Únext_moduleÚnext_module_keys                r4   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×(Ñ(Ô)Ü˜×)Ñ)Ó*ˆ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÷%ð %ñ &˜™:˜D "ð	 Ù"™¨Ø14¸±œ˜AŸG™G C›L¨Ñ,Ô-¸qòð%Ð!ò %ð !  %Ð(¨D×,=Ñ,=Ò=ð ×%Ñ%Ô'Ø—
‘
˜;¨¯©Ô1Ø—
‘
˜4Ÿ:™:Ô&Ø�à$Ð0Ð0Ð0ä˜$×+Ñ+Ð->Ô?ð 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‘�
Ùð %¨×(9Ñ(9Ò9Ð9Ð9à�w‰w˜*Ò$à—‘ §¡Ñ/×3Ñ3°D·K±KÔ@à�N‰N˜4Ô Ø˜‰MˆHðq œ˜TŸZ™Z›Ö(ùôD%s   Å7MrA   )r+   r,   r-   rL   r€   rœ   r   ro  r{   re   r   r5  r¼   r   r   rˆ   r#   rm   rË  rÎ  rº  rì  rñ  rö  r  rô  r2   r3   r4   rŸ  rŸ  ‹  sÅ   „ ð LPñb9à—H‘H—N‘Nðb9ð �U—X‘X—]‘] CÐ'Ñ(ðb9ð ˜5  h¨s¡m°SÐ!8Ñ9Ñ:ðb9ð   Ð%8Ð 8Ñ9ðb9ð ˜˜uŸx™x×3Ñ3Ð5FÐFÑGÑHób9òH	7òò*òXR>òh*ò
%ò&#ó[r3   rŸ  c                   óÂ   — e Zd ZU eed<   ej                  j                  ed<   ej                  j                  ed<   eed<   e
ed<   ej                  j                  ed<   y)r³  rc  r¨  r©  rÓ   rª  r*   N)r+   r,   r-   re   rf   rL   rM   rN   r€   ro  r5  r2   r3   r4   r³  r³  C  s;   … àƒOØ—8‘8—?‘?Ó"ØŸ™Ÿ™Ó%Ø	ƒHØƒMØ�H‰H�O‰OÔr3   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{   rI   rŸ  r   r‹   rÒ   r  rÓ   rö  )r  r  r®  rø   rù   r¦  rõ   s          r4   rÙ   rÙ   M  s    € Ø+-€JÜ5@ÄÓ5F€LÜ&1´#Ó&6€JØ24€OÜØÜˆj×ÑÓØØØØØØ	ˆØ
ð %×6Ñ6ö	
àØ�Šð �I‰I�u—‘Ñ&ò	
ð
 ô÷  �i„kØ˜Ð#Ð#ùò	
s   Á*Br§  r  rX   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   r?   )rX   )ry  )r{   rà  r’  r—  rL   rM   rN   rP   rQ   rô   rH   Údelattrr�   Úsortr„  Ú
itemgetterÚregister_module)r§  r  rX   rÓ   ÚchildrenrË   Úchildr	  s           r4   rô   rô   f  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·Y±Y¸s³^ÀAÑ5FÈÑ5LÕMÜ�˜ÔØ�‰˜ 3™¨¨uÐ5Õ6ð7ð ‡M�M”h×)Ñ)¨!Ó,€MÔ-Ø"ò ,‰ˆˆ4�Ø×Ñ˜t UÕ+ñ,r3   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)r×   av  
    Collect the intermediate values of buffer mutations in a graph,
    along with the module call fqns that create and use them. Later,
    in each fqn associated with an intermediate value we will install
    a corresponding attribute, so that it can be updated and read.

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

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

    Here ival1 and ival2 are intermediate values created inside
    calls to n0 and n1 respectively, and used inside calls to
    n1 and n2 respectively.

    Thus our analysis will produce {ival1: {n0, n1}, ival2: {n1, n2}}.
    c                 ó:   — t        t        «      | _        i | _        y rA   )r   rI   ÚfqnsÚstoragerb   s    r4   rm   z_IVals.__init__–  s   € ä¤Ó$ˆŒ	àˆ�r3   c                 ó  — |j                  d«      5  |j                  d|j                  z   |j                  ¬«      }t	        j                  |j
                  «      |_        ddd«       |j                  | j                  vrQ|j
                  d   }t        j                  |j                  |j                  ¬«      | j                  |j                  <   | j                  |j                     j                  |«       S # 1 sw Y   ŒœxY w)zM
        Read attribute corresponding to a given intermediate value.
        NÚ__ival__rÈ  rß  )Údtype)r¹  rs  rË   ry   r¸  rÔ   r  rL   ÚemptyÚshaper  r  rä   )rc   rÓ   ri   r�   Ú	ival_nodeÚfakes         r4   rÙ  z_IVals.readœ  sÂ   € ð
 ×#Ñ# DÓ)ñ 	2ØŸ™ z°D·I±IÑ'=ÈÏÉ˜ÓSˆIÜ!ŸY™Y t§y¡yÓ1ˆIŒN÷	2ð �9‰9˜DŸL™LÑ(ð —9‘9˜UÑ#ˆDÜ&+§k¡k°$·*±*ÀDÇJÁJÔ&OˆD�L‰L˜Ÿ™Ñ#Ø�	‰	�$—)‘)Ñ× Ñ  Ô%àÐ÷	2ð 	2ús   ’AC<Ã<Dc                 ó>  — | j                   |j                     j                  |«       |j                  |«      5  |j	                  d|j                  z   |j
                  ¬«      }t        j                  |j                  «      |_        ddd«       |j                  «      5  |j                  dt        j                  j                  j                  ||f«      }t        j                  |j                  «      |_        ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zO
        Update attribute corresponding to a given intermediate value.
        r  rÈ  NrE  )r  rË   rä   rN  rs  ry   r¸  rÔ   rO  rL   rP  rQ  rR  )rc   rÓ   ri   r�   r  Únew_ival_nodes         r4   rO   z_IVals.update®  sâ   € ð 	�	‰	�$—)‘)Ñ× Ñ  Ô%ð ×"Ñ" 4Ó(ñ 	2ØŸ™ z°D·I±IÑ'=ÈÏÉ˜ÓSˆIÜ!ŸY™Y t§y¡yÓ1ˆIŒN÷	2ð ×"Ñ" 9Ó-ñ 	6Ø!×-Ñ-Ø¤§¡§¡×!5Ñ!5¸	À4Ð7HóˆMô "&§¡¨4¯9©9Ó!5ˆMÔ÷		6ð 	6÷	2ð 	2ú÷	6ð 	6ús   ºADÂ"ADÄDÄDc                 ó0  — d|fg}|D ]�  }|D ]†  }|j                  |j                  |j                  f«       |j                  j                  }|j                  D ]8  }|j
                  | j                  v sŒ| j                  |j                  ||«       Œ: Œˆ Œ� t        t        «      }| j                  j                  «       D ]   \  }	}
|
D ]  }||   j                  |	«       Œ Œ" |D ].  \  }}||   D ]!  }	d|	› �}t        ||| j                  |	   «       Œ# Œ0 y)zÍ
        Update attributes corresponding to intermediate values that were read.
        Finally, initialize attributes in all modules that read or update
        corresponding intermediate values.
        rÁ   r  N)r�   rÓ   r*   ri   r‹   rË   r  rO   r   r{   r  rQ   rK   )rc   Ú
partitionsr  ÚentriesÚshared_submodulesrõ   ri   r�   rØ   rË   r  rÓ   r¯   Ú	ival_names                 r4   rÚ   z_IVals.create¾  s%  € ð ˜Ð$Ð%ˆØ!+ò 	<ÐØ*ò <�Ø—‘ §	¡	¨5¯<©<Ð8Ô9ØŸ™×*Ñ*�Ø!ŸK™Kò <�DØ—y‘y D§L¡LÒ0ØŸ™ E§I¡I¨u°dÕ;ñ<ñ<ð	<ô œDÓ!ˆØŸ)™)Ÿ/™/Ó+ò 	(‰JˆD�$Øò (�Ø�c‘
×!Ñ! $Õ'ñ(ð	(ð  ò 	<‰HˆC�Ø˜c™
ò <�Ø& t fÐ-�	ô ˜˜Y¨¯©°TÑ(:Õ;ñ	<ñ	<r3   N)r+   r,   r-   r›   rm   rÙ  rO   rÚ   r2   r3   r4   r×   r×   |  s   „ ñò2òò$6ó <r3   r×   rù   c                 ó”   — |j                  «       D ]5  \  }}|rt        ||«      n|}|D ]  }t        | |«      }t        |||«       Œ Œ7 y rA   )rQ   r   r¤   rK   )r}  r  rù   rd  Únamesr*   rË   rß  s           r4   rÜ   rÜ   Ü  sX   € ð
 '×,Ñ,Ó.ò 'Ñˆ	�5Ù6?”˜;¨	Ô2À[ˆØò 	'ˆDÜ˜"˜dÓ#ˆCÜ�F˜D #Õ&ñ	'ñ'r3   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 )NFr?   T)rò   r9  rÓ   rª  ri  rc  r|  r*   r¨  rH   r   rP   r:  r©  r;   r;  )r  r  r  r  rõ   rd  r;   ÚdeduplicatedÚseenr§  rX   rË   Úseen_child_fqnÚseen_targets                 r4   rî   rî   è  s?  € Ø ÐØ'ó $,ÐÜ!Ð"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Ø'+™ò=,ò#	,ð$,ðL #Ð"r3   r
  ÚscopeÚmodule_id_to_inputs_removedc           	      ó¢  ‡‡— ‰€t        t        «      Št        | «      ‰v rt        | «      ‰t        | «         iS | j                  j	                  «       D ]e  \  }Št        t        t        j                  j                  ‰«      |||gz   ‰«      }|j	                  «       D ]  \  }}‰|   j                  |«       Œ Œg t        | dd«      }|�t        |j                  «      dk(  r‰S t        |t        j                  j                   «      sJ ‚t#        t%        d„ |j                  «      «      }	|	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J ‚|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.
    Nri   r   c                 ó    — | j                   dk(  S )Nr‡   ©rŒ   ©r  s    r4   rH  z_sink_params.<locals>.<lambda>B  s   €  1§4¡4¨=Ñ#8€ r3   r£  c                 ó    — | j                   dk(  S )Nrª   r*  r+  s    r4   rH  z_sink_params.<locals>.<lambda>F  s   € ¨¯©°Ñ)>€ r3   c                 ó8   •— | j                   ‰t        ‰«         vS rA   )rË   râ   )r  r'  Ú	submodules    €€r4   rH  z_sink_params.<locals>.<lambda>N  s   ø€ ˜aŸf™fÐ,GÌÈ9ËÑ,VÐV€ r3   r?   rÌ   rs  T)Úpropagate_meta)%r   rI   râ   rP   rQ   rí   r
   rL   rM   rN   rO   r¤   r}   r‹   rR   r€   rœ   r{   Úfilterr   r;   r   rƒ   rË   rH   rá  r   rU   rW   rN  rO  r®   rS  Ú
erase_noderä   r!   r�   )r*   r
  r&  r'  rË   Úsubmod_id_to_inputs_removedrD   rX  ri   r·  Úthe_last_inputÚcall_module_nodesr�   Úinputs_to_state_of_scopeÚ
state_nameÚsnÚsn_splitr$  Úinputs_removedÚ	attr_pathÚ
state_attrrG  r.  s      `                  @r4   rí   rí     s3  ù€ ð, #Ð*Ü&1´#Ó&6Ð#ä	ˆ&ƒzÐ0Ñ0Ü�6“
Ð7¼¸6»
ÑCÐDÐDð "Ÿ?™?×0Ñ0Ó2ò 5‰ˆˆiÜ&2Ü”—‘—‘ )Ó,ØØ�T�F‰NØ'ó	'
Ð#ð 0×5Ñ5Ó7ò 	5‰DˆAˆqØ'¨Ñ*×1Ñ1°!Õ4ñ	5ð5ô �F˜G TÓ*€EØ€}œ˜EŸK™KÓ(¨AÒ-à*Ð*ä�eœUŸX™XŸ^™^Ô,Ð,Ð,ä”&Ñ8¸%¿+¹+ÓFÓG€FØ˜B‘Z€Nô Ñ>ÀÇÁÓLÐØ!ò 
ˆÜ˜f d§k¡kÓ2ˆ	ð Ñ ¤R¨	£]Ð6QÒ%QÜÜÜVØ—I‘IóóˆD�Ið
ð @BÐØò 4ˆØ�9‰9˜OÑ+Øàˆ
Ø! $§)¡)Ñ,ò 	ˆBØ—x‘x “}ˆHØ˜œ#˜e›*Ð%À5Ö)I¸a¨!¯'©'°#«,°q«/Ò)IÓIØ%�
Ùð		ð ÐØà)3Ð  Ò&ð/4ô4  #›u€Nà4×:Ñ:Ó<ò &ÑˆˆjÜˆt�z‰z‹?˜QÒØ"¤3 u£: <Ð0ˆIÜ0°¸ÓCˆJÜ˜j¬5¯<©<¼×9KÑ9KÐ*LÔMÐMÐMð ×&Ñ& ~Ó6ñ NØ ×,Ñ,¨Z¸¿¹À)Ó9LÓM�÷Nð ×&Ñ& xÀÐ&ÔEà×Ñ˜ÔØ×Ñ˜4Ÿ9™9Õ%ð&ô �&Ô+Ô,Ø�‰Ôäˆv‹J˜Ð'Ð'ùòO *J÷8Nð Nús   Ç)M 
Ê("MÍM	)TrA   )rÁ   )dr¸   r¸  Úloggingr„  r›  Úcollectionsr   Ú
contextlibr   r   Údataclassesr   Úenumr   Útypingr   r	   r
   r   r   rL   Útorch.fx._pytreer€   Ú_pytreerŠ  Útorch.utils._pytreeÚutilsrº   Ú"torch._library.fake_class_registryr   Útorch.export._tree_utilsr   Útorch.export.exported_programr   r   r   r   r   r   r   r   r   Útorch.fx._symbolic_tracer   Útorch.fx.graph_moduler   r   r   r   r   Ú_remove_effect_tokens_passr   Ú	getLoggerr+   ÚlogÚ__all__r&   r6   r8   rU   rW   rM   rN   re   Úboolr\   r^   r!   r"   ÚABCr    r#   r$   rœ   rÖ   rb  ri  r|  r�  rˆ   ro  rˆ  r�  r�  r’  r—  r5  r9  rB   rŸ  r³  rÙ   r¼   rô   r×   rI   rÜ   rî   r{   rí   r2   r3   r4   ú<module>rQ     sp  ðã 
Û Û Û Û 	Ý #Ý %Ý Ý !Ý ß 7Õ 7ã ß $Ð $ß $Ð $Ý ?Ý 3÷
÷ 
õ 
õ 3ß UÑ Uß 7å =ð €g×Ñ˜Ó!€ò€ô�ô ð Ð ð ñ(ó ð(ð" ñ00Ø�E—L‘L %×"4Ñ"4°e·h±h·o±oÐEÑFð00à�x‰x�‰ð00ð ð00ð ð	00ð
 ó00÷fñ ôU
˜¨¯©¯©ô U
ôp-" .°%·(±(·/±/ô -"ô`�c—g‘gô ô"R
˜Ÿ™Ÿ™ô R
ðl MQñ8Øð8Ø08¸Ñ0Ið8àó8ð48)Ø�8‰8�>‰>ð8)à)ð8)ð 
ó8)òvRð
6 #ð 6°#ð 6¸#ó 6ð$6 §¡§¡ð 6°E·H±H·O±Oó 6ð4�%—(‘(—/‘/ð ¨Có ð˜%Ÿ(™(×.Ñ.ð ¸¿¹¿¹ó ðRØˆe�h‰h×"Ñ"Ð$5Ð7HÐHÑIðRà
‡X�X‡]�]óRðMØˆe�h‰h×"Ñ"Ð$5Ð7HÐHÑIðMà
‡X�X‡]�]óMð%˜Ÿ™Ÿ™ð %°ó %ð* AEñ	)Ø	�‰�‰ð)àð)ð —8‘8—?‘?ð)ð ˜H c U¨E¯H©H¯O©OÐ%;Ñ<Ñ=ó	)ð41�Sð 1˜Sð 1 Só 1ðJ˜Sð J¨ð J°ó J÷
uñ uðp ÷ð ó ðð$ E§H¡H§N¡Nð $ÐARó $ð4 GIñ,Ø�H‰H�O‰Oð,Ø(,¨S°#¨X©ð,Ø@Có,÷,]<ñ ]<ð@	'Ø�‰×Ñð	'à"ð	'ð �S˜#˜c™(�]Ñ#ó	'ò(#ð^ BFñ	p(Ø�H‰H�O‰Oðp(à˜#˜t C™y˜.Ñ)ðp(ð �‰9ðp(ð "*¨$¨s°C¸±H¨}Ñ*=Ñ!>ô	p(r3   