Ë
    óÍ:j ã                   óú  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZ 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© ó    úk/home/mcse/projects/srt_converter/srt-converter-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_interpreterr9   ;   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   )
r:   r;   r<   r=   r>   ÚprefixÚfieldÚ
to_modulesÚtsrG   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óÐ=ô Øä—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 rB   )r`   ©Úselfs    r4   Ú	type_namez_SubmoduleBase.type_name~   s   € Ø�x‰xˆr3   N)r+   r,   r-   r   ÚstrÚ__annotations__re   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 rB   )ÚsuperÚ__init__rj   r`   Úowning_moduler7   Ú_run_with_interpreter)rd   rj   rk   Ú	__class__s      €r4   rn   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rB   r2   )rD   Ú
kwarg_nameÚkwargss     €r4   rH   z,InterpreterModule.forward.<locals>.<genexpr>§   s&   øè ø€ ò  à"Ø! VÑ+ð ˜:Õ&ñ ùs   ƒ©rj   Úenable_io_processingF)ri   r   rM   ÚcompilerÚis_dynamo_compilingrp   ÚtypeÚforwardÚlistÚ	arg_namesÚlenÚextendÚtupleÚfxÚInterpreterrj   Úrun)rd   Úargsru   Úarg_listÚkwarg_namess     `  r4   r{   zInterpreterModule.forward•   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 )Nri   Úplaceholder)rM   r�   ÚGraphModulerj   Ú__dict__Úlintr}   ÚnodesÚopÚappendr<   ©rd   Ú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   ©rd   Úprint_outputÚinclude_strideÚinclude_deviceÚcoloreds        r4   Úprint_readablez InterpreterModule.print_readableÉ   ó#   € ô ØØØØØØó
ð 	
r3   rB   ©TFFF)r+   r,   r-   Ú__doc__r   rM   r�   r‰   rg   ÚGraphrf   rn   r{   r‘   r™   Ú__classcell__©rq   s   @r4   r!   r!   ‚   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   )rm   rn   rQ   rL   Úgetattrr`   Ú_call_modulesÚ
_num_calls)rd   r¡   r¢   Úaccessorrq   s       €r4   rn   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)rd   r„   ru   Úcall_modules       r4   r{   z#InterpreterModuleDispatcher.forwardë   sd   € Ø×(Ñ(¨¯©Ñ9ˆØŸ?™?¨QÑ.´#°d×6HÑ6HÓ2IÑIˆŒð	Ù Ð/¨Ñ/Ð/øÜò 	ØˆDŒOØð	ús   ÁA ÁAc                 ó   — | j                   S rB   )r¦   rc   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)rd   r•   r–   r—   r˜   ÚmodÚoutputss          r4   r™   z*InterpreterModuleDispatcher.print_readable÷   sV   € ð ×)Ñ)ö
ð ð ×ÑØØØØõ	ð
ˆð 
ð �y‰y˜Ó!Ð!ùò
s   �=r›   )r+   r,   r-   rœ   rJ   rf   r|   r!   rn   r{   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	   dee	   fd	„«       Zy)r    zN
    Adapts input arguments with ``input_spec`` to align ``target_spec``.
    NÚtarget_specÚ
input_specÚ
input_argsÚmetadataÚobjra   c                  ó   — y)z=NOTE: This adapter may mutate given ``input_args_with_path``.Nr2   )rd   r³   r´   rµ   r¶   r·   s         r4   ÚadaptzFlatArgsAdapter.adapt  s   € ð 	r3   )NN)r+   r,   r-   rœ   ÚabcÚabstractmethodÚpytreeÚTreeSpecr|   r   r   Údictrf   r¹   r2   r3   r4   r    r    
  s„   „ ñð 	×Ñð .2Ø!ñ	à—_‘_ð	ð —O‘Oð	ð ˜‘Ið		ð
 ˜4  S ™>Ñ*ð	ð �c‰]ð	ð 
ˆc‰ò	ó ñ	r3   r    c                   óf   ‡ — e Zd Z	 ddedee   fˆ fd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ 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                  «       | _        | | 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“                  «        | 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 rB   )rŽ   )Úobj_idÚ	node_nameÚtarget_nameÚ	name_listÚ
consts_maps       €r4   Úadd_to_consts_mapz5UnflattenedModule.__init__.<locals>.add_to_consts_map±  s    ø€ Ø" 6Ñ*ˆIØ×Ñ˜i¨Ð5Õ6r3   Únamez?Constants should be either aliased or appear in graph signaturer   ú@rˆ   ©Úremove_duplicate)Krm   rn   Úgraph_signatureÚbackward_signatureÚ
ValueErrorÚmodule_call_graphÚfqnr   rj   rM   r�   r�   ro   rÁ   ri   ÚmetaÚadaptedr7   rp   Ú#_inplace_buffer_and_input_mutationsÚ_IValsÚivalsÚ_outline_submodulesrP   ÚvaluesÚ_copy_graph_attrsÚ_graph_moduleÚrange_constraintsÚequality_constraintsÚ
state_dictrJ   Ú
parametersÚidrN   rT   ÚclonerÅ   r]   r&   r.   ÚaddÚnon_persistent_buffersÚbuffersÚ	constantsr/   rR   rS   rV   r0   r   r|   Úinput_specsÚkindr   r>   rK   Úargr<   rf   rÍ   ÚCONSTANT_TENSORÚ
CUSTOM_OBJÚ_sink_paramsÚ_deduplicate_modulesÚ_dispatch_modulesrŒ   r�   Úinput_placeholdersÚcheck_input_constraintsÚ	enumerateÚnamed_modulesr~   Ú_reorder_submodulesr‹   r‘   )+rd   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Ë   rq   s+                                            @€r4   rn   zUnflattenedModule.__init__  sZ  ù€ ô
 	‰ÑÔØ×(Ñ(×;Ñ;Ð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ˆÔ"ä+¨L¸$×:NÑ:NÔOä“XˆŒ
ä#6°|ÀTÓ#JÑ ˆ�jð 	�
‰
×Ñ˜,×-Ñ-Ó/Ô0ô 	˜-×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˜Ø Ò/Ü˜%“y JÑ.ð Ø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 )Ô,Ø�
‰
�‰ÔØ�‰�ùòu Lùò~ 2ùò Sùò ?ùò
#
ùó
 ?s6   Á d#ß"d(à+	d-à5d-á	d2ád2á9d7âd7â/d<c                 óò   — | j                  «       D ]d  \  }}t        |dz   «       t        |d«      sŒ!t        |j                  t
        j                  j                  «      sŒPt        |j                  «       Œf y )Nú:rj   )rô   ÚprintrK   rS   rj   rM   r�   r�   )rd   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 specified. Are you sure you are calling this with the right arguments? )r³   r´   rµ   r¶   r·   z<Flat args adaption failed, number of args mismatch Adatped: z 
Exported module: )	rÔ   Ú	signatureÚin_specrÁ   Ú	TypeErrorr¹   rÖ   r~   Ú
num_leaves)rd   Ú	flat_argsr  Úinputr  s        r4   Ú_adapt_flat_argsz"UnflattenedModule._adapt_flat_args  sÜ   € Ø×*Ñ*¨1Ñ-×7Ñ7ˆ	Ø�i×'Ñ'Ò'ØÐà×!Ñ!Ð)ÜðOóð ð
 ×.Ñ.×4Ñ4Ø%×-Ñ-Ø"Ø$ØŸ™Øð 5ó ˆIô �9‹~ ×!2Ñ!2×!=Ñ!=Ò=Üð Ü # I£Ð/ð 0(Ø(1×(9Ñ(9×(DÑ(DÐ'EðGóð ð
 Ðr3   c                 óz  — | j                   d   j                  }|}|rt        ||j                  «      }t	        j
                  ||f«      \  }}|D �cg c]  }|d   ‘Œ	 }}t        «       r|S ||j                  k7  rN| j                  s(t        d|› d�d|j                  › �«       t        d«       | j                  |||«      }d| _        | j                  r\ddlm}	 | j                  du r(|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ß   )rd   r„   ru   r  Úreordered_kwargsÚflat_args_with_pathr  Úxr  r   rë   Únew_flat_args_with_paths               r4   Úprocess_forward_inputsz(UnflattenedModule.process_forward_inputs#  sd  € Ø×*Ñ*¨1Ñ-×7Ñ7ˆ	à!ÐÙÜ-¨f°i×6GÑ6GÓHÐä'-×'DÑ'DØÐ#Ð$ó(
Ñ$Ð˜Wð $7Ö7˜a�Q�q“TÐ7ˆ	Ð7äŒ?ØÐà�i×'Ñ'Ò'Ø—<’<Üð'Ø'. i¨rð3à0°×1BÑ1BÐ0CÐDôô
 ÐMÔNØ×-Ñ-¨i¸À$ÓGˆIØˆDŒLà×'Ò'õ Oà�|‰|˜tÑ#ð  )ö+àô " aÔ(¬*Ð:NÔ*OÐPÐRUÒVð+Ð'ñ +ð
 +>Ð'á.Ø×'Ñ'Ð)@À$×BXÑBXôð ÐùòI 8ùò2+s   ÁD3Ã-!D8c                 ó¼  — t        j                  j                  | j                  d¬«      |i |¤Ž}| j                  d   j
                  }t        «       r_t        j                  j                  | | j                  ¬«      j                  |ddiŽ}t        |t        «      rt        |«      dk(  r|d   S |S t         j                  j                  «       s| j                   s' t#        | j$                  «      j&                  | g|¢­Ž }n:t        j                  j                  | | j                  ¬«      j                  |ddiŽ}t)        j*                  ||j,                  «      S )Nz*do not trace into preprocessing the inputs)Úreasonr   rv   rw   Fr   )rM   Ú_dynamoÚdisabler(  rÔ   r  r   r�   r‚   rj   rƒ   rS   r€   r~   rx   ry   rp   rz   ri   r{   r¼   Útree_unflattenÚout_spec)rd   r„   ru   r  r  Ú
return_valÚtree_outs          r4   r{   zUnflattenedModule.forwardS  s:  € Ü—M‘M×)Ñ)Ø×'Ñ'Ø?ð *ó 
ð ðð ñˆ	ð ×*Ñ*¨1Ñ-×7Ñ7ˆ	äŒ?ÜŸ™×-Ñ-¨d¸$¿*¹*Ð-ÓE×IÑIØðØ16ñˆJô ˜*¤eÔ,´°Z³ÀAÒ1EØ! !‘}Ð$ØÐä�>‰>×-Ñ-Ô/°t×7QÒ7QØ6”t˜D×-Ñ-Ó.×6Ñ6°tÐH¸iÒH‰Hä—x‘x×+Ñ+¨D¸¿
¹
Ð+ÓC×GÑGØðØ16ñˆHô ×$Ñ$ X¨y×/AÑ/AÓBÐBr3   c                 ó¦   — t         j                  j                  | | j                  «      | j                  d<   | j                  j                  «        y )Nri   )rM   r�   r‰   rj   rŠ   r‹   rc   s    r4   r‘   zUnflattenedModule.finalizek  s3   € Ü(-¯©×(<Ñ(<¸TÀ4Ç:Á:Ó(Nˆ�‰�nÑ%Ø�
‰
�‰Õr3   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<   rI   )rY   rj   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Ï   rj   r¦   N)r   r|   rÔ   rÕ   r  r   ÚgetrI   rŽ   ÚintrJ   Úrsplitrå   rR   Úsortedr~   ÚrangeÚ
_call_namer   rQ   ÚpopÚset_submoduler"   rô   rK   rj   r¦   )rd   r  r  rö   rÕ   r°   Úbaser!  Ú	attrs_mapr<   Úorig_fqnrÍ   Úindexed_call_modulesr
  r¢   r  rY   r7  Úmod_r6  s                      @r4   rð   z#UnflattenedModule._dispatch_moduleso  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   rB   r›   )r+   r,   r-   r   r   r    rn   r  r  r(  r{   r‘   rð   r™   rž   rŸ   s   @r4   r#   r#     s\   ø„ ð 8<ñcà&ðcð $ OÑ4õcòJ!òò6.ò`Cò0ò88ðx ØØØ÷
r3   r#   r*   rÁ   ra   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   rj   rÑ   c                 ó  ‡— t        t        t        | j                  «      «      «      }|j                  dk(  rt        |j                  «      dk(  sJ ‚|j                  d   }| j                  D �ci c]  }|j                  dk(  sŒ|j                  |“Œ! }}i }|j                  j                  «       D ��ci c]  \  }}||“Œ
 }	}}|j                  j                  «       D ��ci c]  \  }}||	|   “Œ }}}|j                  |j                  «       t        |«      }
|d|
 D ]¸  }||j                     }||   }| j                  |«      5  | j                  dt        j                   j"                  j$                  j&                  ||f«      Š|j(                  j                  «       D ]  \  }}|‰j(                  |<   Œ 	 ddd«       |j+                  ‰ˆfd„«       Œº t-        ||
d «      }|f|_        yc c}w c c}}w c c}}w # 1 sw Y   ŒHxY w)a^  Transform buffer and input mutations from their functionalized form
    into copy_ nodes in the graph.

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

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

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

    Input mutations are handled similarly.
    Úoutputr   r   rˆ   NÚcall_functionc                 ó   •— | ‰uS rB   r2   )r&  Únew_nodes    €r4   ú<lambda>z5_inplace_buffer_and_input_mutations.<locals>.<lambda>  s   ø€ ¸1ÀHÐ;L€ r3   )ÚnextÚiterÚreversedrŒ   r�   r~   r„   rÍ   Úinputs_to_buffersrR   Úbuffers_to_mutaterP   Úuser_inputs_to_mutateÚinserting_afterÚcreate_noderM   ÚopsÚatenÚcopy_ÚdefaultrÖ   Úreplace_all_uses_withr€   )rj   rÑ   Úoutput_nodeÚreturn_argsr�   Úinput_name_to_nodeÚmutation_name_to_input_namerE   Ú
buffer_fqnÚbuffer_fqn_to_input_nameÚnum_mutationsÚmutationÚ
input_nameÚ
input_nodeÚvÚuser_outputsrK  s                   @r4   rØ   rØ   Ô  s  ø€ ô: ”tœH U§[¡[Ó1Ó2Ó3€KØ�>‰>˜XÒ%¬#¨k×.>Ñ.>Ó*?À1Ò*DÐDÐDØ×"Ñ" 1Ñ%€Kð %*§K¡KöØ °4·7±7¸mÓ3Kˆ�	‰	�4‰ðÐð ð #%Ðð ,;×+LÑ+L×+RÑ+RÓ+T÷ Ù'˜!˜Zˆ
�A‰ð Ðñ  ð
 -×>Ñ>×DÑDÓF÷#áˆAˆzð 	
Ð# JÑ/Ñ/ð#Ðñ #ð
  ×&Ñ& ×'LÑ'LÔMäÐ3Ó4€Mà  Ð/ò NˆØ0°·±Ñ?ˆ
Ø'¨
Ñ3ˆ
à×"Ñ" 8Ó,ñ 	%à×(Ñ(Ø¤§¡§¡×!5Ñ!5×!=Ñ!=À
ÈHÐ?UóˆHð !Ÿ™×+Ñ+Ó-ò %‘��1Ø#$�—‘˜aÒ ñ%÷	%ð 	×&Ñ& xÓ1LÕMðNô" ˜ ] ^Ð4Ó5€LØ%Ð(€KÕùòIùó ùó#÷	%ð 	%ús%   Á/G1ÂG1Â4G6Ã!G<ÅA3HÈH	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_prefixrh    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.)rI   r~   ÚRuntimeErrorr¯   )ri  rj  Úparent_splitÚchild_splits       r4   Ú_compute_accessorro  !  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 )Nrj   ra   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 )Nra   c                 ó–   •— t        | t        j                  j                  «      rdt	        ‰t        | «         «      z   S t	        | «      S )Nú%)rS   rM   r�   ÚNoderf   rã   )rë   Ú	nodes_idxs    €r4   Úarg_dumpz>_check_graph_equivalence.<locals>.graph_dump.<locals>.arg_dump8  s7   ø€ Ü˜#œuŸx™xŸ}™}Ô-ØœS ¬2¨c«7Ñ!3Ó4Ñ4Ð4Ü�s“8ˆOr3   ú=)rI  Úget_attrrÃ   z: ú[z](z, ú)r®   )rf   ró   rŒ   r¼   Útree_mapr„   ru   rR   r�   r<   rŽ   r¯   rã   )rj   Úretrw  r  r�   rë   Ú	args_dumpÚkeyÚvaluer<   rv  s             @r4   Ú
graph_dumpz,_check_graph_equivalence.<locals>.graph_dump4  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$
)rM   r�   r�   rf   rS   rj   )r&  rp  r�  s      r4   Ú_check_graph_equivalencer‚  3  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   )rK   rL   )rƒ  Úspecr  rÍ   s       r4   Ú	_add_specr‡  M  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¤   )rj   rI  r¼   Útree_flattenÚoperatorÚgetitem)rƒ  r�   ÚflattenÚ	getitem_0s       r4   Ú_generate_flattenrŽ  V  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 rB   )r‡  rj   ry  rI  Ú	fx_pytreeÚtree_flatten_spec)rƒ  r�   r†  rÍ   Ú	spec_nodes        r4   Ú_generate_flatten_specr“  \  sF   € ô �R˜Ó€DØ—‘×!Ñ! $Ó'€IØ�8‰8×!Ñ!¤)×"=Ñ"=ÀÀiÐ?PÓQÐQr3   c                 ó¨   — t        | |«      }| j                  j                  |«      }| j                  j                  t        j
                  ||f«      S rB   )r‡  rj   ry  rI  r¼   r-  )rƒ  rŒ   r†  rÍ   r’  s        r4   Ú_generate_unflattenr•  d  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@   )rI   r¥   rS   rM   rN   rO   )r°   r<   rY   rZ   rG   Úsubmods         r4   Ú_get_submoduler˜  l  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)
rI   ró   r¥   r¯   rM   rN   rO   rL   rS   Ú
add_module)	r°   r<   r™  rš  rY   rZ   r  rG   r—  s	            r4   Ú_add_submoduler�  }  sª   € ð —\‘\ #Ó&�N€VˆUä˜VÓ$ò ‰ˆˆ4Ü˜˜d DÓ)ˆàˆ>ØÐ(Ù& s§x¡x°°w¸¸Q¹°Ó'@Ó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   r=  r=  —  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   rC   rC   �  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Ú   ©rk   c                 óð   •— ‰j                   r‰j                   › d| › �n| }|‰j                  v r‰j                  |   S t        t        j                  j                  «       ‰¬«      }|‰j                  |<   |S )Nr@   rª  )rÕ   Úcreated_modulesr!   rM   r�   r�   )rÕ   r5  r—  Úparentrd   rk   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   )ri  Úparent_moduleÚparent_call_modulerÕ   Úcall_idxr*   é   Ú_positional_arg_rI  Ú
_constant_)r�   r<   r„   rÍ   )>r¦  rŒ   Ú
seen_nodesrù   rú   r¬  r­  r§  Ú	module_idrÔ   ÚverboserÕ   r=  rj  r*   rK   rÚ   r8  r!   rM   r�   r�   rj   Únode_mapÚnode_to_placeholderr¯  ro  r�  r«   rQ   rŽ   Ú_SubmoduleEntryr  Únum_childrenÚchildren_specsÚcontextrS  r<  rˆ   r“  r€   ró   ÚinputsrT  rŠ  r‹  rS   r   rÍ   ÚcopyrÖ   Úinserting_beforer€  r   r   r   r   Úremap_inputr•  rI  r„   ru   )"rd   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_nodesr  Úinputs_nodeÚ	args_nodeÚkwargs_noder  rE   rk   s"   `      `                         @r4   rn   z_ModuleFrame.__init__£  su  ú€ ð %ˆŒØˆŒ
Ø$ˆŒØ(ˆÔØ$ˆŒØ.ˆÔØˆŒØ(ˆÔØ"ˆŒà!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°·±ÀÇÁÑ1JÒKñ!÷ð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Õ   rj   r¦  r¿  rˆ   rÍ   rz   r¾  rÖ   r¸  )rd   r&  Úplaceholder_nodes      r4   Úadd_placeholderz_ModuleFrame.add_placeholderG  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 rB   )r¼   Útree_map_onlyrM   r�   ru  rÀ  r„   ru   rj   rI  r<   r¾  rÖ   r·  )rd   r&  r„   ru   r�   s        r4   Úcopy_sym_call_functionz#_ModuleFrame.copy_sym_call_functionR  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                 ó6  — |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                  «      �| j>                  jA                  | |«      S tC        d|j
                  › d	|› �«      ‚# 1 sw Y   �ŒðxY w)
Nzremap_input(r{  rˆ   r   rI  r,   Ú	_operatorz(Could not run remap_input() on op type: z
 for node )"rj   r¦  r·  r  r¸  r�   rÔ   r8  rÕ   rÏ  r¯  r­  r¿  Ú
insert_argrÀ  r<   rM   rU  rV  Úsym_sizer9  rG   rX  ÚunbindÚsumÚdim_IntListÚviewÚdiffrK   r,   rÒ  rÚ   Úreadrl  )rd   r&  s     r4   rÀ  z_ModuleFrame.remap_input`  sS  € Ø�w‰w˜$Ÿ/™/Ñ)Ð)Ð)Ø�—‘ÑØ—=‘= Ñ#Ð#Ø�
‰
�\ !  AÐ&Ô'Ø�×(Ñ(Ñ(Ø×+Ñ+¨AÑ.Ð.à�D‰D�MÒ! T×%;Ñ%;×%?Ñ%?ÀÇÁÓ%IÐ%Qð × Ñ  Ô#Ø×&Ñ&Ð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¨Ó+Ð+äØ:¸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        t        f«      rS|j                  ‰ j                  v r)|j!                  ‰ j                  |j                     «       Œi|j!                  d «       Œ{t#        d|› �«      ‚ ˆ fd„Št%        ‰ j&                  t)        ˆfd„|D «       «      |j*                  «      }t-        ‰ j                  j&                  ‰ j.                  |j*                  «      }|}nšg }‰ j0                  j3                  «       D ]\  }|j4                  D ]K  }|j                  ‰ j                  vsŒ|j!                  |«       |j!                  ‰ j0                  |   «        Œ\ Œ^ ‰ j.                  }t7        |«      dk(  r|d   }t        |t8        t:        j<                  j>                  f«      sJ ‚‰ j@                  jC                  |«       |€y t        |t:        j<                  j>                  «      r|jD                  j	                  d«      n(|D �	cg c]  }	|	jD                  j	                  d«      ‘Œ c}	|jD                  d<   t7        |«      dk(  r|€|‰ j                  j0                  |d   <   y tG        |«      D ]u  \  }
}|€Œ	t:        j<                  jI                  |«      |
   jJ                  }|jD                  j	                  d«      |jD                  d<   |‰ j                  j0                  |<   Œw y c c}	w )Nz'Unsupported data type for output node: c                 óæ   •— | €y ‰j                   | j                     }|‰j                  v r‰j                  |   S |‰j                  v r‰j                  |   S t	        d| › d‰j
                  › �«      ‚)NzCould not find output node z	. Graph: )r´  rÍ   r·  r¸  rl  rj   )rH  Ú	seen_noderd   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rB   r2   )rD   rH  rà  s     €r4   rH   z0_ModuleFrame.finalize_outputs.<locals>.<genexpr>¶  s   øè ø€ ÒP¸Ñ,¨V×4ÑPùs   ƒr   r   Úval)&r¬  r>  rÕ   rÔ   r8  rj  r­  r±   rS   r   r   r   r   r   rÍ   r´  rŽ   rl  r•  r*   r€   r.  r“  r¯  r·  ÚkeysÚusersr~   r|   rM   r�   ru  rj   rH  rÖ   ró   ÚProxyr�   )rd   Úorig_outputsr  rH  Útree_out_nodeÚ
parent_outÚgraph_outputsÚ	orig_nodeÚ	user_nodeÚor  Úorig_outputÚ	proxy_outrà  s   `            @r4   Úfinalize_outputsz_ModuleFrame.finalize_outputs‹  sò  ù€ Ø×Ñ× Ñ  §¡¨4Ô0àˆà×*Ñ*×.Ñ.¨t¯~©~Ó>ˆ	ØÑ  T§[¡[Ñ%<Ø#×+Ñ+ò �ÜØä&Ü&Ü'Ü(Ü(ðô	ð —{‘{ d§o¡oÑ5Ø$×+Ñ+¨D¯O©O¸F¿K¹KÑ,HÕIà$×+Ñ+¨DÕ1ä&ØAÀ&ÀÐJóð ð!ô(ô 0Ø—‘ÜÓPÀ<ÔPÓPØ×"Ñ"óˆMô
 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   Ê"M0c                 óÜ   — | j                  d|j                  «       «       | j                  j                  || j                  «      | j
                  |<   || j                  |j                  <   y )NÚcopying)r  Úformat_noderj   Ú	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   rH  )
ró   r¦  rŒ   r  rÖ   r8  rò  r�   rô  Úrun_from)rd   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 rB   )r¶  r  )rd   r„   ru   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ˆ   ÚSTEPrH  r   rö  z(Unable to find nn_module_stack for node )Ú_EMPTY_NN_MODULE_STACK_KEYrÎ   r©  Ú	outliningzCreating new stack frame forry  ) r~   rŒ   r�   r  rò  r§  rï  rÖ   r8  rl  Ú(torch._export.passes._node_metadata_hookrý  rR   r9  rI   rÕ   rj   rh  r|   rã  r¥  r¦  r´  rù   rú   r¬  rÔ   r÷  rj  rå   r<   rô  )rd   rø  Ú
module_idxr�   Údepthrö  rý  Únode_module_stackrE   r5  rk   Ú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rB   )r+   r,   r-   rM   r�   r�   r€   ru  r|   rf   r   r9  r¾   r   r   r‰   r#   rn   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òò)òVX>òt*ò
%ò&#ó[r3   r¥  c                   óÂ   — e Zd ZU eed<   ej                  j                  ed<   ej                  j                  ed<   eed<   e
ed<   ej                  j                  ed<   y)r¹  ri  r®  r¯  rÕ   r°  r*   N)r+   r,   r-   rf   rg   rM   rN   rO   r�   ru  r9  r2   r3   r4   r¹  r¹  _  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|   rJ   r¥  r€   rŒ   rÔ   r  rÕ   rù  )r  r  r´  rù   rú   r¬  rö   s          r4   rÛ   rÛ   i  s    € Ø+-€JÜ5@ÄÓ5F€LÜ&1´#Ó&6€JØ24€OÜØÜˆj×ÑÓØØØØØØ	ˆØ
ð %×6Ñ6ö	
àØ�Šð �I‰I�u—‘Ñ&ò	
ð
 ô÷  �i„kØ˜Ð#Ð#ùò	
s   Á*Br­  r  rY   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@   )rY   )r  )r|   rã  r˜  r�  rM   rN   rO   rQ   rR   rõ   rI   ÚdelattrrŽ   ÚsortrŠ  Ú
itemgetterÚregister_module)r­  r  rY   rÕ   ÚchildrenrÍ   Úchildr
  s           r4   rõ   rõ   ‚  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Ù   aY  
    Collect the intermediate values of mutations in a graph.

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

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

    Here ival1 and ival2 are intermediate values created inside
    calls to n0 and n1 respectively, and used inside calls to
    n1 and n2 respectively.
    c                 ó,   — t        t        «      | _        y rB   )r   rJ   Únode_names_by_fqnrc   s    r4   rn   z_IVals.__init__­  s   € ä!,¬SÓ!1ˆÕr3   c                 óx   — t        |t        j                  j                  «      r|j                  j
                  S yr6   )rS   rM   Ú_opsÚ
OpOverloadÚ_schemaÚ
is_mutable)rd   r<   s     r4   Ú_is_mutablez_IVals._is_mutable±  s)   € Ü�fœeŸj™j×3Ñ3Ô4Ø—>‘>×,Ñ,Ð,Ør3   c                 ó|  — |j                   dk(  sJ ‚| j                  |j                  «      }t        d|j                  |«       |sZt	        t        |j                  d   j                  «       «      «      \  }}| j                  |   j                  |j                  «       |j                  |j                  d   «      S )zI
        Read state corresponding to a given intermediate value.
        rI  zChecking mutabilityrö  r   )r�   r  r<   r  rM  rO  rÖ   rÜ   r  rå   rÍ   rÀ  r„   )rd   Úmfr�   ÚbrÕ   r
  s         r4   rÜ  z_IVals.read¶  sš   € ð
 �w‰w˜/Ò)Ð)Ð)Ø×Ñ˜TŸ[™[Ó)ˆÜÐ# T§[¡[°!Ô4Ùô œ( 4§9¡9Ð->Ñ#?×#FÑ#FÓ#HÓIÓJ‰FˆC�Ø×"Ñ" 3Ñ'×+Ñ+¨D¯I©IÔ6Ø�~‰~˜dŸi™i¨™lÓ+Ð+r3   c           
      ó  — |D ]ó  }|D ]ì  }|j                   j                  }| j                  |j                     }|j                  D �cg c]  }|j
                  |v sŒ|‘Œ }}|D ]Ž  }|j                  |«      5  |j                  dt        j                  j                  j                  j                  |j                  d   |f«      }	t        j                  |j                  «      |	_        ddd«       Œ� Œî Œõ yc c}w # 1 sw Y   Œ¤xY w)zT
        Update states corresponding to intermediate values that were read.
        rI  r   N)r*   rj   r  rÕ   rŒ   rÍ   rS  rT  rM   rU  rV  rW  rX  r„   r¾  rÖ   )
rd   Ú
partitionsÚshared_submodulesrö   rj   Ú
node_namesr  rŒ   r�   rK  s
             r4   rP   z_IVals.updateÅ  s÷   € ð ",ò 	=ÐØ*ò =�ØŸ™×*Ñ*�Ø!×3Ñ3°E·I±IÑ>�
Ø$)§K¡KÖH˜q°1·6±6¸ZÒ3GšÐH�ÐHØ!ò 	=�Dð ×.Ñ.¨tÓ4ñ =Ø#(×#4Ñ#4Ø+Ü!ŸI™IŸN™N×0Ñ0×8Ñ8Ø!ŸY™Y q™\¨4Ð0ó$˜ô
 )-¯	©	°$·)±)Ó(<˜œ÷=ð =ñ	=ñ	=ñ	=ùò I÷=ð =ús   ÁC:ÁC:Á8A3C?	Ã?DN)r+   r,   r-   rœ   rn   r  rÜ  rP   r2   r3   r4   rÙ   rÙ   ˜  s   „ ñò(2òò
,ó=r3   rÙ   rú   c                 ó”   — |j                  «       D ]5  \  }}|rt        ||«      n|}|D ]  }t        | |«      }t        |||«       Œ Œ7 y rB   )rR   r   r¥   rL   )rƒ  r  rú   rj  Ú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ó   r=  rÕ   r°  ro  ri  r‚  r*   r®  rI   r   rQ   r>  r¯  r<   r?  )r  r  r  r  rö   rj  r<   ÚdeduplicatedÚseenr­  rY   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 ]M  \  }Št        t        d‰«      |||gz   ‰«      }|j	                  «       D ]  \  }}‰|   j                  |«       Œ ŒO t        | dd«      }|�t        |j                  «      dk(  r‰S t        |t        j                  j                  «      sJ ‚t        t!        d„ |j                  «      «      }	t        |	«      dk(  rdn|	d   }
t!        d„ |j                  «      }|D ]Q  }t#        | |j$                  «      Š‰€Œt        ‰«      ‰v sŒ*t'        t!        ˆˆfd„|j(                  «      «      |_        ŒS i }|	D ]u  }|j*                  |vrŒd}||j*                     D ]H  }|j-                  d	«      }|dt        |«       |D �cg c]  }|j-                  d
«      d   ‘Œ c}k(  sŒF|} n |€Œq|||<   Œw t        «       }|j	                  «       D ]Ý  \  }}t        |j.                  «      dkD  r”|t        |«      d }t1        | |«      }t        |t        j2                  t        j4                  f«      sJ ‚|j7                  |
«      5  |j9                  dd	j;                  |«      «      }ddd«       |j=                  d¬«       |j?                  |«       |jA                  |j*                  «       Œß t        | tB        «      r| jE                  «        t        | «      |iS c c}w # 1 sw Y   Œ|xY w)a  Sink params, buffers, and constants from graph inputs into get_attr nodes.

    Exported modules are purely functional, so they pass their parameters and
    buffers in as inputs to the graph.

    To replicate eager's semantics, we need to get them from the module state
    via get_attr instead.

    module: GraphModule, potentially containing nested submodules.
    inputs_to_state: mapping graph input names to the corresponding key in the state_dict.
    scope: tracks where we are in the module hierarchy, so that we can emit the
        right `getattr(self, "foo.bar")` calls, etc.
    module_id_to_inputs_removed: records inputs removed by child modules, mapping
        the module object id to the list of placeholder node names in the child module
        that were removed.
    Nztorch.nn.Modulerj   r   c                 ó    — | j                   dk(  S )Nrˆ   ©r�   ©r  s    r4   rL  z_sink_params.<locals>.<lambda>@  s   €  1§4¡4¨=Ñ#8€ r3   r©  c                 ó    — | j                   dk(  S )Nr«   r+  r,  s    r4   rL  z_sink_params.<locals>.<lambda>D  s   € ¨¯©°Ñ)>€ r3   c                 ó8   •— | j                   ‰t        ‰«         vS rB   )rÍ   rã   )r  r(  Ú	submodules    €€r4   rL  z_sink_params.<locals>.<lambda>L  s   ø€ ˜aŸf™fÐ,GÌÈ9ËÑ,VÐV€ r3   r@   rÎ   ry  T)Úpropagate_meta)#r   rJ   rã   rQ   rR   rî   r
   rP   r¥   r~   rŒ   rS   rM   r�   r�   r|   Úfilterr   r<   r€   r„   rÍ   rI   rä  r   rV   rX   rS  rT  r¯   rY  Ú
erase_noderå   r!   r‘   )r*   r  r'  r(  rÍ   Úsubmod_id_to_inputs_removedrE   rd  rj   r½  Úthe_last_inputÚcall_module_nodesr�   Úinputs_to_state_of_scopeÚ
state_nameÚsnÚsn_splitr&  Úinputs_removedÚ	attr_pathÚ
state_attrrK  r/  s      `                  @r4   rî   rî     s9  ù€ ð, #Ð*Ü&1´#Ó&6Ð#ä	ˆ&ƒzÐ0Ñ0Ü�6“
Ð7¼¸6»
ÑCÐDÐDð "Ÿ?™?×0Ñ0Ó2ò 5‰ˆˆiÜ&2ÜÐ" IÓ.ØØ�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Ü  ›[¨AÒ-‘T°6¸"±:€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   Ç!L8
Ê "L=Ì=M	)TrB   )rÃ   )drº   r¾  ÚloggingrŠ  r¡  Úcollectionsr   Ú
contextlibr   r   Údataclassesr   Úenumr   Útypingr   r	   r
   r   r   rM   Útorch.fx._pytreer�   Ú_pytreer�  Útorch.utils._pytreeÚutilsr¼   Ú"torch._library.fake_class_registryr   Útorch.export._tree_utilsr   Útorch.export.exported_programr   r   r   r   r   r   r   r   r   Útorch.fx._symbolic_tracer   Útorch.fx.graph_moduler   r   r   r   r   Ú_remove_effect_tokens_passr   Ú	getLoggerr+   ÚlogÚ__all__r&   r7   r9   rV   rX   rN   rO   rf   Úboolr]   r_   r!   r"   ÚABCr    r#   r$   r�   rØ   rh  ro  r‚  r‡  r‰   ru  rŽ  r“  r•  r˜  r�  r9  r=  rC   r¥  r¹  rÛ   r¾   rõ   rÙ   rJ   rÝ   rï   r|   rî   r2   r3   r4   ú<module>rR     sr  ðã 
Û Û Û Û 	Ý #Ý %Ý Ý !Ý ß 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ô ô$[
˜Ÿ™Ÿ™ô [
ð~ MQñ8Øð8Ø08¸Ñ0Ið8àó8ð4E)Ø�8‰8�>‰>ðE)à)ðE)ð 
óE)òP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÷
zñ zðz ÷ð ó ðð$ E§H¡H§N¡Nð $ÐARó $ð4 GIñ,Ø�H‰H�O‰Oð,Ø(,¨S°#¨X©ð,Ø@Có,÷,?=ñ ?=ðD	'Ø�‰×Ñð	'à"ð	'ð �S˜#˜c™(�]Ñ#ó	'ò(#ð^ BFñ	p(Ø�H‰H�O‰Oðp(à˜#˜t C™y˜.Ñ)ðp(ð �‰9ðp(ð "*¨$¨s°C¸±H¨}Ñ*=Ñ!>ô	p(r3   